From 01fcdc4aeaf93b71a63cd4ce14fcdfa592267ce7 Mon Sep 17 00:00:00 2001 From: UNITRONIX <36471318+UNITRONIX@users.noreply.github.com> Date: Sun, 7 Jun 2026 14:35:22 +0200 Subject: [PATCH] feat(billing): implement billing and time synchronization module Added a new billing service and time synchronization functionality to the server. This includes the creation of billing packages, contracts, and sessions, along with necessary database migrations. Updated API endpoints for billing management and integrated billing checks into signal handling. Enhanced configuration options for billing parameters and added localization support for billing-related messages. --- betterdesk-server/api/billing_handlers.go | 406 + betterdesk-server/api/server.go | 24 + betterdesk-server/api/timesync_handlers.go | 31 + betterdesk-server/auth/permissions.go | 9 + betterdesk-server/billing/export.go | 182 + betterdesk-server/billing/export_test.go | 32 + betterdesk-server/billing/service.go | 419 + betterdesk-server/billing/service_test.go | 53 + betterdesk-server/config/config.go | 57 +- betterdesk-server/db/billing_models.go | 103 + betterdesk-server/db/database.go | 30 + betterdesk-server/db/postgres.go | 77 + betterdesk-server/db/postgres_billing.go | 403 + betterdesk-server/db/sqlite.go | 92 + betterdesk-server/db/sqlite_billing.go | 506 ++ betterdesk-server/main.go | 20 + betterdesk-server/relay/server.go | 17 + betterdesk-server/signal/handler.go | 46 +- betterdesk-server/signal/server.go | 8 + betterdesk-server/timesync/ntp.go | 76 + betterdesk-server/timesync/ntp_test.go | 30 + betterdesk-server/timesync/os_linux.go | 25 + betterdesk-server/timesync/os_other.go | 7 + betterdesk-server/timesync/service.go | 221 + web-nodejs/.env.example | 7 + web-nodejs/lang/ar.json | 7207 +++++++++-------- web-nodejs/lang/cs.json | 7193 ++++++++-------- web-nodejs/lang/da.json | 7205 ++++++++-------- web-nodejs/lang/de.json | 7193 ++++++++-------- web-nodejs/lang/en.json | 95 +- web-nodejs/lang/es.json | 7193 ++++++++-------- web-nodejs/lang/fi.json | 7205 ++++++++-------- web-nodejs/lang/fr.json | 7193 ++++++++-------- web-nodejs/lang/hi.json | 7205 ++++++++-------- web-nodejs/lang/hu.json | 7205 ++++++++-------- web-nodejs/lang/id.json | 7205 ++++++++-------- web-nodejs/lang/it.json | 7193 ++++++++-------- web-nodejs/lang/ja.json | 7193 ++++++++-------- web-nodejs/lang/ko.json | 7193 ++++++++-------- web-nodejs/lang/nb.json | 7205 ++++++++-------- web-nodejs/lang/nl.json | 7193 ++++++++-------- web-nodejs/lang/pl.json | 7205 ++++++++-------- web-nodejs/lang/pt.json | 7193 ++++++++-------- web-nodejs/lang/ro.json | 7205 ++++++++-------- web-nodejs/lang/sv.json | 7205 ++++++++-------- web-nodejs/lang/th.json | 7205 ++++++++-------- web-nodejs/lang/tr.json | 7205 ++++++++-------- web-nodejs/lang/uk.json | 7205 ++++++++-------- web-nodejs/lang/vi.json | 7205 ++++++++-------- web-nodejs/lang/zh-TW.json | 7193 ++++++++-------- web-nodejs/lang/zh.json | 7193 ++++++++-------- web-nodejs/middleware/auth.js | 2 + web-nodejs/package.json | 2 + web-nodejs/public/css/commercialization.css | 79 + web-nodejs/public/css/main.css | 75 +- web-nodejs/public/css/variables.css | 2 + web-nodejs/public/js/billing-report.js | 160 + web-nodejs/public/js/commercialization.js | 386 + web-nodejs/public/js/remote.js | 7 + web-nodejs/routes/commercialization.routes.js | 139 + web-nodejs/routes/index.js | 2 + .../commercialization-i18n-sections.js | 269 + .../scripts/patch-commercialization-i18n.js | 310 + web-nodejs/views/commercialization.ejs | 172 + web-nodejs/views/partials/sidebar.ejs | 39 +- web-nodejs/views/remote.ejs | 2 +- 66 files changed, 95763 insertions(+), 88854 deletions(-) create mode 100644 betterdesk-server/api/billing_handlers.go create mode 100644 betterdesk-server/api/timesync_handlers.go create mode 100644 betterdesk-server/billing/export.go create mode 100644 betterdesk-server/billing/export_test.go create mode 100644 betterdesk-server/billing/service.go create mode 100644 betterdesk-server/billing/service_test.go create mode 100644 betterdesk-server/db/billing_models.go create mode 100644 betterdesk-server/db/postgres_billing.go create mode 100644 betterdesk-server/db/sqlite_billing.go create mode 100644 betterdesk-server/timesync/ntp.go create mode 100644 betterdesk-server/timesync/ntp_test.go create mode 100644 betterdesk-server/timesync/os_linux.go create mode 100644 betterdesk-server/timesync/os_other.go create mode 100644 betterdesk-server/timesync/service.go create mode 100644 web-nodejs/public/css/commercialization.css create mode 100644 web-nodejs/public/js/billing-report.js create mode 100644 web-nodejs/public/js/commercialization.js create mode 100644 web-nodejs/routes/commercialization.routes.js create mode 100644 web-nodejs/scripts/commercialization-i18n-sections.js create mode 100644 web-nodejs/scripts/patch-commercialization-i18n.js create mode 100644 web-nodejs/views/commercialization.ejs diff --git a/betterdesk-server/api/billing_handlers.go b/betterdesk-server/api/billing_handlers.go new file mode 100644 index 00000000..d741a710 --- /dev/null +++ b/betterdesk-server/api/billing_handlers.go @@ -0,0 +1,406 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" + "strings" + "time" + + "github.com/google/uuid" + "github.com/unitronix/betterdesk-server/billing" + "github.com/unitronix/betterdesk-server/db" +) + +// SetBillingService attaches the billing engine. +func (s *Server) SetBillingService(b *billing.Service) { + s.billing = b +} + +// GET /api/billing/packages +func (s *Server) handleListBillingPackages(w http.ResponseWriter, r *http.Request) { + pkgs, err := s.db.ListBillingPackages() + if err != nil { + writeInternalError(w, err, "ListBillingPackages") + return + } + if pkgs == nil { + pkgs = []*db.BillingPackage{} + } + writeJSON(w, http.StatusOK, map[string]any{"packages": pkgs}) +} + +// POST /api/billing/packages +func (s *Server) handleCreateBillingPackage(w http.ResponseWriter, r *http.Request) { + var body db.BillingPackage + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + body.Name = strings.TrimSpace(body.Name) + if body.Name == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "name required"}) + return + } + if body.ID == "" { + body.ID = uuid.New().String() + } + if body.Currency == "" { + body.Currency = "PLN" + } + if err := s.db.CreateBillingPackage(&body); err != nil { + writeInternalError(w, err, "CreateBillingPackage") + return + } + writeJSON(w, http.StatusCreated, body) +} + +// PUT /api/billing/packages/{id} +func (s *Server) handleUpdateBillingPackage(w http.ResponseWriter, r *http.Request) { + id := r.PathValue("id") + var body db.BillingPackage + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + body.ID = id + if err := s.db.UpdateBillingPackage(&body); err != nil { + writeInternalError(w, err, "UpdateBillingPackage") + return + } + writeJSON(w, http.StatusOK, body) +} + +// DELETE /api/billing/packages/{id} +func (s *Server) handleDeleteBillingPackage(w http.ResponseWriter, r *http.Request) { + if err := s.db.DeleteBillingPackage(r.PathValue("id")); err != nil { + writeInternalError(w, err, "DeleteBillingPackage") + return + } + writeJSON(w, http.StatusOK, map[string]string{"ok": "true"}) +} + +// GET /api/billing/contracts?org_id= +func (s *Server) handleListBillingContracts(w http.ResponseWriter, r *http.Request) { + filter := db.BillingContractFilter{ + OrgID: r.URL.Query().Get("org_id"), + Status: r.URL.Query().Get("status"), + } + contracts, err := s.db.ListBillingOrgContracts(filter) + if err != nil { + writeInternalError(w, err, "ListBillingOrgContracts") + return + } + if contracts == nil { + contracts = []*db.BillingOrgContract{} + } + writeJSON(w, http.StatusOK, map[string]any{"contracts": contracts}) +} + +// POST /api/billing/contracts +func (s *Server) handleCreateBillingContract(w http.ResponseWriter, r *http.Request) { + var body db.BillingOrgContract + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + if body.OrgID == "" || body.PackageID == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "org_id and package_id required"}) + return + } + if body.ID == "" { + body.ID = uuid.New().String() + } + if body.Status == "" { + body.Status = billing.ContractActive + } + if body.Currency == "" { + body.Currency = "PLN" + } + if body.RemainingMinutes == 0 { + if pkg, err := s.db.GetBillingPackage(body.PackageID); err == nil && pkg != nil { + body.RemainingMinutes = pkg.IncludedMinutes + } + } + if err := s.db.CreateBillingOrgContract(&body); err != nil { + writeInternalError(w, err, "CreateBillingOrgContract") + return + } + writeJSON(w, http.StatusCreated, body) +} + +// PUT /api/billing/contracts/{id} +func (s *Server) handleUpdateBillingContract(w http.ResponseWriter, r *http.Request) { + id := r.PathValue("id") + existing, err := s.db.GetBillingOrgContract(id) + if err != nil { + writeInternalError(w, err, "GetBillingOrgContract") + return + } + if existing == nil { + writeJSON(w, http.StatusNotFound, map[string]string{"error": "contract not found"}) + return + } + var patch map[string]json.RawMessage + if err := json.NewDecoder(r.Body).Decode(&patch); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + if raw, ok := patch["status"]; ok { + var status string + if err := json.Unmarshal(raw, &status); err == nil && status != "" { + existing.Status = status + } + } + if raw, ok := patch["remaining_minutes"]; ok { + var mins int + if err := json.Unmarshal(raw, &mins); err == nil { + existing.RemainingMinutes = mins + } + } + if raw, ok := patch["overage_rate"]; ok { + var rate *float64 + if err := json.Unmarshal(raw, &rate); err == nil { + existing.OverageRate = rate + } + } + if raw, ok := patch["hourly_rate"]; ok { + var rate float64 + if err := json.Unmarshal(raw, &rate); err == nil { + existing.HourlyRate = rate + } + } + if raw, ok := patch["currency"]; ok { + var cur string + if err := json.Unmarshal(raw, &cur); err == nil && cur != "" { + existing.Currency = cur + } + } + if err := s.db.UpdateBillingOrgContract(existing); err != nil { + writeInternalError(w, err, "UpdateBillingOrgContract") + return + } + writeJSON(w, http.StatusOK, existing) +} + +// GET /api/billing/sessions +func (s *Server) handleListBillingSessions(w http.ResponseWriter, r *http.Request) { + filter := db.BillingSessionFilter{OrgID: r.URL.Query().Get("org_id"), Status: r.URL.Query().Get("status")} + if v := r.URL.Query().Get("limit"); v != "" { + if n, err := strconv.Atoi(v); err == nil { + filter.Limit = n + } + } + sessions, err := s.db.ListBillingSessions(filter) + if err != nil { + writeInternalError(w, err, "ListBillingSessions") + return + } + if sessions == nil { + sessions = []*db.BillingSession{} + } + writeJSON(w, http.StatusOK, map[string]any{"sessions": sessions}) +} + +// GET /api/billing/reports +func (s *Server) handleListBillingReports(w http.ResponseWriter, r *http.Request) { + limit := 100 + if v := r.URL.Query().Get("limit"); v != "" { + if n, err := strconv.Atoi(v); err == nil { + limit = n + } + } + reports, err := s.db.ListBillingWorkReports(r.URL.Query().Get("org_id"), limit) + if err != nil { + writeInternalError(w, err, "ListBillingWorkReports") + return + } + if reports == nil { + reports = []*db.BillingWorkReport{} + } + writeJSON(w, http.StatusOK, map[string]any{"reports": reports}) +} + +// POST /api/billing/sessions/{id}/report +func (s *Server) handleSubmitBillingReport(w http.ResponseWriter, r *http.Request) { + if s.billing == nil { + writeJSON(w, http.StatusServiceUnavailable, map[string]string{"error": "billing not configured"}) + return + } + sessionID := r.PathValue("id") + var body struct { + Summary string `json:"summary"` + Category string `json:"category"` + TicketRef string `json:"ticket_ref"` + } + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + operatorID := getUsernameFromCtx(r) + if operatorID == "" { + operatorID = r.Header.Get("X-Operator-Id") + } + if operatorID == "" { + operatorID = "operator" + } + if err := s.billing.SubmitWorkReport(sessionID, operatorID, body.Summary, body.Category, body.TicketRef); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": err.Error()}) + return + } + writeJSON(w, http.StatusOK, map[string]string{"ok": "true"}) +} + +// GET /api/billing/currencies +func (s *Server) handleListBillingCurrencies(w http.ResponseWriter, r *http.Request) { + cur, err := s.db.ListBillingCurrencies() + if err != nil { + writeInternalError(w, err, "ListBillingCurrencies") + return + } + if cur == nil { + cur = []*db.BillingCurrency{} + } + writeJSON(w, http.StatusOK, map[string]any{"currencies": cur}) +} + +// PUT /api/billing/currencies/{code} +func (s *Server) handleUpsertBillingCurrency(w http.ResponseWriter, r *http.Request) { + var body db.BillingCurrency + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON"}) + return + } + body.Code = strings.ToUpper(r.PathValue("code")) + if body.Code == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "code required"}) + return + } + if err := s.db.UpsertBillingCurrency(&body); err != nil { + writeInternalError(w, err, "UpsertBillingCurrency") + return + } + writeJSON(w, http.StatusOK, body) +} + +// GET /api/billing/check?device_id= +func (s *Server) handleBillingConnectionCheck(w http.ResponseWriter, r *http.Request) { + deviceID := r.URL.Query().Get("device_id") + if deviceID == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "device_id required"}) + return + } + if s.billing == nil { + writeJSON(w, http.StatusOK, billing.ConnectionCheckResult{Allowed: true}) + return + } + writeJSON(w, http.StatusOK, s.billing.CheckConnection(deviceID)) +} + +// GET /api/billing/sessions/pending?device_id= +func (s *Server) handleGetPendingBillingSession(w http.ResponseWriter, r *http.Request) { + deviceID := strings.TrimSpace(r.URL.Query().Get("device_id")) + if deviceID == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "device_id required"}) + return + } + sessions, err := s.db.ListBillingSessions(db.BillingSessionFilter{ + DeviceID: deviceID, + Status: billing.StatusPendingReport, + Limit: 1, + }) + if err != nil { + writeInternalError(w, err, "ListBillingSessions") + return + } + if len(sessions) == 0 { + writeJSON(w, http.StatusOK, map[string]any{"session": nil}) + return + } + writeJSON(w, http.StatusOK, map[string]any{"session": sessions[0]}) +} + +// GET /api/billing/reports/export?format=csv|pdf&org_id= +func (s *Server) handleExportBillingReports(w http.ResponseWriter, r *http.Request) { + format := strings.ToLower(r.URL.Query().Get("format")) + if format == "" { + format = "csv" + } + orgID := r.URL.Query().Get("org_id") + reports, err := s.db.ListBillingWorkReports(orgID, 5000) + if err != nil { + writeInternalError(w, err, "ListBillingWorkReports") + return + } + sessions, err := s.db.ListBillingSessions(db.BillingSessionFilter{OrgID: orgID, Limit: 5000}) + if err != nil { + writeInternalError(w, err, "ListBillingSessions") + return + } + sessMap := make(map[string]*db.BillingSession, len(sessions)) + for _, sess := range sessions { + sessMap[sess.ID] = sess + } + rows := billing.BuildReportExportRows(reports, sessMap) + stamp := time.Now().UTC().Format("20060102") + + switch format { + case "csv": + data, err := billing.WriteReportsCSV(rows) + if err != nil { + writeInternalError(w, err, "WriteReportsCSV") + return + } + w.Header().Set("Content-Type", "text/csv; charset=utf-8") + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="billing-reports-%s.csv"`, stamp)) + w.Write(data) + case "pdf": + data := billing.WriteReportsPDF(rows, "BetterDesk — Work Reports") + w.Header().Set("Content-Type", "application/pdf") + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="billing-reports-%s.pdf"`, stamp)) + w.Write(data) + default: + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "format must be csv or pdf"}) + } +} + +// GET /api/billing/sessions/export?format=csv&org_id= +func (s *Server) handleExportBillingSessions(w http.ResponseWriter, r *http.Request) { + format := strings.ToLower(r.URL.Query().Get("format")) + if format != "csv" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "only csv supported"}) + return + } + orgID := r.URL.Query().Get("org_id") + sessions, err := s.db.ListBillingSessions(db.BillingSessionFilter{OrgID: orgID, Limit: 5000}) + if err != nil { + writeInternalError(w, err, "ListBillingSessions") + return + } + exportRows := make([]billing.SessionExportRow, 0, len(sessions)) + for _, sess := range sessions { + exportRows = append(exportRows, billing.SessionExportRow{ + ID: sess.ID, + OrgID: sess.OrgID, + DeviceID: sess.DeviceID, + OperatorID: sess.OperatorID, + Status: sess.Status, + BillingPhase: sess.BillingPhase, + BilledMinutes: sess.BilledMinutes, + AmountOverage: sess.AmountOverage, + Currency: sess.Currency, + StartedAt: sess.StartedAt, + EndedAt: sess.EndedAt, + }) + } + data, err := billing.WriteSessionsCSV(exportRows) + if err != nil { + writeInternalError(w, err, "WriteSessionsCSV") + return + } + stamp := time.Now().UTC().Format("20060102") + w.Header().Set("Content-Type", "text/csv; charset=utf-8") + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="billing-sessions-%s.csv"`, stamp)) + w.Write(data) +} diff --git a/betterdesk-server/api/server.go b/betterdesk-server/api/server.go index f32c5ccb..b3a5e4f0 100644 --- a/betterdesk-server/api/server.go +++ b/betterdesk-server/api/server.go @@ -19,6 +19,7 @@ import ( "github.com/unitronix/betterdesk-server/audit" "github.com/unitronix/betterdesk-server/auth" + "github.com/unitronix/betterdesk-server/billing" "github.com/unitronix/betterdesk-server/cdap" "github.com/unitronix/betterdesk-server/config" "github.com/unitronix/betterdesk-server/crypto" @@ -29,6 +30,7 @@ import ( "github.com/unitronix/betterdesk-server/ratelimit" "github.com/unitronix/betterdesk-server/relay" "github.com/unitronix/betterdesk-server/security" + "github.com/unitronix/betterdesk-server/timesync" "github.com/coder/websocket" "golang.org/x/crypto/bcrypt" @@ -66,6 +68,8 @@ type Server struct { oidcProvider *auth.OIDCProvider // OIDC/OAuth2 auth provider (nil if not configured) clientTFASessions *tfaSessionStore panelStore db.PanelSyncStore // device groups, folders, ACL (PostgreSQL or legacy auth.db) + timeSync *timesync.Service + billing *billing.Service httpSrv *http.Server wg sync.WaitGroup version string @@ -421,6 +425,26 @@ func (s *Server) Start(ctx context.Context) error { mux.HandleFunc("POST /api/help/requests/{id}/acknowledge", s.requirePermission(auth.PermChatAccess, s.handleAcknowledgeHelpRequest)) mux.HandleFunc("POST /api/help/requests/{id}/resolve", s.requirePermission(auth.PermChatAccess, s.handleResolveHelpRequest)) + // Time sync / billing (commercialization) + mux.HandleFunc("GET /api/timesync/status", s.requirePermission(auth.PermBillingView, s.handleTimeSyncStatus)) + mux.HandleFunc("POST /api/timesync/check", s.requirePermission(auth.PermServerConfig, s.handleTimeSyncCheck)) + mux.HandleFunc("GET /api/billing/check", s.requirePermission(auth.PermDeviceConnect, s.handleBillingConnectionCheck)) + mux.HandleFunc("GET /api/billing/packages", s.requirePermission(auth.PermBillingView, s.handleListBillingPackages)) + mux.HandleFunc("POST /api/billing/packages", s.requirePermission(auth.PermBillingManage, s.handleCreateBillingPackage)) + mux.HandleFunc("PUT /api/billing/packages/{id}", s.requirePermission(auth.PermBillingManage, s.handleUpdateBillingPackage)) + mux.HandleFunc("DELETE /api/billing/packages/{id}", s.requirePermission(auth.PermBillingManage, s.handleDeleteBillingPackage)) + mux.HandleFunc("GET /api/billing/contracts", s.requirePermission(auth.PermBillingView, s.handleListBillingContracts)) + mux.HandleFunc("POST /api/billing/contracts", s.requirePermission(auth.PermBillingManage, s.handleCreateBillingContract)) + mux.HandleFunc("PUT /api/billing/contracts/{id}", s.requirePermission(auth.PermBillingManage, s.handleUpdateBillingContract)) + mux.HandleFunc("GET /api/billing/sessions", s.requirePermission(auth.PermBillingView, s.handleListBillingSessions)) + mux.HandleFunc("GET /api/billing/sessions/pending", s.requirePermission(auth.PermBillingReports, s.handleGetPendingBillingSession)) + mux.HandleFunc("GET /api/billing/sessions/export", s.requirePermission(auth.PermBillingExport, s.handleExportBillingSessions)) + mux.HandleFunc("GET /api/billing/reports", s.requirePermission(auth.PermBillingView, s.handleListBillingReports)) + mux.HandleFunc("GET /api/billing/reports/export", s.requirePermission(auth.PermBillingExport, s.handleExportBillingReports)) + mux.HandleFunc("POST /api/billing/sessions/{id}/report", s.requirePermission(auth.PermBillingReports, s.handleSubmitBillingReport)) + mux.HandleFunc("GET /api/billing/currencies", s.requirePermission(auth.PermBillingView, s.handleListBillingCurrencies)) + mux.HandleFunc("PUT /api/billing/currencies/{code}", s.requirePermission(auth.PermBillingManage, s.handleUpsertBillingCurrency)) + // Enrollment — operator approval (admin/operator) mux.HandleFunc("GET /api/enrollment/pending", s.requireRole(auth.RoleOperator, s.handleListPendingDevices)) mux.HandleFunc("POST /api/enrollment/approve/{id}", s.requireRole(auth.RoleOperator, s.handleApproveDevice)) diff --git a/betterdesk-server/api/timesync_handlers.go b/betterdesk-server/api/timesync_handlers.go new file mode 100644 index 00000000..9b38a01e --- /dev/null +++ b/betterdesk-server/api/timesync_handlers.go @@ -0,0 +1,31 @@ +package api + +import ( + "net/http" + + "github.com/unitronix/betterdesk-server/timesync" +) + +// SetTimeSyncService attaches the clock monitor. +func (s *Server) SetTimeSyncService(ts *timesync.Service) { + s.timeSync = ts +} + +// GET /api/timesync/status +func (s *Server) handleTimeSyncStatus(w http.ResponseWriter, r *http.Request) { + if s.timeSync == nil { + writeJSON(w, http.StatusServiceUnavailable, map[string]string{"error": "timesync not configured"}) + return + } + writeJSON(w, http.StatusOK, s.timeSync.GetStatus()) +} + +// POST /api/timesync/check +func (s *Server) handleTimeSyncCheck(w http.ResponseWriter, r *http.Request) { + if s.timeSync == nil { + writeJSON(w, http.StatusServiceUnavailable, map[string]string{"error": "timesync not configured"}) + return + } + st := s.timeSync.CheckNow() + writeJSON(w, http.StatusOK, st) +} diff --git a/betterdesk-server/auth/permissions.go b/betterdesk-server/auth/permissions.go index b28f2aba..c2e21c48 100644 --- a/betterdesk-server/auth/permissions.go +++ b/betterdesk-server/auth/permissions.go @@ -55,6 +55,12 @@ const ( // Branding PermBrandingEdit = "branding.edit" + + // Billing / commercialization + PermBillingView = "billing.view" + PermBillingManage = "billing.manage" + PermBillingReports = "billing.reports" + PermBillingExport = "billing.export" ) // AllPermissions is the complete list of permission strings for validation. @@ -69,6 +75,7 @@ var AllPermissions = []string{ PermEnrollmentManage, PermEnrollmentApprove, PermChatAccess, PermBrandingEdit, + PermBillingView, PermBillingManage, PermBillingReports, PermBillingExport, } // DefaultRolePermissions maps each built-in role to its default set of permissions. @@ -109,6 +116,7 @@ var DefaultRolePermissions = map[string]map[string]bool{ PermChatAccess, PermEnrollmentManage, PermEnrollmentApprove, PermBrandingEdit, + PermBillingView, PermBillingManage, PermBillingReports, PermBillingExport, }), RoleOperator: buildPermMap([]string{ @@ -119,6 +127,7 @@ var DefaultRolePermissions = map[string]map[string]bool{ PermEnrollmentApprove, PermChatAccess, PermOrgManageDevices, + PermBillingView, PermBillingReports, }), RoleViewer: buildPermMap([]string{ PermDeviceView, diff --git a/betterdesk-server/billing/export.go b/betterdesk-server/billing/export.go new file mode 100644 index 00000000..1f19f526 --- /dev/null +++ b/betterdesk-server/billing/export.go @@ -0,0 +1,182 @@ +package billing + +import ( + "bytes" + "encoding/csv" + "fmt" + "strconv" + "strings" + "time" + + "github.com/unitronix/betterdesk-server/db" +) + +// ReportExportRow is a flattened work report for export. +type ReportExportRow struct { + SessionID string + DeviceID string + OrgID string + OperatorID string + Summary string + Category string + TicketRef string + BilledMin int + Amount float64 + Currency string + CreatedAt time.Time +} + +// SessionExportRow is a flattened billing session for export. +type SessionExportRow struct { + ID string + OrgID string + DeviceID string + OperatorID string + Status string + BillingPhase string + BilledMinutes int + AmountOverage float64 + Currency string + StartedAt time.Time + EndedAt *time.Time +} + +// WriteReportsCSV writes work reports as CSV bytes. +func WriteReportsCSV(rows []ReportExportRow) ([]byte, error) { + var buf bytes.Buffer + w := csv.NewWriter(&buf) + _ = w.Write([]string{"session_id", "device_id", "org_id", "operator_id", "summary", "category", "ticket_ref", "billed_minutes", "amount", "currency", "created_at"}) + for _, r := range rows { + _ = w.Write([]string{ + r.SessionID, r.DeviceID, r.OrgID, r.OperatorID, r.Summary, r.Category, r.TicketRef, + strconv.Itoa(r.BilledMin), fmt.Sprintf("%.2f", r.Amount), r.Currency, r.CreatedAt.Format(time.RFC3339), + }) + } + w.Flush() + return buf.Bytes(), w.Error() +} + +// WriteSessionsCSV writes billing sessions as CSV bytes. +func WriteSessionsCSV(rows []SessionExportRow) ([]byte, error) { + var buf bytes.Buffer + w := csv.NewWriter(&buf) + _ = w.Write([]string{"id", "org_id", "device_id", "operator_id", "status", "billing_phase", "billed_minutes", "amount_overage", "currency", "started_at", "ended_at"}) + for _, r := range rows { + ended := "" + if r.EndedAt != nil { + ended = r.EndedAt.Format(time.RFC3339) + } + _ = w.Write([]string{ + r.ID, r.OrgID, r.DeviceID, r.OperatorID, r.Status, r.BillingPhase, + strconv.Itoa(r.BilledMinutes), fmt.Sprintf("%.2f", r.AmountOverage), r.Currency, + r.StartedAt.Format(time.RFC3339), ended, + }) + } + w.Flush() + return buf.Bytes(), w.Error() +} + +// WriteReportsPDF writes a minimal text PDF with report lines. +func WriteReportsPDF(rows []ReportExportRow, title string) []byte { + var lines []string + lines = append(lines, title) + lines = append(lines, fmt.Sprintf("Generated: %s", time.Now().UTC().Format(time.RFC3339))) + lines = append(lines, "") + for i, r := range rows { + lines = append(lines, fmt.Sprintf("#%d Session: %s", i+1, r.SessionID)) + lines = append(lines, fmt.Sprintf("Device: %s Org: %s Operator: %s", r.DeviceID, r.OrgID, r.OperatorID)) + lines = append(lines, fmt.Sprintf("Time: %s Billed: %d min Amount: %.2f %s", r.CreatedAt.Format(time.RFC3339), r.BilledMin, r.Amount, r.Currency)) + if r.Category != "" { + lines = append(lines, "Category: "+r.Category) + } + if r.TicketRef != "" { + lines = append(lines, "Ticket: "+r.TicketRef) + } + lines = append(lines, "Summary: "+sanitizePDFText(r.Summary)) + lines = append(lines, "") + } + return simpleTextPDF(lines) +} + +func sanitizePDFText(s string) string { + s = strings.ReplaceAll(s, "\r", " ") + s = strings.ReplaceAll(s, "\n", " ") + return strings.TrimSpace(s) +} + +// simpleTextPDF builds a minimal valid PDF 1.4 document with Helvetica text. +func simpleTextPDF(lines []string) []byte { + var content strings.Builder + content.WriteString("BT\n/F1 10 Tf\n") + y := 770 + for _, line := range lines { + if y < 40 { + break + } + escaped := escapePDFString(line) + content.WriteString(fmt.Sprintf("1 0 0 1 40 %d Tm (%s) Tj\n", y, escaped)) + y -= 14 + } + content.WriteString("ET\n") + stream := content.String() + + var buf bytes.Buffer + w := func(s string) { buf.WriteString(s) } + w("%PDF-1.4\n") + offs := []int{0} + offs = append(offs, buf.Len()) + w("1 0 obj<< /Type /Catalog /Pages 2 0 R >>endobj\n") + offs = append(offs, buf.Len()) + w("2 0 obj<< /Type /Pages /Kids [3 0 R] /Count 1 >>endobj\n") + offs = append(offs, buf.Len()) + w("3 0 obj<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Resources << /Font << /F1 5 0 R >> >> /Contents 4 0 R >>endobj\n") + offs = append(offs, buf.Len()) + w(fmt.Sprintf("4 0 obj<< /Length %d >>stream\n%s\nendstream\nendobj\n", len(stream), stream)) + offs = append(offs, buf.Len()) + w("5 0 obj<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>endobj\n") + xref := buf.Len() + w("xref\n") + w(fmt.Sprintf("0 %d\n", len(offs))) + w("0000000000 65535 f \n") + for i := 1; i < len(offs); i++ { + w(fmt.Sprintf("%010d 00000 n \n", offs[i])) + } + w("trailer<< /Size 6 /Root 1 0 R >>\n") + w(fmt.Sprintf("startxref\n%d\n%%EOF\n", xref)) + return buf.Bytes() +} + +func escapePDFString(s string) string { + s = strings.ReplaceAll(s, `\`, `\\`) + s = strings.ReplaceAll(s, `(`, `\(`) + s = strings.ReplaceAll(s, `)`, `\)`) + r := []rune(s) + if len(r) > 200 { + r = r[:200] + } + return string(r) +} + +// BuildReportExportRows joins reports with session billing data. +func BuildReportExportRows(reports []*db.BillingWorkReport, sessions map[string]*db.BillingSession) []ReportExportRow { + out := make([]ReportExportRow, 0, len(reports)) + for _, r := range reports { + row := ReportExportRow{ + SessionID: r.SessionID, + OperatorID: r.OperatorID, + Summary: r.Summary, + Category: r.Category, + TicketRef: r.TicketRef, + CreatedAt: r.CreatedAt, + } + if sess, ok := sessions[r.SessionID]; ok && sess != nil { + row.DeviceID = sess.DeviceID + row.OrgID = sess.OrgID + row.BilledMin = sess.BilledMinutes + row.Amount = sess.AmountIncluded + sess.AmountOverage + row.Currency = sess.Currency + } + out = append(out, row) + } + return out +} diff --git a/betterdesk-server/billing/export_test.go b/betterdesk-server/billing/export_test.go new file mode 100644 index 00000000..07bd436f --- /dev/null +++ b/betterdesk-server/billing/export_test.go @@ -0,0 +1,32 @@ +package billing + +import ( + "testing" + "time" +) + +func TestWriteReportsCSV(t *testing.T) { + data, err := WriteReportsCSV([]ReportExportRow{{ + SessionID: "s1", DeviceID: "dev", Summary: "Fixed issue", CreatedAt: time.Now().UTC(), + }}) + if err != nil { + t.Fatal(err) + } + if len(data) == 0 || data[0] != 's' { + t.Fatalf("unexpected csv: %q", string(data[:20])) + } +} + +func TestSimpleTextPDF(t *testing.T) { + pdf := simpleTextPDF([]string{"BetterDesk billing report", "Line 2"}) + if len(pdf) < 100 || pdf[0] != '%' { + t.Fatal("invalid pdf header") + } +} + +func TestEscapePDFString(t *testing.T) { + got := escapePDFString(`test (parens) and \ backslash`) + if got == "" { + t.Fatal("empty") + } +} diff --git a/betterdesk-server/billing/service.go b/betterdesk-server/billing/service.go new file mode 100644 index 00000000..f1974b39 --- /dev/null +++ b/betterdesk-server/billing/service.go @@ -0,0 +1,419 @@ +package billing + +import ( + "context" + "errors" + "fmt" + "log" + "math" + "sync" + "time" + + "github.com/google/uuid" + "github.com/unitronix/betterdesk-server/db" + "github.com/unitronix/betterdesk-server/timesync" +) + +const ( + PhaseIncluded = "included" + PhaseOverage = "overage" + + StatusActive = "active" + StatusPendingReport = "pending_report" + StatusClosed = "closed" + + ContractActive = "active" + ContractSuspended = "suspended" + + LedgerSessionStart = "session_start" + LedgerPhaseChange = "phase_change" + LedgerSessionEnd = "session_end" +) + +// ConnectionCheckResult is returned before allowing a remote session. +type ConnectionCheckResult struct { + Allowed bool `json:"allowed"` + Reason string `json:"reason,omitempty"` + OrgID string `json:"org_id,omitempty"` + HasBilling bool `json:"has_billing"` +} + +// Service manages billable remote sessions. +type Service struct { + db db.Database + clock *timesync.Service + roundMin int + requireReport bool + + mu sync.Mutex + pending map[string]*pendingRelay // relayUUID -> meta + active map[string]*activeSession +} + +type pendingRelay struct { + OrgID string + DeviceID string + OperatorID string + ContractID string + Currency string +} + +type activeSession struct { + ID string + OrgID string + ContractID string + RelayUUID string + StartedAt time.Time + RemainingAtStart int + OverageRate float64 + HourlyRate float64 + Currency string + Phase string + LastBilledMin int +} + +// NewService creates a billing service. +func NewService(database db.Database, clock *timesync.Service, roundingMinutes int, requireWorkReport bool) *Service { + if roundingMinutes <= 0 { + roundingMinutes = 1 + } + return &Service{ + db: database, + clock: clock, + roundMin: roundingMinutes, + requireReport: requireWorkReport, + pending: make(map[string]*pendingRelay), + active: make(map[string]*activeSession), + } +} + +// Start launches the session ticker. +func (s *Service) Start(ctx context.Context) { + go s.ticker(ctx) +} + +func (s *Service) ticker(ctx context.Context) { + tick := time.NewTicker(10 * time.Second) + defer tick.Stop() + for { + select { + case <-ctx.Done(): + return + case <-tick.C: + s.tickActive() + } + } +} + +// CheckConnection evaluates whether a connection to deviceID may proceed. +func (s *Service) CheckConnection(deviceID string) ConnectionCheckResult { + orgID, err := s.db.GetDeviceOrgID(deviceID) + if err != nil || orgID == "" { + return ConnectionCheckResult{Allowed: true} + } + + if s.clock != nil && !s.clock.IsSynced() { + return ConnectionCheckResult{Allowed: false, Reason: "clock_unsynced", OrgID: orgID} + } + + contract, err := s.db.GetActiveBillingOrgContract(orgID) + if err != nil || contract == nil { + return ConnectionCheckResult{Allowed: true, OrgID: orgID} + } + if contract.Status == ContractSuspended { + return ConnectionCheckResult{Allowed: false, Reason: "billing_suspended", OrgID: orgID, HasBilling: true} + } + return ConnectionCheckResult{Allowed: true, OrgID: orgID, HasBilling: true} +} + +// PrepareRelay registers billing metadata when signal assigns a relay UUID. +func (s *Service) PrepareRelay(relayUUID, deviceID, operatorID string) error { + if relayUUID == "" { + return nil + } + check := s.CheckConnection(deviceID) + if !check.Allowed { + return fmt.Errorf("billing: %s", check.Reason) + } + if !check.HasBilling { + return nil + } + contract, err := s.db.GetActiveBillingOrgContract(check.OrgID) + if err != nil || contract == nil { + return nil + } + overage := contract.OverageRate + if overage == nil { + pkg, _ := s.db.GetBillingPackage(contract.PackageID) + if pkg != nil { + v := pkg.OverageRate + overage = &v + } + } + s.mu.Lock() + s.pending[relayUUID] = &pendingRelay{ + OrgID: check.OrgID, + DeviceID: deviceID, + OperatorID: operatorID, + ContractID: contract.ID, + Currency: contract.Currency, + } + s.mu.Unlock() + return nil +} + +// ActivateRelay starts the authoritative billing session when relay pairs. +func (s *Service) ActivateRelay(relayUUID string) { + if relayUUID == "" { + return + } + s.mu.Lock() + meta, ok := s.pending[relayUUID] + if !ok { + s.mu.Unlock() + return + } + delete(s.pending, relayUUID) + s.mu.Unlock() + + contract, err := s.db.GetBillingOrgContract(meta.ContractID) + if err != nil || contract == nil { + return + } + overageRate := contract.HourlyRate + if contract.OverageRate != nil { + overageRate = *contract.OverageRate + } else if pkg, err := s.db.GetBillingPackage(contract.PackageID); err == nil && pkg != nil { + overageRate = pkg.OverageRate + } + + now := time.Now().UTC() + if s.clock != nil { + now = s.clock.NowUTC() + } + sessionID := uuid.New().String() + synced := true + var offset int64 + if s.clock != nil { + st := s.clock.GetStatus() + synced = st.Synced + offset = st.OffsetMS + } + + sess := &db.BillingSession{ + ID: sessionID, + OrgID: meta.OrgID, + ContractID: meta.ContractID, + OperatorID: meta.OperatorID, + DeviceID: meta.DeviceID, + RelayUUID: relayUUID, + Transport: "rustdesk", + Status: StatusActive, + BillingPhase: PhaseIncluded, + StartedAt: now, + Currency: meta.Currency, + ClockOffsetMSAtStart: offset, + ClockSyncedAtStart: synced, + } + if err := s.db.CreateBillingSession(sess); err != nil { + log.Printf("[billing] CreateBillingSession: %v", err) + return + } + _ = s.db.InsertBillingLedgerEntry(&db.BillingSessionLedger{ + SessionID: sessionID, + EventType: LedgerSessionStart, + Details: relayUUID, + }) + + s.mu.Lock() + s.active[relayUUID] = &activeSession{ + ID: sessionID, + OrgID: meta.OrgID, + ContractID: meta.ContractID, + RelayUUID: relayUUID, + StartedAt: now, + RemainingAtStart: contract.RemainingMinutes, + OverageRate: overageRate, + HourlyRate: contract.HourlyRate, + Currency: meta.Currency, + Phase: PhaseIncluded, + } + s.mu.Unlock() +} + +// EndRelay finalizes a billing session when relay ends. +func (s *Service) EndRelay(relayUUID string) { + if relayUUID == "" { + return + } + s.mu.Lock() + active, ok := s.active[relayUUID] + if !ok { + s.mu.Unlock() + return + } + delete(s.active, relayUUID) + s.mu.Unlock() + s.finalizeSession(active) +} + +func (s *Service) tickActive() { + s.mu.Lock() + snap := make([]*activeSession, 0, len(s.active)) + for _, a := range s.active { + cp := *a + snap = append(snap, &cp) + } + s.mu.Unlock() + + for _, a := range snap { + s.updateActiveProgress(a) + } +} + +func (s *Service) updateActiveProgress(a *activeSession) { + now := time.Now().UTC() + if s.clock != nil { + now = s.clock.NowUTC() + } + rawSecs := int(now.Sub(a.StartedAt).Seconds()) + if rawSecs < 0 { + rawSecs = 0 + } + billedMin := roundUpMinutes(rawSecs, s.roundMin) + + s.mu.Lock() + cur, ok := s.active[a.RelayUUID] + if !ok { + s.mu.Unlock() + return + } + cur.LastBilledMin = billedMin + + overageMin := 0 + if billedMin > cur.RemainingAtStart { + overageMin = billedMin - cur.RemainingAtStart + } + newPhase := PhaseIncluded + if overageMin > 0 { + newPhase = PhaseOverage + } + if newPhase != cur.Phase { + cur.Phase = newPhase + s.mu.Unlock() + _ = s.db.InsertBillingLedgerEntry(&db.BillingSessionLedger{ + SessionID: cur.ID, + EventType: LedgerPhaseChange, + Details: newPhase, + }) + s.mu.Lock() + } + s.mu.Unlock() +} + +func (s *Service) finalizeSession(a *activeSession) { + now := time.Now().UTC() + if s.clock != nil { + now = s.clock.NowUTC() + } + rawSecs := int(now.Sub(a.StartedAt).Seconds()) + if rawSecs < 0 { + rawSecs = 0 + } + billedMin := roundUpMinutes(rawSecs, s.roundMin) + includedUsed := min(billedMin, a.RemainingAtStart) + overageMin := 0 + if billedMin > a.RemainingAtStart { + overageMin = billedMin - a.RemainingAtStart + } + phase := PhaseIncluded + if overageMin > 0 { + phase = PhaseOverage + } + + amountIncluded := (float64(includedUsed) / 60.0) * a.HourlyRate + amountOverage := (float64(overageMin) / 60.0) * a.OverageRate + status := StatusPendingReport + if !s.requireReport { + status = StatusClosed + } + + sess, err := s.db.GetBillingSession(a.ID) + if err != nil || sess == nil { + return + } + sess.EndedAt = &now + sess.RawSeconds = rawSecs + sess.BilledMinutes = billedMin + sess.IncludedMinutesUsed = includedUsed + sess.OverageMinutes = overageMin + sess.BillingPhase = phase + sess.AmountIncluded = amountIncluded + sess.AmountOverage = amountOverage + sess.Status = status + _ = s.db.UpdateBillingSession(sess) + _ = s.db.InsertBillingLedgerEntry(&db.BillingSessionLedger{ + SessionID: a.ID, + EventType: LedgerSessionEnd, + }) + + if contract, err := s.db.GetBillingOrgContract(a.ContractID); err == nil && contract != nil { + newRemaining := contract.RemainingMinutes - includedUsed + if newRemaining < 0 { + newRemaining = 0 + } + contract.RemainingMinutes = newRemaining + _ = s.db.UpdateBillingOrgContract(contract) + } +} + +// SubmitWorkReport attaches a technician report and closes the session. +func (s *Service) SubmitWorkReport(sessionID, operatorID, summary, category, ticketRef string) error { + summary = trim(summary, 8000) + if summary == "" { + return errors.New("summary required") + } + sess, err := s.db.GetBillingSession(sessionID) + if err != nil { + return err + } + if sess.Status == StatusClosed { + return errors.New("session already closed") + } + if _, err := s.db.GetBillingWorkReportBySession(sessionID); err == nil { + return errors.New("report already submitted") + } + if err := s.db.CreateBillingWorkReport(&db.BillingWorkReport{ + SessionID: sessionID, + OperatorID: operatorID, + Summary: summary, + Category: trim(category, 128), + TicketRef: trim(ticketRef, 128), + }); err != nil { + return err + } + sess.Status = StatusClosed + return s.db.UpdateBillingSession(sess) +} + +func roundUpMinutes(seconds, roundMin int) int { + if roundMin <= 0 { + roundMin = 1 + } + mins := float64(seconds) / 60.0 + return int(math.Ceil(mins/float64(roundMin))) * roundMin +} + +func trim(s string, max int) string { + if len(s) <= max { + return s + } + return s[:max] +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/betterdesk-server/billing/service_test.go b/betterdesk-server/billing/service_test.go new file mode 100644 index 00000000..6d04d56b --- /dev/null +++ b/betterdesk-server/billing/service_test.go @@ -0,0 +1,53 @@ +package billing + +import ( + "testing" + "time" +) + +func TestRoundUpMinutes(t *testing.T) { + if got := roundUpMinutes(61, 1); got != 2 { + t.Fatalf("got %d want 2", got) + } + if got := roundUpMinutes(601, 10); got != 20 { + t.Fatalf("got %d want 20", got) + } + if got := roundUpMinutes(600, 10); got != 10 { + t.Fatalf("got %d want 10", got) + } +} + +func TestOverageSplit(t *testing.T) { + remaining := 5 + billed := 12 + included := min(billed, remaining) + overage := 0 + if billed > remaining { + overage = billed - remaining + } + if included != 5 || overage != 7 { + t.Fatalf("included=%d overage=%d", included, overage) + } + _ = time.Now() +} + +func TestSessionAmountCalculation(t *testing.T) { + includedUsed := 5 + overageMin := 7 + hourlyRate := 120.0 + overageRate := 180.0 + + amountIncluded := (float64(includedUsed) / 60.0) * hourlyRate + amountOverage := (float64(overageMin) / 60.0) * overageRate + total := amountIncluded + amountOverage + + if amountIncluded != 10.0 { + t.Fatalf("amountIncluded=%v want 10", amountIncluded) + } + if amountOverage != 21.0 { + t.Fatalf("amountOverage=%v want 21", amountOverage) + } + if total != 31.0 { + t.Fatalf("total=%v want 31", total) + } +} diff --git a/betterdesk-server/config/config.go b/betterdesk-server/config/config.go index 5903765f..0db35b84 100644 --- a/betterdesk-server/config/config.go +++ b/betterdesk-server/config/config.go @@ -126,6 +126,13 @@ type Config struct { CDAPEnabled bool // Enable CDAP gateway (default false) CDAPTLS bool // Enable TLS on CDAP port CDAPRateLimit int // Max requests per minute per IP (default 30) + + // Time sync / billing (commercialization module) + NTPServers string // Comma-separated NTP servers + BillingMaxClockSkewMS int // Max allowed clock offset vs NTP (default 2000) + BillingRequireSyncedClock bool // Block billable sessions when clock unsynced + BillingRoundingMinutes int // Billable minute rounding (1, 10, 15) + BillingRequireWorkReport bool // Require technician report before session close } // DefaultConfig returns a Config with sensible defaults. @@ -146,7 +153,10 @@ func DefaultConfig() *Config { SignalRateLimitPerIP: IPRateLimitRegistrations, SameNATRelay: true, // issue #121: auto-fallback to relay on shared public IP P2PFirst: true, // issue #157: give direct P2P a real chance before relay - P2PFallbackMs: 2000, // grace period for target hole punch before relay fallback + P2PFallbackMs: 2000, // grace period for target hole punch before relay fallback + BillingMaxClockSkewMS: 2000, + BillingRequireSyncedClock: true, + BillingRoundingMinutes: 1, } } @@ -333,6 +343,51 @@ func (c *Config) LoadEnv() { c.CDAPRateLimit = n } } + if v := os.Getenv("NTP_SERVERS"); v != "" { + c.NTPServers = v + } + if v := os.Getenv("BILLING_MAX_CLOCK_SKEW_MS"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n > 0 { + c.BillingMaxClockSkewMS = n + } + } + if v := os.Getenv("BILLING_REQUIRE_SYNCED_CLOCK"); v != "" { + switch strings.ToUpper(v) { + case "Y", "YES", "1", "TRUE", "ON": + c.BillingRequireSyncedClock = true + case "N", "NO", "0", "FALSE", "OFF": + c.BillingRequireSyncedClock = false + } + } + if v := os.Getenv("BILLING_ROUNDING_MINUTES"); v != "" { + if n, err := strconv.Atoi(v); err == nil && n > 0 { + c.BillingRoundingMinutes = n + } + } + if v := os.Getenv("BILLING_REQUIRE_WORK_REPORT"); v != "" { + switch strings.ToUpper(v) { + case "Y", "YES", "1", "TRUE", "ON": + c.BillingRequireWorkReport = true + case "N", "NO", "0", "FALSE", "OFF": + c.BillingRequireWorkReport = false + } + } +} + +// GetNTPServers returns configured NTP server hostnames. +func (c *Config) GetNTPServers() []string { + if c.NTPServers == "" { + return []string{"pool.ntp.org", "time.google.com", "time.cloudflare.com"} + } + parts := strings.Split(c.NTPServers, ",") + out := make([]string, 0, len(parts)) + for _, p := range parts { + p = strings.TrimSpace(p) + if p != "" { + out = append(out, p) + } + } + return out } // NATTestPort returns the NAT test port (signal port - 1). diff --git a/betterdesk-server/db/billing_models.go b/betterdesk-server/db/billing_models.go new file mode 100644 index 00000000..1153f351 --- /dev/null +++ b/betterdesk-server/db/billing_models.go @@ -0,0 +1,103 @@ +package db + +import "time" + +// BillingPackage is a reusable support-hours template. +type BillingPackage struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description,omitempty"` + IncludedMinutes int `json:"included_minutes"` + OverageRate float64 `json:"overage_rate"` // per hour when included pool exhausted + Currency string `json:"currency"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// BillingOrgContract links an organization to a billing package. +type BillingOrgContract struct { + ID string `json:"id"` + OrgID string `json:"org_id"` + PackageID string `json:"package_id"` + Status string `json:"status"` // active, suspended, expired + RemainingMinutes int `json:"remaining_minutes"` + OverageRate *float64 `json:"overage_rate,omitempty"` + HourlyRate float64 `json:"hourly_rate"` // base hourly rate for org + Currency string `json:"currency"` + ValidFrom *time.Time `json:"valid_from,omitempty"` + ValidUntil *time.Time `json:"valid_until,omitempty"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + PackageName string `json:"package_name,omitempty"` + OrgName string `json:"org_name,omitempty"` +} + +// BillingSession is the authoritative billable remote session record. +type BillingSession struct { + ID string `json:"id"` + OrgID string `json:"org_id"` + ContractID string `json:"contract_id,omitempty"` + OperatorID string `json:"operator_id"` + OperatorName string `json:"operator_name,omitempty"` + DeviceID string `json:"device_id"` + DeviceName string `json:"device_name,omitempty"` + RelayUUID string `json:"relay_uuid,omitempty"` + Transport string `json:"transport"` + Status string `json:"status"` // active, pending_report, closed + BillingPhase string `json:"billing_phase"` // included, overage + StartedAt time.Time `json:"started_at"` + EndedAt *time.Time `json:"ended_at,omitempty"` + RawSeconds int `json:"raw_seconds"` + BilledMinutes int `json:"billed_minutes"` + IncludedMinutesUsed int `json:"included_minutes_used"` + OverageMinutes int `json:"overage_minutes"` + AmountIncluded float64 `json:"amount_included"` + AmountOverage float64 `json:"amount_overage"` + Currency string `json:"currency"` + ClockOffsetMSAtStart int64 `json:"clock_offset_ms_at_start"` + ClockSyncedAtStart bool `json:"clock_synced_at_start"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// BillingSessionLedger records in-session billing events. +type BillingSessionLedger struct { + ID int64 `json:"id"` + SessionID string `json:"session_id"` + EventType string `json:"event_type"` + Details string `json:"details,omitempty"` + CreatedAt time.Time `json:"created_at"` +} + +// BillingWorkReport is submitted by a technician after a session. +type BillingWorkReport struct { + ID int64 `json:"id"` + SessionID string `json:"session_id"` + OperatorID string `json:"operator_id"` + Summary string `json:"summary"` + Category string `json:"category,omitempty"` + TicketRef string `json:"ticket_ref,omitempty"` + CreatedAt time.Time `json:"created_at"` +} + +// BillingCurrency stores manual FX rates relative to server base currency. +type BillingCurrency struct { + Code string `json:"code"` + Symbol string `json:"symbol"` + ExchangeRateToBase float64 `json:"exchange_rate_to_base"` +} + +// BillingSessionFilter filters session listings. +type BillingSessionFilter struct { + OrgID string + DeviceID string + Status string + Limit int + Offset int +} + +// BillingContractFilter filters org contracts. +type BillingContractFilter struct { + OrgID string + Status string +} diff --git a/betterdesk-server/db/database.go b/betterdesk-server/db/database.go index ca88c9a6..a033f7c1 100644 --- a/betterdesk-server/db/database.go +++ b/betterdesk-server/db/database.go @@ -611,4 +611,34 @@ type Database interface { CreateStrategy(s *Strategy) error UpdateStrategy(guid string, s *Strategy) error DeleteStrategy(guid string) error + + // Billing / commercialization + CreateBillingPackage(p *BillingPackage) error + GetBillingPackage(id string) (*BillingPackage, error) + ListBillingPackages() ([]*BillingPackage, error) + UpdateBillingPackage(p *BillingPackage) error + DeleteBillingPackage(id string) error + + CreateBillingOrgContract(c *BillingOrgContract) error + GetBillingOrgContract(id string) (*BillingOrgContract, error) + GetActiveBillingOrgContract(orgID string) (*BillingOrgContract, error) + ListBillingOrgContracts(filter BillingContractFilter) ([]*BillingOrgContract, error) + UpdateBillingOrgContract(c *BillingOrgContract) error + + CreateBillingSession(s *BillingSession) error + GetBillingSession(id string) (*BillingSession, error) + GetBillingSessionByRelayUUID(relayUUID string) (*BillingSession, error) + UpdateBillingSession(s *BillingSession) error + ListBillingSessions(filter BillingSessionFilter) ([]*BillingSession, error) + + InsertBillingLedgerEntry(e *BillingSessionLedger) error + ListBillingLedger(sessionID string) ([]*BillingSessionLedger, error) + + CreateBillingWorkReport(r *BillingWorkReport) error + GetBillingWorkReportBySession(sessionID string) (*BillingWorkReport, error) + ListBillingWorkReports(orgID string, limit int) ([]*BillingWorkReport, error) + + ListBillingCurrencies() ([]*BillingCurrency, error) + UpsertBillingCurrency(c *BillingCurrency) error + DeleteBillingCurrency(code string) error } diff --git a/betterdesk-server/db/postgres.go b/betterdesk-server/db/postgres.go index aac3437f..dca9c996 100644 --- a/betterdesk-server/db/postgres.go +++ b/betterdesk-server/db/postgres.go @@ -347,6 +347,83 @@ func (pg *PostgresDB) Migrate() error { )`, `CREATE INDEX IF NOT EXISTS idx_audit_alarms_type ON audit_alarms(alarm_type, created_at)`, + // Billing / commercialization module + `CREATE TABLE IF NOT EXISTS billing_packages ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT NOT NULL DEFAULT '', + included_minutes INTEGER NOT NULL DEFAULT 0, + overage_rate DOUBLE PRECISION NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS billing_org_contracts ( + id TEXT PRIMARY KEY, + org_id TEXT NOT NULL REFERENCES organizations(id) ON DELETE CASCADE, + package_id TEXT NOT NULL REFERENCES billing_packages(id), + status TEXT NOT NULL DEFAULT 'active', + remaining_minutes INTEGER NOT NULL DEFAULT 0, + overage_rate DOUBLE PRECISION, + hourly_rate DOUBLE PRECISION NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + valid_from TIMESTAMPTZ, + valid_until TIMESTAMPTZ, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_contracts_org ON billing_org_contracts(org_id)`, + `CREATE TABLE IF NOT EXISTS billing_sessions ( + id TEXT PRIMARY KEY, + org_id TEXT NOT NULL, + contract_id TEXT NOT NULL DEFAULT '', + operator_id TEXT NOT NULL DEFAULT '', + operator_name TEXT NOT NULL DEFAULT '', + device_id TEXT NOT NULL, + device_name TEXT NOT NULL DEFAULT '', + relay_uuid TEXT NOT NULL DEFAULT '', + transport TEXT NOT NULL DEFAULT 'rustdesk', + status TEXT NOT NULL DEFAULT 'active', + billing_phase TEXT NOT NULL DEFAULT 'included', + started_at TIMESTAMPTZ NOT NULL, + ended_at TIMESTAMPTZ, + raw_seconds INTEGER NOT NULL DEFAULT 0, + billed_minutes INTEGER NOT NULL DEFAULT 0, + included_minutes_used INTEGER NOT NULL DEFAULT 0, + overage_minutes INTEGER NOT NULL DEFAULT 0, + amount_included DOUBLE PRECISION NOT NULL DEFAULT 0, + amount_overage DOUBLE PRECISION NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + clock_offset_ms_at_start BIGINT NOT NULL DEFAULT 0, + clock_synced_at_start BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_sessions_org ON billing_sessions(org_id, started_at DESC)`, + `CREATE INDEX IF NOT EXISTS idx_billing_sessions_relay ON billing_sessions(relay_uuid)`, + `CREATE TABLE IF NOT EXISTS billing_session_ledger ( + id BIGSERIAL PRIMARY KEY, + session_id TEXT NOT NULL, + event_type TEXT NOT NULL, + details TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_ledger_session ON billing_session_ledger(session_id)`, + `CREATE TABLE IF NOT EXISTS billing_work_reports ( + id BIGSERIAL PRIMARY KEY, + session_id TEXT NOT NULL UNIQUE, + operator_id TEXT NOT NULL DEFAULT '', + summary TEXT NOT NULL, + category TEXT NOT NULL DEFAULT '', + ticket_ref TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS billing_currencies ( + code TEXT PRIMARY KEY, + symbol TEXT NOT NULL DEFAULT '', + exchange_rate_to_base DOUBLE PRECISION NOT NULL DEFAULT 1 + )`, + // User/device groups + strategies (API-port consolidation Phase A) `CREATE TABLE IF NOT EXISTS user_groups ( id BIGSERIAL PRIMARY KEY, diff --git a/betterdesk-server/db/postgres_billing.go b/betterdesk-server/db/postgres_billing.go new file mode 100644 index 00000000..94c06f16 --- /dev/null +++ b/betterdesk-server/db/postgres_billing.go @@ -0,0 +1,403 @@ +package db + +import ( + "strings" + "time" +) + +type pgScanner interface { + Scan(dest ...any) error +} + +func scanBillingSessionPG(row pgScanner) (*BillingSession, error) { + var sess BillingSession + var endedAt *time.Time + err := row.Scan( + &sess.ID, &sess.OrgID, &sess.ContractID, &sess.OperatorID, &sess.OperatorName, + &sess.DeviceID, &sess.DeviceName, &sess.RelayUUID, &sess.Transport, &sess.Status, + &sess.BillingPhase, &sess.StartedAt, &endedAt, &sess.RawSeconds, &sess.BilledMinutes, + &sess.IncludedMinutesUsed, &sess.OverageMinutes, &sess.AmountIncluded, &sess.AmountOverage, + &sess.Currency, &sess.ClockOffsetMSAtStart, &sess.ClockSyncedAtStart, &sess.CreatedAt, &sess.UpdatedAt, + ) + if err != nil { + return nil, err + } + sess.EndedAt = endedAt + return &sess, nil +} + +func (pg *PostgresDB) CreateBillingPackage(p *BillingPackage) error { + _, err := pg.pool.Exec(pg.ctx, + `INSERT INTO billing_packages (id, name, description, included_minutes, overage_rate, currency, created_at, updated_at) + VALUES ($1, $2, $3, $4, $5, $6, NOW(), NOW())`, + p.ID, p.Name, p.Description, p.IncludedMinutes, p.OverageRate, p.Currency, + ) + return err +} + +func (pg *PostgresDB) GetBillingPackage(id string) (*BillingPackage, error) { + var p BillingPackage + err := pg.pool.QueryRow(pg.ctx, + `SELECT id, name, description, included_minutes, overage_rate, currency, created_at, updated_at + FROM billing_packages WHERE id = $1`, id, + ).Scan(&p.ID, &p.Name, &p.Description, &p.IncludedMinutes, &p.OverageRate, &p.Currency, &p.CreatedAt, &p.UpdatedAt) + if err != nil { + return nil, err + } + return &p, nil +} + +func (pg *PostgresDB) ListBillingPackages() ([]*BillingPackage, error) { + rows, err := pg.pool.Query(pg.ctx, + `SELECT id, name, description, included_minutes, overage_rate, currency, created_at, updated_at + FROM billing_packages ORDER BY name`, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingPackage + for rows.Next() { + var p BillingPackage + if err := rows.Scan(&p.ID, &p.Name, &p.Description, &p.IncludedMinutes, &p.OverageRate, &p.Currency, &p.CreatedAt, &p.UpdatedAt); err != nil { + return nil, err + } + out = append(out, &p) + } + return out, rows.Err() +} + +func (pg *PostgresDB) UpdateBillingPackage(p *BillingPackage) error { + _, err := pg.pool.Exec(pg.ctx, + `UPDATE billing_packages SET name = $1, description = $2, included_minutes = $3, overage_rate = $4, currency = $5, updated_at = NOW() + WHERE id = $6`, + p.Name, p.Description, p.IncludedMinutes, p.OverageRate, p.Currency, p.ID, + ) + return err +} + +func (pg *PostgresDB) DeleteBillingPackage(id string) error { + _, err := pg.pool.Exec(pg.ctx, `DELETE FROM billing_packages WHERE id = $1`, id) + return err +} + +func (pg *PostgresDB) CreateBillingOrgContract(c *BillingOrgContract) error { + _, err := pg.pool.Exec(pg.ctx, + `INSERT INTO billing_org_contracts (id, org_id, package_id, status, remaining_minutes, overage_rate, hourly_rate, currency, valid_from, valid_until, created_at, updated_at) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, NOW(), NOW())`, + c.ID, c.OrgID, c.PackageID, c.Status, c.RemainingMinutes, c.OverageRate, c.HourlyRate, c.Currency, + c.ValidFrom, c.ValidUntil, + ) + return err +} + +func (pg *PostgresDB) GetBillingOrgContract(id string) (*BillingOrgContract, error) { + return pg.queryBillingOrgContract(`WHERE c.id = $1`, id) +} + +func (pg *PostgresDB) GetActiveBillingOrgContract(orgID string) (*BillingOrgContract, error) { + return pg.queryBillingOrgContract( + `WHERE c.org_id = $1 AND c.status = 'active' ORDER BY c.updated_at DESC LIMIT 1`, orgID, + ) +} + +func (pg *PostgresDB) queryBillingOrgContract(where string, args ...any) (*BillingOrgContract, error) { + query := `SELECT c.id, c.org_id, c.package_id, c.status, c.remaining_minutes, c.overage_rate, + c.hourly_rate, c.currency, c.valid_from, c.valid_until, c.created_at, c.updated_at, + COALESCE(p.name, ''), COALESCE(o.name, '') + FROM billing_org_contracts c + LEFT JOIN billing_packages p ON p.id = c.package_id + LEFT JOIN organizations o ON o.id = c.org_id ` + where + + var c BillingOrgContract + var overage *float64 + var validFrom, validUntil *time.Time + err := pg.pool.QueryRow(pg.ctx, query, args...).Scan( + &c.ID, &c.OrgID, &c.PackageID, &c.Status, &c.RemainingMinutes, &overage, + &c.HourlyRate, &c.Currency, &validFrom, &validUntil, &c.CreatedAt, &c.UpdatedAt, + &c.PackageName, &c.OrgName, + ) + if err != nil { + return nil, err + } + c.OverageRate = overage + c.ValidFrom = validFrom + c.ValidUntil = validUntil + return &c, nil +} + +func (pg *PostgresDB) ListBillingOrgContracts(filter BillingContractFilter) ([]*BillingOrgContract, error) { + var ( + conds []string + args []any + ) + idx := 1 + if filter.OrgID != "" { + conds = append(conds, "c.org_id = $"+itoa(idx)) + args = append(args, filter.OrgID) + idx++ + } + if filter.Status != "" { + conds = append(conds, "c.status = $"+itoa(idx)) + args = append(args, filter.Status) + idx++ + } + + query := `SELECT c.id, c.org_id, c.package_id, c.status, c.remaining_minutes, c.overage_rate, + c.hourly_rate, c.currency, c.valid_from, c.valid_until, c.created_at, c.updated_at, + COALESCE(p.name, ''), COALESCE(o.name, '') + FROM billing_org_contracts c + LEFT JOIN billing_packages p ON p.id = c.package_id + LEFT JOIN organizations o ON o.id = c.org_id` + if len(conds) > 0 { + query += " WHERE " + strings.Join(conds, " AND ") + } + query += " ORDER BY c.updated_at DESC" + + rows, err := pg.pool.Query(pg.ctx, query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingOrgContract + for rows.Next() { + var c BillingOrgContract + var overage *float64 + var validFrom, validUntil *time.Time + if err := rows.Scan( + &c.ID, &c.OrgID, &c.PackageID, &c.Status, &c.RemainingMinutes, &overage, + &c.HourlyRate, &c.Currency, &validFrom, &validUntil, &c.CreatedAt, &c.UpdatedAt, + &c.PackageName, &c.OrgName, + ); err != nil { + return nil, err + } + c.OverageRate = overage + c.ValidFrom = validFrom + c.ValidUntil = validUntil + out = append(out, &c) + } + return out, rows.Err() +} + +func (pg *PostgresDB) UpdateBillingOrgContract(c *BillingOrgContract) error { + _, err := pg.pool.Exec(pg.ctx, + `UPDATE billing_org_contracts SET status = $1, remaining_minutes = $2, overage_rate = $3, hourly_rate = $4, currency = $5, + valid_from = $6, valid_until = $7, updated_at = NOW() WHERE id = $8`, + c.Status, c.RemainingMinutes, c.OverageRate, c.HourlyRate, c.Currency, + c.ValidFrom, c.ValidUntil, c.ID, + ) + return err +} + +func (pg *PostgresDB) CreateBillingSession(sess *BillingSession) error { + _, err := pg.pool.Exec(pg.ctx, + `INSERT INTO billing_sessions (`+billingSessionCols+`) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, NOW(), NOW())`, + sess.ID, sess.OrgID, sess.ContractID, sess.OperatorID, sess.OperatorName, + sess.DeviceID, sess.DeviceName, sess.RelayUUID, sess.Transport, sess.Status, + sess.BillingPhase, sess.StartedAt, sess.EndedAt, + sess.RawSeconds, sess.BilledMinutes, sess.IncludedMinutesUsed, sess.OverageMinutes, + sess.AmountIncluded, sess.AmountOverage, sess.Currency, sess.ClockOffsetMSAtStart, sess.ClockSyncedAtStart, + ) + return err +} + +func (pg *PostgresDB) GetBillingSession(id string) (*BillingSession, error) { + row := pg.pool.QueryRow(pg.ctx, `SELECT `+billingSessionCols+` FROM billing_sessions WHERE id = $1`, id) + return scanBillingSessionPG(row) +} + +func (pg *PostgresDB) GetBillingSessionByRelayUUID(relayUUID string) (*BillingSession, error) { + row := pg.pool.QueryRow(pg.ctx, + `SELECT `+billingSessionCols+` FROM billing_sessions WHERE relay_uuid = $1 ORDER BY started_at DESC LIMIT 1`, + relayUUID, + ) + return scanBillingSessionPG(row) +} + +func (pg *PostgresDB) UpdateBillingSession(sess *BillingSession) error { + _, err := pg.pool.Exec(pg.ctx, + `UPDATE billing_sessions SET status = $1, billing_phase = $2, ended_at = $3, raw_seconds = $4, billed_minutes = $5, + included_minutes_used = $6, overage_minutes = $7, amount_included = $8, amount_overage = $9, updated_at = NOW() + WHERE id = $10`, + sess.Status, sess.BillingPhase, sess.EndedAt, sess.RawSeconds, sess.BilledMinutes, + sess.IncludedMinutesUsed, sess.OverageMinutes, sess.AmountIncluded, sess.AmountOverage, sess.ID, + ) + return err +} + +func (pg *PostgresDB) ListBillingSessions(filter BillingSessionFilter) ([]*BillingSession, error) { + limit := filter.Limit + if limit <= 0 || limit > 500 { + limit = 100 + } + offset := filter.Offset + if offset < 0 { + offset = 0 + } + + var ( + conds []string + args []any + ) + idx := 1 + if filter.OrgID != "" { + conds = append(conds, "org_id = $"+itoa(idx)) + args = append(args, filter.OrgID) + idx++ + } + if filter.Status != "" { + conds = append(conds, "status = $"+itoa(idx)) + args = append(args, filter.Status) + idx++ + } + if filter.DeviceID != "" { + conds = append(conds, "device_id = $"+itoa(idx)) + args = append(args, filter.DeviceID) + idx++ + } + + query := `SELECT ` + billingSessionCols + ` FROM billing_sessions` + if len(conds) > 0 { + query += " WHERE " + strings.Join(conds, " AND ") + } + query += " ORDER BY started_at DESC LIMIT $" + itoa(idx) + " OFFSET $" + itoa(idx+1) + args = append(args, limit, offset) + + rows, err := pg.pool.Query(pg.ctx, query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingSession + for rows.Next() { + sess, err := scanBillingSessionPG(rows) + if err != nil { + return nil, err + } + out = append(out, sess) + } + return out, rows.Err() +} + +func (pg *PostgresDB) InsertBillingLedgerEntry(e *BillingSessionLedger) error { + _, err := pg.pool.Exec(pg.ctx, + `INSERT INTO billing_session_ledger (session_id, event_type, details, created_at) VALUES ($1, $2, $3, NOW())`, + e.SessionID, e.EventType, e.Details, + ) + return err +} + +func (pg *PostgresDB) ListBillingLedger(sessionID string) ([]*BillingSessionLedger, error) { + rows, err := pg.pool.Query(pg.ctx, + `SELECT id, session_id, event_type, details, created_at FROM billing_session_ledger WHERE session_id = $1 ORDER BY id`, + sessionID, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingSessionLedger + for rows.Next() { + var e BillingSessionLedger + if err := rows.Scan(&e.ID, &e.SessionID, &e.EventType, &e.Details, &e.CreatedAt); err != nil { + return nil, err + } + out = append(out, &e) + } + return out, rows.Err() +} + +func (pg *PostgresDB) CreateBillingWorkReport(r *BillingWorkReport) error { + err := pg.pool.QueryRow(pg.ctx, + `INSERT INTO billing_work_reports (session_id, operator_id, summary, category, ticket_ref, created_at) + VALUES ($1, $2, $3, $4, $5, NOW()) RETURNING id`, + r.SessionID, r.OperatorID, r.Summary, r.Category, r.TicketRef, + ).Scan(&r.ID) + return err +} + +func (pg *PostgresDB) GetBillingWorkReportBySession(sessionID string) (*BillingWorkReport, error) { + var r BillingWorkReport + err := pg.pool.QueryRow(pg.ctx, + `SELECT id, session_id, operator_id, summary, category, ticket_ref, created_at FROM billing_work_reports WHERE session_id = $1`, + sessionID, + ).Scan(&r.ID, &r.SessionID, &r.OperatorID, &r.Summary, &r.Category, &r.TicketRef, &r.CreatedAt) + if err != nil { + return nil, err + } + return &r, nil +} + +func (pg *PostgresDB) ListBillingWorkReports(orgID string, limit int) ([]*BillingWorkReport, error) { + if limit <= 0 || limit > 500 { + limit = 100 + } + + query := `SELECT w.id, w.session_id, w.operator_id, w.summary, w.category, w.ticket_ref, w.created_at + FROM billing_work_reports w` + var args []any + if orgID != "" { + query += ` INNER JOIN billing_sessions s ON s.id = w.session_id WHERE s.org_id = $1` + args = append(args, orgID) + query += ` ORDER BY w.id DESC LIMIT $2` + args = append(args, limit) + } else { + query += ` ORDER BY w.id DESC LIMIT $1` + args = append(args, limit) + } + + rows, err := pg.pool.Query(pg.ctx, query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingWorkReport + for rows.Next() { + var r BillingWorkReport + if err := rows.Scan(&r.ID, &r.SessionID, &r.OperatorID, &r.Summary, &r.Category, &r.TicketRef, &r.CreatedAt); err != nil { + return nil, err + } + out = append(out, &r) + } + return out, rows.Err() +} + +func (pg *PostgresDB) ListBillingCurrencies() ([]*BillingCurrency, error) { + rows, err := pg.pool.Query(pg.ctx, + `SELECT code, symbol, exchange_rate_to_base FROM billing_currencies ORDER BY code`, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + var out []*BillingCurrency + for rows.Next() { + var c BillingCurrency + if err := rows.Scan(&c.Code, &c.Symbol, &c.ExchangeRateToBase); err != nil { + return nil, err + } + out = append(out, &c) + } + return out, rows.Err() +} + +func (pg *PostgresDB) UpsertBillingCurrency(c *BillingCurrency) error { + _, err := pg.pool.Exec(pg.ctx, + `INSERT INTO billing_currencies (code, symbol, exchange_rate_to_base) VALUES ($1, $2, $3) + ON CONFLICT (code) DO UPDATE SET symbol = EXCLUDED.symbol, exchange_rate_to_base = EXCLUDED.exchange_rate_to_base`, + c.Code, c.Symbol, c.ExchangeRateToBase, + ) + return err +} + +func (pg *PostgresDB) DeleteBillingCurrency(code string) error { + _, err := pg.pool.Exec(pg.ctx, `DELETE FROM billing_currencies WHERE code = $1`, strings.ToUpper(code)) + return err +} diff --git a/betterdesk-server/db/sqlite.go b/betterdesk-server/db/sqlite.go index 9c66c01e..bb42d198 100644 --- a/betterdesk-server/db/sqlite.go +++ b/betterdesk-server/db/sqlite.go @@ -327,6 +327,85 @@ func (s *SQLiteDB) Migrate() error { )`, `CREATE INDEX IF NOT EXISTS idx_audit_alarms_type ON audit_alarms(alarm_type, created_at)`, + // Billing / commercialization module + `CREATE TABLE IF NOT EXISTS billing_packages ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT DEFAULT '', + included_minutes INTEGER NOT NULL DEFAULT 0, + overage_rate REAL NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + created_at TEXT DEFAULT (datetime('now')), + updated_at TEXT DEFAULT (datetime('now')) + )`, + `CREATE TABLE IF NOT EXISTS billing_org_contracts ( + id TEXT PRIMARY KEY, + org_id TEXT NOT NULL, + package_id TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'active', + remaining_minutes INTEGER NOT NULL DEFAULT 0, + overage_rate REAL, + hourly_rate REAL NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + valid_from TEXT, + valid_until TEXT, + created_at TEXT DEFAULT (datetime('now')), + updated_at TEXT DEFAULT (datetime('now')), + FOREIGN KEY (org_id) REFERENCES organizations(id) ON DELETE CASCADE, + FOREIGN KEY (package_id) REFERENCES billing_packages(id) + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_contracts_org ON billing_org_contracts(org_id)`, + `CREATE TABLE IF NOT EXISTS billing_sessions ( + id TEXT PRIMARY KEY, + org_id TEXT NOT NULL, + contract_id TEXT NOT NULL DEFAULT '', + operator_id TEXT NOT NULL DEFAULT '', + operator_name TEXT NOT NULL DEFAULT '', + device_id TEXT NOT NULL, + device_name TEXT NOT NULL DEFAULT '', + relay_uuid TEXT NOT NULL DEFAULT '', + transport TEXT NOT NULL DEFAULT 'rustdesk', + status TEXT NOT NULL DEFAULT 'active', + billing_phase TEXT NOT NULL DEFAULT 'included', + started_at TEXT NOT NULL, + ended_at TEXT, + raw_seconds INTEGER NOT NULL DEFAULT 0, + billed_minutes INTEGER NOT NULL DEFAULT 0, + included_minutes_used INTEGER NOT NULL DEFAULT 0, + overage_minutes INTEGER NOT NULL DEFAULT 0, + amount_included REAL NOT NULL DEFAULT 0, + amount_overage REAL NOT NULL DEFAULT 0, + currency TEXT NOT NULL DEFAULT 'PLN', + clock_offset_ms_at_start INTEGER NOT NULL DEFAULT 0, + clock_synced_at_start INTEGER NOT NULL DEFAULT 1, + created_at TEXT DEFAULT (datetime('now')), + updated_at TEXT DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_sessions_org ON billing_sessions(org_id, started_at)`, + `CREATE INDEX IF NOT EXISTS idx_billing_sessions_relay ON billing_sessions(relay_uuid)`, + `CREATE TABLE IF NOT EXISTS billing_session_ledger ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + session_id TEXT NOT NULL, + event_type TEXT NOT NULL, + details TEXT DEFAULT '', + created_at TEXT DEFAULT (datetime('now')) + )`, + `CREATE INDEX IF NOT EXISTS idx_billing_ledger_session ON billing_session_ledger(session_id)`, + `CREATE TABLE IF NOT EXISTS billing_work_reports ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + session_id TEXT NOT NULL UNIQUE, + operator_id TEXT NOT NULL DEFAULT '', + summary TEXT NOT NULL, + category TEXT DEFAULT '', + ticket_ref TEXT DEFAULT '', + created_at TEXT DEFAULT (datetime('now')) + )`, + `CREATE TABLE IF NOT EXISTS billing_currencies ( + code TEXT PRIMARY KEY, + symbol TEXT NOT NULL DEFAULT '', + exchange_rate_to_base REAL NOT NULL DEFAULT 1 + )`, + // User/device groups + strategies (API-port consolidation Phase A) `CREATE TABLE IF NOT EXISTS user_groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -421,6 +500,19 @@ func (s *SQLiteDB) Migrate() error { } } + // Billing: backfill NULL optional text columns (SQLite cannot ALTER to add NOT NULL). + billingNullBackfills := []string{ + `UPDATE billing_sessions SET contract_id = '' WHERE contract_id IS NULL`, + `UPDATE billing_sessions SET operator_name = '' WHERE operator_name IS NULL`, + `UPDATE billing_sessions SET device_name = '' WHERE device_name IS NULL`, + `UPDATE billing_sessions SET relay_uuid = '' WHERE relay_uuid IS NULL`, + } + for _, stmt := range billingNullBackfills { + if _, err := s.db.Exec(stmt); err != nil { + return fmt.Errorf("db: billing null backfill failed: %w\nStatement: %s", err, stmt) + } + } + return nil } diff --git a/betterdesk-server/db/sqlite_billing.go b/betterdesk-server/db/sqlite_billing.go new file mode 100644 index 00000000..ed3fee19 --- /dev/null +++ b/betterdesk-server/db/sqlite_billing.go @@ -0,0 +1,506 @@ +package db + +import ( + "database/sql" + "strings" + "time" +) + +func parseSQLiteTime(s string) time.Time { + if s == "" { + return time.Time{} + } + for _, layout := range []string{"2006-01-02 15:04:05", time.RFC3339} { + if t, err := time.Parse(layout, s); err == nil { + return t + } + } + return time.Time{} +} + +func scanBillingSession(row scanner) (*BillingSession, error) { + var sess BillingSession + var startedAt, endedAt, createdAt, updatedAt string + var clockSynced int + err := row.Scan( + &sess.ID, &sess.OrgID, &sess.ContractID, &sess.OperatorID, &sess.OperatorName, + &sess.DeviceID, &sess.DeviceName, &sess.RelayUUID, &sess.Transport, &sess.Status, + &sess.BillingPhase, &startedAt, &endedAt, &sess.RawSeconds, &sess.BilledMinutes, + &sess.IncludedMinutesUsed, &sess.OverageMinutes, &sess.AmountIncluded, &sess.AmountOverage, + &sess.Currency, &sess.ClockOffsetMSAtStart, &clockSynced, &createdAt, &updatedAt, + ) + if err != nil { + return nil, err + } + sess.StartedAt = parseSQLiteTime(startedAt) + if endedAt != "" { + t := parseSQLiteTime(endedAt) + sess.EndedAt = &t + } + sess.ClockSyncedAtStart = clockSynced != 0 + sess.CreatedAt = parseSQLiteTime(createdAt) + sess.UpdatedAt = parseSQLiteTime(updatedAt) + return &sess, nil +} + +type scanner interface { + Scan(dest ...any) error +} + +const billingSessionCols = `id, org_id, contract_id, operator_id, operator_name, device_id, device_name, + relay_uuid, transport, status, billing_phase, started_at, ended_at, raw_seconds, billed_minutes, + included_minutes_used, overage_minutes, amount_included, amount_overage, currency, + clock_offset_ms_at_start, clock_synced_at_start, created_at, updated_at` + +func (s *SQLiteDB) CreateBillingPackage(p *BillingPackage) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec( + `INSERT INTO billing_packages (id, name, description, included_minutes, overage_rate, currency, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))`, + p.ID, p.Name, p.Description, p.IncludedMinutes, p.OverageRate, p.Currency, + ) + return err +} + +func (s *SQLiteDB) GetBillingPackage(id string) (*BillingPackage, error) { + s.mu.RLock() + defer s.mu.RUnlock() + var p BillingPackage + var createdAt, updatedAt string + err := s.db.QueryRow( + `SELECT id, name, description, included_minutes, overage_rate, currency, created_at, updated_at + FROM billing_packages WHERE id = ?`, id, + ).Scan(&p.ID, &p.Name, &p.Description, &p.IncludedMinutes, &p.OverageRate, &p.Currency, &createdAt, &updatedAt) + if err != nil { + return nil, err + } + p.CreatedAt = parseSQLiteTime(createdAt) + p.UpdatedAt = parseSQLiteTime(updatedAt) + return &p, nil +} + +func (s *SQLiteDB) ListBillingPackages() ([]*BillingPackage, error) { + s.mu.RLock() + defer s.mu.RUnlock() + rows, err := s.db.Query( + `SELECT id, name, description, included_minutes, overage_rate, currency, created_at, updated_at + FROM billing_packages ORDER BY name`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingPackage + for rows.Next() { + var p BillingPackage + var createdAt, updatedAt string + if err := rows.Scan(&p.ID, &p.Name, &p.Description, &p.IncludedMinutes, &p.OverageRate, &p.Currency, &createdAt, &updatedAt); err != nil { + return nil, err + } + p.CreatedAt = parseSQLiteTime(createdAt) + p.UpdatedAt = parseSQLiteTime(updatedAt) + out = append(out, &p) + } + return out, rows.Err() +} + +func (s *SQLiteDB) UpdateBillingPackage(p *BillingPackage) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec( + `UPDATE billing_packages SET name=?, description=?, included_minutes=?, overage_rate=?, currency=?, updated_at=datetime('now') WHERE id=?`, + p.Name, p.Description, p.IncludedMinutes, p.OverageRate, p.Currency, p.ID, + ) + return err +} + +func (s *SQLiteDB) DeleteBillingPackage(id string) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec(`DELETE FROM billing_packages WHERE id = ?`, id) + return err +} + +func formatSQLiteTimePtr(t *time.Time) any { + if t == nil { + return nil + } + return t.UTC().Format("2006-01-02 15:04:05") +} + +func (s *SQLiteDB) CreateBillingOrgContract(c *BillingOrgContract) error { + s.mu.Lock() + defer s.mu.Unlock() + var overage sql.NullFloat64 + if c.OverageRate != nil { + overage = sql.NullFloat64{Float64: *c.OverageRate, Valid: true} + } + _, err := s.db.Exec( + `INSERT INTO billing_org_contracts (id, org_id, package_id, status, remaining_minutes, overage_rate, hourly_rate, currency, valid_from, valid_until, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))`, + c.ID, c.OrgID, c.PackageID, c.Status, c.RemainingMinutes, overage, c.HourlyRate, c.Currency, + formatSQLiteTimePtr(c.ValidFrom), formatSQLiteTimePtr(c.ValidUntil), + ) + return err +} + +func (s *SQLiteDB) GetBillingOrgContract(id string) (*BillingOrgContract, error) { + s.mu.RLock() + defer s.mu.RUnlock() + return s.queryBillingOrgContract(`WHERE c.id = ?`, id) +} + +func (s *SQLiteDB) GetActiveBillingOrgContract(orgID string) (*BillingOrgContract, error) { + s.mu.RLock() + defer s.mu.RUnlock() + return s.queryBillingOrgContract( + `WHERE c.org_id = ? AND c.status = 'active' ORDER BY c.updated_at DESC LIMIT 1`, orgID, + ) +} + +func (s *SQLiteDB) queryBillingOrgContract(where string, args ...any) (*BillingOrgContract, error) { + query := `SELECT c.id, c.org_id, c.package_id, c.status, c.remaining_minutes, c.overage_rate, + c.hourly_rate, c.currency, c.valid_from, c.valid_until, c.created_at, c.updated_at, + COALESCE(p.name, ''), COALESCE(o.name, '') + FROM billing_org_contracts c + LEFT JOIN billing_packages p ON p.id = c.package_id + LEFT JOIN organizations o ON o.id = c.org_id ` + where + + var c BillingOrgContract + var overage sql.NullFloat64 + var validFrom, validUntil, createdAt, updatedAt sql.NullString + err := s.db.QueryRow(query, args...).Scan( + &c.ID, &c.OrgID, &c.PackageID, &c.Status, &c.RemainingMinutes, &overage, + &c.HourlyRate, &c.Currency, &validFrom, &validUntil, &createdAt, &updatedAt, + &c.PackageName, &c.OrgName, + ) + if err != nil { + return nil, err + } + if overage.Valid { + v := overage.Float64 + c.OverageRate = &v + } + if validFrom.Valid { + t := parseSQLiteTime(validFrom.String) + c.ValidFrom = &t + } + if validUntil.Valid { + t := parseSQLiteTime(validUntil.String) + c.ValidUntil = &t + } + c.CreatedAt = parseSQLiteTime(createdAt.String) + c.UpdatedAt = parseSQLiteTime(updatedAt.String) + return &c, nil +} + +func (s *SQLiteDB) ListBillingOrgContracts(filter BillingContractFilter) ([]*BillingOrgContract, error) { + s.mu.RLock() + defer s.mu.RUnlock() + var conds []string + var args []any + if filter.OrgID != "" { + conds = append(conds, "c.org_id = ?") + args = append(args, filter.OrgID) + } + if filter.Status != "" { + conds = append(conds, "c.status = ?") + args = append(args, filter.Status) + } + query := `SELECT c.id, c.org_id, c.package_id, c.status, c.remaining_minutes, c.overage_rate, + c.hourly_rate, c.currency, c.valid_from, c.valid_until, c.created_at, c.updated_at, + COALESCE(p.name, ''), COALESCE(o.name, '') + FROM billing_org_contracts c + LEFT JOIN billing_packages p ON p.id = c.package_id + LEFT JOIN organizations o ON o.id = c.org_id` + if len(conds) > 0 { + query += " WHERE " + strings.Join(conds, " AND ") + } + query += " ORDER BY c.updated_at DESC" + rows, err := s.db.Query(query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingOrgContract + for rows.Next() { + var c BillingOrgContract + var overage sql.NullFloat64 + var validFrom, validUntil, createdAt, updatedAt sql.NullString + if err := rows.Scan( + &c.ID, &c.OrgID, &c.PackageID, &c.Status, &c.RemainingMinutes, &overage, + &c.HourlyRate, &c.Currency, &validFrom, &validUntil, &createdAt, &updatedAt, + &c.PackageName, &c.OrgName, + ); err != nil { + return nil, err + } + if overage.Valid { + v := overage.Float64 + c.OverageRate = &v + } + if validFrom.Valid { + t := parseSQLiteTime(validFrom.String) + c.ValidFrom = &t + } + if validUntil.Valid { + t := parseSQLiteTime(validUntil.String) + c.ValidUntil = &t + } + c.CreatedAt = parseSQLiteTime(createdAt.String) + c.UpdatedAt = parseSQLiteTime(updatedAt.String) + out = append(out, &c) + } + return out, rows.Err() +} + +func (s *SQLiteDB) UpdateBillingOrgContract(c *BillingOrgContract) error { + s.mu.Lock() + defer s.mu.Unlock() + var overage sql.NullFloat64 + if c.OverageRate != nil { + overage = sql.NullFloat64{Float64: *c.OverageRate, Valid: true} + } + _, err := s.db.Exec( + `UPDATE billing_org_contracts SET status=?, remaining_minutes=?, overage_rate=?, hourly_rate=?, currency=?, valid_from=?, valid_until=?, updated_at=datetime('now') WHERE id=?`, + c.Status, c.RemainingMinutes, overage, c.HourlyRate, c.Currency, + formatSQLiteTimePtr(c.ValidFrom), formatSQLiteTimePtr(c.ValidUntil), c.ID, + ) + return err +} + +func (s *SQLiteDB) CreateBillingSession(sess *BillingSession) error { + s.mu.Lock() + defer s.mu.Unlock() + synced := 0 + if sess.ClockSyncedAtStart { + synced = 1 + } + var ended any + if sess.EndedAt != nil { + ended = sess.EndedAt.UTC().Format("2006-01-02 15:04:05") + } + now := time.Now().UTC().Format("2006-01-02 15:04:05") + _, err := s.db.Exec( + `INSERT INTO billing_sessions (`+billingSessionCols+`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`, + sess.ID, sess.OrgID, sess.ContractID, sess.OperatorID, sess.OperatorName, + sess.DeviceID, sess.DeviceName, sess.RelayUUID, sess.Transport, sess.Status, + sess.BillingPhase, sess.StartedAt.UTC().Format("2006-01-02 15:04:05"), ended, + sess.RawSeconds, sess.BilledMinutes, sess.IncludedMinutesUsed, sess.OverageMinutes, + sess.AmountIncluded, sess.AmountOverage, sess.Currency, sess.ClockOffsetMSAtStart, synced, + now, now, + ) + return err +} + +func (s *SQLiteDB) GetBillingSession(id string) (*BillingSession, error) { + s.mu.RLock() + defer s.mu.RUnlock() + row := s.db.QueryRow(`SELECT `+billingSessionCols+` FROM billing_sessions WHERE id = ?`, id) + return scanBillingSession(row) +} + +func (s *SQLiteDB) GetBillingSessionByRelayUUID(relayUUID string) (*BillingSession, error) { + s.mu.RLock() + defer s.mu.RUnlock() + row := s.db.QueryRow(`SELECT `+billingSessionCols+` FROM billing_sessions WHERE relay_uuid = ? ORDER BY started_at DESC LIMIT 1`, relayUUID) + return scanBillingSession(row) +} + +func (s *SQLiteDB) UpdateBillingSession(sess *BillingSession) error { + s.mu.Lock() + defer s.mu.Unlock() + var ended any + if sess.EndedAt != nil { + ended = sess.EndedAt.UTC().Format("2006-01-02 15:04:05") + } + _, err := s.db.Exec( + `UPDATE billing_sessions SET status=?, billing_phase=?, ended_at=?, raw_seconds=?, billed_minutes=?, + included_minutes_used=?, overage_minutes=?, amount_included=?, amount_overage=?, updated_at=datetime('now') + WHERE id=?`, + sess.Status, sess.BillingPhase, ended, sess.RawSeconds, sess.BilledMinutes, + sess.IncludedMinutesUsed, sess.OverageMinutes, sess.AmountIncluded, sess.AmountOverage, sess.ID, + ) + return err +} + +func (s *SQLiteDB) ListBillingSessions(filter BillingSessionFilter) ([]*BillingSession, error) { + s.mu.RLock() + defer s.mu.RUnlock() + limit := filter.Limit + if limit <= 0 || limit > 500 { + limit = 100 + } + offset := filter.Offset + if offset < 0 { + offset = 0 + } + var conds []string + var args []any + if filter.OrgID != "" { + conds = append(conds, "org_id = ?") + args = append(args, filter.OrgID) + } + if filter.Status != "" { + conds = append(conds, "status = ?") + args = append(args, filter.Status) + } + if filter.DeviceID != "" { + conds = append(conds, "device_id = ?") + args = append(args, filter.DeviceID) + } + query := `SELECT ` + billingSessionCols + ` FROM billing_sessions` + if len(conds) > 0 { + query += " WHERE " + strings.Join(conds, " AND ") + } + query += " ORDER BY started_at DESC LIMIT ? OFFSET ?" + args = append(args, limit, offset) + rows, err := s.db.Query(query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingSession + for rows.Next() { + sess, err := scanBillingSession(rows) + if err != nil { + return nil, err + } + out = append(out, sess) + } + return out, rows.Err() +} + +func (s *SQLiteDB) InsertBillingLedgerEntry(e *BillingSessionLedger) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec( + `INSERT INTO billing_session_ledger (session_id, event_type, details, created_at) VALUES (?, ?, ?, datetime('now'))`, + e.SessionID, e.EventType, e.Details, + ) + return err +} + +func (s *SQLiteDB) ListBillingLedger(sessionID string) ([]*BillingSessionLedger, error) { + s.mu.RLock() + defer s.mu.RUnlock() + rows, err := s.db.Query( + `SELECT id, session_id, event_type, details, created_at FROM billing_session_ledger WHERE session_id = ? ORDER BY id`, + sessionID, + ) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingSessionLedger + for rows.Next() { + var e BillingSessionLedger + var createdAt string + if err := rows.Scan(&e.ID, &e.SessionID, &e.EventType, &e.Details, &createdAt); err != nil { + return nil, err + } + e.CreatedAt = parseSQLiteTime(createdAt) + out = append(out, &e) + } + return out, rows.Err() +} + +func (s *SQLiteDB) CreateBillingWorkReport(r *BillingWorkReport) error { + s.mu.Lock() + defer s.mu.Unlock() + res, err := s.db.Exec( + `INSERT INTO billing_work_reports (session_id, operator_id, summary, category, ticket_ref, created_at) + VALUES (?, ?, ?, ?, ?, datetime('now'))`, + r.SessionID, r.OperatorID, r.Summary, r.Category, r.TicketRef, + ) + if err != nil { + return err + } + r.ID, _ = res.LastInsertId() + return nil +} + +func (s *SQLiteDB) GetBillingWorkReportBySession(sessionID string) (*BillingWorkReport, error) { + s.mu.RLock() + defer s.mu.RUnlock() + var r BillingWorkReport + var createdAt string + err := s.db.QueryRow( + `SELECT id, session_id, operator_id, summary, category, ticket_ref, created_at FROM billing_work_reports WHERE session_id = ?`, + sessionID, + ).Scan(&r.ID, &r.SessionID, &r.OperatorID, &r.Summary, &r.Category, &r.TicketRef, &createdAt) + if err != nil { + return nil, err + } + r.CreatedAt = parseSQLiteTime(createdAt) + return &r, nil +} + +func (s *SQLiteDB) ListBillingWorkReports(orgID string, limit int) ([]*BillingWorkReport, error) { + s.mu.RLock() + defer s.mu.RUnlock() + if limit <= 0 || limit > 500 { + limit = 100 + } + query := `SELECT w.id, w.session_id, w.operator_id, w.summary, w.category, w.ticket_ref, w.created_at + FROM billing_work_reports w` + var args []any + if orgID != "" { + query += ` INNER JOIN billing_sessions s ON s.id = w.session_id WHERE s.org_id = ?` + args = append(args, orgID) + } + query += ` ORDER BY w.id DESC LIMIT ?` + args = append(args, limit) + rows, err := s.db.Query(query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingWorkReport + for rows.Next() { + var r BillingWorkReport + var createdAt string + if err := rows.Scan(&r.ID, &r.SessionID, &r.OperatorID, &r.Summary, &r.Category, &r.TicketRef, &createdAt); err != nil { + return nil, err + } + r.CreatedAt = parseSQLiteTime(createdAt) + out = append(out, &r) + } + return out, rows.Err() +} + +func (s *SQLiteDB) ListBillingCurrencies() ([]*BillingCurrency, error) { + s.mu.RLock() + defer s.mu.RUnlock() + rows, err := s.db.Query(`SELECT code, symbol, exchange_rate_to_base FROM billing_currencies ORDER BY code`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []*BillingCurrency + for rows.Next() { + var c BillingCurrency + if err := rows.Scan(&c.Code, &c.Symbol, &c.ExchangeRateToBase); err != nil { + return nil, err + } + out = append(out, &c) + } + return out, rows.Err() +} + +func (s *SQLiteDB) UpsertBillingCurrency(c *BillingCurrency) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec( + `INSERT INTO billing_currencies (code, symbol, exchange_rate_to_base) VALUES (?, ?, ?) + ON CONFLICT(code) DO UPDATE SET symbol=excluded.symbol, exchange_rate_to_base=excluded.exchange_rate_to_base`, + c.Code, c.Symbol, c.ExchangeRateToBase, + ) + return err +} + +func (s *SQLiteDB) DeleteBillingCurrency(code string) error { + s.mu.Lock() + defer s.mu.Unlock() + _, err := s.db.Exec(`DELETE FROM billing_currencies WHERE code = ?`, strings.ToUpper(code)) + return err +} diff --git a/betterdesk-server/main.go b/betterdesk-server/main.go index 3a0bd521..f534038a 100644 --- a/betterdesk-server/main.go +++ b/betterdesk-server/main.go @@ -21,6 +21,7 @@ import ( "github.com/unitronix/betterdesk-server/api" "github.com/unitronix/betterdesk-server/audit" "github.com/unitronix/betterdesk-server/auth" + "github.com/unitronix/betterdesk-server/billing" "github.com/unitronix/betterdesk-server/cdap" "github.com/unitronix/betterdesk-server/config" "github.com/unitronix/betterdesk-server/crypto" @@ -32,6 +33,7 @@ import ( "github.com/unitronix/betterdesk-server/reload" "github.com/unitronix/betterdesk-server/security" sigServer "github.com/unitronix/betterdesk-server/signal" + "github.com/unitronix/betterdesk-server/timesync" ) var ( @@ -274,6 +276,20 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + // Time sync + billing (commercialization module) + timeSyncSvc := timesync.NewService(database, timesync.Config{ + Servers: cfg.GetNTPServers(), + Interval: 60 * time.Second, + QueryTimeout: 5 * time.Second, + MaxSkew: time.Duration(cfg.BillingMaxClockSkewMS) * time.Millisecond, + RequireSync: cfg.BillingRequireSyncedClock, + }) + timeSyncSvc.Start(ctx) + defer timeSyncSvc.Stop() + + billingSvc := billing.NewService(database, timeSyncSvc, cfg.BillingRoundingMinutes, cfg.BillingRequireWorkReport) + billingSvc.Start(ctx) + // Start SIGHUP listener in background reloadDone := make(chan struct{}) go reloadHandler.ListenSIGHUP(reloadDone) @@ -295,6 +311,7 @@ func main() { sig.SetBlocklist(blocklist) sig.SetRateLimiter(ipLimiter) sig.SetAuditLogger(auditLogger) + sig.SetBillingService(billingSvc) if err := sig.Start(ctx); err != nil { log.Fatalf("Failed to start signal server: %v", err) } @@ -305,6 +322,7 @@ func main() { if connLimiter != nil { relaySrv.SetConnLimiter(connLimiter) } + relaySrv.SetBillingCallbacks(billingSvc.ActivateRelay, billingSvc.EndRelay) if err := relaySrv.Start(ctx); err != nil { log.Fatalf("Failed to start relay server: %v", err) } @@ -319,6 +337,8 @@ func main() { apiSrv.SetMetrics(mc) apiSrv.SetJWTManager(jwtManager) apiSrv.SetKeyPair(kp) + apiSrv.SetTimeSyncService(timeSyncSvc) + apiSrv.SetBillingService(billingSvc) // LDAP provider (loads config from DB, hot-reloadable via API) apiSrv.InitLDAP() diff --git a/betterdesk-server/relay/server.go b/betterdesk-server/relay/server.go index 03d81c19..1e61c340 100644 --- a/betterdesk-server/relay/server.go +++ b/betterdesk-server/relay/server.go @@ -39,6 +39,9 @@ type Server struct { // Stats ActiveSessions atomic.Int64 TotalRelayed atomic.Int64 + + onRelayStart func(uuid string) + onRelayEnd func(uuid string) } // Indirection for testing. @@ -69,6 +72,12 @@ func (s *Server) SetConnLimiter(cl *ratelimit.ConnLimiter) { s.connLimiter = cl } +// SetBillingCallbacks registers hooks when relay sessions start/end (commercialization). +func (s *Server) SetBillingCallbacks(onStart, onEnd func(uuid string)) { + s.onRelayStart = onStart + s.onRelayEnd = onEnd +} + // Start launches the relay TCP listener. func (s *Server) Start(ctx context.Context) error { s.ctx, s.cancel = context.WithCancel(ctx) @@ -230,6 +239,10 @@ func (s *Server) startRelay(conn1, conn2 net.Conn, uuid string) { log.Printf("[relay] Pair established: %s <-> %s (UUID: %s)", conn1.RemoteAddr(), conn2.RemoteAddr(), uuid) + if s.onRelayStart != nil { + s.onRelayStart(uuid) + } + // NOTE: Do NOT send RelayResponse confirmation to clients here. // The RustDesk client's create_relay() does not read any response from // the relay server after sending RequestRelay. The client's @@ -280,6 +293,10 @@ func (s *Server) startRelay(conn1, conn2 net.Conn, uuid string) { // Wait for one direction to finish, then clean up both <-done + if s.onRelayEnd != nil { + s.onRelayEnd(uuid) + } + conn1.Close() conn2.Close() diff --git a/betterdesk-server/signal/handler.go b/betterdesk-server/signal/handler.go index 232a4359..0af2032d 100644 --- a/betterdesk-server/signal/handler.go +++ b/betterdesk-server/signal/handler.go @@ -553,6 +553,21 @@ func (s *Server) handlePunchHoleRequest(msg *pb.PunchHoleRequest, raddr *net.UDP return } + if s.billing != nil { + if check := s.billing.CheckConnection(targetID); !check.Allowed { + log.Printf("[signal] PunchHole: billing denied for target %s: %s", targetID, check.Reason) + resp := &pb.RendezvousMessage{ + Union: &pb.RendezvousMessage_PunchHoleResponse{ + PunchHoleResponse: &pb.PunchHoleResponse{ + Failure: pb.PunchHoleResponse_OFFLINE, + }, + }, + } + s.sendUDP(resp, raddr) + return + } + } + relayServer, sameNetwork, hairpin := s.selectPeerRelayServer(s.getRelayServer(), raddr, target.UDPAddr) initiatorID := s.peerIDForAddr(raddr) relayServer = s.applyNetworkRelayPolicy(relayServer, initiatorID, targetID) @@ -1025,10 +1040,39 @@ func (s *Server) handleRequestRelay(msg *pb.RequestRelay, raddr *net.UDPAddr) { return } + initiatorID := s.peerIDForAddr(raddr) + if s.billing != nil { + if check := s.billing.CheckConnection(targetID); !check.Allowed { + log.Printf("[signal] RequestRelay: billing denied for target %s: %s", targetID, check.Reason) + resp := &pb.RendezvousMessage{ + Union: &pb.RendezvousMessage_RelayResponse{ + RelayResponse: &pb.RelayResponse{ + RefuseReason: "Billing suspended", + RelayServer: relayServer, + }, + }, + } + s.sendUDP(resp, raddr) + return + } + if err := s.billing.PrepareRelay(relayUUID, targetID, initiatorID); err != nil { + log.Printf("[signal] RequestRelay: billing prepare failed: %v", err) + resp := &pb.RendezvousMessage{ + Union: &pb.RendezvousMessage_RelayResponse{ + RelayResponse: &pb.RelayResponse{ + RefuseReason: "Billing blocked", + RelayServer: relayServer, + }, + }, + } + s.sendUDP(resp, raddr) + return + } + } + // LAN detection: use server's LAN IP only for genuine LAN cases. Shared // public IP peers keep the public relay to avoid NAT hairpin failures (#121). relayServer, sameNetwork, hairpin := s.selectPeerRelayServer(relayServer, raddr, target.UDPAddr) - initiatorID := s.peerIDForAddr(raddr) relayServer = s.applyNetworkRelayPolicy(relayServer, initiatorID, targetID) if sameNetwork { log.Printf("[signal] RequestRelay LAN detected: %s and %s on same network, relay=%s", raddr.IP, target.UDPAddr.IP, relayServer) diff --git a/betterdesk-server/signal/server.go b/betterdesk-server/signal/server.go index 9cb1b2d1..a817b15d 100644 --- a/betterdesk-server/signal/server.go +++ b/betterdesk-server/signal/server.go @@ -17,6 +17,7 @@ import ( "time" "github.com/unitronix/betterdesk-server/audit" + "github.com/unitronix/betterdesk-server/billing" "github.com/unitronix/betterdesk-server/codec" "github.com/unitronix/betterdesk-server/config" "github.com/unitronix/betterdesk-server/crypto" @@ -117,6 +118,8 @@ type Server struct { // networkPolicy resolves org-level block_direct_p2p / allowed relay servers. networkPolicy *policy.NetworkResolver + + billing *billing.Service } // New creates a new signal server instance. @@ -148,6 +151,11 @@ func (s *Server) SetAuditLogger(l *audit.Logger) { s.auditLog = l } +// SetBillingService attaches commercialization billing gates to signal handling. +func (s *Server) SetBillingService(b *billing.Service) { + s.billing = b +} + // PeerMap returns the server's in-memory peer map for external access (e.g., API). func (s *Server) PeerMap() *peer.Map { return s.peers diff --git a/betterdesk-server/timesync/ntp.go b/betterdesk-server/timesync/ntp.go new file mode 100644 index 00000000..33fd6c82 --- /dev/null +++ b/betterdesk-server/timesync/ntp.go @@ -0,0 +1,76 @@ +// Package timesync monitors server clock accuracy against NTP sources. +package timesync + +import ( + "encoding/binary" + "errors" + "fmt" + "net" + "time" +) + +const ntpEpochOffset = 2208988800 // seconds between 1900-01-01 and 1970-01-01 + +// QueryNTP performs a single NTP v4 client query and returns the estimated +// offset between the local clock and the remote server (local - remote). +func QueryNTP(server string, timeout time.Duration) (offset time.Duration, stratum uint8, err error) { + if timeout <= 0 { + timeout = 5 * time.Second + } + addr, err := net.ResolveUDPAddr("udp", net.JoinHostPort(server, "123")) + if err != nil { + return 0, 0, fmt.Errorf("timesync: resolve %s: %w", server, err) + } + + conn, err := net.DialUDP("udp", nil, addr) + if err != nil { + return 0, 0, fmt.Errorf("timesync: dial %s: %w", server, err) + } + defer conn.Close() + _ = conn.SetDeadline(time.Now().Add(timeout)) + + // NTP request: LI=0, VN=4, Mode=3 (client) + req := make([]byte, 48) + req[0] = 0x23 + + t1 := time.Now() + if _, err := conn.Write(req); err != nil { + return 0, 0, fmt.Errorf("timesync: write: %w", err) + } + + resp := make([]byte, 48) + n, err := conn.Read(resp) + if err != nil { + return 0, 0, fmt.Errorf("timesync: read: %w", err) + } + if n < 48 { + return 0, 0, errors.New("timesync: short NTP response") + } + + t4 := time.Now() + stratum = resp[1] + + t2 := ntpTimestampToTime(resp[32:40]) + t3 := ntpTimestampToTime(resp[40:48]) + if t2.IsZero() || t3.IsZero() { + return 0, stratum, errors.New("timesync: invalid NTP timestamps") + } + + // Standard NTP offset: ((t2 - t1) + (t3 - t4)) / 2 + offset = (t2.Sub(t1) + t3.Sub(t4)) / 2 + return offset, stratum, nil +} + +func ntpTimestampToTime(b []byte) time.Time { + if len(b) < 8 { + return time.Time{} + } + secs := binary.BigEndian.Uint32(b[0:4]) + frac := binary.BigEndian.Uint32(b[4:8]) + if secs == 0 { + return time.Time{} + } + unix := int64(secs) - ntpEpochOffset + nano := (int64(frac) * 1e9) >> 32 + return time.Unix(unix, nano).UTC() +} diff --git a/betterdesk-server/timesync/ntp_test.go b/betterdesk-server/timesync/ntp_test.go new file mode 100644 index 00000000..81017546 --- /dev/null +++ b/betterdesk-server/timesync/ntp_test.go @@ -0,0 +1,30 @@ +package timesync + +import ( + "testing" + "time" +) + +func TestNtpTimestampToTime(t *testing.T) { + // 2024-01-01 00:00:00 UTC ≈ NTP seconds since 1900 + b := make([]byte, 8) + secs := uint32(1704067200 + ntpEpochOffset) + b[0] = byte(secs >> 24) + b[1] = byte(secs >> 16) + b[2] = byte(secs >> 8) + b[3] = byte(secs) + got := ntpTimestampToTime(b) + if got.IsZero() { + t.Fatal("expected non-zero time") + } + if got.UTC().Year() != 2024 { + t.Fatalf("year = %d", got.UTC().Year()) + } +} + +func TestQueryNTPInvalidServer(t *testing.T) { + _, _, err := QueryNTP("127.0.0.1:1", 200*time.Millisecond) + if err == nil { + t.Fatal("expected error for unreachable NTP") + } +} diff --git a/betterdesk-server/timesync/os_linux.go b/betterdesk-server/timesync/os_linux.go new file mode 100644 index 00000000..045bdb0b --- /dev/null +++ b/betterdesk-server/timesync/os_linux.go @@ -0,0 +1,25 @@ +//go:build linux + +package timesync + +import ( + "os/exec" + "strings" +) + +func readOSClockSynced() *bool { + out, err := exec.Command("timedatectl", "show", "-p", "NTPSynchronized", "--value").Output() + if err != nil { + return nil + } + v := strings.TrimSpace(string(out)) + if v == "yes" { + t := true + return &t + } + if v == "no" { + f := false + return &f + } + return nil +} diff --git a/betterdesk-server/timesync/os_other.go b/betterdesk-server/timesync/os_other.go new file mode 100644 index 00000000..b66e9b4d --- /dev/null +++ b/betterdesk-server/timesync/os_other.go @@ -0,0 +1,7 @@ +//go:build !linux + +package timesync + +func readOSClockSynced() *bool { + return nil +} diff --git a/betterdesk-server/timesync/service.go b/betterdesk-server/timesync/service.go new file mode 100644 index 00000000..00681f32 --- /dev/null +++ b/betterdesk-server/timesync/service.go @@ -0,0 +1,221 @@ +package timesync + +import ( + "context" + "encoding/json" + "log" + "sync" + "time" + + "github.com/unitronix/betterdesk-server/db" +) + +// Status is the last known clock synchronization state. +type Status struct { + Synced bool `json:"synced"` + OffsetMS int64 `json:"offset_ms"` + LastCheckAt time.Time `json:"last_check_at"` + NTPServer string `json:"ntp_server,omitempty"` + Stratum uint8 `json:"stratum,omitempty"` + MaxSkewMS int64 `json:"max_skew_ms"` + RequireSync bool `json:"require_sync_for_billing"` + LastError string `json:"last_error,omitempty"` + OSClockSynced *bool `json:"os_clock_synced,omitempty"` +} + +// Config controls periodic NTP checks. +type Config struct { + Servers []string + Interval time.Duration + QueryTimeout time.Duration + MaxSkew time.Duration + RequireSync bool +} + +// Service periodically queries NTP and exposes clock health for billing. +type Service struct { + cfg Config + db db.Database + + mu sync.RWMutex + status Status + + cancel context.CancelFunc + wg sync.WaitGroup +} + +// NewService creates a time sync monitor. +func NewService(database db.Database, cfg Config) *Service { + if len(cfg.Servers) == 0 { + cfg.Servers = []string{"pool.ntp.org", "time.google.com", "time.cloudflare.com"} + } + if cfg.Interval <= 0 { + cfg.Interval = 60 * time.Second + } + if cfg.QueryTimeout <= 0 { + cfg.QueryTimeout = 5 * time.Second + } + if cfg.MaxSkew <= 0 { + cfg.MaxSkew = 2 * time.Second + } + return &Service{ + cfg: cfg, + db: database, + status: Status{ + MaxSkewMS: cfg.MaxSkew.Milliseconds(), + RequireSync: cfg.RequireSync, + }, + } +} + +// Start begins periodic NTP checks. +func (s *Service) Start(ctx context.Context) { + if s.cancel != nil { + return + } + runCtx, cancel := context.WithCancel(ctx) + s.cancel = cancel + s.wg.Add(1) + go s.loop(runCtx) + s.CheckNow() +} + +// Stop stops background checks. +func (s *Service) Stop() { + if s.cancel != nil { + s.cancel() + s.wg.Wait() + s.cancel = nil + } +} + +func (s *Service) loop(ctx context.Context) { + defer s.wg.Done() + ticker := time.NewTicker(s.cfg.Interval) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + s.CheckNow() + } + } +} + +// CheckNow runs an immediate NTP check against configured servers. +func (s *Service) CheckNow() Status { + var ( + bestOffset time.Duration + bestServer string + bestStratum uint8 + lastErr error + found bool + ) + + for _, server := range s.cfg.Servers { + offset, stratum, err := QueryNTP(server, s.cfg.QueryTimeout) + if err != nil { + lastErr = err + log.Printf("[timesync] NTP query %s failed: %v", server, err) + continue + } + if !found || absDuration(offset) < absDuration(bestOffset) { + bestOffset = offset + bestServer = server + bestStratum = stratum + found = true + } + } + + st := Status{ + LastCheckAt: time.Now().UTC(), + MaxSkewMS: s.cfg.MaxSkew.Milliseconds(), + RequireSync: s.cfg.RequireSync, + } + if osSync := readOSClockSynced(); osSync != nil { + st.OSClockSynced = osSync + } + + if !found { + st.Synced = false + if lastErr != nil { + st.LastError = lastErr.Error() + } else { + st.LastError = "no NTP servers responded" + } + s.setStatus(st) + s.persistStatus(st) + return st + } + + offsetMS := bestOffset.Milliseconds() + st.OffsetMS = offsetMS + st.NTPServer = bestServer + st.Stratum = bestStratum + st.Synced = absDuration(bestOffset) <= s.cfg.MaxSkew + if !st.Synced { + st.LastError = "clock skew exceeds threshold" + } + + s.setStatus(st) + s.persistStatus(st) + if !st.Synced { + log.Printf("[timesync] WARNING: clock skew %dms (max %dms) via %s", + offsetMS, s.cfg.MaxSkew.Milliseconds(), bestServer) + } + return st +} + +func (s *Service) setStatus(st Status) { + s.mu.Lock() + s.status = st + s.mu.Unlock() +} + +func (s *Service) persistStatus(st Status) { + if s.db == nil { + return + } + b, err := json.Marshal(st) + if err != nil { + return + } + _ = s.db.SetConfig("timesync_last_status", string(b)) +} + +// GetStatus returns the cached synchronization state. +func (s *Service) GetStatus() Status { + s.mu.RLock() + defer s.mu.RUnlock() + return s.status +} + +// IsSynced reports whether the server clock is within configured skew. +func (s *Service) IsSynced() bool { + s.mu.RLock() + defer s.mu.RUnlock() + if s.cfg.RequireSync && !s.status.Synced { + return false + } + return s.status.Synced +} + +// OffsetAtCheck returns the last measured offset in milliseconds. +func (s *Service) OffsetMS() int64 { + s.mu.RLock() + defer s.mu.RUnlock() + return s.status.OffsetMS +} + +// NowUTC returns the current UTC time used for billing timestamps. +func (s *Service) NowUTC() time.Time { + return time.Now().UTC() +} + +func absDuration(d time.Duration) time.Duration { + if d < 0 { + return -d + } + return d +} diff --git a/web-nodejs/.env.example b/web-nodejs/.env.example index a34e37ba..894f28c5 100644 --- a/web-nodejs/.env.example +++ b/web-nodejs/.env.example @@ -58,3 +58,10 @@ TRUST_PROXY=false # Console→Go API: keep on 127.0.0.1 (native install) or http://betterdesk-server:21114/api (Docker). # Do not expose the Go API port directly to WAN — use the console proxy on :21121 for RustDesk clients. + +# Billing / NTP (commercialization module — merged on update, missing keys only) +NTP_SERVERS=pool.ntp.org,time.google.com,time.cloudflare.com +BILLING_MAX_CLOCK_SKEW_MS=2000 +BILLING_REQUIRE_SYNCED_CLOCK=1 +BILLING_ROUNDING_MINUTES=1 +BILLING_REQUIRE_WORK_REPORT=1 diff --git a/web-nodejs/lang/ar.json b/web-nodejs/lang/ar.json index 42c537a2..64055610 100644 --- a/web-nodejs/lang/ar.json +++ b/web-nodejs/lang/ar.json @@ -1,3578 +1,3671 @@ { - "_meta": { - "name": "Arabic", - "native_name": "العربية", - "flag": "🇸🇦", - "needs_review": true, - "rtl": true + "_meta": { + "name": "Arabic", + "native_name": "العربية", + "flag": "🇸🇦", + "needs_review": true, + "rtl": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "تحميل...", + "confirm": "يتأكد", + "alert": "Alert", + "prompt": "أدخل القيمة", + "copied": "تم النسخ إلى الحافظة", + "save": "يحفظ", + "saved": "أنقذ", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "يلغي", + "delete": "يمسح", + "actions": "Actions", + "close": "يغلق", + "required": "مطلوب", + "name_required": "الاسم مطلوب", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "JSON غير صالح", + "field_required": "مطلوب {field}", + "back": "خلف", + "edit": "يحرر", + "yes": "نعم", + "no": "لا" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "لوحة القيادة", + "devices": "الأجهزة", + "keys": "Keys", + "generator": "Generator", + "settings": "إعدادات", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "طلبات المساعدة", + "activity": "Activity", + "automation": "الأتمتة", + "file_transfer": "نقل الملفات", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "إدارة", + "toggle_sidebar": "تبديل الشريط الجانبي", + "cdap": "أجهزة CDAP", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "رموز الجهاز", + "organizations": "المنظمات", + "policies": "السياسات", + "attestation": "Attestation", + "remote": "سطح المكتب البعيد", + "toolkit": "Toolkit", + "security_audit": "التدقيق الأمني", + "languages": "Languages", + "resource_control": "التحكم في الموارد", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "قم بتوسيع الشريط الجانبي", + "toggle_theme": "تبديل الموضوع", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "الأذونات", + "server_management": "إدارة الخادم", + "server_attestation": "اعتماد أداء الخادم", + "commercialization": "التسويق" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "قم بتسجيل الدخول إلى وحدة التحكم BetterDesk", + "username": "اسم المستخدم", + "username_placeholder": "أدخل اسم المستخدم", + "password": "كلمة المرور", + "password_placeholder": "أدخل كلمة المرور", + "remember_me": "Remember me", + "login_failed": "فشل تسجيل الدخول. يرجى التحقق من بيانات الاعتماد الخاصة بك.", + "invalid_credentials": "اسم المستخدم أو كلمة المرور غير صالحة.", + "username_collision": "يوجد بالفعل حساب محلي بهذا اسم المستخدم. سجّل الدخول بكلمة المرور المحلية، أو اطلب من المسؤول إعادة تسمية الحساب المتعارض أو إزالته.", + "fill_all_fields": "يرجى ملء جميع الحقول", + "logout_confirm": "هل أنت متأكد أنك تريد تسجيل الخروج؟", + "change_password": "تغيير كلمة المرور", + "password_required": "كلمة المرور مطلوبة", + "totp_title": "المصادقة الثنائية", + "totp_subtitle": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "استخدم رمز الاسترداد بدلاً من ذلك", + "totp_use_code": "استخدم رمز المصادقة بدلاً من ذلك", + "totp_recovery_code": "رمز الاسترداد", + "totp_back_to_login": "العودة لتسجيل الدخول", + "totp_invalid_code": "رمز التحقق غير صالح. يرجى المحاولة مرة أخرى.", + "totp_enter_code": "الرجاء إدخال رمز مكون من 6 أرقام", + "totp_enter_recovery": "الرجاء إدخال رمز الاسترداد", + "totp_session_expired": "انتهت صلاحية الجلسة. الرجاء تسجيل الدخول مرة أخرى.", + "totp_already_enabled": "تم تمكين المصادقة الثنائية بالفعل", + "pro_only_account": "هذا الحساب مخصص لعميل سطح المكتب RustDesk فقط. يرجى استخدام تطبيق RustDesk لتسجيل الدخول.", + "passwords_mismatch": "كلمات المرور غير متطابقة", + "or": "أو", + "login_sso": "قم بتسجيل الدخول باستخدام SSO", + "login_sso_with": "قم بتسجيل الدخول باستخدام {{provider}}", + "oidc_denied": "تم رفض الوصول من قبل موفر الهوية.", + "oidc_invalid": "رد اتصال OIDC غير صالح. يرجى المحاولة مرة أخرى.", + "oidc_failed": "فشلت مصادقة OIDC. يرجى المحاولة مرة أخرى.", + "oidc_error": "حدث خطأ أثناء تسجيل الدخول إلى SSO.", + "oidc_no_account": "لم يتم العثور على حسابك وتم تعطيل التسجيل التلقائي.", + "totp_rate_limited": "محاولات كثيرة جدًا. يرجى المحاولة مرة أخرى لاحقا.", + "emergency_mode_banner": "Go server غير قابل للوصول — يعمل في وضع الطوارئ (للمسؤول فقط، وظائف محدودة)" + }, + "dashboard": { + "title": "لوحة القيادة", + "subtitle": "Overview of your RustDesk server", + "total_devices": "إجمالي الأجهزة", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "اتصالات نشطة", + "offline_devices": "Offline", + "server_status": "حالة الخادم", + "quick_actions": "إجراءات سريعة", + "manage_devices": "إدارة الأجهزة المتصلة", + "view_keys": "عرض مفاتيح الخادم", + "generate_config": "إنشاء تكوين العميل", + "server_settings": "تكوين الإعدادات", + "greeting_morning": "صباح الخير، {name}", + "greeting_afternoon": "مساء الخير، {name}", + "greeting_evening": "مساء الخير، {name}", + "greeting_night": "ليلة سعيدة، {name}", + "health_overview": "نظرة عامة على الصحة", + "devices_online": "الأجهزة عبر الإنترنت", + "active_alerts": "التنبيهات النشطة", + "recent_connections": "إجمالي الأجهزة", + "server_uptime": "وقت تشغيل الخادم", + "activity_feed": "النشاط الأخير", + "no_recent_activity": "لا يوجد نشاط حديث", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "جرب وضع سطح المكتب لمساحة عمل متعددة النوافذ مع أدوات المراقبة.", + "tip_keyboard_shortcuts": "اضغط على Ctrl+K في أي مكان لفتح لوحة أوامر البحث السريع.", + "tip_address_book": "قم بمزامنة دفتر العناوين الخاص بك عبر الأجهزة عن طريق تسجيل الدخول من عميل RustDesk.", + "tip_2fa": "قم بتمكين المصادقة الثنائية في الإعدادات لمزيد من أمان الحساب.", + "tip_bulk_actions": "حدد أجهزة متعددة واستخدم الإجراءات المجمعة لإدارتها مرة واحدة.", + "tip_theme": "قم بالتبديل بين المظهرين الداكن والفاتح في إعدادات الشريط الجانبي.", + "tip_cdap": "قم بتوصيل أجهزة إنترنت الأشياء وأجهزة الاستشعار الصناعية عبر بوابة CDAP.", + "tip_tutorials": "انقر فوق زر المساعدة الموجود في الزاوية اليمنى السفلية للحصول على برامج تعليمية تفاعلية." + }, + "devices": { + "title": "الأجهزة", + "id": "ID", + "hostname": "Hostname", + "username": "اسم المستخدم", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "مخلوق", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "أجهزة البحث...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "حالة المزامنة", + "sync_success": "تمت مزامنة الحالة بنجاح", + "empty_title": "لم يتم العثور على أي أجهزة", + "empty_text": "لا توجد أجهزة تتطابق مع عوامل التصفية الحالية", + "edit_title": "تفاصيل الجهاز", + "delete_title": "حذف الجهاز", + "delete_confirm": "هل أنت متأكد أنك تريد حذف الجهاز {id}؟", + "delete_warning": "أنت على وشك حذف هذا الجهاز نهائيًا:", + "delete_permanent": "لا يمكن التراجع عن هذا الإجراء. ستتم إزالة جميع البيانات المرتبطة بهذا الجهاز نهائيًا من قاعدة البيانات.", + "delete_success": "تم حذف الجهاز بنجاح", + "revoke_option": "إبطال الجهاز", + "revoke_hint": "حظر معرف الجهاز وقطع الاتصالات النشطة", + "revoke_success": "تم إبطال الجهاز بنجاح", + "details": "تفاصيل الجهاز", + "ban_title": "جهاز الحظر", + "ban_confirm": "هل أنت متأكد أنك تريد حظر جهاز {id}؟", + "ban_success": "تم حظر الجهاز بنجاح", + "unban_title": "جهاز إلغاء الحظر", + "unban_confirm": "هل أنت متأكد أنك تريد إلغاء الحظر على جهاز {id}؟", + "unban_success": "تم إلغاء حظر الجهاز بنجاح", + "change_id": "Change ID", + "change_id_title": "تغيير معرف الجهاز", + "new_id": "New ID", + "change_id_hint": "6-16 حرفًا وأحرفًا وأرقامًا وشرطات وشرطات سفلية فقط", + "change_id_success": "تم تغيير معرف الجهاز بنجاح", + "id_length_error": "يجب أن يتراوح طول المعرف من 6 إلى 16 حرفًا", + "id_format_error": "يمكن أن يحتوي المعرف فقط على أحرف وأرقام وشرطات وشرطات سفلية", + "bulk_delete_title": "حذف أجهزة متعددة", + "bulk_delete_confirm": "هل أنت متأكد أنك تريد حذف أجهزة {count}؟", + "bulk_delete_success": "تم حذف أجهزة {count} بنجاح", + "columns": "Columns", + "toggle_columns": "تبديل الأعمدة المرئية", + "not_found": "لم يتم العثور على الجهاز", + "delete_failed": "فشل في حذف الجهاز", + "change_id_failed": "فشل في تغيير معرف الجهاز", + "invalid_id": "معرف الجهاز غير صالح (مطلوب من 6 إلى 16 حرفًا)", + "invalid_id_format": "تنسيق المعرف غير صالح (الأحرف والأرقام والشرطات والشرطات السفلية فقط)", + "id_exists": "معرف الجهاز موجود بالفعل", + "no_selection": "لم يتم تحديد أي أجهزة", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "سياسة الوصول", + "unattended_access": "الوصول غير المراقب", + "enable_unattended": "تمكين الوصول غير المراقب", + "access_password": "كلمة مرور الوصول", + "password_configured": "تم تعيين كلمة المرور", + "no_password": "لا كلمة المرور", + "new_password": "كلمة المرور الجديدة (اتركها فارغة لتبقى محدثة)", + "clear_password": "مسح كلمة المرور", + "access_schedule": "جدول الوصول", + "enable_schedule": "تمكين الوصول على أساس الوقت", + "allowed_days": "الأيام المسموح بها", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "المشغلين المسموح بهم", + "all_operators": "جميع عوامل التشغيل (اتركها فارغة)", + "operators_hint": "أسماء المستخدمين مفصولة بفواصل. اتركه فارغًا للسماح لجميع المشغلين.", + "last_updated_by": "آخر تحديث بواسطة", + "access_policy_saved": "تم حفظ سياسة الوصول", + "tabs": { + "overview": "ملخص", + "hardware": "Hardware", + "metrics": "المقاييس", + "connections": "اتصالات", + "audit": "Audit", + "info": "Info", + "history": "تاريخ" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "متوسط ​​التحميل", + "network": "محولات الشبكة", + "no_data": "لا توجد بيانات الأجهزة المتاحة", + "title": "معلومات الأجهزة", + "gpu": "Graphics Card" }, - "common": { - "loading": "تحميل...", - "confirm": "يتأكد", - "alert": "Alert", - "prompt": "أدخل القيمة", - "copied": "تم النسخ إلى الحافظة", - "save": "يحفظ", - "saved": "أنقذ", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "يلغي", - "delete": "يمسح", - "actions": "Actions", - "close": "يغلق", - "required": "مطلوب", - "name_required": "الاسم مطلوب", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "JSON غير صالح", - "field_required": "مطلوب {field}", - "back": "خلف", - "edit": "يحرر", - "yes": "نعم", - "no": "لا" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "لوحة القيادة", - "devices": "الأجهزة", - "keys": "Keys", - "generator": "Generator", - "settings": "إعدادات", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "طلبات المساعدة", - "activity": "Activity", - "automation": "الأتمتة", - "file_transfer": "نقل الملفات", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "إدارة", - "toggle_sidebar": "تبديل الشريط الجانبي", - "cdap": "أجهزة CDAP", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "رموز الجهاز", - "organizations": "المنظمات", - "policies": "السياسات", - "attestation": "Attestation", - "remote": "سطح المكتب البعيد", - "toolkit": "Toolkit", - "security_audit": "التدقيق الأمني", - "languages": "Languages", - "resource_control": "التحكم في الموارد", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "قم بتوسيع الشريط الجانبي", - "toggle_theme": "تبديل الموضوع", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "الأذونات", - "server_management": "إدارة الخادم", - "server_attestation": "اعتماد أداء الخادم" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "قم بتسجيل الدخول إلى وحدة التحكم BetterDesk", - "username": "اسم المستخدم", - "username_placeholder": "أدخل اسم المستخدم", - "password": "كلمة المرور", - "password_placeholder": "أدخل كلمة المرور", - "remember_me": "Remember me", - "login_failed": "فشل تسجيل الدخول. يرجى التحقق من بيانات الاعتماد الخاصة بك.", - "invalid_credentials": "اسم المستخدم أو كلمة المرور غير صالحة.", - "username_collision": "يوجد بالفعل حساب محلي بهذا اسم المستخدم. سجّل الدخول بكلمة المرور المحلية، أو اطلب من المسؤول إعادة تسمية الحساب المتعارض أو إزالته.", - "fill_all_fields": "يرجى ملء جميع الحقول", - "logout_confirm": "هل أنت متأكد أنك تريد تسجيل الخروج؟", - "change_password": "تغيير كلمة المرور", - "password_required": "كلمة المرور مطلوبة", - "totp_title": "المصادقة الثنائية", - "totp_subtitle": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "استخدم رمز الاسترداد بدلاً من ذلك", - "totp_use_code": "استخدم رمز المصادقة بدلاً من ذلك", - "totp_recovery_code": "رمز الاسترداد", - "totp_back_to_login": "العودة لتسجيل الدخول", - "totp_invalid_code": "رمز التحقق غير صالح. يرجى المحاولة مرة أخرى.", - "totp_enter_code": "الرجاء إدخال رمز مكون من 6 أرقام", - "totp_enter_recovery": "الرجاء إدخال رمز الاسترداد", - "totp_session_expired": "انتهت صلاحية الجلسة. الرجاء تسجيل الدخول مرة أخرى.", - "totp_already_enabled": "تم تمكين المصادقة الثنائية بالفعل", - "pro_only_account": "هذا الحساب مخصص لعميل سطح المكتب RustDesk فقط. يرجى استخدام تطبيق RustDesk لتسجيل الدخول.", - "passwords_mismatch": "كلمات المرور غير متطابقة", - "or": "أو", - "login_sso": "قم بتسجيل الدخول باستخدام SSO", - "login_sso_with": "قم بتسجيل الدخول باستخدام {{provider}}", - "oidc_denied": "تم رفض الوصول من قبل موفر الهوية.", - "oidc_invalid": "رد اتصال OIDC غير صالح. يرجى المحاولة مرة أخرى.", - "oidc_failed": "فشلت مصادقة OIDC. يرجى المحاولة مرة أخرى.", - "oidc_error": "حدث خطأ أثناء تسجيل الدخول إلى SSO.", - "oidc_no_account": "لم يتم العثور على حسابك وتم تعطيل التسجيل التلقائي.", - "totp_rate_limited": "محاولات كثيرة جدًا. يرجى المحاولة مرة أخرى لاحقا.", - "emergency_mode_banner": "Go server غير قابل للوصول — يعمل في وضع الطوارئ (للمسؤول فقط، وظائف محدودة)" - }, - "dashboard": { - "title": "لوحة القيادة", - "subtitle": "Overview of your RustDesk server", - "total_devices": "إجمالي الأجهزة", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "اتصالات نشطة", - "offline_devices": "Offline", - "server_status": "حالة الخادم", - "quick_actions": "إجراءات سريعة", - "manage_devices": "إدارة الأجهزة المتصلة", - "view_keys": "عرض مفاتيح الخادم", - "generate_config": "إنشاء تكوين العميل", - "server_settings": "تكوين الإعدادات", - "greeting_morning": "صباح الخير، {name}", - "greeting_afternoon": "مساء الخير، {name}", - "greeting_evening": "مساء الخير، {name}", - "greeting_night": "ليلة سعيدة، {name}", - "health_overview": "نظرة عامة على الصحة", - "devices_online": "الأجهزة عبر الإنترنت", - "active_alerts": "التنبيهات النشطة", - "recent_connections": "إجمالي الأجهزة", - "server_uptime": "وقت تشغيل الخادم", - "activity_feed": "النشاط الأخير", - "no_recent_activity": "لا يوجد نشاط حديث", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "جرب وضع سطح المكتب لمساحة عمل متعددة النوافذ مع أدوات المراقبة.", - "tip_keyboard_shortcuts": "اضغط على Ctrl+K في أي مكان لفتح لوحة أوامر البحث السريع.", - "tip_address_book": "قم بمزامنة دفتر العناوين الخاص بك عبر الأجهزة عن طريق تسجيل الدخول من عميل RustDesk.", - "tip_2fa": "قم بتمكين المصادقة الثنائية في الإعدادات لمزيد من أمان الحساب.", - "tip_bulk_actions": "حدد أجهزة متعددة واستخدم الإجراءات المجمعة لإدارتها مرة واحدة.", - "tip_theme": "قم بالتبديل بين المظهرين الداكن والفاتح في إعدادات الشريط الجانبي.", - "tip_cdap": "قم بتوصيل أجهزة إنترنت الأشياء وأجهزة الاستشعار الصناعية عبر بوابة CDAP.", - "tip_tutorials": "انقر فوق زر المساعدة الموجود في الزاوية اليمنى السفلية للحصول على برامج تعليمية تفاعلية." - }, - "devices": { - "title": "الأجهزة", - "id": "ID", - "hostname": "Hostname", - "username": "اسم المستخدم", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "مخلوق", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "أجهزة البحث...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "حالة المزامنة", - "sync_success": "تمت مزامنة الحالة بنجاح", - "empty_title": "لم يتم العثور على أي أجهزة", - "empty_text": "لا توجد أجهزة تتطابق مع عوامل التصفية الحالية", - "edit_title": "تفاصيل الجهاز", - "delete_title": "حذف الجهاز", - "delete_confirm": "هل أنت متأكد أنك تريد حذف الجهاز {id}؟", - "delete_warning": "أنت على وشك حذف هذا الجهاز نهائيًا:", - "delete_permanent": "لا يمكن التراجع عن هذا الإجراء. ستتم إزالة جميع البيانات المرتبطة بهذا الجهاز نهائيًا من قاعدة البيانات.", - "delete_success": "تم حذف الجهاز بنجاح", - "revoke_option": "إبطال الجهاز", - "revoke_hint": "حظر معرف الجهاز وقطع الاتصالات النشطة", - "revoke_success": "تم إبطال الجهاز بنجاح", - "details": "تفاصيل الجهاز", - "ban_title": "جهاز الحظر", - "ban_confirm": "هل أنت متأكد أنك تريد حظر جهاز {id}؟", - "ban_success": "تم حظر الجهاز بنجاح", - "unban_title": "جهاز إلغاء الحظر", - "unban_confirm": "هل أنت متأكد أنك تريد إلغاء الحظر على جهاز {id}؟", - "unban_success": "تم إلغاء حظر الجهاز بنجاح", - "change_id": "Change ID", - "change_id_title": "تغيير معرف الجهاز", - "new_id": "New ID", - "change_id_hint": "6-16 حرفًا وأحرفًا وأرقامًا وشرطات وشرطات سفلية فقط", - "change_id_success": "تم تغيير معرف الجهاز بنجاح", - "id_length_error": "يجب أن يتراوح طول المعرف من 6 إلى 16 حرفًا", - "id_format_error": "يمكن أن يحتوي المعرف فقط على أحرف وأرقام وشرطات وشرطات سفلية", - "bulk_delete_title": "حذف أجهزة متعددة", - "bulk_delete_confirm": "هل أنت متأكد أنك تريد حذف أجهزة {count}؟", - "bulk_delete_success": "تم حذف أجهزة {count} بنجاح", - "columns": "Columns", - "toggle_columns": "تبديل الأعمدة المرئية", - "not_found": "لم يتم العثور على الجهاز", - "delete_failed": "فشل في حذف الجهاز", - "change_id_failed": "فشل في تغيير معرف الجهاز", - "invalid_id": "معرف الجهاز غير صالح (مطلوب من 6 إلى 16 حرفًا)", - "invalid_id_format": "تنسيق المعرف غير صالح (الأحرف والأرقام والشرطات والشرطات السفلية فقط)", - "id_exists": "معرف الجهاز موجود بالفعل", - "no_selection": "لم يتم تحديد أي أجهزة", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "سياسة الوصول", - "unattended_access": "الوصول غير المراقب", - "enable_unattended": "تمكين الوصول غير المراقب", - "access_password": "كلمة مرور الوصول", - "password_configured": "تم تعيين كلمة المرور", - "no_password": "لا كلمة المرور", - "new_password": "كلمة المرور الجديدة (اتركها فارغة لتبقى محدثة)", - "clear_password": "مسح كلمة المرور", - "access_schedule": "جدول الوصول", - "enable_schedule": "تمكين الوصول على أساس الوقت", - "allowed_days": "الأيام المسموح بها", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "المشغلين المسموح بهم", - "all_operators": "جميع عوامل التشغيل (اتركها فارغة)", - "operators_hint": "أسماء المستخدمين مفصولة بفواصل. اتركه فارغًا للسماح لجميع المشغلين.", - "last_updated_by": "آخر تحديث بواسطة", - "access_policy_saved": "تم حفظ سياسة الوصول", - "tabs": { - "overview": "ملخص", - "hardware": "Hardware", - "metrics": "المقاييس", - "connections": "اتصالات", - "audit": "Audit", - "info": "Info", - "history": "تاريخ" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "متوسط ​​التحميل", - "network": "محولات الشبكة", - "no_data": "لا توجد بيانات الأجهزة المتاحة", - "title": "معلومات الأجهزة", - "gpu": "Graphics Card" - }, - "display_name": "اسم العرض", - "display_name_placeholder": "الاسم المخصص (يتجاوز اسم المضيف)", - "note_placeholder": "ملاحظات حول هذا الجهاز", - "tags": "Tags", - "filter_by_tags": "التصفية حسب العلامات", - "no_tags": "No tags", - "all_groups": "جميع المجموعات", - "create_group": "إنشاء مجموعة", - "manage_groups": "إدارة المجموعات", - "group_name": "اسم المجموعة", - "group_name_placeholder": "على سبيل المثال أجهزة الكمبيوتر وسائل الإعلام", - "dynamic_group": "مجموعة ديناميكية من العلامة", - "dynamic_group_hint": "تنضم الأجهزة التي تحمل هذه العلامة تلقائيًا.", - "tag_filter": "Tag filter", - "group_allowed_users": "المستخدمين المسموح لهم", - "group_allowed_users_hint": "اتركه فارغًا لإبقاء المجموعة مرئية لجميع الأشخاص الذين لديهم أذونات الجهاز.", - "group_tag_required": "مرشح العلامات مطلوب للمجموعات الديناميكية", - "group_invalid": "معرف المجموعة غير صالح", - "group_not_found": "لم يتم العثور على المجموعة", - "group_saved": "تم حفظ مجموعة الأجهزة", - "groups_saved": "تم حفظ مجموعات الأجهزة", + "display_name": "اسم العرض", + "display_name_placeholder": "الاسم المخصص (يتجاوز اسم المضيف)", + "note_placeholder": "ملاحظات حول هذا الجهاز", + "tags": "Tags", + "filter_by_tags": "التصفية حسب العلامات", + "no_tags": "No tags", + "all_groups": "جميع المجموعات", + "create_group": "إنشاء مجموعة", + "manage_groups": "إدارة المجموعات", + "group_name": "اسم المجموعة", + "group_name_placeholder": "على سبيل المثال أجهزة الكمبيوتر وسائل الإعلام", + "dynamic_group": "مجموعة ديناميكية من العلامة", + "dynamic_group_hint": "تنضم الأجهزة التي تحمل هذه العلامة تلقائيًا.", + "tag_filter": "Tag filter", + "group_allowed_users": "المستخدمين المسموح لهم", + "group_allowed_users_hint": "اتركه فارغًا لإبقاء المجموعة مرئية لجميع الأشخاص الذين لديهم أذونات الجهاز.", + "group_tag_required": "مرشح العلامات مطلوب للمجموعات الديناميكية", + "group_invalid": "معرف المجموعة غير صالح", + "group_not_found": "لم يتم العثور على المجموعة", + "group_saved": "تم حفظ مجموعة الأجهزة", + "groups_saved": "تم حفظ مجموعات الأجهزة", "group_membership_added": "تمت الإضافة إلى المجموعة", "group_membership_removed": "تمت الإزالة من المجموعة", - "no_groups": "لا توجد مجموعات حتى الآن", - "manual_groups": "المجموعات اليدوية", - "dynamic_memberships": "العضويات الديناميكية", - "group_allowed_user_groups": "مجموعات المستخدمين المسموح بها", - "group_allowed_user_groups_hint": "يمكن للمستخدمين في مجموعات المستخدمين المحددة الوصول إلى مجموعة الأجهزة هذه.", - "no_user_groups": "لا توجد مجموعات مستخدمين", - "edit_group": "تحرير المجموعة", - "delete_group": "حذف المجموعة", - "delete_group_confirm": "هل تريد حذف مجموعة الأجهزة {name}؟", - "group_deleted": "تم حذف مجموعة الأجهزة", - "folder_group_readonly": "تتم إدارة المجموعات المدعومة بالمجلدات من المجلدات.", - "manage_user_groups": "إدارة مجموعات المستخدمين", - "restore_failed": "فشل استعادة الجهاز", - "no_signal_tooltip": "اتصل العميل بـ API مؤخرًا لكنه غير مسجل على خادم الإشارة (UDP :21116). أعد تشغيل العميل بعد ترحيل الخادم.", - "per_page": "لكل صفحة" - }, - "keys": { - "title": "مفاتيح الخادم", - "subtitle": "المفتاح العام والتكوين لعملاء RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "معلومات الخادم", - "download": "تحميل المفتاح", - "show_qr": "Show QR", - "qr_hint": "قم بمسح رمز الاستجابة السريعة هذا باستخدام تطبيق الهاتف المحمول RustDesk", - "no_key": "لم يتم العثور على مفتاح عام", - "no_key_to_copy": "لا يوجد مفتاح للنسخ", - "no_qr": "رمز الاستجابة السريعة غير متوفر", - "download_success": "تم تنزيل ملف المفتاح", - "not_found": "لم يتم العثور على المفتاح", - "api_not_found": "لم يتم العثور على مفتاح API" - }, - "settings": { - "title": "إعدادات", - "subtitle": "تكوين وحدة التحكم وإعدادات الحساب", - "tab_general": "General", - "tab_server": "الخادم", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "لغة", - "change_password": "تغيير كلمة المرور", - "password_desc": "قم بتحديث كلمة مرور حسابك", - "current_password": "كلمة المرور الحالية", - "new_password": "كلمة المرور الجديدة", - "confirm_password": "تأكيد كلمة المرور", - "save_password": "تحديث كلمة المرور", - "password_changed": "تم تغيير كلمة المرور بنجاح", - "fill_all_fields": "يرجى ملء جميع الحقول", - "passwords_not_match": "كلمات المرور غير متطابقة", - "password_requirements": "متطلبات كلمة المرور", - "password_requirements_not_met": "كلمة السر لا تلبي المتطلبات", - "req_length": "ما لا يقل عن 8 أحرف", - "req_uppercase": "حرف كبير واحد على الأقل", - "req_lowercase": "حرف صغير واحد على الأقل", - "req_number": "رقم واحد على الأقل", - "server_info": "معلومات الخادم", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "نشاط وحدة التحكم الأخيرة", - "no_audit_logs": "لم يتم العثور على سجلات التدقيق", - "backend_title": "الواجهة الخلفية للخادم", - "backend_desc": "اختر الواجهة الخلفية للخادم المراد استخدامها لإدارة الجهاز وخدمات الإشارة/الترحيل.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "خوادم الإشارة والترحيل القياسية RustDesk (hbbs + hbbr). HTTP API الأساسي مع نقاط نهاية محدودة.", - "backend_betterdesk_desc": "خادم محسّن قائم على Go مع مصادقة REST API وJWT الكاملة وقائمة الحظر والعلامات وأحداث WebSocket في الوقت الفعلي وتسجيل التدقيق.", - "backend_feature_signal": "خادم الإشارة (تسجيل الهوية)", - "backend_feature_relay": "خادم الترحيل (ترحيل الاتصال)", - "backend_feature_basic_api": "الراحة الأساسية API", - "backend_feature_full_api": "الراحة الكاملة API (34+ نقطة نهاية)", - "backend_feature_jwt": "مصادقة JWT وTOTP 2FA", - "backend_feature_blocklist": "إدارة قائمة حظر IP/ID", - "backend_feature_tags": "علامات الجهاز والتجميع", - "backend_feature_audit": "تسجيل أحداث التدقيق", - "backend_feature_websocket": "أحداث WebSocket في الوقت الحقيقي", - "backend_connection": "اتصال", - "backend_api_url": "API URL", - "backend_test": "اتصال الاختبار", - "backend_testing": "اختبار...", - "backend_save": "تطبيق الخلفية", - "backend_saved": "تم تغيير الواجهة الخلفية للخادم بنجاح. ستتم الآن إدارة بيانات الجهاز من خلال الواجهة الخلفية الجديدة.", - "backend_save_failed": "فشل في تبديل الواجهة الخلفية للخادم", - "backend_test_success": "تم الاتصال بنجاح! الخادم يمكن الوصول إليه.", - "backend_test_failed": "فشل الاتصال. الخادم غير قابل للوصول.", - "backend_confirm_switch": "هل أنت متأكد أنك تريد تبديل الواجهة الخلفية للخادم؟ سيؤدي هذا إلى تغيير كيفية إدارة الأجهزة.", - "backend_unreachable": "لا يمكن التبديل: الخادم الهدف غير قابل للوصول. ابدأ تشغيل الخادم أولاً.", - "invalid_backend": "تحديد الواجهة الخلفية غير صالح. اختر \"rustdesk\" أو \"betterdesk\".", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "المصادقة الثنائية", - "totp_desc": "أضف طبقة إضافية من الأمان باستخدام تطبيقات المصادقة TOTP (Google Authenticator، وMicrosoft Authenticator، وAuthy، وما إلى ذلك)", - "totp_enabled": "تم تمكين المصادقة الثنائية (2FA).", - "totp_enabled_desc": "حسابك محمي بالمصادقة الثنائية.", - "totp_disabled": "2FA غير ممكّن", - "totp_disabled_desc": "تمكين المصادقة الثنائية لمزيد من أمان الحساب.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "قم بتثبيت تطبيق المصادقة على هاتفك", - "totp_step2": "قم بمسح رمز الاستجابة السريعة أدناه", - "totp_step3": "أدخل الرمز المكون من 6 أرقام للتحقق", - "totp_manual_key": "Manual key", - "totp_enter_code": "أدخل رمز التحقق", - "totp_verify_enable": "التحقق والتمكين", - "totp_enabled_success": "تم تمكين المصادقة الثنائية!", - "totp_recovery_warning": "احفظ رموز الاسترداد هذه في مكان آمن. يمكن استخدام كل رمز مرة واحدة فقط. إذا فقدت إمكانية الوصول إلى تطبيق المصادقة الخاص بك، فيمكنك استخدام هذه الرموز لتسجيل الدخول.", - "totp_done": "Done", - "totp_disable_warning": "سيؤدي تعطيل المصادقة الثنائية إلى جعل حسابك أقل أمانًا. أدخل كلمة المرور الخاصة بك للتأكيد.", - "totp_disabled_success": "تم تعطيل المصادقة الثنائية.", - "tutorials_title": "دروس وأدلة", - "tutorials_desc": "التحكم في الجولات الإرشادية وتراكبات المساعدة المعروضة في جميع أنحاء وحدة التحكم", - "tutorials_enabled": "تمكين الدروس", - "tutorials_enabled_hint": "عند تعطيله، لن تبدأ البرامج التعليمية تلقائيًا وسيتم إخفاء زر المساعدة", - "tutorials_reset_hint": "قم بوضع علامة على جميع البرامج التعليمية كغير مرئية حتى يمكن عرضها مرة أخرى", - "tutorials_enabled_toast": "تم تمكين البرامج التعليمية", - "tutorials_disabled_toast": "البرامج التعليمية معطلة", - "tutorials_reset_toast": "تمت إعادة ضبط جميع البرامج التعليمية", - "tab_auth": "المصادقة", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "قم بتكوين المصادقة الخارجية عبر LDAP أو Active Directory. سيتمكن المستخدمون من تسجيل الدخول باستخدام بيانات اعتماد المجال الخاصة بهم.", - "ldap_enabled": "تمكين مصادقة LDAP", - "ldap_enabled_hint": "عند التمكين، يمكن للمستخدمين تسجيل الدخول باستخدام بيانات اعتماد LDAP/AD. لا تزال الحسابات المحلية تعمل كاحتياطي.", - "ldap_connection": "اتصال الخادم", - "ldap_host": "يستضيف", - "ldap_port": "ميناء", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "تخطي التحقق من TLS", - "ldap_timeout": "مهلة (مهلة) الاتصال", - "ldap_timeout_hint": "ثواني لانتظار استجابة خادم LDAP", - "ldap_bind_mode": "وضع الربط", - "ldap_direct_bind": "الربط المباشر", - "ldap_direct_bind_hint": "اربط مباشرة باستخدام قالب DN بدلاً من استخدام حساب الخدمة للبحث.", - "ldap_bind_dn": "ربط DN (حساب الخدمة)", - "ldap_bind_dn_hint": "الاسم المميز لحساب خدمة القراءة فقط المستخدم للبحث عن المستخدمين.", - "ldap_bind_password": "ربط كلمة المرور", - "ldap_base_dn": "الاسم المميز الأساسي", - "ldap_base_dn_hint": "قاعدة البحث للعثور على المستخدمين، على سبيل المثال. dc=example,dc=com.dc=example,dc=com", - "ldap_user_filter": "مرشح المستخدم", - "ldap_user_filter_hint": "مرشح LDAP للعثور على المستخدمين. استخدم {{username}} كعنصر نائب. الافتراضي: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "قالب DN للربط المباشر", - "ldap_direct_bind_dn_hint": "قالب DN للربط المباشر. استخدم {{username}} كعنصر نائب، على سبيل المثال. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "سمات المستخدم", - "ldap_attr_id": "سمة اسم المستخدم", - "ldap_attr_email": "سمة البريد الإلكتروني", - "ldap_attr_name": "سمة اسم العرض", - "ldap_group_mapping": "المجموعة → تعيين الأدوار", - "ldap_group_base_dn": "الاسم المميز لقاعدة المجموعة", - "ldap_group_base_dn_hint": "اتركه فارغًا لاستخدام الاسم المميز الأساسي", - "ldap_group_filter": "مرشح المجموعة", - "ldap_group_attr_name": "سمة اسم المجموعة", - "ldap_default_role": "الدور الافتراضي", - "ldap_default_role_hint": "تم تعيين الدور للمستخدمين الذين لا تتطابق مجموعاتهم LDAP مع أي تعيين", - "ldap_role_viewer": "مشاهد", - "ldap_role_operator": "المشغل", - "ldap_role_admin": "مسؤل", - "ldap_group_role_map": "المجموعة → خريطة الدور", - "ldap_group_role_map_hint": "قم بتعيين مجموعات LDAP إلى أدوار BetterDesk. التنسيق: GroupDN = الدور مفصول بـ | (ماسورة). مثال: CN=المسؤولين،DC=مثال،DC=com=admin|CN=Ops،DC=مثال،DC=com=عامل التشغيل", - "ldap_test_connection": "اتصال الاختبار", - "ldap_testing": "اختبار...", - "ldap_test_success": "تم الاتصال بنجاح! يمكن الوصول إلى خادم LDAP وبيانات اعتماد الربط صالحة.", - "ldap_test_failed": "فشل الاتصال", - "ldap_save": "احفظ تكوين LDAP", - "ldap_saved": "تم حفظ تكوين LDAP بنجاح", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "قم بتكوين تسجيل الدخول الموحد عبر موفر OpenID Connect (Azure AD، وOkta، وGoogle، وKeycloak، وما إلى ذلك).", - "oidc_enabled": "تمكين مصادقة OIDC", - "oidc_enabled_hint": "السماح للمستخدمين بتسجيل الدخول باستخدام موفر هوية خارجي", - "oidc_provider": "موفر الهوية", - "oidc_display_name": "اسم عرض الزر", - "oidc_display_name_hint": "النص المعروض على زر تسجيل الدخول (على سبيل المثال Azure AD، Okta)", - "oidc_issuer_url": "المُصدر URL", - "oidc_issuer_url_hint": "جهة إصدار OpenID Connect URL (سيكون الاكتشاف تلقائيًا)", - "oidc_client_id": "معرف العميل", - "oidc_client_secret": "سر العميل", - "oidc_redirect_url": "إعادة توجيه URL (رد الاتصال)", - "oidc_redirect_url_hint": "يجب أن يتطابق تمامًا مع ما تم تكوينه في IdP الخاص بك. عادةً: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "النطاقات", - "oidc_use_pkce": "استخدم PKCE (مستحسن)", - "oidc_auto_discovery": "الاكتشاف التلقائي", - "oidc_allow_signup": "إنشاء المستخدمين تلقائيًا", - "oidc_manual_endpoints": "عناوين URL لنقطة النهاية اليدوية", - "oidc_authorization_url": "نقطة نهاية التفويض", - "oidc_token_url": "نقطة نهاية الرمز المميز", - "oidc_userinfo_url": "نقطة نهاية معلومات المستخدم", - "oidc_claim_mapping": "تعيين المطالبة", - "oidc_claim_username": "المطالبة باسم المستخدم", - "oidc_claim_email": "المطالبة بالبريد الإلكتروني", - "oidc_claim_name": "المطالبة بالاسم المعروض", - "oidc_claim_groups": "مطالبة المجموعات", - "oidc_role_mapping": "رسم خرائط الدور", - "oidc_default_role": "الدور الافتراضي", - "oidc_group_role_map": "المجموعة → تعيين الأدوار", - "oidc_group_role_map_hint": "تعيين واحد لكل سطر: اسم المجموعة=الدور (على سبيل المثال، المسؤولون=المسؤول، المشغلون=المشغل)", - "oidc_test_discovery": "اكتشاف الاختبار", - "oidc_testing": "اختبار...", - "oidc_test_success": "تم الاكتشاف بنجاح! تم حل نقاط النهاية.", - "oidc_test_failed": "فشل الاكتشاف", - "oidc_issuer_required": "مطلوب جهة الإصدار URL لاختبار الاكتشاف", - "oidc_save": "احفظ تكوين OIDC", - "oidc_saved": "تم حفظ تكوين OIDC بنجاح", - "tab_advanced": "متقدم", - "connection_mode_title": "استراتيجية الاتصال", - "connection_mode_desc": "تحكم في طريقة اتصال عملاء RustDesk للسطح المكتبي: P2P مباشر (ثقب الاختراق) عند الإمكان، أو دائمًا عبر الترحيل.", - "connection_mode_label": "وضع الاتصال الافتراضي", - "connection_mode_p2p_first": "P2P أولًا (موصى به) — محاولة الاتصال المباشر، والرجوع إلى الترحيل عند الفشل", - "connection_mode_relay_only": "الترحيل فقط — جميع الجلسات تستخدم خادم الترحيل", - "connection_mode_advanced": "خيارات متقدمة", - "connection_mode_fallback_ms": "مهلة الرجوع لـ P2P (بالمللي ثانية)", - "connection_mode_same_nat_relay": "فرض الترحيل عندما يشترك الطرفان في نفس IP العام (NAT hairpin)", - "connection_mode_network_hint": "يتطلب P2P إمكانية الوصول إلى منفذ UDP 21116 بين العملاء. يجب أن يكون الخادم مفتوحًا على Signal TCP 21116 وRelay TCP 21117 وNAT test TCP 21115. يستخدم عملاء متصفحات الويب الترحيل دائمًا.", - "connection_mode_save": "حفظ", - "connection_mode_save_restart": "حفظ وإعادة تشغيل الخادم", - "connection_mode_saved": "تم حفظ وضع الاتصال", - "connection_mode_restart_started": "بدأت إعادة تشغيل الخادم", - "connection_mode_restart_failed": "فشلت إعادة تشغيل الخادم", - "connection_mode_not_configurable": "لا يمكن تغيير وضع الاتصال في هذا النشر (لم يُعثر على وحدة systemd أو docker-compose)", - "connection_mode_compose_error": "تعذر العثور على قسم بيئة الخادم في docker-compose.yml", - "connection_mode_source_saved": "محفوظ في", - "connection_mode_source_defaults": "استخدام إعدادات الخادم الافتراضية (غير قابلة للكتابة من اللوحة)", - "connection_mode_runtime": "الخادم النشط", - "advanced_title": "ملفات التكوين", - "advanced_desc": "تعديل ملفات تكوين الخادم مباشرةً. قد تتطلب التغييرات إعادة تشغيل الخدمات. يتم إنشاء نسخة احتياطية قبل كل عملية حفظ.", - "advanced_warning": "تحتوي هذه الملفات على أسرار (مفاتيح API، كلمات مرور قاعدة البيانات، أسرار الجلسة). قم بالتعديل فقط إذا كنت تفهم التأثير. قد يمنع وجود أخطاء في بناء الجملة الخادمَ من البدء.", - "advanced_files_label": "الملفات", - "advanced_select_file": "حدد ملفًا من القائمة لعرض محتواه أو تعديله.", - "advanced_reload": "إعادة تحميل", - "advanced_save": "حفظ الملف", - "advanced_apply_restart": "تطبيق (إعادة تشغيل الخدمة)", - "advanced_saved": "تم حفظ ملف التكوين", - "advanced_restart_after_save": "تم حفظ التكوين. هل تريد إعادة تشغيل الخدمة المتأثرة الآن لتطبيق التغييرات؟", - "advanced_restart_confirm": "هل تريد إعادة تشغيل خدمات BetterDesk ذات الصلة؟ قد تتعطل الاتصالات النشطة لفترة وجيزة.", - "advanced_restart_console_confirm": "هل تريد إعادة تشغيل خدمة وحدة التحكم الويب؟ ستنقطع جلسة المتصفح لفترة وجيزة وستُعاد تحميل الصفحة عند عودة وحدة التحكم.", - "advanced_restart_started": "بدأت إعادة تشغيل الخدمة", - "advanced_restart_done": "تمت إعادة تشغيل وحدة التحكم — جارٍ إعادة تحميل الصفحة…", - "advanced_restart_polling": "جارٍ انتظار عودة وحدة التحكم إلى الإنترنت…", - "advanced_restart_timeout": "تم إرسال أمر إعادة التشغيل لكن وحدة التحكم لم تستجب في الوقت المناسب. تحقق من سجلات systemd/NSSM وأعد التحميل يدويًا.", - "advanced_restart_failed": "فشلت إعادة تشغيل الخدمة (صلاحيات غير كافية أو الخدمة غير مثبتة)", - "advanced_save_confirm": "هل تريد حفظ التغييرات على هذا الملف؟ سيتم إنشاء نسخة احتياطية من الإصدار السابق.", - "advanced_unsaved_confirm": "لديك تغييرات غير محفوظة. هل تريد تجاهلها؟", - "advanced_no_files": "لا توجد ملفات تكوين متاحة على هذا النظام.", - "advanced_readonly": "للقراءة فقط", - "advanced_missing": "مفقود", - "advanced_new_file": "ملف جديد (لن يُنشأ حتى تحفظ)", - "advanced_new_file_hint": "ملف جديد — أضف المحتوى واحفظ", - "advanced_backup_created": "تم إنشاء نسخة احتياطية", - "advanced_restart_console": "أعد تشغيل خدمة وحدة التحكم الويب (مثل systemctl restart betterdesk-console) لتطبيق تغييرات .env.", - "advanced_restart_goserver": "أعد تشغيل خادم BetterDesk Go لتحميل تغييرات قائمة الحظر.", - "advanced_restart_systemd": "بعد تعديل وحدات systemd، شغّل: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "أعد تشغيل الخدمة المتأثرة لتطبيق التغييرات.", - "advanced_error_unknown": "ملف تكوين غير معروف", - "advanced_error_not_found": "الملف غير موجود", - "advanced_error_not_file": "المسار ليس ملفًا عاديًا", - "advanced_error_too_large": "الملف يتجاوز الحجم الأقصى للتعديل (512 KB)", - "advanced_error_binary": "لا يمكن تعديل الملفات الثنائية في اللوحة", - "advanced_error_invalid": "محتوى الملف غير صالح", - "advanced_error_not_writable": "عملية وحدة التحكم لا يمكنها الكتابة على هذا الملف", - "advanced_file_console-env": "بيئة وحدة التحكم (.env)", - "advanced_file_console-env-local": "تجاوزات وحدة التحكم (.env.local)", - "advanced_file_go-blocklist": "قائمة حظر خادم Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (وحدة الخدمة)", - "advanced_file_systemd-server": "systemd: betterdesk-server (وحدة الخدمة)", - "advanced_file_console-session-secret": "سر جلسة وحدة التحكم (.session_secret)", - "advanced_file_go-audit-log": "سجل تدقيق خادم Go (audit.jsonl)", - "advanced_file_build-env": "بيئة بناء الوكيل (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (إعداد المشرف)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (التنسيق)", - "advanced_restart_none": "لا تتطلب هذا الملف إعادة تشغيل الخدمة.", - "enrollment_title": "تسجيل الأجهزة (RustDesk)", - "enrollment_desc": "تحكم في طريقة تسجيل عملاء RustDesk الجدد وكيفية موافقة المشغلين عليها في صفحة طلبات التسجيل.", - "enrollment_require_approval": "يتطلب موافقة المشغل (الوضع المُدار)", - "enrollment_require_approval_hint": "عند التفعيل، يُوضع العملاء المجهولون في قائمة انتظار حتى يوافق عليهم المشغل في \"طلبات التسجيل\".", - "enrollment_rich_approve": "نموذج موافقة كامل (الاسم، المجلد، المجموعات، العلامات)", - "enrollment_rich_approve_hint": "يعرض مربع حوار تفصيلي عند الموافقة على طلبات التسجيل أو تسجيل الشبكة المحلية.", - "enrollment_tag_picker": "اختر علامات من علامات الأجهزة الموجودة", - "enrollment_tag_picker_hint": "يتيح للمشغلين اختيار علامات من القائمة المستخدمة في صفحة الأجهزة بدلًا من الكتابة فقط.", - "enrollment_open_requests": "فتح طلبات التسجيل", - "enrollment_pending_count": "{count} طلب تسجيل معلق" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "فشل تسجيل الدخول", - "action_logout": "Logout", - "action_password_change": "تم تغيير كلمة المرور", - "action_2fa_enable": "تم تمكين المصادقة الثنائية (2FA).", - "action_2fa_disable": "2FA معطل", - "action_user_create": "تم إنشاء المستخدم", - "action_user_update": "تم تحديث المستخدم", - "action_user_delete": "تم حذف المستخدم", - "action_settings_update": "تم تحديث الإعدادات", - "action_device_ban": "الجهاز محظور", - "action_device_unban": "الجهاز غير محظور", - "action_device_delete": "تم حذف الجهاز" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "خيارات التكوين", - "server_address": "عنوان الخادم", - "server_address_hint": "مجال الخادم الخاص بك أو عنوان IP", - "custom_port": "Custom Port", - "port_hint": "اتركه فارغًا للافتراضي (21116)", - "relay_server": "خادم الترحيل", - "relay_placeholder": "نفس خادم المعرف إذا كان فارغًا", - "relay_hint": "اختياري: عنوان خادم ترحيل منفصل", - "include_key": "تضمين المفتاح العام في التكوين", - "generate": "إنشاء التكوين", - "output": "مخرجات التكوين", - "usage_title": "تفاصيل الاتصال", - "generated": "تم إنشاء التكوين", - "server_required": "عنوان الخادم مطلوب", - "nothing_to_copy": "قم بإنشاء التكوين أولاً", - "bundles_title": "حزم الوكيل", - "new_bundle": "حزمة جديدة", - "editor_title": "محرر الحزمة", - "empty_state": "حدد حزمة على اليسار أو أنشئ حزمة جديدة للبدء.", - "loading": "تحميل…", - "no_bundles": "لا توجد حزم حتى الآن. قم بإنشاء أول واحد الخاص بك.", - "bundle_name": "اسم الحزمة", - "bundle_name_hint": "التسمية الداخلية فقط - لا تظهر للمستخدمين النهائيين.", - "short_link": "رابط تنزيل قصير", - "short_link_hint": "يُستخدم في عنوان URL العام (/d/…). أحرف صغيرة وأرقام وشرطات فقط (2–32 حرفًا). يُملأ تلقائيًا من اسم الحزمة — اختصره لتسهيل المشاركة (مثل acme).", - "branding_section": "العلامة التجارية", - "company_name": "اسم الشركة / العلامة التجارية", - "short_text": "وصف قصير", - "contact_email": "البريد الإلكتروني للاتصال", - "contact_phone": "اتصل بالهاتف", - "contact_url": "اتصل بالموقع", - "logo": "الشعار", - "logo_hint": "PNG أو JPEG أو SVG أو WebP. الحد الأقصى 256 كيلو بايت.", - "logo_clear": "إزالة الشعار", - "primary_color": "اللون الأساسي", - "accent_color": "لون الرأس", - "default_lang": "اللغة الافتراضية", - "allow_unattended": "السماح بالوصول غير المراقب", - "allow_unattended_hint": "عند التمكين، يعرض الوكيل كلمة مرور دائمة للوصول إلى المشغل.", - "save": "حفظ الحزمة", - "revoke": "إبطال", - "unrevoke": "إعادة التمكين", - "revoked": "تم إبطاله", - "preview_title": "معاينة حية", - "preview_hint": "الشكل التقريبي لنافذة وكيل المستخدم النهائي.", - "preview_default_name": "دعم BetterDesk", - "preview_status_ready": "مستعد", - "preview_id": "هويتك", - "preview_password": "كلمة المرور", - "preview_chat": "الدردشة مع الدعم", - "preview_settings": "الإعدادات (المسؤول فقط)", - "preview_quit": "إنهاء (المشرف فقط)", - "download_link_title": "رابط التحميل", - "download_link_hint": "شارك هذا الرابط مع المستخدمين النهائيين. ستظهر لهم صفحة تنزيل ذات علامة تجارية. روابط hex القديمة تظل تعمل بعد تغيير الرابط القصير.", - "open_portal": "يفتح", - "created": "تم إنشاء الحزمة", - "saved": "تم حفظ الحزمة", - "deleted": "تم حذف الحزمة", - "revoked_ok": "تم إلغاء الحزمة", - "unrevoked_ok": "تمت إعادة تمكين الحزمة", - "link_copied": "تم نسخ الرابط إلى الحافظة", - "copy_failed": "تعذر النسخ تلقائيًا — يرجى النسخ يدويًا", - "unsaved_confirm": "هل تريد تجاهل التغييرات غير المحفوظة؟", - "confirm_revoke": "هل تريد إلغاء هذه الحزمة؟ سيتوقف رابط التنزيل عن العمل.", - "confirm_unrevoke": "هل تريد إعادة تمكين هذه الحزمة؟", - "confirm_delete": "هل تريد حذف هذه الحزمة نهائيًا؟ لا يمكن التراجع عن هذا.", - "errors": { - "validation_failed": "فشل التحقق من الصحة", - "name_required": "اسم الحزمة مطلوب", - "company_name_required": "اسم الشركة مطلوب", - "logo_invalid": "يجب أن يكون الشعار ملف صورة صالحًا", - "logo_too_large": "يجب أن يكون حجم الشعار 256 كيلو بايت أو أصغر", - "logo_read_failed": "فشل في قراءة ملف الشعار", - "primary_color_invalid": "يجب أن يكون اللون الأساسي قيمة سداسية عشرية (على سبيل المثال #2563eb)", - "accent_color_invalid": "يجب أن يكون لون الرأس قيمة سداسية عشرية (على سبيل المثال #1e293b)", - "contact_url_invalid": "يجب أن يكون موقع جهة الاتصال URL صالحًا", - "server_host_required": "عنوان الخادم العام مطلوب", - "server_host_invalid": "أدخل اسم نطاق صالحًا أو عنوان IPv4", - "token_failed": "تعذر إنشاء رمز التسجيل — تحقق من اتصال الخادم", - "rebuild_revoked": "لا يمكن إعادة بناء حزمة مُلغاة — أعد تفعيلها أولًا", - "slug_invalid": "يجب أن يحتوي الرابط القصير على أحرف صغيرة وأرقام وشرطات فقط", - "slug_too_short": "يجب أن يكون الرابط القصير حرفين على الأقل", - "slug_too_long": "يجب ألا يزيد الرابط القصير عن 32 حرفًا", - "slug_taken": "هذا الرابط القصير مستخدم بالفعل في حزمة أخرى" - }, - "legacy_title": "مولد تكوين العميل", - "connection_section": "اتصال الخادم", - "server_host": "عنوان الخادم العام", - "server_host_placeholder": "support.example.com أو 203.0.113.10", - "server_host_hint": "اسم النطاق أو IP العام الذي يصل من خلاله المستخدمون النهائيون إلى خادم BetterDesk. يُستمد المنفذ من تكوين وحدة التحكم.", - "use_https": "استخدام HTTPS / WSS (موصى به)", - "enrollment_token": "تسجيل الأجهزة", - "enrollment_token_pending": "لكل جهاز بعد الموافقة", - "enrollment_token_set": "لكل جهاز — الموافقة في التسجيلات", - "enrollment_token_hint": "كل عملية تثبيت تُسجّل بشكل مستقل. وافق على الأجهزة الجديدة في لوحة التسجيلات؛ يُصدر الخادم بعد ذلك مفتاح وصول فريدًا لكل جهاز كمبيوتر.", - "enrollment_per_device": "لكل جهاز — الموافقة في التسجيلات", - "background_color": "لون خلفية النافذة", - "surface_color": "لون خلفية البطاقة", - "text_color": "لون النص", - "text_muted_color": "لون النص الخافت", - "status_ready_color": "لون مؤشر الجاهزية", - "header_text_color": "لون نص الرأس", - "builds_title": "بنيات العميل", - "builds_hint": "برامج التثبيت المُجمَّعة على هذا الخادم لكل منصة. أعد البناء بعد إصلاح أخطاء أدوات البناء أو تحديث مصدر الوكيل.", - "builds_loading": "جارٍ تحميل حالة البناء…", - "builds_empty": "لا توجد عمليات بناء في قائمة الانتظار بعد — احفظ الحزمة أو انقر على إعادة بناء الكل.", - "rebuild_all": "إعادة بناء الكل", - "rebuilding_all": "جارٍ ترتيب عمليات إعادة البناء…", - "rebuild_queued": "جميع بنيات المنصات في قائمة الانتظار", - "rebuild_confirm": "هل تريد إعادة بناء جميع برامج تثبيت المنصات لهذه الحزمة؟ سيتم استبدال القطع الأثرية الجاهزة الموجودة.", - "build_status_ready": "جاهز", - "build_status_pending": "في الانتظار", - "build_status_building": "جارٍ البناء", - "build_status_failed": "فشل", - "builds_summary": "{{ready}} جاهز · {{pending}} في الانتظار · {{building}} جارٍ البناء · {{failed}} فشل", - "build_error_hint": "خطأ في البناء", - "preview_help": "طلب المساعدة" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "خادم الهوية", - "relay_server": "خادم الترحيل", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "جارٍ التحقق...", - "label": "Status", - "no_signal": "لا إشارة" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "الاتصال عبر عميل سطح المكتب", - "remote_viewer": "عارض عن بعد", - "web_remote": "الويب عن بعد", - "details": "Details", - "edit": "يحرر", - "delete": "يمسح", - "ban": "Ban", - "unban": "Unban", - "save": "يحفظ", - "cancel": "يلغي", - "confirm": "يتأكد", - "close": "يغلق", - "clear": "Clear", - "ok": "OK", - "saved": "تم الحفظ بنجاح", - "back": "خلف", - "create": "يخلق", - "dismiss": "Dismiss", - "view_all": "عرض الكل", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s مضت", - "minutes_ago": "{count}m مضت", - "hours_ago": "{count}h منذ", - "days_ago": "{count}d منذ", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "إدارة المستخدم", - "subtitle": "إدارة مستخدمي وحدة التحكم والأذونات", - "add_user": "Add User", - "edit_user": "تحرير المستخدم", - "username": "اسم المستخدم", - "username_placeholder": "أدخل اسم المستخدم", - "username_hint": "3-32 حرفًا وحرفًا وأرقامًا وشرطات سفلية فقط", - "password": "كلمة المرور", - "password_placeholder": "أدخل كلمة المرور", - "password_hint": "الحد الأدنى 8 أحرف مع حالة مختلطة وأرقام ورموز", - "password_leave_empty": "اتركه فارغًا للحفاظ على التيار", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "مخلوق", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "إنشاء مستخدم", - "edit": "يحرر", - "reset_password": "إعادة تعيين كلمة المرور", - "new_password": "كلمة المرور الجديدة", - "delete_title": "حذف المستخدم", - "delete_confirm": "هل أنت متأكد أنك تريد حذف المستخدم {username}؟", - "delete_success": "تم حذف المستخدم بنجاح", - "user_created": "تم إنشاء المستخدم بنجاح", - "user_updated": "تم تحديث المستخدم بنجاح", - "password_reset_success": "تم إعادة تعيين كلمة المرور بنجاح", - "empty_title": "لم يتم العثور على مستخدمين", - "empty_text": "أضف مستخدمين لإدارة الوصول إلى وحدة التحكم", - "fill_required": "يرجى ملء جميع الحقول المطلوبة", - "invalid_username": "يجب أن يتكون اسم المستخدم من 3 إلى 32 حرفًا وأحرفًا وأرقامًا وشرطات سفلية فقط", - "username_exists": "اسم المستخدم موجود بالفعل", - "weak_password": "كلمة المرور ضعيفة جدًا", - "password_too_short": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل", - "invalid_role": "دور غير صالح", - "cannot_demote_self": "لا يمكنك خفض رتبة نفسك", - "cannot_delete_self": "لا يمكنك حذف حسابك الخاص", - "last_admin": "لا يمكن حذف المسؤول الأخير", - "admin_only": "هذه الميزة متاحة فقط للمسؤولين", - "password_required": "كلمة المرور مطلوبة", - "not_found": "لم يتم العثور على المستخدم", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "أفضل الممارسات الأمنية", - "tip_strong_passwords": "استخدم كلمات مرور قوية وفريدة لكل مستخدم", - "tip_unique_accounts": "إنشاء حسابات فردية لكل شخص", - "tip_viewer_role": "استخدم دور العارض للمستخدمين الذين يحتاجون فقط إلى حق الوصول للقراءة", - "tip_operator_role": "استخدم دور عامل التشغيل للمستخدمين الذين يحتاجون إلى إدارة الأجهزة وليس المستخدمين", - "tip_audit_logs": "قم بمراجعة سجلات التدقيق بانتظام بحثًا عن أي نشاط مشبوه", - "role_pro": "برو (API فقط)", - "role_super_admin": "Super Admin", - "role_server_admin": "مشرف الخادم", - "role_global_admin": "المشرف العالمي", - "organizations": "المنظمات", - "user_organizations": "منظمات {username}", - "no_organizations": "لم يتم تعيين المستخدم إلى أي منظمة", - "org_removed": "تمت إزالة مهمة المؤسسة", - "server_role_label": "دور الخادم", - "server_role_hint": "يحدد ما يمكن للمستخدم القيام به عبر وحدة التحكم بأكملها (الوصول إلى اللوحة، وتكوين الخادم، والتدقيق، وما إلى ذلك).", - "org_membership_section": "عضوية المنظمة", - "org_membership_hint": "يمكن للمستخدم أن ينتمي إلى منظمات متعددة. يتحكم دور المؤسسة فقط في الأذونات داخل تلك المؤسسة وهو مستقل عن دور الخادم أعلاه.", - "column_organizations": "المنظمات", - "no_orgs_short": "—", - "org_count_one": "منظمة {count}", - "org_count_many": "المنظمات {count}", - "all_orgs_assigned": "المستخدم هو بالفعل عضو في كل منظمة.", - "user_groups": "مجموعات المستخدمين", - "user_groups_hint": "يمكن استخدام مجموعات المستخدمين لمنح حق الوصول إلى مجموعات الأجهزة المحددة.", - "loading_user_groups": "جارٍ تحميل مجموعات المستخدمين...", - "no_user_groups": "لا توجد مجموعات مستخدمين متاحة", - "create_user_group": "إنشاء مجموعة", - "edit_user_group": "تحرير مجموعة المستخدمين", - "delete_user_group": "حذف مجموعة المستخدمين", - "delete_user_group_confirm": "هل تريد حذف مجموعة المستخدمين {name}؟ سيفقد الأعضاء إمكانية الوصول الممنوحة من خلال هذه المجموعة.", - "user_group_created": "تم إنشاء مجموعة المستخدمين", - "user_group_updated": "تم تحديث مجموعة المستخدمين", - "user_group_deleted": "تم حذف مجموعة المستخدمين", - "user_group_not_found": "لم يتم العثور على مجموعة المستخدمين", - "group_name": "اسم المجموعة", - "group_name_placeholder": "مشغلي", - "group_note": "Note", - "group_note_placeholder": "ملاحظة اختيارية", - "group_name_required": "اسم المجموعة مطلوب", - "group_members_count": "أعضاء {count}", - "provider": "المزوّد", - "provider_local": "محلي", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "تُدار بواسطة موفر الهوية", - "provider_managed_hint": "يُدار هذا الحساب بواسطة موفر هوية خارجي (LDAP/AD أو SSO). تتحكم الجهة الموفرة في كلمة المرور والدور، ولا يمكن تغييرهما هنا." - }, - "folders": { - "title": "Folders", - "create": "إنشاء مجلد", - "edit": "تحرير المجلد", - "delete": "حذف المجلد", - "name": "Folder Name", - "name_placeholder": "أدخل اسم المجلد", - "name_required": "اسم المجلد مطلوب", - "name_too_long": "اسم المجلد طويل جدًا (50 حرفًا كحد أقصى)", - "color": "Color", - "icon": "Icon", - "not_found": "لم يتم العثور على المجلد", - "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا المجلد؟ سيتم إلغاء تعيين الأجهزة.", - "delete_success": "تم حذف المجلد بنجاح", - "created": "تم إنشاء المجلد بنجاح", - "updated": "تم تحديث المجلد بنجاح", - "no_devices_selected": "لم يتم تحديد أي أجهزة", - "devices_moved": "تم نقل الأجهزة بنجاح", - "device_assigned": "الجهاز المخصص للمجلد", - "unassigned": "Unassigned", - "all_devices": "جميع الأجهزة", - "drag_hint": "اسحب الأجهزة إلى المجلدات لتنظيمها", - "move_to": "انتقل الى", - "toggle_sidebar": "تبديل الشريط الجانبي" - }, + "no_groups": "لا توجد مجموعات حتى الآن", + "manual_groups": "المجموعات اليدوية", + "dynamic_memberships": "العضويات الديناميكية", + "group_allowed_user_groups": "مجموعات المستخدمين المسموح بها", + "group_allowed_user_groups_hint": "يمكن للمستخدمين في مجموعات المستخدمين المحددة الوصول إلى مجموعة الأجهزة هذه.", + "no_user_groups": "لا توجد مجموعات مستخدمين", + "edit_group": "تحرير المجموعة", + "delete_group": "حذف المجموعة", + "delete_group_confirm": "هل تريد حذف مجموعة الأجهزة {name}؟", + "group_deleted": "تم حذف مجموعة الأجهزة", + "folder_group_readonly": "تتم إدارة المجموعات المدعومة بالمجلدات من المجلدات.", + "manage_user_groups": "إدارة مجموعات المستخدمين", + "restore_failed": "فشل استعادة الجهاز", + "no_signal_tooltip": "اتصل العميل بـ API مؤخرًا لكنه غير مسجل على خادم الإشارة (UDP :21116). أعد تشغيل العميل بعد ترحيل الخادم.", + "per_page": "لكل صفحة" + }, + "keys": { + "title": "مفاتيح الخادم", + "subtitle": "المفتاح العام والتكوين لعملاء RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "معلومات الخادم", + "download": "تحميل المفتاح", + "show_qr": "Show QR", + "qr_hint": "قم بمسح رمز الاستجابة السريعة هذا باستخدام تطبيق الهاتف المحمول RustDesk", + "no_key": "لم يتم العثور على مفتاح عام", + "no_key_to_copy": "لا يوجد مفتاح للنسخ", + "no_qr": "رمز الاستجابة السريعة غير متوفر", + "download_success": "تم تنزيل ملف المفتاح", + "not_found": "لم يتم العثور على المفتاح", + "api_not_found": "لم يتم العثور على مفتاح API" + }, + "settings": { + "title": "إعدادات", + "subtitle": "تكوين وحدة التحكم وإعدادات الحساب", + "tab_general": "General", + "tab_server": "الخادم", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "لغة", + "change_password": "تغيير كلمة المرور", + "password_desc": "قم بتحديث كلمة مرور حسابك", + "current_password": "كلمة المرور الحالية", + "new_password": "كلمة المرور الجديدة", + "confirm_password": "تأكيد كلمة المرور", + "save_password": "تحديث كلمة المرور", + "password_changed": "تم تغيير كلمة المرور بنجاح", + "fill_all_fields": "يرجى ملء جميع الحقول", + "passwords_not_match": "كلمات المرور غير متطابقة", + "password_requirements": "متطلبات كلمة المرور", + "password_requirements_not_met": "كلمة السر لا تلبي المتطلبات", + "req_length": "ما لا يقل عن 8 أحرف", + "req_uppercase": "حرف كبير واحد على الأقل", + "req_lowercase": "حرف صغير واحد على الأقل", + "req_number": "رقم واحد على الأقل", + "server_info": "معلومات الخادم", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "نشاط وحدة التحكم الأخيرة", + "no_audit_logs": "لم يتم العثور على سجلات التدقيق", + "backend_title": "الواجهة الخلفية للخادم", + "backend_desc": "اختر الواجهة الخلفية للخادم المراد استخدامها لإدارة الجهاز وخدمات الإشارة/الترحيل.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "خوادم الإشارة والترحيل القياسية RustDesk (hbbs + hbbr). HTTP API الأساسي مع نقاط نهاية محدودة.", + "backend_betterdesk_desc": "خادم محسّن قائم على Go مع مصادقة REST API وJWT الكاملة وقائمة الحظر والعلامات وأحداث WebSocket في الوقت الفعلي وتسجيل التدقيق.", + "backend_feature_signal": "خادم الإشارة (تسجيل الهوية)", + "backend_feature_relay": "خادم الترحيل (ترحيل الاتصال)", + "backend_feature_basic_api": "الراحة الأساسية API", + "backend_feature_full_api": "الراحة الكاملة API (34+ نقطة نهاية)", + "backend_feature_jwt": "مصادقة JWT وTOTP 2FA", + "backend_feature_blocklist": "إدارة قائمة حظر IP/ID", + "backend_feature_tags": "علامات الجهاز والتجميع", + "backend_feature_audit": "تسجيل أحداث التدقيق", + "backend_feature_websocket": "أحداث WebSocket في الوقت الحقيقي", + "backend_connection": "اتصال", + "backend_api_url": "API URL", + "backend_test": "اتصال الاختبار", + "backend_testing": "اختبار...", + "backend_save": "تطبيق الخلفية", + "backend_saved": "تم تغيير الواجهة الخلفية للخادم بنجاح. ستتم الآن إدارة بيانات الجهاز من خلال الواجهة الخلفية الجديدة.", + "backend_save_failed": "فشل في تبديل الواجهة الخلفية للخادم", + "backend_test_success": "تم الاتصال بنجاح! الخادم يمكن الوصول إليه.", + "backend_test_failed": "فشل الاتصال. الخادم غير قابل للوصول.", + "backend_confirm_switch": "هل أنت متأكد أنك تريد تبديل الواجهة الخلفية للخادم؟ سيؤدي هذا إلى تغيير كيفية إدارة الأجهزة.", + "backend_unreachable": "لا يمكن التبديل: الخادم الهدف غير قابل للوصول. ابدأ تشغيل الخادم أولاً.", + "invalid_backend": "تحديد الواجهة الخلفية غير صالح. اختر \"rustdesk\" أو \"betterdesk\".", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "المصادقة الثنائية", + "totp_desc": "أضف طبقة إضافية من الأمان باستخدام تطبيقات المصادقة TOTP (Google Authenticator، وMicrosoft Authenticator، وAuthy، وما إلى ذلك)", + "totp_enabled": "تم تمكين المصادقة الثنائية (2FA).", + "totp_enabled_desc": "حسابك محمي بالمصادقة الثنائية.", + "totp_disabled": "2FA غير ممكّن", + "totp_disabled_desc": "تمكين المصادقة الثنائية لمزيد من أمان الحساب.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "قم بتثبيت تطبيق المصادقة على هاتفك", + "totp_step2": "قم بمسح رمز الاستجابة السريعة أدناه", + "totp_step3": "أدخل الرمز المكون من 6 أرقام للتحقق", + "totp_manual_key": "Manual key", + "totp_enter_code": "أدخل رمز التحقق", + "totp_verify_enable": "التحقق والتمكين", + "totp_enabled_success": "تم تمكين المصادقة الثنائية!", + "totp_recovery_warning": "احفظ رموز الاسترداد هذه في مكان آمن. يمكن استخدام كل رمز مرة واحدة فقط. إذا فقدت إمكانية الوصول إلى تطبيق المصادقة الخاص بك، فيمكنك استخدام هذه الرموز لتسجيل الدخول.", + "totp_done": "Done", + "totp_disable_warning": "سيؤدي تعطيل المصادقة الثنائية إلى جعل حسابك أقل أمانًا. أدخل كلمة المرور الخاصة بك للتأكيد.", + "totp_disabled_success": "تم تعطيل المصادقة الثنائية.", + "tutorials_title": "دروس وأدلة", + "tutorials_desc": "التحكم في الجولات الإرشادية وتراكبات المساعدة المعروضة في جميع أنحاء وحدة التحكم", + "tutorials_enabled": "تمكين الدروس", + "tutorials_enabled_hint": "عند تعطيله، لن تبدأ البرامج التعليمية تلقائيًا وسيتم إخفاء زر المساعدة", + "tutorials_reset_hint": "قم بوضع علامة على جميع البرامج التعليمية كغير مرئية حتى يمكن عرضها مرة أخرى", + "tutorials_enabled_toast": "تم تمكين البرامج التعليمية", + "tutorials_disabled_toast": "البرامج التعليمية معطلة", + "tutorials_reset_toast": "تمت إعادة ضبط جميع البرامج التعليمية", + "tab_auth": "المصادقة", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "قم بتكوين المصادقة الخارجية عبر LDAP أو Active Directory. سيتمكن المستخدمون من تسجيل الدخول باستخدام بيانات اعتماد المجال الخاصة بهم.", + "ldap_enabled": "تمكين مصادقة LDAP", + "ldap_enabled_hint": "عند التمكين، يمكن للمستخدمين تسجيل الدخول باستخدام بيانات اعتماد LDAP/AD. لا تزال الحسابات المحلية تعمل كاحتياطي.", + "ldap_connection": "اتصال الخادم", + "ldap_host": "يستضيف", + "ldap_port": "ميناء", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "تخطي التحقق من TLS", + "ldap_timeout": "مهلة (مهلة) الاتصال", + "ldap_timeout_hint": "ثواني لانتظار استجابة خادم LDAP", + "ldap_bind_mode": "وضع الربط", + "ldap_direct_bind": "الربط المباشر", + "ldap_direct_bind_hint": "اربط مباشرة باستخدام قالب DN بدلاً من استخدام حساب الخدمة للبحث.", + "ldap_bind_dn": "ربط DN (حساب الخدمة)", + "ldap_bind_dn_hint": "الاسم المميز لحساب خدمة القراءة فقط المستخدم للبحث عن المستخدمين.", + "ldap_bind_password": "ربط كلمة المرور", + "ldap_base_dn": "الاسم المميز الأساسي", + "ldap_base_dn_hint": "قاعدة البحث للعثور على المستخدمين، على سبيل المثال. dc=example,dc=com.dc=example,dc=com", + "ldap_user_filter": "مرشح المستخدم", + "ldap_user_filter_hint": "مرشح LDAP للعثور على المستخدمين. استخدم {{username}} كعنصر نائب. الافتراضي: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "قالب DN للربط المباشر", + "ldap_direct_bind_dn_hint": "قالب DN للربط المباشر. استخدم {{username}} كعنصر نائب، على سبيل المثال. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "سمات المستخدم", + "ldap_attr_id": "سمة اسم المستخدم", + "ldap_attr_email": "سمة البريد الإلكتروني", + "ldap_attr_name": "سمة اسم العرض", + "ldap_group_mapping": "المجموعة → تعيين الأدوار", + "ldap_group_base_dn": "الاسم المميز لقاعدة المجموعة", + "ldap_group_base_dn_hint": "اتركه فارغًا لاستخدام الاسم المميز الأساسي", + "ldap_group_filter": "مرشح المجموعة", + "ldap_group_attr_name": "سمة اسم المجموعة", + "ldap_default_role": "الدور الافتراضي", + "ldap_default_role_hint": "تم تعيين الدور للمستخدمين الذين لا تتطابق مجموعاتهم LDAP مع أي تعيين", + "ldap_role_viewer": "مشاهد", + "ldap_role_operator": "المشغل", + "ldap_role_admin": "مسؤل", + "ldap_group_role_map": "المجموعة → خريطة الدور", + "ldap_group_role_map_hint": "قم بتعيين مجموعات LDAP إلى أدوار BetterDesk. التنسيق: GroupDN = الدور مفصول بـ | (ماسورة). مثال: CN=المسؤولين،DC=مثال،DC=com=admin|CN=Ops،DC=مثال،DC=com=عامل التشغيل", + "ldap_test_connection": "اتصال الاختبار", + "ldap_testing": "اختبار...", + "ldap_test_success": "تم الاتصال بنجاح! يمكن الوصول إلى خادم LDAP وبيانات اعتماد الربط صالحة.", + "ldap_test_failed": "فشل الاتصال", + "ldap_save": "احفظ تكوين LDAP", + "ldap_saved": "تم حفظ تكوين LDAP بنجاح", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "قم بتكوين تسجيل الدخول الموحد عبر موفر OpenID Connect (Azure AD، وOkta، وGoogle، وKeycloak، وما إلى ذلك).", + "oidc_enabled": "تمكين مصادقة OIDC", + "oidc_enabled_hint": "السماح للمستخدمين بتسجيل الدخول باستخدام موفر هوية خارجي", + "oidc_provider": "موفر الهوية", + "oidc_display_name": "اسم عرض الزر", + "oidc_display_name_hint": "النص المعروض على زر تسجيل الدخول (على سبيل المثال Azure AD، Okta)", + "oidc_issuer_url": "المُصدر URL", + "oidc_issuer_url_hint": "جهة إصدار OpenID Connect URL (سيكون الاكتشاف تلقائيًا)", + "oidc_client_id": "معرف العميل", + "oidc_client_secret": "سر العميل", + "oidc_redirect_url": "إعادة توجيه URL (رد الاتصال)", + "oidc_redirect_url_hint": "يجب أن يتطابق تمامًا مع ما تم تكوينه في IdP الخاص بك. عادةً: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "النطاقات", + "oidc_use_pkce": "استخدم PKCE (مستحسن)", + "oidc_auto_discovery": "الاكتشاف التلقائي", + "oidc_allow_signup": "إنشاء المستخدمين تلقائيًا", + "oidc_manual_endpoints": "عناوين URL لنقطة النهاية اليدوية", + "oidc_authorization_url": "نقطة نهاية التفويض", + "oidc_token_url": "نقطة نهاية الرمز المميز", + "oidc_userinfo_url": "نقطة نهاية معلومات المستخدم", + "oidc_claim_mapping": "تعيين المطالبة", + "oidc_claim_username": "المطالبة باسم المستخدم", + "oidc_claim_email": "المطالبة بالبريد الإلكتروني", + "oidc_claim_name": "المطالبة بالاسم المعروض", + "oidc_claim_groups": "مطالبة المجموعات", + "oidc_role_mapping": "رسم خرائط الدور", + "oidc_default_role": "الدور الافتراضي", + "oidc_group_role_map": "المجموعة → تعيين الأدوار", + "oidc_group_role_map_hint": "تعيين واحد لكل سطر: اسم المجموعة=الدور (على سبيل المثال، المسؤولون=المسؤول، المشغلون=المشغل)", + "oidc_test_discovery": "اكتشاف الاختبار", + "oidc_testing": "اختبار...", + "oidc_test_success": "تم الاكتشاف بنجاح! تم حل نقاط النهاية.", + "oidc_test_failed": "فشل الاكتشاف", + "oidc_issuer_required": "مطلوب جهة الإصدار URL لاختبار الاكتشاف", + "oidc_save": "احفظ تكوين OIDC", + "oidc_saved": "تم حفظ تكوين OIDC بنجاح", + "tab_advanced": "متقدم", + "connection_mode_title": "استراتيجية الاتصال", + "connection_mode_desc": "تحكم في طريقة اتصال عملاء RustDesk للسطح المكتبي: P2P مباشر (ثقب الاختراق) عند الإمكان، أو دائمًا عبر الترحيل.", + "connection_mode_label": "وضع الاتصال الافتراضي", + "connection_mode_p2p_first": "P2P أولًا (موصى به) — محاولة الاتصال المباشر، والرجوع إلى الترحيل عند الفشل", + "connection_mode_relay_only": "الترحيل فقط — جميع الجلسات تستخدم خادم الترحيل", + "connection_mode_advanced": "خيارات متقدمة", + "connection_mode_fallback_ms": "مهلة الرجوع لـ P2P (بالمللي ثانية)", + "connection_mode_same_nat_relay": "فرض الترحيل عندما يشترك الطرفان في نفس IP العام (NAT hairpin)", + "connection_mode_network_hint": "يتطلب P2P إمكانية الوصول إلى منفذ UDP 21116 بين العملاء. يجب أن يكون الخادم مفتوحًا على Signal TCP 21116 وRelay TCP 21117 وNAT test TCP 21115. يستخدم عملاء متصفحات الويب الترحيل دائمًا.", + "connection_mode_save": "حفظ", + "connection_mode_save_restart": "حفظ وإعادة تشغيل الخادم", + "connection_mode_saved": "تم حفظ وضع الاتصال", + "connection_mode_restart_started": "بدأت إعادة تشغيل الخادم", + "connection_mode_restart_failed": "فشلت إعادة تشغيل الخادم", + "connection_mode_not_configurable": "لا يمكن تغيير وضع الاتصال في هذا النشر (لم يُعثر على وحدة systemd أو docker-compose)", + "connection_mode_compose_error": "تعذر العثور على قسم بيئة الخادم في docker-compose.yml", + "connection_mode_source_saved": "محفوظ في", + "connection_mode_source_defaults": "استخدام إعدادات الخادم الافتراضية (غير قابلة للكتابة من اللوحة)", + "connection_mode_runtime": "الخادم النشط", + "advanced_title": "ملفات التكوين", + "advanced_desc": "تعديل ملفات تكوين الخادم مباشرةً. قد تتطلب التغييرات إعادة تشغيل الخدمات. يتم إنشاء نسخة احتياطية قبل كل عملية حفظ.", + "advanced_warning": "تحتوي هذه الملفات على أسرار (مفاتيح API، كلمات مرور قاعدة البيانات، أسرار الجلسة). قم بالتعديل فقط إذا كنت تفهم التأثير. قد يمنع وجود أخطاء في بناء الجملة الخادمَ من البدء.", + "advanced_files_label": "الملفات", + "advanced_select_file": "حدد ملفًا من القائمة لعرض محتواه أو تعديله.", + "advanced_reload": "إعادة تحميل", + "advanced_save": "حفظ الملف", + "advanced_apply_restart": "تطبيق (إعادة تشغيل الخدمة)", + "advanced_saved": "تم حفظ ملف التكوين", + "advanced_restart_after_save": "تم حفظ التكوين. هل تريد إعادة تشغيل الخدمة المتأثرة الآن لتطبيق التغييرات؟", + "advanced_restart_confirm": "هل تريد إعادة تشغيل خدمات BetterDesk ذات الصلة؟ قد تتعطل الاتصالات النشطة لفترة وجيزة.", + "advanced_restart_console_confirm": "هل تريد إعادة تشغيل خدمة وحدة التحكم الويب؟ ستنقطع جلسة المتصفح لفترة وجيزة وستُعاد تحميل الصفحة عند عودة وحدة التحكم.", + "advanced_restart_started": "بدأت إعادة تشغيل الخدمة", + "advanced_restart_done": "تمت إعادة تشغيل وحدة التحكم — جارٍ إعادة تحميل الصفحة…", + "advanced_restart_polling": "جارٍ انتظار عودة وحدة التحكم إلى الإنترنت…", + "advanced_restart_timeout": "تم إرسال أمر إعادة التشغيل لكن وحدة التحكم لم تستجب في الوقت المناسب. تحقق من سجلات systemd/NSSM وأعد التحميل يدويًا.", + "advanced_restart_failed": "فشلت إعادة تشغيل الخدمة (صلاحيات غير كافية أو الخدمة غير مثبتة)", + "advanced_save_confirm": "هل تريد حفظ التغييرات على هذا الملف؟ سيتم إنشاء نسخة احتياطية من الإصدار السابق.", + "advanced_unsaved_confirm": "لديك تغييرات غير محفوظة. هل تريد تجاهلها؟", + "advanced_no_files": "لا توجد ملفات تكوين متاحة على هذا النظام.", + "advanced_readonly": "للقراءة فقط", + "advanced_missing": "مفقود", + "advanced_new_file": "ملف جديد (لن يُنشأ حتى تحفظ)", + "advanced_new_file_hint": "ملف جديد — أضف المحتوى واحفظ", + "advanced_backup_created": "تم إنشاء نسخة احتياطية", + "advanced_restart_console": "أعد تشغيل خدمة وحدة التحكم الويب (مثل systemctl restart betterdesk-console) لتطبيق تغييرات .env.", + "advanced_restart_goserver": "أعد تشغيل خادم BetterDesk Go لتحميل تغييرات قائمة الحظر.", + "advanced_restart_systemd": "بعد تعديل وحدات systemd، شغّل: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "أعد تشغيل الخدمة المتأثرة لتطبيق التغييرات.", + "advanced_error_unknown": "ملف تكوين غير معروف", + "advanced_error_not_found": "الملف غير موجود", + "advanced_error_not_file": "المسار ليس ملفًا عاديًا", + "advanced_error_too_large": "الملف يتجاوز الحجم الأقصى للتعديل (512 KB)", + "advanced_error_binary": "لا يمكن تعديل الملفات الثنائية في اللوحة", + "advanced_error_invalid": "محتوى الملف غير صالح", + "advanced_error_not_writable": "عملية وحدة التحكم لا يمكنها الكتابة على هذا الملف", + "advanced_file_console-env": "بيئة وحدة التحكم (.env)", + "advanced_file_console-env-local": "تجاوزات وحدة التحكم (.env.local)", + "advanced_file_go-blocklist": "قائمة حظر خادم Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (وحدة الخدمة)", + "advanced_file_systemd-server": "systemd: betterdesk-server (وحدة الخدمة)", + "advanced_file_console-session-secret": "سر جلسة وحدة التحكم (.session_secret)", + "advanced_file_go-audit-log": "سجل تدقيق خادم Go (audit.jsonl)", + "advanced_file_build-env": "بيئة بناء الوكيل (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (إعداد المشرف)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (التنسيق)", + "advanced_restart_none": "لا تتطلب هذا الملف إعادة تشغيل الخدمة.", + "enrollment_title": "تسجيل الأجهزة (RustDesk)", + "enrollment_desc": "تحكم في طريقة تسجيل عملاء RustDesk الجدد وكيفية موافقة المشغلين عليها في صفحة طلبات التسجيل.", + "enrollment_require_approval": "يتطلب موافقة المشغل (الوضع المُدار)", + "enrollment_require_approval_hint": "عند التفعيل، يُوضع العملاء المجهولون في قائمة انتظار حتى يوافق عليهم المشغل في \"طلبات التسجيل\".", + "enrollment_rich_approve": "نموذج موافقة كامل (الاسم، المجلد، المجموعات، العلامات)", + "enrollment_rich_approve_hint": "يعرض مربع حوار تفصيلي عند الموافقة على طلبات التسجيل أو تسجيل الشبكة المحلية.", + "enrollment_tag_picker": "اختر علامات من علامات الأجهزة الموجودة", + "enrollment_tag_picker_hint": "يتيح للمشغلين اختيار علامات من القائمة المستخدمة في صفحة الأجهزة بدلًا من الكتابة فقط.", + "enrollment_open_requests": "فتح طلبات التسجيل", + "enrollment_pending_count": "{count} طلب تسجيل معلق" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "فشل تسجيل الدخول", + "action_logout": "Logout", + "action_password_change": "تم تغيير كلمة المرور", + "action_2fa_enable": "تم تمكين المصادقة الثنائية (2FA).", + "action_2fa_disable": "2FA معطل", + "action_user_create": "تم إنشاء المستخدم", + "action_user_update": "تم تحديث المستخدم", + "action_user_delete": "تم حذف المستخدم", + "action_settings_update": "تم تحديث الإعدادات", + "action_device_ban": "الجهاز محظور", + "action_device_unban": "الجهاز غير محظور", + "action_device_delete": "تم حذف الجهاز" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "ميزة مبكرة — مولّد حزم الوكيل قيد التطوير النشط.", + "config_options": "خيارات التكوين", + "server_address": "عنوان الخادم", + "server_address_hint": "مجال الخادم الخاص بك أو عنوان IP", + "custom_port": "Custom Port", + "port_hint": "اتركه فارغًا للافتراضي (21116)", + "relay_server": "خادم الترحيل", + "relay_placeholder": "نفس خادم المعرف إذا كان فارغًا", + "relay_hint": "اختياري: عنوان خادم ترحيل منفصل", + "include_key": "تضمين المفتاح العام في التكوين", + "generate": "إنشاء التكوين", + "output": "مخرجات التكوين", + "usage_title": "تفاصيل الاتصال", + "generated": "تم إنشاء التكوين", + "server_required": "عنوان الخادم مطلوب", + "nothing_to_copy": "قم بإنشاء التكوين أولاً", + "bundles_title": "حزم الوكيل", + "new_bundle": "حزمة جديدة", + "editor_title": "محرر الحزمة", + "empty_state": "حدد حزمة على اليسار أو أنشئ حزمة جديدة للبدء.", + "loading": "تحميل…", + "no_bundles": "لا توجد حزم حتى الآن. قم بإنشاء أول واحد الخاص بك.", + "bundle_name": "اسم الحزمة", + "bundle_name_hint": "التسمية الداخلية فقط - لا تظهر للمستخدمين النهائيين.", + "short_link": "رابط تنزيل قصير", + "short_link_hint": "يُستخدم في عنوان URL العام (/d/…). أحرف صغيرة وأرقام وشرطات فقط (2–32 حرفًا). يُملأ تلقائيًا من اسم الحزمة — اختصره لتسهيل المشاركة (مثل acme).", + "branding_section": "العلامة التجارية", + "company_name": "اسم الشركة / العلامة التجارية", + "short_text": "وصف قصير", + "contact_email": "البريد الإلكتروني للاتصال", + "contact_phone": "اتصل بالهاتف", + "contact_url": "اتصل بالموقع", + "logo": "الشعار", + "logo_hint": "PNG أو JPEG أو SVG أو WebP. الحد الأقصى 256 كيلو بايت.", + "logo_clear": "إزالة الشعار", + "primary_color": "اللون الأساسي", + "accent_color": "لون الرأس", + "default_lang": "اللغة الافتراضية", + "allow_unattended": "السماح بالوصول غير المراقب", + "allow_unattended_hint": "عند التمكين، يعرض الوكيل كلمة مرور دائمة للوصول إلى المشغل.", + "save": "حفظ الحزمة", + "revoke": "إبطال", + "unrevoke": "إعادة التمكين", + "revoked": "تم إبطاله", + "preview_title": "معاينة حية", + "preview_hint": "الشكل التقريبي لنافذة وكيل المستخدم النهائي.", + "preview_default_name": "دعم BetterDesk", + "preview_status_ready": "مستعد", + "preview_id": "هويتك", + "preview_password": "كلمة المرور", + "preview_chat": "الدردشة مع الدعم", + "preview_settings": "الإعدادات (المسؤول فقط)", + "preview_quit": "إنهاء (المشرف فقط)", + "download_link_title": "رابط التحميل", + "download_link_hint": "شارك هذا الرابط مع المستخدمين النهائيين. ستظهر لهم صفحة تنزيل ذات علامة تجارية. روابط hex القديمة تظل تعمل بعد تغيير الرابط القصير.", + "open_portal": "يفتح", + "created": "تم إنشاء الحزمة", + "saved": "تم حفظ الحزمة", + "deleted": "تم حذف الحزمة", + "revoked_ok": "تم إلغاء الحزمة", + "unrevoked_ok": "تمت إعادة تمكين الحزمة", + "link_copied": "تم نسخ الرابط إلى الحافظة", + "copy_failed": "تعذر النسخ تلقائيًا — يرجى النسخ يدويًا", + "unsaved_confirm": "هل تريد تجاهل التغييرات غير المحفوظة؟", + "confirm_revoke": "هل تريد إلغاء هذه الحزمة؟ سيتوقف رابط التنزيل عن العمل.", + "confirm_unrevoke": "هل تريد إعادة تمكين هذه الحزمة؟", + "confirm_delete": "هل تريد حذف هذه الحزمة نهائيًا؟ لا يمكن التراجع عن هذا.", "errors": { - "forbidden_title": "تم الرفض", - "forbidden_message": "ليس لديك إذن للوصول إلى هذا المورد.", - "not_found_title": "لم يتم العثور على الصفحة", - "not_found_message": "الصفحة التي تبحث عنها غير موجودة أو تم نقلها.", - "server_error_title": "خطأ في الخادم", - "server_error_message": "حدث خطأ ما. يرجى المحاولة مرة أخرى لاحقا.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "فشل في تحميل الأجهزة", - "load_key_failed": "فشل في تحميل المفتاح", - "load_qr_failed": "فشل تحميل QR", - "load_audit_failed": "فشل تحميل سجل التدقيق", - "load_users_failed": "فشل تحميل المستخدمين", - "load_folders_failed": "فشل تحميل المجلدات", - "download_failed": "فشل التنزيل", - "logout_failed": "فشل تسجيل الخروج", - "password_change_failed": "فشل في تغيير كلمة المرور", - "language_change_failed": "فشل في تغيير اللغة", - "ban_failed": "فشل حظر الجهاز", - "unban_failed": "فشل في إلغاء الحظر على الجهاز", - "delete_failed": "فشل في حذف الجهاز", - "change_id_failed": "فشل في تغيير معرف الجهاز", - "bulk_delete_failed": "فشل في حذف الأجهزة", - "sync_failed": "فشلت مزامنة الحالة", - "error": "Error", - "not_found": "Not found", - "server_error": "خطأ في الخادم", - "load_device_failed": "فشل في تحميل الجهاز", - "load_orgs_failed": "فشل في تحميل المنظمات" + "validation_failed": "فشل التحقق من الصحة", + "name_required": "اسم الحزمة مطلوب", + "company_name_required": "اسم الشركة مطلوب", + "logo_invalid": "يجب أن يكون الشعار ملف صورة صالحًا", + "logo_too_large": "يجب أن يكون حجم الشعار 256 كيلو بايت أو أصغر", + "logo_read_failed": "فشل في قراءة ملف الشعار", + "primary_color_invalid": "يجب أن يكون اللون الأساسي قيمة سداسية عشرية (على سبيل المثال #2563eb)", + "accent_color_invalid": "يجب أن يكون لون الرأس قيمة سداسية عشرية (على سبيل المثال #1e293b)", + "contact_url_invalid": "يجب أن يكون موقع جهة الاتصال URL صالحًا", + "server_host_required": "عنوان الخادم العام مطلوب", + "server_host_invalid": "أدخل اسم نطاق صالحًا أو عنوان IPv4", + "token_failed": "تعذر إنشاء رمز التسجيل — تحقق من اتصال الخادم", + "rebuild_revoked": "لا يمكن إعادة بناء حزمة مُلغاة — أعد تفعيلها أولًا", + "slug_invalid": "يجب أن يحتوي الرابط القصير على أحرف صغيرة وأرقام وشرطات فقط", + "slug_too_short": "يجب أن يكون الرابط القصير حرفين على الأقل", + "slug_too_long": "يجب ألا يزيد الرابط القصير عن 32 حرفًا", + "slug_taken": "هذا الرابط القصير مستخدم بالفعل في حزمة أخرى" }, - "remote": { - "title": "سطح المكتب البعيد", - "connecting": "جارٍ الاتصال...", - "waiting_password": "في انتظار كلمة المرور", - "authenticating": "جارٍ المصادقة...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "كلمة المرور مطلوبة", - "enter_password_for": "أدخل كلمة المرور للجهاز", - "password_placeholder": "كلمة مرور الجهاز", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "العودة إلى الأجهزة", - "fullscreen": "Fullscreen", - "toggle_audio": "تبديل الصوت", - "send_keys": "إرسال المفاتيح", - "scale_mode": "Scale Mode", - "scale_fit": "يصلح للنافذة", - "scale_fill": "Fill Window", - "scale_original": "الحجم الأصلي (1:1)", - "scale_stretch": "تمتد لملء", - "actions": "Actions", - "lock_screen": "قفل الشاشة", - "restart_remote": "إعادة تشغيل الجهاز البعيد", - "refresh_screen": "تحديث الشاشة", - "clipboard_paste": "لصق من الحافظة", - "block_input": "Block Input", - "display_settings": "إعدادات العرض", - "image_quality": "جودة الصورة", - "quality_best": "الأفضل (الجودة الكاملة، 60 إطارًا في الثانية)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "إظهار المؤشر البعيد", - "lock_after_session": "قفل بعد الجلسة", - "privacy_mode": "وضع الخصوصية", - "disable_clipboard": "تعطيل الحافظة", - "chat": "Chat", - "chat_placeholder": "اكتب رسالة...", - "record": "شاشة التسجيل", - "view_only": "عرض فقط", - "pin_toolbar": "دبوس شريط الأدوات", - "monitors": "Monitors", - "select_monitor": "حدد مراقب", - "quality_speed": "السرعة (جودة منخفضة، 60 إطارًا في الثانية)", - "quality_quality": "الجودة (الأفضل، 30 إطارًا في الثانية)", - "recording_started": "بدأ التسجيل", - "recording_stopped": "توقف التسجيل", - "download_recording": "تحميل التسجيل", - "e2e_encrypted": "مشفرة من طرف إلى طرف", - "e2e_key_exchange": "إنشاء قناة آمنة...", - "confirm_restart": "هل أنت متأكد أنك تريد إعادة تشغيل الجهاز البعيد؟", - "webcodecs_not_supported": "متصفحك لا يدعم WebCodecs API. الرجاء استخدام Chrome 94+ أو Edge 94+.", - "webcodecs_insecure_context": "WebCodecs غير متاح عبر HTTP. يستخدم الفيديو برنامجًا احتياطيًا. للحصول على أفضل أداء، استخدم HTTPS.", - "webcodecs_fallback_active": "برنامج فك ترميز الفيديو نشط (أداء محدود)", - "click_to_start": "انقر للبدء", - "autoplay_blocked": "يتطلب المتصفح تفاعل المستخدم لبدء تشغيل الفيديو والصوت.", - "start_playback": "ابدأ التشغيل", - "new_connection": "اتصال جديد", - "device_id_placeholder": "أدخل معرف الجهاز", - "http_warning": "وضع HTTP: يقتصر على فك تشفير برنامج H.264 (~ 15 إطارًا في الثانية). استخدم HTTPS للحصول على الأداء الكامل (WebCodecs، VP9، 60 إطارًا في الثانية).", - "file_transfer": "نقل الملفات", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "هذا المجلد فارغ", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "فشل النقل", - "file_show_hidden": "إظهار الملفات المخفية", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "أدخل اسم المجلد:", - "file_parent": "المجلد الأصل", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "أدخل الاسم الجديد:", - "file_delete_confirm": "هل أنت متأكد أنك تريد حذف هذا العنصر؟", - "file_cancelled": "تم إلغاء النقل", - "2fa_required": "مطلوب التحقق 2FA", - "2fa_hint": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", - "2fa_invalid": "أدخل رمزًا صالحًا مكونًا من 6 أرقام", - "verify": "Verify", - "use_cdap_fallback": "استخدم عارض CDAP", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "الحافظة فارغة", - "clipboard_denied": "تم رفض الوصول إلى الحافظة. HTTPS مطلوب أو لم يتم منح الإذن.", - "file_loading": "تحميل...", - "file_timeout": "الجهاز البعيد لم يستجب. قد لا يكون نقل الملفات مدعومًا أو معطلاً على الجهاز البعيد.", - "codec": "ترميز الفيديو", - "codec_auto": "تلقائي (مستحسن)" + "legacy_title": "مولد تكوين العميل", + "connection_section": "اتصال الخادم", + "server_host": "عنوان الخادم العام", + "server_host_placeholder": "support.example.com أو 203.0.113.10", + "server_host_hint": "اسم النطاق أو IP العام الذي يصل من خلاله المستخدمون النهائيون إلى خادم BetterDesk. يُستمد المنفذ من تكوين وحدة التحكم.", + "use_https": "استخدام HTTPS / WSS (موصى به)", + "enrollment_token": "تسجيل الأجهزة", + "enrollment_token_pending": "لكل جهاز بعد الموافقة", + "enrollment_token_set": "لكل جهاز — الموافقة في التسجيلات", + "enrollment_token_hint": "كل عملية تثبيت تُسجّل بشكل مستقل. وافق على الأجهزة الجديدة في لوحة التسجيلات؛ يُصدر الخادم بعد ذلك مفتاح وصول فريدًا لكل جهاز كمبيوتر.", + "enrollment_per_device": "لكل جهاز — الموافقة في التسجيلات", + "background_color": "لون خلفية النافذة", + "surface_color": "لون خلفية البطاقة", + "text_color": "لون النص", + "text_muted_color": "لون النص الخافت", + "status_ready_color": "لون مؤشر الجاهزية", + "header_text_color": "لون نص الرأس", + "builds_title": "بنيات العميل", + "builds_hint": "برامج التثبيت المُجمَّعة على هذا الخادم لكل منصة. أعد البناء بعد إصلاح أخطاء أدوات البناء أو تحديث مصدر الوكيل.", + "builds_loading": "جارٍ تحميل حالة البناء…", + "builds_empty": "لا توجد عمليات بناء في قائمة الانتظار بعد — احفظ الحزمة أو انقر على إعادة بناء الكل.", + "rebuild_all": "إعادة بناء الكل", + "rebuilding_all": "جارٍ ترتيب عمليات إعادة البناء…", + "rebuild_queued": "جميع بنيات المنصات في قائمة الانتظار", + "rebuild_confirm": "هل تريد إعادة بناء جميع برامج تثبيت المنصات لهذه الحزمة؟ سيتم استبدال القطع الأثرية الجاهزة الموجودة.", + "build_status_ready": "جاهز", + "build_status_pending": "في الانتظار", + "build_status_building": "جارٍ البناء", + "build_status_failed": "فشل", + "builds_summary": "{{ready}} جاهز · {{pending}} في الانتظار · {{building}} جارٍ البناء · {{failed}} فشل", + "build_error_hint": "خطأ في البناء", + "preview_help": "طلب المساعدة" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "خادم الهوية", + "relay_server": "خادم الترحيل", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "جارٍ التحقق...", + "label": "Status", + "no_signal": "لا إشارة" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "الاتصال عبر عميل سطح المكتب", + "remote_viewer": "عارض عن بعد", + "web_remote": "الويب عن بعد", + "details": "Details", + "edit": "يحرر", + "delete": "يمسح", + "ban": "Ban", + "unban": "Unban", + "save": "يحفظ", + "cancel": "يلغي", + "confirm": "يتأكد", + "close": "يغلق", + "clear": "Clear", + "ok": "OK", + "saved": "تم الحفظ بنجاح", + "back": "خلف", + "create": "يخلق", + "dismiss": "Dismiss", + "view_all": "عرض الكل", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s مضت", + "minutes_ago": "{count}m مضت", + "hours_ago": "{count}h منذ", + "days_ago": "{count}d منذ", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "إدارة المستخدم", + "subtitle": "إدارة مستخدمي وحدة التحكم والأذونات", + "add_user": "Add User", + "edit_user": "تحرير المستخدم", + "username": "اسم المستخدم", + "username_placeholder": "أدخل اسم المستخدم", + "username_hint": "3-32 حرفًا وحرفًا وأرقامًا وشرطات سفلية فقط", + "password": "كلمة المرور", + "password_placeholder": "أدخل كلمة المرور", + "password_hint": "الحد الأدنى 8 أحرف مع حالة مختلطة وأرقام ورموز", + "password_leave_empty": "اتركه فارغًا للحفاظ على التيار", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "مخلوق", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "إنشاء مستخدم", + "edit": "يحرر", + "reset_password": "إعادة تعيين كلمة المرور", + "new_password": "كلمة المرور الجديدة", + "delete_title": "حذف المستخدم", + "delete_confirm": "هل أنت متأكد أنك تريد حذف المستخدم {username}؟", + "delete_success": "تم حذف المستخدم بنجاح", + "user_created": "تم إنشاء المستخدم بنجاح", + "user_updated": "تم تحديث المستخدم بنجاح", + "password_reset_success": "تم إعادة تعيين كلمة المرور بنجاح", + "empty_title": "لم يتم العثور على مستخدمين", + "empty_text": "أضف مستخدمين لإدارة الوصول إلى وحدة التحكم", + "fill_required": "يرجى ملء جميع الحقول المطلوبة", + "invalid_username": "يجب أن يتكون اسم المستخدم من 3 إلى 32 حرفًا وأحرفًا وأرقامًا وشرطات سفلية فقط", + "username_exists": "اسم المستخدم موجود بالفعل", + "weak_password": "كلمة المرور ضعيفة جدًا", + "password_too_short": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل", + "invalid_role": "دور غير صالح", + "cannot_demote_self": "لا يمكنك خفض رتبة نفسك", + "cannot_delete_self": "لا يمكنك حذف حسابك الخاص", + "last_admin": "لا يمكن حذف المسؤول الأخير", + "admin_only": "هذه الميزة متاحة فقط للمسؤولين", + "password_required": "كلمة المرور مطلوبة", + "not_found": "لم يتم العثور على المستخدم", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "أفضل الممارسات الأمنية", + "tip_strong_passwords": "استخدم كلمات مرور قوية وفريدة لكل مستخدم", + "tip_unique_accounts": "إنشاء حسابات فردية لكل شخص", + "tip_viewer_role": "استخدم دور العارض للمستخدمين الذين يحتاجون فقط إلى حق الوصول للقراءة", + "tip_operator_role": "استخدم دور عامل التشغيل للمستخدمين الذين يحتاجون إلى إدارة الأجهزة وليس المستخدمين", + "tip_audit_logs": "قم بمراجعة سجلات التدقيق بانتظام بحثًا عن أي نشاط مشبوه", + "role_pro": "برو (API فقط)", + "role_super_admin": "Super Admin", + "role_server_admin": "مشرف الخادم", + "role_global_admin": "المشرف العالمي", + "organizations": "المنظمات", + "user_organizations": "منظمات {username}", + "no_organizations": "لم يتم تعيين المستخدم إلى أي منظمة", + "org_removed": "تمت إزالة مهمة المؤسسة", + "server_role_label": "دور الخادم", + "server_role_hint": "يحدد ما يمكن للمستخدم القيام به عبر وحدة التحكم بأكملها (الوصول إلى اللوحة، وتكوين الخادم، والتدقيق، وما إلى ذلك).", + "org_membership_section": "عضوية المنظمة", + "org_membership_hint": "يمكن للمستخدم أن ينتمي إلى منظمات متعددة. يتحكم دور المؤسسة فقط في الأذونات داخل تلك المؤسسة وهو مستقل عن دور الخادم أعلاه.", + "column_organizations": "المنظمات", + "no_orgs_short": "—", + "org_count_one": "منظمة {count}", + "org_count_many": "المنظمات {count}", + "all_orgs_assigned": "المستخدم هو بالفعل عضو في كل منظمة.", + "user_groups": "مجموعات المستخدمين", + "user_groups_hint": "يمكن استخدام مجموعات المستخدمين لمنح حق الوصول إلى مجموعات الأجهزة المحددة.", + "loading_user_groups": "جارٍ تحميل مجموعات المستخدمين...", + "no_user_groups": "لا توجد مجموعات مستخدمين متاحة", + "create_user_group": "إنشاء مجموعة", + "edit_user_group": "تحرير مجموعة المستخدمين", + "delete_user_group": "حذف مجموعة المستخدمين", + "delete_user_group_confirm": "هل تريد حذف مجموعة المستخدمين {name}؟ سيفقد الأعضاء إمكانية الوصول الممنوحة من خلال هذه المجموعة.", + "user_group_created": "تم إنشاء مجموعة المستخدمين", + "user_group_updated": "تم تحديث مجموعة المستخدمين", + "user_group_deleted": "تم حذف مجموعة المستخدمين", + "user_group_not_found": "لم يتم العثور على مجموعة المستخدمين", + "group_name": "اسم المجموعة", + "group_name_placeholder": "مشغلي", + "group_note": "Note", + "group_note_placeholder": "ملاحظة اختيارية", + "group_name_required": "اسم المجموعة مطلوب", + "group_members_count": "أعضاء {count}", + "provider": "المزوّد", + "provider_local": "محلي", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "تُدار بواسطة موفر الهوية", + "provider_managed_hint": "يُدار هذا الحساب بواسطة موفر هوية خارجي (LDAP/AD أو SSO). تتحكم الجهة الموفرة في كلمة المرور والدور، ولا يمكن تغييرهما هنا." + }, + "folders": { + "title": "Folders", + "create": "إنشاء مجلد", + "edit": "تحرير المجلد", + "delete": "حذف المجلد", + "name": "Folder Name", + "name_placeholder": "أدخل اسم المجلد", + "name_required": "اسم المجلد مطلوب", + "name_too_long": "اسم المجلد طويل جدًا (50 حرفًا كحد أقصى)", + "color": "Color", + "icon": "Icon", + "not_found": "لم يتم العثور على المجلد", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا المجلد؟ سيتم إلغاء تعيين الأجهزة.", + "delete_success": "تم حذف المجلد بنجاح", + "created": "تم إنشاء المجلد بنجاح", + "updated": "تم تحديث المجلد بنجاح", + "no_devices_selected": "لم يتم تحديد أي أجهزة", + "devices_moved": "تم نقل الأجهزة بنجاح", + "device_assigned": "الجهاز المخصص للمجلد", + "unassigned": "Unassigned", + "all_devices": "جميع الأجهزة", + "drag_hint": "اسحب الأجهزة إلى المجلدات لتنظيمها", + "move_to": "انتقل الى", + "toggle_sidebar": "تبديل الشريط الجانبي" + }, + "errors": { + "forbidden_title": "تم الرفض", + "forbidden_message": "ليس لديك إذن للوصول إلى هذا المورد.", + "not_found_title": "لم يتم العثور على الصفحة", + "not_found_message": "الصفحة التي تبحث عنها غير موجودة أو تم نقلها.", + "server_error_title": "خطأ في الخادم", + "server_error_message": "حدث خطأ ما. يرجى المحاولة مرة أخرى لاحقا.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "فشل في تحميل الأجهزة", + "load_key_failed": "فشل في تحميل المفتاح", + "load_qr_failed": "فشل تحميل QR", + "load_audit_failed": "فشل تحميل سجل التدقيق", + "load_users_failed": "فشل تحميل المستخدمين", + "load_folders_failed": "فشل تحميل المجلدات", + "download_failed": "فشل التنزيل", + "logout_failed": "فشل تسجيل الخروج", + "password_change_failed": "فشل في تغيير كلمة المرور", + "language_change_failed": "فشل في تغيير اللغة", + "ban_failed": "فشل حظر الجهاز", + "unban_failed": "فشل في إلغاء الحظر على الجهاز", + "delete_failed": "فشل في حذف الجهاز", + "change_id_failed": "فشل في تغيير معرف الجهاز", + "bulk_delete_failed": "فشل في حذف الأجهزة", + "sync_failed": "فشلت مزامنة الحالة", + "error": "Error", + "not_found": "Not found", + "server_error": "خطأ في الخادم", + "load_device_failed": "فشل في تحميل الجهاز", + "load_orgs_failed": "فشل في تحميل المنظمات" + }, + "remote": { + "title": "سطح المكتب البعيد", + "connecting": "جارٍ الاتصال...", + "waiting_password": "في انتظار كلمة المرور", + "authenticating": "جارٍ المصادقة...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "كلمة المرور مطلوبة", + "enter_password_for": "أدخل كلمة المرور للجهاز", + "password_placeholder": "كلمة مرور الجهاز", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "العودة إلى الأجهزة", + "fullscreen": "Fullscreen", + "toggle_audio": "تبديل الصوت", + "send_keys": "إرسال المفاتيح", + "scale_mode": "Scale Mode", + "scale_fit": "يصلح للنافذة", + "scale_fill": "Fill Window", + "scale_original": "الحجم الأصلي (1:1)", + "scale_stretch": "تمتد لملء", + "actions": "Actions", + "lock_screen": "قفل الشاشة", + "restart_remote": "إعادة تشغيل الجهاز البعيد", + "refresh_screen": "تحديث الشاشة", + "clipboard_paste": "لصق من الحافظة", + "block_input": "Block Input", + "display_settings": "إعدادات العرض", + "image_quality": "جودة الصورة", + "quality_best": "الأفضل (الجودة الكاملة، 60 إطارًا في الثانية)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "إظهار المؤشر البعيد", + "lock_after_session": "قفل بعد الجلسة", + "privacy_mode": "وضع الخصوصية", + "disable_clipboard": "تعطيل الحافظة", + "chat": "Chat", + "chat_placeholder": "اكتب رسالة...", + "record": "شاشة التسجيل", + "view_only": "عرض فقط", + "pin_toolbar": "دبوس شريط الأدوات", + "monitors": "Monitors", + "select_monitor": "حدد مراقب", + "quality_speed": "السرعة (جودة منخفضة، 60 إطارًا في الثانية)", + "quality_quality": "الجودة (الأفضل، 30 إطارًا في الثانية)", + "recording_started": "بدأ التسجيل", + "recording_stopped": "توقف التسجيل", + "download_recording": "تحميل التسجيل", + "e2e_encrypted": "مشفرة من طرف إلى طرف", + "e2e_key_exchange": "إنشاء قناة آمنة...", + "confirm_restart": "هل أنت متأكد أنك تريد إعادة تشغيل الجهاز البعيد؟", + "webcodecs_not_supported": "متصفحك لا يدعم WebCodecs API. الرجاء استخدام Chrome 94+ أو Edge 94+.", + "webcodecs_insecure_context": "WebCodecs غير متاح عبر HTTP. يستخدم الفيديو برنامجًا احتياطيًا. للحصول على أفضل أداء، استخدم HTTPS.", + "webcodecs_fallback_active": "برنامج فك ترميز الفيديو نشط (أداء محدود)", + "click_to_start": "انقر للبدء", + "autoplay_blocked": "يتطلب المتصفح تفاعل المستخدم لبدء تشغيل الفيديو والصوت.", + "start_playback": "ابدأ التشغيل", + "new_connection": "اتصال جديد", + "device_id_placeholder": "أدخل معرف الجهاز", + "http_warning": "وضع HTTP: يقتصر على فك تشفير برنامج H.264 (~ 15 إطارًا في الثانية). استخدم HTTPS للحصول على الأداء الكامل (WebCodecs، VP9، 60 إطارًا في الثانية).", + "file_transfer": "نقل الملفات", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "هذا المجلد فارغ", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "فشل النقل", + "file_show_hidden": "إظهار الملفات المخفية", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "أدخل اسم المجلد:", + "file_parent": "المجلد الأصل", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "أدخل الاسم الجديد:", + "file_delete_confirm": "هل أنت متأكد أنك تريد حذف هذا العنصر؟", + "file_cancelled": "تم إلغاء النقل", + "2fa_required": "مطلوب التحقق 2FA", + "2fa_hint": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", + "2fa_invalid": "أدخل رمزًا صالحًا مكونًا من 6 أرقام", + "verify": "Verify", + "use_cdap_fallback": "استخدم عارض CDAP", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "الحافظة فارغة", + "clipboard_denied": "تم رفض الوصول إلى الحافظة. HTTPS مطلوب أو لم يتم منح الإذن.", + "file_loading": "تحميل...", + "file_timeout": "الجهاز البعيد لم يستجب. قد لا يكون نقل الملفات مدعومًا أو معطلاً على الجهاز البعيد.", + "codec": "ترميز الفيديو", + "codec_auto": "تلقائي (مستحسن)" + }, + "branding": { + "identity_title": "هوية العلامة التجارية", + "identity_desc": "قم بتخصيص اسم التطبيق والوصف الموضح عبر وحدة التحكم", + "app_name": "اسم التطبيق", + "app_description": "وصف التطبيق", + "logo_title": "Logo", + "logo_desc": "اختر كيفية ظهور شعارك في الشريط الجانبي وصفحة تسجيل الدخول", + "logo_type_icon": "أيقونة المادة", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "أدخل اسم أيقونات المواد (مثل نظام أسماء النطاقات والسحابة والأمان). راجع الخطوط.google.com/icons", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "الصق ترميز SVG الخاص بك هنا. يدعم عناصر الكاملة مع المسارات والأنماط.", + "logo_image_upload": "تحميل الصورة", + "logo_image_choose": "اختر ملف الصورة", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "نوع الملف غير صالح. استخدم PNG أو JPG أو GIF أو WebP أو SVG.", + "preview": "Preview", + "colors_title": "نظام الألوان", + "colors_desc": "تخصيص لوحة الألوان. اتركه فارغًا لاستخدام الإعدادات الافتراضية.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "ألوان مميزة", + "colors_borders": "Borders", + "import_export_title": "استيراد / تصدير", + "import_export_desc": "احفظ السمة الخاصة بك كملف JSON أو قم باستيراد ملف من مثيل آخر", + "export_theme": "تصدير الموضوع", + "import_theme": "استيراد الموضوع", + "reset_defaults": "إعادة التعيين إلى الإعدادات الافتراضية", + "save_branding": "حفظ العلامة التجارية", + "saved": "تم حفظ العلامة التجارية بنجاح. جارٍ إعادة التحميل...", + "exported": "تم تصدير الموضوع", + "imported": "تم استيراد الموضوع بنجاح. جارٍ إعادة التحميل...", + "import_error": "فشل استيراد المظهر. تنسيق الملف غير صالح.", + "reset_confirm": "هل أنت متأكد أنك تريد إعادة تعيين العلامة التجارية إلى الإعدادات الافتراضية؟ لا يمكن التراجع عن هذا.", + "reset_success": "إعادة تعيين العلامة التجارية إلى الإعدادات الافتراضية. جارٍ إعادة التحميل...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "يتم عرض النص الأساسي كشعار علامتك التجارية", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "نص ثانوي أسفل الشعار (على سبيل المثال، اسم المنتج أو الشعار)", + "logo_upload_success": "تم تحميل الشعار بنجاح.", + "typography_title": "Typography", + "typography_desc": "اختر الخطوط للعناوين والنص الأساسي. يتم تنزيل الخطوط إلى الخادم للاستضافة الذاتية.", + "font_heading": "خط العنوان", + "font_heading_hint": "يُستخدم للعناوين (H1–H6) وشعار النص", + "font_body": "Body Font", + "font_body_hint": "يستخدم للنص الأساسي وعناصر واجهة المستخدم", + "font_search_placeholder": "البحث عن الخطوط...", + "font_system_default": "الافتراضي للنظام", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "الخطوط التي تم تنزيلها على الخادم", + "powered_by": "مدعوم من", + "background_title": "الخلفية والمظهر", + "background_desc": "عيّن خلفية وحدة التحكم أو تدرجًا لونيًا أو لونًا صلبًا. تطفو البطاقات فوقها.", + "bg_type_none": "لا شيء", + "bg_type_color": "لون صلب", + "bg_type_gradient": "تدرج لوني", + "bg_type_image": "صورة", + "bg_color": "لون الخلفية", + "bg_gradient": "تدرج CSS", + "bg_gradient_hint": "أي تدرج CSS صالح، مثال: linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "رفع صورة الخلفية", + "bg_image_choose": "اختر ملف الصورة", + "bg_image_hint": "PNG أو JPG أو WebP أو GIF. الحد الأقصى 8 MB. مخزَّنة على الخادم.", + "bg_image_url": "مسار / رابط الصورة", + "bg_size": "حجم الصورة", + "bg_size_cover": "تغطية (ملء الشاشة)", + "bg_size_contain": "احتواء (ملاءمة)", + "bg_size_auto": "تلقائي (الحجم الأصلي)", + "bg_blur": "تمويه الخلفية", + "bg_overlay": "طبقة تعتيم داكنة", + "bg_overlay_hint": "يُغمق الخلفية لتحسين قابلية قراءة النص.", + "bg_image_too_large": "الصورة كبيرة جدًا. الحجم الأقصى 8 MB.", + "bg_image_invalid_type": "نوع الملف غير صالح. استخدم PNG أو JPG أو WebP أو GIF.", + "bg_upload_success": "تم رفع صورة الخلفية بنجاح.", + "login_title": "صفحة تسجيل الدخول", + "login_desc": "خصّص عنوان شاشة تسجيل الدخول والعنوان الفرعي والخلفية.", + "login_heading": "عنوان تسجيل الدخول", + "login_heading_placeholder": "مرحبًا بعودتك", + "login_subheading": "العنوان الفرعي لتسجيل الدخول", + "login_subheading_placeholder": "سجّل الدخول إلى حسابك", + "login_bg_inherit": "مثل وحدة التحكم", + "agent_title": "صفحة تنزيل الوكيل", + "agent_desc": "خصّص بوابة تنزيل الوكيل العامة التي تظهر للمستخدمين النهائيين.", + "agent_show_powered": "عرض \"Powered by BetterDesk\"", + "agent_show_powered_hint": "عرض نسب BetterDesk في تذييل بوابة التنزيل.", + "footer_title": "التذييل وحقوق النشر", + "footer_desc": "أضف سطر تذييل مخصصًا يظهر في شاشة تسجيل الدخول والشريط الجانبي لوحدة التحكم.", + "footer_text": "نص التذييل", + "footer_text_hint": "مثل إشعار حقوق النشر أو اسم الشركة.", + "show_powered": "عرض نسب \"BetterDesk\"", + "show_powered_hint": "عرض اسم BetterDesk وإصداره في تذييل تسجيل الدخول والشريط الجانبي.", + "custom_css_title": "CSS مخصص", + "custom_css_desc": "متقدم: حقن CSS مخصص يُطبَّق على وحدة التحكم وصفحة تسجيل الدخول.", + "custom_css_hint": "استخدم بحذر. يتم تنقية القواعد غير الصالحة أو غير الآمنة. الحد الأقصى 20,000 حرف." + }, + "device_detail": { + "tab_overview": "ملخص", + "tab_tags": "العلامات والملاحظات", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "اتصال", + "section_manage": "إدارة", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "هذا الجهاز محظور", + "no_reason": "لم يتم تقديم أي سبب", + "tags": "Tags", + "no_tags": "لم يتم تعيين علامات لهذا الجهاز", + "tag_placeholder": "أدخل اسم العلامة...", + "add_tag": "Add", + "tag_exists": "هذه العلامة موجودة بالفعل", + "notes": "Notes", + "notes_placeholder": "إضافة ملاحظات حول هذا الجهاز...", + "danger_zone": "Danger Zone", + "action_connect_web": "الويب عن بعد", + "action_connect_web_desc": "الاتصال عبر سطح المكتب البعيد للمتصفح", + "action_native_remote": "جهاز التحكم عن بعد BetterDesk", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "عميل سطح المكتب", + "action_connect_desktop_desc": "افتح في تطبيق عميل سطح المكتب", + "action_change_id_desc": "تغيير معرف تسجيل الجهاز", + "action_ban_desc": "منع هذا الجهاز من الاتصال", + "action_unban_desc": "السماح لهذا الجهاز بالاتصال مرة أخرى", + "action_delete_desc": "قم بإزالة هذا الجهاز نهائيًا", + "tab_hardware": "Hardware", + "tab_metrics": "المقاييس", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "قدرات الترميز", + "section_live_metrics": "المقاييس الحية", + "section_current_usage": "الاستخدام الحالي", + "section_usage_history": "تاريخ الاستخدام", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "تردد وحدة المعالجة المركزية", + "total_memory": "إجمالي الذاكرة", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "تم التحديث", + "device_groups": "المجموعات", + "no_sysinfo": "لا تتوفر أية معلومات عن الأجهزة", + "no_sysinfo_hint": "ستظهر معلومات النظام بعد أن يرسل الجهاز تقرير معلومات النظام", + "no_metrics": "لا توجد بيانات مقاييس متاحة", + "no_metrics_hint": "ستظهر المقاييس بعد أن يرسل الجهاز تقارير نبضات القلب", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "ملفات", + "agent_lazy_hint": "انقر فوق علامة التبويب هذه لتحميل البيانات المباشرة من الوكيل", + "agent_offline": "الوكيل غير متصل", + "agent_timeout": "لم يستجب الوكيل في الوقت المناسب", + "agent_error": "فشل تحميل البيانات من الوكيل", + "service_name": "Name", + "service_display": "اسم العرض", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "جرد الأجهزة والبرامج للأجهزة المدارة", + "device_id": "معرف الجهاز", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "إجمالي الذاكرة", + "memory_used": "Used Memory", + "memory_available": "الذاكرة المتاحة", + "memory_usage": "استخدام الذاكرة", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "واجهات الشبكة", + "software": "Software", + "software_count": "البرامج المثبتة", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "النوى المادية", + "logical_cores": "النوى المنطقية", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "متاح", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "عناوين IP", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "تشغيل جامع", + "collector_stopped": "توقف المجمع", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "تم جمعها في", + "no_data": "لا توجد بيانات المخزون المتاحة حتى الآن. انقر فوق \"اجمع الآن\" لجمع معلومات النظام.", + "no_devices": "لم يتم العثور على أجهزة تحتوي على بيانات المخزون", + "detail_title": "تفاصيل جرد الجهاز", + "telemetry": "Telemetry", + "view_detail": "عرض التفاصيل", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "دعم التذاكر وتتبع المشكلات", + "create": "New Ticket", + "edit": "تحرير التذكرة", + "delete": "حذف التذكرة", + "detail": "تفاصيل التذكرة", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "تم تعيينه ل", + "created_by": "تم الإنشاء بواسطة", + "device": "جهاز", + "sla_due": "SLA Due", + "created_at": "مخلوق", + "updated_at": "تم التحديث", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "يفتح", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "أكتب تعليق...", + "internal_note": "ملاحظة داخلية (غير مرئية للمستخدمين النهائيين)", + "attachments": "Attachments", + "upload_attachment": "تحميل المرفق", + "download": "Download", + "connect_device": "الاتصال بالجهاز", + "no_tickets": "لم يتم العثور على تذاكر", + "no_comments": "لا توجد تعليقات حتى الآن", + "no_attachments": "لا مرفقات", + "title_required": "العنوان مطلوب", + "delete_confirm": "هل أنت متأكد أنك تريد حذف التذكرة #{id}؟", + "delete_success": "تم حذف التذكرة بنجاح", + "created_success": "تم إنشاء التذكرة بنجاح", + "updated_success": "تم تحديث التذكرة بنجاح", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "البحث عن التذاكر...", + "assign_to_me": "خصص لي", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "يفتح", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "مراقبة النشاط", + "subtitle": "استخدام التطبيق وتتبع الخمول", + "device": "جهاز", + "hostname": "Hostname", + "sessions": "الجلسات", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "أعلى التطبيقات", + "app_name": "Application", + "window_title": "عنوان النافذة", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "عدد الجلسات", + "total_active": "إجمالي النشاط", + "total_idle": "Total Idle", + "detail_count": "سجلات التفاصيل", + "no_data": "لا توجد بيانات النشاط المتاحة", + "no_sessions": "لا جلسات", + "filter_from": "من", + "filter_to": "ل", + "filter_apply": "تطبيق الفلتر", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "أجهزة البحث...", + "date_range": "Date Range", + "device_id": "معرف الجهاز", + "session_start": "بدء الجلسة", + "session_end": "نهاية الجلسة", + "user": "User", + "no_activity": "لم يتم تسجيل أي نشاط", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "لا توجد تطبيقات" + }, + "automation": { + "title": "الأتمتة والتنبيهات", + "subtitle": "قواعد التنبيه والأوامر عن بعد وتكوين SMTP", + "rules": "Alert Rules", + "rules_subtitle": "تحديد الشروط التي تؤدي إلى الإخطارات", + "alerts": "تاريخ التنبيه", + "alerts_subtitle": "عرض التنبيهات التي تم تشغيلها والاعتراف بها", + "commands": "الأوامر عن بعد", + "commands_subtitle": "إرسال الأوامر إلى الأجهزة البعيدة", + "smtp": "تكوين SMTP", + "smtp_subtitle": "إعدادات إشعارات البريد الإلكتروني", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "نوع الحالة", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "الجهاز المستهدف", + "scope_all": "جميع الأجهزة", + "cooldown": "فترة التهدئة (ثواني)", + "notify_emails": "رسائل البريد الإلكتروني الإخطار", + "enabled": "ممكّن", + "disabled": "عاجز", + "create_rule": "إنشاء القاعدة", + "edit_rule": "تحرير القاعدة", + "delete_rule": "حذف القاعدة", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "تم التشغيل عند", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "أعظم من", + "op_gte": "أكبر أو يساوي", + "op_lt": "Less than", + "op_lte": "أقل أو يساوي", + "op_eq": "يساوي", + "op_neq": "لا يساوي", + "type_cpu_usage": "استخدام وحدة المعالجة المركزية (%)", + "type_memory_usage": "استخدام الذاكرة (%)", + "type_disk_usage": "استخدام القرص (%)", + "type_offline_duration": "المدة (المدد) في وضع عدم الاتصال", + "type_idle_duration": "مدة (فترات) الخمول", + "type_custom": "Custom", + "command_type": "نوع الأمر", + "command_payload": "الأمر / البرنامج النصي", + "command_result": "Result", + "command_status": "Status", + "send_command": "إرسال الأمر", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "فشل", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "اسم المستخدم", + "smtp_pass": "كلمة المرور", + "smtp_from": "من العنوان", + "smtp_test": "اتصال الاختبار", + "smtp_save": "حفظ التكوين", + "smtp_test_success": "تم الاتصال بنجاح", + "smtp_test_failed": "فشل الاتصال", + "no_rules": "لم يتم تكوين قواعد التنبيه", + "no_alerts": "لم يتم تشغيل أي تنبيهات", + "no_commands": "لم يتم إرسال أي أوامر", + "id_payload_required": "مطلوب معرف الجهاز والحمولة", + "no_commands_sent": "لم يتم إرسال أي أوامر حتى الآن" + }, + "file_transfer": { + "title": "نقل الملفات", + "transfers": "Transfers", + "new_transfer": "نقل جديد", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "حجم الملف", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "جهاز", + "initiated_by": "بدأ بواسطة", + "created_at": "تم الإنشاء في", + "cancel": "يلغي", + "cancel_confirm": "هل أنت متأكد أنك تريد إلغاء هذا النقل؟", + "download_file": "تنزيل الملف", + "browse_files": "تصفح الملفات", + "select_file": "حدد ملف", + "select_device": "حدد الجهاز", + "no_transfers": "لا يوجد نقل الملفات", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "فشل", + "status_cancelled": "Cancelled", + "bytes_transferred": "البايتات المنقولة", + "chunks": "Chunks", + "transfer_started": "بدأ النقل", + "transfer_completed": "اكتمل النقل", + "transfer_failed": "فشل النقل", + "transfer_cancelled": "تم إلغاء النقل", + "max_file_size": "الحد الأقصى لحجم الملف: 4 جيجابايت", + "error_too_large": "الملف كبير جدًا", + "error_no_device": "لم يتم تحديد أي جهاز", + "error_no_file": "لم يتم تحديد أي ملف" + }, + "network": { + "title": "مراقبة الشبكة", + "targets": "أهداف الرصد", + "add_target": "Add Target", + "edit_target": "تحرير الهدف", + "delete_target": "حذف الهدف", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الهدف؟", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "المهلة (مللي ثانية)", + "interval": "الفاصل الزمني (مللي ثانية)", + "enabled": "ممكّن", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "التحقق من التاريخ", + "stats": "Statistics", + "total_targets": "إجمالي الأهداف", + "targets_up": "Targets Up", + "targets_down": "الأهداف أسفل", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "أدوات الشبكة", + "ping_tool": "Ping Test", + "tcp_tool": "فحص منفذ TCP", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "ابدأ المراقبة", + "monitor_stop": "توقف عن المراقبة", + "monitor_running": "الشاشة قيد التشغيل", + "monitor_stopped": "تم إيقاف جهاز المراقبة", + "no_targets": "لم يتم تكوين أهداف مراقبة", + "no_history": "لا يوجد سجل فحص متاح", + "error_code": "Error", + "status_code": "رمز الحالة HTTP", + "search_targets": "أهداف البحث...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "التحقق من التاريخ", + "name_host_required": "الاسم والمضيف مطلوبان", + "uptime": "Uptime", + "response_time": "وقت الاستجابة", + "avg_response": "متوسط ​​الاستجابة", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "وقت الاستجابة (مللي ثانية)", + "uptime_percent": "Uptime %", + "last_24h": "آخر 24 ساعة", + "last_7d": "Last 7 days", + "last_30d": "آخر 30 يومًا" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "سياسات منع فقدان البيانات", + "add_policy": "إضافة سياسة", + "edit_policy": "تحرير السياسة", + "delete_policy": "حذف السياسة", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذه السياسة؟", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "ممكّن", + "disabled": "عاجز", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "جهاز USB", + "rule_type_file": "تشغيل الملف", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "معرف البائع (VID)", + "pid": "معرف المنتج (PID)", + "serial": "رقم سري", + "device_class": "فئة الجهاز", + "drive_type": "Drive Type", + "file_extensions": "ملحقات الملفات", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "ملف", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "لم يتم تكوين سياسات DLP", + "no_events": "لم يتم تسجيل أي أحداث DLP", + "stats": "Statistics", + "total_events": "إجمالي الأحداث", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "أحداث الملف", + "device_id": "معرف الجهاز", + "policy_matched": "مطابقة السياسة", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "إجمالي السياسات", + "active_policies": "السياسات النشطة", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "السياسات", + "tab_events": "Events", + "search_policies": "سياسات البحث...", + "create_policy": "إنشاء سياسة", + "policy_type": "نوع السياسة", + "scope": "Scope", + "events_count": "Events", + "search_events": "أحداث البحث...", + "event_time": "Event Time", + "device": "جهاز", + "policy": "سياسة", + "detail": "Detail", + "scope_help": "معرفات الأجهزة مفصولة بفواصل، أو اتركها فارغة للجميع", + "scope_all": "جميع الأجهزة", + "active": "Active", + "type_file_type": "نوع الملف", + "type_clipboard": "الحافظة", + "type_screen_share": "مشاركة الشاشة", + "type_file_transfer": "نقل الملفات", + "policy_desc": "وصف السياسة", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "إنشاء تقرير", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "ملخص الجهاز", + "type_activity": "ملخص النشاط", + "type_security": "تقرير الأمن", + "type_tickets": "تقرير التذاكر", + "type_network": "تقرير الشبكة", + "type_inventory": "تقرير الجرد", + "type_alerts": "تقرير التنبيه", + "saved": "التقارير المحفوظة", + "save_report": "حفظ التقرير", + "delete_report": "حذف التقرير", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا التقرير المحفوظ؟", + "no_saved": "لا توجد تقارير محفوظة", + "report_title": "Title", + "created_by": "تم الإنشاء بواسطة", + "created_at": "تم الإنشاء في", + "filters": "Filters", + "date_from": "من", + "date_to": "ل", + "device_filter": "معرف الجهاز", + "generated_at": "تم إنشاؤها في", + "section": "قسم البيانات", + "total_devices": "إجمالي الأجهزة", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "توزيع المنصة", + "top_applications": "أعلى التطبيقات", + "total_active": "إجمالي الوقت النشط", + "total_idle": "إجمالي وقت الخمول", + "dlp_stats": "إحصائيات منع فقدان البيانات", + "banned_devices": "الأجهزة المحظورة", + "audit_logs": "Audit Logs", + "ticket_stats": "إحصائيات التذاكر", + "category_distribution": "توزيع الفئة", + "priority_distribution": "توزيع الأولويات", + "targets_status": "حالة الأهداف", + "os_distribution": "توزيع نظام التشغيل", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "التنبيهات الأخيرة", + "tab_generate": "إنشاء تقرير", + "tab_saved": "التقارير المحفوظة", + "type_devices_desc": "نظرة عامة على جميع الأجهزة والأنظمة الأساسية والحالات", + "type_activity_desc": "استخدام التطبيق وملخص وقت الخمول", + "type_security_desc": "إجراءات الحظر وأحداث منع فقدان البيانات وسجلات التدقيق", + "type_tickets_desc": "إحصائيات التذاكر وأداء SLA", + "type_network_desc": "أهداف مراقبة الشبكة وبيانات وقت التشغيل", + "type_inventory_desc": "ملخص مخزون الأجهزة والبرمجيات", + "type_alerts_desc": "قواعد التنبيه وسجل التنبيهات المُثارة", + "report_name": "Report Name", + "format": "Format", + "save": "حفظ التقرير", + "preview": "Preview", + "download": "Download", + "delete_saved": "حذف التقرير", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "تحرير المستأجر", + "delete_tenant": "حذف المستأجر", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا المستأجر؟ ستتم إزالة كافة تعيينات الجهاز والمستخدم.", + "name": "Name", + "slug": "Slug", + "contact_name": "اسم جهة الاتصال", + "contact_email": "البريد الإلكتروني للاتصال", + "max_devices": "أجهزة ماكس", + "max_devices_hint": "0 = غير محدود", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "الأجهزة", + "users": "Users", + "assign_device": "تعيين الجهاز", + "assign_devices": "تعيين الأجهزة", + "remove_device": "إزالة الجهاز", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "لم يتم تكوين أي مستأجرين", + "no_devices": "لم يتم تعيين أي أجهزة لهذا المستأجر", + "no_users": "لم يتم تعيين أي مستخدمين لهذا المستأجر", + "stats": "إحصائيات المستأجر", + "total_devices": "إجمالي الأجهزة", + "online_devices": "أجهزة الانترنت", + "total_users": "Total Users", + "created_at": "تم الإنشاء في", + "updated_at": "تم التحديث في", + "slug_exists": "سبيكة المستأجر موجودة بالفعل", + "total_tenants": "إجمالي المستأجرين", + "active_tenants": "المستأجرون النشطون", + "search": "بحث عن المستأجرين...", + "create_tenant": "إنشاء المستأجر", + "detail": "تفاصيل المستأجر", + "contact": "Contact", + "enabled": "ممكّن", + "disabled": "عاجز", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "البحث حسب معرف الجهاز أو اسم المضيف أو IP...", + "no_registrations": "No registration requests", + "col_device_id": "معرف الجهاز", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "هل أنت متأكد أنك تريد الموافقة على هذا الجهاز؟ سيتلقى بيانات اعتماد الخادم ويمكنه الاتصال تلقائيًا.", + "approved_success": "تمت الموافقة على تسجيل الجهاز بنجاح", + "reject_btn": "Reject", + "reject_title": "رفض التسجيل", + "reject_confirm": "هل أنت متأكد أنك تريد رفض طلب التسجيل هذا؟", + "reject_reason": "السبب (اختياري)", + "reject_reason_placeholder": "أدخل سبب الرفض...", + "rejected_success": "تم رفض تسجيل الجهاز", + "delete_confirm": "هل أنت متأكد أنك تريد حذف سجل التسجيل هذا؟", + "deleted_success": "تم حذف سجل التسجيل", + "enrollment_title": "تسجيل الجهاز", + "enrollment_subtitle": "طلبات التسجيل المعلقة من عملاء سطح المكتب BetterDesk", + "enrollment_empty": "لا توجد طلبات تسجيل معلقة", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "اسم العرض", + "enrollment_display_name_placeholder": "أدخل اسمًا لهذا الجهاز...", + "enrollment_sync_mode": "وضع المزامنة", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "تمت الموافقة على تسجيل الجهاز", + "enrollment_rejected_success": "تم رفض تسجيل الجهاز", + "approve_title": "الموافقة على الجهاز", + "field_name": "اسم الجهاز", + "field_name_placeholder": "أدخل اسمًا لهذا الجهاز...", + "field_sync_mode": "وضع المزامنة", + "sync_standard": "قياسي — مزامنة متوازنة", + "sync_silent": "صامت — بيانات قياس أدنى", + "sync_turbo": "توربو — مزامنة مكثفة", + "field_tags": "العلامات", + "field_tags_placeholder": "علامات مفصولة بفواصل (مثال: مكتب، لابتوب)...", + "field_tags_existing": "العلامات الموجودة", + "field_tag_add_placeholder": "إضافة علامة جديدة...", + "field_tag_add_btn": "إضافة", + "field_groups": "مجموعات الأجهزة", + "field_folder": "المجلد", + "field_folder_none": "بدون مجلد", + "reject_ban_option": "حظر هذا الجهاز", + "reject_ban_hint": "سيُحظر الجهاز ولن يتمكن من إرسال طلبات تسجيل جديدة.", + "banner_open_mode": "التسجيل مفتوح — يُسجّل عملاء RustDesk الجدد دون موافقة المشغل. اضبط الوضع المُدار في الإعدادات لاستخدام قائمة الانتظار هذه.", + "banner_locked_mode": "التسجيل مقفل — تتمكن فقط الأجهزة المرتبطة برمز من التسجيل. الوضع المُدار مطلوب لموافقة المشغل على العملاء المجهولين.", + "enrollment_settings_link": "إعدادات التسجيل" + }, + "backup": { + "title": "Backup", + "desc": "قم بتنزيل نسخة احتياطية كاملة من تكوين وحدة التحكم والمستخدمين والمجموعات والإعدادات. يتم تضمين بيانات نظير Go server عندما تكون الواجهة الخلفية BetterDesk نشطة.", + "restore_title": "Restore", + "restore_desc": "قم بتحميل ملف نسخة احتياطية تم تنزيله مسبقًا لاستعادة تكوين وحدة التحكم. حدد الأقسام التي تريد استعادتها أدناه.", + "stat_users": "Users", + "stat_settings": "إعدادات", + "stat_folders": "Folders", + "stat_groups": "المجموعات", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "تحميل النسخ الاحتياطي", + "creating": "جارٍ إنشاء نسخة احتياطية...", + "download_success": "تم تنزيل النسخة الاحتياطية بنجاح", + "upload": "تحميل النسخ الاحتياطي", + "restore_confirm": "هل أنت متأكد أنك تريد الاستعادة من هذه النسخة الاحتياطية؟ سيتم الكتابة فوق الأقسام المحددة.", + "restore_success": "تمت استعادة النسخة الاحتياطية بنجاح. قد تتطلب بعض التغييرات إعادة تحميل الصفحة.", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "إعدادات وحدة التحكم", + "opt_branding": "العلامة التجارية / الموضوع", + "opt_folders": "مجلدات الجهاز", + "opt_groups": "مجموعات المستخدمين والأجهزة", + "opt_addressbooks": "دفاتر العناوين", + "opt_users": "حسابات المستخدمين", + "opt_users_warning": "مدمر: يستبدل جميع حسابات المستخدمين ببيانات احتياطية. ربما تم تسجيل خروجك.", + "no_file": "لم يتم تحديد ملف النسخ الاحتياطي", + "invalid_json": "ملف النسخ الاحتياطي غير صالح: JSON غير صالح", + "invalid_format": "ملف النسخ الاحتياطي غير صالح: ليس نسخة احتياطية BetterDesk", + "stat_database": "محرك قاعدة البيانات", + "stat_keys": "مفاتيح الخادم مضمَّنة", + "stat_env": "ملف البيئة", + "stat_uploads": "ملفات العلامة التجارية", + "restart_required": "بعض المكوّنات المستعادة (المفاتيح / .env / قاعدة بيانات Go) تتطلب إعادة تشغيل الخدمة لتصبح فعّالة.", + "security_warning": "تحتوي هذه النسخة الاحتياطية على أسرار (مفاتيح الخادم، ملف البيئة، تجزئات كلمات المرور وأسرار 2FA). احتفظ بها بأمان ولا تشاركها أبدًا.", + "restore_warning": "استعادة الأسرار أو ملف البيئة أو قاعدة بيانات خادم Go تستبدل هوية الخادم وتستلزم إعادة تشغيل الخدمة بعد ذلك.", + "opt_database": "قاعدة البيانات (جميع الجداول)", + "opt_database_hint": "يُعيد استيراد جميع بيانات وحدة التحكم. يُطبَّق مباشرةً دون الحاجة لإعادة تشغيل.", + "opt_uploads": "ملفات العلامة التجارية", + "opt_uploads_hint": "الشعارات والصور المرفوعة.", + "opt_secrets": "مفاتيح الخادم والأسرار", + "opt_secrets_warning": "يستبدل هوية خادم Ed25519 ومفتاح API وسر الجلسة. يتطلب إعادة تشغيل الخدمة.", + "opt_env": "ملف البيئة (.env)", + "opt_env_warning": "يستبدل SESSION_SECRET ومفتاح API وDSN قاعدة البيانات والمنافذ وإعدادات TLS. يتطلب إعادة تشغيل الخدمة.", + "opt_godb": "قاعدة بيانات خادم Go", + "opt_godb_warning": "يستبدل قاعدة بيانات Go server SQLite (الخلفية SQLite فقط). يتطلب إعادة تشغيل الخدمة." + }, + "cdap": { + "device_detail": "جهاز CDAP", + "loading": "تحميل...", + "loading_widgets": "جارٍ تحميل أدوات الجهاز...", + "load_error": "فشل تحميل بيانات الجهاز", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "الجهاز غير متصل حاليا. قد تكون قيم عنصر واجهة المستخدم قديمة.", + "no_widgets": "لا توجد الحاجيات المتاحة", + "no_widgets_desc": "لم يسجل هذا الجهاز بيان CDAP مع تعريفات عناصر واجهة المستخدم.", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "تأكيد الأمر", + "select_option": "يختار", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "إرسال الأمر", + "command_sent": "تم إرسال الأمر بنجاح", + "command_failed": "فشل في إرسال الأمر", + "devices_title": "أجهزة CDAP", + "devices_subtitle": "الأجهزة المتصلة عبر بروتوكول تطبيق الجهاز المخصص", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "أجهزة البحث...", + "no_devices": "لا توجد أجهزة متصلة", + "no_devices_desc": "لا توجد أجهزة CDAP متصلة حاليًا. ستظهر الأجهزة هنا بمجرد اتصالها بالبوابة.", + "gateway_disabled": "تم تعطيل بوابة CDAP", + "gateway_disabled_desc": "قم بتمكين بوابة CDAP عن طريق تعيين CDAP_ENABLED=true في تكوين الخادم.", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "تعطيل CDAP", + "enabled_restart": "تم تمكين CDAP. يلزم إعادة تشغيل الخادم لتطبيق التغييرات.", + "disabled_restart": "تم تعطيل CDAP. يلزم إعادة تشغيل الخادم لتطبيق التغييرات.", + "widgets": "الحاجيات", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "التنبيهات النشطة", + "alert_fired": "Alert fired", + "alert_cleared": "تم مسح التنبيه", + "no_alerts": "لا توجد تنبيهات نشطة", + "connect_terminal": "ربط المحطة", + "table_search": "يبحث...", + "just_now": "Just now", + "terminal_connecting": "جارٍ الاتصال بالجهاز...", + "terminal_disconnected": "Disconnected", + "terminal_error": "فشل الاتصال الطرفي", + "linked_devices": "الأجهزة المرتبطة", + "link_device": "جهاز الارتباط", + "unlink_device": "Unlink", + "no_linked_devices": "لا توجد أجهزة مرتبطة", + "unlink_confirm": "هل أنت متأكد أنك تريد إلغاء ربط هذا الجهاز؟", + "link_prompt": "أدخل معرف النظير للربط بهذا الجهاز:", + "connect_desktop": "قم بتوصيل سطح المكتب", + "connect_video": "ربط الدفق", + "connect_files": "تصفح الملفات", + "connect_audio": "قم بتوصيل الصوت", + "upload_file": "Upload", + "desktop_connecting": "جارٍ الاتصال...", + "video_connecting": "جارٍ الاتصال...", + "files_connecting": "جارٍ الاتصال...", + "audio_connecting": "جارٍ الاتصال...", + "audio_streaming": "Streaming", + "clipboard_in": "تم استلام الحافظة", + "clipboard_out": "تم إرسال الحافظة", + "monitor_select": "حدد مراقب", + "keyframe_request": "طلب الإطار الرئيسي", + "quality_auto": "جودة السيارات" + }, + "desktop": { + "switch_mode": "وضع سطح المكتب", + "console_mode": "وضع وحدة التحكم", + "loading": "تحميل...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "يغلق", + "widgets_mode": "الحاجيات", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "إضافة القطعة", + "remove_widget": "إزالة القطعة", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "تكوين", + "search_widgets": "أدوات البحث...", + "cat_monitoring": "Monitoring", + "cat_devices": "الأجهزة", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "أكتب ملاحظات هنا...", + "search_placeholder": "البحث عن الأجهزة والصفحات والإعدادات...", + "search_pages": "Pages", + "search_devices": "الأجهزة", + "search_no_results": "No results", + "exit_desktop": "الخروج من وضع سطح المكتب", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "حالة الجهاز", + "widget_server_health": "معلومات الخادم", + "widget_system_stats": "عدادات الجهاز", + "widget_device_list": "قائمة الأجهزة", + "widget_quick_actions": "إجراءات سريعة", + "widget_recent_activity": "النشاط الأخير", + "widget_notes": "Notes", + "widget_network_monitor": "مراقب الشبكة", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "أجهزة CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "شبكة الجهاز", + "widget_multi_gauge": "مقاييس الخادم", + "widget_weekly_chart": "النشاط الأسبوعي", + "widget_quick_controls": "الضوابط السريعة", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "إحصائيات الاتصال", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "جلسات المستخدم", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "لا توجد أجهزة", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "يفتح", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "قم بتعيين URL في التكوين", + "label_server_uptime": "وقت تشغيل الخادم", + "label_merged_info": "تم دمجها في أداة معلومات الخادم", + "label_with_notes": "مع الملاحظات", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "إجمالي الأجهزة", + "label_throughput": "Throughput", + "label_active_relays": "المرحلات النشطة", + "label_total_relayed": "مجموع ترحيل", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "أجهزة التصفية...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "لا توجد أجهزة CDAP", + "action_add_widget": "إضافة القطعة", + "label_merged_server_info": "تم دمجها في أداة معلومات الخادم", + "wp_images": "Images", + "wp_colors": "الألوان الصلبة", + "wp_custom_color": "لون مخصص", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "لم يتم تثبيت صور الخلفية على هذا الخادم.", + "wp_download_hint": "ضع صور PNG في الدليل public/wallpapers/ لتمكين اختيار ورق الحائط.", + "widget_calendar": "Calendar", + "widget_process_monitor": "مراقب العملية", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "إحصائيات قاعدة البيانات", + "widget_docker_containers": "حاويات Docker", + "widget_shell_command": "قيادة شل", + "widget_device_map": "خريطة الجهاز", + "widget_remote_connect": "الاتصال عن بعد", + "label_no_online": "لا توجد أجهزة متصلة بالإنترنت", + "label_no_events": "لا توجد أحداث اليوم", + "label_event_title": "عنوان الحدث:", + "label_no_data": "لا توجد بيانات متاحة", + "label_download_speed": "سرعة التحميل", + "label_latency": "Latency", + "label_server": "الخادم", + "label_run_test": "Run Test", + "label_testing": "اختبار...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "لا حاويات", + "label_docker_unavailable": "Docker غير متوفر", + "label_no_command": "لم يتم تكوين أي أمر", + "label_no_output": "لا يوجد إخراج حتى الآن", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "حفظ الإعداد المسبق", + "label_load_preset": "Load Preset", + "label_preset_name": "اسم الإعداد المسبق:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "الترتيب التلقائي", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 عمود (متساوي)", + "label_2col_wide": "2 عمود (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "مجموعة القطعة", + "ungroup_widgets": "فك تجميع الحاجيات", + "group_widgets": "مجموعة الحاجيات المحددة", + "snap_layouts": "التخطيطات المفاجئة", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "التقط أعلى اليسار", + "snap_top_right": "التقط أعلى اليمين", + "snap_bottom_left": "التقط أسفل اليسار", + "snap_bottom_right": "التقط أسفل اليمين", + "aero_shake": "هز لتقليل الآخرين", + "zone_resize": "اسحب الحدود لتغيير حجم المناطق", + "zone_borders": "حدود المنطقة القابلة للسحب", + "app_drawer": "Applications", + "search_apps": "تطبيقات البحث...", + "edit_shortcuts": "تحرير الاختصارات", + "widgets": "الحاجيات", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "انقر في أي مكان أو اضغط على مفتاح لتسجيل الدخول", + "username_placeholder": "اسم المستخدم", + "password_placeholder": "كلمة المرور", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "المصادقة الثنائية", + "totp_subtitle": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", + "back_to_login": "العودة لتسجيل الدخول", + "fill_all_fields": "يرجى ملء جميع الحقول", + "invalid_credentials": "اسم المستخدم أو كلمة المرور غير صالحة", + "invalid_code": "رمز التحقق غير صالح", + "enter_6_digits": "أدخل جميع الأرقام الستة", + "network_error": "Network error — check your connection", + "session_expired": "انتهت صلاحية الجلسة. الرجاء تسجيل الدخول مرة أخرى." + }, + "tokens": { + "title": "رموز الجهاز", + "subtitle": "إدارة الرموز المميزة للتسجيل لتوفير الجهاز تلقائيًا", + "enrollment_mode": "وضع التسجيل", + "mode_open": "يفتح", + "mode_open_desc": "يمكن لأي جهاز التسجيل بدون رمز مميز", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "مجموع الرموز", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "رموز البحث...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "توليد بالجملة", + "create": "إنشاء رمز مميز", + "edit": "تحرير الرمز المميز", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "مخلوق", + "actions": "Actions", + "name_placeholder": "على سبيل المثال دفعة أجهزة الكمبيوتر المكتبية", + "max_uses": "Max Uses", + "max_uses_hint": "0 = غير محدود", + "expires_in": "Expires In", + "no_expiration": "لا انتهاء الصلاحية", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "ملاحظة اختيارية حول هذا الرمز المميز...", + "count": "Count", + "count_range": "عدد الرموز المميزة المراد إنشاؤها (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "تم إنشاء الرمز المميز", + "tokens_generated": "تم إنشاء الرموز المميزة", + "copy_warning": "انسخ الرمز المميز الآن. لن يتم عرضه مرة أخرى.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "هل أنت متأكد أنك تريد إلغاء هذا الرمز المميز؟ ولن تتأثر الأجهزة المسجلة به بالفعل.", + "revoked_success": "تم إبطال الرمز المميز بنجاح", + "no_tokens": "لم يتم العثور على الرموز المميزة", + "expired": "Expired", + "never": "Never", + "save": "يحفظ", + "cancel": "يلغي", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "التالي", + "prev": "Previous", + "skip": "Skip", + "finish": "ينهي", + "close": "يغلق", + "step_of": "{current} من {total}", + "console_sidebar_title": "الشريط الجانبي للملاحة", + "console_sidebar_text": "الوصول إلى جميع الوحدات من هنا. انقر فوق أي رمز للانتقال إلى هذا القسم. يتكيف الشريط الجانبي مع حجم شاشتك.", + "console_expand_title": "قم بتوسيع الشريط الجانبي", + "console_expand_text": "انقر هنا لتوسيع الشريط الجانبي ورؤية التسميات الكاملة لجميع عناصر التنقل. انقر مرة أخرى لطي.", + "console_search_title": "بحث سريع", + "console_search_text": "ابحث عن الأجهزة أو الإعدادات أو الإجراءات بسرعة. اضغط على Ctrl+K لاختصار لوحة المفاتيح.", + "console_dashboard_title": "لوحة القيادة", + "console_dashboard_text": "يعرض المحور المركزي الخاص بك حالة الخادم والأجهزة المتصلة بالإنترنت والإجراءات السريعة. إبقاء العين على المقاييس الهامة في لمحة.", + "console_devices_title": "إدارة الجهاز", + "console_devices_text": "عرض جميع الأجهزة المتصلة والبحث فيها وإدارتها. يمكنك التصفية حسب الحالة، وتعيين العلامات، وتكوين إعدادات الجهاز الفردية.", + "console_settings_title": "إعدادات", + "console_settings_text": "تكوين سلوك الخادم وخيارات الأمان والعلامة التجارية وإدارة المستخدم. قم بتخصيص BetterDesk ليناسب احتياجاتك.", + "console_desktop_title": "وضع سطح المكتب", + "console_desktop_text": "قم بالتبديل إلى وضع سطح المكتب للحصول على مساحة عمل ذات إطارات تحتوي على عناصر واجهة مستخدم. مثالية للوحات المعلومات متعددة المهام والمراقبة.", + "console_complete_title": "أنت جاهز!", + "console_complete_text": "استكشف فئات الشريط الجانبي لاكتشاف جميع الميزات. انقر فوق أيقونة المساعدة في أي وقت لإعادة تشغيل هذا الدليل.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "يعرض الشريط العلوي الساعة وعناصر التحكم السريعة والوصول إلى درج التطبيقات. انقر على أيقونة الشبكة لتصفح جميع التطبيقات.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "افتح درج التطبيق للبحث عن أي وظيفة لوحدة التحكم وتشغيلها كنافذة عائمة. يتم تنظيم التطبيقات حسب الفئة.", + "desktop_widgets_title": "لوحة تحكم القطعة", + "desktop_widgets_text": "مساحة العمل القابلة للتخصيص الخاصة بك. تعرض الأدوات معلومات مباشرة وتوفر وصولاً سريعًا إلى الميزات. اسحب لإعادة الترتيب.", + "desktop_add_widget_title": "إضافة الحاجيات", + "desktop_add_widget_text": "انقر هنا لتصفح الأدوات المتاحة. اختر من بين شاشات المراقبة وقوائم الأجهزة والملاحظات والمزيد.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "تظهر التطبيقات المفتوحة هنا. انقر للتركيز أو تصغير النوافذ. قم بتمرير الرموز لرؤية تسميات التطبيق.", + "desktop_snap_title": "التخطيطات المفاجئة", + "desktop_snap_text": "اسحب النوافذ إلى حواف الشاشة لتثبيتها في موضعها، أو قم بتحريك زر التكبير للإعدادات المسبقة للتخطيط. جرب ايرو شيك!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "يتم فتح التطبيقات في نوافذ قابلة للسحب وتغيير الحجم. تصغير أو تكبير أو إغلاق شريط العنوان. طبقة Windows فوق عناصر واجهة المستخدم.", + "desktop_search_title": "بحث سريع", + "desktop_search_text": "البحث عبر الأجهزة والصفحات والإعدادات. اضغط على Ctrl+K في أي مكان لفتح البحث على الفور.", + "desktop_complete_title": "وضع سطح المكتب جاهز!", + "desktop_complete_text": "حاول فتح التطبيقات من الدرج وترتيب النوافذ جنبًا إلى جنب. استخدم الإعدادات المسبقة لعناصر واجهة المستخدم لتخطيطات لوحة المعلومات السريعة.", + "devices_folders_title": "مجلدات الجهاز", + "devices_folders_text": "تنظيم الأجهزة في مجلدات. انقر فوق مجلد لتصفية القائمة. انقر بزر الماوس الأيمن لإعادة التسمية أو الحذف.", + "devices_search_title": "بحث وتصفية", + "devices_search_text": "البحث حسب المعرف أو اسم المضيف أو النظام الأساسي. استخدم أقراص الحالة لإظهار الاتصال بالإنترنت أو عدم الاتصال بالإنترنت أو لجميع الأجهزة فقط.", + "devices_table_title": "قائمة الأجهزة", + "devices_table_text": "انقر فوق أي صف جهاز للحصول على التفاصيل. استخدم قائمة الكباب الموجودة على اليمين لاتخاذ إجراءات سريعة مثل الاتصال أو تعديل العلامات أو الحذف.", + "devices_complete_title": "إدارة الجهاز جاهزة!", + "devices_complete_text": "اسحب الأجهزة بين المجلدات لتنظيمها. انقر نقرًا مزدوجًا فوق أحد الأجهزة لفتح لوحة التفاصيل الخاصة به.", + "settings_tabs_title": "فئات الإعدادات", + "settings_tabs_text": "التنقل بين الأقسام العامة والأمان والمظهر وأقسام التكوين الأخرى.", + "settings_content_title": "إعدادات", + "settings_content_text": "يحتوي كل قسم على إعدادات خادم ووحدة تحكم محددة. يتم حفظ التغييرات عند النقر فوق حفظ.", + "settings_complete_title": "نظرة عامة على الإعدادات", + "settings_complete_text": "تحقق من إعدادات الأمان لمفاتيح 2FA وAPI وإدارة المستخدم. تفضل بزيارة المظهر لتخصيص مظهر وحدة التحكم.", + "help": "المساعدة والبرامج التعليمية", + "tour_console": "جولة وحدة التحكم", + "tour_desktop": "جولة في وضع سطح المكتب", + "tour_devices": "جولة الأجهزة", + "tour_settings": "جولة الإعدادات", + "reset_all": "إعادة تعيين كافة البرامج التعليمية", + "tour_remote": "جولة الجلسة البعيدة", + "tour_organization": "إعداد المنظمة", + "tour_cdap": "نظرة عامة على CDAP", + "tour_chat": "أساسيات الدردشة", + "remote_toolbar_title": "شريط الأدوات البعيد", + "remote_toolbar_text": "قم بالوصول إلى عناصر التحكم في العرض ومزامنة الحافظة والمفاتيح الخاصة وإعدادات الجودة من شريط الأدوات. تبديل وضع ملء الشاشة باستخدام F11.", + "remote_canvas_title": "العرض عن بعد", + "remote_canvas_text": "هذه هي الشاشة البعيدة. انقر داخل لبدء التحكم في الجهاز البعيد. تتم إعادة توجيه إدخال الماوس ولوحة المفاتيح تلقائيًا.", + "remote_clipboard_title": "مزامنة الحافظة", + "remote_clipboard_text": "انسخ النص والصقه بين جهاز الكمبيوتر الخاص بك والجهاز البعيد. استخدم Ctrl+C / Ctrl+V كالمعتاد أثناء التركيز على الشاشة البعيدة.", + "remote_complete_title": "الجلسة عن بعد جاهزة!", + "remote_complete_text": "استخدم أزرار شريط الأدوات للمفاتيح الخاصة (Ctrl+Alt+Del، PrintScreen) وتبديل الشاشة. اضغط على Escape أو انقر فوق Disconnect لإنهاء الجلسة.", + "org_overview_title": "المنظمات", + "org_overview_text": "تتيح لك المؤسسات تجميع المستخدمين والأجهزة والسياسات. كل مؤسسة لديها المشرف والمشغلين والإعدادات الخاصة بها.", + "org_create_title": "إنشاء منظمة", + "org_create_text": "انقر هنا لإنشاء منظمة جديدة. قم بتوفير اسم، وحلقة، ووصف اختياري. سوف تكون مالك المنظمة الجديدة.", + "org_members_title": "إدارة الأعضاء", + "org_members_text": "قم بدعوة المستخدمين عبر البريد الإلكتروني، وقم بتعيين الأدوار (المسؤول، والمشغل، والمستخدم)، وإدارة الوصول. يمكن للأعضاء رؤية الأجهزة المخصصة لمؤسستهم.", + "org_devices_title": "تعيين الأجهزة", + "org_devices_text": "إضافة أجهزة إلى المؤسسة. سترث الأجهزة المعينة هنا سياسات المؤسسة وستكون مرئية لأعضائها.", + "org_policies_title": "سياسات المنظمة", + "org_policies_text": "قم بتعيين سياسات الأمان مثل متطلبات كلمة المرور، ومهلة الجلسة، وفرض المصادقة الثنائية (2FA)، وقواعد تسجيل الجهاز للمؤسسة.", + "org_complete_title": "اكتمل إعداد المنظمة!", + "org_complete_text": "قم بدعوة فريقك وتخصيص الأجهزة لبدء استخدام الإدارة على مستوى المؤسسة. تنطبق السياسات تلقائيًا على جميع الأعضاء.", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "جهات الاتصال والمجموعات", + "chat_contacts_text": "رؤية جهات الاتصال الخاصة بك ومجموعات الدردشة. انقر فوق أي جهة اتصال لفتح محادثة. تشير النقاط الخضراء إلى المستخدمين المتصلين بالإنترنت.", + "chat_send_title": "إرسال الرسائل", + "chat_send_text": "اكتب رسالتك واضغط على Enter للإرسال. يتم تشفير الرسائل من طرف إلى طرف عندما يدعم كلا الطرفين E2E.", + "chat_file_title": "مشاركة الملفات", + "chat_file_text": "انقر على أيقونة المرفقات لمشاركة الملفات. الملفات مشفرة ويمكن أن يصل حجمها إلى 50 ميجابايت.", + "chat_complete_title": "الدردشة جاهزة!", + "chat_complete_text": "الدردشة مع المشغلين والمستخدمين النهائيين في الوقت الحقيقي. إنشاء مجموعات للتواصل الجماعي. تدعم جميع الرسائل إيصالات القراءة.", + "disable_tutorials": "تعطيل البرامج التعليمية", + "enable_tutorials": "تمكين البرامج التعليمية" + }, + "help_request": { + "title": "طلبات المساعدة", + "subtitle": "إدارة طلبات المساعدة الواردة من عملاء سطح المكتب", + "new_request": "طلب مساعدة جديد", + "device": "جهاز", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "لا توجد طلبات مساعدة", + "notification": "تم استلام طلب المساعدة من", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "المنظمات", + "create": "إنشاء منظمة", + "edit": "تحرير المنظمة", + "detail": "تفاصيل المنظمة", + "name": "Name", + "slug": "سبيكة (URL-آمنة)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "الأجهزة", + "invitations": "Invitations", + "settings": "إعدادات", + "add_user": "Add User", + "assign_device": "تعيين الجهاز", + "create_invitation": "إنشاء دعوة", + "delete_confirm": "هل تريد حذف هذه المؤسسة؟ سيؤدي هذا إلى إزالة جميع المستخدمين والأجهزة والإعدادات المرتبطة.", + "no_orgs": "لا توجد منظمات حتى الآن", + "no_orgs_hint": "قم بإنشاء مؤسستك الأولى لبدء إدارة الأجهزة والمستخدمين.", + "connection_policy": "سياسة الاتصال", + "allow_file_transfer": "السماح بنقل الملفات", + "allow_clipboard": "السماح بالحافظة", + "max_session_duration": "الحد الأقصى لمدة الجلسة (الحد الأدنى)", + "role_owner": "Owner", + "role_admin": "مسؤول", + "role_operator": "Operator", + "role_user": "عضو", + "username": "اسم المستخدم", + "password": "كلمة المرور", + "display_name": "اسم العرض", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "معرف الجهاز", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "المستخدم المعين", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "لا يوجد مستخدمون في هذه المؤسسة.", + "no_devices": "لم يتم تعيين أي أجهزة لهذه المؤسسة.", + "no_invitations": "لا دعوات.", + "user_added": "User added", + "user_removed": "تمت إزالة المستخدم", + "user_updated": "تم تحديث دور المستخدم", + "device_assigned": "تم تعيين الجهاز", + "device_unassigned": "تم إلغاء تعيين الجهاز", + "invitation_created": "تم إنشاء الدعوة", + "settings_saved": "تم حفظ الإعدادات", + "org_deleted": "تم حذف المؤسسة", + "confirm_remove_user": "هل تريد إزالة هذا المستخدم من المؤسسة؟", + "confirm_unassign_device": "هل تريد إلغاء تعيين هذا الجهاز من المؤسسة؟", + "confirm_delete_org": "هل تريد حذف هذه المؤسسة وجميع البيانات المرتبطة بها؟", + "edit_role": "تحرير الدور", + "raw_settings": "إعدادات الخام", + "key": "Key", + "value": "Value", + "save": "حفظ الإعدادات", + "policy_unattended": "غير المراقب (فورية)", + "policy_attended": "حضر (مع التأكيد)", + "policy_ask": "Always ask", + "expires_hours": "انتهاء الصلاحية (ساعات)", + "loading_failed": "فشل تحميل بيانات المؤسسة", + "name_slug_required": "مطلوب الاسم والسبيكة", + "org_created": "تم إنشاء المنظمة", + "org_updated": "تم تحديث المنظمة", + "create_new_user": "إنشاء جديد", + "add_existing_user": "إضافة موجودة", + "none_available": "none", + "select_user": "حدد المستخدم", + "org_role": "الدور التنظيمي", + "link_user_hint": "سيتم ربط المستخدم المحدد بهذه المؤسسة باستخدام بيانات اعتماد حساب الخادم الخاص به.", + "no_available_users": "جميع مستخدمي الخادم مرتبطون بالفعل بهذه المؤسسة.", + "user_linked": "المستخدم مرتبط بالمنظمة" + }, + "chat": { + "e2e_enabled": "مشفرة من طرف إلى طرف", + "e2e_establishing": "إنشاء قناة آمنة...", + "e2e_established": "تم إنشاء قناة آمنة", + "e2e_unsupported": "تشفير E2E غير مدعوم في هذا المتصفح", + "typing_indicator": "الكتابة...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "ملف", + "file_too_large": "الملف كبير جدًا (الحد الأقصى 50 ميجابايت)", + "file_encrypted": "نقل الملفات المشفرة", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "تم تدوير مفاتيح الأمان", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "المجموعات", + "no_contacts": "لا توجد اتصالات حتى الآن", + "no_groups": "لا توجد مجموعات حتى الآن", + "no_messages": "لا توجد رسائل حتى الآن", + "no_results": "لم يتم العثور على نتائج", + "select_conversation": "حدد محادثة لبدء الدردشة", + "type_message": "اكتب رسالة...", + "send": "يرسل", + "attach_file": "إرفاق الملف", + "emoji": "Emoji", + "search_messages": "بحث في الرسائل", + "create_group": "إنشاء مجموعة", + "group_name": "اسم المجموعة", + "group_members": "أعضاء", + "cancel": "يلغي", + "create": "يخلق", + "members": "أعضاء", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "البحث في جهات الاتصال والرسائل", + "select_conversation_hint": "حدد محادثة لعرض الرسائل", + "info": "Info", + "group_name_placeholder": "أدخل اسم المجموعة" + }, + "toast": { + "device_connected": "الجهاز متصل", + "device_disconnected": "تم قطع اتصال الجهاز", + "session_started": "بدأت الجلسة عن بعد", + "session_ended": "انتهت الجلسة البعيدة", + "file_upload_complete": "اكتمل تحميل الملف", + "settings_saved": "تم حفظ الإعدادات", + "error_generic": "حدث خطأ", + "connection_lost": "تم فقدان الاتصال", + "reconnecting": "جارٍ إعادة الاتصال..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "الأدوات المساعدة للإدارة وأدوات التشخيص", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "يرسل", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "أدخل النص...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "اذهب الخادم", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "تحقق من إمكانية الوصول إلى المضيف ووقت الاستجابة", + "tcp_title": "فحص منفذ TCP", + "tcp_desc": "اختبار اتصال منفذ TCP", + "ssl_title": "مفتش SSL", + "ssl_desc": "فحص تفاصيل شهادة SSL/TLS", + "http_title": "فحص الصحة HTTP", + "http_desc": "تحقق من حالة نقطة النهاية HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "حل اسم المضيف إلى عنوان IP", + "whois_title": "DNS Records", + "whois_desc": "سجلات الاستعلام A، AAAA، MX، TXT، NS", + "speed_title": "Speed Test", + "speed_desc": "قياس عرض النطاق الترددي للتحميل", + "run_speed_test": "تشغيل اختبار السرعة", + "wol_title": "Wake-on-LAN", + "wol_desc": "إرسال حزمة سحرية لتنبيه الجهاز", + "wol_sent": "تم إرسال الحزمة السحرية", + "hash_title": "مولد التجزئة", + "hash_desc": "إنشاء تجزئات التشفير", + "password_title": "مولد كلمة المرور", + "password_desc": "إنشاء كلمة مرور عشوائية آمنة", + "jwt_title": "JWT Decoder", + "jwt_desc": "قم بفك تشفير وفحص رموز الويب JSON", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "تشفير أو فك تشفير بيانات Base64", + "url_title": "URL Encoder", + "url_desc": "تشفير أو فك تشفير مكونات URL", + "processes_title": "قائمة العمليات", + "processes_desc": "عرض عمليات النظام قيد التشغيل", + "disk_title": "Disk Usage", + "disk_desc": "عرض استخدام قسم القرص", + "db_title": "إحصائيات قاعدة البيانات", + "db_desc": "عرض إحصائيات جدول قاعدة البيانات", + "docker_title": "حاويات Docker", + "docker_desc": "عرض حاويات Docker قيد التشغيل", + "logs_title": "Log Viewer", + "logs_desc": "عرض إخراج السجل الأخير", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "صالح من", + "valid_to": "صالح ل", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "لا توجد بيانات متاحة", + "no_docker": "لم يتم العثور على حاويات Docker أو أن Docker غير متوفر", + "no_logs": "لا توجد خطوط سجل متاحة" + }, + "policies": { + "title": "سياسات المنظمة", + "subtitle": "إدارة سياسات الأمان والاتصال والميزات لمؤسساتك", + "select_org": "منظمة", + "select_org_placeholder": "اختر منظمة...", + "select_org_first": "حدد مؤسسة لعرض سجل تدقيق السياسة.", + "configured": "Configured", + "connection_title": "سياسة الاتصال", + "connection_desc": "التحكم في كيفية إنشاء الجلسات البعيدة", + "connection_mode": "وضع الاتصال", + "mode_attended": "حضر (يتطلب موافقة المستخدم)", + "mode_unattended": "غير مراقب (السماح دائمًا)", + "mode_ask": "Always Ask", + "max_session": "الحد الأقصى لمدة الجلسة (بالدقائق)", + "idle_lock": "مهلة قفل الخمول (بالدقائق)", + "wallpaper_policy": "خلفية أثناء الجلسة", + "wallpaper_show": "Show", + "wallpaper_hide_session": "إخفاء أثناء الجلسة", + "wallpaper_hide_always": "Always hide", + "features_title": "سياسة الميزة", + "features_desc": "تمكين أو تعطيل ميزات محددة للأجهزة", + "allow_file_transfer": "السماح بنقل الملفات", + "allow_clipboard": "السماح بمزامنة الحافظة", + "allow_audio": "السماح بتدفق الصوت", + "allow_recording": "السماح بتسجيل الجلسة", + "security_title": "السياسة الأمنية", + "security_desc": "فرض متطلبات الأمان لأجهزة المؤسسة", + "require_2fa": "تتطلب 2FA للوصول غير المراقب", + "password_min_length": "الحد الأدنى لطول كلمة المرور", + "password_require_special": "تتطلب أحرف خاصة", + "password_max_age": "الحد الأقصى لعمر كلمة المرور (أيام، 0=أبدًا)", + "allowed_operators": "أدوار المشغل المسموح بها (مفصولة بفواصل)", + "network_title": "سياسة الشبكة", + "network_desc": "التحكم في خوادم الترحيل والاتصالات المباشرة", + "block_direct_p2p": "كتلة P2P المباشرة (مرحل القوة)", + "allowed_relays": "خوادم الترحيل المسموح بها (واحد لكل سطر)", + "ip_allowlist": "القائمة المسموح بها لعناوين IP (CIDR، واحد لكل سطر)", + "update_title": "تحديث السياسة", + "update_desc": "التحكم في التحديثات التلقائية وتحديث القنوات", + "auto_update": "تمكين التحديث التلقائي", + "update_channel": "تحديث القناة", + "audit_title": "تغييرات السياسة", + "audit_desc": "تاريخ تغيير السياسة الأخيرة", + "no_audit": "لم يتم تسجيل أي تغييرات في السياسة.", + "save_success": "تم حفظ السياسة بنجاح", + "save_failed": "فشل في حفظ السياسة", + "load_failed": "فشل تحميل السياسات", + "block_direct_p2p_hint": "ينطبق على الأجهزة في هذه المؤسسة. الإعداد الافتراضي العام موجود في الإعدادات ← استراتيجية الاتصال." + }, + "attestation": { + "title": "شهادة الجهاز", + "subtitle": "مراقبة التحقق من هوية الجهاز وبصمات أصابع الأجهزة", + "verified": "Verified", + "pending": "Pending", + "failed": "فشل", + "device_list": "سجلات شهادة الجهاز", + "device_list_desc": "بصمات أصابع الأجهزة وحالة التحقق من الهوية", + "col_device": "معرف الجهاز", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "لم يتم العثور على سجلات الشهادة.", + "verify_success": "تم وضع علامة على الجهاز بأنه تم التحقق منه", + "verify_failed": "فشل التحقق من الجهاز", + "revoke_success": "تم إبطال شهادة الجهاز", + "revoke_failed": "فشل في إلغاء التصديق" + }, + "fleet": { + "title": "إدارة الأسطول", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "منشئ سير العمل", + "tab_compliance": "Compliance", + "res_title": "رسم خرائط الموارد", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "محرك الشبكة", + "res_type_dns": "خادم DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "إضافة الموارد", + "res_name": "اسم المورد", + "res_type": "Type", + "res_address": "العنوان / المسار", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "منظمة", + "res_scope_group": "مجموعة", + "res_scope_device": "جهاز", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "لم يتم العثور على الموارد. انقر فوق \"إضافة مورد\" لإنشاء واحد.", + "res_confirm_delete": "هل أنت متأكد أنك تريد حذف هذا المورد؟", + "task_title": "جدولة المهام", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "فشل", + "task_search": "Search tasks…", + "task_create": "إنشاء مهمة", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "تحديث", + "task_type_restart": "إعادة تشغيل", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "معرفات الأجهزة أو أسماء المجموعات، مفصولة بفواصل", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "قيمة الجدول الزمني", + "task_script": "البرنامج النصي / الأمر", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "لم يتم العثور على مهام. انقر فوق \"إنشاء مهمة\" للبدء.", + "task_confirm_delete": "هل أنت متأكد أنك تريد حذف هذه المهمة؟", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "منشئ سير العمل المرئي", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "يحفظ", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "حدد عقدة لتحرير خصائصها.", + "builder_node_trigger_manual": "الزناد اليدوي", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "مشغل الحدث", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "أعد تشغيل Svc", + "builder_node_action_file_deploy": "نشر الملف", + "builder_node_action_message": "أرسل رسالة", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "إرسال تنبيه", + "builder_node_result_chain": "سير عمل السلسلة", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "اسم سير العمل:", + "comp_title": "امتثال البرمجيات", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "جهاز", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "هل تريد تشغيل المعالجة التلقائية على هذا الجهاز؟", + "comp_no_data": "لا توجد بيانات الامتثال المتاحة. قم بإجراء فحص للبدء.", + "save": "يحفظ", + "cancel": "يلغي", + "close": "يغلق", + "edit": "يحرر", + "delete": "يمسح", + "actions": "Actions", + "all_orgs": "جميع المنظمات", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "محرك الشبكة", + "type_dns": "خادم DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "إضافة الموارد", + "edit_resource": "تحرير المورد", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "العنوان / المسار", + "scope_org": "منظمة", + "scope_group": "مجموعة", + "scope_device": "جهاز", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا العنصر؟", + "all_statuses": "جميع الحالات", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "فشل", + "search_tasks": "Search tasks�", + "create_task": "إنشاء مهمة", + "edit_task": "تحرير المهمة", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "نشر الملف", + "task_type_registry": "Registry", + "target_devices": "الأجهزة المستهدفة", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "البرنامج النصي / الأمر", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "تحميل", + "no_output": "لا يوجد مخرجات متاحة", + "error_loading": "حدث خطأ أثناء تحميل البيانات", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "الزناد اليدوي", + "node_schedule": "Schedule", + "node_event": "مشغل الحدث", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "أعد تشغيل Svc", + "node_file_deploy": "نشر الملف", + "node_send_message": "أرسل رسالة", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "إرسال تنبيه", + "node_chain": "سير عمل السلسلة", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "جميع المنظمات", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "جهاز", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "هل تريد تشغيل المعالجة التلقائية على هذا الجهاز؟" + }, + "scaling": { + "title": "إدارة القياس والتتابع", + "tab_overview": "ملخص", + "tab_relays": "Relay Nodes", + "tab_rules": "قواعد التعيين", + "tab_capacity": "تخطيط القدرات", + "arch_title": "هندسة الشبكات", + "arch_loading": "جارٍ تحميل المخطط المعماري...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "إجمالي الأجهزة", + "stat_active_sessions": "الجلسات النشطة", + "stat_bandwidth": "إجمالي عرض النطاق الترددي", + "relay_health": "تتابع الصحة", + "no_relays": "لم يتم تكوين أي عقد ترحيل. أضف عقدة الترحيل الأولى لتوزيع الحمل.", + "relay_search": "مرحلات البحث...", + "relay_add": "إضافة عقدة التتابع", + "relay_edit": "تحرير عقدة الترحيل", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "الأجهزة", + "col_sessions": "الجلسات", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "تتابع الهدف", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "ممكّن", + "status_disabled": "عاجز", + "confirm_delete_relay": "هل أنت متأكد أنك تريد حذف عقدة الترحيل هذه؟", + "confirm_delete_rule": "هل أنت متأكد أنك تريد حذف قاعدة التعيين هذه؟", + "rules_hint": "تحدد قواعد التعيين خادم الترحيل الذي يتعامل مع مجموعات أجهزة معينة. يتم تقييم القواعد حسب الأولوية (الأدنى أولاً).", + "rule_add": "Add Rule", + "rule_edit": "تحرير القاعدة", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "مجموعة الأجهزة", + "match_tag": "علامة الجهاز", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "الخادم الرئيسي", + "fallback_nearest": "أقرب تتابع", + "relay_max_sessions": "جلسات ماكس", + "relay_max_bandwidth": "أقصى عرض النطاق الترددي (ميجابت في الثانية)", + "cap_tiers": "طبقات القدرة", + "cap_loading": "جارٍ تحميل بيانات السعة...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "لا توجد توصيات متاحة.", + "cap_planning": "تخطيط البنية التحتية", + "cap_config": "إعدادات", + "cap_max_devices": "أجهزة ماكس", + "cap_max_sessions": "جلسات ماكس", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "سعة الجهاز", + "cap_tier_sessions": "سعة الجلسة", + "cap_tier_bandwidth": "سعة النطاق الترددي", + "cap_single_sqlite": "خادم واحد (SQLite)", + "cap_single_pg": "خادم واحد (PostgreSQL)", + "cap_master_3": "ماستر + 3 مرحلات", + "cap_master_10": "ماجستير + 10 مرحلات", + "rec_no_relays": "لم يتم تكوين أي عقد ترحيل. فكر في إضافة عقد ترحيل لتحسين الأداء والتكرار.", + "rec_devices_high": "استخدام الجهاز مرتفع. فكر في إضافة المزيد من عقد الترحيل لتوزيع الحمل.", + "rec_sessions_high": "سعة الجلسة تقترب من الحد الأقصى. فكر في ترقية البنية التحتية للترحيل.", + "rec_cpu_high": "تُبلغ بعض عقد الترحيل عن استخدام عالٍ لوحدة المعالجة المركزية (CPU). فكر في موازنة التحميل أو ترقيات السعة.", + "rec_all_good": "جميع الأنظمة تعمل ضمن المعلمات العادية. لا يوجد إجراء مطلوب.", + "save": "يحفظ", + "cancel": "يلغي", + "edit": "يحرر", + "delete": "يمسح", + "close": "يغلق", + "no_rules": "لا توجد قواعد التعيين.", + "relays_info_banner": "هذه القائمة إعلامية. يتم تكوين خوادم الترحيل المستخدمة فعليًا من قبل العملاء عبر متغير البيئة RELAY_SERVERS على خادم BetterDesk.", + "relay_name_address_required": "الاسم والعنوان مطلوبان.", + "relay_save_failed": "فشل حفظ عقدة الترحيل.", + "relay_delete_failed": "فشل حذف عقدة الترحيل.", + "relay_saved": "تم حفظ عقدة التتابع.", + "relay_deleted": "تم حذف عقدة الترحيل.", + "rule_name_value_required": "مطلوب اسم القاعدة وقيمة المطابقة.", + "rule_save_failed": "فشل حفظ القاعدة.", + "rule_delete_failed": "فشل حذف القاعدة.", + "rule_saved": "تم حفظ القاعدة.", + "rule_deleted": "تم حذف القاعدة." + }, + "cross_platform": { + "title": "التوافق عبر الأنظمة الأساسية", + "tab_matrix": "مصفوفة التوافق", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "مصفوفة دعم الميزات عبر جميع الأنظمة الأساسية المدعومة. الأخضر = الدعم الكامل، الأصفر = جزئي، الرمادي = غير متوفر، الأزرق = المخطط له.", + "col_feature": "Feature", + "legend_full": "الدعم الكامل", + "legend_partial": "دعم جزئي", + "legend_none": "غير متوفر", + "legend_planned": "Planned", + "platform_breakdown": "انهيار المنصة", + "arch_breakdown": "انهيار الهندسة المعمارية", + "version_breakdown": "انهيار الإصدار", + "summary": "Summary", + "total_devices": "إجمالي الأجهزة", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "إصدارات العميل", + "no_devices": "لم يتم تسجيل أي أجهزة حتى الآن.", + "protocols_hint": "يضمن التفاوض بشأن قدرة البروتوكول أن يحصل كل عميل على الميزات التي يدعمها فقط. يقوم الخادم بتكييف السلوك بناءً على الإمكانيات المبلغ عنها.", + "capability_negotiation": "التفاوض على القدرات", + "codec_support": "دعم برنامج الترميز (الأجهزة المتصلة بالإنترنت)", + "feature_support": "دعم الميزات (الأجهزة المتصلة بالإنترنت)", + "no_codec_data": "لا توجد بيانات ترميز متاحة من الأجهزة المتصلة بالإنترنت.", + "no_feature_data": "لا تتوفر بيانات الميزات من الأجهزة المتصلة بالإنترنت.", + "protobuf_schema": "مخطط ClientCapabilities Protobuf", + "diagram_client": "Client", + "diagram_server": "خادم BetterDesk", + "diagram_peer": "النظير البعيد", + "limitations_hint": "تحتوي كل منصة على قيود محددة تؤثر على الميزات المتوفرة. قم بمراجعة هذه القيود عند التخطيط لعمليات النشر.", + "feat_desktop_client": "عميل سطح المكتب", + "feat_background_agent": "وكيل الخلفية", + "feat_remote_target": "الهدف البعيد", + "feat_screen_capture": "التقاط الشاشة", + "feat_input_injection": "حقن الإدخال", + "feat_file_transfer": "نقل الملفات", + "feat_clipboard_sync": "مزامنة الحافظة", + "feat_audio_streaming": "تدفق الصوت", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "يلزم رفع UAC لتثبيت الخدمة وإدخال الإدخال على أجهزة الكمبيوتر المكتبية الآمنة.", + "limit_win_service": "يعمل كخدمة NSSM؛ يتطلب امتيازات المسؤول للتثبيت.", + "limit_win_firewall": "يجب أن تسمح قواعد جدار الحماية Windows بالمنافذ 21115-21119 لاتصالات الترحيل.", + "limit_linux_wayland": "يقوم مؤلفو Wayland بتقييد التقاط الشاشة البرمجي؛ مطلوب بوابة PipeWire API.", + "limit_linux_pipewire": "التقاط الصوت يتطلب PipeWire؛ احتياطي PulseAudio متاح ولكنه محدود.", + "limit_linux_arm": "إصدارات ARM64 متاحة؛ قد تستخدم بعض برامج الترميز فك تشفير البرامج (أبطأ).", + "limit_mac_screen": "مطلوب إذن تسجيل الشاشة في تفضيلات النظام > الخصوصية والأمان.", + "limit_mac_signing": "يجب أن يتم توقيع الوكيل باستخدام معرف Apple Developer للتوزيع.", + "limit_mac_notarize": "التوثيق مطلوب لـ macOS Gatekeeper (توزيع غير متجر التطبيقات).", + "limit_android_projection": "يتطلب MediaProjection API موافقة المستخدم لكل جلسة التقاط للشاشة.", + "limit_android_accessibility": "يتطلب حقن الإدخال AccessibilityService؛ مقيد في Android 14+.", + "limit_android_battery": "خدمة الخلفية محدودة بوضع Doze؛ قد يتطلب إعفاء تحسين البطارية.", + "limit_ios_capture": "تحظر شركة Apple التقاط الشاشة في الخلفية؛ وضع العارض فقط مدعوم.", + "limit_ios_input": "لا يسمح بإدخال الحقن؛ المشاهدة عن بعد والدردشة فقط.", + "limit_ios_appstore": "التوزيع عبر متجر التطبيقات فقط؛ TestFlight للاختبار التجريبي.", + "limit_web_https": "يتطلب WebCodecs API وWebRTC HTTPS؛ يعود HTTP إلى JMuxer (برامج الترميز المحدودة).", + "limit_web_codec": "يعتمد دعم برنامج الترميز على المتصفح؛ H.264 مدعوم على نطاق واسع، VP9/AV1 يختلف.", + "limit_web_performance": "الأداء محدود بواسطة وضع حماية المتصفح؛ لا يوجد تسريع مباشر للأجهزة.", + "limit_chrome_crostini": "دعم الوكيل الكامل فقط داخل حاوية Crostini Linux.", + "limit_chrome_pwa": "يوفر وضع PWA ميزات الويب فقط؛ لا توجد قدرات الوكيل الأصلي.", + "limit_chrome_input": "حقن الإدخال غير مدعوم خارج حاوية Crostini.", + "feat_session_recording": "تسجيل الجلسة", + "feat_multi_monitor": "متعدد الشاشات", + "feat_unattended_access": "الوصول دون مشغّل", + "limit_win_virtual_account": "تعمل الخدمات تحت حسابات افتراضية معزولة بدلًا من LocalSystem؛ قد تحتاج مسارات السجلات المخصصة إلى ضبط ACL.", + "limit_linux_unprivileged": "تعمل الخدمات كحساب مخصص غير مميز 'betterdesk' مع تصليب systemd (NoNewPrivileges، ProtectSystem=strict)." + }, + "security_audit": { + "title": "التدقيق الأمني", + "tab_overview": "ملخص", + "tab_events": "أحداث التدقيق", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "نقاط الأمان", + "failed_logins": "عمليات تسجيل الدخول الفاشلة (24 ساعة)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "المفاتيح القديمة (> 90 د)", + "security_checks": "الشيكات الأمنية", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket آمن", + "enabled": "ممكّن", + "disabled": "عاجز", + "all_events": "All Events", + "event_login_failed": "فشل تسجيل الدخول", + "event_login_success": "نجاح تسجيل الدخول", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "تم تغيير التكوين", + "event_key_created": "تم إنشاء المفتاح", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "لم يتم العثور على أحداث التدقيق.", + "hardening_hint": "أولويات تعزيز الأمان لنشر BetterDesk. يتم ترتيب العناصر حسب الخطورة.", + "no_hardening": "لا توجد عناصر تصلب المتاحة.", + "vuln_hint": "نتائج فحص ثغرة التبعية. قم بتشغيل تدقيق npm بانتظام للحفاظ على أمان التبعيات.", + "no_vulns": "لم يتم العثور على نقاط الضعف. تبعياتك آمنة." + }, + "languages": { + "title": "إدارة اللغة", + "total_languages": "إجمالي اللغات", + "fully_translated": "مترجمة بالكامل", + "needs_review": "يحتاج إلى مراجعة", + "reference_keys": "المفاتيح المرجعية", + "no_languages": "لم يتم العثور على ملفات اللغة.", + "badge_reference": "Reference", + "badge_review": "يحتاج إلى مراجعة", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "عرض مفقود", + "fix_missing": "Fix Missing", + "missing_keys_for": "مفاتيح مفقودة ل", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "و{n} المزيد...", + "all_keys_present": "جميع المفاتيح موجودة!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "يجب ترجمة المفاتيح المفقودة في {code} يدويًا.", + "no_fix_needed": "لا توجد مفاتيح مفقودة لإصلاحها." + }, + "resource_control": { + "title": "التحكم في الموارد", + "tab_overview": "ملخص", + "tab_usb": "USB Control", + "tab_optical": "محركات الأقراص الضوئية", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "حصص الموارد", + "compliance_by_category": "الامتثال حسب الفئة", + "device_compliance": "امتثال الجهاز", + "search_devices": "أجهزة البحث...", + "col_device": "جهاز", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "إجمالي الأجهزة", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "معدل الامتثال", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "تكوين", + "no_devices": "لم يتم العثور على أي أجهزة", + "usb_title": "التحكم في المنافذ USB", + "usb_hint": "التحكم في الوصول إلى جهاز تخزين USB للجهاز المحدد أو السياسة الافتراضية على مستوى المؤسسة.", + "usb_storage_policy": "سياسة التخزين USB", + "usb_whitelist": "الأجهزة المدرجة في القائمة البيضاء (جهاز واحد لكل سطر)", + "usb_whitelist_hint": "VID:PID (على سبيل المثال 0781:5583)", + "usb_audit_log": "تسجيل اتصالات جهاز USB", + "optical_title": "التحكم في محرك الأقراص الضوئية", + "optical_hint": "التحكم في الوصول إلى محرك الأقراص المضغوطة/أقراص DVD/Blu-ray للجهاز المحدد.", + "optical_policy": "سياسة محرك الأقراص الضوئية", + "optical_audit_log": "تسجيل الوصول إلى محرك الأقراص الضوئية", + "monitors_title": "إدارة المراقبة", + "monitors_hint": "قم بتكوين إعدادات الشاشة بما في ذلك الحد الأقصى للعدد وفرض الدقة والسطوع وجداول الطاقة.", + "monitors_max_count": "الحد الأقصى للشاشات (0 = غير محدود)", + "monitors_max_hint": "0 يعني لا يوجد حد", + "monitors_resolution": "ماكس القرار", + "monitors_brightness": "حد السطوع", + "monitors_power_schedule": "جدول الطاقة", + "monitors_power_hint": "على سبيل المثال إيقاف:22:00-06:00", + "disks_title": "التحكم في الوصول إلى القرص", + "disks_hint": "قم بتكوين سياسات الوصول إلى القرص بما في ذلك وضع القراءة فقط وفرض التشفير ورؤية القسم.", + "disks_readonly": "فرض وضع القراءة فقط", + "disks_encryption": "تتطلب التشفير (BitLocker/LUKS)", + "disks_smart": "تمكين S.M.A.R.T. يراقب", + "disks_hidden": "الأقسام المخفية", + "disks_hidden_hint": "أحرف محركات أقراص مفصولة بفواصل أو نقاط تحميل", + "quotas_title": "حصص الموارد", + "quotas_hint": "قم بتعيين وحدة المعالجة المركزية (CPU) وذاكرة الوصول العشوائي (RAM) وعرض النطاق الترددي وحصص القرص لكل مستخدم للجهاز المحدد.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "حد النطاق الترددي (ميجابت في الثانية)", + "quotas_bandwidth_hint": "0 = غير محدود", + "quotas_disk_quota": "حصة القرص (جيجابايت)", + "quotas_disk_hint": "0 = غير محدود", + "quotas_process_whitelist": "القائمة البيضاء للعملية (واحدة لكل سطر)", + "quotas_process_hint": "على سبيل المثال chrome.exe، code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "القائمة البيضاء فقط", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "تحديثات البرامج", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "النسخة المثبتة", + "latest_version": "Latest version", + "status": "Status", + "check_now": "التحقق من وجود تحديثات", + "checking": "Checking…", + "up_to_date": "حتى الآن", + "update_available": "التحديث متاح", + "changelog": "Release Notes", + "no_changelog": "لا توجد ملاحظات الإصدار المتاحة", + "files_changed": "تغيرت الملفات", + "files": "ملفات", + "changes_unavailable": "تعذر تحميل قائمة تغيير الملفات. لا يزال بإمكانك تثبيت التحديث.", + "create_backup": "إنشاء نسخة احتياطية قبل التحديث", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "جارٍ تثبيت التحديث...", + "creating_backup": "جارٍ إنشاء نسخة احتياطية…", + "downloading": "جارٍ تنزيل الملفات…", + "install_success": "تم تثبيت التحديث بنجاح. جاري إعادة تشغيل وحدة التحكم...", + "install_failed": "فشل تثبيت التحديث", + "restarting": "في انتظار إعادة تشغيل وحدة التحكم...", + "restart_complete": "تمت إعادة تشغيل وحدة التحكم بنجاح", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "لم يتم تحديد إصدار التحديث. تحقق من وجود تحديثات أولاً.", + "backups_title": "تحديث النسخ الاحتياطية", + "backups_desc": "يتم إنشاء النسخ الاحتياطية قبل التحديث تلقائيًا قبل كل تحديث", + "no_backups": "لم يتم العثور على نسخ احتياطية للتحديث", + "restore": "Restore", + "restore_confirm": "هل أنت متأكد أنك تريد الاستعادة من هذه النسخة الاحتياطية؟ سيتم الكتابة فوق الملفات التي تم تغييرها.", + "restore_success": "تمت استعادة النسخة الاحتياطية بنجاح. جاري إعادة تشغيل وحدة التحكم...", + "baseline_set": "مجموعة خط الأساس", + "commits_behind": "يرتكب وراء", + "total_files": "إجمالي الملفات", + "applied": "Applied", + "failed": "فشل", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "اذهب الخادم", + "component_agent": "Agent", + "component_scripts": "البرامج النصية وDocker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "التحقق من الذهاب…", + "go_not_found": "اذهب غير مثبت", + "go_check_failed": "تعذر التحقق من توفر Go", + "server_building": "تجميع Go server... قد يستغرق هذا بضع دقائق.", + "server_built": "الخادم الثنائي المترجمة", + "server_build_failed": "فشل تجميع الخادم", + "server_stale_title": "الخادم الثنائي قديم", + "server_stale_desc": "تم تحديث مصدر Go server ولكن لم تتم إعادة بناء الثنائي قيد التشغيل. أعد بنائه الآن لتطبيق تحديثات الأمان والمكتبة.", + "rebuild_server": "إعادة بناء الخادم الثنائي", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "تمت إعادة بناء الخادم الثنائي وإعادة تشغيله", + "rebuild_server_failed": "فشلت عملية إعادة البناء الثنائية للخادم", + "server_deployed": "تم نشر الخادم الثنائي", + "server_deploy_failed": "فشل نشر الخادم", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "جارٍ تنزيل مصدر الخادم…", + "delete": "يمسح", + "delete_confirm": "هل تريد حذف النسخة الاحتياطية {name} نهائيًا؟ لا يمكن التراجع عن هذا.", + "delete_success": "تم حذف النسخة الاحتياطية", + "delete_failed": "فشل في حذف النسخة الاحتياطية", + "retention_label": "احتفظ بأحدث النسخ الاحتياطية لـ N", + "retention_hint": "يتم حذف النسخ الاحتياطية الأقدم تلقائيًا بعد كل تحديث. استخدم 0 للاحتفاظ بجميع النسخ الاحتياطية.", + "retention_saved": "تم حفظ إعداد الاحتفاظ", + "retention_invalid": "يجب أن يكون الاحتفاظ عددًا صحيحًا بين 0 و1000", + "retention_required_for_prune": "قم بتعيين قيمة الاحتفاظ أكبر من 0 أولاً", + "prune_now": "Apply now", + "prune_confirm": "هل تحتفظ فقط بأحدث النسخ الاحتياطية لـ {n} وتحذف الباقي؟", + "prune_done": "النسخ الاحتياطية {n} المشذبة", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "طريقة التحديث", + "strategy_download": "قم بتنزيل البرنامج الثنائي المدمج مسبقًا", + "strategy_compile": "تجميع من المصدر", + "both_available": "تحميل وتجميع", + "download_available": "التنزيل متاح", + "no_method": "لا توجد طريقة التحديث", + "no_release": "No release", + "available": "متاح", + "server_downloading": "جارٍ تنزيل الملف الثنائي للخادم...", + "server_downloaded": "تم تنزيل الخادم الثنائي", + "server_download_failed": "فشل التنزيل الثنائي للخادم", + "server_download_note": "سيتم تنزيل ملف ثنائي تم إنشاؤه مسبقًا من إصدارات GitHub. يستغرق هذا عادة أقل من دقيقة.", + "install_go_hint": "قم بتثبيت Go من https://go.dev/dl/ لتمكين التجميع أو نشر إصدار باستخدام الثنائيات المعدة مسبقًا", + "strategy_install_go": "التثبيت التلقائي Go والترجمة", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "إعادة البناء التلقائي جاهزة", + "toolchain_ready": "تم تثبيت سلسلة الأدوات", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "جارٍ تنزيل سلسلة أدوات Go...", + "toolchain_failed": "فشل تثبيت سلسلة أدوات Go", + "modal_title": "تثبيت التحديث", + "modal_done_title": "اكتمل التحديث", + "modal_close": "يغلق", + "modal_reload_now": "إعادة تحميل وحدة التحكم", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "ملفات وحدة التحكم", + "phase_server": "مرحلة الخادم", + "phase_restart": "إعادة تشغيل", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "تم تخطي النسخة الاحتياطية (حسب اختيار المستخدم)", + "server_skipped": "تم تخطي Go server", + "server_not_selected": "Go server not selected", + "server_processing": "جارٍ معالجة تحديث Go server…", + "no_restart_needed": "لا يلزم إعادة التشغيل", + "complete": "تم تطبيق التحديث", + "complete_summary": "تم تطبيق التحديث بنجاح.", + "complete_with_errors": "انتهى التحديث، لكن فشلت بعض الخطوات. انظر التفاصيل أدناه.", + "modal_done_with_errors_title": "انتهى التحديث مع وجود أخطاء", + "console_will_restart": "ستتم إعادة تشغيل عملية وحدة التحكم الآن...", + "restart_complete_msg": "انتهت وحدة التحكم من إعادة التشغيل. انقر فوق إعادة تحميل لتحميل الإصدار الجديد. سيتم إعادة تحميل الصفحة تلقائيًا خلال 8 ثوانٍ.", + "refresh_recommended": "تم تغيير الأصول الثابتة — أعد تحميل الصفحة لرؤية واجهة المستخدم الجديدة.", + "confirm_title": "تطبيق التحديث", + "confirm_with_backup": "سيتم إنشاء نسخة احتياطية للتحديث المسبق تلقائيًا.", + "confirm_no_backup": "لن يتم إنشاء نسخة احتياطية (تابع على مسؤوليتك الخاصة)." + }, + "permissions": { + "title": "الأذونات", + "subtitle": "إدارة الأذونات المستندة إلى الأدوار والتجاوزات المخصصة", + "info_title": "كيفية عمل الأذونات", + "info_desc": "كل دور له أذونات افتراضية. يمكنك إضافة أو إزالة الأذونات الفردية لكل دور عن طريق تبديلها أدناه. يتم تمييز التجاوزات المخصصة ويمكن إعادتها إلى الإعدادات الافتراضية في أي وقت.", + "select_role": "حدد الدور", + "select_role_placeholder": "اختيار الدور...", + "reset_overrides": "إعادة تعيين كافة التجاوزات", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "على مستوى الخادم", + "custom": "Custom", + "default": "Default", + "revert": "العودة إلى الوضع الافتراضي", + "saved": "تم تحديث الإذن", + "reverted": "عادت إلى الوضع الافتراضي", + "all_reverted": "تم إرجاع جميع التجاوزات", + "confirm_reset": "هل تريد إعادة تعيين جميع التجاوزات المخصصة لهذا الدور إلى الإعدادات الافتراضية؟", + "empty_title": "حدد دورًا", + "empty_desc": "اختر دورًا من القائمة المنسدلة أعلاه لعرض أذوناته وإدارتها.", + "locked_title": "Super Admin", + "locked_desc": "يتمتع المشرف المتميز بجميع الأذونات بشكل افتراضي ولا يمكن تخصيصها.", + "cat_device": "الأجهزة", + "cat_user": "Users", + "cat_server": "الخادم", + "cat_org": "المنظمات", + "cat_audit": "التدقيق والمراقبة", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "عرض الأجهزة", + "perm_device_connect": "الاتصال بالأجهزة", + "perm_device_edit": "تحرير الأجهزة", + "perm_device_delete": "حذف الأجهزة", + "perm_device_ban": "حظر / إلغاء الحظر على الأجهزة", + "perm_device_change_id": "تغيير معرف الجهاز", + "perm_user_view": "عرض المستخدمين", + "perm_user_create": "إنشاء المستخدمين", + "perm_user_edit": "تحرير المستخدمين", + "perm_user_delete": "حذف المستخدمين", + "perm_server_config": "تكوين الخادم", + "perm_server_keys": "إدارة مفاتيح API", + "perm_org_create": "إنشاء المنظمات", + "perm_org_edit": "تحرير المنظمات", + "perm_org_delete": "حذف المنظمات", + "perm_org_manage_users": "إدارة مستخدمي المؤسسة", + "perm_org_manage_devices": "إدارة أجهزة المنظمة", + "perm_audit_view": "عرض سجلات التدقيق", + "perm_metrics_view": "عرض المقاييس", + "perm_blocklist_edit": "تحرير القائمة المحظورة", + "perm_cdap_view": "عرض أجهزة CDAP", + "perm_cdap_command": "إرسال أوامر CDAP", + "perm_cdap_terminal": "الوصول إلى محطة CDAP", + "perm_cdap_files": "الوصول إلى الملفات CDAP", + "perm_enrollment_manage": "إدارة التسجيل", + "perm_enrollment_approve": "الموافقة على الالتحاق", + "perm_chat_access": "Chat access", + "perm_branding_edit": "تحرير العلامات التجارية", + "perm_server_attestation": "اعتماد أداء الخادم" + }, + "notifications": { + "title": "إشعارات", + "empty": "لا توجد إشعارات جديدة", + "mark_all_read": "وضع علامة على كل قراءة", + "see_all": "شاهد جميع طلبات المساعدة", + "help_request": "طلب مساعدة", + "just_now": "just now" + }, + "accessibility": { + "title": "إمكانية الوصول", + "subtitle": "اضبط وحدة التحكم للرؤية والحركة والقراءة.", + "close": "إغلاق قائمة إمكانية الوصول", + "profiles": "ملفات تعريف سريعة", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "نص أكبر وتباين قوي وتركيز.", + "profile_dyslexia": "راحة القراءة", + "profile_dyslexia_hint": "خط قابل للقراءة وتباعد أوسع.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "تقليل التحولات وإيقاف الرسوم المتحركة مؤقتًا.", + "profile_color_assist": "دعم اللون", + "profile_color_assist_hint": "مرشح الألوان والعلامات والروابط المميزة.", + "reading": "القراءة", + "font_size": "حجم النص", + "line_height": "ارتفاع السطر", + "letter_spacing": "تباعد الحروف", + "word_spacing": "تباعد الكلمات", + "readable_font": "خط قابل للقراءة", + "readable_font_hint": "يستخدم أشكال حروف واسعة ومألوفة.", + "dyslexia_spacing": "تباعد عسر القراءة", + "dyslexia_spacing_hint": "يضيف مسافة إضافية للنص الطويل.", + "visual": "مرئي", + "contrast": "التباين", + "contrast_normal": "Normal", + "contrast_high_dark": "الظلام عالية التباين", + "contrast_high_light": "ضوء عالي التباين", + "contrast_yellow_black": "أصفر على أسود", + "color_filter": "مرشح رؤية الألوان", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "تشبع اللون", + "underline_links": "تسطير الروابط", + "underline_links_hint": "يجعل الروابط مرئية دون الاعتماد على اللون.", + "highlight_links": "تسليط الضوء على الإجراءات", + "highlight_links_hint": "الخطوط العريضة للروابط والأزرار.", + "highlight_headings": "تسليط الضوء على العناوين", + "highlight_headings_hint": "وضع علامات على عناوين الأقسام باستخدام شريط الألوان.", + "hide_media": "Dim media", + "hide_media_hint": "يعتم الصور ومقاطع الفيديو واللوحات الفنية.", + "interaction": "التفاعل", + "strong_focus": "تركيز قوي", + "strong_focus_hint": "يظهر حلقة تركيز كبيرة للوحة المفاتيح.", + "large_cursor": "مؤشر كبير", + "large_cursor_hint": "يستخدم مؤشرًا أكبر عالي التباين.", + "reduce_motion": "تقليل الحركة", + "reduce_motion_hint": "تقصير التحولات والتمرير السلس.", + "pause_animations": "وقفة الرسوم المتحركة", + "pause_animations_hint": "توقف تكرار الحركة البصرية.", + "reading_guide": "دليل القراءة", + "reading_guide_hint": "يتبع المؤشر بخط مشرق.", + "reading_mask": "قناع القراءة", + "reading_mask_hint": "يعتم المحتوى أعلى وأسفل المؤشر.", + "preview": "معاينة", + "preview_title": "معاينة مساحة عمل المشغل", + "preview_text": "تحقق مما إذا كانت النصوص والروابط وعناصر التحكم وتسميات الحالة مريحة للقراءة قبل إغلاق هذه القائمة.", + "preview_link": "رابط تفاصيل الجهاز", + "preview_status": "Online", + "preview_button": "العمل الأساسي", + "preview_secondary": "Secondary", + "reset": "إعادة تعيين", + "done": "تم" + }, + "server_mgmt": { + "title": "إدارة الخادم", + "subtitle": "طائرة تحكم تشبه قمرة القيادة لمضيف وحدة التحكم BetterDesk (BETA).", + "beta_tooltip": "ميزة بيتا - قيد التطوير النشط.", + "notice_title": "ميزة بيتا", + "notice_body": "تعمل هذه الأدوات على المضيف حيث توجد عملية وحدة التحكم BetterDesk. يتم تدقيق جميع العمليات. سيتم توسيع نطاق الميزة في الإصدارات المستقبلية.", + "tab_overview": "نظرة عامة", + "tab_terminal": "الطرفية", + "tab_files": "الملفات", + "tab_services": "الخدمات", + "cpu": "CPU", + "memory": "الذاكرة", + "load": "متوسط ​​التحميل", + "disks": "الأقراص", + "history": "التاريخ (آخر 60 عينة)", + "host_info": "Host info", + "cores": "cores", + "uptime": "وقت التشغيل", + "no_disks": "لا توجد بيانات القرص المتاحة", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "بي تي واي متاح", + "term_connect": "اتصال", + "term_disconnect": "قطع الاتصال", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "خطأ في الاتصال", + "term_warning": "تعمل الأوامر كمستخدم يملك عملية وحدة التحكم. أضف قاعدة sudoers لتمكين الارتفاع.", + "term_hint": "نصيحة: اكتب `sudo -i` للتصعيد (يتطلب تكوين sudoers).", + "term_lib_failed": "فشل تحميل المكتبة الطرفية", + "files_up": "أعلى مستوى واحد", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "دليل فارغ", + "files_error": "فشل في سرد ​​الدليل", + "read_failed": "فشل في قراءة الملف", + "save_failed": "فشل حفظ الملف", + "rename_failed": "فشلت إعادة التسمية", + "delete_failed": "فشل الحذف", + "delete_confirm": "هل تريد حذف هذا الإدخال؟", + "mkdir_prompt": "اسم المجلد الجديد:", + "mkdir_failed": "فشل في إنشاء المجلد", + "file_saved": "تم حفظ الملف", + "binary_warn": "ملف ثنائي — معاينة فقط", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "خدمات البحث...", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "لم يتم العثور على الخدمات", + "svc_load_failed": "فشل في تحميل الخدمات", + "svc_action_failed": "فشل الإجراء", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "إعادة تشغيل", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "تنزيل وكيل BetterDesk", + "choose_platform": "اختر النظام الأساسي الخاص بك", + "choose_platform_hint": "حدد المثبت الذي يتوافق مع نظام التشغيل الخاص بك.", + "download": "تحميل", + "building": "مبنى…", + "failed": "فشل البناء", + "need_help": "بحاجة الى مساعدة؟", + "powered_by": "مدعوم من" + }, + "server_attestation": { + "title": "اعتماد أداء الخادم", + "subtitle": "اختبار أداء معياري يحدد طاقة الاتصالات عن بُعد المتزامنة عند عتبة 80% من وحدة المعالجة المركزية والذاكرة والقرص.", + "warning_title": "اختبار الحمل", + "warning_body": "يحاكي الاختبار المعياري اتصالات WebSocket المتوازية بخوادم الإشارة والترحيل. شغّله خلال ساعات الذروة المنخفضة — هذا الاختبار يُحمّل بيئة الإنتاج.", + "run_benchmark": "تشغيل الاختبار المعياري", + "abort": "إلغاء", + "download_report": "تنزيل تقرير JSON", + "last_test": "آخر اختبار", + "no_test_yet": "لم يُجرَ أي اختبار معياري حتى الآن", + "max_connections": "الحد الأقصى للاتصالات", + "threshold_80": "عتبة 80% — المقاييس النهائية", + "disk": "القرص", + "ramp_chart": "مخطط تصاعد الحمل", + "connections": "الاتصالات", + "connections_short": "اتصال", + "tier_guide_title": "ماذا يعني كل مستوى؟", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 اتصالًا متزامنًا — VPS صغير (1–2 vCPU، 2–4 GB RAM).", + "tier_iron_desc": "26–75 اتصالًا — خادم متوسط المستوى (2–4 vCPU، 4–8 GB RAM).", + "tier_platinum_desc": "76–200 اتصال — خادم عالي الأداء (4–8 vCPU، 8–16 GB RAM).", + "tier_titanium_desc": "201–400 اتصال — بنية تحتية للمؤسسات (8+ vCPU، 16–32 GB RAM).", + "tier_obsidian_desc": "401+ اتصال — فئة توربو: أجهزة مخصصة، 16+ vCPU، 32+ GB RAM، NVMe.", + "docker_note": "ملاحظة: في Docker، قد تعكس مقاييس وحدة المعالجة المركزية/الذاكرة حدود الحاوية لا المضيف الفعلي.", + "badge_tooltip": "BetterDesk Server Attestation — اعتماد أداء الخادم", + "confirm_run": "سيُجري هذا الاختبار المعياري اختبار حمل للخادم باتصالات محاكاة. هل تريد المتابعة؟", + "starting": "جارٍ البدء…", + "complete": "اكتمل الاختبار المعياري", + "signal_peers": "نظراء الإشارة", + "relay_sessions": "جلسات الترحيل", + "page_error": "فشل تحميل صفحة اعتماد الخادم", + "mode_estimated": "مقدَّر (WebSocket غير متاح)", + "incomplete": "انتهى الاختبار المعياري بدون مستوى صالح" + }, + "commercialization": { + "title": "التسويق", + "subtitle": "حزم الدعم والجلسات القابلة للفوترة وتقارير العمل", + "alpha_badge": "ALPHA", + "alpha_tooltip": "ميزة مبكرة — وحدة الفوترة والحزم قيد التطوير النشط.", + "tabs": { + "overview": "نظرة عامة", + "packages": "الحزم والعقود", + "sessions": "الجلسات", + "reports": "التقارير", + "settings": "إعدادات متقدمة" }, - "branding": { - "identity_title": "هوية العلامة التجارية", - "identity_desc": "قم بتخصيص اسم التطبيق والوصف الموضح عبر وحدة التحكم", - "app_name": "اسم التطبيق", - "app_description": "وصف التطبيق", - "logo_title": "Logo", - "logo_desc": "اختر كيفية ظهور شعارك في الشريط الجانبي وصفحة تسجيل الدخول", - "logo_type_icon": "أيقونة المادة", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "أدخل اسم أيقونات المواد (مثل نظام أسماء النطاقات والسحابة والأمان). راجع الخطوط.google.com/icons", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "الصق ترميز SVG الخاص بك هنا. يدعم عناصر الكاملة مع المسارات والأنماط.", - "logo_image_upload": "تحميل الصورة", - "logo_image_choose": "اختر ملف الصورة", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "نوع الملف غير صالح. استخدم PNG أو JPG أو GIF أو WebP أو SVG.", - "preview": "Preview", - "colors_title": "نظام الألوان", - "colors_desc": "تخصيص لوحة الألوان. اتركه فارغًا لاستخدام الإعدادات الافتراضية.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "ألوان مميزة", - "colors_borders": "Borders", - "import_export_title": "استيراد / تصدير", - "import_export_desc": "احفظ السمة الخاصة بك كملف JSON أو قم باستيراد ملف من مثيل آخر", - "export_theme": "تصدير الموضوع", - "import_theme": "استيراد الموضوع", - "reset_defaults": "إعادة التعيين إلى الإعدادات الافتراضية", - "save_branding": "حفظ العلامة التجارية", - "saved": "تم حفظ العلامة التجارية بنجاح. جارٍ إعادة التحميل...", - "exported": "تم تصدير الموضوع", - "imported": "تم استيراد الموضوع بنجاح. جارٍ إعادة التحميل...", - "import_error": "فشل استيراد المظهر. تنسيق الملف غير صالح.", - "reset_confirm": "هل أنت متأكد أنك تريد إعادة تعيين العلامة التجارية إلى الإعدادات الافتراضية؟ لا يمكن التراجع عن هذا.", - "reset_success": "إعادة تعيين العلامة التجارية إلى الإعدادات الافتراضية. جارٍ إعادة التحميل...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "يتم عرض النص الأساسي كشعار علامتك التجارية", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "نص ثانوي أسفل الشعار (على سبيل المثال، اسم المنتج أو الشعار)", - "logo_upload_success": "تم تحميل الشعار بنجاح.", - "typography_title": "Typography", - "typography_desc": "اختر الخطوط للعناوين والنص الأساسي. يتم تنزيل الخطوط إلى الخادم للاستضافة الذاتية.", - "font_heading": "خط العنوان", - "font_heading_hint": "يُستخدم للعناوين (H1–H6) وشعار النص", - "font_body": "Body Font", - "font_body_hint": "يستخدم للنص الأساسي وعناصر واجهة المستخدم", - "font_search_placeholder": "البحث عن الخطوط...", - "font_system_default": "الافتراضي للنظام", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "الخطوط التي تم تنزيلها على الخادم", - "powered_by": "مدعوم من", - "background_title": "الخلفية والمظهر", - "background_desc": "عيّن خلفية وحدة التحكم أو تدرجًا لونيًا أو لونًا صلبًا. تطفو البطاقات فوقها.", - "bg_type_none": "لا شيء", - "bg_type_color": "لون صلب", - "bg_type_gradient": "تدرج لوني", - "bg_type_image": "صورة", - "bg_color": "لون الخلفية", - "bg_gradient": "تدرج CSS", - "bg_gradient_hint": "أي تدرج CSS صالح، مثال: linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "رفع صورة الخلفية", - "bg_image_choose": "اختر ملف الصورة", - "bg_image_hint": "PNG أو JPG أو WebP أو GIF. الحد الأقصى 8 MB. مخزَّنة على الخادم.", - "bg_image_url": "مسار / رابط الصورة", - "bg_size": "حجم الصورة", - "bg_size_cover": "تغطية (ملء الشاشة)", - "bg_size_contain": "احتواء (ملاءمة)", - "bg_size_auto": "تلقائي (الحجم الأصلي)", - "bg_blur": "تمويه الخلفية", - "bg_overlay": "طبقة تعتيم داكنة", - "bg_overlay_hint": "يُغمق الخلفية لتحسين قابلية قراءة النص.", - "bg_image_too_large": "الصورة كبيرة جدًا. الحجم الأقصى 8 MB.", - "bg_image_invalid_type": "نوع الملف غير صالح. استخدم PNG أو JPG أو WebP أو GIF.", - "bg_upload_success": "تم رفع صورة الخلفية بنجاح.", - "login_title": "صفحة تسجيل الدخول", - "login_desc": "خصّص عنوان شاشة تسجيل الدخول والعنوان الفرعي والخلفية.", - "login_heading": "عنوان تسجيل الدخول", - "login_heading_placeholder": "مرحبًا بعودتك", - "login_subheading": "العنوان الفرعي لتسجيل الدخول", - "login_subheading_placeholder": "سجّل الدخول إلى حسابك", - "login_bg_inherit": "مثل وحدة التحكم", - "agent_title": "صفحة تنزيل الوكيل", - "agent_desc": "خصّص بوابة تنزيل الوكيل العامة التي تظهر للمستخدمين النهائيين.", - "agent_show_powered": "عرض \"Powered by BetterDesk\"", - "agent_show_powered_hint": "عرض نسب BetterDesk في تذييل بوابة التنزيل.", - "footer_title": "التذييل وحقوق النشر", - "footer_desc": "أضف سطر تذييل مخصصًا يظهر في شاشة تسجيل الدخول والشريط الجانبي لوحدة التحكم.", - "footer_text": "نص التذييل", - "footer_text_hint": "مثل إشعار حقوق النشر أو اسم الشركة.", - "show_powered": "عرض نسب \"BetterDesk\"", - "show_powered_hint": "عرض اسم BetterDesk وإصداره في تذييل تسجيل الدخول والشريط الجانبي.", - "custom_css_title": "CSS مخصص", - "custom_css_desc": "متقدم: حقن CSS مخصص يُطبَّق على وحدة التحكم وصفحة تسجيل الدخول.", - "custom_css_hint": "استخدم بحذر. يتم تنقية القواعد غير الصالحة أو غير الآمنة. الحد الأقصى 20,000 حرف." + "clock": { + "title": "وقت الخادم (NTP)", + "check_now": "تحقق الآن", + "unsynced": "ساعة الخادم غير متزامنة — قد تُحظر الجلسات القابلة للفوترة" }, - "device_detail": { - "tab_overview": "ملخص", - "tab_tags": "العلامات والملاحظات", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "اتصال", - "section_manage": "إدارة", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "هذا الجهاز محظور", - "no_reason": "لم يتم تقديم أي سبب", - "tags": "Tags", - "no_tags": "لم يتم تعيين علامات لهذا الجهاز", - "tag_placeholder": "أدخل اسم العلامة...", - "add_tag": "Add", - "tag_exists": "هذه العلامة موجودة بالفعل", - "notes": "Notes", - "notes_placeholder": "إضافة ملاحظات حول هذا الجهاز...", - "danger_zone": "Danger Zone", - "action_connect_web": "الويب عن بعد", - "action_connect_web_desc": "الاتصال عبر سطح المكتب البعيد للمتصفح", - "action_native_remote": "جهاز التحكم عن بعد BetterDesk", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "عميل سطح المكتب", - "action_connect_desktop_desc": "افتح في تطبيق عميل سطح المكتب", - "action_change_id_desc": "تغيير معرف تسجيل الجهاز", - "action_ban_desc": "منع هذا الجهاز من الاتصال", - "action_unban_desc": "السماح لهذا الجهاز بالاتصال مرة أخرى", - "action_delete_desc": "قم بإزالة هذا الجهاز نهائيًا", - "tab_hardware": "Hardware", - "tab_metrics": "المقاييس", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "قدرات الترميز", - "section_live_metrics": "المقاييس الحية", - "section_current_usage": "الاستخدام الحالي", - "section_usage_history": "تاريخ الاستخدام", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "تردد وحدة المعالجة المركزية", - "total_memory": "إجمالي الذاكرة", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "تم التحديث", - "device_groups": "المجموعات", - "no_sysinfo": "لا تتوفر أية معلومات عن الأجهزة", - "no_sysinfo_hint": "ستظهر معلومات النظام بعد أن يرسل الجهاز تقرير معلومات النظام", - "no_metrics": "لا توجد بيانات مقاييس متاحة", - "no_metrics_hint": "ستظهر المقاييس بعد أن يرسل الجهاز تقارير نبضات القلب", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "ملفات", - "agent_lazy_hint": "انقر فوق علامة التبويب هذه لتحميل البيانات المباشرة من الوكيل", - "agent_offline": "الوكيل غير متصل", - "agent_timeout": "لم يستجب الوكيل في الوقت المناسب", - "agent_error": "فشل تحميل البيانات من الوكيل", - "service_name": "Name", - "service_display": "اسم العرض", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "جلسات قابلة للفوترة نشطة" }, - "inventory": { - "title": "Inventory", - "subtitle": "جرد الأجهزة والبرامج للأجهزة المدارة", - "device_id": "معرف الجهاز", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "إجمالي الذاكرة", - "memory_used": "Used Memory", - "memory_available": "الذاكرة المتاحة", - "memory_usage": "استخدام الذاكرة", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "واجهات الشبكة", - "software": "Software", - "software_count": "البرامج المثبتة", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "النوى المادية", - "logical_cores": "النوى المنطقية", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "متاح", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "عناوين IP", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "تشغيل جامع", - "collector_stopped": "توقف المجمع", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "تم جمعها في", - "no_data": "لا توجد بيانات المخزون المتاحة حتى الآن. انقر فوق \"اجمع الآن\" لجمع معلومات النظام.", - "no_devices": "لم يتم العثور على أجهزة تحتوي على بيانات المخزون", - "detail_title": "تفاصيل جرد الجهاز", - "telemetry": "Telemetry", - "view_detail": "عرض التفاصيل", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "حزمة جديدة", + "name": "الاسم", + "included_minutes": "الدقائق المضمنة", + "overage_rate": "سعر التجاوز / س", + "currency": "العملة", + "heading": "حزم الدعم", + "prompt_name": "اسم الحزمة", + "create_title": "حزمة جديدة للمنظمة", + "create_submit": "إنشاء حزمة", + "select_org": "المنظمة", + "select_org_placeholder": "اختر المنظمة…" }, - "tickets": { - "title": "Tickets", - "subtitle": "دعم التذاكر وتتبع المشكلات", - "create": "New Ticket", - "edit": "تحرير التذكرة", - "delete": "حذف التذكرة", - "detail": "تفاصيل التذكرة", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "تم تعيينه ل", - "created_by": "تم الإنشاء بواسطة", - "device": "جهاز", - "sla_due": "SLA Due", - "created_at": "مخلوق", - "updated_at": "تم التحديث", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "يفتح", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "أكتب تعليق...", - "internal_note": "ملاحظة داخلية (غير مرئية للمستخدمين النهائيين)", - "attachments": "Attachments", - "upload_attachment": "تحميل المرفق", - "download": "Download", - "connect_device": "الاتصال بالجهاز", - "no_tickets": "لم يتم العثور على تذاكر", - "no_comments": "لا توجد تعليقات حتى الآن", - "no_attachments": "لا مرفقات", - "title_required": "العنوان مطلوب", - "delete_confirm": "هل أنت متأكد أنك تريد حذف التذكرة #{id}؟", - "delete_success": "تم حذف التذكرة بنجاح", - "created_success": "تم إنشاء التذكرة بنجاح", - "updated_success": "تم تحديث التذكرة بنجاح", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "البحث عن التذاكر...", - "assign_to_me": "خصص لي", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "يفتح", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "مراقبة النشاط", - "subtitle": "استخدام التطبيق وتتبع الخمول", - "device": "جهاز", - "hostname": "Hostname", - "sessions": "الجلسات", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "أعلى التطبيقات", - "app_name": "Application", - "window_title": "عنوان النافذة", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "عدد الجلسات", - "total_active": "إجمالي النشاط", - "total_idle": "Total Idle", - "detail_count": "سجلات التفاصيل", - "no_data": "لا توجد بيانات النشاط المتاحة", - "no_sessions": "لا جلسات", - "filter_from": "من", - "filter_to": "ل", - "filter_apply": "تطبيق الفلتر", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "أجهزة البحث...", - "date_range": "Date Range", - "device_id": "معرف الجهاز", - "session_start": "بدء الجلسة", - "session_end": "نهاية الجلسة", - "user": "User", - "no_activity": "لم يتم تسجيل أي نشاط", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "لا توجد تطبيقات" - }, - "automation": { - "title": "الأتمتة والتنبيهات", - "subtitle": "قواعد التنبيه والأوامر عن بعد وتكوين SMTP", - "rules": "Alert Rules", - "rules_subtitle": "تحديد الشروط التي تؤدي إلى الإخطارات", - "alerts": "تاريخ التنبيه", - "alerts_subtitle": "عرض التنبيهات التي تم تشغيلها والاعتراف بها", - "commands": "الأوامر عن بعد", - "commands_subtitle": "إرسال الأوامر إلى الأجهزة البعيدة", - "smtp": "تكوين SMTP", - "smtp_subtitle": "إعدادات إشعارات البريد الإلكتروني", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "نوع الحالة", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "الجهاز المستهدف", - "scope_all": "جميع الأجهزة", - "cooldown": "فترة التهدئة (ثواني)", - "notify_emails": "رسائل البريد الإلكتروني الإخطار", - "enabled": "ممكّن", - "disabled": "عاجز", - "create_rule": "إنشاء القاعدة", - "edit_rule": "تحرير القاعدة", - "delete_rule": "حذف القاعدة", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "تم التشغيل عند", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "أعظم من", - "op_gte": "أكبر أو يساوي", - "op_lt": "Less than", - "op_lte": "أقل أو يساوي", - "op_eq": "يساوي", - "op_neq": "لا يساوي", - "type_cpu_usage": "استخدام وحدة المعالجة المركزية (%)", - "type_memory_usage": "استخدام الذاكرة (%)", - "type_disk_usage": "استخدام القرص (%)", - "type_offline_duration": "المدة (المدد) في وضع عدم الاتصال", - "type_idle_duration": "مدة (فترات) الخمول", - "type_custom": "Custom", - "command_type": "نوع الأمر", - "command_payload": "الأمر / البرنامج النصي", - "command_result": "Result", - "command_status": "Status", - "send_command": "إرسال الأمر", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "فشل", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "اسم المستخدم", - "smtp_pass": "كلمة المرور", - "smtp_from": "من العنوان", - "smtp_test": "اتصال الاختبار", - "smtp_save": "حفظ التكوين", - "smtp_test_success": "تم الاتصال بنجاح", - "smtp_test_failed": "فشل الاتصال", - "no_rules": "لم يتم تكوين قواعد التنبيه", - "no_alerts": "لم يتم تشغيل أي تنبيهات", - "no_commands": "لم يتم إرسال أي أوامر", - "id_payload_required": "مطلوب معرف الجهاز والحمولة", - "no_commands_sent": "لم يتم إرسال أي أوامر حتى الآن" - }, - "file_transfer": { - "title": "نقل الملفات", - "transfers": "Transfers", - "new_transfer": "نقل جديد", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "حجم الملف", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "جهاز", - "initiated_by": "بدأ بواسطة", - "created_at": "تم الإنشاء في", - "cancel": "يلغي", - "cancel_confirm": "هل أنت متأكد أنك تريد إلغاء هذا النقل؟", - "download_file": "تنزيل الملف", - "browse_files": "تصفح الملفات", - "select_file": "حدد ملف", - "select_device": "حدد الجهاز", - "no_transfers": "لا يوجد نقل الملفات", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "فشل", - "status_cancelled": "Cancelled", - "bytes_transferred": "البايتات المنقولة", - "chunks": "Chunks", - "transfer_started": "بدأ النقل", - "transfer_completed": "اكتمل النقل", - "transfer_failed": "فشل النقل", - "transfer_cancelled": "تم إلغاء النقل", - "max_file_size": "الحد الأقصى لحجم الملف: 4 جيجابايت", - "error_too_large": "الملف كبير جدًا", - "error_no_device": "لم يتم تحديد أي جهاز", - "error_no_file": "لم يتم تحديد أي ملف" - }, - "network": { - "title": "مراقبة الشبكة", - "targets": "أهداف الرصد", - "add_target": "Add Target", - "edit_target": "تحرير الهدف", - "delete_target": "حذف الهدف", - "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الهدف؟", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "المهلة (مللي ثانية)", - "interval": "الفاصل الزمني (مللي ثانية)", - "enabled": "ممكّن", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "التحقق من التاريخ", - "stats": "Statistics", - "total_targets": "إجمالي الأهداف", - "targets_up": "Targets Up", - "targets_down": "الأهداف أسفل", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "أدوات الشبكة", - "ping_tool": "Ping Test", - "tcp_tool": "فحص منفذ TCP", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "ابدأ المراقبة", - "monitor_stop": "توقف عن المراقبة", - "monitor_running": "الشاشة قيد التشغيل", - "monitor_stopped": "تم إيقاف جهاز المراقبة", - "no_targets": "لم يتم تكوين أهداف مراقبة", - "no_history": "لا يوجد سجل فحص متاح", - "error_code": "Error", - "status_code": "رمز الحالة HTTP", - "search_targets": "أهداف البحث...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "التحقق من التاريخ", - "name_host_required": "الاسم والمضيف مطلوبان", - "uptime": "Uptime", - "response_time": "وقت الاستجابة", - "avg_response": "متوسط ​​الاستجابة", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "وقت الاستجابة (مللي ثانية)", - "uptime_percent": "Uptime %", - "last_24h": "آخر 24 ساعة", - "last_7d": "Last 7 days", - "last_30d": "آخر 30 يومًا" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "سياسات منع فقدان البيانات", - "add_policy": "إضافة سياسة", - "edit_policy": "تحرير السياسة", - "delete_policy": "حذف السياسة", - "delete_confirm": "هل أنت متأكد أنك تريد حذف هذه السياسة؟", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "ممكّن", - "disabled": "عاجز", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "جهاز USB", - "rule_type_file": "تشغيل الملف", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "معرف البائع (VID)", - "pid": "معرف المنتج (PID)", - "serial": "رقم سري", - "device_class": "فئة الجهاز", - "drive_type": "Drive Type", - "file_extensions": "ملحقات الملفات", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "ملف", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "لم يتم تكوين سياسات DLP", - "no_events": "لم يتم تسجيل أي أحداث DLP", - "stats": "Statistics", - "total_events": "إجمالي الأحداث", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "أحداث الملف", - "device_id": "معرف الجهاز", - "policy_matched": "مطابقة السياسة", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "إجمالي السياسات", - "active_policies": "السياسات النشطة", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "السياسات", - "tab_events": "Events", - "search_policies": "سياسات البحث...", - "create_policy": "إنشاء سياسة", - "policy_type": "نوع السياسة", - "scope": "Scope", - "events_count": "Events", - "search_events": "أحداث البحث...", - "event_time": "Event Time", - "device": "جهاز", - "policy": "سياسة", - "detail": "Detail", - "scope_help": "معرفات الأجهزة مفصولة بفواصل، أو اتركها فارغة للجميع", - "scope_all": "جميع الأجهزة", - "active": "Active", - "type_file_type": "نوع الملف", - "type_clipboard": "الحافظة", - "type_screen_share": "مشاركة الشاشة", - "type_file_transfer": "نقل الملفات", - "policy_desc": "وصف السياسة", - "type_usb": "USB" + "sessions": { + "device": "الجهاز", + "operator": "المشغّل", + "duration": "المدة", + "phase": "المرحلة", + "amount": "المبلغ" }, "reports": { - "title": "Reports", - "generate": "إنشاء تقرير", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "ملخص الجهاز", - "type_activity": "ملخص النشاط", - "type_security": "تقرير الأمن", - "type_tickets": "تقرير التذاكر", - "type_network": "تقرير الشبكة", - "type_inventory": "تقرير الجرد", - "type_alerts": "تقرير التنبيه", - "saved": "التقارير المحفوظة", - "save_report": "حفظ التقرير", - "delete_report": "حذف التقرير", - "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا التقرير المحفوظ؟", - "no_saved": "لا توجد تقارير محفوظة", - "report_title": "Title", - "created_by": "تم الإنشاء بواسطة", - "created_at": "تم الإنشاء في", - "filters": "Filters", - "date_from": "من", - "date_to": "ل", - "device_filter": "معرف الجهاز", - "generated_at": "تم إنشاؤها في", - "section": "قسم البيانات", - "total_devices": "إجمالي الأجهزة", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "توزيع المنصة", - "top_applications": "أعلى التطبيقات", - "total_active": "إجمالي الوقت النشط", - "total_idle": "إجمالي وقت الخمول", - "dlp_stats": "إحصائيات منع فقدان البيانات", - "banned_devices": "الأجهزة المحظورة", - "audit_logs": "Audit Logs", - "ticket_stats": "إحصائيات التذاكر", - "category_distribution": "توزيع الفئة", - "priority_distribution": "توزيع الأولويات", - "targets_status": "حالة الأهداف", - "os_distribution": "توزيع نظام التشغيل", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "التنبيهات الأخيرة", - "tab_generate": "إنشاء تقرير", - "tab_saved": "التقارير المحفوظة", - "type_devices_desc": "نظرة عامة على جميع الأجهزة والأنظمة الأساسية والحالات", - "type_activity_desc": "استخدام التطبيق وملخص وقت الخمول", - "type_security_desc": "إجراءات الحظر وأحداث منع فقدان البيانات وسجلات التدقيق", - "type_tickets_desc": "إحصائيات التذاكر وأداء SLA", - "type_network_desc": "أهداف مراقبة الشبكة وبيانات وقت التشغيل", - "type_inventory_desc": "ملخص مخزون الأجهزة والبرمجيات", - "type_alerts_desc": "قواعد التنبيه وسجل التنبيهات المُثارة", - "report_name": "Report Name", - "format": "Format", - "save": "حفظ التقرير", - "preview": "Preview", - "download": "Download", - "delete_saved": "حذف التقرير", - "raw_json": "Raw JSON" + "session": "الجلسة", + "summary": "الملخص", + "date": "التاريخ" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "تحرير المستأجر", - "delete_tenant": "حذف المستأجر", - "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا المستأجر؟ ستتم إزالة كافة تعيينات الجهاز والمستخدم.", - "name": "Name", - "slug": "Slug", - "contact_name": "اسم جهة الاتصال", - "contact_email": "البريد الإلكتروني للاتصال", - "max_devices": "أجهزة ماكس", - "max_devices_hint": "0 = غير محدود", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "الأجهزة", - "users": "Users", - "assign_device": "تعيين الجهاز", - "assign_devices": "تعيين الأجهزة", - "remove_device": "إزالة الجهاز", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "لم يتم تكوين أي مستأجرين", - "no_devices": "لم يتم تعيين أي أجهزة لهذا المستأجر", - "no_users": "لم يتم تعيين أي مستخدمين لهذا المستأجر", - "stats": "إحصائيات المستأجر", - "total_devices": "إجمالي الأجهزة", - "online_devices": "أجهزة الانترنت", - "total_users": "Total Users", - "created_at": "تم الإنشاء في", - "updated_at": "تم التحديث في", - "slug_exists": "سبيكة المستأجر موجودة بالفعل", - "total_tenants": "إجمالي المستأجرين", - "active_tenants": "المستأجرون النشطون", - "search": "بحث عن المستأجرين...", - "create_tenant": "إنشاء المستأجر", - "detail": "تفاصيل المستأجر", - "contact": "Contact", - "enabled": "ممكّن", - "disabled": "عاجز", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "عقود المنظمات", + "new": "تعيين حزمة", + "org": "المنظمة", + "package": "الحزمة", + "remaining": "الدقائق المتبقية", + "status": "الحالة", + "actions": "الإجراءات", + "suspend": "تعليق", + "activate": "تفعيل", + "select_org": "اختر المنظمة", + "select_package": "اختر الحزمة", + "no_orgs": "لم يتم العثور على منظمات", + "no_packages": "أنشئ حزمة أولاً" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "البحث حسب معرف الجهاز أو اسم المضيف أو IP...", - "no_registrations": "No registration requests", - "col_device_id": "معرف الجهاز", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "هل أنت متأكد أنك تريد الموافقة على هذا الجهاز؟ سيتلقى بيانات اعتماد الخادم ويمكنه الاتصال تلقائيًا.", - "approved_success": "تمت الموافقة على تسجيل الجهاز بنجاح", - "reject_btn": "Reject", - "reject_title": "رفض التسجيل", - "reject_confirm": "هل أنت متأكد أنك تريد رفض طلب التسجيل هذا؟", - "reject_reason": "السبب (اختياري)", - "reject_reason_placeholder": "أدخل سبب الرفض...", - "rejected_success": "تم رفض تسجيل الجهاز", - "delete_confirm": "هل أنت متأكد أنك تريد حذف سجل التسجيل هذا؟", - "deleted_success": "تم حذف سجل التسجيل", - "enrollment_title": "تسجيل الجهاز", - "enrollment_subtitle": "طلبات التسجيل المعلقة من عملاء سطح المكتب BetterDesk", - "enrollment_empty": "لا توجد طلبات تسجيل معلقة", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "اسم العرض", - "enrollment_display_name_placeholder": "أدخل اسمًا لهذا الجهاز...", - "enrollment_sync_mode": "وضع المزامنة", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "تمت الموافقة على تسجيل الجهاز", - "enrollment_rejected_success": "تم رفض تسجيل الجهاز", - "approve_title": "الموافقة على الجهاز", - "field_name": "اسم الجهاز", - "field_name_placeholder": "أدخل اسمًا لهذا الجهاز...", - "field_sync_mode": "وضع المزامنة", - "sync_standard": "قياسي — مزامنة متوازنة", - "sync_silent": "صامت — بيانات قياس أدنى", - "sync_turbo": "توربو — مزامنة مكثفة", - "field_tags": "العلامات", - "field_tags_placeholder": "علامات مفصولة بفواصل (مثال: مكتب، لابتوب)...", - "field_tags_existing": "العلامات الموجودة", - "field_tag_add_placeholder": "إضافة علامة جديدة...", - "field_tag_add_btn": "إضافة", - "field_groups": "مجموعات الأجهزة", - "field_folder": "المجلد", - "field_folder_none": "بدون مجلد", - "reject_ban_option": "حظر هذا الجهاز", - "reject_ban_hint": "سيُحظر الجهاز ولن يتمكن من إرسال طلبات تسجيل جديدة.", - "banner_open_mode": "التسجيل مفتوح — يُسجّل عملاء RustDesk الجدد دون موافقة المشغل. اضبط الوضع المُدار في الإعدادات لاستخدام قائمة الانتظار هذه.", - "banner_locked_mode": "التسجيل مقفل — تتمكن فقط الأجهزة المرتبطة برمز من التسجيل. الوضع المُدار مطلوب لموافقة المشغل على العملاء المجهولين.", - "enrollment_settings_link": "إعدادات التسجيل" + "export": { + "csv": "تصدير CSV", + "pdf": "تصدير PDF", + "sessions_csv": "تصدير الجلسات CSV" }, - "backup": { - "title": "Backup", - "desc": "قم بتنزيل نسخة احتياطية كاملة من تكوين وحدة التحكم والمستخدمين والمجموعات والإعدادات. يتم تضمين بيانات نظير Go server عندما تكون الواجهة الخلفية BetterDesk نشطة.", - "restore_title": "Restore", - "restore_desc": "قم بتحميل ملف نسخة احتياطية تم تنزيله مسبقًا لاستعادة تكوين وحدة التحكم. حدد الأقسام التي تريد استعادتها أدناه.", - "stat_users": "Users", - "stat_settings": "إعدادات", - "stat_folders": "Folders", - "stat_groups": "المجموعات", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "تحميل النسخ الاحتياطي", - "creating": "جارٍ إنشاء نسخة احتياطية...", - "download_success": "تم تنزيل النسخة الاحتياطية بنجاح", - "upload": "تحميل النسخ الاحتياطي", - "restore_confirm": "هل أنت متأكد أنك تريد الاستعادة من هذه النسخة الاحتياطية؟ سيتم الكتابة فوق الأقسام المحددة.", - "restore_success": "تمت استعادة النسخة الاحتياطية بنجاح. قد تتطلب بعض التغييرات إعادة تحميل الصفحة.", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "إعدادات وحدة التحكم", - "opt_branding": "العلامة التجارية / الموضوع", - "opt_folders": "مجلدات الجهاز", - "opt_groups": "مجموعات المستخدمين والأجهزة", - "opt_addressbooks": "دفاتر العناوين", - "opt_users": "حسابات المستخدمين", - "opt_users_warning": "مدمر: يستبدل جميع حسابات المستخدمين ببيانات احتياطية. ربما تم تسجيل خروجك.", - "no_file": "لم يتم تحديد ملف النسخ الاحتياطي", - "invalid_json": "ملف النسخ الاحتياطي غير صالح: JSON غير صالح", - "invalid_format": "ملف النسخ الاحتياطي غير صالح: ليس نسخة احتياطية BetterDesk", - "stat_database": "محرك قاعدة البيانات", - "stat_keys": "مفاتيح الخادم مضمَّنة", - "stat_env": "ملف البيئة", - "stat_uploads": "ملفات العلامة التجارية", - "restart_required": "بعض المكوّنات المستعادة (المفاتيح / .env / قاعدة بيانات Go) تتطلب إعادة تشغيل الخدمة لتصبح فعّالة.", - "security_warning": "تحتوي هذه النسخة الاحتياطية على أسرار (مفاتيح الخادم، ملف البيئة، تجزئات كلمات المرور وأسرار 2FA). احتفظ بها بأمان ولا تشاركها أبدًا.", - "restore_warning": "استعادة الأسرار أو ملف البيئة أو قاعدة بيانات خادم Go تستبدل هوية الخادم وتستلزم إعادة تشغيل الخدمة بعد ذلك.", - "opt_database": "قاعدة البيانات (جميع الجداول)", - "opt_database_hint": "يُعيد استيراد جميع بيانات وحدة التحكم. يُطبَّق مباشرةً دون الحاجة لإعادة تشغيل.", - "opt_uploads": "ملفات العلامة التجارية", - "opt_uploads_hint": "الشعارات والصور المرفوعة.", - "opt_secrets": "مفاتيح الخادم والأسرار", - "opt_secrets_warning": "يستبدل هوية خادم Ed25519 ومفتاح API وسر الجلسة. يتطلب إعادة تشغيل الخدمة.", - "opt_env": "ملف البيئة (.env)", - "opt_env_warning": "يستبدل SESSION_SECRET ومفتاح API وDSN قاعدة البيانات والمنافذ وإعدادات TLS. يتطلب إعادة تشغيل الخدمة.", - "opt_godb": "قاعدة بيانات خادم Go", - "opt_godb_warning": "يستبدل قاعدة بيانات Go server SQLite (الخلفية SQLite فقط). يتطلب إعادة تشغيل الخدمة." + "report": { + "title": "تقرير العمل", + "subtitle": "صف العمل الذي تم خلال جلسة التحكم عن بُعد هذه.", + "category": "الفئة", + "ticket_ref": "مرجع التذكرة", + "summary": "العمل المنجز", + "skip": "تخطي الآن", + "submit": "إرسال التقرير", + "summary_required": "الملخص مطلوب", + "saved": "تم حفظ تقرير العمل" }, - "cdap": { - "device_detail": "جهاز CDAP", - "loading": "تحميل...", - "loading_widgets": "جارٍ تحميل أدوات الجهاز...", - "load_error": "فشل تحميل بيانات الجهاز", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "الجهاز غير متصل حاليا. قد تكون قيم عنصر واجهة المستخدم قديمة.", - "no_widgets": "لا توجد الحاجيات المتاحة", - "no_widgets_desc": "لم يسجل هذا الجهاز بيان CDAP مع تعريفات عناصر واجهة المستخدم.", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "تأكيد الأمر", - "select_option": "يختار", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "إرسال الأمر", - "command_sent": "تم إرسال الأمر بنجاح", - "command_failed": "فشل في إرسال الأمر", - "devices_title": "أجهزة CDAP", - "devices_subtitle": "الأجهزة المتصلة عبر بروتوكول تطبيق الجهاز المخصص", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "أجهزة البحث...", - "no_devices": "لا توجد أجهزة متصلة", - "no_devices_desc": "لا توجد أجهزة CDAP متصلة حاليًا. ستظهر الأجهزة هنا بمجرد اتصالها بالبوابة.", - "gateway_disabled": "تم تعطيل بوابة CDAP", - "gateway_disabled_desc": "قم بتمكين بوابة CDAP عن طريق تعيين CDAP_ENABLED=true في تكوين الخادم.", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "تعطيل CDAP", - "enabled_restart": "تم تمكين CDAP. يلزم إعادة تشغيل الخادم لتطبيق التغييرات.", - "disabled_restart": "تم تعطيل CDAP. يلزم إعادة تشغيل الخادم لتطبيق التغييرات.", - "widgets": "الحاجيات", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "التنبيهات النشطة", - "alert_fired": "Alert fired", - "alert_cleared": "تم مسح التنبيه", - "no_alerts": "لا توجد تنبيهات نشطة", - "connect_terminal": "ربط المحطة", - "table_search": "يبحث...", - "just_now": "Just now", - "terminal_connecting": "جارٍ الاتصال بالجهاز...", - "terminal_disconnected": "Disconnected", - "terminal_error": "فشل الاتصال الطرفي", - "linked_devices": "الأجهزة المرتبطة", - "link_device": "جهاز الارتباط", - "unlink_device": "Unlink", - "no_linked_devices": "لا توجد أجهزة مرتبطة", - "unlink_confirm": "هل أنت متأكد أنك تريد إلغاء ربط هذا الجهاز؟", - "link_prompt": "أدخل معرف النظير للربط بهذا الجهاز:", - "connect_desktop": "قم بتوصيل سطح المكتب", - "connect_video": "ربط الدفق", - "connect_files": "تصفح الملفات", - "connect_audio": "قم بتوصيل الصوت", - "upload_file": "Upload", - "desktop_connecting": "جارٍ الاتصال...", - "video_connecting": "جارٍ الاتصال...", - "files_connecting": "جارٍ الاتصال...", - "audio_connecting": "جارٍ الاتصال...", - "audio_streaming": "Streaming", - "clipboard_in": "تم استلام الحافظة", - "clipboard_out": "تم إرسال الحافظة", - "monitor_select": "حدد مراقب", - "keyframe_request": "طلب الإطار الرئيسي", - "quality_auto": "جودة السيارات" + "empty": { + "packages": "لا توجد حزم بعد. أنشئ واحدة بالزر أعلاه.", + "contracts": "لا توجد عقود منظمات بعد. عيّن حزمة لمنظمة.", + "sessions": "لم تُسجَّل جلسات قابلة للفوترة بعد.", + "reports": "لم تُرسَل تقارير عمل بعد." }, - "desktop": { - "switch_mode": "وضع سطح المكتب", - "console_mode": "وضع وحدة التحكم", - "loading": "تحميل...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "يغلق", - "widgets_mode": "الحاجيات", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "إضافة القطعة", - "remove_widget": "إزالة القطعة", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "تكوين", - "search_widgets": "أدوات البحث...", - "cat_monitoring": "Monitoring", - "cat_devices": "الأجهزة", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "أكتب ملاحظات هنا...", - "search_placeholder": "البحث عن الأجهزة والصفحات والإعدادات...", - "search_pages": "Pages", - "search_devices": "الأجهزة", - "search_no_results": "No results", - "exit_desktop": "الخروج من وضع سطح المكتب", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "حالة الجهاز", - "widget_server_health": "معلومات الخادم", - "widget_system_stats": "عدادات الجهاز", - "widget_device_list": "قائمة الأجهزة", - "widget_quick_actions": "إجراءات سريعة", - "widget_recent_activity": "النشاط الأخير", - "widget_notes": "Notes", - "widget_network_monitor": "مراقب الشبكة", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "أجهزة CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "شبكة الجهاز", - "widget_multi_gauge": "مقاييس الخادم", - "widget_weekly_chart": "النشاط الأسبوعي", - "widget_quick_controls": "الضوابط السريعة", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "إحصائيات الاتصال", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "جلسات المستخدم", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "لا توجد أجهزة", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "يفتح", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "قم بتعيين URL في التكوين", - "label_server_uptime": "وقت تشغيل الخادم", - "label_merged_info": "تم دمجها في أداة معلومات الخادم", - "label_with_notes": "مع الملاحظات", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "إجمالي الأجهزة", - "label_throughput": "Throughput", - "label_active_relays": "المرحلات النشطة", - "label_total_relayed": "مجموع ترحيل", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "أجهزة التصفية...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "لا توجد أجهزة CDAP", - "action_add_widget": "إضافة القطعة", - "label_merged_server_info": "تم دمجها في أداة معلومات الخادم", - "wp_images": "Images", - "wp_colors": "الألوان الصلبة", - "wp_custom_color": "لون مخصص", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "لم يتم تثبيت صور الخلفية على هذا الخادم.", - "wp_download_hint": "ضع صور PNG في الدليل public/wallpapers/ لتمكين اختيار ورق الحائط.", - "widget_calendar": "Calendar", - "widget_process_monitor": "مراقب العملية", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "إحصائيات قاعدة البيانات", - "widget_docker_containers": "حاويات Docker", - "widget_shell_command": "قيادة شل", - "widget_device_map": "خريطة الجهاز", - "widget_remote_connect": "الاتصال عن بعد", - "label_no_online": "لا توجد أجهزة متصلة بالإنترنت", - "label_no_events": "لا توجد أحداث اليوم", - "label_event_title": "عنوان الحدث:", - "label_no_data": "لا توجد بيانات متاحة", - "label_download_speed": "سرعة التحميل", - "label_latency": "Latency", - "label_server": "الخادم", - "label_run_test": "Run Test", - "label_testing": "اختبار...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "لا حاويات", - "label_docker_unavailable": "Docker غير متوفر", - "label_no_command": "لم يتم تكوين أي أمر", - "label_no_output": "لا يوجد إخراج حتى الآن", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "حفظ الإعداد المسبق", - "label_load_preset": "Load Preset", - "label_preset_name": "اسم الإعداد المسبق:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "الترتيب التلقائي", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 عمود (متساوي)", - "label_2col_wide": "2 عمود (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "مجموعة القطعة", - "ungroup_widgets": "فك تجميع الحاجيات", - "group_widgets": "مجموعة الحاجيات المحددة", - "snap_layouts": "التخطيطات المفاجئة", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "التقط أعلى اليسار", - "snap_top_right": "التقط أعلى اليمين", - "snap_bottom_left": "التقط أسفل اليسار", - "snap_bottom_right": "التقط أسفل اليمين", - "aero_shake": "هز لتقليل الآخرين", - "zone_resize": "اسحب الحدود لتغيير حجم المناطق", - "zone_borders": "حدود المنطقة القابلة للسحب", - "app_drawer": "Applications", - "search_apps": "تطبيقات البحث...", - "edit_shortcuts": "تحرير الاختصارات", - "widgets": "الحاجيات", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "تعيين حزمة موجودة", + "submit": "تعيين" }, - "desktop_login": { - "click_to_sign_in": "انقر في أي مكان أو اضغط على مفتاح لتسجيل الدخول", - "username_placeholder": "اسم المستخدم", - "password_placeholder": "كلمة المرور", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "المصادقة الثنائية", - "totp_subtitle": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك", - "back_to_login": "العودة لتسجيل الدخول", - "fill_all_fields": "يرجى ملء جميع الحقول", - "invalid_credentials": "اسم المستخدم أو كلمة المرور غير صالحة", - "invalid_code": "رمز التحقق غير صالح", - "enter_6_digits": "أدخل جميع الأرقام الستة", - "network_error": "Network error — check your connection", - "session_expired": "انتهت صلاحية الجلسة. الرجاء تسجيل الدخول مرة أخرى." - }, - "tokens": { - "title": "رموز الجهاز", - "subtitle": "إدارة الرموز المميزة للتسجيل لتوفير الجهاز تلقائيًا", - "enrollment_mode": "وضع التسجيل", - "mode_open": "يفتح", - "mode_open_desc": "يمكن لأي جهاز التسجيل بدون رمز مميز", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "مجموع الرموز", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "رموز البحث...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "توليد بالجملة", - "create": "إنشاء رمز مميز", - "edit": "تحرير الرمز المميز", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "مخلوق", - "actions": "Actions", - "name_placeholder": "على سبيل المثال دفعة أجهزة الكمبيوتر المكتبية", - "max_uses": "Max Uses", - "max_uses_hint": "0 = غير محدود", - "expires_in": "Expires In", - "no_expiration": "لا انتهاء الصلاحية", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "ملاحظة اختيارية حول هذا الرمز المميز...", - "count": "Count", - "count_range": "عدد الرموز المميزة المراد إنشاؤها (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "تم إنشاء الرمز المميز", - "tokens_generated": "تم إنشاء الرموز المميزة", - "copy_warning": "انسخ الرمز المميز الآن. لن يتم عرضه مرة أخرى.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "هل أنت متأكد أنك تريد إلغاء هذا الرمز المميز؟ ولن تتأثر الأجهزة المسجلة به بالفعل.", - "revoked_success": "تم إبطال الرمز المميز بنجاح", - "no_tokens": "لم يتم العثور على الرموز المميزة", - "expired": "Expired", - "never": "Never", - "save": "يحفظ", - "cancel": "يلغي", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "التالي", - "prev": "Previous", - "skip": "Skip", - "finish": "ينهي", - "close": "يغلق", - "step_of": "{current} من {total}", - "console_sidebar_title": "الشريط الجانبي للملاحة", - "console_sidebar_text": "الوصول إلى جميع الوحدات من هنا. انقر فوق أي رمز للانتقال إلى هذا القسم. يتكيف الشريط الجانبي مع حجم شاشتك.", - "console_expand_title": "قم بتوسيع الشريط الجانبي", - "console_expand_text": "انقر هنا لتوسيع الشريط الجانبي ورؤية التسميات الكاملة لجميع عناصر التنقل. انقر مرة أخرى لطي.", - "console_search_title": "بحث سريع", - "console_search_text": "ابحث عن الأجهزة أو الإعدادات أو الإجراءات بسرعة. اضغط على Ctrl+K لاختصار لوحة المفاتيح.", - "console_dashboard_title": "لوحة القيادة", - "console_dashboard_text": "يعرض المحور المركزي الخاص بك حالة الخادم والأجهزة المتصلة بالإنترنت والإجراءات السريعة. إبقاء العين على المقاييس الهامة في لمحة.", - "console_devices_title": "إدارة الجهاز", - "console_devices_text": "عرض جميع الأجهزة المتصلة والبحث فيها وإدارتها. يمكنك التصفية حسب الحالة، وتعيين العلامات، وتكوين إعدادات الجهاز الفردية.", - "console_settings_title": "إعدادات", - "console_settings_text": "تكوين سلوك الخادم وخيارات الأمان والعلامة التجارية وإدارة المستخدم. قم بتخصيص BetterDesk ليناسب احتياجاتك.", - "console_desktop_title": "وضع سطح المكتب", - "console_desktop_text": "قم بالتبديل إلى وضع سطح المكتب للحصول على مساحة عمل ذات إطارات تحتوي على عناصر واجهة مستخدم. مثالية للوحات المعلومات متعددة المهام والمراقبة.", - "console_complete_title": "أنت جاهز!", - "console_complete_text": "استكشف فئات الشريط الجانبي لاكتشاف جميع الميزات. انقر فوق أيقونة المساعدة في أي وقت لإعادة تشغيل هذا الدليل.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "يعرض الشريط العلوي الساعة وعناصر التحكم السريعة والوصول إلى درج التطبيقات. انقر على أيقونة الشبكة لتصفح جميع التطبيقات.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "افتح درج التطبيق للبحث عن أي وظيفة لوحدة التحكم وتشغيلها كنافذة عائمة. يتم تنظيم التطبيقات حسب الفئة.", - "desktop_widgets_title": "لوحة تحكم القطعة", - "desktop_widgets_text": "مساحة العمل القابلة للتخصيص الخاصة بك. تعرض الأدوات معلومات مباشرة وتوفر وصولاً سريعًا إلى الميزات. اسحب لإعادة الترتيب.", - "desktop_add_widget_title": "إضافة الحاجيات", - "desktop_add_widget_text": "انقر هنا لتصفح الأدوات المتاحة. اختر من بين شاشات المراقبة وقوائم الأجهزة والملاحظات والمزيد.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "تظهر التطبيقات المفتوحة هنا. انقر للتركيز أو تصغير النوافذ. قم بتمرير الرموز لرؤية تسميات التطبيق.", - "desktop_snap_title": "التخطيطات المفاجئة", - "desktop_snap_text": "اسحب النوافذ إلى حواف الشاشة لتثبيتها في موضعها، أو قم بتحريك زر التكبير للإعدادات المسبقة للتخطيط. جرب ايرو شيك!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "يتم فتح التطبيقات في نوافذ قابلة للسحب وتغيير الحجم. تصغير أو تكبير أو إغلاق شريط العنوان. طبقة Windows فوق عناصر واجهة المستخدم.", - "desktop_search_title": "بحث سريع", - "desktop_search_text": "البحث عبر الأجهزة والصفحات والإعدادات. اضغط على Ctrl+K في أي مكان لفتح البحث على الفور.", - "desktop_complete_title": "وضع سطح المكتب جاهز!", - "desktop_complete_text": "حاول فتح التطبيقات من الدرج وترتيب النوافذ جنبًا إلى جنب. استخدم الإعدادات المسبقة لعناصر واجهة المستخدم لتخطيطات لوحة المعلومات السريعة.", - "devices_folders_title": "مجلدات الجهاز", - "devices_folders_text": "تنظيم الأجهزة في مجلدات. انقر فوق مجلد لتصفية القائمة. انقر بزر الماوس الأيمن لإعادة التسمية أو الحذف.", - "devices_search_title": "بحث وتصفية", - "devices_search_text": "البحث حسب المعرف أو اسم المضيف أو النظام الأساسي. استخدم أقراص الحالة لإظهار الاتصال بالإنترنت أو عدم الاتصال بالإنترنت أو لجميع الأجهزة فقط.", - "devices_table_title": "قائمة الأجهزة", - "devices_table_text": "انقر فوق أي صف جهاز للحصول على التفاصيل. استخدم قائمة الكباب الموجودة على اليمين لاتخاذ إجراءات سريعة مثل الاتصال أو تعديل العلامات أو الحذف.", - "devices_complete_title": "إدارة الجهاز جاهزة!", - "devices_complete_text": "اسحب الأجهزة بين المجلدات لتنظيمها. انقر نقرًا مزدوجًا فوق أحد الأجهزة لفتح لوحة التفاصيل الخاصة به.", - "settings_tabs_title": "فئات الإعدادات", - "settings_tabs_text": "التنقل بين الأقسام العامة والأمان والمظهر وأقسام التكوين الأخرى.", - "settings_content_title": "إعدادات", - "settings_content_text": "يحتوي كل قسم على إعدادات خادم ووحدة تحكم محددة. يتم حفظ التغييرات عند النقر فوق حفظ.", - "settings_complete_title": "نظرة عامة على الإعدادات", - "settings_complete_text": "تحقق من إعدادات الأمان لمفاتيح 2FA وAPI وإدارة المستخدم. تفضل بزيارة المظهر لتخصيص مظهر وحدة التحكم.", - "help": "المساعدة والبرامج التعليمية", - "tour_console": "جولة وحدة التحكم", - "tour_desktop": "جولة في وضع سطح المكتب", - "tour_devices": "جولة الأجهزة", - "tour_settings": "جولة الإعدادات", - "reset_all": "إعادة تعيين كافة البرامج التعليمية", - "tour_remote": "جولة الجلسة البعيدة", - "tour_organization": "إعداد المنظمة", - "tour_cdap": "نظرة عامة على CDAP", - "tour_chat": "أساسيات الدردشة", - "remote_toolbar_title": "شريط الأدوات البعيد", - "remote_toolbar_text": "قم بالوصول إلى عناصر التحكم في العرض ومزامنة الحافظة والمفاتيح الخاصة وإعدادات الجودة من شريط الأدوات. تبديل وضع ملء الشاشة باستخدام F11.", - "remote_canvas_title": "العرض عن بعد", - "remote_canvas_text": "هذه هي الشاشة البعيدة. انقر داخل لبدء التحكم في الجهاز البعيد. تتم إعادة توجيه إدخال الماوس ولوحة المفاتيح تلقائيًا.", - "remote_clipboard_title": "مزامنة الحافظة", - "remote_clipboard_text": "انسخ النص والصقه بين جهاز الكمبيوتر الخاص بك والجهاز البعيد. استخدم Ctrl+C / Ctrl+V كالمعتاد أثناء التركيز على الشاشة البعيدة.", - "remote_complete_title": "الجلسة عن بعد جاهزة!", - "remote_complete_text": "استخدم أزرار شريط الأدوات للمفاتيح الخاصة (Ctrl+Alt+Del، PrintScreen) وتبديل الشاشة. اضغط على Escape أو انقر فوق Disconnect لإنهاء الجلسة.", - "org_overview_title": "المنظمات", - "org_overview_text": "تتيح لك المؤسسات تجميع المستخدمين والأجهزة والسياسات. كل مؤسسة لديها المشرف والمشغلين والإعدادات الخاصة بها.", - "org_create_title": "إنشاء منظمة", - "org_create_text": "انقر هنا لإنشاء منظمة جديدة. قم بتوفير اسم، وحلقة، ووصف اختياري. سوف تكون مالك المنظمة الجديدة.", - "org_members_title": "إدارة الأعضاء", - "org_members_text": "قم بدعوة المستخدمين عبر البريد الإلكتروني، وقم بتعيين الأدوار (المسؤول، والمشغل، والمستخدم)، وإدارة الوصول. يمكن للأعضاء رؤية الأجهزة المخصصة لمؤسستهم.", - "org_devices_title": "تعيين الأجهزة", - "org_devices_text": "إضافة أجهزة إلى المؤسسة. سترث الأجهزة المعينة هنا سياسات المؤسسة وستكون مرئية لأعضائها.", - "org_policies_title": "سياسات المنظمة", - "org_policies_text": "قم بتعيين سياسات الأمان مثل متطلبات كلمة المرور، ومهلة الجلسة، وفرض المصادقة الثنائية (2FA)، وقواعد تسجيل الجهاز للمؤسسة.", - "org_complete_title": "اكتمل إعداد المنظمة!", - "org_complete_text": "قم بدعوة فريقك وتخصيص الأجهزة لبدء استخدام الإدارة على مستوى المؤسسة. تنطبق السياسات تلقائيًا على جميع الأعضاء.", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "جهات الاتصال والمجموعات", - "chat_contacts_text": "رؤية جهات الاتصال الخاصة بك ومجموعات الدردشة. انقر فوق أي جهة اتصال لفتح محادثة. تشير النقاط الخضراء إلى المستخدمين المتصلين بالإنترنت.", - "chat_send_title": "إرسال الرسائل", - "chat_send_text": "اكتب رسالتك واضغط على Enter للإرسال. يتم تشفير الرسائل من طرف إلى طرف عندما يدعم كلا الطرفين E2E.", - "chat_file_title": "مشاركة الملفات", - "chat_file_text": "انقر على أيقونة المرفقات لمشاركة الملفات. الملفات مشفرة ويمكن أن يصل حجمها إلى 50 ميجابايت.", - "chat_complete_title": "الدردشة جاهزة!", - "chat_complete_text": "الدردشة مع المشغلين والمستخدمين النهائيين في الوقت الحقيقي. إنشاء مجموعات للتواصل الجماعي. تدعم جميع الرسائل إيصالات القراءة.", - "disable_tutorials": "تعطيل البرامج التعليمية", - "enable_tutorials": "تمكين البرامج التعليمية" - }, - "help_request": { - "title": "طلبات المساعدة", - "subtitle": "إدارة طلبات المساعدة الواردة من عملاء سطح المكتب", - "new_request": "طلب مساعدة جديد", - "device": "جهاز", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "لا توجد طلبات مساعدة", - "notification": "تم استلام طلب المساعدة من", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "المنظمات", - "create": "إنشاء منظمة", - "edit": "تحرير المنظمة", - "detail": "تفاصيل المنظمة", - "name": "Name", - "slug": "سبيكة (URL-آمنة)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "الأجهزة", - "invitations": "Invitations", - "settings": "إعدادات", - "add_user": "Add User", - "assign_device": "تعيين الجهاز", - "create_invitation": "إنشاء دعوة", - "delete_confirm": "هل تريد حذف هذه المؤسسة؟ سيؤدي هذا إلى إزالة جميع المستخدمين والأجهزة والإعدادات المرتبطة.", - "no_orgs": "لا توجد منظمات حتى الآن", - "no_orgs_hint": "قم بإنشاء مؤسستك الأولى لبدء إدارة الأجهزة والمستخدمين.", - "connection_policy": "سياسة الاتصال", - "allow_file_transfer": "السماح بنقل الملفات", - "allow_clipboard": "السماح بالحافظة", - "max_session_duration": "الحد الأقصى لمدة الجلسة (الحد الأدنى)", - "role_owner": "Owner", - "role_admin": "مسؤول", - "role_operator": "Operator", - "role_user": "عضو", - "username": "اسم المستخدم", - "password": "كلمة المرور", - "display_name": "اسم العرض", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "معرف الجهاز", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "المستخدم المعين", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "لا يوجد مستخدمون في هذه المؤسسة.", - "no_devices": "لم يتم تعيين أي أجهزة لهذه المؤسسة.", - "no_invitations": "لا دعوات.", - "user_added": "User added", - "user_removed": "تمت إزالة المستخدم", - "user_updated": "تم تحديث دور المستخدم", - "device_assigned": "تم تعيين الجهاز", - "device_unassigned": "تم إلغاء تعيين الجهاز", - "invitation_created": "تم إنشاء الدعوة", - "settings_saved": "تم حفظ الإعدادات", - "org_deleted": "تم حذف المؤسسة", - "confirm_remove_user": "هل تريد إزالة هذا المستخدم من المؤسسة؟", - "confirm_unassign_device": "هل تريد إلغاء تعيين هذا الجهاز من المؤسسة؟", - "confirm_delete_org": "هل تريد حذف هذه المؤسسة وجميع البيانات المرتبطة بها؟", - "edit_role": "تحرير الدور", - "raw_settings": "إعدادات الخام", - "key": "Key", - "value": "Value", - "save": "حفظ الإعدادات", - "policy_unattended": "غير المراقب (فورية)", - "policy_attended": "حضر (مع التأكيد)", - "policy_ask": "Always ask", - "expires_hours": "انتهاء الصلاحية (ساعات)", - "loading_failed": "فشل تحميل بيانات المؤسسة", - "name_slug_required": "مطلوب الاسم والسبيكة", - "org_created": "تم إنشاء المنظمة", - "org_updated": "تم تحديث المنظمة", - "create_new_user": "إنشاء جديد", - "add_existing_user": "إضافة موجودة", - "none_available": "none", - "select_user": "حدد المستخدم", - "org_role": "الدور التنظيمي", - "link_user_hint": "سيتم ربط المستخدم المحدد بهذه المؤسسة باستخدام بيانات اعتماد حساب الخادم الخاص به.", - "no_available_users": "جميع مستخدمي الخادم مرتبطون بالفعل بهذه المؤسسة.", - "user_linked": "المستخدم مرتبط بالمنظمة" - }, - "chat": { - "e2e_enabled": "مشفرة من طرف إلى طرف", - "e2e_establishing": "إنشاء قناة آمنة...", - "e2e_established": "تم إنشاء قناة آمنة", - "e2e_unsupported": "تشفير E2E غير مدعوم في هذا المتصفح", - "typing_indicator": "الكتابة...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "ملف", - "file_too_large": "الملف كبير جدًا (الحد الأقصى 50 ميجابايت)", - "file_encrypted": "نقل الملفات المشفرة", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "تم تدوير مفاتيح الأمان", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "المجموعات", - "no_contacts": "لا توجد اتصالات حتى الآن", - "no_groups": "لا توجد مجموعات حتى الآن", - "no_messages": "لا توجد رسائل حتى الآن", - "no_results": "لم يتم العثور على نتائج", - "select_conversation": "حدد محادثة لبدء الدردشة", - "type_message": "اكتب رسالة...", - "send": "يرسل", - "attach_file": "إرفاق الملف", - "emoji": "Emoji", - "search_messages": "بحث في الرسائل", - "create_group": "إنشاء مجموعة", - "group_name": "اسم المجموعة", - "group_members": "أعضاء", - "cancel": "يلغي", - "create": "يخلق", - "members": "أعضاء", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "البحث في جهات الاتصال والرسائل", - "select_conversation_hint": "حدد محادثة لعرض الرسائل", - "info": "Info", - "group_name_placeholder": "أدخل اسم المجموعة" - }, - "toast": { - "device_connected": "الجهاز متصل", - "device_disconnected": "تم قطع اتصال الجهاز", - "session_started": "بدأت الجلسة عن بعد", - "session_ended": "انتهت الجلسة البعيدة", - "file_upload_complete": "اكتمل تحميل الملف", - "settings_saved": "تم حفظ الإعدادات", - "error_generic": "حدث خطأ", - "connection_lost": "تم فقدان الاتصال", - "reconnecting": "جارٍ إعادة الاتصال..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "الأدوات المساعدة للإدارة وأدوات التشخيص", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "يرسل", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "أدخل النص...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "اذهب الخادم", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "تحقق من إمكانية الوصول إلى المضيف ووقت الاستجابة", - "tcp_title": "فحص منفذ TCP", - "tcp_desc": "اختبار اتصال منفذ TCP", - "ssl_title": "مفتش SSL", - "ssl_desc": "فحص تفاصيل شهادة SSL/TLS", - "http_title": "فحص الصحة HTTP", - "http_desc": "تحقق من حالة نقطة النهاية HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "حل اسم المضيف إلى عنوان IP", - "whois_title": "DNS Records", - "whois_desc": "سجلات الاستعلام A، AAAA، MX، TXT، NS", - "speed_title": "Speed Test", - "speed_desc": "قياس عرض النطاق الترددي للتحميل", - "run_speed_test": "تشغيل اختبار السرعة", - "wol_title": "Wake-on-LAN", - "wol_desc": "إرسال حزمة سحرية لتنبيه الجهاز", - "wol_sent": "تم إرسال الحزمة السحرية", - "hash_title": "مولد التجزئة", - "hash_desc": "إنشاء تجزئات التشفير", - "password_title": "مولد كلمة المرور", - "password_desc": "إنشاء كلمة مرور عشوائية آمنة", - "jwt_title": "JWT Decoder", - "jwt_desc": "قم بفك تشفير وفحص رموز الويب JSON", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "تشفير أو فك تشفير بيانات Base64", - "url_title": "URL Encoder", - "url_desc": "تشفير أو فك تشفير مكونات URL", - "processes_title": "قائمة العمليات", - "processes_desc": "عرض عمليات النظام قيد التشغيل", - "disk_title": "Disk Usage", - "disk_desc": "عرض استخدام قسم القرص", - "db_title": "إحصائيات قاعدة البيانات", - "db_desc": "عرض إحصائيات جدول قاعدة البيانات", - "docker_title": "حاويات Docker", - "docker_desc": "عرض حاويات Docker قيد التشغيل", - "logs_title": "Log Viewer", - "logs_desc": "عرض إخراج السجل الأخير", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "صالح من", - "valid_to": "صالح ل", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "لا توجد بيانات متاحة", - "no_docker": "لم يتم العثور على حاويات Docker أو أن Docker غير متوفر", - "no_logs": "لا توجد خطوط سجل متاحة" - }, - "policies": { - "title": "سياسات المنظمة", - "subtitle": "إدارة سياسات الأمان والاتصال والميزات لمؤسساتك", - "select_org": "منظمة", - "select_org_placeholder": "اختر منظمة...", - "select_org_first": "حدد مؤسسة لعرض سجل تدقيق السياسة.", - "configured": "Configured", - "connection_title": "سياسة الاتصال", - "connection_desc": "التحكم في كيفية إنشاء الجلسات البعيدة", - "connection_mode": "وضع الاتصال", - "mode_attended": "حضر (يتطلب موافقة المستخدم)", - "mode_unattended": "غير مراقب (السماح دائمًا)", - "mode_ask": "Always Ask", - "max_session": "الحد الأقصى لمدة الجلسة (بالدقائق)", - "idle_lock": "مهلة قفل الخمول (بالدقائق)", - "wallpaper_policy": "خلفية أثناء الجلسة", - "wallpaper_show": "Show", - "wallpaper_hide_session": "إخفاء أثناء الجلسة", - "wallpaper_hide_always": "Always hide", - "features_title": "سياسة الميزة", - "features_desc": "تمكين أو تعطيل ميزات محددة للأجهزة", - "allow_file_transfer": "السماح بنقل الملفات", - "allow_clipboard": "السماح بمزامنة الحافظة", - "allow_audio": "السماح بتدفق الصوت", - "allow_recording": "السماح بتسجيل الجلسة", - "security_title": "السياسة الأمنية", - "security_desc": "فرض متطلبات الأمان لأجهزة المؤسسة", - "require_2fa": "تتطلب 2FA للوصول غير المراقب", - "password_min_length": "الحد الأدنى لطول كلمة المرور", - "password_require_special": "تتطلب أحرف خاصة", - "password_max_age": "الحد الأقصى لعمر كلمة المرور (أيام، 0=أبدًا)", - "allowed_operators": "أدوار المشغل المسموح بها (مفصولة بفواصل)", - "network_title": "سياسة الشبكة", - "network_desc": "التحكم في خوادم الترحيل والاتصالات المباشرة", - "block_direct_p2p": "كتلة P2P المباشرة (مرحل القوة)", - "allowed_relays": "خوادم الترحيل المسموح بها (واحد لكل سطر)", - "ip_allowlist": "القائمة المسموح بها لعناوين IP (CIDR، واحد لكل سطر)", - "update_title": "تحديث السياسة", - "update_desc": "التحكم في التحديثات التلقائية وتحديث القنوات", - "auto_update": "تمكين التحديث التلقائي", - "update_channel": "تحديث القناة", - "audit_title": "تغييرات السياسة", - "audit_desc": "تاريخ تغيير السياسة الأخيرة", - "no_audit": "لم يتم تسجيل أي تغييرات في السياسة.", - "save_success": "تم حفظ السياسة بنجاح", - "save_failed": "فشل في حفظ السياسة", - "load_failed": "فشل تحميل السياسات", - "block_direct_p2p_hint": "ينطبق على الأجهزة في هذه المؤسسة. الإعداد الافتراضي العام موجود في الإعدادات ← استراتيجية الاتصال." - }, - "attestation": { - "title": "شهادة الجهاز", - "subtitle": "مراقبة التحقق من هوية الجهاز وبصمات أصابع الأجهزة", - "verified": "Verified", - "pending": "Pending", - "failed": "فشل", - "device_list": "سجلات شهادة الجهاز", - "device_list_desc": "بصمات أصابع الأجهزة وحالة التحقق من الهوية", - "col_device": "معرف الجهاز", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "لم يتم العثور على سجلات الشهادة.", - "verify_success": "تم وضع علامة على الجهاز بأنه تم التحقق منه", - "verify_failed": "فشل التحقق من الجهاز", - "revoke_success": "تم إبطال شهادة الجهاز", - "revoke_failed": "فشل في إلغاء التصديق" - }, - "fleet": { - "title": "إدارة الأسطول", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "منشئ سير العمل", - "tab_compliance": "Compliance", - "res_title": "رسم خرائط الموارد", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "محرك الشبكة", - "res_type_dns": "خادم DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "إضافة الموارد", - "res_name": "اسم المورد", - "res_type": "Type", - "res_address": "العنوان / المسار", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "منظمة", - "res_scope_group": "مجموعة", - "res_scope_device": "جهاز", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "لم يتم العثور على الموارد. انقر فوق \"إضافة مورد\" لإنشاء واحد.", - "res_confirm_delete": "هل أنت متأكد أنك تريد حذف هذا المورد؟", - "task_title": "جدولة المهام", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "فشل", - "task_search": "Search tasks…", - "task_create": "إنشاء مهمة", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "تحديث", - "task_type_restart": "إعادة تشغيل", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "معرفات الأجهزة أو أسماء المجموعات، مفصولة بفواصل", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "قيمة الجدول الزمني", - "task_script": "البرنامج النصي / الأمر", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "لم يتم العثور على مهام. انقر فوق \"إنشاء مهمة\" للبدء.", - "task_confirm_delete": "هل أنت متأكد أنك تريد حذف هذه المهمة؟", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "منشئ سير العمل المرئي", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "يحفظ", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "حدد عقدة لتحرير خصائصها.", - "builder_node_trigger_manual": "الزناد اليدوي", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "مشغل الحدث", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "أعد تشغيل Svc", - "builder_node_action_file_deploy": "نشر الملف", - "builder_node_action_message": "أرسل رسالة", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "إرسال تنبيه", - "builder_node_result_chain": "سير عمل السلسلة", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "اسم سير العمل:", - "comp_title": "امتثال البرمجيات", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "جهاز", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "هل تريد تشغيل المعالجة التلقائية على هذا الجهاز؟", - "comp_no_data": "لا توجد بيانات الامتثال المتاحة. قم بإجراء فحص للبدء.", - "save": "يحفظ", - "cancel": "يلغي", - "close": "يغلق", - "edit": "يحرر", - "delete": "يمسح", - "actions": "Actions", - "all_orgs": "جميع المنظمات", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "محرك الشبكة", - "type_dns": "خادم DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "إضافة الموارد", - "edit_resource": "تحرير المورد", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "العنوان / المسار", - "scope_org": "منظمة", - "scope_group": "مجموعة", - "scope_device": "جهاز", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا العنصر؟", - "all_statuses": "جميع الحالات", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "فشل", - "search_tasks": "Search tasks�", - "create_task": "إنشاء مهمة", - "edit_task": "تحرير المهمة", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "نشر الملف", - "task_type_registry": "Registry", - "target_devices": "الأجهزة المستهدفة", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "البرنامج النصي / الأمر", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "تحميل", - "no_output": "لا يوجد مخرجات متاحة", - "error_loading": "حدث خطأ أثناء تحميل البيانات", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "الزناد اليدوي", - "node_schedule": "Schedule", - "node_event": "مشغل الحدث", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "أعد تشغيل Svc", - "node_file_deploy": "نشر الملف", - "node_send_message": "أرسل رسالة", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "إرسال تنبيه", - "node_chain": "سير عمل السلسلة", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "جميع المنظمات", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "جهاز", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "هل تريد تشغيل المعالجة التلقائية على هذا الجهاز؟" - }, - "scaling": { - "title": "إدارة القياس والتتابع", - "tab_overview": "ملخص", - "tab_relays": "Relay Nodes", - "tab_rules": "قواعد التعيين", - "tab_capacity": "تخطيط القدرات", - "arch_title": "هندسة الشبكات", - "arch_loading": "جارٍ تحميل المخطط المعماري...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "إجمالي الأجهزة", - "stat_active_sessions": "الجلسات النشطة", - "stat_bandwidth": "إجمالي عرض النطاق الترددي", - "relay_health": "تتابع الصحة", - "no_relays": "لم يتم تكوين أي عقد ترحيل. أضف عقدة الترحيل الأولى لتوزيع الحمل.", - "relay_search": "مرحلات البحث...", - "relay_add": "إضافة عقدة التتابع", - "relay_edit": "تحرير عقدة الترحيل", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "الأجهزة", - "col_sessions": "الجلسات", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "تتابع الهدف", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "ممكّن", - "status_disabled": "عاجز", - "confirm_delete_relay": "هل أنت متأكد أنك تريد حذف عقدة الترحيل هذه؟", - "confirm_delete_rule": "هل أنت متأكد أنك تريد حذف قاعدة التعيين هذه؟", - "rules_hint": "تحدد قواعد التعيين خادم الترحيل الذي يتعامل مع مجموعات أجهزة معينة. يتم تقييم القواعد حسب الأولوية (الأدنى أولاً).", - "rule_add": "Add Rule", - "rule_edit": "تحرير القاعدة", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "مجموعة الأجهزة", - "match_tag": "علامة الجهاز", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "الخادم الرئيسي", - "fallback_nearest": "أقرب تتابع", - "relay_max_sessions": "جلسات ماكس", - "relay_max_bandwidth": "أقصى عرض النطاق الترددي (ميجابت في الثانية)", - "cap_tiers": "طبقات القدرة", - "cap_loading": "جارٍ تحميل بيانات السعة...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "لا توجد توصيات متاحة.", - "cap_planning": "تخطيط البنية التحتية", - "cap_config": "إعدادات", - "cap_max_devices": "أجهزة ماكس", - "cap_max_sessions": "جلسات ماكس", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "سعة الجهاز", - "cap_tier_sessions": "سعة الجلسة", - "cap_tier_bandwidth": "سعة النطاق الترددي", - "cap_single_sqlite": "خادم واحد (SQLite)", - "cap_single_pg": "خادم واحد (PostgreSQL)", - "cap_master_3": "ماستر + 3 مرحلات", - "cap_master_10": "ماجستير + 10 مرحلات", - "rec_no_relays": "لم يتم تكوين أي عقد ترحيل. فكر في إضافة عقد ترحيل لتحسين الأداء والتكرار.", - "rec_devices_high": "استخدام الجهاز مرتفع. فكر في إضافة المزيد من عقد الترحيل لتوزيع الحمل.", - "rec_sessions_high": "سعة الجلسة تقترب من الحد الأقصى. فكر في ترقية البنية التحتية للترحيل.", - "rec_cpu_high": "تُبلغ بعض عقد الترحيل عن استخدام عالٍ لوحدة المعالجة المركزية (CPU). فكر في موازنة التحميل أو ترقيات السعة.", - "rec_all_good": "جميع الأنظمة تعمل ضمن المعلمات العادية. لا يوجد إجراء مطلوب.", - "save": "يحفظ", - "cancel": "يلغي", - "edit": "يحرر", - "delete": "يمسح", - "close": "يغلق", - "no_rules": "لا توجد قواعد التعيين.", - "relays_info_banner": "هذه القائمة إعلامية. يتم تكوين خوادم الترحيل المستخدمة فعليًا من قبل العملاء عبر متغير البيئة RELAY_SERVERS على خادم BetterDesk.", - "relay_name_address_required": "الاسم والعنوان مطلوبان.", - "relay_save_failed": "فشل حفظ عقدة الترحيل.", - "relay_delete_failed": "فشل حذف عقدة الترحيل.", - "relay_saved": "تم حفظ عقدة التتابع.", - "relay_deleted": "تم حذف عقدة الترحيل.", - "rule_name_value_required": "مطلوب اسم القاعدة وقيمة المطابقة.", - "rule_save_failed": "فشل حفظ القاعدة.", - "rule_delete_failed": "فشل حذف القاعدة.", - "rule_saved": "تم حفظ القاعدة.", - "rule_deleted": "تم حذف القاعدة." - }, - "cross_platform": { - "title": "التوافق عبر الأنظمة الأساسية", - "tab_matrix": "مصفوفة التوافق", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "مصفوفة دعم الميزات عبر جميع الأنظمة الأساسية المدعومة. الأخضر = الدعم الكامل، الأصفر = جزئي، الرمادي = غير متوفر، الأزرق = المخطط له.", - "col_feature": "Feature", - "legend_full": "الدعم الكامل", - "legend_partial": "دعم جزئي", - "legend_none": "غير متوفر", - "legend_planned": "Planned", - "platform_breakdown": "انهيار المنصة", - "arch_breakdown": "انهيار الهندسة المعمارية", - "version_breakdown": "انهيار الإصدار", - "summary": "Summary", - "total_devices": "إجمالي الأجهزة", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "إصدارات العميل", - "no_devices": "لم يتم تسجيل أي أجهزة حتى الآن.", - "protocols_hint": "يضمن التفاوض بشأن قدرة البروتوكول أن يحصل كل عميل على الميزات التي يدعمها فقط. يقوم الخادم بتكييف السلوك بناءً على الإمكانيات المبلغ عنها.", - "capability_negotiation": "التفاوض على القدرات", - "codec_support": "دعم برنامج الترميز (الأجهزة المتصلة بالإنترنت)", - "feature_support": "دعم الميزات (الأجهزة المتصلة بالإنترنت)", - "no_codec_data": "لا توجد بيانات ترميز متاحة من الأجهزة المتصلة بالإنترنت.", - "no_feature_data": "لا تتوفر بيانات الميزات من الأجهزة المتصلة بالإنترنت.", - "protobuf_schema": "مخطط ClientCapabilities Protobuf", - "diagram_client": "Client", - "diagram_server": "خادم BetterDesk", - "diagram_peer": "النظير البعيد", - "limitations_hint": "تحتوي كل منصة على قيود محددة تؤثر على الميزات المتوفرة. قم بمراجعة هذه القيود عند التخطيط لعمليات النشر.", - "feat_desktop_client": "عميل سطح المكتب", - "feat_background_agent": "وكيل الخلفية", - "feat_remote_target": "الهدف البعيد", - "feat_screen_capture": "التقاط الشاشة", - "feat_input_injection": "حقن الإدخال", - "feat_file_transfer": "نقل الملفات", - "feat_clipboard_sync": "مزامنة الحافظة", - "feat_audio_streaming": "تدفق الصوت", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "يلزم رفع UAC لتثبيت الخدمة وإدخال الإدخال على أجهزة الكمبيوتر المكتبية الآمنة.", - "limit_win_service": "يعمل كخدمة NSSM؛ يتطلب امتيازات المسؤول للتثبيت.", - "limit_win_firewall": "يجب أن تسمح قواعد جدار الحماية Windows بالمنافذ 21115-21119 لاتصالات الترحيل.", - "limit_linux_wayland": "يقوم مؤلفو Wayland بتقييد التقاط الشاشة البرمجي؛ مطلوب بوابة PipeWire API.", - "limit_linux_pipewire": "التقاط الصوت يتطلب PipeWire؛ احتياطي PulseAudio متاح ولكنه محدود.", - "limit_linux_arm": "إصدارات ARM64 متاحة؛ قد تستخدم بعض برامج الترميز فك تشفير البرامج (أبطأ).", - "limit_mac_screen": "مطلوب إذن تسجيل الشاشة في تفضيلات النظام > الخصوصية والأمان.", - "limit_mac_signing": "يجب أن يتم توقيع الوكيل باستخدام معرف Apple Developer للتوزيع.", - "limit_mac_notarize": "التوثيق مطلوب لـ macOS Gatekeeper (توزيع غير متجر التطبيقات).", - "limit_android_projection": "يتطلب MediaProjection API موافقة المستخدم لكل جلسة التقاط للشاشة.", - "limit_android_accessibility": "يتطلب حقن الإدخال AccessibilityService؛ مقيد في Android 14+.", - "limit_android_battery": "خدمة الخلفية محدودة بوضع Doze؛ قد يتطلب إعفاء تحسين البطارية.", - "limit_ios_capture": "تحظر شركة Apple التقاط الشاشة في الخلفية؛ وضع العارض فقط مدعوم.", - "limit_ios_input": "لا يسمح بإدخال الحقن؛ المشاهدة عن بعد والدردشة فقط.", - "limit_ios_appstore": "التوزيع عبر متجر التطبيقات فقط؛ TestFlight للاختبار التجريبي.", - "limit_web_https": "يتطلب WebCodecs API وWebRTC HTTPS؛ يعود HTTP إلى JMuxer (برامج الترميز المحدودة).", - "limit_web_codec": "يعتمد دعم برنامج الترميز على المتصفح؛ H.264 مدعوم على نطاق واسع، VP9/AV1 يختلف.", - "limit_web_performance": "الأداء محدود بواسطة وضع حماية المتصفح؛ لا يوجد تسريع مباشر للأجهزة.", - "limit_chrome_crostini": "دعم الوكيل الكامل فقط داخل حاوية Crostini Linux.", - "limit_chrome_pwa": "يوفر وضع PWA ميزات الويب فقط؛ لا توجد قدرات الوكيل الأصلي.", - "limit_chrome_input": "حقن الإدخال غير مدعوم خارج حاوية Crostini.", - "feat_session_recording": "تسجيل الجلسة", - "feat_multi_monitor": "متعدد الشاشات", - "feat_unattended_access": "الوصول دون مشغّل", - "limit_win_virtual_account": "تعمل الخدمات تحت حسابات افتراضية معزولة بدلًا من LocalSystem؛ قد تحتاج مسارات السجلات المخصصة إلى ضبط ACL.", - "limit_linux_unprivileged": "تعمل الخدمات كحساب مخصص غير مميز 'betterdesk' مع تصليب systemd (NoNewPrivileges، ProtectSystem=strict)." - }, - "security_audit": { - "title": "التدقيق الأمني", - "tab_overview": "ملخص", - "tab_events": "أحداث التدقيق", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "نقاط الأمان", - "failed_logins": "عمليات تسجيل الدخول الفاشلة (24 ساعة)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "المفاتيح القديمة (> 90 د)", - "security_checks": "الشيكات الأمنية", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket آمن", - "enabled": "ممكّن", - "disabled": "عاجز", - "all_events": "All Events", - "event_login_failed": "فشل تسجيل الدخول", - "event_login_success": "نجاح تسجيل الدخول", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "تم تغيير التكوين", - "event_key_created": "تم إنشاء المفتاح", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "لم يتم العثور على أحداث التدقيق.", - "hardening_hint": "أولويات تعزيز الأمان لنشر BetterDesk. يتم ترتيب العناصر حسب الخطورة.", - "no_hardening": "لا توجد عناصر تصلب المتاحة.", - "vuln_hint": "نتائج فحص ثغرة التبعية. قم بتشغيل تدقيق npm بانتظام للحفاظ على أمان التبعيات.", - "no_vulns": "لم يتم العثور على نقاط الضعف. تبعياتك آمنة." - }, - "languages": { - "title": "إدارة اللغة", - "total_languages": "إجمالي اللغات", - "fully_translated": "مترجمة بالكامل", - "needs_review": "يحتاج إلى مراجعة", - "reference_keys": "المفاتيح المرجعية", - "no_languages": "لم يتم العثور على ملفات اللغة.", - "badge_reference": "Reference", - "badge_review": "يحتاج إلى مراجعة", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "عرض مفقود", - "fix_missing": "Fix Missing", - "missing_keys_for": "مفاتيح مفقودة ل", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "و{n} المزيد...", - "all_keys_present": "جميع المفاتيح موجودة!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "يجب ترجمة المفاتيح المفقودة في {code} يدويًا.", - "no_fix_needed": "لا توجد مفاتيح مفقودة لإصلاحها." - }, - "resource_control": { - "title": "التحكم في الموارد", - "tab_overview": "ملخص", - "tab_usb": "USB Control", - "tab_optical": "محركات الأقراص الضوئية", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "حصص الموارد", - "compliance_by_category": "الامتثال حسب الفئة", - "device_compliance": "امتثال الجهاز", - "search_devices": "أجهزة البحث...", - "col_device": "جهاز", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "إجمالي الأجهزة", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "معدل الامتثال", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "تكوين", - "no_devices": "لم يتم العثور على أي أجهزة", - "usb_title": "التحكم في المنافذ USB", - "usb_hint": "التحكم في الوصول إلى جهاز تخزين USB للجهاز المحدد أو السياسة الافتراضية على مستوى المؤسسة.", - "usb_storage_policy": "سياسة التخزين USB", - "usb_whitelist": "الأجهزة المدرجة في القائمة البيضاء (جهاز واحد لكل سطر)", - "usb_whitelist_hint": "VID:PID (على سبيل المثال 0781:5583)", - "usb_audit_log": "تسجيل اتصالات جهاز USB", - "optical_title": "التحكم في محرك الأقراص الضوئية", - "optical_hint": "التحكم في الوصول إلى محرك الأقراص المضغوطة/أقراص DVD/Blu-ray للجهاز المحدد.", - "optical_policy": "سياسة محرك الأقراص الضوئية", - "optical_audit_log": "تسجيل الوصول إلى محرك الأقراص الضوئية", - "monitors_title": "إدارة المراقبة", - "monitors_hint": "قم بتكوين إعدادات الشاشة بما في ذلك الحد الأقصى للعدد وفرض الدقة والسطوع وجداول الطاقة.", - "monitors_max_count": "الحد الأقصى للشاشات (0 = غير محدود)", - "monitors_max_hint": "0 يعني لا يوجد حد", - "monitors_resolution": "ماكس القرار", - "monitors_brightness": "حد السطوع", - "monitors_power_schedule": "جدول الطاقة", - "monitors_power_hint": "على سبيل المثال إيقاف:22:00-06:00", - "disks_title": "التحكم في الوصول إلى القرص", - "disks_hint": "قم بتكوين سياسات الوصول إلى القرص بما في ذلك وضع القراءة فقط وفرض التشفير ورؤية القسم.", - "disks_readonly": "فرض وضع القراءة فقط", - "disks_encryption": "تتطلب التشفير (BitLocker/LUKS)", - "disks_smart": "تمكين S.M.A.R.T. يراقب", - "disks_hidden": "الأقسام المخفية", - "disks_hidden_hint": "أحرف محركات أقراص مفصولة بفواصل أو نقاط تحميل", - "quotas_title": "حصص الموارد", - "quotas_hint": "قم بتعيين وحدة المعالجة المركزية (CPU) وذاكرة الوصول العشوائي (RAM) وعرض النطاق الترددي وحصص القرص لكل مستخدم للجهاز المحدد.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "حد النطاق الترددي (ميجابت في الثانية)", - "quotas_bandwidth_hint": "0 = غير محدود", - "quotas_disk_quota": "حصة القرص (جيجابايت)", - "quotas_disk_hint": "0 = غير محدود", - "quotas_process_whitelist": "القائمة البيضاء للعملية (واحدة لكل سطر)", - "quotas_process_hint": "على سبيل المثال chrome.exe، code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "القائمة البيضاء فقط", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "تحديثات البرامج", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "النسخة المثبتة", - "latest_version": "Latest version", - "status": "Status", - "check_now": "التحقق من وجود تحديثات", - "checking": "Checking…", - "up_to_date": "حتى الآن", - "update_available": "التحديث متاح", - "changelog": "Release Notes", - "no_changelog": "لا توجد ملاحظات الإصدار المتاحة", - "files_changed": "تغيرت الملفات", - "files": "ملفات", - "changes_unavailable": "تعذر تحميل قائمة تغيير الملفات. لا يزال بإمكانك تثبيت التحديث.", - "create_backup": "إنشاء نسخة احتياطية قبل التحديث", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "جارٍ تثبيت التحديث...", - "creating_backup": "جارٍ إنشاء نسخة احتياطية…", - "downloading": "جارٍ تنزيل الملفات…", - "install_success": "تم تثبيت التحديث بنجاح. جاري إعادة تشغيل وحدة التحكم...", - "install_failed": "فشل تثبيت التحديث", - "restarting": "في انتظار إعادة تشغيل وحدة التحكم...", - "restart_complete": "تمت إعادة تشغيل وحدة التحكم بنجاح", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "لم يتم تحديد إصدار التحديث. تحقق من وجود تحديثات أولاً.", - "backups_title": "تحديث النسخ الاحتياطية", - "backups_desc": "يتم إنشاء النسخ الاحتياطية قبل التحديث تلقائيًا قبل كل تحديث", - "no_backups": "لم يتم العثور على نسخ احتياطية للتحديث", - "restore": "Restore", - "restore_confirm": "هل أنت متأكد أنك تريد الاستعادة من هذه النسخة الاحتياطية؟ سيتم الكتابة فوق الملفات التي تم تغييرها.", - "restore_success": "تمت استعادة النسخة الاحتياطية بنجاح. جاري إعادة تشغيل وحدة التحكم...", - "baseline_set": "مجموعة خط الأساس", - "commits_behind": "يرتكب وراء", - "total_files": "إجمالي الملفات", - "applied": "Applied", - "failed": "فشل", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "اذهب الخادم", - "component_agent": "Agent", - "component_scripts": "البرامج النصية وDocker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "التحقق من الذهاب…", - "go_not_found": "اذهب غير مثبت", - "go_check_failed": "تعذر التحقق من توفر Go", - "server_building": "تجميع Go server... قد يستغرق هذا بضع دقائق.", - "server_built": "الخادم الثنائي المترجمة", - "server_build_failed": "فشل تجميع الخادم", - "server_stale_title": "الخادم الثنائي قديم", - "server_stale_desc": "تم تحديث مصدر Go server ولكن لم تتم إعادة بناء الثنائي قيد التشغيل. أعد بنائه الآن لتطبيق تحديثات الأمان والمكتبة.", - "rebuild_server": "إعادة بناء الخادم الثنائي", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "تمت إعادة بناء الخادم الثنائي وإعادة تشغيله", - "rebuild_server_failed": "فشلت عملية إعادة البناء الثنائية للخادم", - "server_deployed": "تم نشر الخادم الثنائي", - "server_deploy_failed": "فشل نشر الخادم", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "جارٍ تنزيل مصدر الخادم…", - "delete": "يمسح", - "delete_confirm": "هل تريد حذف النسخة الاحتياطية {name} نهائيًا؟ لا يمكن التراجع عن هذا.", - "delete_success": "تم حذف النسخة الاحتياطية", - "delete_failed": "فشل في حذف النسخة الاحتياطية", - "retention_label": "احتفظ بأحدث النسخ الاحتياطية لـ N", - "retention_hint": "يتم حذف النسخ الاحتياطية الأقدم تلقائيًا بعد كل تحديث. استخدم 0 للاحتفاظ بجميع النسخ الاحتياطية.", - "retention_saved": "تم حفظ إعداد الاحتفاظ", - "retention_invalid": "يجب أن يكون الاحتفاظ عددًا صحيحًا بين 0 و1000", - "retention_required_for_prune": "قم بتعيين قيمة الاحتفاظ أكبر من 0 أولاً", - "prune_now": "Apply now", - "prune_confirm": "هل تحتفظ فقط بأحدث النسخ الاحتياطية لـ {n} وتحذف الباقي؟", - "prune_done": "النسخ الاحتياطية {n} المشذبة", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "طريقة التحديث", - "strategy_download": "قم بتنزيل البرنامج الثنائي المدمج مسبقًا", - "strategy_compile": "تجميع من المصدر", - "both_available": "تحميل وتجميع", - "download_available": "التنزيل متاح", - "no_method": "لا توجد طريقة التحديث", - "no_release": "No release", - "available": "متاح", - "server_downloading": "جارٍ تنزيل الملف الثنائي للخادم...", - "server_downloaded": "تم تنزيل الخادم الثنائي", - "server_download_failed": "فشل التنزيل الثنائي للخادم", - "server_download_note": "سيتم تنزيل ملف ثنائي تم إنشاؤه مسبقًا من إصدارات GitHub. يستغرق هذا عادة أقل من دقيقة.", - "install_go_hint": "قم بتثبيت Go من https://go.dev/dl/ لتمكين التجميع أو نشر إصدار باستخدام الثنائيات المعدة مسبقًا", - "strategy_install_go": "التثبيت التلقائي Go والترجمة", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "إعادة البناء التلقائي جاهزة", - "toolchain_ready": "تم تثبيت سلسلة الأدوات", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "جارٍ تنزيل سلسلة أدوات Go...", - "toolchain_failed": "فشل تثبيت سلسلة أدوات Go", - "modal_title": "تثبيت التحديث", - "modal_done_title": "اكتمل التحديث", - "modal_close": "يغلق", - "modal_reload_now": "إعادة تحميل وحدة التحكم", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "ملفات وحدة التحكم", - "phase_server": "مرحلة الخادم", - "phase_restart": "إعادة تشغيل", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "تم تخطي النسخة الاحتياطية (حسب اختيار المستخدم)", - "server_skipped": "تم تخطي Go server", - "server_not_selected": "Go server not selected", - "server_processing": "جارٍ معالجة تحديث Go server…", - "no_restart_needed": "لا يلزم إعادة التشغيل", - "complete": "تم تطبيق التحديث", - "complete_summary": "تم تطبيق التحديث بنجاح.", - "complete_with_errors": "انتهى التحديث، لكن فشلت بعض الخطوات. انظر التفاصيل أدناه.", - "modal_done_with_errors_title": "انتهى التحديث مع وجود أخطاء", - "console_will_restart": "ستتم إعادة تشغيل عملية وحدة التحكم الآن...", - "restart_complete_msg": "انتهت وحدة التحكم من إعادة التشغيل. انقر فوق إعادة تحميل لتحميل الإصدار الجديد. سيتم إعادة تحميل الصفحة تلقائيًا خلال 8 ثوانٍ.", - "refresh_recommended": "تم تغيير الأصول الثابتة — أعد تحميل الصفحة لرؤية واجهة المستخدم الجديدة.", - "confirm_title": "تطبيق التحديث", - "confirm_with_backup": "سيتم إنشاء نسخة احتياطية للتحديث المسبق تلقائيًا.", - "confirm_no_backup": "لن يتم إنشاء نسخة احتياطية (تابع على مسؤوليتك الخاصة)." - }, - "permissions": { - "title": "الأذونات", - "subtitle": "إدارة الأذونات المستندة إلى الأدوار والتجاوزات المخصصة", - "info_title": "كيفية عمل الأذونات", - "info_desc": "كل دور له أذونات افتراضية. يمكنك إضافة أو إزالة الأذونات الفردية لكل دور عن طريق تبديلها أدناه. يتم تمييز التجاوزات المخصصة ويمكن إعادتها إلى الإعدادات الافتراضية في أي وقت.", - "select_role": "حدد الدور", - "select_role_placeholder": "اختيار الدور...", - "reset_overrides": "إعادة تعيين كافة التجاوزات", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "على مستوى الخادم", - "custom": "Custom", - "default": "Default", - "revert": "العودة إلى الوضع الافتراضي", - "saved": "تم تحديث الإذن", - "reverted": "عادت إلى الوضع الافتراضي", - "all_reverted": "تم إرجاع جميع التجاوزات", - "confirm_reset": "هل تريد إعادة تعيين جميع التجاوزات المخصصة لهذا الدور إلى الإعدادات الافتراضية؟", - "empty_title": "حدد دورًا", - "empty_desc": "اختر دورًا من القائمة المنسدلة أعلاه لعرض أذوناته وإدارتها.", - "locked_title": "Super Admin", - "locked_desc": "يتمتع المشرف المتميز بجميع الأذونات بشكل افتراضي ولا يمكن تخصيصها.", - "cat_device": "الأجهزة", - "cat_user": "Users", - "cat_server": "الخادم", - "cat_org": "المنظمات", - "cat_audit": "التدقيق والمراقبة", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "عرض الأجهزة", - "perm_device_connect": "الاتصال بالأجهزة", - "perm_device_edit": "تحرير الأجهزة", - "perm_device_delete": "حذف الأجهزة", - "perm_device_ban": "حظر / إلغاء الحظر على الأجهزة", - "perm_device_change_id": "تغيير معرف الجهاز", - "perm_user_view": "عرض المستخدمين", - "perm_user_create": "إنشاء المستخدمين", - "perm_user_edit": "تحرير المستخدمين", - "perm_user_delete": "حذف المستخدمين", - "perm_server_config": "تكوين الخادم", - "perm_server_keys": "إدارة مفاتيح API", - "perm_org_create": "إنشاء المنظمات", - "perm_org_edit": "تحرير المنظمات", - "perm_org_delete": "حذف المنظمات", - "perm_org_manage_users": "إدارة مستخدمي المؤسسة", - "perm_org_manage_devices": "إدارة أجهزة المنظمة", - "perm_audit_view": "عرض سجلات التدقيق", - "perm_metrics_view": "عرض المقاييس", - "perm_blocklist_edit": "تحرير القائمة المحظورة", - "perm_cdap_view": "عرض أجهزة CDAP", - "perm_cdap_command": "إرسال أوامر CDAP", - "perm_cdap_terminal": "الوصول إلى محطة CDAP", - "perm_cdap_files": "الوصول إلى الملفات CDAP", - "perm_enrollment_manage": "إدارة التسجيل", - "perm_enrollment_approve": "الموافقة على الالتحاق", - "perm_chat_access": "Chat access", - "perm_branding_edit": "تحرير العلامات التجارية", - "perm_server_attestation": "اعتماد أداء الخادم" - }, - "notifications": { - "title": "إشعارات", - "empty": "لا توجد إشعارات جديدة", - "mark_all_read": "وضع علامة على كل قراءة", - "see_all": "شاهد جميع طلبات المساعدة", - "help_request": "طلب مساعدة", - "just_now": "just now" - }, - "accessibility": { - "title": "إمكانية الوصول", - "subtitle": "اضبط وحدة التحكم للرؤية والحركة والقراءة.", - "close": "إغلاق قائمة إمكانية الوصول", - "profiles": "ملفات تعريف سريعة", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "نص أكبر وتباين قوي وتركيز.", - "profile_dyslexia": "راحة القراءة", - "profile_dyslexia_hint": "خط قابل للقراءة وتباعد أوسع.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "تقليل التحولات وإيقاف الرسوم المتحركة مؤقتًا.", - "profile_color_assist": "دعم اللون", - "profile_color_assist_hint": "مرشح الألوان والعلامات والروابط المميزة.", - "reading": "القراءة", - "font_size": "حجم النص", - "line_height": "ارتفاع السطر", - "letter_spacing": "تباعد الحروف", - "word_spacing": "تباعد الكلمات", - "readable_font": "خط قابل للقراءة", - "readable_font_hint": "يستخدم أشكال حروف واسعة ومألوفة.", - "dyslexia_spacing": "تباعد عسر القراءة", - "dyslexia_spacing_hint": "يضيف مسافة إضافية للنص الطويل.", - "visual": "مرئي", - "contrast": "التباين", - "contrast_normal": "Normal", - "contrast_high_dark": "الظلام عالية التباين", - "contrast_high_light": "ضوء عالي التباين", - "contrast_yellow_black": "أصفر على أسود", - "color_filter": "مرشح رؤية الألوان", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "تشبع اللون", - "underline_links": "تسطير الروابط", - "underline_links_hint": "يجعل الروابط مرئية دون الاعتماد على اللون.", - "highlight_links": "تسليط الضوء على الإجراءات", - "highlight_links_hint": "الخطوط العريضة للروابط والأزرار.", - "highlight_headings": "تسليط الضوء على العناوين", - "highlight_headings_hint": "وضع علامات على عناوين الأقسام باستخدام شريط الألوان.", - "hide_media": "Dim media", - "hide_media_hint": "يعتم الصور ومقاطع الفيديو واللوحات الفنية.", - "interaction": "التفاعل", - "strong_focus": "تركيز قوي", - "strong_focus_hint": "يظهر حلقة تركيز كبيرة للوحة المفاتيح.", - "large_cursor": "مؤشر كبير", - "large_cursor_hint": "يستخدم مؤشرًا أكبر عالي التباين.", - "reduce_motion": "تقليل الحركة", - "reduce_motion_hint": "تقصير التحولات والتمرير السلس.", - "pause_animations": "وقفة الرسوم المتحركة", - "pause_animations_hint": "توقف تكرار الحركة البصرية.", - "reading_guide": "دليل القراءة", - "reading_guide_hint": "يتبع المؤشر بخط مشرق.", - "reading_mask": "قناع القراءة", - "reading_mask_hint": "يعتم المحتوى أعلى وأسفل المؤشر.", - "preview": "معاينة", - "preview_title": "معاينة مساحة عمل المشغل", - "preview_text": "تحقق مما إذا كانت النصوص والروابط وعناصر التحكم وتسميات الحالة مريحة للقراءة قبل إغلاق هذه القائمة.", - "preview_link": "رابط تفاصيل الجهاز", - "preview_status": "Online", - "preview_button": "العمل الأساسي", - "preview_secondary": "Secondary", - "reset": "إعادة تعيين", - "done": "تم" - }, - "server_mgmt": { - "title": "إدارة الخادم", - "subtitle": "طائرة تحكم تشبه قمرة القيادة لمضيف وحدة التحكم BetterDesk (BETA).", - "beta_tooltip": "ميزة بيتا - قيد التطوير النشط.", - "notice_title": "ميزة بيتا", - "notice_body": "تعمل هذه الأدوات على المضيف حيث توجد عملية وحدة التحكم BetterDesk. يتم تدقيق جميع العمليات. سيتم توسيع نطاق الميزة في الإصدارات المستقبلية.", - "tab_overview": "نظرة عامة", - "tab_terminal": "الطرفية", - "tab_files": "الملفات", - "tab_services": "الخدمات", - "cpu": "CPU", - "memory": "الذاكرة", - "load": "متوسط ​​التحميل", - "disks": "الأقراص", - "history": "التاريخ (آخر 60 عينة)", - "host_info": "Host info", - "cores": "cores", - "uptime": "وقت التشغيل", - "no_disks": "لا توجد بيانات القرص المتاحة", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "بي تي واي متاح", - "term_connect": "اتصال", - "term_disconnect": "قطع الاتصال", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "خطأ في الاتصال", - "term_warning": "تعمل الأوامر كمستخدم يملك عملية وحدة التحكم. أضف قاعدة sudoers لتمكين الارتفاع.", - "term_hint": "نصيحة: اكتب `sudo -i` للتصعيد (يتطلب تكوين sudoers).", - "term_lib_failed": "فشل تحميل المكتبة الطرفية", - "files_up": "أعلى مستوى واحد", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "دليل فارغ", - "files_error": "فشل في سرد ​​الدليل", - "read_failed": "فشل في قراءة الملف", - "save_failed": "فشل حفظ الملف", - "rename_failed": "فشلت إعادة التسمية", - "delete_failed": "فشل الحذف", - "delete_confirm": "هل تريد حذف هذا الإدخال؟", - "mkdir_prompt": "اسم المجلد الجديد:", - "mkdir_failed": "فشل في إنشاء المجلد", - "file_saved": "تم حفظ الملف", - "binary_warn": "ملف ثنائي — معاينة فقط", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "خدمات البحث...", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "لم يتم العثور على الخدمات", - "svc_load_failed": "فشل في تحميل الخدمات", - "svc_action_failed": "فشل الإجراء", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "إعادة تشغيل", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "تنزيل وكيل BetterDesk", - "choose_platform": "اختر النظام الأساسي الخاص بك", - "choose_platform_hint": "حدد المثبت الذي يتوافق مع نظام التشغيل الخاص بك.", - "download": "تحميل", - "building": "مبنى…", - "failed": "فشل البناء", - "need_help": "بحاجة الى مساعدة؟", - "powered_by": "مدعوم من" - }, - "server_attestation": { - "title": "اعتماد أداء الخادم", - "subtitle": "اختبار أداء معياري يحدد طاقة الاتصالات عن بُعد المتزامنة عند عتبة 80% من وحدة المعالجة المركزية والذاكرة والقرص.", - "warning_title": "اختبار الحمل", - "warning_body": "يحاكي الاختبار المعياري اتصالات WebSocket المتوازية بخوادم الإشارة والترحيل. شغّله خلال ساعات الذروة المنخفضة — هذا الاختبار يُحمّل بيئة الإنتاج.", - "run_benchmark": "تشغيل الاختبار المعياري", - "abort": "إلغاء", - "download_report": "تنزيل تقرير JSON", - "last_test": "آخر اختبار", - "no_test_yet": "لم يُجرَ أي اختبار معياري حتى الآن", - "max_connections": "الحد الأقصى للاتصالات", - "threshold_80": "عتبة 80% — المقاييس النهائية", - "disk": "القرص", - "ramp_chart": "مخطط تصاعد الحمل", - "connections": "الاتصالات", - "connections_short": "اتصال", - "tier_guide_title": "ماذا يعني كل مستوى؟", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 اتصالًا متزامنًا — VPS صغير (1–2 vCPU، 2–4 GB RAM).", - "tier_iron_desc": "26–75 اتصالًا — خادم متوسط المستوى (2–4 vCPU، 4–8 GB RAM).", - "tier_platinum_desc": "76–200 اتصال — خادم عالي الأداء (4–8 vCPU، 8–16 GB RAM).", - "tier_titanium_desc": "201–400 اتصال — بنية تحتية للمؤسسات (8+ vCPU، 16–32 GB RAM).", - "tier_obsidian_desc": "401+ اتصال — فئة توربو: أجهزة مخصصة، 16+ vCPU، 32+ GB RAM، NVMe.", - "docker_note": "ملاحظة: في Docker، قد تعكس مقاييس وحدة المعالجة المركزية/الذاكرة حدود الحاوية لا المضيف الفعلي.", - "badge_tooltip": "BetterDesk Server Attestation — اعتماد أداء الخادم", - "confirm_run": "سيُجري هذا الاختبار المعياري اختبار حمل للخادم باتصالات محاكاة. هل تريد المتابعة؟", - "starting": "جارٍ البدء…", - "complete": "اكتمل الاختبار المعياري", - "signal_peers": "نظراء الإشارة", - "relay_sessions": "جلسات الترحيل", - "page_error": "فشل تحميل صفحة اعتماد الخادم", - "mode_estimated": "مقدَّر (WebSocket غير متاح)", - "incomplete": "انتهى الاختبار المعياري بدون مستوى صالح" + "form": { + "cancel": "إلغاء" } + } } diff --git a/web-nodejs/lang/cs.json b/web-nodejs/lang/cs.json index 258080ec..e188222a 100644 --- a/web-nodejs/lang/cs.json +++ b/web-nodejs/lang/cs.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "cs", - "name": "Czech", - "native_name": "Čeština", - "direction": "ltr" + "meta": { + "lang": "cs", + "name": "Czech", + "native_name": "Čeština", + "direction": "ltr" + }, + "common": { + "loading": "Načítání...", + "confirm": "Potvrdit", + "alert": "Upozornění", + "prompt": "Zadejte hodnotu", + "copied": "Zkopírováno do schránky", + "save": "Uložit", + "saved": "Uloženo", + "error": "Chyba", + "success": "Úspěch", + "warning": "Varování", + "info": "Informace", + "all": "Vše", + "cancel": "Zrušit", + "delete": "Smazat", + "actions": "Akce", + "close": "Zavřít", + "required": "povinné", + "name_required": "Název je povinný", + "active": "Aktivní", + "inactive": "Neaktivní", + "invalid_json": "Neplatný JSON", + "field_required": "Pole {field} je povinné", + "back": "Zpět", + "edit": "Upravit", + "yes": "Ano", + "no": "Ne" + }, + "nav": { + "main": "Hlavní", + "tools": "Nástroje", + "system": "Systém", + "dashboard": "Nástěnka", + "devices": "Zařízení", + "keys": "Klíče", + "generator": "Generátor", + "settings": "Nastavení", + "users": "Uživatelé", + "inventory": "Inventář", + "tickets": "Tickety", + "help_requests": "Žádosti o pomoc", + "activity": "Aktivity", + "automation": "Automatizace", + "file_transfer": "Přenos souborů", + "network": "Síť", + "dataguard": "DataGuard", + "reports": "Výkazy", + "tenants": "Tenanti", + "registrations": "Registrace", + "management": "Správa", + "toggle_sidebar": "Zobrazit/skrýt boční panel", + "cdap": "CDAP zařízení", + "fleet": "Flota", + "scaling": "Škálování", + "cross_platform": "Přes-platformní", + "tokens": "Tokeny zařízení", + "organizations": "Organizace", + "policies": "Politiky", + "attestation": "Attestace", + "remote": "Vzdálená plocha", + "toolkit": "Nástrojová sada", + "security_audit": "Bezpečnostní audit", + "languages": "Jazyky", + "resource_control": "Řízení zdrojů", + "chat": "Chat", + "help": "Nápověda", + "expand_sidebar": "Rozšířit boční panel", + "toggle_theme": "Přepnout téma", + "sdk_studio": "SDK Studio", + "login": "Přihlášení", + "permissions": "Oprávnění", + "server_management": "Správa serveru", + "server_attestation": "Atestace serveru", + "commercialization": "Komerce" + }, + "auth": { + "login": "Přihlášení", + "logout": "Odhlášení", + "login_title": "Přihlásit se", + "login_subtitle": "Přihlaste se do konzole BetterDesk", + "username": "Uživatelské jméno", + "username_placeholder": "Zadejte uživatelské jméno", + "password": "Heslo", + "password_placeholder": "Zadejte heslo", + "remember_me": "Zapamatovat mě", + "login_failed": "Přihlášení selhalo. Zkontrolujte prosím své přihlašovací údaje.", + "invalid_credentials": "Neplatné uživatelské jméno nebo heslo.", + "username_collision": "Místní účet s tímto uživatelským jménem již existuje. Přihlaste se místním heslem nebo požádejte správce o přejmenování či odstranění konfliktního účtu.", + "fill_all_fields": "Vyplňte prosím všechna pole", + "logout_confirm": "Opravdu se chcete odhlásit?", + "change_password": "Změnit heslo", + "password_required": "Heslo je povinné", + "totp_title": "Dvoufaktorová autentizace", + "totp_subtitle": "Zadejte 6místný kód z vaší autentizační aplikace", + "totp_code": "Ověřovací kód", + "totp_verify": "Ověřit", + "totp_use_recovery": "Použít záchranný kód místo toho", + "totp_use_code": "Použít kód z autentizátoru místo toho", + "totp_recovery_code": "Záchranný kód", + "totp_back_to_login": "Zpět na přihlášení", + "totp_invalid_code": "Neplatný ověřovací kód. Zkuste to prosím znovu.", + "totp_enter_code": "Zadejte prosím 6místný kód", + "totp_enter_recovery": "Zadejte prosím záchranný kód", + "totp_session_expired": "Relace vypršela. Přihlaste se prosím znovu.", + "totp_already_enabled": "Dvoufaktorová autentizace je již povolena", + "pro_only_account": "Tento účet je pouze pro desktopový klient RustDesk. Použijte prosím aplikaci RustDesk k přihlášení.", + "passwords_mismatch": "Hesla se neshodují", + "or": "nebo", + "login_sso": "Přihlásit se pomocí SSO", + "login_sso_with": "Přihlásit se přes {{provider}}", + "oidc_denied": "Přístup byl zamítnut poskytovatelem identity.", + "oidc_invalid": "Neplatné zpětné volání OIDC. Zkuste to prosím znovu.", + "oidc_failed": "Ověření OIDC se nezdařilo. Zkuste to prosím znovu.", + "oidc_error": "Při přihlašování pomocí SSO došlo k chybě.", + "oidc_no_account": "Váš účet nebyl nalezen a automatická registrace je vypnutá.", + "totp_rate_limited": "Příliš mnoho pokusů. Zkuste to prosím později.", + "emergency_mode_banner": "Go server je nedostupný — běží nouzový režim (pouze admin, omezené funkce)" + }, + "dashboard": { + "title": "Nástěnka", + "subtitle": "Přehled vašeho serveru RustDesk", + "total_devices": "Celkem zařízení", + "online_now": "Právě online", + "banned": "Zablokováno", + "active_connections": "Aktivní připojení", + "offline_devices": "Offline", + "server_status": "Stav serveru", + "quick_actions": "Rychlé akce", + "manage_devices": "Spravovat připojená zařízení", + "view_keys": "Zobrazit klíče serveru", + "generate_config": "Vygenerovat konfiguraci klienta", + "server_settings": "Nastavit konfiguraci", + "greeting_morning": "Dobré ráno, {name}", + "greeting_afternoon": "Dobré odpoledne, {name}", + "greeting_evening": "Dobrý večer, {name}", + "greeting_night": "Dobrou noc, {name}", + "health_overview": "Přehled stavu", + "devices_online": "Zařízení online", + "active_alerts": "Aktivní upozornění", + "recent_connections": "Celkem zařízení", + "server_uptime": "Doba běhu serveru", + "activity_feed": "Nedávná aktivita", + "no_recent_activity": "Žádná nedávná aktivita", + "just_now": "právě teď", + "ago": "zpět", + "tip_desktop_mode": "Vyzkoušejte režim plochy pro pracovní prostor s více okny a monitorovacími widgety.", + "tip_keyboard_shortcuts": "Stiskněte kdekoliv Ctrl+K pro otevření palety příkazů rychlého vyhledávání.", + "tip_address_book": "Synchronizujte svůj adresář mezi zařízeními přihlášením z klienta RustDesk.", + "tip_2fa": "Povolte v nastavení dvoufaktorovou autentizaci pro vyšší zabezpečení účtu.", + "tip_bulk_actions": "Vyberte více zařízení a spravujte je najednou pomocí hromadných akcí.", + "tip_theme": "Přepínejte mezi tmavým a světlým motivem v nastavení bočního panelu.", + "tip_cdap": "Připojte IoT zařízení a průmyslové senzory přes bránu CDAP.", + "tip_tutorials": "Klikněte na tlačítko nápovědy vpravo dole pro interaktivní návody." + }, + "devices": { + "title": "Zařízení", + "id": "ID", + "hostname": "Název hostitele", + "username": "Uživatelské jméno", + "platform": "Platforma", + "version": "Verze", + "ip_address": "IP adresa", + "note": "Poznámka", + "last_seen": "Naposledy viděno", + "last_online": "Naposledy online", + "first_seen": "První vidění", + "created": "Vytvořeno", + "status": "Stav", + "ban_reason": "Důvod blokování", + "actions": "Akce", + "search_placeholder": "Vyhledat zařízení...", + "filter_all": "Vše", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Zablokováno", + "selected": "vybráno", + "showing": "Zobrazuji", + "of": "z", + "sync_status": "Stav synchronizace", + "sync_success": "Stav úspěšně synchronizován", + "empty_title": "Žádná zařízení nenalezena", + "empty_text": "Žádná zařízení neodpovídají aktuálním filtrům", + "edit_title": "Podrobnosti zařízení", + "delete_title": "Smazat zařízení", + "delete_confirm": "Opravdu chcete smazat zařízení {id}?", + "delete_warning": "Chystáte se natrvalo smazat toto zařízení:", + "delete_permanent": "Tato akce je nevratná. Všechna data spojená s tímto zařízením budou natrvalo odstraněna z databáze.", + "delete_success": "Zařízení úspěšně smazáno", + "revoke_option": "Odebrat zařízení", + "revoke_hint": "Zablokovat ID zařízení a odpojit aktivní připojení", + "revoke_success": "Zařízení úspěšně odebráno", + "details": "Podrobnosti zařízení", + "ban_title": "Blokovat zařízení", + "ban_confirm": "Opravdu chcete blokovat zařízení {id}?", + "ban_success": "Zařízení úspěšně zablokováno", + "unban_title": "Odblokovat zařízení", + "unban_confirm": "Opravdu chcete odblokovat zařízení {id}?", + "unban_success": "Zařízení úspěšně odblokováno", + "change_id": "Změnit ID", + "change_id_title": "Změnit ID zařízení", + "new_id": "Nové ID", + "change_id_hint": "6-16 znaků, pouze písmena, číslice, pomlčky a podtržítka", + "change_id_success": "ID zařízení úspěšně změněno", + "id_length_error": "ID musí mít 6-16 znaků", + "id_format_error": "ID může obsahovat pouze písmena, číslice, pomlčky a podtržítka", + "bulk_delete_title": "Smazat více zařízení", + "bulk_delete_confirm": "Opravdu chcete smazat {count} zařízení?", + "bulk_delete_success": "{count} zařízení úspěšně smazáno", + "columns": "Sloupce", + "toggle_columns": "Přepnout viditelné sloupce", + "not_found": "Zařízení nenalezeno", + "delete_failed": "Selhání mazání zařízení", + "change_id_failed": "Selhání změny ID zařízení", + "invalid_id": "Neplatné ID zařízení (vyžadováno 6-16 znaků)", + "invalid_id_format": "Neplatný formát ID (pouze písmena, číslice, pomlčky, podtržítka)", + "id_exists": "ID zařízení již existuje", + "no_selection": "Žádná zařízení nevybrána", + "device_type": "Typ", + "filter_type_all": "Všechny typy", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Plocha", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP připojeno", + "revoke": "Odebrat", + "access_policy": "Pravidlo přístupu", + "unattended_access": "Nedosledovaný přístup", + "enable_unattended": "Povolit nedosledovaný přístup", + "access_password": "Heslo přístupu", + "password_configured": "Heslo nastaveno", + "no_password": "Žádné heslo", + "new_password": "Nové heslo (nechte prázdné pro zachování současného)", + "clear_password": "Vymazat heslo", + "access_schedule": "Plán přístupu", + "enable_schedule": "Povolit časově omezený přístup", + "allowed_days": "Povolené dny", + "start_time": "Čas zahájení", + "end_time": "Čas ukončení", + "timezone": "Časové pásmo", + "allowed_operators": "Povolení operátoři", + "all_operators": "Všichni operátoři (nechte prázdné)", + "operators_hint": "Uživatelská jména oddělená čárkami. Nechte prázdné pro povolení všech operátorů.", + "last_updated_by": "Naposledy aktualizováno uživatelem", + "access_policy_saved": "Pravidlo přístupu uloženo", + "tabs": { + "overview": "Přehled", + "hardware": "Hardware", + "metrics": "Metriky", + "connections": "Připojení", + "audit": "Audit", + "info": "Informace", + "history": "Historie" }, - "common": { - "loading": "Načítání...", - "confirm": "Potvrdit", - "alert": "Upozornění", - "prompt": "Zadejte hodnotu", - "copied": "Zkopírováno do schránky", - "save": "Uložit", - "saved": "Uloženo", - "error": "Chyba", - "success": "Úspěch", - "warning": "Varování", - "info": "Informace", - "all": "Vše", - "cancel": "Zrušit", - "delete": "Smazat", - "actions": "Akce", - "close": "Zavřít", - "required": "povinné", - "name_required": "Název je povinný", - "active": "Aktivní", - "inactive": "Neaktivní", - "invalid_json": "Neplatný JSON", - "field_required": "Pole {field} je povinné", - "back": "Zpět", - "edit": "Upravit", - "yes": "Ano", - "no": "Ne" + "hardware": { + "cpu": "Procesor", + "memory": "Paměť", + "disk": "Disk", + "os": "Operační systém", + "hostname": "Název hostitele", + "uptime": "Doba běhu", + "load_avg": "Průměrné zatížení", + "network": "Síťové adaptéry", + "no_data": "Žádná data o hardwaru nejsou k dispozici", + "title": "Informace o hardwaru", + "gpu": "Grafická karta" }, - "nav": { - "main": "Hlavní", - "tools": "Nástroje", - "system": "Systém", - "dashboard": "Nástěnka", - "devices": "Zařízení", - "keys": "Klíče", - "generator": "Generátor", - "settings": "Nastavení", - "users": "Uživatelé", - "inventory": "Inventář", - "tickets": "Tickety", - "help_requests": "Žádosti o pomoc", - "activity": "Aktivity", - "automation": "Automatizace", - "file_transfer": "Přenos souborů", - "network": "Síť", - "dataguard": "DataGuard", - "reports": "Výkazy", - "tenants": "Tenanti", - "registrations": "Registrace", - "management": "Správa", - "toggle_sidebar": "Zobrazit/skrýt boční panel", - "cdap": "CDAP zařízení", - "fleet": "Flota", - "scaling": "Škálování", - "cross_platform": "Přes-platformní", - "tokens": "Tokeny zařízení", - "organizations": "Organizace", - "policies": "Politiky", - "attestation": "Attestace", - "remote": "Vzdálená plocha", - "toolkit": "Nástrojová sada", - "security_audit": "Bezpečnostní audit", - "languages": "Jazyky", - "resource_control": "Řízení zdrojů", - "chat": "Chat", - "help": "Nápověda", - "expand_sidebar": "Rozšířit boční panel", - "toggle_theme": "Přepnout téma", - "sdk_studio": "SDK Studio", - "login": "Přihlášení", - "permissions": "Oprávnění", - "server_management": "Správa serveru", - "server_attestation": "Atestace serveru" - }, - "auth": { - "login": "Přihlášení", - "logout": "Odhlášení", - "login_title": "Přihlásit se", - "login_subtitle": "Přihlaste se do konzole BetterDesk", - "username": "Uživatelské jméno", - "username_placeholder": "Zadejte uživatelské jméno", - "password": "Heslo", - "password_placeholder": "Zadejte heslo", - "remember_me": "Zapamatovat mě", - "login_failed": "Přihlášení selhalo. Zkontrolujte prosím své přihlašovací údaje.", - "invalid_credentials": "Neplatné uživatelské jméno nebo heslo.", - "username_collision": "Místní účet s tímto uživatelským jménem již existuje. Přihlaste se místním heslem nebo požádejte správce o přejmenování či odstranění konfliktního účtu.", - "fill_all_fields": "Vyplňte prosím všechna pole", - "logout_confirm": "Opravdu se chcete odhlásit?", - "change_password": "Změnit heslo", - "password_required": "Heslo je povinné", - "totp_title": "Dvoufaktorová autentizace", - "totp_subtitle": "Zadejte 6místný kód z vaší autentizační aplikace", - "totp_code": "Ověřovací kód", - "totp_verify": "Ověřit", - "totp_use_recovery": "Použít záchranný kód místo toho", - "totp_use_code": "Použít kód z autentizátoru místo toho", - "totp_recovery_code": "Záchranný kód", - "totp_back_to_login": "Zpět na přihlášení", - "totp_invalid_code": "Neplatný ověřovací kód. Zkuste to prosím znovu.", - "totp_enter_code": "Zadejte prosím 6místný kód", - "totp_enter_recovery": "Zadejte prosím záchranný kód", - "totp_session_expired": "Relace vypršela. Přihlaste se prosím znovu.", - "totp_already_enabled": "Dvoufaktorová autentizace je již povolena", - "pro_only_account": "Tento účet je pouze pro desktopový klient RustDesk. Použijte prosím aplikaci RustDesk k přihlášení.", - "passwords_mismatch": "Hesla se neshodují", - "or": "nebo", - "login_sso": "Přihlásit se pomocí SSO", - "login_sso_with": "Přihlásit se přes {{provider}}", - "oidc_denied": "Přístup byl zamítnut poskytovatelem identity.", - "oidc_invalid": "Neplatné zpětné volání OIDC. Zkuste to prosím znovu.", - "oidc_failed": "Ověření OIDC se nezdařilo. Zkuste to prosím znovu.", - "oidc_error": "Při přihlašování pomocí SSO došlo k chybě.", - "oidc_no_account": "Váš účet nebyl nalezen a automatická registrace je vypnutá.", - "totp_rate_limited": "Příliš mnoho pokusů. Zkuste to prosím později.", - "emergency_mode_banner": "Go server je nedostupný — běží nouzový režim (pouze admin, omezené funkce)" - }, - "dashboard": { - "title": "Nástěnka", - "subtitle": "Přehled vašeho serveru RustDesk", - "total_devices": "Celkem zařízení", - "online_now": "Právě online", - "banned": "Zablokováno", - "active_connections": "Aktivní připojení", - "offline_devices": "Offline", - "server_status": "Stav serveru", - "quick_actions": "Rychlé akce", - "manage_devices": "Spravovat připojená zařízení", - "view_keys": "Zobrazit klíče serveru", - "generate_config": "Vygenerovat konfiguraci klienta", - "server_settings": "Nastavit konfiguraci", - "greeting_morning": "Dobré ráno, {name}", - "greeting_afternoon": "Dobré odpoledne, {name}", - "greeting_evening": "Dobrý večer, {name}", - "greeting_night": "Dobrou noc, {name}", - "health_overview": "Přehled stavu", - "devices_online": "Zařízení online", - "active_alerts": "Aktivní upozornění", - "recent_connections": "Celkem zařízení", - "server_uptime": "Doba běhu serveru", - "activity_feed": "Nedávná aktivita", - "no_recent_activity": "Žádná nedávná aktivita", - "just_now": "právě teď", - "ago": "zpět", - "tip_desktop_mode": "Vyzkoušejte režim plochy pro pracovní prostor s více okny a monitorovacími widgety.", - "tip_keyboard_shortcuts": "Stiskněte kdekoliv Ctrl+K pro otevření palety příkazů rychlého vyhledávání.", - "tip_address_book": "Synchronizujte svůj adresář mezi zařízeními přihlášením z klienta RustDesk.", - "tip_2fa": "Povolte v nastavení dvoufaktorovou autentizaci pro vyšší zabezpečení účtu.", - "tip_bulk_actions": "Vyberte více zařízení a spravujte je najednou pomocí hromadných akcí.", - "tip_theme": "Přepínejte mezi tmavým a světlým motivem v nastavení bočního panelu.", - "tip_cdap": "Připojte IoT zařízení a průmyslové senzory přes bránu CDAP.", - "tip_tutorials": "Klikněte na tlačítko nápovědy vpravo dole pro interaktivní návody." - }, - "devices": { - "title": "Zařízení", - "id": "ID", - "hostname": "Název hostitele", - "username": "Uživatelské jméno", - "platform": "Platforma", - "version": "Verze", - "ip_address": "IP adresa", - "note": "Poznámka", - "last_seen": "Naposledy viděno", - "last_online": "Naposledy online", - "first_seen": "První vidění", - "created": "Vytvořeno", - "status": "Stav", - "ban_reason": "Důvod blokování", - "actions": "Akce", - "search_placeholder": "Vyhledat zařízení...", - "filter_all": "Vše", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Zablokováno", - "selected": "vybráno", - "showing": "Zobrazuji", - "of": "z", - "sync_status": "Stav synchronizace", - "sync_success": "Stav úspěšně synchronizován", - "empty_title": "Žádná zařízení nenalezena", - "empty_text": "Žádná zařízení neodpovídají aktuálním filtrům", - "edit_title": "Podrobnosti zařízení", - "delete_title": "Smazat zařízení", - "delete_confirm": "Opravdu chcete smazat zařízení {id}?", - "delete_warning": "Chystáte se natrvalo smazat toto zařízení:", - "delete_permanent": "Tato akce je nevratná. Všechna data spojená s tímto zařízením budou natrvalo odstraněna z databáze.", - "delete_success": "Zařízení úspěšně smazáno", - "revoke_option": "Odebrat zařízení", - "revoke_hint": "Zablokovat ID zařízení a odpojit aktivní připojení", - "revoke_success": "Zařízení úspěšně odebráno", - "details": "Podrobnosti zařízení", - "ban_title": "Blokovat zařízení", - "ban_confirm": "Opravdu chcete blokovat zařízení {id}?", - "ban_success": "Zařízení úspěšně zablokováno", - "unban_title": "Odblokovat zařízení", - "unban_confirm": "Opravdu chcete odblokovat zařízení {id}?", - "unban_success": "Zařízení úspěšně odblokováno", - "change_id": "Změnit ID", - "change_id_title": "Změnit ID zařízení", - "new_id": "Nové ID", - "change_id_hint": "6-16 znaků, pouze písmena, číslice, pomlčky a podtržítka", - "change_id_success": "ID zařízení úspěšně změněno", - "id_length_error": "ID musí mít 6-16 znaků", - "id_format_error": "ID může obsahovat pouze písmena, číslice, pomlčky a podtržítka", - "bulk_delete_title": "Smazat více zařízení", - "bulk_delete_confirm": "Opravdu chcete smazat {count} zařízení?", - "bulk_delete_success": "{count} zařízení úspěšně smazáno", - "columns": "Sloupce", - "toggle_columns": "Přepnout viditelné sloupce", - "not_found": "Zařízení nenalezeno", - "delete_failed": "Selhání mazání zařízení", - "change_id_failed": "Selhání změny ID zařízení", - "invalid_id": "Neplatné ID zařízení (vyžadováno 6-16 znaků)", - "invalid_id_format": "Neplatný formát ID (pouze písmena, číslice, pomlčky, podtržítka)", - "id_exists": "ID zařízení již existuje", - "no_selection": "Žádná zařízení nevybrána", - "device_type": "Typ", - "filter_type_all": "Všechny typy", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Plocha", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP připojeno", - "revoke": "Odebrat", - "access_policy": "Pravidlo přístupu", - "unattended_access": "Nedosledovaný přístup", - "enable_unattended": "Povolit nedosledovaný přístup", - "access_password": "Heslo přístupu", - "password_configured": "Heslo nastaveno", - "no_password": "Žádné heslo", - "new_password": "Nové heslo (nechte prázdné pro zachování současného)", - "clear_password": "Vymazat heslo", - "access_schedule": "Plán přístupu", - "enable_schedule": "Povolit časově omezený přístup", - "allowed_days": "Povolené dny", - "start_time": "Čas zahájení", - "end_time": "Čas ukončení", - "timezone": "Časové pásmo", - "allowed_operators": "Povolení operátoři", - "all_operators": "Všichni operátoři (nechte prázdné)", - "operators_hint": "Uživatelská jména oddělená čárkami. Nechte prázdné pro povolení všech operátorů.", - "last_updated_by": "Naposledy aktualizováno uživatelem", - "access_policy_saved": "Pravidlo přístupu uloženo", - "tabs": { - "overview": "Přehled", - "hardware": "Hardware", - "metrics": "Metriky", - "connections": "Připojení", - "audit": "Audit", - "info": "Informace", - "history": "Historie" - }, - "hardware": { - "cpu": "Procesor", - "memory": "Paměť", - "disk": "Disk", - "os": "Operační systém", - "hostname": "Název hostitele", - "uptime": "Doba běhu", - "load_avg": "Průměrné zatížení", - "network": "Síťové adaptéry", - "no_data": "Žádná data o hardwaru nejsou k dispozici", - "title": "Informace o hardwaru", - "gpu": "Grafická karta" - }, - "display_name": "Zobrazovaný název", - "display_name_placeholder": "Vlastní název (přepíše hostname)", - "note_placeholder": "Poznámky k tomuto zařízení", - "tags": "Tags", - "filter_by_tags": "Filtrovat podle štítků", - "no_tags": "No tags", - "all_groups": "Všechny skupiny", - "create_group": "Vytvořit skupinu", - "manage_groups": "Spravovat skupiny", - "group_name": "Název skupiny", - "group_name_placeholder": "např. Mediální PC", - "dynamic_group": "Dynamická skupina ze štítku", - "dynamic_group_hint": "Zařízení s tímto štítkem se připojí automaticky.", - "tag_filter": "Tag filter", - "group_allowed_users": "Povolení uživatelé", - "group_allowed_users_hint": "Ponechte prázdné, aby skupina zůstala viditelná pro všechny s oprávněními k zařízením.", - "group_tag_required": "Filtr štítku je vyžadován pro dynamické skupiny", - "group_invalid": "Neplatný identifikátor skupiny", - "group_not_found": "Skupina nebyla nalezena", - "group_saved": "Skupina zařízení uložena", - "groups_saved": "Skupiny zařízení uloženy", + "display_name": "Zobrazovaný název", + "display_name_placeholder": "Vlastní název (přepíše hostname)", + "note_placeholder": "Poznámky k tomuto zařízení", + "tags": "Tags", + "filter_by_tags": "Filtrovat podle štítků", + "no_tags": "No tags", + "all_groups": "Všechny skupiny", + "create_group": "Vytvořit skupinu", + "manage_groups": "Spravovat skupiny", + "group_name": "Název skupiny", + "group_name_placeholder": "např. Mediální PC", + "dynamic_group": "Dynamická skupina ze štítku", + "dynamic_group_hint": "Zařízení s tímto štítkem se připojí automaticky.", + "tag_filter": "Tag filter", + "group_allowed_users": "Povolení uživatelé", + "group_allowed_users_hint": "Ponechte prázdné, aby skupina zůstala viditelná pro všechny s oprávněními k zařízením.", + "group_tag_required": "Filtr štítku je vyžadován pro dynamické skupiny", + "group_invalid": "Neplatný identifikátor skupiny", + "group_not_found": "Skupina nebyla nalezena", + "group_saved": "Skupina zařízení uložena", + "groups_saved": "Skupiny zařízení uloženy", "group_membership_added": "Přidáno do skupiny", "group_membership_removed": "Odebráno ze skupiny", - "no_groups": "Zatím žádné skupiny", - "manual_groups": "Ruční skupiny", - "dynamic_memberships": "Dynamická členství", - "group_allowed_user_groups": "Povolené skupiny uživatelů", - "group_allowed_user_groups_hint": "Uživatelé ve vybraných skupinách mohou přistupovat k této skupině zařízení.", - "no_user_groups": "Žádné skupiny uživatelů", - "edit_group": "Upravit skupinu", - "delete_group": "Odstranit skupinu", - "delete_group_confirm": "Odstranit skupinu zařízení {name}?", - "group_deleted": "Skupina zařízení odstraněna", - "folder_group_readonly": "Skupiny založené na složkách se spravují ve složkách.", - "manage_user_groups": "Spravovat skupiny uživatelů", - "restore_failed": "Ne udalo sie przywrocic urzadzenia", - "no_signal_tooltip": "Klient nedávno kontaktoval API, ale není zaregistrován na signal serveru (UDP :21116). Po migraci serveru restartujte klienta.", - "per_page": "Na stránku" - }, - "keys": { - "title": "Klíče serveru", - "subtitle": "Veřejný klíč a konfigurace pro klienty RustDesk", - "public_key": "Veřejný klíč", - "qr_code": "QR kód", - "server_info": "Informace o serveru", - "download": "Stáhnout klíč", - "show_qr": "Zobrazit QR", - "qr_hint": "Naskenujte tento QR kód mobilní aplikací RustDesk", - "no_key": "Nebyl nalezen žádný veřejný klíč", - "no_key_to_copy": "Žádný klíč ke zkopírování", - "no_qr": "QR kód není k dispozici", - "download_success": "Soubor s klíčem byl stažen", - "not_found": "Klíč nebyl nalezen", - "api_not_found": "Klíč API nebyl nalezen" - }, - "settings": { - "title": "Nastavení", - "subtitle": "Konfigurace konzole a nastavení účtu", - "tab_general": "Obecné", - "tab_server": "Nastavení serveru", - "tab_branding": "Branding", - "tab_backup": "Záloha", - "language": "Jazyk", - "change_password": "Změnit heslo", - "password_desc": "Aktualizujte heslo svého účtu", - "current_password": "Současné heslo", - "new_password": "Nové heslo", - "confirm_password": "Potvrdit heslo", - "save_password": "Aktualizovat heslo", - "password_changed": "Heslo bylo úspěšně změněno", - "fill_all_fields": "Vyplňte prosím všechna pole", - "passwords_not_match": "Hesla se neshodují", - "password_requirements": "Požadavky na heslo", - "password_requirements_not_met": "Heslo nesplňuje požadavky", - "req_length": "Alespoň 8 znaků", - "req_uppercase": "Alespoň jedno velké písmeno", - "req_lowercase": "Alespoň jedno malé písmeno", - "req_number": "Alespoň jedno číslo", - "server_info": "Informace o serveru", - "version": "Verze", - "database": "Databáze", - "uptime": "Doba běhu", - "audit_log": "Auditní záznam", - "audit_desc": "Nedávná aktivita konzole", - "no_audit_logs": "Nebyly nalezeny žádné auditní záznamy", - "backend_title": "Backend serveru", - "backend_desc": "Vyberte, který backend serveru použít pro správu zařízení a služby signal/relay.", - "backend_original": "Původní", - "backend_enhanced": "Rozšířený", - "backend_rustdesk_desc": "Standardní signal a relay servery RustDesk (hbbs + hbbr). Základní HTTP API s omezenými endpointy.", - "backend_betterdesk_desc": "Rozšířený server založený na Go s plným REST API, JWT autentizací, blacklistem, tagy, WebSocket událostmi v reálném čase a auditním logováním.", - "backend_feature_signal": "Signal server (registrace ID)", - "backend_feature_relay": "Relay server (přeposílání spojení)", - "backend_feature_basic_api": "Základní REST API", - "backend_feature_full_api": "Plné REST API (34+ endpointů)", - "backend_feature_jwt": "JWT autentizace a TOTP 2FA", - "backend_feature_blocklist": "Správa blacklistu IP/ID", - "backend_feature_tags": "Tagy zařízení a seskupování", - "backend_feature_audit": "Logování auditních událostí", - "backend_feature_websocket": "WebSocket události v reálném čase", - "backend_connection": "Připojení", - "backend_api_url": "URL API", - "backend_test": "Otestovat připojení", - "backend_testing": "Testování...", - "backend_save": "Použít backend", - "backend_saved": "Backend serveru byl úspěšně změněn. Data zařízení budou nyní spravována novým backendem.", - "backend_save_failed": "Přepnutí backendu serveru selhalo", - "backend_test_success": "Připojení úspěšné! Server je dostupný.", - "backend_test_failed": "Připojení selhalo. Server není dostupný.", - "backend_confirm_switch": "Opravdu chcete přepnout backend serveru? Tím se změní způsob správy zařízení.", - "backend_unreachable": "Nelze přepnout: cílový server není dostupný. Nejprve server spusťte.", - "invalid_backend": "Neplatný výběr backendu. Zvolte 'rustdesk' nebo 'betterdesk'.", - "backend_status_running": "Připojeno", - "backend_status_unreachable": "Nedostupné", - "backend_status_error": "Chyba", - "backend_status_unknown": "Neznámý", - "totp_title": "Dvoufaktorová autentizace", - "totp_desc": "Přidejte další vrstvu zabezpečení pomocí TOTP autentizačních aplikací (Google Authenticator, Microsoft Authenticator, Authy atd.)", - "totp_enabled": "2FA povoleno", - "totp_enabled_desc": "Váš účet je chráněn dvoufaktorovou autentizací.", - "totp_disabled": "2FA není povoleno", - "totp_disabled_desc": "Povolte dvoufaktorovou autentizaci pro vyšší zabezpečení účtu.", - "totp_setup": "Povolit 2FA", - "totp_disable": "Zakázat 2FA", - "totp_step1": "Nainstalujte si do telefonu autentizační aplikaci", - "totp_step2": "Naskenujte níže uvedený QR kód", - "totp_step3": "Zadejte 6místný kód pro ověření", - "totp_manual_key": "Ruční klíč", - "totp_enter_code": "Zadejte ověřovací kód", - "totp_verify_enable": "Ověřit a povolit", - "totp_enabled_success": "Dvoufaktorová autentizace byla povolena!", - "totp_recovery_warning": "Uložte si tyto obnovovací kódy na bezpečné místo. Každý kód lze použít pouze jednou. Pokud ztratíte přístup ke své autentizační aplikaci, můžete se pomocí těchto kódů přihlásit.", - "totp_done": "Hotovo", - "totp_disable_warning": "Zakázání dvoufaktorové autentizace sníží zabezpečení vašeho účtu. Pro potvrzení zadejte své heslo.", - "totp_disabled_success": "Dvoufaktorová autentizace byla zakázána.", - "tutorials_title": "Návody a průvodci", - "tutorials_desc": "Ovládejte komentované prohlídky a nápovědné překryvy zobrazované v celé konzoli", - "tutorials_enabled": "Povolit návody", - "tutorials_enabled_hint": "Pokud je vypnuto, návody se nebudou spouštět automaticky a tlačítko nápovědy bude skryto", - "tutorials_reset_hint": "Označit všechny návody jako neviděné, aby mohly být zobrazeny znovu", - "tutorials_enabled_toast": "Návody povoleny", - "tutorials_disabled_toast": "Návody zakázány", - "tutorials_reset_toast": "Všechny návody byly resetovány", - "tab_auth": "Ověřování", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Nastavte externí ověřování přes LDAP nebo Active Directory. Uživatelé se budou moci přihlašovat doménovými přihlašovacími údaji.", - "ldap_enabled": "Povolit ověřování LDAP", - "ldap_enabled_hint": "Když je zapnuto, uživatelé se mohou přihlašovat pomocí údajů LDAP/AD. Místní účty stále fungují jako záloha.", - "ldap_connection": "Připojení k serveru", - "ldap_host": "Hostitel", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Přeskočit ověření TLS", - "ldap_timeout": "Časový limit připojení (s)", - "ldap_timeout_hint": "Počet sekund čekání na odpověď serveru LDAP", - "ldap_bind_mode": "Režim bind", - "ldap_direct_bind": "Přímý bind", - "ldap_direct_bind_hint": "Provést bind přímo pomocí šablony DN místo vyhledávání přes servisní účet.", - "ldap_bind_dn": "Bind DN (servisní účet)", - "ldap_bind_dn_hint": "Distinguished Name servisního účtu jen pro čtení používaného k vyhledávání uživatelů.", - "ldap_bind_password": "Heslo bind", - "ldap_base_dn": "Základní DN", - "ldap_base_dn_hint": "Vyhledávací základ pro hledání uživatelů, např. dc=example,dc=com", - "ldap_user_filter": "Filtr uživatelů", - "ldap_user_filter_hint": "LDAP filtr pro hledání uživatelů. Použijte {{username}} jako zástupný symbol. Výchozí: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Šablona DN pro přímý bind", - "ldap_direct_bind_dn_hint": "Šablona DN pro přímý bind. Použijte {{username}} jako zástupný symbol, např. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Atributy uživatele", - "ldap_attr_id": "Atribut uživatelského jména", - "ldap_attr_email": "Atribut e-mailu", - "ldap_attr_name": "Atribut zobrazovaného jména", - "ldap_group_mapping": "Mapování skupin na role", - "ldap_group_base_dn": "Základní DN skupin", - "ldap_group_base_dn_hint": "Ponechte prázdné, pokud chcete použít hlavní základní DN", - "ldap_group_filter": "Filtr skupin", - "ldap_group_attr_name": "Atribut názvu skupiny", - "ldap_default_role": "Výchozí role", - "ldap_default_role_hint": "Role přiřazená uživatelům, jejichž skupiny LDAP neodpovídají žádnému mapování", - "ldap_role_viewer": "Prohlížející", - "ldap_role_operator": "Operátor", - "ldap_role_admin": "Administrátor", - "ldap_group_role_map": "Mapa skupin na role", - "ldap_group_role_map_hint": "Mapujte skupiny LDAP na role BetterDesk. Formát: GroupDN=role oddělené znakem | (pipe). Příklad: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Otestovat připojení", - "ldap_testing": "Testování...", - "ldap_test_success": "Připojení bylo úspěšné! Server LDAP je dostupný a údaje bind jsou platné.", - "ldap_test_failed": "Připojení se nezdařilo", - "ldap_save": "Uložit konfiguraci LDAP", - "ldap_saved": "Konfigurace LDAP byla úspěšně uložena", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Nastavte jednotné přihlášení přes poskytovatele OpenID Connect (Azure AD, Okta, Google, Keycloak atd.).", - "oidc_enabled": "Povolit ověřování OIDC", - "oidc_enabled_hint": "Umožnit uživatelům přihlášení přes externího poskytovatele identity", - "oidc_provider": "Poskytovatel identity", - "oidc_display_name": "Text na přihlašovacím tlačítku", - "oidc_display_name_hint": "Text zobrazený na přihlašovacím tlačítku (např. Azure AD, Okta)", - "oidc_issuer_url": "Adresa URL vydavatele", - "oidc_issuer_url_hint": "Adresa URL vydavatele OpenID Connect (discovery proběhne automaticky)", - "oidc_client_id": "ID klienta", - "oidc_client_secret": "Tajný klíč klienta", - "oidc_redirect_url": "Adresa URL přesměrování (callback)", - "oidc_redirect_url_hint": "Musí přesně odpovídat nastavení u vašeho IdP. Obvykle: http(s)://vas-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Rozsahy", - "oidc_use_pkce": "Použít PKCE (doporučeno)", - "oidc_auto_discovery": "Automatické zjištění", - "oidc_allow_signup": "Automaticky vytvářet uživatele", - "oidc_manual_endpoints": "Ruční adresy koncových bodů", - "oidc_authorization_url": "Autorizační koncový bod", - "oidc_token_url": "Tokenový koncový bod", - "oidc_userinfo_url": "Koncový bod UserInfo", - "oidc_claim_mapping": "Mapování claimů", - "oidc_claim_username": "Claim uživatelského jména", - "oidc_claim_email": "Claim e-mailu", - "oidc_claim_name": "Claim zobrazovaného jména", - "oidc_claim_groups": "Claim skupin", - "oidc_role_mapping": "Mapování rolí", - "oidc_default_role": "Výchozí role", - "oidc_group_role_map": "Mapování skupin na role", - "oidc_group_role_map_hint": "Jedno mapování na řádek: nazev_skupiny=role (např. admins=admin, operators=operator)", - "oidc_test_discovery": "Otestovat discovery", - "oidc_testing": "Testování...", - "oidc_test_success": "Discovery proběhlo úspěšně! Koncové body byly nalezeny.", - "oidc_test_failed": "Discovery se nezdařilo", - "oidc_issuer_required": "Adresa URL vydavatele je vyžadována pro test discovery", - "oidc_save": "Uložit konfiguraci OIDC", - "oidc_saved": "Konfigurace OIDC byla úspěšně uložena", - "tab_advanced": "Pokročilé", - "connection_mode_title": "Strategia polaczen", - "connection_mode_desc": "Okresla, jak klienci RustDesk lacza sie ze soba: bezposrednio P2P (hole punch) gdy to mozliwe, lub zawsze przez relay.", - "connection_mode_label": "Domyslny tryb polaczenia", - "connection_mode_p2p_first": "P2P najpierw (doporučeno) — proba polaczenia bezposredniego, potem relay", - "connection_mode_relay_only": "Pouze relay — wszystkie sesje przez server posredniczacy", - "connection_mode_advanced": "Opcje zaawansowane", - "connection_mode_fallback_ms": "Limit czasu P2P przed relay (ms)", - "connection_mode_same_nat_relay": "Wymuszaj relay, gdy obie strony maja ten sam publiczny IP (NAT hairpin)", - "connection_mode_network_hint": "P2P vyžaduje UDP 21116 miedzy klientami. Na serverze: sygnal TCP/UDP 21116, relay 21117, test NAT 21115. Klient web zawsze uzywa relay.", - "connection_mode_save": "Uložit", - "connection_mode_save_restart": "Uložit i uruchom server ponownie", - "connection_mode_saved": "Tryb polaczenia zapisany", - "connection_mode_restart_started": "Restart servera zainicjowany", - "connection_mode_restart_failed": "Restart servera nie powiodl sie", - "connection_mode_not_configurable": "Ne mozna zmienic trybu na tym wdrozeniu (žádný unit systemd lub docker-compose)", - "connection_mode_compose_error": "Ne znaleziono sekcji environment servera w docker-compose.yml", - "connection_mode_source_saved": "Uloženo w", - "connection_mode_source_defaults": "Domyslne ustawienia servera (žádný zapisu z panelu)", - "connection_mode_runtime": "Aktywny server", - "advanced_title": "Soubori konfiguracyjne", - "advanced_desc": "Edytuj soubori konfiguracyjne servera bezposrednio w panelu. Zmiany moga vyžadujec ponownego uruchomienia uslug. Przed zapisem tworzona jest kopia zapasowa poprzedniej wersji.", - "advanced_warning": "Te soubori zawieraja dane wrazliwe (klucze API, hasla do bazy, sekrety sesji). Edytuj pouze, jesli wiesz, co robisz. Bledna skladnia moze uniemozliwic start servera.", - "advanced_files_label": "Soubori", - "advanced_select_file": "Wybierz soubor z listy, aby wyswietlic lub edytowac jego zawartosc.", - "advanced_reload": "Odswiez", - "advanced_save": "Uložit soubor", - "advanced_apply_restart": "Použít (restart uslugi)", - "advanced_saved": "Soubor konfiguracyjny zapisany", - "advanced_restart_after_save": "Konfigurace zapisana. Uruchomic ponownie powiazana usluge, aby zmiany weszly w zycie?", - "advanced_restart_confirm": "Uruchomic ponownie powiazane uslugi BetterDesk? Aktywne polaczenia moga na chwile zostac przerwane.", - "advanced_restart_console_confirm": "Uruchomic ponownie usluge konsoli web? Sesja w przegladarce na chwile sie rozlaczy; strona odswiezy sie po powrocie konsoli.", - "advanced_restart_started": "Restart uslugi zostal zainicjowany", - "advanced_restart_done": "Konzole uruchomiona ponownie — przeladowanie strony…", - "advanced_restart_polling": "Oczekiwanie na powrot konsoli…", - "advanced_restart_timeout": "Restart wyslany, ale konzole nie odpowiedziala na czas. Sprawdz logi systemd/NSSM i odswiez strone recznie.", - "advanced_restart_failed": "Restart uslugi nie powiodl sie (žádný uprawnien lub usluga nie jest zainstalowana)", - "advanced_save_confirm": "Zapisac zmiany w tym souboru? Zostanie utworzona kopia zapasowa poprzedniej wersji.", - "advanced_unsaved_confirm": "Masz niezapisane zmiany. Odrzucic je?", - "advanced_no_files": "Žádný dostepnych souborow konfiguracyjnych w tym systemie.", - "advanced_readonly": "pouze odczyt", - "advanced_missing": "žádný", - "advanced_new_file": "Nowy soubor (zostanie utworzony po zapisie)", - "advanced_new_file_hint": "Nowy soubor — přidat tresc i zapisz", - "advanced_backup_created": "utworzono kopie zapasowa", - "advanced_restart_console": "Uruchom ponownie usluge konsoli (np. systemctl restart betterdesk-console), aby zmiany w .env weszly w zycie.", - "advanced_restart_goserver": "Uruchom ponownie server Go BetterDesk, aby przeladowac liste blokad.", - "advanced_restart_systemd": "Po edycji unitow systemd wykonaj: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Uruchom ponownie odpowiednia usluge, aby zmiany weszly w zycie.", - "advanced_error_unknown": "Neznany soubor konfiguracyjny", - "advanced_error_not_found": "Soubor nie istnieje", - "advanced_error_not_file": "Sciezka nie wskazuje na zwykly soubor", - "advanced_error_too_large": "Soubor przekracza maksymalny rozmiar edycji (512 KB)", - "advanced_error_binary": "Souborow binarnych nie mozna edytowac w panelu", - "advanced_error_invalid": "Neprawidlowa zawartosc souboru", - "advanced_error_not_writable": "Soubor nie jest zapisywalny przez proces konsoli", - "advanced_file_console-env": "Srodowisko konsoli (.env)", - "advanced_file_console-env-local": "Nadpisania konsoli (.env.local)", - "advanced_file_go-blocklist": "Lista blokad servera Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (jednostka uslugi)", - "advanced_file_systemd-server": "systemd: betterdesk-server (jednostka uslugi)", - "advanced_file_console-session-secret": "Sekret sesji konsoli (.session_secret)", - "advanced_file_go-audit-log": "Dziennik audytu servera Go (audit.jsonl)", - "advanced_file_build-env": "Srodowisko budowania agenta (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfigurace)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkiestracja)", - "advanced_restart_none": "Ten soubor nie vyžaduje restart uslugi.", - "enrollment_title": "Rejestracja urzadzen (RustDesk)", - "enrollment_desc": "Okresla, jak nowi klienci RustDesk rejestruja sie na serverze i jak operátor zatwierdza zadania na stronie Zadan rejestracji.", - "enrollment_require_approval": "Vyžadujej akceptacji operátora (tryb Zarzadzany)", - "enrollment_require_approval_hint": "Po wlaczeniu nieznani klienci trafiaja do kolejki do momentu zatwierdzenia w Zadaniach rejestracji.", - "enrollment_rich_approve": "Pelny formularz przy akceptacji (nazwa, složka, skupiny, štítky)", - "enrollment_rich_approve_hint": "Pokazuje rozbudowany dialog przy zatwierdzaniu rejestracji enrollment i LAN.", - "enrollment_tag_picker": "Wybor tagow z listy istniejacych", - "enrollment_tag_picker_hint": "Umozliwia wybor tagow z listy uzywanej na stronie Urzadzenia zamiast samego wpisywania.", - "enrollment_open_requests": "Otworz zadania rejestracji", - "enrollment_pending_count": "{count} oczekujacych zadan rejestracji" - }, - "audit": { - "time": "Čas", - "user": "Uživatel", - "action": "Akce", - "details": "Podrobnosti", - "action_login": "Přihlášení", - "action_login_failed": "Přihlášení selhalo", - "action_logout": "Odhlášení", - "action_password_change": "Heslo změněno", - "action_2fa_enable": "2FA povoleno", - "action_2fa_disable": "2FA zakázáno", - "action_user_create": "Uživatel vytvořen", - "action_user_update": "Uživatel aktualizován", - "action_user_delete": "Uživatel smazán", - "action_settings_update": "Nastavení aktualizováno", - "action_device_ban": "Zařízení zablokováno", - "action_device_unban": "Zařízení odblokováno", - "action_device_delete": "Zařízení smazáno" - }, - "generator": { - "title": "Generátor konfigurace klienta", - "subtitle": "Vygenerovat konfiguraci pro klienty RustDesk", - "config_options": "Možnosti konfigurace", - "server_address": "Adresa serveru", - "server_address_hint": "Doména nebo IP adresa vašeho serveru", - "custom_port": "Vlastní port", - "port_hint": "Nechte prázdné pro výchozí (21116)", - "relay_server": "Relay server", - "relay_placeholder": "Stejný jako ID server, pokud prázdné", - "relay_hint": "Volitelné: samostatná adresa relay serveru", - "include_key": "Zahrnout veřejný klíč do konfigurace", - "generate": "Vygenerovat konfiguraci", - "output": "Výstup konfigurace", - "usage_title": "Podrobnosti připojení", - "generated": "Konfigurace vygenerována", - "server_required": "Adresa serveru je povinná", - "nothing_to_copy": "Nejprve vygenerujte konfiguraci", - "bundles_title": "Balíčky agenta", - "new_bundle": "Nový balíček", - "editor_title": "Editor balíčku", - "empty_state": "Vyberte balíček vlevo nebo vytvořte nový.", - "loading": "Načítání…", - "no_bundles": "Zatím žádné balíčky. Vytvořte první.", - "bundle_name": "Název balíčku", - "bundle_name_hint": "Pouze interní označení — nezobrazuje se koncovým uživatelům.", - "short_link": "Krátký odkaz ke stažení", - "short_link_hint": "Používá se ve veřejné URL (/d/…). Pouze malá písmena, číslice a pomlčky (2–32 znaků). Automaticky vyplněno z názvu balíčku — zkrácením usnadníte sdílení (např. acme).", - "branding_section": "Branding", - "company_name": "Název firmy / značky", - "short_text": "Krátký popis", - "contact_email": "Kontaktní e-mail", - "contact_phone": "Kontaktní telefon", - "contact_url": "Kontaktní web", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG nebo WebP. Maximálně 256 KB.", - "logo_clear": "Odebrat logo", - "primary_color": "Primární barva", - "accent_color": "Barva záhlaví", - "default_lang": "Výchozí jazyk", - "allow_unattended": "Povolit bezobslužný přístup", - "allow_unattended_hint": "Když je zapnuto, agent zobrazuje trvalé heslo pro přístup operátora.", - "save": "Uložit balíček", - "revoke": "Odvolat", - "unrevoke": "Znovu povolit", - "revoked": "Odvoláno", - "preview_title": "Živý náhled", - "preview_hint": "Přibližný vzhled okna agenta pro koncového uživatele.", - "preview_default_name": "Podpora BetterDesk", - "preview_status_ready": "Připraveno", - "preview_id": "Vaše ID", - "preview_password": "Heslo", - "preview_chat": "Chat s podporou", - "preview_settings": "Nastavení (pouze admin)", - "preview_quit": "Ukončit (pouze admin)", - "download_link_title": "Odkaz ke stažení", - "download_link_hint": "Sdílejte tento odkaz s uživateli — zobrazí se jim brandovaná stránka stažení. Staré hex odkazy nadále fungují i po změně krátkého odkazu.", - "open_portal": "Otevřít", - "created": "Balíček vytvořen", - "saved": "Balíček uložen", - "deleted": "Balíček odstraněn", - "revoked_ok": "Balíček odvolán", - "unrevoked_ok": "Balíček znovu aktivován", - "link_copied": "Odkaz zkopírován do schránky", - "copy_failed": "Nepodařilo se zkopírovat automaticky — zkopírujte ručně", - "unsaved_confirm": "Zahodit neuložené změny?", - "confirm_revoke": "Odvolat tento balíček? Odkaz ke stažení přestane fungovat.", - "confirm_unrevoke": "Znovu aktivovat tento balíček?", - "confirm_delete": "Trvale odstranit tento balíček? Tuto akci nelze vrátit zpět.", - "errors": { - "validation_failed": "Ověření se nezdařilo", - "name_required": "Název balíčku je povinný", - "company_name_required": "Název firmy je povinný", - "logo_invalid": "Logo musí být platný soubor obrázku", - "logo_too_large": "Logo musí mít 256 KB nebo méně", - "logo_read_failed": "Nepodařilo se přečíst soubor loga", - "primary_color_invalid": "Primární barva musí být hex hodnota (např. #2563eb)", - "accent_color_invalid": "Barva záhlaví musí být hex hodnota (např. #1e293b)", - "contact_url_invalid": "Kontaktní web musí být platná URL adresa", - "server_host_required": "Publiczny adres servera jest vyžadujeny", - "server_host_invalid": "Podaj prawidlowa domene lub adres IPv4", - "token_failed": "Ne udalo sie wygenerowac tokenu rejestracji — sprawdz polaczenie z serverem", - "rebuild_revoked": "Ne mozna przebudowac wycofanego pakietu — najpierw go przywroc", - "slug_invalid": "Krátký odkaz smí obsahovat pouze malá písmena, číslice a pomlčky", - "slug_too_short": "Krátký odkaz musí mít alespoň 2 znaky", - "slug_too_long": "Krátký odkaz smí mít nejvýše 32 znaků", - "slug_taken": "Tento krátký odkaz již používá jiný balíček" - }, - "legacy_title": "Generátor konfigurace klienta", - "connection_section": "Polaczenie z serverem", - "server_host": "Publiczny adres servera", - "server_host_placeholder": "wsparcie.example.com lub 203.0.113.10", - "server_host_hint": "Domena lub publiczny adres IP, pod ktorym uzytkownicy docieraja do servera BetterDesk. Port jest pobierany z konfiguracji konsoli.", - "use_https": "Uzywaj HTTPS / WSS (doporučeno)", - "enrollment_token": "Rejestracja urzadzenia", - "enrollment_token_pending": "Indywidualnie po zatwierdzeniu", - "enrollment_token_set": "Indywidualnie — zatwierdz w Rejestracjach", - "enrollment_token_hint": "Kazda instalacja rejestruje sie samodzielnie. Zatwierdzaj nowe urzadzenia w panelu Rejestracje; server wydaje wtedy unikalny klucz dostepu dla kazdego komputera.", - "enrollment_per_device": "Indywidualnie — zatwierdz w Rejestracjach", - "background_color": "Tlo okna", - "surface_color": "Tlo kart", - "text_color": "Barva textu", - "text_muted_color": "Barva textu drugorzednego", - "status_ready_color": "Barva wskaznika gotowosci", - "header_text_color": "Barva textu naglowka", - "builds_title": "Buildy klienta", - "builds_hint": "Instalatory kompilowane na tym serverze dla kazdej platformy. Přestavět po naprawie toolchaina lub aktualizacji zrodel agenta.", - "builds_loading": "Ladowanie statusu buildow…", - "builds_empty": "Žádný buildow w kolejce — zapisz pakiet lub kliknij Přestavět wszystkie.", - "rebuild_all": "Přestavět wszystkie", - "rebuilding_all": "Kolejkowanie buildow…", - "rebuild_queued": "Wszystkie platformy dodane do kolejki", - "rebuild_confirm": "Przebudowac instalatory dla wszystkich platform? Připraveno artefakty zostana zastapione.", - "build_status_ready": "Gotowy", - "build_status_pending": "W kolejce", - "build_status_building": "Sestavování", - "build_status_failed": "Neudany", - "builds_summary": "{{ready}} gotowych · {{pending}} w kolejce · {{building}} sestavování · {{failed}} nieudanych", - "build_error_hint": "Blad buildu", - "preview_help": "Požádat o pomoc" - }, - "server": { - "port": "Port", - "api_port": "API port", - "id_server": "ID server", - "relay_server": "Relay server", - "api_key": "API klíč" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Zablokováno", - "running": "Běží", - "stopped": "Zastaveno", - "unknown": "Neznámý", - "checking": "Kontroluji...", - "label": "Stav", - "no_signal": "Bez signálu" - }, - "actions": { - "refresh": "Obnovit", - "copy": "Kopírovat", - "connect": "Připojit", - "connect_desktop": "Připojit přes desktopový klient", - "remote_viewer": "Vzdálený prohlížeč", - "web_remote": "Web vzdálený", - "details": "Podrobnosti", - "edit": "Upravit", - "delete": "Smazat", - "ban": "Blokovat", - "unban": "Odblokovat", - "save": "Uložit", - "cancel": "Zrušit", - "confirm": "Potvrdit", - "close": "Zavřít", - "clear": "Vyčistit", - "ok": "OK", - "saved": "Úspěšně uloženo", - "back": "Zpět", - "create": "Vytvořit", - "dismiss": "Zavřít", - "view_all": "Zobrazit vše", - "cdap_viewer": "Prohlížeč snímků CDAP", - "add": "Přidat", - "remove": "Odebrat" - }, - "time": { - "just_now": "Právě teď", - "seconds_ago": "před {count}s", - "minutes_ago": "před {count}m", - "hours_ago": "před {count}h", - "days_ago": "před {count}d", - "day_mon": "Po", - "day_tue": "Út", - "day_wed": "St", - "day_thu": "Čt", - "day_fri": "Pá", - "day_sat": "So", - "day_sun": "Ne" - }, - "users": { - "title": "Správa uživatelů", - "subtitle": "Spravujte uživatele konzole a oprávnění", - "add_user": "Přidat uživatele", - "edit_user": "Upravit uživatele", - "username": "Uživatelské jméno", - "username_placeholder": "Zadejte uživatelské jméno", - "username_hint": "3–32 znaků, pouze písmena, číslice a podtržítka", - "password": "Heslo", - "password_placeholder": "Zadejte heslo", - "password_hint": "Minimálně 8 znaků, s malými a velkými písmeny, čísly a symboly", - "password_leave_empty": "Nechte prázdné pro zachování stávajícího", - "role": "Role", - "role_admin": "Administrátor", - "role_operator": "Operátor", - "role_viewer": "Prohlížející", - "role_hint": "Prohlížející mohou pouze zobrazovat data, operátoři mohou spravovat zařízení, administrátoři mají plný přístup", - "created": "Vytvořeno", - "last_login": "Poslední přihlášení", - "never": "Nikdy", - "actions": "Akce", - "create": "Vytvořit uživatele", - "edit": "Upravit", - "reset_password": "Obnovit heslo", - "new_password": "Nové heslo", - "delete_title": "Smazat uživatele", - "delete_confirm": "Opravdu chcete smazat uživatele {username}?", - "delete_success": "Uživatel byl úspěšně smazán", - "user_created": "Uživatel byl úspěšně vytvořen", - "user_updated": "Uživatel byl úspěšně aktualizován", - "password_reset_success": "Heslo bylo úspěšně resetováno", - "empty_title": "Nebyli nalezeni žádní uživatelé", - "empty_text": "Přidejte uživatele pro správu přístupu do konzole", - "fill_required": "Vyplňte prosím všechna povinná pole", - "invalid_username": "Uživatelské jméno musí mít 3–32 znaků a obsahovat pouze písmena, číslice a podtržítka", - "username_exists": "Uživatelské jméno již existuje", - "weak_password": "Heslo je příliš slabé", - "password_too_short": "Heslo musí mít alespoň 8 znaků", - "invalid_role": "Neplatná role", - "cannot_demote_self": "Nemůžete sami sebe degradovat", - "cannot_delete_self": "Nemůžete smazat vlastní účet", - "last_admin": "Nelze smazat posledního administrátora", - "admin_only": "Tato funkce je dostupná pouze administrátorům", - "password_required": "Heslo je povinné", - "not_found": "Uživatel nebyl nalezen", - "strength_weak": "Slabé", - "strength_medium": "Střední", - "strength_strong": "Silné", - "security_tips_title": "Doporučené bezpečnostní postupy", - "tip_strong_passwords": "Používejte silná a jedinečná hesla pro každého uživatele", - "tip_unique_accounts": "Vytvořte samostatný účet pro každou osobu", - "tip_viewer_role": "Používejte roli prohlížejícího pro uživatele, kteří potřebují pouze přístup pro čtení", - "tip_operator_role": "Používejte roli operátora pro uživatele, kteří potřebují spravovat zařízení, ale ne uživatele", - "tip_audit_logs": "Pravidelně kontrolujte auditní záznamy kvůli podezřelé aktivitě", - "role_pro": "Pro (pouze API)", - "role_super_admin": "Super administrátor", - "role_server_admin": "Administrátor serveru", - "role_global_admin": "Globální administrátor", - "organizations": "Organizace", - "user_organizations": "Organizace pro {username}", - "no_organizations": "Uživatel není přiřazen k žádné organizaci", - "org_removed": "Přiřazení organizace bylo odstraněno", - "server_role_label": "Serverová role", - "server_role_hint": "Určuje, co může uživatel dělat v celé konzoli (přístup do panelu, konfigurace serveru, audit atd.).", - "org_membership_section": "Členství v organizacích", - "org_membership_hint": "Uživatel může patřit do více organizací. Role v organizaci řídí oprávnění pouze uvnitř dané organizace a je nezávislá na serverové roli výše.", - "column_organizations": "Organizace", - "no_orgs_short": "—", - "org_count_one": "{count} organizace", - "org_count_many": "{count} organizací", - "all_orgs_assigned": "Uživatel je již členem každé organizace.", - "user_groups": "Skupiny uživatelů", - "user_groups_hint": "Skupiny uživatelů lze použít k udělení přístupu k vybraným skupinám zařízení.", - "loading_user_groups": "Načítání skupin uživatelů...", - "no_user_groups": "Nejsou dostupné žádné skupiny uživatelů", - "create_user_group": "Vytvořit skupinu", - "edit_user_group": "Upravit skupinu uživatelů", - "delete_user_group": "Odstranit skupinu uživatelů", - "delete_user_group_confirm": "Odstranit skupinu uživatelů {name}? Členové ztratí přístup udělený touto skupinou.", - "user_group_created": "Skupina uživatelů vytvořena", - "user_group_updated": "Skupina uživatelů aktualizována", - "user_group_deleted": "Skupina uživatelů odstraněna", - "user_group_not_found": "Skupina uživatelů nebyla nalezena", - "group_name": "Název skupiny", - "group_name_placeholder": "Operátoři", - "group_note": "Note", - "group_note_placeholder": "Volitelná poznámka", - "group_name_required": "Název skupiny je povinný", - "group_members_count": "{count} členů", - "provider": "Poskytovatel", - "provider_local": "Lokalny", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Zarzadzane przez dostawce tozsamosci", - "provider_managed_hint": "To konto jest zarzadzane przez zewnetrznego dostawce tozsamosci (LDAP/AD lub SSO). Haslo i rola sa kontrolowane przez dostawce i nie mozna ich tu zmienic." - }, - "folders": { - "title": "Složky", - "create": "Vytvořit složku", - "edit": "Upravit složku", - "delete": "Smazat složku", - "name": "Název složky", - "name_placeholder": "Zadejte název složky", - "name_required": "Název složky je povinný", - "name_too_long": "Název složky je příliš dlouhý (max. 50 znaků)", - "color": "Barva", - "icon": "Ikona", - "not_found": "Složka nebyla nalezena", - "delete_confirm": "Opravdu chcete tuto složku smazat? Zařízení budou odřazena.", - "delete_success": "Složka byla úspěšně smazána", - "created": "Složka byla úspěšně vytvořena", - "updated": "Složka byla úspěšně aktualizována", - "no_devices_selected": "Nebyla vybrána žádná zařízení", - "devices_moved": "Zařízení byla úspěšně přesunuta", - "device_assigned": "Zařízení bylo přiřazeno do složky", - "unassigned": "Nepřiřazeno", - "all_devices": "Všechna zařízení", - "drag_hint": "Přetahujte zařízení do složek pro lepší organizaci", - "move_to": "Přesunout do", - "toggle_sidebar": "Zobrazit/skrýt boční panel" - }, + "no_groups": "Zatím žádné skupiny", + "manual_groups": "Ruční skupiny", + "dynamic_memberships": "Dynamická členství", + "group_allowed_user_groups": "Povolené skupiny uživatelů", + "group_allowed_user_groups_hint": "Uživatelé ve vybraných skupinách mohou přistupovat k této skupině zařízení.", + "no_user_groups": "Žádné skupiny uživatelů", + "edit_group": "Upravit skupinu", + "delete_group": "Odstranit skupinu", + "delete_group_confirm": "Odstranit skupinu zařízení {name}?", + "group_deleted": "Skupina zařízení odstraněna", + "folder_group_readonly": "Skupiny založené na složkách se spravují ve složkách.", + "manage_user_groups": "Spravovat skupiny uživatelů", + "restore_failed": "Ne udalo sie przywrocic urzadzenia", + "no_signal_tooltip": "Klient nedávno kontaktoval API, ale není zaregistrován na signal serveru (UDP :21116). Po migraci serveru restartujte klienta.", + "per_page": "Na stránku" + }, + "keys": { + "title": "Klíče serveru", + "subtitle": "Veřejný klíč a konfigurace pro klienty RustDesk", + "public_key": "Veřejný klíč", + "qr_code": "QR kód", + "server_info": "Informace o serveru", + "download": "Stáhnout klíč", + "show_qr": "Zobrazit QR", + "qr_hint": "Naskenujte tento QR kód mobilní aplikací RustDesk", + "no_key": "Nebyl nalezen žádný veřejný klíč", + "no_key_to_copy": "Žádný klíč ke zkopírování", + "no_qr": "QR kód není k dispozici", + "download_success": "Soubor s klíčem byl stažen", + "not_found": "Klíč nebyl nalezen", + "api_not_found": "Klíč API nebyl nalezen" + }, + "settings": { + "title": "Nastavení", + "subtitle": "Konfigurace konzole a nastavení účtu", + "tab_general": "Obecné", + "tab_server": "Nastavení serveru", + "tab_branding": "Branding", + "tab_backup": "Záloha", + "language": "Jazyk", + "change_password": "Změnit heslo", + "password_desc": "Aktualizujte heslo svého účtu", + "current_password": "Současné heslo", + "new_password": "Nové heslo", + "confirm_password": "Potvrdit heslo", + "save_password": "Aktualizovat heslo", + "password_changed": "Heslo bylo úspěšně změněno", + "fill_all_fields": "Vyplňte prosím všechna pole", + "passwords_not_match": "Hesla se neshodují", + "password_requirements": "Požadavky na heslo", + "password_requirements_not_met": "Heslo nesplňuje požadavky", + "req_length": "Alespoň 8 znaků", + "req_uppercase": "Alespoň jedno velké písmeno", + "req_lowercase": "Alespoň jedno malé písmeno", + "req_number": "Alespoň jedno číslo", + "server_info": "Informace o serveru", + "version": "Verze", + "database": "Databáze", + "uptime": "Doba běhu", + "audit_log": "Auditní záznam", + "audit_desc": "Nedávná aktivita konzole", + "no_audit_logs": "Nebyly nalezeny žádné auditní záznamy", + "backend_title": "Backend serveru", + "backend_desc": "Vyberte, který backend serveru použít pro správu zařízení a služby signal/relay.", + "backend_original": "Původní", + "backend_enhanced": "Rozšířený", + "backend_rustdesk_desc": "Standardní signal a relay servery RustDesk (hbbs + hbbr). Základní HTTP API s omezenými endpointy.", + "backend_betterdesk_desc": "Rozšířený server založený na Go s plným REST API, JWT autentizací, blacklistem, tagy, WebSocket událostmi v reálném čase a auditním logováním.", + "backend_feature_signal": "Signal server (registrace ID)", + "backend_feature_relay": "Relay server (přeposílání spojení)", + "backend_feature_basic_api": "Základní REST API", + "backend_feature_full_api": "Plné REST API (34+ endpointů)", + "backend_feature_jwt": "JWT autentizace a TOTP 2FA", + "backend_feature_blocklist": "Správa blacklistu IP/ID", + "backend_feature_tags": "Tagy zařízení a seskupování", + "backend_feature_audit": "Logování auditních událostí", + "backend_feature_websocket": "WebSocket události v reálném čase", + "backend_connection": "Připojení", + "backend_api_url": "URL API", + "backend_test": "Otestovat připojení", + "backend_testing": "Testování...", + "backend_save": "Použít backend", + "backend_saved": "Backend serveru byl úspěšně změněn. Data zařízení budou nyní spravována novým backendem.", + "backend_save_failed": "Přepnutí backendu serveru selhalo", + "backend_test_success": "Připojení úspěšné! Server je dostupný.", + "backend_test_failed": "Připojení selhalo. Server není dostupný.", + "backend_confirm_switch": "Opravdu chcete přepnout backend serveru? Tím se změní způsob správy zařízení.", + "backend_unreachable": "Nelze přepnout: cílový server není dostupný. Nejprve server spusťte.", + "invalid_backend": "Neplatný výběr backendu. Zvolte 'rustdesk' nebo 'betterdesk'.", + "backend_status_running": "Připojeno", + "backend_status_unreachable": "Nedostupné", + "backend_status_error": "Chyba", + "backend_status_unknown": "Neznámý", + "totp_title": "Dvoufaktorová autentizace", + "totp_desc": "Přidejte další vrstvu zabezpečení pomocí TOTP autentizačních aplikací (Google Authenticator, Microsoft Authenticator, Authy atd.)", + "totp_enabled": "2FA povoleno", + "totp_enabled_desc": "Váš účet je chráněn dvoufaktorovou autentizací.", + "totp_disabled": "2FA není povoleno", + "totp_disabled_desc": "Povolte dvoufaktorovou autentizaci pro vyšší zabezpečení účtu.", + "totp_setup": "Povolit 2FA", + "totp_disable": "Zakázat 2FA", + "totp_step1": "Nainstalujte si do telefonu autentizační aplikaci", + "totp_step2": "Naskenujte níže uvedený QR kód", + "totp_step3": "Zadejte 6místný kód pro ověření", + "totp_manual_key": "Ruční klíč", + "totp_enter_code": "Zadejte ověřovací kód", + "totp_verify_enable": "Ověřit a povolit", + "totp_enabled_success": "Dvoufaktorová autentizace byla povolena!", + "totp_recovery_warning": "Uložte si tyto obnovovací kódy na bezpečné místo. Každý kód lze použít pouze jednou. Pokud ztratíte přístup ke své autentizační aplikaci, můžete se pomocí těchto kódů přihlásit.", + "totp_done": "Hotovo", + "totp_disable_warning": "Zakázání dvoufaktorové autentizace sníží zabezpečení vašeho účtu. Pro potvrzení zadejte své heslo.", + "totp_disabled_success": "Dvoufaktorová autentizace byla zakázána.", + "tutorials_title": "Návody a průvodci", + "tutorials_desc": "Ovládejte komentované prohlídky a nápovědné překryvy zobrazované v celé konzoli", + "tutorials_enabled": "Povolit návody", + "tutorials_enabled_hint": "Pokud je vypnuto, návody se nebudou spouštět automaticky a tlačítko nápovědy bude skryto", + "tutorials_reset_hint": "Označit všechny návody jako neviděné, aby mohly být zobrazeny znovu", + "tutorials_enabled_toast": "Návody povoleny", + "tutorials_disabled_toast": "Návody zakázány", + "tutorials_reset_toast": "Všechny návody byly resetovány", + "tab_auth": "Ověřování", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Nastavte externí ověřování přes LDAP nebo Active Directory. Uživatelé se budou moci přihlašovat doménovými přihlašovacími údaji.", + "ldap_enabled": "Povolit ověřování LDAP", + "ldap_enabled_hint": "Když je zapnuto, uživatelé se mohou přihlašovat pomocí údajů LDAP/AD. Místní účty stále fungují jako záloha.", + "ldap_connection": "Připojení k serveru", + "ldap_host": "Hostitel", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Přeskočit ověření TLS", + "ldap_timeout": "Časový limit připojení (s)", + "ldap_timeout_hint": "Počet sekund čekání na odpověď serveru LDAP", + "ldap_bind_mode": "Režim bind", + "ldap_direct_bind": "Přímý bind", + "ldap_direct_bind_hint": "Provést bind přímo pomocí šablony DN místo vyhledávání přes servisní účet.", + "ldap_bind_dn": "Bind DN (servisní účet)", + "ldap_bind_dn_hint": "Distinguished Name servisního účtu jen pro čtení používaného k vyhledávání uživatelů.", + "ldap_bind_password": "Heslo bind", + "ldap_base_dn": "Základní DN", + "ldap_base_dn_hint": "Vyhledávací základ pro hledání uživatelů, např. dc=example,dc=com", + "ldap_user_filter": "Filtr uživatelů", + "ldap_user_filter_hint": "LDAP filtr pro hledání uživatelů. Použijte {{username}} jako zástupný symbol. Výchozí: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Šablona DN pro přímý bind", + "ldap_direct_bind_dn_hint": "Šablona DN pro přímý bind. Použijte {{username}} jako zástupný symbol, např. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Atributy uživatele", + "ldap_attr_id": "Atribut uživatelského jména", + "ldap_attr_email": "Atribut e-mailu", + "ldap_attr_name": "Atribut zobrazovaného jména", + "ldap_group_mapping": "Mapování skupin na role", + "ldap_group_base_dn": "Základní DN skupin", + "ldap_group_base_dn_hint": "Ponechte prázdné, pokud chcete použít hlavní základní DN", + "ldap_group_filter": "Filtr skupin", + "ldap_group_attr_name": "Atribut názvu skupiny", + "ldap_default_role": "Výchozí role", + "ldap_default_role_hint": "Role přiřazená uživatelům, jejichž skupiny LDAP neodpovídají žádnému mapování", + "ldap_role_viewer": "Prohlížející", + "ldap_role_operator": "Operátor", + "ldap_role_admin": "Administrátor", + "ldap_group_role_map": "Mapa skupin na role", + "ldap_group_role_map_hint": "Mapujte skupiny LDAP na role BetterDesk. Formát: GroupDN=role oddělené znakem | (pipe). Příklad: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Otestovat připojení", + "ldap_testing": "Testování...", + "ldap_test_success": "Připojení bylo úspěšné! Server LDAP je dostupný a údaje bind jsou platné.", + "ldap_test_failed": "Připojení se nezdařilo", + "ldap_save": "Uložit konfiguraci LDAP", + "ldap_saved": "Konfigurace LDAP byla úspěšně uložena", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Nastavte jednotné přihlášení přes poskytovatele OpenID Connect (Azure AD, Okta, Google, Keycloak atd.).", + "oidc_enabled": "Povolit ověřování OIDC", + "oidc_enabled_hint": "Umožnit uživatelům přihlášení přes externího poskytovatele identity", + "oidc_provider": "Poskytovatel identity", + "oidc_display_name": "Text na přihlašovacím tlačítku", + "oidc_display_name_hint": "Text zobrazený na přihlašovacím tlačítku (např. Azure AD, Okta)", + "oidc_issuer_url": "Adresa URL vydavatele", + "oidc_issuer_url_hint": "Adresa URL vydavatele OpenID Connect (discovery proběhne automaticky)", + "oidc_client_id": "ID klienta", + "oidc_client_secret": "Tajný klíč klienta", + "oidc_redirect_url": "Adresa URL přesměrování (callback)", + "oidc_redirect_url_hint": "Musí přesně odpovídat nastavení u vašeho IdP. Obvykle: http(s)://vas-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Rozsahy", + "oidc_use_pkce": "Použít PKCE (doporučeno)", + "oidc_auto_discovery": "Automatické zjištění", + "oidc_allow_signup": "Automaticky vytvářet uživatele", + "oidc_manual_endpoints": "Ruční adresy koncových bodů", + "oidc_authorization_url": "Autorizační koncový bod", + "oidc_token_url": "Tokenový koncový bod", + "oidc_userinfo_url": "Koncový bod UserInfo", + "oidc_claim_mapping": "Mapování claimů", + "oidc_claim_username": "Claim uživatelského jména", + "oidc_claim_email": "Claim e-mailu", + "oidc_claim_name": "Claim zobrazovaného jména", + "oidc_claim_groups": "Claim skupin", + "oidc_role_mapping": "Mapování rolí", + "oidc_default_role": "Výchozí role", + "oidc_group_role_map": "Mapování skupin na role", + "oidc_group_role_map_hint": "Jedno mapování na řádek: nazev_skupiny=role (např. admins=admin, operators=operator)", + "oidc_test_discovery": "Otestovat discovery", + "oidc_testing": "Testování...", + "oidc_test_success": "Discovery proběhlo úspěšně! Koncové body byly nalezeny.", + "oidc_test_failed": "Discovery se nezdařilo", + "oidc_issuer_required": "Adresa URL vydavatele je vyžadována pro test discovery", + "oidc_save": "Uložit konfiguraci OIDC", + "oidc_saved": "Konfigurace OIDC byla úspěšně uložena", + "tab_advanced": "Pokročilé", + "connection_mode_title": "Strategia polaczen", + "connection_mode_desc": "Okresla, jak klienci RustDesk lacza sie ze soba: bezposrednio P2P (hole punch) gdy to mozliwe, lub zawsze przez relay.", + "connection_mode_label": "Domyslny tryb polaczenia", + "connection_mode_p2p_first": "P2P najpierw (doporučeno) — proba polaczenia bezposredniego, potem relay", + "connection_mode_relay_only": "Pouze relay — wszystkie sesje przez server posredniczacy", + "connection_mode_advanced": "Opcje zaawansowane", + "connection_mode_fallback_ms": "Limit czasu P2P przed relay (ms)", + "connection_mode_same_nat_relay": "Wymuszaj relay, gdy obie strony maja ten sam publiczny IP (NAT hairpin)", + "connection_mode_network_hint": "P2P vyžaduje UDP 21116 miedzy klientami. Na serverze: sygnal TCP/UDP 21116, relay 21117, test NAT 21115. Klient web zawsze uzywa relay.", + "connection_mode_save": "Uložit", + "connection_mode_save_restart": "Uložit i uruchom server ponownie", + "connection_mode_saved": "Tryb polaczenia zapisany", + "connection_mode_restart_started": "Restart servera zainicjowany", + "connection_mode_restart_failed": "Restart servera nie powiodl sie", + "connection_mode_not_configurable": "Ne mozna zmienic trybu na tym wdrozeniu (žádný unit systemd lub docker-compose)", + "connection_mode_compose_error": "Ne znaleziono sekcji environment servera w docker-compose.yml", + "connection_mode_source_saved": "Uloženo w", + "connection_mode_source_defaults": "Domyslne ustawienia servera (žádný zapisu z panelu)", + "connection_mode_runtime": "Aktywny server", + "advanced_title": "Soubori konfiguracyjne", + "advanced_desc": "Edytuj soubori konfiguracyjne servera bezposrednio w panelu. Zmiany moga vyžadujec ponownego uruchomienia uslug. Przed zapisem tworzona jest kopia zapasowa poprzedniej wersji.", + "advanced_warning": "Te soubori zawieraja dane wrazliwe (klucze API, hasla do bazy, sekrety sesji). Edytuj pouze, jesli wiesz, co robisz. Bledna skladnia moze uniemozliwic start servera.", + "advanced_files_label": "Soubori", + "advanced_select_file": "Wybierz soubor z listy, aby wyswietlic lub edytowac jego zawartosc.", + "advanced_reload": "Odswiez", + "advanced_save": "Uložit soubor", + "advanced_apply_restart": "Použít (restart uslugi)", + "advanced_saved": "Soubor konfiguracyjny zapisany", + "advanced_restart_after_save": "Konfigurace zapisana. Uruchomic ponownie powiazana usluge, aby zmiany weszly w zycie?", + "advanced_restart_confirm": "Uruchomic ponownie powiazane uslugi BetterDesk? Aktywne polaczenia moga na chwile zostac przerwane.", + "advanced_restart_console_confirm": "Uruchomic ponownie usluge konsoli web? Sesja w przegladarce na chwile sie rozlaczy; strona odswiezy sie po powrocie konsoli.", + "advanced_restart_started": "Restart uslugi zostal zainicjowany", + "advanced_restart_done": "Konzole uruchomiona ponownie — przeladowanie strony…", + "advanced_restart_polling": "Oczekiwanie na powrot konsoli…", + "advanced_restart_timeout": "Restart wyslany, ale konzole nie odpowiedziala na czas. Sprawdz logi systemd/NSSM i odswiez strone recznie.", + "advanced_restart_failed": "Restart uslugi nie powiodl sie (žádný uprawnien lub usluga nie jest zainstalowana)", + "advanced_save_confirm": "Zapisac zmiany w tym souboru? Zostanie utworzona kopia zapasowa poprzedniej wersji.", + "advanced_unsaved_confirm": "Masz niezapisane zmiany. Odrzucic je?", + "advanced_no_files": "Žádný dostepnych souborow konfiguracyjnych w tym systemie.", + "advanced_readonly": "pouze odczyt", + "advanced_missing": "žádný", + "advanced_new_file": "Nowy soubor (zostanie utworzony po zapisie)", + "advanced_new_file_hint": "Nowy soubor — přidat tresc i zapisz", + "advanced_backup_created": "utworzono kopie zapasowa", + "advanced_restart_console": "Uruchom ponownie usluge konsoli (np. systemctl restart betterdesk-console), aby zmiany w .env weszly w zycie.", + "advanced_restart_goserver": "Uruchom ponownie server Go BetterDesk, aby przeladowac liste blokad.", + "advanced_restart_systemd": "Po edycji unitow systemd wykonaj: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Uruchom ponownie odpowiednia usluge, aby zmiany weszly w zycie.", + "advanced_error_unknown": "Neznany soubor konfiguracyjny", + "advanced_error_not_found": "Soubor nie istnieje", + "advanced_error_not_file": "Sciezka nie wskazuje na zwykly soubor", + "advanced_error_too_large": "Soubor przekracza maksymalny rozmiar edycji (512 KB)", + "advanced_error_binary": "Souborow binarnych nie mozna edytowac w panelu", + "advanced_error_invalid": "Neprawidlowa zawartosc souboru", + "advanced_error_not_writable": "Soubor nie jest zapisywalny przez proces konsoli", + "advanced_file_console-env": "Srodowisko konsoli (.env)", + "advanced_file_console-env-local": "Nadpisania konsoli (.env.local)", + "advanced_file_go-blocklist": "Lista blokad servera Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (jednostka uslugi)", + "advanced_file_systemd-server": "systemd: betterdesk-server (jednostka uslugi)", + "advanced_file_console-session-secret": "Sekret sesji konsoli (.session_secret)", + "advanced_file_go-audit-log": "Dziennik audytu servera Go (audit.jsonl)", + "advanced_file_build-env": "Srodowisko budowania agenta (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfigurace)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkiestracja)", + "advanced_restart_none": "Ten soubor nie vyžaduje restart uslugi.", + "enrollment_title": "Rejestracja urzadzen (RustDesk)", + "enrollment_desc": "Okresla, jak nowi klienci RustDesk rejestruja sie na serverze i jak operátor zatwierdza zadania na stronie Zadan rejestracji.", + "enrollment_require_approval": "Vyžadujej akceptacji operátora (tryb Zarzadzany)", + "enrollment_require_approval_hint": "Po wlaczeniu nieznani klienci trafiaja do kolejki do momentu zatwierdzenia w Zadaniach rejestracji.", + "enrollment_rich_approve": "Pelny formularz przy akceptacji (nazwa, složka, skupiny, štítky)", + "enrollment_rich_approve_hint": "Pokazuje rozbudowany dialog przy zatwierdzaniu rejestracji enrollment i LAN.", + "enrollment_tag_picker": "Wybor tagow z listy istniejacych", + "enrollment_tag_picker_hint": "Umozliwia wybor tagow z listy uzywanej na stronie Urzadzenia zamiast samego wpisywania.", + "enrollment_open_requests": "Otworz zadania rejestracji", + "enrollment_pending_count": "{count} oczekujacych zadan rejestracji" + }, + "audit": { + "time": "Čas", + "user": "Uživatel", + "action": "Akce", + "details": "Podrobnosti", + "action_login": "Přihlášení", + "action_login_failed": "Přihlášení selhalo", + "action_logout": "Odhlášení", + "action_password_change": "Heslo změněno", + "action_2fa_enable": "2FA povoleno", + "action_2fa_disable": "2FA zakázáno", + "action_user_create": "Uživatel vytvořen", + "action_user_update": "Uživatel aktualizován", + "action_user_delete": "Uživatel smazán", + "action_settings_update": "Nastavení aktualizováno", + "action_device_ban": "Zařízení zablokováno", + "action_device_unban": "Zařízení odblokováno", + "action_device_delete": "Zařízení smazáno" + }, + "generator": { + "title": "Generátor konfigurace klienta", + "subtitle": "Vygenerovat konfiguraci pro klienty RustDesk", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Raná funkce — generátor balíčků agenta je v aktivním vývoji.", + "config_options": "Možnosti konfigurace", + "server_address": "Adresa serveru", + "server_address_hint": "Doména nebo IP adresa vašeho serveru", + "custom_port": "Vlastní port", + "port_hint": "Nechte prázdné pro výchozí (21116)", + "relay_server": "Relay server", + "relay_placeholder": "Stejný jako ID server, pokud prázdné", + "relay_hint": "Volitelné: samostatná adresa relay serveru", + "include_key": "Zahrnout veřejný klíč do konfigurace", + "generate": "Vygenerovat konfiguraci", + "output": "Výstup konfigurace", + "usage_title": "Podrobnosti připojení", + "generated": "Konfigurace vygenerována", + "server_required": "Adresa serveru je povinná", + "nothing_to_copy": "Nejprve vygenerujte konfiguraci", + "bundles_title": "Balíčky agenta", + "new_bundle": "Nový balíček", + "editor_title": "Editor balíčku", + "empty_state": "Vyberte balíček vlevo nebo vytvořte nový.", + "loading": "Načítání…", + "no_bundles": "Zatím žádné balíčky. Vytvořte první.", + "bundle_name": "Název balíčku", + "bundle_name_hint": "Pouze interní označení — nezobrazuje se koncovým uživatelům.", + "short_link": "Krátký odkaz ke stažení", + "short_link_hint": "Používá se ve veřejné URL (/d/…). Pouze malá písmena, číslice a pomlčky (2–32 znaků). Automaticky vyplněno z názvu balíčku — zkrácením usnadníte sdílení (např. acme).", + "branding_section": "Branding", + "company_name": "Název firmy / značky", + "short_text": "Krátký popis", + "contact_email": "Kontaktní e-mail", + "contact_phone": "Kontaktní telefon", + "contact_url": "Kontaktní web", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG nebo WebP. Maximálně 256 KB.", + "logo_clear": "Odebrat logo", + "primary_color": "Primární barva", + "accent_color": "Barva záhlaví", + "default_lang": "Výchozí jazyk", + "allow_unattended": "Povolit bezobslužný přístup", + "allow_unattended_hint": "Když je zapnuto, agent zobrazuje trvalé heslo pro přístup operátora.", + "save": "Uložit balíček", + "revoke": "Odvolat", + "unrevoke": "Znovu povolit", + "revoked": "Odvoláno", + "preview_title": "Živý náhled", + "preview_hint": "Přibližný vzhled okna agenta pro koncového uživatele.", + "preview_default_name": "Podpora BetterDesk", + "preview_status_ready": "Připraveno", + "preview_id": "Vaše ID", + "preview_password": "Heslo", + "preview_chat": "Chat s podporou", + "preview_settings": "Nastavení (pouze admin)", + "preview_quit": "Ukončit (pouze admin)", + "download_link_title": "Odkaz ke stažení", + "download_link_hint": "Sdílejte tento odkaz s uživateli — zobrazí se jim brandovaná stránka stažení. Staré hex odkazy nadále fungují i po změně krátkého odkazu.", + "open_portal": "Otevřít", + "created": "Balíček vytvořen", + "saved": "Balíček uložen", + "deleted": "Balíček odstraněn", + "revoked_ok": "Balíček odvolán", + "unrevoked_ok": "Balíček znovu aktivován", + "link_copied": "Odkaz zkopírován do schránky", + "copy_failed": "Nepodařilo se zkopírovat automaticky — zkopírujte ručně", + "unsaved_confirm": "Zahodit neuložené změny?", + "confirm_revoke": "Odvolat tento balíček? Odkaz ke stažení přestane fungovat.", + "confirm_unrevoke": "Znovu aktivovat tento balíček?", + "confirm_delete": "Trvale odstranit tento balíček? Tuto akci nelze vrátit zpět.", "errors": { - "forbidden_title": "Přístup odepřen", - "forbidden_message": "Nemáte oprávnění k přístupu k tomuto prostředku.", - "not_found_title": "Stránka nebyla nalezena", - "not_found_message": "Stránka, kterou hledáte, neexistuje nebo byla přesunuta.", - "server_error_title": "Chyba serveru", - "server_error_message": "Něco se pokazilo. Zkuste to prosím znovu později.", - "go_home": "Přejít na domů", - "try_again": "Zkusit znovu", - "load_devices_failed": "Nepodařilo se načíst zařízení", - "load_key_failed": "Nepodařilo se načíst klíč", - "load_qr_failed": "Nepodařilo se načíst QR kód", - "load_audit_failed": "Nepodařilo se načíst auditní záznam", - "load_users_failed": "Nepodařilo se načíst uživatele", - "load_folders_failed": "Nepodařilo se načíst složky", - "download_failed": "Stažení selhalo", - "logout_failed": "Odhlášení selhalo", - "password_change_failed": "Nepodařilo se změnit heslo", - "language_change_failed": "Nepodařilo se změnit jazyk", - "ban_failed": "Nepodařilo se zablokovat zařízení", - "unban_failed": "Nepodařilo se odblokovat zařízení", - "delete_failed": "Nepodařilo se smazat zařízení", - "change_id_failed": "Nepodařilo se změnit ID zařízení", - "bulk_delete_failed": "Nepodařilo se smazat zařízení", - "sync_failed": "Nepodařilo se synchronizovat stav", - "error": "Chyba", - "not_found": "Nenalezeno", - "server_error": "Chyba serveru", - "load_device_failed": "Nepodařilo se načíst zařízení", - "load_orgs_failed": "Nepodařilo se načíst organizace" + "validation_failed": "Ověření se nezdařilo", + "name_required": "Název balíčku je povinný", + "company_name_required": "Název firmy je povinný", + "logo_invalid": "Logo musí být platný soubor obrázku", + "logo_too_large": "Logo musí mít 256 KB nebo méně", + "logo_read_failed": "Nepodařilo se přečíst soubor loga", + "primary_color_invalid": "Primární barva musí být hex hodnota (např. #2563eb)", + "accent_color_invalid": "Barva záhlaví musí být hex hodnota (např. #1e293b)", + "contact_url_invalid": "Kontaktní web musí být platná URL adresa", + "server_host_required": "Publiczny adres servera jest vyžadujeny", + "server_host_invalid": "Podaj prawidlowa domene lub adres IPv4", + "token_failed": "Ne udalo sie wygenerowac tokenu rejestracji — sprawdz polaczenie z serverem", + "rebuild_revoked": "Ne mozna przebudowac wycofanego pakietu — najpierw go przywroc", + "slug_invalid": "Krátký odkaz smí obsahovat pouze malá písmena, číslice a pomlčky", + "slug_too_short": "Krátký odkaz musí mít alespoň 2 znaky", + "slug_too_long": "Krátký odkaz smí mít nejvýše 32 znaků", + "slug_taken": "Tento krátký odkaz již používá jiný balíček" }, - "remote": { - "title": "Vzdálená plocha", - "connecting": "Připojování...", - "waiting_password": "Čekání na heslo", - "authenticating": "Ověřování...", - "streaming": "Připojeno", - "disconnected": "Odpojeno", - "error": "Chyba", - "status_idle": "Nečinné", - "password_required": "Vyžadováno heslo", - "enter_password_for": "Zadejte heslo pro zařízení", - "password_placeholder": "Heslo zařízení", - "connect": "Připojit", - "reconnect": "Znovu připojit", - "disconnect": "Odpojit", - "back_to_devices": "Zpět na zařízení", - "fullscreen": "Celá obrazovka", - "toggle_audio": "Přepnout zvuk", - "send_keys": "Odeslat klávesy", - "scale_mode": "Režim měřítka", - "scale_fit": "Přizpůsobit oknu", - "scale_fill": "Vyplnit okno", - "scale_original": "Původní velikost (1:1)", - "scale_stretch": "Roztáhnout na vyplnění", - "actions": "Akce", - "lock_screen": "Uzamknout obrazovku", - "restart_remote": "Restartovat vzdálené zařízení", - "refresh_screen": "Obnovit obrazovku", - "clipboard_paste": "Vložit ze schránky", - "block_input": "Blokovat vstup", - "display_settings": "Nastavení zobrazení", - "image_quality": "Kvalita obrazu", - "quality_best": "Nejlepší (plná kvalita, 60 sn./s)", - "quality_balanced": "Vyvážená", - "quality_low": "Výkon", - "show_cursor": "Zobrazit vzdálený kurzor", - "lock_after_session": "Po relaci uzamknout", - "privacy_mode": "Režim soukromí", - "disable_clipboard": "Zakázat schránku", - "chat": "Chat", - "chat_placeholder": "Napište zprávu...", - "record": "Nahrávat obrazovku", - "view_only": "Pouze zobrazení", - "pin_toolbar": "Připnout panel nástrojů", - "monitors": "Monitory", - "select_monitor": "Vybrat monitor", - "quality_speed": "Rychlost (nízká kvalita, 60 sn./s)", - "quality_quality": "Kvalita (nejlepší, 30 sn./s)", - "recording_started": "Nahrávání spuštěno", - "recording_stopped": "Nahrávání zastaveno", - "download_recording": "Stáhnout záznam", - "e2e_encrypted": "Šifrováno end-to-end", - "e2e_key_exchange": "Navazování zabezpečeného kanálu...", - "confirm_restart": "Opravdu chcete restartovat vzdálené zařízení?", - "webcodecs_not_supported": "Váš prohlížeč nepodporuje WebCodecs API. Použijte prosím Chrome 94+ nebo Edge 94+.", - "webcodecs_insecure_context": "WebCodecs není přes HTTP k dispozici. Video používá softwarovou náhradu. Pro nejlepší výkon použijte HTTPS.", - "webcodecs_fallback_active": "Aktivní softwarový dekodér videa (omezený výkon)", - "click_to_start": "Klikněte pro spuštění", - "autoplay_blocked": "Prohlížeč vyžaduje interakci uživatele pro spuštění přehrávání videa a zvuku.", - "start_playback": "Spustit přehrávání", - "new_connection": "Nové připojení", - "device_id_placeholder": "Zadejte ID zařízení", - "http_warning": "Režim HTTP: omezeno na softwarové dekódování H.264 (~15 FPS). Pro plný výkon (WebCodecs, VP9, 60 FPS) použijte HTTPS.", - "file_transfer": "Přenos souborů", - "file_upload": "Nahrát", - "file_download": "Stáhnout", - "file_empty": "Tato složka je prázdná", - "file_transfers": "Přenosy", - "file_complete": "Dokončeno", - "file_error": "Přenos selhal", - "file_show_hidden": "Zobrazit skryté soubory", - "file_new_folder": "Nová složka", - "file_new_folder_prompt": "Zadejte název složky:", - "file_parent": "Nadřazená složka", - "file_root": "Kořen", - "file_rename": "Přejmenovat", - "file_rename_prompt": "Zadejte nový název:", - "file_delete_confirm": "Opravdu chcete tuto položku smazat?", - "file_cancelled": "Přenos zrušen", - "2fa_required": "Vyžadováno ověření 2FA", - "2fa_hint": "Zadejte 6místný kód z autentizační aplikace", - "2fa_invalid": "Zadejte platný 6místný kód", - "verify": "Ověřit", - "use_cdap_fallback": "Použít prohlížeč CDAP", - "cdap_fallback_hint": "Otevře odlehčený prohlížeč se snímky JPEG, který používá bd-signal/CDAP místo RustDesk relay. Užitečné, když je protějšek offline na relay, ale dostupný přes kanál správy agenta.", - "clipboard_empty": "Schránka je prázdná", - "clipboard_denied": "Přístup ke schránce byl odepřen. Je vyžadováno HTTPS nebo nebylo uděleno oprávnění.", - "file_loading": "Načítání...", - "file_timeout": "Vzdálené zařízení neodpovědělo. Přenos souborů nemusí být podporován nebo je na vzdáleném zařízení zakázán.", - "codec": "Kodek videa", - "codec_auto": "Automaticky (doporučeno)" + "legacy_title": "Generátor konfigurace klienta", + "connection_section": "Polaczenie z serverem", + "server_host": "Publiczny adres servera", + "server_host_placeholder": "wsparcie.example.com lub 203.0.113.10", + "server_host_hint": "Domena lub publiczny adres IP, pod ktorym uzytkownicy docieraja do servera BetterDesk. Port jest pobierany z konfiguracji konsoli.", + "use_https": "Uzywaj HTTPS / WSS (doporučeno)", + "enrollment_token": "Rejestracja urzadzenia", + "enrollment_token_pending": "Indywidualnie po zatwierdzeniu", + "enrollment_token_set": "Indywidualnie — zatwierdz w Rejestracjach", + "enrollment_token_hint": "Kazda instalacja rejestruje sie samodzielnie. Zatwierdzaj nowe urzadzenia w panelu Rejestracje; server wydaje wtedy unikalny klucz dostepu dla kazdego komputera.", + "enrollment_per_device": "Indywidualnie — zatwierdz w Rejestracjach", + "background_color": "Tlo okna", + "surface_color": "Tlo kart", + "text_color": "Barva textu", + "text_muted_color": "Barva textu drugorzednego", + "status_ready_color": "Barva wskaznika gotowosci", + "header_text_color": "Barva textu naglowka", + "builds_title": "Buildy klienta", + "builds_hint": "Instalatory kompilowane na tym serverze dla kazdej platformy. Přestavět po naprawie toolchaina lub aktualizacji zrodel agenta.", + "builds_loading": "Ladowanie statusu buildow…", + "builds_empty": "Žádný buildow w kolejce — zapisz pakiet lub kliknij Přestavět wszystkie.", + "rebuild_all": "Přestavět wszystkie", + "rebuilding_all": "Kolejkowanie buildow…", + "rebuild_queued": "Wszystkie platformy dodane do kolejki", + "rebuild_confirm": "Przebudowac instalatory dla wszystkich platform? Připraveno artefakty zostana zastapione.", + "build_status_ready": "Gotowy", + "build_status_pending": "W kolejce", + "build_status_building": "Sestavování", + "build_status_failed": "Neudany", + "builds_summary": "{{ready}} gotowych · {{pending}} w kolejce · {{building}} sestavování · {{failed}} nieudanych", + "build_error_hint": "Blad buildu", + "preview_help": "Požádat o pomoc" + }, + "server": { + "port": "Port", + "api_port": "API port", + "id_server": "ID server", + "relay_server": "Relay server", + "api_key": "API klíč" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Zablokováno", + "running": "Běží", + "stopped": "Zastaveno", + "unknown": "Neznámý", + "checking": "Kontroluji...", + "label": "Stav", + "no_signal": "Bez signálu" + }, + "actions": { + "refresh": "Obnovit", + "copy": "Kopírovat", + "connect": "Připojit", + "connect_desktop": "Připojit přes desktopový klient", + "remote_viewer": "Vzdálený prohlížeč", + "web_remote": "Web vzdálený", + "details": "Podrobnosti", + "edit": "Upravit", + "delete": "Smazat", + "ban": "Blokovat", + "unban": "Odblokovat", + "save": "Uložit", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "close": "Zavřít", + "clear": "Vyčistit", + "ok": "OK", + "saved": "Úspěšně uloženo", + "back": "Zpět", + "create": "Vytvořit", + "dismiss": "Zavřít", + "view_all": "Zobrazit vše", + "cdap_viewer": "Prohlížeč snímků CDAP", + "add": "Přidat", + "remove": "Odebrat" + }, + "time": { + "just_now": "Právě teď", + "seconds_ago": "před {count}s", + "minutes_ago": "před {count}m", + "hours_ago": "před {count}h", + "days_ago": "před {count}d", + "day_mon": "Po", + "day_tue": "Út", + "day_wed": "St", + "day_thu": "Čt", + "day_fri": "Pá", + "day_sat": "So", + "day_sun": "Ne" + }, + "users": { + "title": "Správa uživatelů", + "subtitle": "Spravujte uživatele konzole a oprávnění", + "add_user": "Přidat uživatele", + "edit_user": "Upravit uživatele", + "username": "Uživatelské jméno", + "username_placeholder": "Zadejte uživatelské jméno", + "username_hint": "3–32 znaků, pouze písmena, číslice a podtržítka", + "password": "Heslo", + "password_placeholder": "Zadejte heslo", + "password_hint": "Minimálně 8 znaků, s malými a velkými písmeny, čísly a symboly", + "password_leave_empty": "Nechte prázdné pro zachování stávajícího", + "role": "Role", + "role_admin": "Administrátor", + "role_operator": "Operátor", + "role_viewer": "Prohlížející", + "role_hint": "Prohlížející mohou pouze zobrazovat data, operátoři mohou spravovat zařízení, administrátoři mají plný přístup", + "created": "Vytvořeno", + "last_login": "Poslední přihlášení", + "never": "Nikdy", + "actions": "Akce", + "create": "Vytvořit uživatele", + "edit": "Upravit", + "reset_password": "Obnovit heslo", + "new_password": "Nové heslo", + "delete_title": "Smazat uživatele", + "delete_confirm": "Opravdu chcete smazat uživatele {username}?", + "delete_success": "Uživatel byl úspěšně smazán", + "user_created": "Uživatel byl úspěšně vytvořen", + "user_updated": "Uživatel byl úspěšně aktualizován", + "password_reset_success": "Heslo bylo úspěšně resetováno", + "empty_title": "Nebyli nalezeni žádní uživatelé", + "empty_text": "Přidejte uživatele pro správu přístupu do konzole", + "fill_required": "Vyplňte prosím všechna povinná pole", + "invalid_username": "Uživatelské jméno musí mít 3–32 znaků a obsahovat pouze písmena, číslice a podtržítka", + "username_exists": "Uživatelské jméno již existuje", + "weak_password": "Heslo je příliš slabé", + "password_too_short": "Heslo musí mít alespoň 8 znaků", + "invalid_role": "Neplatná role", + "cannot_demote_self": "Nemůžete sami sebe degradovat", + "cannot_delete_self": "Nemůžete smazat vlastní účet", + "last_admin": "Nelze smazat posledního administrátora", + "admin_only": "Tato funkce je dostupná pouze administrátorům", + "password_required": "Heslo je povinné", + "not_found": "Uživatel nebyl nalezen", + "strength_weak": "Slabé", + "strength_medium": "Střední", + "strength_strong": "Silné", + "security_tips_title": "Doporučené bezpečnostní postupy", + "tip_strong_passwords": "Používejte silná a jedinečná hesla pro každého uživatele", + "tip_unique_accounts": "Vytvořte samostatný účet pro každou osobu", + "tip_viewer_role": "Používejte roli prohlížejícího pro uživatele, kteří potřebují pouze přístup pro čtení", + "tip_operator_role": "Používejte roli operátora pro uživatele, kteří potřebují spravovat zařízení, ale ne uživatele", + "tip_audit_logs": "Pravidelně kontrolujte auditní záznamy kvůli podezřelé aktivitě", + "role_pro": "Pro (pouze API)", + "role_super_admin": "Super administrátor", + "role_server_admin": "Administrátor serveru", + "role_global_admin": "Globální administrátor", + "organizations": "Organizace", + "user_organizations": "Organizace pro {username}", + "no_organizations": "Uživatel není přiřazen k žádné organizaci", + "org_removed": "Přiřazení organizace bylo odstraněno", + "server_role_label": "Serverová role", + "server_role_hint": "Určuje, co může uživatel dělat v celé konzoli (přístup do panelu, konfigurace serveru, audit atd.).", + "org_membership_section": "Členství v organizacích", + "org_membership_hint": "Uživatel může patřit do více organizací. Role v organizaci řídí oprávnění pouze uvnitř dané organizace a je nezávislá na serverové roli výše.", + "column_organizations": "Organizace", + "no_orgs_short": "—", + "org_count_one": "{count} organizace", + "org_count_many": "{count} organizací", + "all_orgs_assigned": "Uživatel je již členem každé organizace.", + "user_groups": "Skupiny uživatelů", + "user_groups_hint": "Skupiny uživatelů lze použít k udělení přístupu k vybraným skupinám zařízení.", + "loading_user_groups": "Načítání skupin uživatelů...", + "no_user_groups": "Nejsou dostupné žádné skupiny uživatelů", + "create_user_group": "Vytvořit skupinu", + "edit_user_group": "Upravit skupinu uživatelů", + "delete_user_group": "Odstranit skupinu uživatelů", + "delete_user_group_confirm": "Odstranit skupinu uživatelů {name}? Členové ztratí přístup udělený touto skupinou.", + "user_group_created": "Skupina uživatelů vytvořena", + "user_group_updated": "Skupina uživatelů aktualizována", + "user_group_deleted": "Skupina uživatelů odstraněna", + "user_group_not_found": "Skupina uživatelů nebyla nalezena", + "group_name": "Název skupiny", + "group_name_placeholder": "Operátoři", + "group_note": "Note", + "group_note_placeholder": "Volitelná poznámka", + "group_name_required": "Název skupiny je povinný", + "group_members_count": "{count} členů", + "provider": "Poskytovatel", + "provider_local": "Lokalny", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Zarzadzane przez dostawce tozsamosci", + "provider_managed_hint": "To konto jest zarzadzane przez zewnetrznego dostawce tozsamosci (LDAP/AD lub SSO). Haslo i rola sa kontrolowane przez dostawce i nie mozna ich tu zmienic." + }, + "folders": { + "title": "Složky", + "create": "Vytvořit složku", + "edit": "Upravit složku", + "delete": "Smazat složku", + "name": "Název složky", + "name_placeholder": "Zadejte název složky", + "name_required": "Název složky je povinný", + "name_too_long": "Název složky je příliš dlouhý (max. 50 znaků)", + "color": "Barva", + "icon": "Ikona", + "not_found": "Složka nebyla nalezena", + "delete_confirm": "Opravdu chcete tuto složku smazat? Zařízení budou odřazena.", + "delete_success": "Složka byla úspěšně smazána", + "created": "Složka byla úspěšně vytvořena", + "updated": "Složka byla úspěšně aktualizována", + "no_devices_selected": "Nebyla vybrána žádná zařízení", + "devices_moved": "Zařízení byla úspěšně přesunuta", + "device_assigned": "Zařízení bylo přiřazeno do složky", + "unassigned": "Nepřiřazeno", + "all_devices": "Všechna zařízení", + "drag_hint": "Přetahujte zařízení do složek pro lepší organizaci", + "move_to": "Přesunout do", + "toggle_sidebar": "Zobrazit/skrýt boční panel" + }, + "errors": { + "forbidden_title": "Přístup odepřen", + "forbidden_message": "Nemáte oprávnění k přístupu k tomuto prostředku.", + "not_found_title": "Stránka nebyla nalezena", + "not_found_message": "Stránka, kterou hledáte, neexistuje nebo byla přesunuta.", + "server_error_title": "Chyba serveru", + "server_error_message": "Něco se pokazilo. Zkuste to prosím znovu později.", + "go_home": "Přejít na domů", + "try_again": "Zkusit znovu", + "load_devices_failed": "Nepodařilo se načíst zařízení", + "load_key_failed": "Nepodařilo se načíst klíč", + "load_qr_failed": "Nepodařilo se načíst QR kód", + "load_audit_failed": "Nepodařilo se načíst auditní záznam", + "load_users_failed": "Nepodařilo se načíst uživatele", + "load_folders_failed": "Nepodařilo se načíst složky", + "download_failed": "Stažení selhalo", + "logout_failed": "Odhlášení selhalo", + "password_change_failed": "Nepodařilo se změnit heslo", + "language_change_failed": "Nepodařilo se změnit jazyk", + "ban_failed": "Nepodařilo se zablokovat zařízení", + "unban_failed": "Nepodařilo se odblokovat zařízení", + "delete_failed": "Nepodařilo se smazat zařízení", + "change_id_failed": "Nepodařilo se změnit ID zařízení", + "bulk_delete_failed": "Nepodařilo se smazat zařízení", + "sync_failed": "Nepodařilo se synchronizovat stav", + "error": "Chyba", + "not_found": "Nenalezeno", + "server_error": "Chyba serveru", + "load_device_failed": "Nepodařilo se načíst zařízení", + "load_orgs_failed": "Nepodařilo se načíst organizace" + }, + "remote": { + "title": "Vzdálená plocha", + "connecting": "Připojování...", + "waiting_password": "Čekání na heslo", + "authenticating": "Ověřování...", + "streaming": "Připojeno", + "disconnected": "Odpojeno", + "error": "Chyba", + "status_idle": "Nečinné", + "password_required": "Vyžadováno heslo", + "enter_password_for": "Zadejte heslo pro zařízení", + "password_placeholder": "Heslo zařízení", + "connect": "Připojit", + "reconnect": "Znovu připojit", + "disconnect": "Odpojit", + "back_to_devices": "Zpět na zařízení", + "fullscreen": "Celá obrazovka", + "toggle_audio": "Přepnout zvuk", + "send_keys": "Odeslat klávesy", + "scale_mode": "Režim měřítka", + "scale_fit": "Přizpůsobit oknu", + "scale_fill": "Vyplnit okno", + "scale_original": "Původní velikost (1:1)", + "scale_stretch": "Roztáhnout na vyplnění", + "actions": "Akce", + "lock_screen": "Uzamknout obrazovku", + "restart_remote": "Restartovat vzdálené zařízení", + "refresh_screen": "Obnovit obrazovku", + "clipboard_paste": "Vložit ze schránky", + "block_input": "Blokovat vstup", + "display_settings": "Nastavení zobrazení", + "image_quality": "Kvalita obrazu", + "quality_best": "Nejlepší (plná kvalita, 60 sn./s)", + "quality_balanced": "Vyvážená", + "quality_low": "Výkon", + "show_cursor": "Zobrazit vzdálený kurzor", + "lock_after_session": "Po relaci uzamknout", + "privacy_mode": "Režim soukromí", + "disable_clipboard": "Zakázat schránku", + "chat": "Chat", + "chat_placeholder": "Napište zprávu...", + "record": "Nahrávat obrazovku", + "view_only": "Pouze zobrazení", + "pin_toolbar": "Připnout panel nástrojů", + "monitors": "Monitory", + "select_monitor": "Vybrat monitor", + "quality_speed": "Rychlost (nízká kvalita, 60 sn./s)", + "quality_quality": "Kvalita (nejlepší, 30 sn./s)", + "recording_started": "Nahrávání spuštěno", + "recording_stopped": "Nahrávání zastaveno", + "download_recording": "Stáhnout záznam", + "e2e_encrypted": "Šifrováno end-to-end", + "e2e_key_exchange": "Navazování zabezpečeného kanálu...", + "confirm_restart": "Opravdu chcete restartovat vzdálené zařízení?", + "webcodecs_not_supported": "Váš prohlížeč nepodporuje WebCodecs API. Použijte prosím Chrome 94+ nebo Edge 94+.", + "webcodecs_insecure_context": "WebCodecs není přes HTTP k dispozici. Video používá softwarovou náhradu. Pro nejlepší výkon použijte HTTPS.", + "webcodecs_fallback_active": "Aktivní softwarový dekodér videa (omezený výkon)", + "click_to_start": "Klikněte pro spuštění", + "autoplay_blocked": "Prohlížeč vyžaduje interakci uživatele pro spuštění přehrávání videa a zvuku.", + "start_playback": "Spustit přehrávání", + "new_connection": "Nové připojení", + "device_id_placeholder": "Zadejte ID zařízení", + "http_warning": "Režim HTTP: omezeno na softwarové dekódování H.264 (~15 FPS). Pro plný výkon (WebCodecs, VP9, 60 FPS) použijte HTTPS.", + "file_transfer": "Přenos souborů", + "file_upload": "Nahrát", + "file_download": "Stáhnout", + "file_empty": "Tato složka je prázdná", + "file_transfers": "Přenosy", + "file_complete": "Dokončeno", + "file_error": "Přenos selhal", + "file_show_hidden": "Zobrazit skryté soubory", + "file_new_folder": "Nová složka", + "file_new_folder_prompt": "Zadejte název složky:", + "file_parent": "Nadřazená složka", + "file_root": "Kořen", + "file_rename": "Přejmenovat", + "file_rename_prompt": "Zadejte nový název:", + "file_delete_confirm": "Opravdu chcete tuto položku smazat?", + "file_cancelled": "Přenos zrušen", + "2fa_required": "Vyžadováno ověření 2FA", + "2fa_hint": "Zadejte 6místný kód z autentizační aplikace", + "2fa_invalid": "Zadejte platný 6místný kód", + "verify": "Ověřit", + "use_cdap_fallback": "Použít prohlížeč CDAP", + "cdap_fallback_hint": "Otevře odlehčený prohlížeč se snímky JPEG, který používá bd-signal/CDAP místo RustDesk relay. Užitečné, když je protějšek offline na relay, ale dostupný přes kanál správy agenta.", + "clipboard_empty": "Schránka je prázdná", + "clipboard_denied": "Přístup ke schránce byl odepřen. Je vyžadováno HTTPS nebo nebylo uděleno oprávnění.", + "file_loading": "Načítání...", + "file_timeout": "Vzdálené zařízení neodpovědělo. Přenos souborů nemusí být podporován nebo je na vzdáleném zařízení zakázán.", + "codec": "Kodek videa", + "codec_auto": "Automaticky (doporučeno)" + }, + "branding": { + "identity_title": "Identita značky", + "identity_desc": "Přizpůsobte název a popis aplikace zobrazovaný v celé konzoli", + "app_name": "Název aplikace", + "app_description": "Popis aplikace", + "logo_title": "Logo", + "logo_desc": "Zvolte, jak se bude vaše logo zobrazovat v postranním panelu a na přihlašovací stránce", + "logo_type_icon": "Ikona Material", + "logo_type_svg": "SVG kód", + "logo_type_image": "URL obrázku", + "logo_icon_name": "Název ikony", + "logo_icon_hint": "Zadejte název ikony Material Icons (např. dns, cloud, security). Viz fonts.google.com/icons", + "logo_svg_code": "SVG kód", + "logo_svg_hint": "Sem vložte SVG značky. Podporuje celé prvky včetně cest a stylů.", + "logo_image_upload": "Nahrát obrázek", + "logo_image_choose": "Vybrat soubor obrázku", + "logo_image_hint": "PNG, JPG, GIF, WebP nebo SVG. Max. 1,5 MB. Obrázek je uložen jako data base64.", + "logo_image_url": "Data / URL obrázku", + "logo_image_url_hint": "Automaticky se vyplní po nahrání souboru, nebo vložte URL ručně.", + "logo_image_too_large": "Obrázek je příliš velký. Maximální velikost je 1,5 MB.", + "logo_image_invalid_type": "Neplatný typ souboru. Použijte PNG, JPG, GIF, WebP nebo SVG.", + "preview": "Náhled", + "colors_title": "Barevné schéma", + "colors_desc": "Přizpůsobte barevnou paletu. Nechte prázdné pro použití výchozích hodnot.", + "colors_backgrounds": "Pozadí", + "colors_text": "Text", + "colors_accents": "Akcentové barvy", + "colors_borders": "Ohraničení", + "import_export_title": "Import a export", + "import_export_desc": "Uložte motiv jako soubor JSON nebo jej importujte z jiné instance", + "export_theme": "Exportovat motiv", + "import_theme": "Importovat motiv", + "reset_defaults": "Obnovit výchozí hodnoty", + "save_branding": "Uložit branding", + "saved": "Branding byl úspěšně uložen. Načítám znovu...", + "exported": "Motiv exportován", + "imported": "Motiv byl úspěšně importován. Načítám znovu...", + "import_error": "Import motivu selhal. Neplatný formát souboru.", + "reset_confirm": "Opravdu chcete obnovit výchozí branding? Tuto akci nelze vrátit zpět.", + "reset_success": "Branding byl obnoven na výchozí hodnoty. Načítám znovu...", + "logo_type_text": "Textové logo", + "logo_text": "Text loga", + "logo_text_hint": "Hlavní text zobrazený jako logo vaší značky", + "logo_text_accent": "Doplňkový text", + "logo_text_accent_hint": "Vedlejší text pod logem (např. název produktu nebo slogan)", + "logo_upload_success": "Logo bylo úspěšně nahráno.", + "typography_title": "Typografie", + "typography_desc": "Vyberte písma pro nadpisy a běžný text. Písma budou stažena na server pro vlastní hostování.", + "font_heading": "Písmo nadpisů", + "font_heading_hint": "Používá se pro nadpisy (H1–H6) a textové logo", + "font_body": "Písmo textu", + "font_body_hint": "Používá se pro běžný text a prvky uživatelského rozhraní", + "font_search_placeholder": "Hledat písma...", + "font_system_default": "Výchozí systémové", + "font_clear": "Vyčistit", + "font_cat_all": "Vše", + "font_downloaded_count": "písma stažena na server", + "powered_by": "Napedzane przez", + "background_title": "Tlo i wyglad", + "background_desc": "Ustaw tapete konsoli, gradient lub jednolite tlo. Karty unosza sie nad nim.", + "bg_type_none": "Žádný", + "bg_type_color": "Jednolity barva", + "bg_type_gradient": "Gradient", + "bg_type_image": "Obrázek", + "bg_color": "Barva tla", + "bg_gradient": "Gradient CSS", + "bg_gradient_hint": "Dowolny prawidlowy gradient CSS, np. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Przeslij obrázek tla", + "bg_image_choose": "Wybierz soubor obrázeku", + "bg_image_hint": "PNG, JPG, WebP lub GIF. Maks. 8 MB. Zapisywane na serverze.", + "bg_image_url": "Sciezka / URL obrázeku", + "bg_size": "Skalowanie obrázeku", + "bg_size_cover": "Wypelnij (caly ekran)", + "bg_size_contain": "Dopasuj (zmiesc)", + "bg_size_auto": "Auto (oryginal)", + "bg_blur": "Rozmycie tla", + "bg_overlay": "Ciemna nakladka", + "bg_overlay_hint": "Przyciemnia tlo dla lepszej czytelnosci textu.", + "bg_image_too_large": "Obrázek jest za duzy. Maksymalny rozmiar to 8 MB.", + "bg_image_invalid_type": "Neprawidlowy typ souboru. Uzyj PNG, JPG, WebP lub GIF.", + "bg_upload_success": "Obrázek tla przeslany pomyslnie.", + "login_title": "Strona logowania", + "login_desc": "Dostosuj naglowek, podtytul i tlo ekranu logowania.", + "login_heading": "Naglowek logowania", + "login_heading_placeholder": "Witaj ponownie", + "login_subheading": "Podtytul logowania", + "login_subheading_placeholder": "Zaloguj sie do swojego konta", + "login_bg_inherit": "Ano jak konzole", + "agent_title": "Strona pobierania agenta", + "agent_desc": "Dostosuj publiczny portal pobierania agenta widoczny dla uzytkownikow.", + "agent_show_powered": "Pokaz \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Wyswietla informacje o BetterDesk w stopce portalu pobierania.", + "footer_title": "Stopka i prawa autorskie", + "footer_desc": "Přidat wlasny wiersz stopki widoczny na ekranie logowania i w panelu bocznym.", + "footer_text": "Text stopki", + "footer_text_hint": "np. informacja o prawach autorskich lub nazwa firmy.", + "show_powered": "Pokaz informacje \"BetterDesk\"", + "show_powered_hint": "Wyswietla nazwe i wersje BetterDesk w stopce logowania i panelu bocznym.", + "custom_css_title": "Wlasny CSS", + "custom_css_desc": "Pokročilé: wstrzyknij wlasny CSS stosowany w calej konsoli i na stronie logowania.", + "custom_css_hint": "Uzywaj ostroznie. Neprawidlowe lub niebezpieczne reguly sa filtrowane. Maks. 20 000 znakow." + }, + "device_detail": { + "tab_overview": "Přehled", + "tab_tags": "Tagy a poznámky", + "tab_actions": "Akce", + "section_identity": "Identita", + "section_network": "Síť", + "section_timestamps": "Časové údaje", + "section_connect": "Připojení", + "section_manage": "Správa", + "folder": "Složka", + "status_tier": "Úroveň stavu", + "device_banned": "Toto zařízení je zablokováno", + "no_reason": "Nebyl uveden žádný důvod", + "tags": "Tagy", + "no_tags": "Tomuto zařízení nejsou přiřazeny žádné tagy", + "tag_placeholder": "Zadejte název tagu...", + "add_tag": "Přidat", + "tag_exists": "Tento tag již existuje", + "notes": "Poznámky", + "notes_placeholder": "Přidejte poznámky k tomuto zařízení...", + "danger_zone": "Nebezpečná zóna", + "action_connect_web": "Webový vzdálený přístup", + "action_connect_web_desc": "Připojit přes vzdálenou plochu v prohlížeči", + "action_native_remote": "Vzdálený BetterDesk", + "action_native_remote_desc": "Nativní JPEG stream — nejsou vyžadovány žádné pluginy", + "action_connect_desktop": "Desktopový klient", + "action_connect_desktop_desc": "Otevřít v desktopové klientské aplikaci", + "action_change_id_desc": "Změnit registrační ID zařízení", + "action_ban_desc": "Zablokovat tomuto zařízení připojení", + "action_unban_desc": "Znovu povolit tomuto zařízení připojení", + "action_delete_desc": "Trvale odstranit toto zařízení", + "tab_hardware": "Hardware", + "tab_metrics": "Metriky", + "section_system": "Systém", + "section_cpu": "Procesor", + "section_memory": "Paměť", + "section_displays": "Displeje", + "section_encoding": "Možnosti kódování", + "section_live_metrics": "Živé metriky", + "section_current_usage": "Aktuální využití", + "section_usage_history": "Historie využití", + "os": "Operační systém", + "version": "Verze klienta", + "cpu_model": "Model CPU", + "cpu_cores": "Jádra CPU", + "cpu_freq": "Frekvence CPU", + "total_memory": "Celková paměť", + "metric_memory": "Paměť", + "metric_disk": "Disk", + "metrics_updated": "Aktualizováno", + "device_groups": "Skupiny", + "no_sysinfo": "Nejsou k dispozici žádné informace o hardwaru", + "no_sysinfo_hint": "Systémové informace se zobrazí po odeslání sysinfo reportu zařízením", + "no_metrics": "Nejsou k dispozici žádná data metrik", + "no_metrics_hint": "Metriky se zobrazí po odeslání heartbeat reportů zařízením", + "chart_oldest": "← Nejstarší", + "chart_newest": "Nejnovější →", + "tab_services": "Služby", + "tab_processes": "Procesy", + "tab_events": "Události", + "tab_activity": "Aktivita", + "tab_files": "Soubory", + "agent_lazy_hint": "Kliknutím na tuto kartu načtete živá data od agenta", + "agent_offline": "Agent je offline", + "agent_timeout": "Agent neodpověděl včas", + "agent_error": "Nepodařilo se načíst data od agenta", + "service_name": "Název", + "service_display": "Zobrazovaný název", + "service_status": "Stav", + "service_start": "Režim spuštění", + "process_name": "Název", + "process_user": "Uživatel", + "process_memory": "Paměť" + }, + "inventory": { + "title": "Inventář", + "subtitle": "Hardwarový a softwarový inventář spravovaných zařízení", + "device_id": "ID zařízení", + "hostname": "Název hostitele", + "os": "Operační systém", + "cpu": "CPU", + "cpu_cores": "Jádra CPU", + "cpu_usage": "Využití CPU", + "memory": "Paměť", + "memory_total": "Celková paměť", + "memory_used": "Použitá paměť", + "memory_available": "Dostupná paměť", + "memory_usage": "Využití paměti", + "swap": "Swap", + "disks": "Disky", + "disk_count": "Počet disků", + "network": "Síť", + "network_interfaces": "Síťová rozhraní", + "software": "Software", + "software_count": "Nainstalovaný software", + "system": "Systém", + "kernel": "Jádro", + "architecture": "Architektura", + "uptime": "Doba běhu", + "frequency": "Frekvence", + "physical_cores": "Fyzická jádra", + "logical_cores": "Logická jádra", + "model": "Model", + "usage": "Využití", + "total": "Celkem", + "used": "Použito", + "available": "Dostupné", + "mount_point": "Přípojný bod", + "removable": "vyměnitelné", + "mac_address": "MAC adresa", + "ip_addresses": "IP adresy", + "traffic": "Provoz", + "collect_now": "Shromáždit nyní", + "collector_running": "Sběr běží", + "collector_stopped": "Sběr zastaven", + "last_upload": "Poslední nahrání", + "total_uploads": "celkem", + "last_seen": "Naposledy viděno", + "collected_at": "Shromážděno", + "no_data": "Zatím nejsou k dispozici žádná data inventáře. Kliknutím na \"Shromáždit nyní\" získáte systémové informace.", + "no_devices": "Nebyla nalezena žádná zařízení s inventárními daty", + "detail_title": "Detail inventáře zařízení", + "telemetry": "Telemetrie", + "view_detail": "Zobrazit detail", + "export": "Exportovat", + "refresh": "Obnovit" + }, + "tickets": { + "title": "Tickety", + "subtitle": "Podpůrné tickety a sledování problémů", + "create": "Nový ticket", + "edit": "Upravit ticket", + "delete": "Smazat ticket", + "detail": "Detail ticketu", + "ticket_id": "ID ticketu", + "ticket_title": "Název", + "description": "Popis", + "status": "Stav", + "priority": "Priorita", + "category": "Kategorie", + "assigned_to": "Přiřazeno komu", + "created_by": "Vytvořil", + "device": "Zařízení", + "sla_due": "Termín SLA", + "created_at": "Vytvořeno", + "updated_at": "Aktualizováno", + "resolved_at": "Vyřešeno", + "closed_at": "Uzavřeno", + "status_open": "Otevřený", + "status_in_progress": "Probíhá", + "status_resolved": "Vyřešený", + "status_closed": "Uzavřený", + "priority_low": "Nízká", + "priority_medium": "Střední", + "priority_high": "Vysoká", + "priority_critical": "Kritická", + "category_general": "Obecné", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Síť", + "category_access": "Přístup", + "category_other": "Jiné", + "comments": "Komentáře", + "add_comment": "Přidat komentář", + "comment_placeholder": "Napište komentář...", + "internal_note": "Interní poznámka (není viditelná koncovým uživatelům)", + "attachments": "Přílohy", + "upload_attachment": "Nahrát přílohu", + "download": "Stáhnout", + "connect_device": "Připojit k zařízení", + "no_tickets": "Nebyly nalezeny žádné tickety", + "no_comments": "Zatím žádné komentáře", + "no_attachments": "Žádné přílohy", + "title_required": "Název je povinný", + "delete_confirm": "Opravdu chcete smazat ticket č. {id}?", + "delete_success": "Ticket byl úspěšně smazán", + "created_success": "Ticket byl úspěšně vytvořen", + "updated_success": "Ticket byl úspěšně aktualizován", + "sla_overdue": "SLA po termínu", + "filter_all": "Vše", + "search_placeholder": "Hledat tickety...", + "assign_to_me": "Přiřadit mně", + "unassign": "Zrušit přiřazení", + "stats_total": "Celkem", + "stats_open": "Otevřené", + "stats_in_progress": "Probíhající", + "stats_resolved": "Vyřešené", + "stats_closed": "Uzavřené" + }, + "activity": { + "title": "Monitoring aktivity", + "subtitle": "Sledování používání aplikací a nečinnosti", + "device": "Zařízení", + "hostname": "Název hostitele", + "sessions": "Relace", + "idle_time": "Doba nečinnosti", + "active_time": "Aktivní čas", + "last_report": "Poslední report", + "top_apps": "Nejčastější aplikace", + "app_name": "Aplikace", + "window_title": "Název okna", + "category": "Kategorie", + "duration": "Doba trvání", + "started_at": "Začalo", + "ended_at": "Skončilo", + "session_count": "Počet relací", + "total_active": "Celkem aktivní", + "total_idle": "Celkem nečinné", + "detail_count": "Počet detailních záznamů", + "no_data": "Nejsou k dispozici žádná data aktivity", + "no_sessions": "Žádné relace", + "filter_from": "Od", + "filter_to": "Do", + "filter_apply": "Použít filtr", + "hours": "hodiny", + "minutes": "minuty", + "seconds": "sekundy", + "category_browser": "Prohlížeč", + "category_productivity": "Produktivita", + "category_communication": "Komunikace", + "category_development": "Vývoj", + "category_media": "Média", + "category_gaming": "Hraní", + "category_system": "Systém", + "category_other": "Ostatní", + "summary": "Souhrn", + "details": "Podrobnosti", + "refresh": "Obnovit", + "search": "Hledat zařízení...", + "date_range": "Rozsah dat", + "device_id": "ID zařízení", + "session_start": "Začátek relace", + "session_end": "Konec relace", + "user": "Uživatel", + "no_activity": "Nebyla zaznamenána žádná aktivita", + "reported_at": "Nahlášeno", + "detail": "Detail", + "no_apps": "Žádné aplikace" + }, + "automation": { + "title": "Automatizace a upozornění", + "subtitle": "Pravidla upozornění, vzdálené příkazy a konfigurace SMTP", + "rules": "Pravidla upozornění", + "rules_subtitle": "Definujte podmínky, které spouštějí oznámení", + "alerts": "Historie upozornění", + "alerts_subtitle": "Zobrazit a potvrdit spuštěná upozornění", + "commands": "Vzdálené příkazy", + "commands_subtitle": "Odesílat příkazy na vzdálená zařízení", + "smtp": "Konfigurace SMTP", + "smtp_subtitle": "Nastavení e-mailových oznámení", + "rule_name": "Název pravidla", + "description": "Popis", + "condition_type": "Typ podmínky", + "condition_op": "Operátor", + "condition_value": "Prahová hodnota", + "severity": "Závažnost", + "scope_device": "Cílové zařízení", + "scope_all": "Všechna zařízení", + "cooldown": "Cooldown (sekundy)", + "notify_emails": "E-mailové adresy pro oznámení", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "create_rule": "Vytvořit pravidlo", + "edit_rule": "Upravit pravidlo", + "delete_rule": "Smazat pravidlo", + "acknowledge": "Potvrdit", + "acknowledged": "Potvrzeno", + "unacknowledged": "Nepotvrzeno", + "triggered_at": "Spuštěno", + "severity_info": "Informace", + "severity_warning": "Varování", + "severity_critical": "Kritické", + "op_gt": "Větší než", + "op_gte": "Větší nebo rovno", + "op_lt": "Menší než", + "op_lte": "Menší nebo rovno", + "op_eq": "Rovno", + "op_neq": "Nerovno", + "type_cpu_usage": "Využití CPU (%)", + "type_memory_usage": "Využití paměti (%)", + "type_disk_usage": "Využití disku (%)", + "type_offline_duration": "Doba offline (s)", + "type_idle_duration": "Doba nečinnosti (s)", + "type_custom": "Vlastní", + "command_type": "Typ příkazu", + "command_payload": "Příkaz / skript", + "command_result": "Výsledek", + "command_status": "Stav", + "send_command": "Odeslat příkaz", + "status_pending": "Čeká", + "status_running": "Běží", + "status_completed": "Dokončeno", + "status_failed": "Selhalo", + "smtp_host": "SMTP hostitel", + "smtp_port": "Port", + "smtp_secure": "Použít TLS", + "smtp_user": "Uživatelské jméno", + "smtp_pass": "Heslo", + "smtp_from": "Adresa odesílatele", + "smtp_test": "Otestovat připojení", + "smtp_save": "Uložit konfiguraci", + "smtp_test_success": "Připojení úspěšné", + "smtp_test_failed": "Připojení selhalo", + "no_rules": "Nejsou nastavena žádná pravidla upozornění", + "no_alerts": "Nebyla spuštěna žádná upozornění", + "no_commands": "Nebyly odeslány žádné příkazy", + "id_payload_required": "ID zařízení a payload jsou povinné", + "no_commands_sent": "Zatím nebyly odeslány žádné příkazy" + }, + "file_transfer": { + "title": "Přenos souborů", + "transfers": "Přenosy", + "new_transfer": "Nový přenos", + "upload": "Nahrát", + "download": "Stáhnout", + "direction": "Směr", + "filename": "Název souboru", + "file_size": "Velikost souboru", + "mime_type": "Typ MIME", + "progress": "Průběh", + "status": "Stav", + "device": "Zařízení", + "initiated_by": "Spustil", + "created_at": "Vytvořeno", + "cancel": "Zrušit", + "cancel_confirm": "Opravdu chcete tento přenos zrušit?", + "download_file": "Stáhnout soubor", + "browse_files": "Procházet soubory", + "select_file": "Vybrat soubor", + "select_device": "Vybrat zařízení", + "no_transfers": "Žádné přenosy souborů", + "status_pending": "Čeká", + "status_active": "Aktivní", + "status_completed": "Dokončeno", + "status_failed": "Selhalo", + "status_cancelled": "Zrušeno", + "bytes_transferred": "Přenesené bajty", + "chunks": "Bloky", + "transfer_started": "Přenos spuštěn", + "transfer_completed": "Přenos dokončen", + "transfer_failed": "Přenos selhal", + "transfer_cancelled": "Přenos zrušen", + "max_file_size": "Maximální velikost souboru: 4 GB", + "error_too_large": "Soubor je příliš velký", + "error_no_device": "Není vybráno žádné zařízení", + "error_no_file": "Není vybrán žádný soubor" + }, + "network": { + "title": "Monitorování sítě", + "targets": "Cíle monitorování", + "add_target": "Přidat cíl", + "edit_target": "Upravit cíl", + "delete_target": "Smazat cíl", + "delete_confirm": "Opravdu chcete tento cíl smazat?", + "target_name": "Název", + "host": "Hostitel", + "port": "Port", + "url": "URL", + "check_type": "Typ kontroly", + "timeout": "Časový limit (ms)", + "interval": "Interval kontroly (ms)", + "enabled": "Povoleno", + "status": "Stav", + "last_check": "Poslední kontrola", + "last_rtt": "Poslední RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Dostupné", + "status_down": "Nedostupné", + "status_unknown": "Neznámý", + "check_now": "Zkontrolovat nyní", + "history": "Historie kontrol", + "stats": "Statistiky", + "total_targets": "Celkem cílů", + "targets_up": "Dostupné cíle", + "targets_down": "Nedostupné cíle", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Síťové nástroje", + "ping_tool": "Test ping", + "tcp_tool": "Kontrola TCP portu", + "http_tool": "HTTP kontrola", + "dns_tool": "Překlad DNS", + "monitor_start": "Spustit monitor", + "monitor_stop": "Zastavit monitor", + "monitor_running": "Monitor běží", + "monitor_stopped": "Monitor je zastaven", + "no_targets": "Nejsou nakonfigurovány žádné cíle monitorování", + "no_history": "Není k dispozici žádná historie kontrol", + "error_code": "Chyba", + "status_code": "Stavový kód HTTP", + "search_targets": "Hledat cíle...", + "name": "Název", + "tab_targets": "Cíle", + "tab_tools": "Nástroje", + "avg_latency": "Průměrná latence", + "type": "Typ", + "latency": "Latence", + "check_history": "Historie kontrol", + "name_host_required": "Název a hostitel jsou povinné", + "uptime": "Dostupnost", + "response_time": "Doba odezvy", + "avg_response": "Průměrná odezva", + "charts": "Grafy", + "realtime": "V reálném čase", + "response_time_ms": "Doba odezvy (ms)", + "uptime_percent": "Dostupnost %", + "last_24h": "Posledních 24 hodin", + "last_7d": "Posledních 7 dní", + "last_30d": "Posledních 30 dní" + }, + "dataguard": { + "title": "DataGuard — ochrana DLP", + "policies": "Zásady DLP", + "add_policy": "Přidat zásadu", + "edit_policy": "Upravit zásadu", + "delete_policy": "Smazat zásadu", + "delete_confirm": "Opravdu chcete tuto zásadu smazat?", + "policy_name": "Název", + "policy_description": "Popis", + "status": "Stav", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "rules": "Pravidla", + "add_rule": "Přidat pravidlo", + "rule_type": "Typ pravidla", + "rule_type_usb": "USB zařízení", + "rule_type_file": "Operace se souborem", + "action": "Akce", + "action_allow": "Povolit", + "action_block": "Blokovat", + "action_log": "Pouze zaznamenat", + "filter": "Filtr", + "vid": "ID výrobce (VID)", + "pid": "ID produktu (PID)", + "serial": "Sériové číslo", + "device_class": "Třída zařízení", + "drive_type": "Typ jednotky", + "file_extensions": "Přípony souborů", + "events": "Události DLP", + "event_source": "Zdroj", + "event_source_usb": "USB", + "event_source_file": "Soubor", + "event_type": "Typ události", + "event_details": "Podrobnosti", + "no_policies": "Nejsou nakonfigurovány žádné zásady DLP", + "no_events": "Nebyly zaznamenány žádné události DLP", + "stats": "Statistiky", + "total_events": "Celkem událostí", + "blocked_events": "Zablokováno", + "logged_events": "Zaznamenáno", + "usb_events": "Události USB", + "file_events": "Události souborů", + "device_id": "ID zařízení", + "policy_matched": "Odpovídající zásada", + "timestamp": "Časové razítko", + "drive_removable": "Vyměnitelná", + "drive_fixed": "Pevná", + "drive_network": "Síťová", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Neznámá", + "total_policies": "Celkem zásad", + "active_policies": "Aktivní zásady", + "violations": "Porušení", + "blocked": "Zablokováno", + "tab_policies": "Zásady", + "tab_events": "Události", + "search_policies": "Hledat zásady...", + "create_policy": "Vytvořit zásadu", + "policy_type": "Typ zásady", + "scope": "Rozsah", + "events_count": "Události", + "search_events": "Hledat události...", + "event_time": "Čas události", + "device": "Zařízení", + "policy": "Zásada", + "detail": "Detail", + "scope_help": "ID zařízení oddělená čárkami, nebo nechte prázdné pro všechna", + "scope_all": "Všechna zařízení", + "active": "Aktivní", + "type_file_type": "Typ souboru", + "type_clipboard": "Schránka", + "type_screen_share": "Sdílení obrazovky", + "type_file_transfer": "Přenos souborů", + "policy_desc": "Popis zásady", + "type_usb": "USB" + }, + "reports": { + "title": "Reporty", + "generate": "Vygenerovat report", + "generate_csv": "Exportovat CSV", + "report_type": "Typ reportu", + "type_devices": "Souhrn zařízení", + "type_activity": "Souhrn aktivity", + "type_security": "Bezpečnostní report", + "type_tickets": "Report ticketů", + "type_network": "Síťový report", + "type_inventory": "Inventární report", + "type_alerts": "Report upozornění", + "saved": "Uložené reporty", + "save_report": "Uložit report", + "delete_report": "Smazat report", + "delete_confirm": "Opravdu chcete tento uložený report smazat?", + "no_saved": "Žádné uložené reporty", + "report_title": "Název", + "created_by": "Vytvořil", + "created_at": "Vytvořeno", + "filters": "Filtry", + "date_from": "Od", + "date_to": "Do", + "device_filter": "ID zařízení", + "generated_at": "Vygenerováno", + "section": "Datová sekce", + "total_devices": "Celkem zařízení", + "online": "Online", + "offline": "Offline", + "banned": "Zablokováno", + "platform_distribution": "Rozdělení platforem", + "top_applications": "Nejpoužívanější aplikace", + "total_active": "Celkový aktivní čas", + "total_idle": "Celková doba nečinnosti", + "dlp_stats": "Statistiky DLP", + "banned_devices": "Zablokovaná zařízení", + "audit_logs": "Auditní záznamy", + "ticket_stats": "Statistiky ticketů", + "category_distribution": "Rozdělení kategorií", + "priority_distribution": "Rozdělení priorit", + "targets_status": "Stav cílů", + "os_distribution": "Rozdělení operačních systémů", + "avg_ram": "Průměrná RAM", + "alert_rules": "Pravidla upozornění", + "recent_alerts": "Nedávná upozornění", + "tab_generate": "Vygenerovat report", + "tab_saved": "Uložené reporty", + "type_devices_desc": "Přehled všech zařízení, platforem a stavů", + "type_activity_desc": "Souhrn využití aplikací a doby nečinnosti", + "type_security_desc": "Akce blokování, události DLP a auditní záznamy", + "type_tickets_desc": "Statistiky ticketů a plnění SLA", + "type_network_desc": "Cíle monitorování sítě a data o dostupnosti", + "type_inventory_desc": "Souhrn hardwarového a softwarového inventáře", + "type_alerts_desc": "Pravidla upozornění a historie spuštěných upozornění", + "report_name": "Název reportu", + "format": "Formát", + "save": "Uložit report", + "preview": "Náhled", + "download": "Stáhnout", + "delete_saved": "Smazat report", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenanti", + "list": "Tenanti", + "add_tenant": "Přidat tenanta", + "edit_tenant": "Upravit tenanta", + "delete_tenant": "Smazat tenanta", + "delete_confirm": "Opravdu chcete tohoto tenanta smazat? Všechna přiřazení zařízení a uživatelů budou odstraněna.", + "name": "Název", + "slug": "Slug", + "contact_name": "Kontaktní jméno", + "contact_email": "Kontaktní e-mail", + "max_devices": "Max. zařízení", + "max_devices_hint": "0 = neomezeně", + "notes": "Poznámky", + "active": "Aktivní", + "inactive": "Neaktivní", + "devices": "Zařízení", + "users": "Uživatelé", + "assign_device": "Přiřadit zařízení", + "assign_devices": "Přiřadit zařízení", + "remove_device": "Odebrat zařízení", + "assign_user": "Přiřadit uživatele", + "remove_user": "Odebrat uživatele", + "no_tenants": "Nejsou nakonfigurováni žádní tenanti", + "no_devices": "Tomuto tenantovi nejsou přiřazena žádná zařízení", + "no_users": "Tomuto tenantovi nejsou přiřazeni žádní uživatelé", + "stats": "Statistiky tenanta", + "total_devices": "Celkem zařízení", + "online_devices": "Zařízení online", + "total_users": "Celkem uživatelů", + "created_at": "Vytvořeno", + "updated_at": "Aktualizováno", + "slug_exists": "Slug tenanta již existuje", + "total_tenants": "Celkem tenantů", + "active_tenants": "Aktivní tenanti", + "search": "Hledat tenanty...", + "create_tenant": "Vytvořit tenanta", + "detail": "Detail tenanta", + "contact": "Kontakt", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "max": "max", + "info": "Informace o tenantovi", + "status": "Stav" + }, + "registrations": { + "title": "Registrace zařízení", + "subtitle": "Spravujte žádosti o registraci ze zařízení objevených přes LAN", + "search_placeholder": "Hledat podle ID zařízení, hostname nebo IP...", + "no_registrations": "Žádné žádosti o registraci", + "col_device_id": "ID zařízení", + "col_hostname": "Hostname", + "col_platform": "Platforma", + "col_ip": "IP adresa", + "col_version": "Verze", + "col_status": "Stav", + "col_requested": "Požádáno", + "col_actions": "Akce", + "status_pending": "Čeká", + "status_approved": "Schváleno", + "status_rejected": "Zamítnuto", + "approve_btn": "Schválit", + "approve_confirm": "Opravdu chcete toto zařízení schválit? Obdrží přihlašovací údaje serveru a bude se moci připojit automaticky.", + "approved_success": "Registrace zařízení byla úspěšně schválena", + "reject_btn": "Zamítnout", + "reject_title": "Zamítnout registraci", + "reject_confirm": "Opravdu chcete tuto žádost o registraci zamítnout?", + "reject_reason": "Důvod (volitelné)", + "reject_reason_placeholder": "Zadejte důvod zamítnutí...", + "rejected_success": "Registrace zařízení zamítnuta", + "delete_confirm": "Opravdu chcete tento záznam registrace smazat?", + "deleted_success": "Záznam registrace byl smazán", + "enrollment_title": "Zařazení zařízení", + "enrollment_subtitle": "Čekající žádosti o zařazení z desktopových klientů BetterDesk", + "enrollment_empty": "Žádné čekající žádosti o zařazení", + "enrollment_approve": "Schválit", + "enrollment_reject": "Zamítnout", + "enrollment_display_name": "Zobrazovaný název", + "enrollment_display_name_placeholder": "Zadejte název pro toto zařízení...", + "enrollment_sync_mode": "Režim synchronizace", + "enrollment_sync_silent": "Tichý — minimální telemetrie", + "enrollment_sync_standard": "Standardní — vyvážená synchronizace", + "enrollment_sync_turbo": "Turbo — agresivní synchronizace", + "enrollment_approved_success": "Zařazení zařízení schváleno", + "enrollment_rejected_success": "Zařazení zařízení zamítnuto", + "approve_title": "Zatwierdz urzadzenie", + "field_name": "Nazwa urzadzenia", + "field_name_placeholder": "Wpisz nazwe dla tego urzadzenia...", + "field_sync_mode": "Tryb synchronizacji", + "sync_standard": "Standardowy — zbalansowana synchronizacja", + "sync_silent": "Cichy — minimalna telemetria", + "sync_turbo": "Turbo — agresywna synchronizacja", + "field_tags": "Štítky", + "field_tags_placeholder": "Štítky oddzielone przecinkami (np. biuro, laptop)...", + "field_tags_existing": "Istniejace štítky", + "field_tag_add_placeholder": "Přidat nowy tag...", + "field_tag_add_btn": "Přidat", + "field_groups": "Skupiny urzadzen", + "field_folder": "Složka", + "field_folder_none": "Bez složkau", + "reject_ban_option": "Zablokuj to urzadzenie", + "reject_ban_hint": "Urzadzenie zostanie zablokowane i nie bedzie moglo ponownie wysylac zadan rejestracji.", + "banner_open_mode": "Rejestracja jest otwarta — nowi klienci RustDesk rejestruja sie bez akceptacji operátora. Ustaw tryb Zarzadzany w Nastaveních, aby korzystac z tej kolejki.", + "banner_locked_mode": "Rejestracja jest zablokowana — pouze urzadzenia z tokenem moga sie zarejestrowac. Do akceptacji nieznanych klientow vyžadujeny jest tryb Zarzadzany.", + "enrollment_settings_link": "Nastavení rejestracji" + }, + "backup": { + "title": "Záloha", + "desc": "Stáhněte si plnou zálohu konfigurace konzole, uživatelů, skupin a nastavení. Data peer serveru Go jsou zahrnuta, pokud je aktivní backend BetterDesk.", + "restore_title": "Obnovení", + "restore_desc": "Nahrajte dříve stažený záložní soubor pro obnovení konfigurace konzole. Níže vyberte, které sekce chcete obnovit.", + "stat_users": "Uživatelé", + "stat_settings": "Nastavení", + "stat_folders": "Složky", + "stat_groups": "Skupiny", + "stat_strategies": "Strategie", + "stat_backend": "Backend", + "download": "Stáhnout zálohu", + "creating": "Vytváření zálohy...", + "download_success": "Záloha byla úspěšně stažena", + "upload": "Nahrát zálohu", + "restore_confirm": "Opravdu chcete obnovit data z této zálohy? Vybrané sekce budou přepsány.", + "restore_success": "Záloha byla úspěšně obnovena. Některé změny mohou vyžadovat znovunačtení stránky.", + "restored": "Obnoveno", + "skipped": "Přeskočeno", + "backup_date": "Datum zálohy", + "opt_settings": "Nastavení konzole", + "opt_branding": "Branding / motiv", + "opt_folders": "Složky zařízení", + "opt_groups": "Skupiny uživatelů a zařízení", + "opt_addressbooks": "Adresáře", + "opt_users": "Uživatelské účty", + "opt_users_warning": "Destruktivní: nahradí VŠECHNY uživatelské účty daty ze zálohy. Můžete být odhlášeni.", + "no_file": "Nebyl vybrán žádný záložní soubor", + "invalid_json": "Neplatný záložní soubor: nejedná se o validní JSON", + "invalid_format": "Neplatný záložní soubor: nejedná se o zálohu BetterDesk", + "stat_database": "Silnik databáze", + "stat_keys": "Klucze servera w kopii", + "stat_env": "Soubor srodowiska", + "stat_uploads": "Soubori marki", + "restart_required": "Nektore przywrocone komponenty (klucze / .env / baza Go) vyžadujeja restart uslugi, aby zadzialac.", + "security_warning": "Ta kopia zawiera dane wrazliwe (klucze servera, soubor srodowiska, hashe hasel i sekrety 2FA). Przechowuj ja bezpiecznie i nigdy nie udostepniaj.", + "restore_warning": "Przywrocenie sekretow, souboru srodowiska lub bazy servera Go nadpisuje tozsamosc servera i vyžaduje nastepnie restart uslugi.", + "opt_database": "Databáze (wszystkie tabele)", + "opt_database_hint": "Ponownie importuje wszystkie dane konsoli. Stosowane na zywo, bez restart.", + "opt_uploads": "Soubori marki", + "opt_uploads_hint": "Logo i przeslane obrázeky.", + "opt_secrets": "Klucze i sekrety servera", + "opt_secrets_warning": "Nadpisuje tozsamosc Ed25519 servera, klucz API i sekret sesji. Vyžaduje restart uslugi.", + "opt_env": "Soubor srodowiska (.env)", + "opt_env_warning": "Nadpisuje SESSION_SECRET, klucz API, DSN bazy, porty i ustawienia TLS. Vyžaduje restart uslugi.", + "opt_godb": "Databáze servera Go", + "opt_godb_warning": "Nadpisuje baze SQLite servera Go (pouze backend SQLite). Vyžaduje restart uslugi." + }, + "cdap": { + "device_detail": "Zařízení CDAP", + "loading": "Načítání...", + "loading_widgets": "Načítání widgetů zařízení...", + "load_error": "Nepodařilo se načíst data zařízení", + "connected": "Připojeno", + "disconnected": "Odpojeno", + "device_offline_msg": "Zařízení je momentálně offline. Hodnoty widgetů mohou být zastaralé.", + "no_widgets": "Nejsou k dispozici žádné widgety", + "no_widgets_desc": "Toto zařízení nezaregistrovalo manifest CDAP s definicemi widgetů.", + "command_log": "Log příkazů", + "clear_log": "Vymazat log", + "confirm_command": "Potvrdit příkaz", + "select_option": "Vybrat", + "cdap_status": "Stav CDAP", + "cdap_enabled": "CDAP povoleno", + "cdap_disabled": "CDAP zakázáno", + "cdap_devices": "Zařízení CDAP", + "cdap_connections": "Aktivní připojení", + "send_command": "Odeslat příkaz", + "command_sent": "Příkaz byl úspěšně odeslán", + "command_failed": "Nepodařilo se odeslat příkaz", + "devices_title": "Zařízení CDAP", + "devices_subtitle": "Připojená zařízení přes Custom Device Application Protocol", + "stat_connected": "Připojeno", + "stat_port": "Port", + "search_devices": "Hledat zařízení...", + "no_devices": "Nejsou připojena žádná zařízení", + "no_devices_desc": "Momentálně nejsou připojena žádná zařízení CDAP. Zařízení se zde zobrazí po připojení k bráně.", + "gateway_disabled": "Brána CDAP je zakázána", + "gateway_disabled_desc": "Povolte bránu CDAP nastavením CDAP_ENABLED=true v konfiguraci serveru.", + "gateway_active": "Aktivní", + "toggle_enable": "Povolit CDAP", + "toggle_disable": "Zakázat CDAP", + "enabled_restart": "CDAP povoleno. Pro uplatnění změn je nutný restart serveru.", + "disabled_restart": "CDAP zakázáno. Pro uplatnění změn je nutný restart serveru.", + "widgets": "widgety", + "type_all": "Vše", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS agent", + "type_network": "Síť", + "type_camera": "Kamera", + "type_custom": "Vlastní", + "active_alerts": "Aktivní upozornění", + "alert_fired": "Upozornění spuštěno", + "alert_cleared": "Upozornění vymazáno", + "no_alerts": "Žádná aktivní upozornění", + "connect_terminal": "Připojit terminál", + "table_search": "Hledat...", + "just_now": "Právě teď", + "terminal_connecting": "Připojování k zařízení...", + "terminal_disconnected": "Odpojeno", + "terminal_error": "Připojení terminálu selhalo", + "linked_devices": "Propojená zařízení", + "link_device": "Propojit zařízení", + "unlink_device": "Odpojit", + "no_linked_devices": "Žádná propojená zařízení", + "unlink_confirm": "Opravdu chcete toto zařízení odpojit?", + "link_prompt": "Zadejte Peer ID pro propojení s tímto zařízením:", + "connect_desktop": "Připojit plochu", + "connect_video": "Připojit stream", + "connect_files": "Procházet soubory", + "connect_audio": "Připojit zvuk", + "upload_file": "Nahrát", + "desktop_connecting": "Připojování...", + "video_connecting": "Připojování...", + "files_connecting": "Připojování...", + "audio_connecting": "Připojování...", + "audio_streaming": "Streamování", + "clipboard_in": "Schránka přijata", + "clipboard_out": "Schránka odeslána", + "monitor_select": "Vybrat monitor", + "keyframe_request": "Vyžádat klíčový snímek", + "quality_auto": "Automatická kvalita" + }, + "desktop": { + "switch_mode": "Režim plochy", + "console_mode": "Režim konzole", + "loading": "Načítání...", + "minimize": "Minimalizovat", + "maximize": "Maximalizovat", + "restore": "Obnovit", + "close": "Zavřít", + "widgets_mode": "Widgety", + "windows_mode": "Okna", + "wallpaper": "Tapeta", + "add_widget": "Přidat widget", + "remove_widget": "Odebrat widget", + "pop_out_widget": "Vysunout", + "pop_in_widget": "Zasunout", + "configure": "Konfigurovat", + "search_widgets": "Hledat widgety...", + "cat_monitoring": "Monitoring", + "cat_devices": "Zařízení", + "cat_tools": "Nástroje", + "cat_general": "Obecné", + "notes_placeholder": "Sem pište poznámky...", + "search_placeholder": "Hledat zařízení, stránky, nastavení...", + "search_pages": "Stránky", + "search_devices": "Zařízení", + "search_no_results": "Žádné výsledky", + "exit_desktop": "Ukončit režim plochy", + "refresh": "Obnovit", + "widget_clock": "Hodiny", + "widget_device_status": "Stav zařízení", + "widget_server_health": "Informace o serveru", + "widget_system_stats": "Měřidla zařízení", + "widget_device_list": "Seznam zařízení", + "widget_quick_actions": "Rychlé akce", + "widget_recent_activity": "Nedávná aktivita", + "widget_notes": "Poznámky", + "widget_network_monitor": "Monitor sítě", + "widget_tickets_summary": "Tickety", + "widget_iframe": "Webové vložení", + "widget_cdap_devices": "Zařízení CDAP", + "widget_uptime": "Doba běhu", + "widget_port_status": "Stav portu", + "widget_device_grid": "Mřížka zařízení", + "widget_multi_gauge": "Měřidla serveru", + "widget_weekly_chart": "Týdenní aktivita", + "widget_quick_controls": "Rychlé ovládání", + "widget_bandwidth": "Přenosová kapacita", + "widget_connection_stats": "Statistiky připojení", + "widget_weather": "Počasí", + "widget_world_clock": "Světové hodiny", + "widget_bookmarks": "Záložky", + "widget_user_sessions": "Uživatelské relace", + "widget_alert_feed": "Přehled upozornění", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Celkem", + "label_blocked": "Blokováno", + "label_banned": "Zablokováno", + "label_active": "Aktivní", + "label_service": "Služba", + "label_port": "Port", + "label_uptime_prefix": "Doba běhu:", + "label_uptime": "Doba běhu", + "label_no_devices": "Žádná zařízení", + "label_no_activity": "Žádná aktivita", + "label_no_targets": "Žádné cíle", + "label_unavailable": "Nedostupné", + "label_open": "Otevřené", + "label_in_progress": "Probíhá", + "label_resolved": "Vyřešené", + "label_set_url": "Nastavte URL v konfiguraci", + "label_server_uptime": "Doba běhu serveru", + "label_merged_info": "Sloučeno do widgetu Informace o serveru", + "label_with_notes": "S poznámkami", + "label_metric": "Metrika", + "label_count": "Počet", + "label_total_devices": "Celkem zařízení", + "label_throughput": "Propustnost", + "label_active_relays": "Aktivní relaye", + "label_total_relayed": "Celkem relayováno", + "label_total_bytes": "Celkem bajtů", + "label_filter_devices": "Filtrovat zařízení...", + "label_all": "Vše", + "label_ban": "Blokovat", + "label_unban": "Odblokovat", + "label_connect": "Připojit", + "label_no_cdap_devices": "Žádná zařízení CDAP", + "action_add_widget": "Přidat widget", + "label_merged_server_info": "Sloučeno do widgetu Informace o serveru", + "wp_images": "Obrázky", + "wp_colors": "Plné barvy", + "wp_custom_color": "Vlastní barva", + "wp_fit_style": "Styl", + "wp_fill": "Vyplnit", + "wp_fit": "Přizpůsobit", + "wp_stretch": "Roztáhnout", + "wp_center": "Na střed", + "wp_unavailable": "Obrázky tapet nejsou na tomto serveru nainstalovány.", + "wp_download_hint": "Umístěte PNG obrázky do adresáře public/wallpapers/, aby bylo možné vybírat tapety.", + "widget_calendar": "Kalendář", + "widget_process_monitor": "Monitor procesů", + "widget_disk_usage": "Využití disku", + "widget_log_viewer": "Prohlížeč logů", + "widget_speed_test": "Test rychlosti", + "widget_database_stats": "Statistiky databáze", + "widget_docker_containers": "Docker kontejnery", + "widget_shell_command": "Příkaz shellu", + "widget_device_map": "Mapa zařízení", + "widget_remote_connect": "Vzdálené připojení", + "label_no_online": "Žádná online zařízení", + "label_no_events": "Dnes žádné události", + "label_event_title": "Název události:", + "label_no_data": "Nejsou k dispozici žádná data", + "label_download_speed": "Rychlost stahování", + "label_latency": "Latence", + "label_server": "Server BetterDesk", + "label_run_test": "Spustit test", + "label_testing": "Testování...", + "label_table": "Tabulka", + "label_rows": "Řádky", + "label_last_backup": "Poslední záloha", + "label_no_containers": "Žádné kontejnery", + "label_docker_unavailable": "Docker není dostupný", + "label_no_command": "Není nakonfigurován žádný příkaz", + "label_no_output": "Zatím žádný výstup", + "label_run": "Spustit", + "label_presets": "Předvolby", + "label_save_preset": "Uložit předvolbu", + "label_load_preset": "Načíst předvolbu", + "label_preset_name": "Název předvolby:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimální", + "label_preset_developer": "Vývojář", + "label_snap_layout": "Rozvržení přichycení", + "label_auto_arrange": "Automaticky uspořádat", + "label_zone_layout": "Rozvržení zón", + "label_2col_equal": "2 sloupce (stejné)", + "label_2col_wide": "2 sloupce (60/40)", + "label_3col": "3 sloupce", + "label_2x2_grid": "Mřížka 2×2", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Skupina widgetů", + "ungroup_widgets": "Zrušit seskupení widgetů", + "group_widgets": "Seskupit vybrané widgety", + "snap_layouts": "Rozvržení přichycení", + "snap_left": "Přichytit vlevo", + "snap_right": "Přichytit vpravo", + "snap_top_left": "Přichytit vlevo nahoře", + "snap_top_right": "Přichytit vpravo nahoře", + "snap_bottom_left": "Přichytit vlevo dole", + "snap_bottom_right": "Přichytit vpravo dole", + "aero_shake": "Zatřesením minimalizovat ostatní", + "zone_resize": "Tažením okraje změňte velikost zón", + "zone_borders": "Přetahovatelné okraje zón", + "app_drawer": "Aplikace", + "search_apps": "Hledat aplikace...", + "edit_shortcuts": "Upravit zkratky", + "widgets": "Widgety", + "theme": "Motiv", + "fullscreen": "Celá obrazovka", + "help": "Nápověda" + }, + "desktop_login": { + "click_to_sign_in": "Klikněte kamkoli nebo stiskněte klávesu pro přihlášení", + "username_placeholder": "Uživatelské jméno", + "password_placeholder": "Heslo", + "sign_in": "Přihlásit se", + "verify": "Ověřit", + "totp_title": "Dvoufázové ověření", + "totp_subtitle": "Zadejte 6místný kód z vaší autentizační aplikace", + "back_to_login": "Zpět na přihlášení", + "fill_all_fields": "Prosím vyplňte všechna pole", + "invalid_credentials": "Neplatné uživatelské jméno nebo heslo", + "invalid_code": "Neplatný ověřovací kód", + "enter_6_digits": "Zadejte všech 6 číslic", + "network_error": "Chyba sítě — zkontrolujte připojení", + "session_expired": "Relace vypršela. Přihlaste se prosím znovu." + }, + "tokens": { + "title": "Tokeny zařízení", + "subtitle": "Správa registračních tokenů pro automatizované nasazování zařízení", + "enrollment_mode": "Režim registrace", + "mode_open": "Otevřený", + "mode_open_desc": "Jakékoli zařízení se může zaregistrovat bez tokenu", + "mode_managed": "Spravovaný", + "mode_managed_desc": "Zařízení potřebují k registraci platný token", + "mode_locked": "Uzamčený", + "mode_locked_desc": "Nejsou povoleny žádné nové registrace zařízení", + "total": "Tokenů celkem", + "active": "Aktivní", + "used": "Použité", + "revoked": "Zneplatněné", + "search_placeholder": "Hledat tokeny...", + "status_pending": "Čekající", + "status_active": "Aktivní", + "status_used": "Použitý", + "status_revoked": "Zneplatněný", + "status_expired": "Vypršelý", + "bulk_generate": "Hromadné generování", + "create": "Vytvořit token", + "edit": "Upravit token", + "token": "Token", + "name": "Název", + "status": "Stav", + "uses": "Použití", + "bound_peer": "Vázaný Peer", + "expires": "Vyprší", + "created": "Vytvořeno", + "actions": "Akce", + "name_placeholder": "např. Dávka pro kancelářská PC", + "max_uses": "Max. použití", + "max_uses_hint": "0 = neomezeno", + "expires_in": "Vyprší za", + "no_expiration": "Bez vypršení", + "expires_1h": "1 hodinu", + "expires_24h": "24 hodin", + "expires_7d": "7 dní", + "expires_30d": "30 dní", + "note": "Poznámka", + "note_placeholder": "Volitelná poznámka k tomuto tokenu...", + "count": "Počet", + "count_range": "Počet tokenů ke generování (1-100)", + "name_prefix": "Předpona názvu", + "generate": "Generovat", + "token_created": "Token vytvořen", + "tokens_generated": "Tokeny generovány", + "copy_warning": "Token si nyní zkopírujte. Znovu se již nezobrazí.", + "copy_token": "Kopírovat token", + "copied": "Zkopírováno!", + "revoke": "Zneplatnit", + "revoke_confirm": "Opravdu chcete tento token zneplatnit? Zařízení, která již byla pomocí něj zaregistrována, nebudou ovlivněna.", + "revoked_success": "Token byl úspěšně zneplatněn", + "no_tokens": "Nebyly nalezeny žádné tokeny", + "expired": "Vypršelo", + "never": "Nikdy", + "save": "Uložit", + "cancel": "Zrušit", + "unlimited": "Neomezeno" + }, + "tutorial": { + "next": "Další", + "prev": "Předchozí", + "skip": "Přeskočit", + "finish": "Dokončit", + "close": "Zavřít", + "step_of": "{current} z {total}", + "console_sidebar_title": "Navigační panel", + "console_sidebar_text": "Odtud máte přístup ke všem modulům. Kliknutím na libovolnou ikonu přejdete do dané sekce. Panel se přizpůsobuje velikosti obrazovky.", + "console_expand_title": "Rozbalit panel", + "console_expand_text": "Kliknutím sem rozbalíte postranní panel, abyste viděli celé popisky všech položek. Opětovným kliknutím jej sbalíte.", + "console_search_title": "Rychlé vyhledávání", + "console_search_text": "Rychle hledejte zařízení, nastavení nebo akce. Klávesová zkratka je Ctrl+K.", + "console_dashboard_title": "Nástěnka", + "console_dashboard_text": "Váš centrální uzel zobrazující stav serveru, online zařízení a rychlé akce. Sledujte důležité metriky na první pohled.", + "console_devices_title": "Správa zařízení", + "console_devices_text": "Zobrazení, vyhledávání a správa všech připojených zařízení. Filtrujte podle stavu, přidělujte štítky a konfigurujte nastavení jednotlivých zařízení.", + "console_settings_title": "Nastavení", + "console_settings_text": "Konfigurace chování serveru, možností zabezpečení, brandingu a správy uživatelů. Přizpůsobte BetterDesk svým potřebám.", + "console_desktop_title": "Režim plochy", + "console_desktop_text": "Přepněte do režimu plochy pro pracovní prostor s okny a widgety. Ideální pro multitasking a monitorovací nástěnky.", + "console_complete_title": "Jste připraveni!", + "console_complete_text": "Prozkoumejte kategorie v postranním panelu a objevte všechny funkce. Kliknutím na ikonu Nápovědy můžete průvodce kdykoli restartovat.", + "desktop_topbar_title": "Horní lišta", + "desktop_topbar_text": "Horní lišta zobrazuje hodiny, rychlé ovládací prvky a přístup k seznamu aplikací. Kliknutím na ikonu mřížky zobrazíte všechny aplikace.", + "desktop_drawer_title": "Seznam aplikací", + "desktop_drawer_text": "Otevřete seznam aplikací pro vyhledání a spuštění jakékoli funkce konzole jako plovoucího okna. Aplikace jsou seřazeny podle kategorií.", + "desktop_widgets_title": "Nástěnka widgetů", + "desktop_widgets_text": "Váš přizpůsobitelný pracovní prostor. Widgety zobrazují živé informace a poskytují rychlý přístup k funkcím. Přetažením je uspořádejte.", + "desktop_add_widget_title": "Přidat widgety", + "desktop_add_widget_text": "Kliknutím sem můžete procházet dostupné widgety. Vyberte si z monitorovacích displejů, seznamů zařízení, poznámek a dalších.", + "desktop_taskbar_title": "Hlavní panel", + "desktop_taskbar_text": "Otevřené aplikace se zobrazují zde. Kliknutím okna aktivujete nebo minimalizujete. Přejetím přes ikony zobrazíte názvy aplikací.", + "desktop_snap_title": "Rozvržení přichycení", + "desktop_snap_text": "Přetažením oken k okrajům obrazovky je přichytíte na místo, nebo najeďte na tlačítko maximalizace pro předvolby rozvržení. Zkuste Aero Shake!", + "desktop_windows_title": "Okna aplikací", + "desktop_windows_text": "Aplikace se otevírají v posuvných oknech s měnitelnou velikostí. Minimalizujte, maximalizujte nebo zavírejte z titulní lišty. Okna jsou vrstvena nad widgety.", + "desktop_search_title": "Rychlé vyhledávání", + "desktop_search_text": "Prohledávejte zařízení, stránky a nastavení. Stiskněte Ctrl+K kdekoli pro okamžité otevření vyhledávání.", + "desktop_complete_title": "Režim plochy připraven!", + "desktop_complete_text": "Zkuste otevřít aplikace ze seznamu a uspořádat okna vedle sebe. Použijte předvolby widgetů pro rychlé nastavení nástěnky.", + "devices_folders_title": "Složky zařízení", + "devices_folders_text": "Organizujte zařízení do složek. Kliknutím na složku vyfiltrujete seznam. Kliknutím pravým tlačítkem přejmenujete nebo smažete.", + "devices_search_title": "Hledání a filtry", + "devices_search_text": "Hledejte podle ID, názvu hostitele nebo platformy. Použijte filtry stavu pro zobrazení pouze online, offline nebo všech zařízení.", + "devices_table_title": "Seznam zařízení", + "devices_table_text": "Kliknutím na řádek zařízení zobrazíte detaily. Použijte menu (tři tečky) vpravo pro rychlé akce jako připojení, úpravu štítků nebo smazání.", + "devices_complete_title": "Správa zařízení připravena!", + "devices_complete_text": "Přetahujte zařízení mezi složkami pro jejich organizaci. Poklepáním na zařízení otevřete jeho panel detailů.", + "settings_tabs_title": "Kategorie nastavení", + "settings_tabs_text": "Přepínejte mezi sekcemi Obecné, Zabezpečení, Vzhled a dalšími konfiguračními částmi.", + "settings_content_title": "Konfigurace", + "settings_content_text": "Každá sekce obsahuje specifická nastavení serveru a konzole. Změny se uloží po kliknutí na tlačítko Uložit.", + "settings_complete_title": "Přehled nastavení", + "settings_complete_text": "Zkontrolujte nastavení Zabezpečení pro 2FA, API klíče a správu uživatelů. Navštivte Vzhled pro úpravu vizuálu konzole.", + "help": "Nápověda a návody", + "tour_console": "Prohlídka konzole", + "tour_desktop": "Prohlídka režimu plochy", + "tour_devices": "Prohlídka zařízení", + "tour_settings": "Prohlídka nastavení", + "reset_all": "Resetovat všechny návody", + "tour_remote": "Prohlídka vzdálené relace", + "tour_organization": "Nastavení organizace", + "tour_cdap": "Přehled CDAP", + "tour_chat": "Základy chatu", + "remote_toolbar_title": "Vzdálený panel nástrojů", + "remote_toolbar_text": "Přistupujte k ovládání zobrazení, synchronizaci schránky, speciálním klávesám a nastavení kvality. Přepínejte na celou obrazovku pomocí F11.", + "remote_canvas_title": "Vzdálený obraz", + "remote_canvas_text": "Toto je vzdálená obrazovka. Kliknutím dovnitř začnete ovládat vzdálené zařízení. Vstup myši a klávesnice je automaticky přesměrován.", + "remote_clipboard_title": "Synchronizace schránky", + "remote_clipboard_text": "Kopírujte a vkládejte text mezi vaším počítačem a vzdáleným zařízením. Používejte Ctrl+C / Ctrl+V jako obvykle.", + "remote_complete_title": "Vzdálená relace připravena!", + "remote_complete_text": "Používejte tlačítka na panelu pro speciální klávesy (Ctrl+Alt+Del, PrintScreen) a přepínání monitorů. Relaci ukončíte klávesou Escape nebo tlačítkem Odpojit.", + "org_overview_title": "Organizace", + "org_overview_text": "Organizace umožňují seskupovat uživatele, zařízení a politiky. Každá organizace má vlastního správce, operátory a nastavení.", + "org_create_title": "Vytvořit organizaci", + "org_create_text": "Kliknutím sem vytvoříte novou organizaci. Zadejte název, identifikátor (slug) a volitelný popis. Stanete se vlastníkem nové organizace.", + "org_members_title": "Správa členů", + "org_members_text": "Zvěte uživatele e-mailem, přidělujte role (admin, operátor, uživatel) a spravujte přístup. Členové uvidí zařízení přiřazená jejich organizaci.", + "org_devices_title": "Přiřazení zařízení", + "org_devices_text": "Přidejte zařízení do organizace. Zařízení zde přiřazená zdědí politiky organizace a budou viditelná pro její členy.", + "org_policies_title": "Politiky organizace", + "org_policies_text": "Nastavte bezpečnostní politiky, jako jsou požadavky na heslo, vypršení relací, vynucení 2FA a pravidla pro registraci zařízení.", + "org_complete_title": "Nastavení organizace dokončeno!", + "org_complete_text": "Pozvěte svůj tým a přiřaďte zařízení. Politiky se automaticky aplikují na všechny členy.", + "cdap_devices_title": "CDAP zařízení", + "cdap_devices_text": "Zobrazte všechna připojená CDAP zařízení — IoT senzory, PLC, mosty a vlastní agenty. Zelené indikátory značí aktivní připojení.", + "cdap_widgets_title": "Nástěnka widgetů", + "cdap_widgets_text": "Widgety zobrazují data ze zařízení v reálném čase. Ukazatele, přepínače, LED, grafy — každý typ vizualizuje jiný druh dat.", + "cdap_commands_title": "Odesílání příkazů", + "cdap_commands_text": "Interagujte se zařízeními odesíláním příkazů. Některé vyžadují potvrzení. Protokol příkazů uchovává historii všech odeslaných požadavků.", + "cdap_terminal_title": "Terminál zařízení", + "cdap_terminal_text": "Otevřete terminálovou relaci k CDAP agentům pro pokročilou diagnostiku nebo manuální konfiguraci. Příkazy pište přímo.", + "cdap_complete_title": "Přehled CDAP dokončen!", + "cdap_complete_text": "Prozkoumejte widgety, posílejte příkazy a používejte terminál nebo prohlížeč souborů. CDAP agenti hlásí metriky automaticky.", + "chat_contacts_title": "Kontakty a skupiny", + "chat_contacts_text": "Zde vidíte své kontakty a chatovací skupiny. Kliknutím na kontakt otevřete konverzaci. Zelené tečky značí online uživatele.", + "chat_send_title": "Odesílání zpráv", + "chat_send_text": "Napište zprávu a stiskněte Enter. Zprávy jsou šifrovány koncovým šifrováním (E2E), pokud jej obě strany podporují.", + "chat_file_title": "Sdílení souborů", + "chat_file_text": "Kliknutím na ikonu přílohy můžete sdílet soubory. Soubory jsou šifrované a mohou mít velikost až 50 MB.", + "chat_complete_title": "Chat připraven!", + "chat_complete_text": "Chatujte s operátory a koncovými uživateli v reálném čase. Vytvářejte skupiny pro týmovou komunikaci. Zprávy podporují potvrzení o přečtení.", + "disable_tutorials": "Vypnout návody", + "enable_tutorials": "Zapnout návody" + }, + "help_request": { + "title": "Žádosti o pomoc", + "subtitle": "Správa příchozích žádostí o pomoc z desktopových klientů", + "new_request": "Nová žádost o pomoc", + "device": "Zařízení", + "hostname": "Hostitel", + "message": "Zpráva", + "status": "Stav", + "pending": "Čekající", + "accepted": "Přijato", + "resolved": "Vyřešeno", + "accept": "Přijmout", + "resolve": "Vyřešit", + "no_requests": "Žádné žádosti o pomoc", + "notification": "Přijata žádost o pomoc od", + "stats_total": "Celkem", + "filter_all": "Vše" + }, + "organizations": { + "title": "Organizace", + "create": "Vytvořit organizaci", + "edit": "Upravit organizaci", + "detail": "Podrobnosti o organizaci", + "name": "Název", + "slug": "Identifikátor (pro URL)", + "logo_url": "URL loga", + "users": "Uživatelé", + "devices": "Zařízení", + "invitations": "Pozvánky", + "settings": "Nastavení", + "add_user": "Přidat uživatele", + "assign_device": "Přiřadit zařízení", + "create_invitation": "Vytvořit pozvánku", + "delete_confirm": "Smazat tuto organizaci? Tímto budou odstraněni všichni přidružení uživatelé, zařízení a nastavení.", + "no_orgs": "Zatím žádné organizace", + "no_orgs_hint": "Vytvořte svou první organizaci a začněte spravovat zařízení a uživatele.", + "connection_policy": "Zásady připojení", + "allow_file_transfer": "Povolit přenos souborů", + "allow_clipboard": "Povolit schránku", + "max_session_duration": "Max. délka relace (min)", + "role_owner": "Vlastník", + "role_admin": "Administrátor", + "role_operator": "Operátor", + "role_user": "Člen", + "username": "Uživatelské jméno", + "password": "Heslo", + "display_name": "Zobrazované jméno", + "email": "E-mail", + "role": "Role", + "last_login": "Poslední přihlášení", + "actions": "Akce", + "device_id": "ID zařízení", + "department": "Oddělení", + "building": "Budova", + "location": "Umístění", + "assigned_user": "Přiřazený uživatel", + "token": "Token", + "expires": "Vyprší", + "used": "Použito", + "no_users": "V této organizaci nejsou žádní uživatelé.", + "no_devices": "K této organizaci nejsou přiřazena žádná zařízení.", + "no_invitations": "Žádné pozvánky.", + "user_added": "Uživatel přidán", + "user_removed": "Uživatel odstraněn", + "user_updated": "Role uživatele aktualizována", + "device_assigned": "Zařízení přiřazeno", + "device_unassigned": "Přiřazení zařízení zrušeno", + "invitation_created": "Pozvánka vytvořena", + "settings_saved": "Nastavení uložena", + "org_deleted": "Organizace smazána", + "confirm_remove_user": "Odstranit tohoto uživatele z organizace?", + "confirm_unassign_device": "Zrušit přiřazení tohoto zařízení k organizaci?", + "confirm_delete_org": "Smazat tuto organizaci a všechna přidružená data?", + "edit_role": "Upravit roli", + "raw_settings": "Surové nastavení", + "key": "Klíč", + "value": "Hodnota", + "save": "Uložit nastavení", + "policy_unattended": "Bezobslužné (okamžité)", + "policy_attended": "S asistencí (s potvrzením)", + "policy_ask": "Vždy se ptát", + "expires_hours": "Vypršení (hodiny)", + "loading_failed": "Nepodařilo se načíst data organizace", + "name_slug_required": "Název a identifikátor jsou povinné", + "org_created": "Organizace vytvořena", + "org_updated": "Organizace aktualizována", + "create_new_user": "Vytvořit nového", + "add_existing_user": "Přidat existujícího", + "none_available": "žádný", + "select_user": "Vybrat uživatele", + "org_role": "Role v organizaci", + "link_user_hint": "Vybraný uživatel bude propojen s touto organizací pomocí svých přihlašovacích údajů k serveru.", + "no_available_users": "Všichni uživatelé serveru jsou již s touto organizací propojeni.", + "user_linked": "Uživatel propojen s organizací" + }, + "chat": { + "e2e_enabled": "Koncové šifrování aktivní", + "e2e_establishing": "Navazování zabezpečeného kanálu...", + "e2e_established": "Zabezpečený kanál navázán", + "e2e_unsupported": "E2E šifrování není v tomto prohlížeči podporováno", + "typing_indicator": "píše...", + "read_receipt": "Přečteno", + "delivered": "Doručeno", + "file_share": "Soubor", + "file_too_large": "Soubor je příliš velký (max 50 MB)", + "file_encrypted": "Šifrovaný přenos souboru", + "presence_online": "Online", + "presence_away": "Nepřítomen", + "presence_busy": "Nerušit", + "presence_offline": "Offline", + "key_rotation": "Bezpečnostní klíče byly obměněny", + "new_message": "Nová zpráva", + "title": "Chat", + "contacts": "Kontakty", + "groups": "Skupiny", + "no_contacts": "Zatím žádné kontakty", + "no_groups": "Zatím žádné skupiny", + "no_messages": "Zatím žádné zprávy", + "no_results": "Nebyly nalezeny žádné výsledky", + "select_conversation": "Vyberte konverzaci a začněte chatovat", + "type_message": "Napište zprávu...", + "send": "Odeslat", + "attach_file": "Připojit soubor", + "emoji": "Emoji", + "search_messages": "Hledat ve zprávách", + "create_group": "Vytvořit skupinu", + "group_name": "Název skupiny", + "group_members": "Členové", + "cancel": "Zrušit", + "create": "Vytvořit", + "members": "členů", + "today": "Dnes", + "yesterday": "Včera", + "react": "Reagovat", + "my_presence": "Můj stav", + "search_placeholder": "Hledat kontakty a zprávy", + "select_conversation_hint": "Vyberte konverzaci pro zobrazení zpráv", + "info": "Informace", + "group_name_placeholder": "Zadejte název skupiny" + }, + "toast": { + "device_connected": "Zařízení připojeno", + "device_disconnected": "Zařízení odpojeno", + "session_started": "Vzdálená relace zahájena", + "session_ended": "Vzdálená relace ukončena", + "file_upload_complete": "Nahrávání souboru dokončeno", + "settings_saved": "Nastavení uložena", + "error_generic": "Došlo k chybě", + "connection_lost": "Spojení ztraceno", + "reconnecting": "Opětovné připojování..." + }, + "theme": { + "dark": "Tmavý", + "light": "Světlý", + "auto": "Systémový", + "title": "Motiv" + }, + "days": { + "mon": "Po", + "tue": "Út", + "wed": "St", + "thu": "Čt", + "fri": "Pá", + "sat": "So", + "sun": "Ne" + }, + "toolkit": { + "title": "Sada nástrojů", + "subtitle": "Administrátorské utility a diagnostické nástroje", + "cat_network": "Síť", + "cat_crypto": "Kryptografie", + "cat_encoding": "Kódování", + "cat_system": "Systém", + "host": "Hostitel", + "port": "Port", + "domain": "Doména", + "run": "Spustit", + "generate": "Generovat", + "encode": "Zakódovat", + "decode": "Dekódovat", + "send": "Odeslat", + "refresh": "Obnovit", + "algorithm": "Algoritmus", + "input_text": "Vstupní text", + "enter_text": "Zadejte text...", + "length": "Délka", + "options": "Možnosti", + "source": "Zdroj", + "lines": "Řádky", + "log_console": "Konzole", + "log_go": "Server Go", + "mac_address": "MAC adresa", + "broadcast": "Všesměrové vysílání", + "ping_title": "Ping", + "ping_desc": "Kontrola dostupnosti a latence hostitele", + "tcp_title": "Kontrola TCP portu", + "tcp_desc": "Test konektivity TCP portu", + "ssl_title": "SSL Inspektor", + "ssl_desc": "Kontrola podrobností SSL/TLS certifikátu", + "http_title": "HTTP Kontrola stavu", + "http_desc": "Ověření stavu HTTP koncového bodu", + "dns_title": "DNS Lookup", + "dns_desc": "Převod názvu hostitele na IP adresu", + "whois_title": "DNS záznamy", + "whois_desc": "Dotaz na záznamy A, AAAA, MX, TXT, NS", + "speed_title": "Test rychlosti", + "speed_desc": "Měření šířky pásma stahování", + "run_speed_test": "Spustit test rychlosti", + "wol_title": "Wake-on-LAN", + "wol_desc": "Odeslání magického paketu pro probuzení zařízení", + "wol_sent": "Magický paket odeslán", + "hash_title": "Generátor hashů", + "hash_desc": "Generování kryptografických hashů", + "password_title": "Generátor hesel", + "password_desc": "Generování bezpečného náhodného hesla", + "jwt_title": "JWT Dekodér", + "jwt_desc": "Dekódování a kontrola JSON Web Tokenů", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Kódování nebo dekódování Base64 dat", + "url_title": "URL Enkodér", + "url_desc": "Kódování nebo dekódování součástí URL", + "processes_title": "Seznam procesů", + "processes_desc": "Zobrazení běžících systémových procesů", + "disk_title": "Využití disku", + "disk_desc": "Zobrazení využití diskových oddílů", + "db_title": "Statistiky databáze", + "db_desc": "Zobrazení statistik tabulek databáze", + "docker_title": "Docker kontejnery", + "docker_desc": "Zobrazení běžících Docker kontejnerů", + "logs_title": "Prohlížeč logů", + "logs_desc": "Zobrazení nedávného výstupu logů", + "ip_address": "IP", + "latency": "Latence", + "ttl": "TTL", + "status": "Stav", + "resolved": "Vyřešeno", + "subject": "Předmět", + "issuer": "Vydavatel", + "valid_from": "Platnost od", + "valid_to": "Platnost do", + "days_left": "Zbývá dní", + "days": "dní", + "protocol": "Protokol", + "cipher": "Šifra", + "alt_names": "SANs (Alternativní názvy)", + "chain": "Řetězec", + "record_type": "Typ", + "record_value": "Hodnota", + "hash_value": "Hash", + "entropy": "Entropie", + "very_strong": "Velmi silné", + "strong": "Silné", + "weak": "Slabé", + "expiry": "Expirace", + "expired": "Vypršelo", + "valid": "Platné", + "process_name": "Název", + "db_type": "Typ", + "db_size": "Velikost", + "table_name": "Tabulka", + "row_count": "Řádky", + "no_data": "Žádná data nejsou k dispozici", + "no_docker": "Nebyly nalezeny žádné Docker kontejnery nebo Docker není dostupný", + "no_logs": "Žádné řádky logu nejsou k dispozici" + }, + "policies": { + "title": "Zásady organizace", + "subtitle": "Správa zásad zabezpečení, připojení a funkcí pro vaše organizace", + "select_org": "Organizace", + "select_org_placeholder": "Vyberte organizaci...", + "select_org_first": "Vyberte organizaci pro zobrazení auditního logu zásad.", + "configured": "Nakonfigurováno", + "connection_title": "Zásady připojení", + "connection_desc": "Řízení způsobu navazování vzdálených relací", + "connection_mode": "Režim připojení", + "mode_attended": "S asistencí (vyžaduje schválení uživatelem)", + "mode_unattended": "Bezobslužné (vždy povolit)", + "mode_ask": "Vždy se ptát", + "max_session": "Max. délka relace (minuty)", + "idle_lock": "Časový limit pro uzamčení při nečinnosti (minuty)", + "wallpaper_policy": "Tapeta během relace", + "wallpaper_show": "Zobrazit", + "wallpaper_hide_session": "Skrýt během relace", + "wallpaper_hide_always": "Vždy skrývat", + "features_title": "Zásady funkcí", + "features_desc": "Povolení nebo zakázání specifických funkcí pro zařízení", + "allow_file_transfer": "Povolit přenos souborů", + "allow_clipboard": "Povolit synchronizaci schránky", + "allow_audio": "Povolit streamování zvuku", + "allow_recording": "Povolit nahrávání relace", + "security_title": "Zásady zabezpečení", + "security_desc": "Vynucení bezpečnostních požadavků na zařízení organizace", + "require_2fa": "Vyžadovat 2FA pro bezobslužný přístup", + "password_min_length": "Minimální délka hesla", + "password_require_special": "Vyžadovat speciální znaky", + "password_max_age": "Maximální stáří hesla (dny, 0=nikdy)", + "allowed_operators": "Povolené role operátorů (oddělené čárkou)", + "network_title": "Síťové zásady", + "network_desc": "Řízení relay serverů a přímých připojení", + "block_direct_p2p": "Blokovat přímé P2P (vynutit relay)", + "allowed_relays": "Povolené relay servery (jeden na řádek)", + "ip_allowlist": "Seznam povolených IP adres (CIDR, jeden na řádek)", + "update_title": "Zásady aktualizací", + "update_desc": "Řízení automatických aktualizací a aktualizačních kanálů", + "auto_update": "Povolit automatické aktualizace", + "update_channel": "Aktualizační kanál", + "audit_title": "Změny zásad", + "audit_desc": "Historie nedávných změn zásad", + "no_audit": "Nebyly zaznamenány žádné změny zásad.", + "save_success": "Zásady úspěšně uloženy", + "save_failed": "Uložení zásad selhalo", + "load_failed": "Načtení zásad selhalo", + "block_direct_p2p_hint": "Dotyczy urzadzen w tej organizacji. Domyslny tryb globalny ustawiasz w Nastavení → Strategia polaczen." + }, + "attestation": { + "title": "Atestace zařízení", + "subtitle": "Sledování ověřování identity zařízení a hardwarových otisků", + "verified": "Ověřeno", + "pending": "Čekající", + "failed": "Selhalo", + "device_list": "Záznamy atestace zařízení", + "device_list_desc": "Hardwarové otisky a stav ověření identity", + "col_device": "ID zařízení", + "col_hostname": "Hostitel", + "col_fingerprint": "Otisk (Fingerprint)", + "col_status": "Stav", + "col_last_check": "Poslední kontrola", + "col_actions": "Akce", + "no_records": "Nebyly nalezeny žádné záznamy atestace.", + "verify_success": "Zařízení bylo označeno jako ověřené", + "verify_failed": "Ověření zařízení selhalo", + "revoke_success": "Atestace zařízení byla odvolána", + "revoke_failed": "Odvolání atestace selhalo" + }, + "fleet": { + "title": "Správa flotily", + "tab_resources": "Zdroje", + "tab_tasks": "Úkoly", + "tab_builder": "Tvůrce workflow", + "tab_compliance": "Shoda (Compliance)", + "res_title": "Mapování zdrojů", + "res_all_types": "Všechny typy", + "res_type_printer": "Tiskárna", + "res_type_network_drive": "Síťový disk", + "res_type_dns": "DNS server", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Přidat zdroj", + "res_name": "Název zdroje", + "res_type": "Typ", + "res_address": "Adresa / Cesta", + "res_target": "Cíl", + "res_scope": "Rozsah", + "res_scope_org": "Organizace", + "res_scope_group": "Skupina", + "res_scope_device": "Zařízení", + "res_scope_value": "Hodnota rozsahu", + "res_status": "Stav", + "res_active": "Aktivní", + "res_inactive": "Neaktivní", + "res_no_data": "Nebyly nalezeny žádné zdroje. Klikněte na 'Přidat zdroj' pro vytvoření.", + "res_confirm_delete": "Opravdu chcete tento zdroj smazat?", + "task_title": "Plánovač úloh", + "task_all_status": "Všechny stavy", + "task_status_pending": "Čekající", + "task_status_running": "Běží", + "task_status_success": "Úspěch", + "task_status_failed": "Selhalo", + "task_search": "Hledat úkoly...", + "task_create": "Vytvořit úkol", + "task_name": "Název úkolu", + "task_type": "Typ", + "task_type_script": "Skript", + "task_type_install": "Instalace", + "task_type_update": "Aktualizace", + "task_type_restart": "Restartovat", + "task_type_deploy": "Nasazení (Deploy)", + "task_type_scan": "Skenování", + "task_targets": "Cíle", + "task_targets_help": "ID zařízení nebo názvy skupin, oddělené čárkou", + "task_schedule": "Plán", + "task_schedule_once": "Jednou", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Hodnota plánu", + "task_script": "Skript / Příkaz", + "task_retries": "Počet opakování", + "task_timeout": "Časový limit (s)", + "task_last_run": "Poslední spuštění", + "task_no_data": "Nebyly nalezeny žádné úkoly. Klikněte na 'Vytvořit úkol' pro začátek.", + "task_confirm_delete": "Opravdu chcete tento úkol smazat?", + "task_output": "Výstup úkolu", + "task_retry": "Zkusit znovu", + "builder_title": "Vizuální tvůrce workflow", + "builder_select_workflow": "Vybrat workflow...", + "builder_new": "Nový", + "builder_save": "Uložit", + "builder_export": "Exportovat", + "builder_execute": "Spustit", + "builder_dry_run": "Zkušební spuštění (Dry Run)", + "builder_triggers": "Spouštěče", + "builder_conditions": "Podmínky", + "builder_actions": "Akce", + "builder_results": "Výsledky", + "builder_transforms": "Transformace", + "builder_properties": "Vlastnosti", + "builder_no_selection": "Vyberte uzel pro úpravu jeho vlastností.", + "builder_node_trigger_manual": "Ruční spouštěč", + "builder_node_trigger_schedule": "Plán", + "builder_node_trigger_event": "Spouštěč události", + "builder_node_cond_os": "Kontrola OS", + "builder_node_cond_threshold": "Prahová hodnota", + "builder_node_cond_time_window": "Časové okno", + "builder_node_action_script": "Spustit skript", + "builder_node_action_install": "Instalovat SW", + "builder_node_action_restart": "Restartovat službu", + "builder_node_action_file_deploy": "Nasadit soubor", + "builder_node_action_message": "Odeslat zprávu", + "builder_node_result_log": "Záznam do logu", + "builder_node_result_alert": "Odeslat upozornění", + "builder_node_result_chain": "Zřetězit workflow", + "builder_node_transform_parse": "Parsovat JSON", + "builder_node_transform_filter": "Filtr", + "builder_node_transform_delay": "Zpoždění", + "workflow_name": "Název workflow:", + "comp_title": "Softwarová shoda (Compliance)", + "comp_compliant": "V shodě", + "comp_warning": "Varování", + "comp_critical": "Kritické", + "comp_score": "Prům. skóre", + "comp_device": "Zařízení", + "comp_hostname": "Hostitel", + "comp_os": "OS", + "comp_score_col": "Skóre", + "comp_issues": "Problémy", + "comp_last_scan": "Poslední sken", + "comp_scan": "Skenovat", + "comp_scan_all": "Skenovat vše", + "comp_remediate": "Napravit", + "comp_remediate_confirm": "Spustit automatickou nápravu na tomto zařízení?", + "comp_no_data": "Nejsou k dispozici žádná data o shodě. Začněte spuštěním skenu.", + "save": "Uložit", + "cancel": "Zrušit", + "close": "Zavřít", + "edit": "Upravit", + "delete": "Smazat", + "actions": "Akce", + "all_orgs": "Všechny organizace", + "select_org_placeholder": "Vybrat organizaci...", + "all_types": "Všechny typy", + "type_printer": "Tiskárna", + "type_network_drive": "Síťový disk", + "type_dns": "DNS server", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Přidat zdroj", + "edit_resource": "Upravit zdroj", + "col_name": "Název", + "col_type": "Typ", + "col_target": "Cíl", + "col_scope": "Rozsah", + "col_status": "Stav", + "col_actions": "Akce", + "no_resources": "Nebyly nalezeny žádné zdroje.", + "active": "Aktivní", + "inactive": "Neaktivní", + "address": "Adresa / Cesta", + "scope_org": "Organizace", + "scope_group": "Skupina", + "scope_device": "Zařízení", + "scope_value": "Hodnota rozsahu", + "scope_value_hint": "ID organizace, skupiny nebo zařízení", + "confirm_delete": "Opravdu chcete tuto položku smazat?", + "all_statuses": "Všechny stavy", + "status_pending": "Čekající", + "status_running": "Běží", + "status_success": "Úspěch", + "status_failed": "Selhalo", + "search_tasks": "Hledat úkoly...", + "create_task": "Vytvořit úkol", + "edit_task": "Upravit úkol", + "col_task_name": "Název úkolu", + "col_task_type": "Typ", + "col_schedule": "Plán", + "col_last_run": "Poslední spuštění", + "no_tasks": "Nebyly nalezeny žádné úkoly.", + "task_type_file_deploy": "Nasazení souboru", + "task_type_registry": "Registr", + "target_devices": "Cílová zařízení", + "target_hint": "ID zařízení nebo názvy skupin", + "schedule_immediate": "Okamžitě", + "schedule_once": "Jednou", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Skript / Příkaz", + "retry_count": "Počet opakování", + "timeout_sec": "Časový limit (s)", + "loading": "Načítání", + "no_output": "Žádný výstup není k dispozici", + "error_loading": "Chyba při načítání dat", + "select_workflow": "Vybrat workflow...", + "new_workflow": "Nový", + "export": "Exportovat", + "execute": "Spustit", + "dry_run": "Zkušební spuštění", + "node_triggers": "Spouštěče", + "node_manual": "Ruční spouštěč", + "node_schedule": "Plán", + "node_event": "Spouštěč události", + "node_conditions": "Podmínky", + "node_os_check": "Kontrola OS", + "node_threshold": "Prahová hodnota", + "node_time_window": "Časové okno", + "node_actions": "Akce", + "node_run_script": "Spustit skript", + "node_install": "Instalovat SW", + "node_restart": "Restartovat službu", + "node_file_deploy": "Nasatid soubor", + "node_send_message": "Odeslat zprávu", + "node_results": "Výsledky", + "node_log_output": "Záznam do logu", + "node_send_alert": "Odeslat upozornění", + "node_chain": "Zřetězit workflow", + "node_transforms": "Transformace", + "node_parse_json": "Parsovat JSON", + "node_filter": "Filtr", + "node_delay": "Zpoždění", + "node_properties": "Vlastnosti", + "all_organizations": "Všechny organizace", + "scan_all": "Skenovat vše", + "compliant": "V shodě", + "non_compliant": "Varování", + "critical_issues": "Kritické", + "avg_score": "Prům. skóre", + "col_device": "Zařízení", + "col_hostname": "Hostitel", + "col_os": "OS", + "col_score": "Skóre", + "col_issues": "Problémy", + "col_last_scan": "Poslední sken", + "no_compliance_data": "Nejsou k dispozici žádná data o shodě.", + "confirm_remediate": "Spustit automatickou nápravu na tomto zařízení?" + }, + "scaling": { + "title": "Škálování a správa relay uzlů", + "tab_overview": "Přehled", + "tab_relays": "Relay uzly", + "tab_rules": "Pravidla přiřazení", + "tab_capacity": "Plánování kapacity", + "arch_title": "Síťová architektura", + "arch_loading": "Načítání diagramu architektury...", + "stat_relay_nodes": "Relay uzly", + "stat_total_devices": "Celkem zařízení", + "stat_active_sessions": "Aktivní relace", + "stat_bandwidth": "Celková šířka pásma", + "relay_health": "Stav relay uzlů", + "no_relays": "Nejsou konfigurovány žádné relay uzly. Přidejte svůj první uzel pro distribuci zátěže.", + "relay_search": "Hledat relay...", + "relay_add": "Přidat relay uzel", + "relay_edit": "Upravit relay uzel", + "col_name": "Název", + "col_address": "Adresa", + "col_location": "Umístění", + "col_devices": "Zařízení", + "col_sessions": "Relace", + "col_bandwidth": "Šířka pásma", + "col_status": "Stav", + "col_actions": "Akce", + "col_priority": "Priorita", + "col_rule_name": "Název pravidla", + "col_match": "Shoda", + "col_target_relay": "Cílový relay", + "col_fallback": "Záloha (Fallback)", + "status_online": "Online", + "status_degraded": "Omezený provoz", + "status_offline": "Offline", + "status_enabled": "Povoleno", + "status_disabled": "Zakázáno", + "confirm_delete_relay": "Opravdu chcete tento relay uzel smazat?", + "confirm_delete_rule": "Opravdu chcete toto pravidlo přiřazení smazat?", + "rules_hint": "Pravidla přiřazení určují, který relay server obsluhuje konkrétní skupiny zařízení. Pravidla jsou vyhodnocována podle priority (nejnižší jako první).", + "rule_add": "Přidat pravidlo", + "rule_edit": "Upravit pravidlo", + "rule_match_type": "Typ shody", + "match_subnet": "Podsíť", + "match_group": "Skupina zařízení", + "match_tag": "Štítek zařízení", + "match_location": "Umístění", + "rule_match_value": "Hodnota shody", + "fallback_master": "Hlavní server (Master)", + "fallback_nearest": "Nejbližší relay", + "relay_max_sessions": "Max. relací", + "relay_max_bandwidth": "Max. šířka pásma (Mbps)", + "cap_tiers": "Úrovně kapacity", + "cap_loading": "Načítání dat o kapacitě...", + "cap_recommendations": "Doporučení", + "cap_no_recs": "Žádná doporučení nejsou k dispozici.", + "cap_planning": "Plánování infrastruktury", + "cap_config": "Konfigurace", + "cap_max_devices": "Max. zařízení", + "cap_max_sessions": "Max. relací", + "cap_current": "Aktuální", + "cap_utilization": "Využití", + "cap_tier_devices": "Kapacita zařízení", + "cap_tier_sessions": "Kapacita relací", + "cap_tier_bandwidth": "Kapacita šířky pásma", + "cap_single_sqlite": "Jeden server (SQLite)", + "cap_single_pg": "Jeden server (PostgreSQL)", + "cap_master_3": "Master + 3 Relay uzly", + "cap_master_10": "Master + 10 Relay uzlů", + "rec_no_relays": "Nejsou konfigurovány žádné relay uzly. Zvažte jejich přidání pro lepší výkon a redundanci.", + "rec_devices_high": "Využití zařízení je vysoké. Zvažte přidání dalších relay uzlů pro rozdělení zátěže.", + "rec_sessions_high": "Kapacita relací se blíží limitu. Zvažte upgrade relay infrastruktury.", + "rec_cpu_high": "Některé relay uzly hlásí vysoké využití CPU. Zvažte vyvažování zátěže nebo navýšení kapacity.", + "rec_all_good": "Všechny systémy pracují v rámci běžných parametrů. Není vyžadována žádná akce.", + "save": "Uložit", + "cancel": "Zrušit", + "edit": "Upravit", + "delete": "Smazat", + "close": "Zavřít", + "no_rules": "Žádná pravidla přiřazení.", + "relays_info_banner": "Tento seznam je pouze informativní. Relay servery skutečně používané klienty jsou konfigurovány přes proměnnou prostředí RELAY_SERVERS na serveru BetterDesk.", + "relay_name_address_required": "Název a adresa jsou povinné.", + "relay_save_failed": "Uložení relay uzlu selhalo.", + "relay_delete_failed": "Smazání relay uzlu selhalo.", + "relay_saved": "Relay uzel byl uložen.", + "relay_deleted": "Relay uzel byl smazán.", + "rule_name_value_required": "Název pravidla a hodnota shody jsou povinné.", + "rule_save_failed": "Uložení pravidla selhalo.", + "rule_delete_failed": "Smazání pravidla selhalo.", + "rule_saved": "Pravidlo bylo uloženo.", + "rule_deleted": "Pravidlo bylo smazáno." + }, + "cross_platform": { + "title": "Meziplatformní kompatibilita", + "tab_matrix": "Matice kompatibility", + "tab_distribution": "Distribuce", + "tab_protocols": "Protokoly", + "tab_limitations": "Omezení", + "matrix_hint": "Matice podpory funkcí napříč všemi platformami. Zelená = plná podpora, žlutá = částečná, šedá = nedostupné, modrá = plánováno.", + "col_feature": "Funkce", + "legend_full": "Plná podpora", + "legend_partial": "Částečná podpora", + "legend_none": "Nedostupné", + "legend_planned": "Plánováno", + "platform_breakdown": "Rozdělení podle platforem", + "arch_breakdown": "Rozdělení podle architektury", + "version_breakdown": "Rozdělení podle verzí", + "summary": "Souhrn", + "total_devices": "Celkem zařízení", + "unique_platforms": "Platformy", + "unique_archs": "Architektury", + "unique_versions": "Verze klientů", + "no_devices": "Zatím nejsou registrována žádná zařízení.", + "protocols_hint": "Vyjednávání schopností protokolu zajišťuje, že každý klient obdrží pouze funkce, které podporuje. Server přizpůsobuje chování na základě nahlášených schopností.", + "capability_negotiation": "Vyjednávání schopností", + "codec_support": "Podpora kodeků (online zařízení)", + "feature_support": "Podpora funkcí (online zařízení)", + "no_codec_data": "Žádná data o kodecích z online zařízení nejsou k dispozici.", + "no_feature_data": "Žádná data o funkcích z online zařízení nejsou k dispozici.", + "protobuf_schema": "Schéma ClientCapabilities Protobuf", + "diagram_client": "Klient", + "diagram_server": "Server BetterDesk", + "diagram_peer": "Vzdálený partner", + "limitations_hint": "Každá platforma má specifická omezení, která ovlivňují dostupné funkce. Při plánování nasazení tato omezení zohledněte.", + "feat_desktop_client": "Desktopový klient", + "feat_background_agent": "Agent na pozadí", + "feat_remote_target": "Vzdálený cíl", + "feat_screen_capture": "Snímání obrazovky", + "feat_input_injection": "Vkládání vstupu", + "feat_file_transfer": "Přenos souborů", + "feat_clipboard_sync": "Synchronizace schránky", + "feat_audio_streaming": "Streamování zvuku", + "feat_chat": "Chat", + "feat_h264": "H.264 Kodek", + "feat_vp9": "VP9 Kodek", + "feat_av1": "AV1 Kodek", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webový prohlížeč", + "platform_chromeos": "ChromeOS", + "status_production": "Produkce", + "status_testing": "Testování", + "status_planned": "Plánováno", + "status_limited": "Omezeno", + "status_experimental": "Experimentální", + "limit_win_uac": "Pro instalaci služby a vkládání vstupu na zabezpečených plochách je vyžadováno zvýšení oprávnění (UAC).", + "limit_win_service": "Běží jako služba NSSM; instalace vyžaduje oprávnění administrátora.", + "limit_win_firewall": "Pravidla brány Windows Firewall musí povolit porty 21115-21119 pro relay připojení.", + "limit_linux_wayland": "Wayland kompozitory omezují programové snímání obrazovky; je vyžadováno PipeWire portal API.", + "limit_linux_pipewire": "Snímání zvuku vyžaduje PipeWire; PulseAudio záloha je dostupná, ale omezená.", + "limit_linux_arm": "Sestavení pro ARM64 jsou k dispozici; některé kodeky mohou používat softwarové dekódování (pomalejší).", + "limit_mac_screen": "V Předvolbách systému > Soukromí a zabezpečení je vyžadováno oprávnění k nahrávání obrazovky.", + "limit_mac_signing": "Agent musí být pro distribuci podepsán pomocí Apple Developer ID.", + "limit_mac_notarize": "Pro macOS Gatekeeper je vyžadována notarizace (při distribuci mimo App Store).", + "limit_android_projection": "MediaProjection API vyžaduje souhlas uživatele pro každou relaci snímání obrazovky.", + "limit_android_accessibility": "Vkládání vstupu vyžaduje Službu přístupnosti; omezeno v Androidu 14+.", + "limit_android_battery": "Služba na pozadí je omezena režimem Doze; může vyžadovat výjimku z optimalizace baterie.", + "limit_ios_capture": "Apple zakazuje snímání obrazovky na pozadí; podporován je pouze režim prohlížení.", + "limit_ios_input": "Vkládání vstupu není povoleno; pouze vzdálené sledování a chat.", + "limit_ios_appstore": "Distribuce pouze přes App Store; TestFlight pro beta testování.", + "limit_web_https": "WebCodecs API a WebRTC vyžadují HTTPS; HTTP přechází na JMuxer (omezené kodeky).", + "limit_web_codec": "Podpora kodeků závisí na prohlížeči; H.264 je široce podporován, VP9/AV1 se liší.", + "limit_web_performance": "Výkon je omezen pískovištěm (sandbox) prohlížeče; bez přímé hardwarové akcelerace.", + "limit_chrome_crostini": "Plná podpora agenta pouze uvnitř Crostini Linux kontejneru.", + "limit_chrome_pwa": "Režim PWA poskytuje pouze webové funkce; bez nativních schopností agenta.", + "limit_chrome_input": "Vkládání vstupu není podporováno mimo kontejner Crostini.", + "feat_session_recording": "Nahrávání relace", + "feat_multi_monitor": "Wiele monitorow", + "feat_unattended_access": "Dostep nienadzorowany", + "limit_win_virtual_account": "Uslugi dzialaja pod izolowanymi kontami wirtualnymi zamiast LocalSystem; niestandardní sciezki logow moga vyžadujec dostosowania ACL.", + "limit_linux_unprivileged": "Uslugi dzialaja jako dedykowany nieuprzywilejowany uzytkownik 'betterdesk' z zabezpieczeniami systemd (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Bezpečnostní audit", + "tab_overview": "Přehled", + "tab_events": "Auditní události", + "tab_hardening": "Zabezpečení (Hardening)", + "tab_vulnerabilities": "Zranitelnosti", + "security_score": "Skóre zabezpečení", + "failed_logins": "Neúspěšná přihlášení (24h)", + "active_bans": "Aktivní zákazy", + "api_keys": "API klíče", + "old_keys": "Staré klíče (>90 dní)", + "security_checks": "Bezpečnostní kontroly", + "tls_status": "Stav TLS", + "pass": "V pořádku", + "warning": "Varování", + "fail": "Chyba", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "Zabezpečený WebSocket", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "all_events": "Všechny události", + "event_login_failed": "Přihlášení selhalo", + "event_login_success": "Přihlášení úspěšné", + "event_peer_banned": "Partner (Peer) zakázán", + "event_ip_banned": "IP adresa zakázána", + "event_config_changed": "Konfigurace změněna", + "event_key_created": "Klíč vytvořen", + "refresh": "Obnovit", + "col_time": "Čas", + "col_action": "Akce", + "col_actor": "Původce", + "col_target": "Cíl", + "col_ip": "IP adresa", + "col_details": "Podrobnosti", + "no_events": "Nenalezeny žádné auditní události.", + "hardening_hint": "Priority zabezpečení pro vaše nasazení BetterDesk. Položky jsou seřazeny podle závažnosti.", + "no_hardening": "Žádné položky k zabezpečení nejsou k dispozici.", + "vuln_hint": "Výsledky skenování zranitelností závislostí. Pravidelně spouštějte 'npm audit' pro udržení bezpečnosti.", + "no_vulns": "Nenalezeny žádné zranitelnosti. Vaše závislosti jsou bezpečné." + }, + "languages": { + "title": "Správa jazyků", + "total_languages": "Celkem jazyků", + "fully_translated": "Plně přeloženo", + "needs_review": "Vyžaduje kontrolu", + "reference_keys": "Referenční klíče", + "no_languages": "Nebyly nalezeny žádné jazykové soubory.", + "badge_reference": "Referenční", + "badge_review": "Vyžaduje kontrolu", + "badge_complete": "Dokončeno", + "coverage": "pokrytí", + "keys": "klíče", + "missing": "chybí", + "extra": "navíc", + "view_missing": "Zobrazit chybějící", + "fix_missing": "Opravit chybějící", + "missing_keys_for": "Chybějící klíče pro", + "missing_keys_count": "chybějících klíčů (zobrazeny výchozí anglické hodnoty)", + "and_more": "a {n} dalších...", + "all_keys_present": "Všechny klíče jsou přítomny!", + "confirm_fix": "Přidat chybějící klíče do {code} s výchozími anglickými hodnotami?", + "fixed_title": "Klíče opraveny", + "fixed_msg": "Chybějící klíče v {code} je nutné přeložit ručně.", + "no_fix_needed": "Žádné chybějící klíče k opravě." + }, + "resource_control": { + "title": "Řízení prostředků", + "tab_overview": "Přehled", + "tab_usb": "Kontrola USB", + "tab_optical": "Optické mechaniky", + "tab_monitors": "Monitory", + "tab_disks": "Přístup k diskům", + "tab_quotas": "Kvóty prostředků", + "compliance_by_category": "Shoda podle kategorií", + "device_compliance": "Shoda zařízení", + "search_devices": "Hledat zařízení...", + "col_device": "Zařízení", + "col_platform": "Platforma", + "col_status": "Stav", + "col_usb": "USB", + "col_optical": "Optické", + "col_monitors": "Monitory", + "col_disks": "Disky", + "col_quotas": "Kvóty", + "col_actions": "Akce", + "stat_total_devices": "Celkem zařízení", + "stat_compliant": "V shodě", + "stat_partial": "Částečná shoda", + "stat_noncompliant": "Nevyhovuje", + "stat_compliance_rate": "Míra shody", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Částečně", + "badge_noncompliant": "Chyba", + "btn_configure": "Konfigurovat", + "no_devices": "Nenalezena žádná zařízení", + "usb_title": "Kontrola USB portů", + "usb_hint": "Řízení přístupu k USB úložištím pro vybrané zařízení nebo výchozí zásada pro celou organizaci.", + "usb_storage_policy": "Zásady USB úložišť", + "usb_whitelist": "Povolená zařízení (jedno na řádek)", + "usb_whitelist_hint": "VID:PID (např. 0781:5583)", + "usb_audit_log": "Logovat připojení USB zařízení", + "optical_title": "Kontrola optických mechanik", + "optical_hint": "Řízení přístupu k CD/DVD/Blu-ray mechanikám pro vybrané zařízení.", + "optical_policy": "Zásady optických mechanik", + "optical_audit_log": "Logovat přístup k optickým mechanikám", + "monitors_title": "Správa monitorů", + "monitors_hint": "Konfigurace nastavení monitorů včetně maximálního počtu, vynucení rozlišení, jasu a plánů napájení.", + "monitors_max_count": "Maximální počet monitorů (0 = neomezeno)", + "monitors_max_hint": "0 znamená bez omezení", + "monitors_resolution": "Max. rozlišení", + "monitors_brightness": "Limit jasu", + "monitors_power_schedule": "Plán napájení", + "monitors_power_hint": "např. off:22:00-06:00", + "disks_title": "Kontrola přístupu k diskům", + "disks_hint": "Konfigurace zásad přístupu k diskům včetně režimu pouze pro čtení, vynucení šifrování a viditelnosti oddílů.", + "disks_readonly": "Vynutit režim pouze pro čtení", + "disks_encryption": "Vyžadovat šifrování (BitLocker/LUKS)", + "disks_smart": "Povolit monitorování S.M.A.R.T.", + "disks_hidden": "Skryté oddíly", + "disks_hidden_hint": "Čárkou oddělená písmena disků nebo body připojení", + "quotas_title": "Kvóty prostředků", + "quotas_hint": "Nastavení kvót CPU, RAM, šířky pásma a disku na uživatele pro vybrané zařízení.", + "quotas_cpu": "Limit CPU", + "quotas_ram": "Limit RAM", + "quotas_bandwidth": "Limit šířky pásma (Mbps)", + "quotas_bandwidth_hint": "0 = neomezeno", + "quotas_disk_quota": "Disková kvóta (GB)", + "quotas_disk_hint": "0 = neomezeno", + "quotas_process_whitelist": "Seznam povolených procesů (jeden na řádek)", + "quotas_process_hint": "např. chrome.exe, code.exe", + "policy_allowed": "Povoleno", + "policy_blocked": "Blokováno", + "policy_whitelist": "Pouze povolené", + "policy_any": "Jakýkoliv" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Vizuální editor toků pro CDAP mosty", + "new_flow": "Nový tok", + "open_flow": "Otevřít tok", + "save_flow": "Uložit tok", + "run_flow": "Spustit", + "debug": "Ladit", + "deploy": "Nasadit", + "undo": "Zpět", + "redo": "Znovu", + "untitled": "Nepojmenovaný tok", + "code_mode": "Režim kódu", + "toggle_grid": "Přepnout mřížku", + "zoom_in": "Přiblížit", + "zoom_out": "Oddálit", + "zoom_fit": "Přizpůsobit obrazovce", + "palette": "Paleta uzlů", + "search_nodes": "Hledat uzly...", + "cat_sources": "Zdroje", + "cat_processing": "Zpracování", + "cat_outputs": "Výstupy", + "empty_title": "Začněte tvořit", + "empty_desc": "Přetáhněte uzly z palety a začněte stavět tok", + "browse_templates": "Procházet šablony", + "inspector": "Inspektor", + "select_node": "Vyberte uzel pro zobrazení jeho vlastností", + "console": "Konzole", + "clear_console": "Vymazat", + "console_ready": "Studio připraveno", + "label": "Štítek", + "configuration": "Konfigurace", + "connections": "Připojení", + "inputs": "Vstupy", + "outputs": "Výstupy", + "delete_node": "Smazat uzel", + "nodes": "Uzly", + "wires": "Propojení", + "status_ready": "Připraveno", + "status_deployed": "Nasazeno", + "flow_name": "Název toku", + "flow_desc": "Popis", + "loading": "Načítání...", + "no_flows": "Zatím žádné uložené toky", + "confirm_delete": "Opravdu chcete tento tok smazat?", + "templates": "Šablony", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT odběr", + "node_webhook": "Webhook", + "node_device_telemetry": "Telemetrie zařízení", + "node_database_query": "Databázový dotaz", + "node_file_watch": "Sledování souborů", + "node_filter": "Filtr", + "node_transform": "Transformace", + "node_aggregate": "Agregace", + "node_delay": "Zpoždění", + "node_debounce": "Debounce", + "node_switch": "Přepínač (Switch)", + "node_merge": "Sloučit", + "node_script": "Skript", + "node_widget_update": "Aktualizace widgetu", + "node_alert": "Upozornění", + "node_command": "Příkaz", + "node_log": "Logovat", + "node_rest_call": "REST volání", + "node_mqtt_publish": "MQTT publikace", + "node_database_write": "Zápis do databáze", + "node_email": "E-mail", + "node_modbus_write": "Modbus zápis", + "import_flow": "Importovat tok" + }, + "updates": { + "tab_title": "Aktualizace", + "title": "Aktualizace softwaru", + "desc": "Kontrola nových verzí a aktualizace konzole BetterDesk z GitHubu", + "current_version": "Nainstalovaná verze", + "latest_version": "Nejnovější verze", + "status": "Stav", + "check_now": "Zkontrolovat aktualizace", + "checking": "Kontrola…", + "up_to_date": "Aktuální", + "update_available": "Aktualizace je k dispozici", + "changelog": "Poznámky k vydání", + "no_changelog": "Poznámky k vydání nejsou k dispozici", + "files_changed": "Změněné soubory", + "files": "souborů", + "changes_unavailable": "Nepodařilo se načíst seznam změn. Aktualizaci lze přesto nainstalovat.", + "create_backup": "Vytvořit zálohu před aktualizací", + "install": "Instalovat aktualizaci", + "install_confirm": "Opravdu chcete nainstalovat tuto aktualizaci? Konzole se po dokončení restartuje.", + "installing": "Instalace aktualizace…", + "creating_backup": "Vytváření zálohy…", + "downloading": "Stahování souborů…", + "install_success": "Aktualizace byla úspěšně nainstalována. Konzole se restartuje…", + "install_failed": "Instalace aktualizace selhala", + "restarting": "Čekání na restart konzole…", + "restart_complete": "Konzole byla úspěšně restartována", + "restart_timeout": "Konzole se neresetovala včas. Zkontrolujte ji prosím ručně.", + "no_version": "Nebyla vybrána žádná verze. Nejprve zkontrolujte aktualizace.", + "backups_title": "Zálohy aktualizací", + "backups_desc": "Automatické zálohy vytvořené před každou aktualizací", + "no_backups": "Nenalezeny žádné zálohy aktualizací", + "restore": "Obnovit", + "restore_confirm": "Opravdu chcete obnovit systém z této zálohy? Změněné soubory budou přepsány.", + "restore_success": "Záloha byla úspěšně obnovena. Konzole se restartuje…", + "baseline_set": "Základní verze nastavena", + "commits_behind": "commitů pozadu", + "total_files": "Celkem souborů", + "applied": "Použito", + "failed": "Selhalo", + "skipped": "Přeskočeno", + "removed": "Odstraněno", + "auto": "Automaticky", + "manual": "Ručně", + "component_console": "Webová konzole", + "component_server": "Server Go", + "component_agent": "Agent", + "component_scripts": "Skripty a Docker", + "component_other": "Ostatní", + "server_rebuild_warning": "Zdrojový kód Go serveru se změnil – je vyžadováno přebudování binárního souboru. Použijte ALL-IN-ONE skript nebo kompilujte ručně.", + "include_server": "Zahrnout Go Server (kompilace a nasazení)", + "checking_go": "Kontrola Go…", + "go_not_found": "Go není nainstalováno", + "go_check_failed": "Nepodařilo se ověřit dostupnost Go", + "server_building": "Kompilace Go serveru… To může trvat několik minut.", + "server_built": "Binární soubor serveru byl zkompilován", + "server_build_failed": "Kompilace serveru selhala", + "server_stale_title": "Binární soubor serveru je zastaralý", + "server_stale_desc": "Zdrojový kód serveru Go byl aktualizován, ale spuštěný binární soubor nebyl znovu sestaven. Sestavte jej nyní, aby se použily aktualizace zabezpečení a knihoven.", + "rebuild_server": "Znovu sestavit binární soubor serveru", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Binární soubor serveru byl znovu sestaven a restartován", + "rebuild_server_failed": "Opětovné sestavení binárního souboru serveru se nezdařilo", + "server_deployed": "Binární soubor serveru byl nasazen", + "server_deploy_failed": "Nasazení serveru selhalo", + "server_build_note": "Kompilace serveru může trvat 1–5 minut. Stránka bude během kompilace nereagovat.", + "server_source_downloading": "Stahování zdrojového kódu serveru…", + "delete": "Smazat", + "delete_confirm": "Trvale smazat zálohu {name}? Tuto akci nelze vrátit zpět.", + "delete_success": "Záloha byla smazána", + "delete_failed": "Smazání zálohy selhalo", + "retention_label": "Ponechat N nejnovějších záloh", + "retention_hint": "Starší zálohy jsou po každé aktualizaci automaticky smazány. Pro ponechání všech použijte 0.", + "retention_saved": "Nastavení uchovávání uloženo", + "retention_invalid": "Počet musí být celé číslo mezi 0 a 1000", + "retention_required_for_prune": "Nejprve nastavte hodnotu uchovávání vyšší než 0", + "prune_now": "Použít nyní", + "prune_confirm": "Ponechat pouze {n} nejnovějších záloh a zbytek smazat?", + "prune_done": "Smazáno {n} záloh", + "total_size": "Celková velikost", + "backups_count": "záloh", + "strategy_label": "Metoda aktualizace", + "strategy_download": "Stáhnout sestavený soubor", + "strategy_compile": "Kompilovat ze zdroje", + "both_available": "Stáhnout i kompilovat", + "download_available": "Stažení k dispozici", + "no_method": "Žádná metoda aktualizace", + "no_release": "Žádné vydání", + "available": "K dispozici", + "server_downloading": "Stahování binárního souboru serveru…", + "server_downloaded": "Binární soubor serveru stažen", + "server_download_failed": "Stažení binárního souboru serveru selhalo", + "server_download_note": "Předpřipravený binární soubor bude stažen z GitHub Releases. To obvykle trvá méně než minutu.", + "install_go_hint": "Nainstalujte Go z https://go.dev/dl/ pro povolení kompilace, nebo publikujte verzi s předpřipravenými binárními soubory.", + "strategy_install_go": "Auto-instalace Go a kompilace", + "strategy_install_go_hint": "Stáhne oficiální Go toolchain (~120 MB) do datového adresáře konzole a poté zkompiluje server. Použijte, pokud Go není na hostiteli nainstalováno.", + "auto_strategy": "Automaticky", + "auto_strategy_hint": "Konzole vybere nejlepší dostupnou metodu (stažení → kompilace → automatická instalace Go).", + "auto_available": "Automatické přebudování připraveno", + "toolchain_ready": "Nástroje (toolchain) nainstalovány", + "toolchain_will_install": "Go toolchain bude nainstalován automaticky", + "toolchain_downloading": "Stahování Go toolchain…", + "toolchain_failed": "Instalace Go toolchain selhala", + "modal_title": "Instalace aktualizace", + "modal_done_title": "Aktualizace dokončena", + "modal_close": "Zavřít", + "modal_reload_now": "Znovu načíst konzoli", + "phase_confirm": "Potvrzení", + "phase_backup": "Záloha", + "phase_console": "Soubory konzole", + "phase_server": "Server Go", + "phase_restart": "Restartování", + "phase_done": "Hotovo", + "preparing": "Příprava…", + "backup_skipped": "Záloha přeskočena (dle volby uživatele)", + "server_skipped": "Go server přeskočen", + "server_not_selected": "Go server nebyl vybrán", + "server_processing": "Zpracování aktualizace Go serveru…", + "no_restart_needed": "Restart není vyžadován", + "complete": "Aktualizace byla použita", + "complete_summary": "Aktualizace byla úspěšně dokončena.", + "complete_with_errors": "Aktualizace skončila, ale některé kroky selhaly. Viz podrobnosti níže.", + "modal_done_with_errors_title": "Aktualizace dokončena s chybami", + "console_will_restart": "Proces konzole se nyní restartuje…", + "restart_complete_msg": "Konzole se restartovala. Klikněte na tlačítko pro načtení nové verze. Stránka se automaticky obnoví za 8 sekund.", + "refresh_recommended": "Statické soubory byly změněny – pro zobrazení nového rozhraní obnovte stránku.", + "confirm_title": "Použít aktualizaci", + "confirm_with_backup": "Před aktualizací bude automaticky vytvořena záloha.", + "confirm_no_backup": "Záloha nebude vytvořena (pokračujete na vlastní riziko)." + }, + "permissions": { + "title": "Oprávnění", + "subtitle": "Správa oprávnění na základě rolí a uživatelská přepsání", + "info_title": "Jak fungují oprávnění", + "info_desc": "Každá role má výchozí oprávnění. Jednotlivá oprávnění můžete přidávat nebo odebírat přepnutím níže. Vlastní úpravy jsou zvýrazněny a lze je kdykoli vrátit do výchozího stavu.", + "select_role": "Vybrat roli", + "select_role_placeholder": "Zvolte roli...", + "reset_overrides": "Resetovat všechna přepsání", + "granted": "Uděleno", + "overrides": "Přepsání", + "level": "Úroveň", + "super_admin_tag": "Plný přístup", + "server_level_tag": "Úroveň serveru", + "custom": "Vlastní", + "default": "Výchozí", + "revert": "Vrátit na výchozí", + "saved": "Oprávnění aktualizováno", + "reverted": "Vráceno na výchozí", + "all_reverted": "Všechna přepsání byla vrácena", + "confirm_reset": "Resetovat všechna vlastní přepsání této role na výchozí hodnoty?", + "empty_title": "Vyberte roli", + "empty_desc": "Zvolte roli z rozbalovací nabídky výše pro zobrazení a správu jejích oprávnění.", + "locked_title": "Super Admin", + "locked_desc": "Super Admin má ve výchozím nastavení všechna oprávnění a nelze jej upravovat.", + "cat_device": "Zařízení", + "cat_user": "Uživatelé", + "cat_server": "Serverová oprávnění", + "cat_org": "Organizace", + "cat_audit": "Audit a monitorování", + "cat_cdap": "CDAP", + "cat_enrollment": "Registrace", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Zobrazit zařízení", + "perm_device_connect": "Připojit k zařízením", + "perm_device_edit": "Upravit zařízení", + "perm_device_delete": "Smazat zařízení", + "perm_device_ban": "Zakázat / povolit zařízení", + "perm_device_change_id": "Změnit ID zařízení", + "perm_user_view": "Zobrazit uživatele", + "perm_user_create": "Vytvořit uživatele", + "perm_user_edit": "Upravit uživatele", + "perm_user_delete": "Smazat uživatele", + "perm_server_config": "Konfigurace serveru", + "perm_server_keys": "Správa API klíčů", + "perm_org_create": "Vytvořit organizace", + "perm_org_edit": "Upravit organizace", + "perm_org_delete": "Smazat organizace", + "perm_org_manage_users": "Správa uživatelů organizace", + "perm_org_manage_devices": "Správa zařízení organizace", + "perm_audit_view": "Zobrazit auditní logy", + "perm_metrics_view": "Zobrazit metriky", + "perm_blocklist_edit": "Upravit seznam blokovaných", + "perm_cdap_view": "Zobrazit CDAP zařízení", + "perm_cdap_command": "Odesílat CDAP příkazy", + "perm_cdap_terminal": "Přístup k CDAP terminálu", + "perm_cdap_files": "Přístup k CDAP souborům", + "perm_enrollment_manage": "Správa registrací", + "perm_enrollment_approve": "Schvalovat registrace", + "perm_chat_access": "Přístup k chatu", + "perm_branding_edit": "Upravit branding", + "perm_server_attestation": "Atest wydajnosci servera" + }, + "notifications": { + "title": "Oznámení", + "empty": "Žádná nová oznámení", + "mark_all_read": "Označit vše jako přečtené", + "see_all": "Zobrazit všechny žádosti o pomoc", + "help_request": "Žádost o pomoc", + "just_now": "právě teď" + }, + "accessibility": { + "title": "Usnadnění", + "subtitle": "Přizpůsobte konzoli svému zraku, pohybu a potřebám při čtení.", + "close": "Zavřít menu usnadnění", + "profiles": "Rychlé profily", + "profile_low_vision": "Slabozrakost", + "profile_low_vision_hint": "Větší text, silný kontrast a zvýraznění prvků.", + "profile_dyslexia": "Pohodlné čtení", + "profile_dyslexia_hint": "Čitelné písmo a širší rozestupy.", + "profile_motion_safe": "Bezpečný pohyb", + "profile_motion_safe_hint": "Omezuje přechody a pozastavuje animace.", + "profile_color_assist": "Podpora barev", + "profile_color_assist_hint": "Barevný filtr, štítky a zvýrazněné odkazy.", + "reading": "Čtení", + "font_size": "Velikost písma", + "line_height": "Výška řádku", + "letter_spacing": "Prokládání znaků", + "word_spacing": "Mezery mezi slovy", + "readable_font": "Čitelné písmo", + "readable_font_hint": "Používá široké, známé tvary písmen.", + "dyslexia_spacing": "Dyslektické rozestupy", + "dyslexia_spacing_hint": "Přidává extra mezery pro dlouhé texty.", + "visual": "Vizuální", + "contrast": "Kontrast", + "contrast_normal": "Normální", + "contrast_high_dark": "Vysoký kontrast (tmavý)", + "contrast_high_light": "Vysoký kontrast (světlý)", + "contrast_yellow_black": "Žlutá na černé", + "color_filter": "Filtr barevného vidění", + "filter_none": "Žádný", + "filter_protanopia": "Protanopie", + "filter_deuteranopia": "Deuteranopie", + "filter_tritanopia": "Tritanopie", + "filter_achromatopsia": "Achromatopsie", + "saturation": "Sytost barev", + "underline_links": "Podtrhnout odkazy", + "underline_links_hint": "Zviditelní odkazy bez závislosti na barvě.", + "highlight_links": "Zvýraznit akce", + "highlight_links_hint": "Ohraničí odkazy a tlačítka.", + "highlight_headings": "Zvýraznit nadpisy", + "highlight_headings_hint": "Označí nadpisy sekcí barevným pruhem.", + "hide_media": "Ztlumit média", + "hide_media_hint": "Ztmaví obrázky, videa a plátna.", + "interaction": "Interakce", + "strong_focus": "Výrazné zaměření", + "strong_focus_hint": "Zobrazuje velký rámeček kolem aktivního prvku.", + "large_cursor": "Velký kurzor", + "large_cursor_hint": "Používá větší, vysoce kontrastní ukazatel.", + "reduce_motion": "Omezit pohyb", + "reduce_motion_hint": "Zkracuje přechody a plynulé posouvání.", + "pause_animations": "Pozastavit animace", + "pause_animations_hint": "Zastaví smyčkové vizuální pohyby.", + "reading_guide": "Vodítko pro čtení", + "reading_guide_hint": "Sleduje ukazatel jasnou linkou.", + "reading_mask": "Maska pro čtení", + "reading_mask_hint": "Ztmaví obsah nad a pod ukazatelem.", + "preview": "Náhled", + "preview_title": "Náhled pracovního prostoru", + "preview_text": "Zkontrolujte, zda jsou text, odkazy, ovládací prvky a štítky dobře čitelné, než toto menu zavřete.", + "preview_link": "Odkaz na detaily zařízení", + "preview_status": "Online", + "preview_button": "Primární akce", + "preview_secondary": "Sekundární", + "reset": "Obnovit", + "done": "Hotovo" + }, + "server_mgmt": { + "title": "Správa serveru", + "subtitle": "Ovládací rozhraní typu Cockpit pro hostitele konzole BetterDesk (BETA).", + "beta_tooltip": "Beta funkce — ve vývoji.", + "notice_title": "Beta funkce", + "notice_body": "Tyto nástroje běží přímo na hostiteli, kde se nachází proces konzole BetterDesk. Všechny operace jsou auditovány. Rozsah funkcí se v budoucích verzích rozšíří.", + "tab_overview": "Přehled", + "tab_terminal": "Terminál", + "tab_files": "Soubory", + "tab_services": "Služby", + "cpu": "CPU", + "memory": "Paměť", + "load": "Průměrné zatížení (Load)", + "disks": "Disky", + "history": "Historie (posledních 60 vzorků)", + "host_info": "Informace o hostiteli", + "cores": "jader", + "uptime": "Doba běhu", + "no_disks": "Data o discích nejsou k dispozici", + "info_hostname": "Název hostitele", + "info_platform": "Platforma", + "info_kernel": "Jádro (Kernel)", + "info_node": "Node.js", + "info_process_id": "ID procesu (PID)", + "info_pty_available": "PTY dostupné", + "term_connect": "Připojit", + "term_disconnect": "Odpojit", + "term_clear": "Vymazat", + "term_status": "Stav", + "term_connecting": "Připojování…", + "term_connected": "Připojeno", + "term_disconnected": "Odpojeno", + "term_error": "Chyba připojení", + "term_warning": "Příkazy běží pod uživatelem, který vlastní proces konzole. Pro povolení zvýšení oprávnění přidejte pravidlo do sudoers.", + "term_hint": "Tip: zadejte `sudo -i` pro zvýšení oprávnění (vyžaduje konfiguraci sudoers).", + "term_lib_failed": "Nepodařilo se načíst knihovnu terminálu", + "files_up": "O úroveň výš", + "files_go": "Přejít", + "files_mkdir": "Nová složka", + "files_name": "Název", + "files_size": "Velikost", + "files_perms": "Oprávnění", + "files_mtime": "Změněno", + "files_rename": "Přejmenovat", + "files_rename_prompt": "Nový název:", + "files_empty": "Prázdný adresář", + "files_error": "Nepodařilo se načíst seznam adresářů", + "read_failed": "Nepodařilo se přečíst soubor", + "save_failed": "Nepodařilo se uložit soubor", + "rename_failed": "Přejmenování selhalo", + "delete_failed": "Smazání selhalo", + "delete_confirm": "Smazat tuto položku?", + "mkdir_prompt": "Název nové složky:", + "mkdir_failed": "Nepodařilo se vytvořit složku", + "file_saved": "Soubor uložen", + "binary_warn": "Binární soubor — pouze náhled", + "encoding_utf8": "Text UTF-8", + "truncated": "zkráceno", + "full": "celý", + "svc_search_placeholder": "Hledat služby…", + "svc_name": "Služba", + "svc_state": "Stav", + "svc_description": "Popis", + "svc_empty": "Nebyly nalezeny žádné služby", + "svc_load_failed": "Nepodařilo se načíst služby", + "svc_action_failed": "Akce selhala", + "svc_confirm": "Spustit", + "svc_start": "Spustit", + "svc_stop": "Zastavit", + "svc_restart": "Restartovat", + "svc_reload": "Znovu načíst (Reload)", + "svc_enable": "Povolit", + "svc_disable": "Zakázat", + "svc_status": "Stav" + }, + "download": { + "title": "Stáhnout agenta BetterDesk", + "choose_platform": "Vyberte platformu", + "choose_platform_hint": "Vyberte instalátor odpovídající vašemu operačnímu systému.", + "download": "Stáhnout", + "building": "Sestavování…", + "failed": "Sestavení se nezdařilo", + "need_help": "Potřebujete pomoc?", + "powered_by": "Vytvořeno s" + }, + "server_attestation": { + "title": "Atestace serveru", + "subtitle": "Benchmark výkonu, který určuje kapacitu souběžných vzdálených připojení při 80% prahu CPU, RAM a disku.", + "warning_title": "Zátěžový test", + "warning_body": "Benchmark simuluje paralelní připojení WebSocket k signálním serverům a relay. Spouštějte mimo špičku — tento test zatěžuje produkci.", + "run_benchmark": "Spustit benchmark", + "abort": "Přerušit", + "download_report": "Stáhnout JSON report", + "last_test": "Poslední test", + "no_test_yet": "Dosud nebyl spuštěn žádný benchmark", + "max_connections": "Maximální počet připojení", + "threshold_80": "80% práh — závěrečné metriky", + "disk": "Disk", + "ramp_chart": "Graf nárůstu zátěže", + "connections": "Připojení", + "connections_short": "při.", + "tier_guide_title": "Co znamená každá úroveň?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "BEZ HODNOCENÍ", + "tier_bronze_desc": "1–25 souběžných připojení — malý VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 připojení — server střední třídy (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 připojení — výkonný server (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 připojení — enterprise infrastruktura (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ připojení — turbo třída: dedikovaný hardware, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Poznámka: v Dockeru mohou metriky CPU/RAM odrážet limity kontejneru spíše než fyzický hostitel.", + "badge_tooltip": "Atestace serveru BetterDesk — certifikace výkonu serveru", + "confirm_run": "Tento benchmark provede zátěžový test serveru se simulovanými připojeními. Pokračovat?", + "starting": "Spouštění...", + "complete": "Benchmark dokončen", + "signal_peers": "Signální peers", + "relay_sessions": "Relay relace", + "page_error": "Ne udalo sie zaladowac strony atestu servera", + "mode_estimated": "Szacunek (WebSocket niedostepny)", + "incomplete": "Benchmark zakonczony bez przypisanego tieru" + }, + "commercialization": { + "title": "Komerce", + "subtitle": "Balíčky podpory, fakturovatelné relace a reporty", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Raná funkce — fakturace a balíčky jsou v aktivním vývoji.", + "tabs": { + "overview": "Přehled", + "packages": "Balíčky a smlouvy", + "sessions": "Relace", + "reports": "Reporty", + "settings": "Pokročilá nastavení" }, - "branding": { - "identity_title": "Identita značky", - "identity_desc": "Přizpůsobte název a popis aplikace zobrazovaný v celé konzoli", - "app_name": "Název aplikace", - "app_description": "Popis aplikace", - "logo_title": "Logo", - "logo_desc": "Zvolte, jak se bude vaše logo zobrazovat v postranním panelu a na přihlašovací stránce", - "logo_type_icon": "Ikona Material", - "logo_type_svg": "SVG kód", - "logo_type_image": "URL obrázku", - "logo_icon_name": "Název ikony", - "logo_icon_hint": "Zadejte název ikony Material Icons (např. dns, cloud, security). Viz fonts.google.com/icons", - "logo_svg_code": "SVG kód", - "logo_svg_hint": "Sem vložte SVG značky. Podporuje celé prvky včetně cest a stylů.", - "logo_image_upload": "Nahrát obrázek", - "logo_image_choose": "Vybrat soubor obrázku", - "logo_image_hint": "PNG, JPG, GIF, WebP nebo SVG. Max. 1,5 MB. Obrázek je uložen jako data base64.", - "logo_image_url": "Data / URL obrázku", - "logo_image_url_hint": "Automaticky se vyplní po nahrání souboru, nebo vložte URL ručně.", - "logo_image_too_large": "Obrázek je příliš velký. Maximální velikost je 1,5 MB.", - "logo_image_invalid_type": "Neplatný typ souboru. Použijte PNG, JPG, GIF, WebP nebo SVG.", - "preview": "Náhled", - "colors_title": "Barevné schéma", - "colors_desc": "Přizpůsobte barevnou paletu. Nechte prázdné pro použití výchozích hodnot.", - "colors_backgrounds": "Pozadí", - "colors_text": "Text", - "colors_accents": "Akcentové barvy", - "colors_borders": "Ohraničení", - "import_export_title": "Import a export", - "import_export_desc": "Uložte motiv jako soubor JSON nebo jej importujte z jiné instance", - "export_theme": "Exportovat motiv", - "import_theme": "Importovat motiv", - "reset_defaults": "Obnovit výchozí hodnoty", - "save_branding": "Uložit branding", - "saved": "Branding byl úspěšně uložen. Načítám znovu...", - "exported": "Motiv exportován", - "imported": "Motiv byl úspěšně importován. Načítám znovu...", - "import_error": "Import motivu selhal. Neplatný formát souboru.", - "reset_confirm": "Opravdu chcete obnovit výchozí branding? Tuto akci nelze vrátit zpět.", - "reset_success": "Branding byl obnoven na výchozí hodnoty. Načítám znovu...", - "logo_type_text": "Textové logo", - "logo_text": "Text loga", - "logo_text_hint": "Hlavní text zobrazený jako logo vaší značky", - "logo_text_accent": "Doplňkový text", - "logo_text_accent_hint": "Vedlejší text pod logem (např. název produktu nebo slogan)", - "logo_upload_success": "Logo bylo úspěšně nahráno.", - "typography_title": "Typografie", - "typography_desc": "Vyberte písma pro nadpisy a běžný text. Písma budou stažena na server pro vlastní hostování.", - "font_heading": "Písmo nadpisů", - "font_heading_hint": "Používá se pro nadpisy (H1–H6) a textové logo", - "font_body": "Písmo textu", - "font_body_hint": "Používá se pro běžný text a prvky uživatelského rozhraní", - "font_search_placeholder": "Hledat písma...", - "font_system_default": "Výchozí systémové", - "font_clear": "Vyčistit", - "font_cat_all": "Vše", - "font_downloaded_count": "písma stažena na server", - "powered_by": "Napedzane przez", - "background_title": "Tlo i wyglad", - "background_desc": "Ustaw tapete konsoli, gradient lub jednolite tlo. Karty unosza sie nad nim.", - "bg_type_none": "Žádný", - "bg_type_color": "Jednolity barva", - "bg_type_gradient": "Gradient", - "bg_type_image": "Obrázek", - "bg_color": "Barva tla", - "bg_gradient": "Gradient CSS", - "bg_gradient_hint": "Dowolny prawidlowy gradient CSS, np. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Przeslij obrázek tla", - "bg_image_choose": "Wybierz soubor obrázeku", - "bg_image_hint": "PNG, JPG, WebP lub GIF. Maks. 8 MB. Zapisywane na serverze.", - "bg_image_url": "Sciezka / URL obrázeku", - "bg_size": "Skalowanie obrázeku", - "bg_size_cover": "Wypelnij (caly ekran)", - "bg_size_contain": "Dopasuj (zmiesc)", - "bg_size_auto": "Auto (oryginal)", - "bg_blur": "Rozmycie tla", - "bg_overlay": "Ciemna nakladka", - "bg_overlay_hint": "Przyciemnia tlo dla lepszej czytelnosci textu.", - "bg_image_too_large": "Obrázek jest za duzy. Maksymalny rozmiar to 8 MB.", - "bg_image_invalid_type": "Neprawidlowy typ souboru. Uzyj PNG, JPG, WebP lub GIF.", - "bg_upload_success": "Obrázek tla przeslany pomyslnie.", - "login_title": "Strona logowania", - "login_desc": "Dostosuj naglowek, podtytul i tlo ekranu logowania.", - "login_heading": "Naglowek logowania", - "login_heading_placeholder": "Witaj ponownie", - "login_subheading": "Podtytul logowania", - "login_subheading_placeholder": "Zaloguj sie do swojego konta", - "login_bg_inherit": "Ano jak konzole", - "agent_title": "Strona pobierania agenta", - "agent_desc": "Dostosuj publiczny portal pobierania agenta widoczny dla uzytkownikow.", - "agent_show_powered": "Pokaz \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Wyswietla informacje o BetterDesk w stopce portalu pobierania.", - "footer_title": "Stopka i prawa autorskie", - "footer_desc": "Přidat wlasny wiersz stopki widoczny na ekranie logowania i w panelu bocznym.", - "footer_text": "Text stopki", - "footer_text_hint": "np. informacja o prawach autorskich lub nazwa firmy.", - "show_powered": "Pokaz informacje \"BetterDesk\"", - "show_powered_hint": "Wyswietla nazwe i wersje BetterDesk w stopce logowania i panelu bocznym.", - "custom_css_title": "Wlasny CSS", - "custom_css_desc": "Pokročilé: wstrzyknij wlasny CSS stosowany w calej konsoli i na stronie logowania.", - "custom_css_hint": "Uzywaj ostroznie. Neprawidlowe lub niebezpieczne reguly sa filtrowane. Maks. 20 000 znakow." + "clock": { + "title": "Čas serveru (NTP)", + "check_now": "Zkontrolovat", + "unsynced": "Hodiny serveru nejsou synchronizovány — fakturovatelné relace mohou být blokovány" }, - "device_detail": { - "tab_overview": "Přehled", - "tab_tags": "Tagy a poznámky", - "tab_actions": "Akce", - "section_identity": "Identita", - "section_network": "Síť", - "section_timestamps": "Časové údaje", - "section_connect": "Připojení", - "section_manage": "Správa", - "folder": "Složka", - "status_tier": "Úroveň stavu", - "device_banned": "Toto zařízení je zablokováno", - "no_reason": "Nebyl uveden žádný důvod", - "tags": "Tagy", - "no_tags": "Tomuto zařízení nejsou přiřazeny žádné tagy", - "tag_placeholder": "Zadejte název tagu...", - "add_tag": "Přidat", - "tag_exists": "Tento tag již existuje", - "notes": "Poznámky", - "notes_placeholder": "Přidejte poznámky k tomuto zařízení...", - "danger_zone": "Nebezpečná zóna", - "action_connect_web": "Webový vzdálený přístup", - "action_connect_web_desc": "Připojit přes vzdálenou plochu v prohlížeči", - "action_native_remote": "Vzdálený BetterDesk", - "action_native_remote_desc": "Nativní JPEG stream — nejsou vyžadovány žádné pluginy", - "action_connect_desktop": "Desktopový klient", - "action_connect_desktop_desc": "Otevřít v desktopové klientské aplikaci", - "action_change_id_desc": "Změnit registrační ID zařízení", - "action_ban_desc": "Zablokovat tomuto zařízení připojení", - "action_unban_desc": "Znovu povolit tomuto zařízení připojení", - "action_delete_desc": "Trvale odstranit toto zařízení", - "tab_hardware": "Hardware", - "tab_metrics": "Metriky", - "section_system": "Systém", - "section_cpu": "Procesor", - "section_memory": "Paměť", - "section_displays": "Displeje", - "section_encoding": "Možnosti kódování", - "section_live_metrics": "Živé metriky", - "section_current_usage": "Aktuální využití", - "section_usage_history": "Historie využití", - "os": "Operační systém", - "version": "Verze klienta", - "cpu_model": "Model CPU", - "cpu_cores": "Jádra CPU", - "cpu_freq": "Frekvence CPU", - "total_memory": "Celková paměť", - "metric_memory": "Paměť", - "metric_disk": "Disk", - "metrics_updated": "Aktualizováno", - "device_groups": "Skupiny", - "no_sysinfo": "Nejsou k dispozici žádné informace o hardwaru", - "no_sysinfo_hint": "Systémové informace se zobrazí po odeslání sysinfo reportu zařízením", - "no_metrics": "Nejsou k dispozici žádná data metrik", - "no_metrics_hint": "Metriky se zobrazí po odeslání heartbeat reportů zařízením", - "chart_oldest": "← Nejstarší", - "chart_newest": "Nejnovější →", - "tab_services": "Služby", - "tab_processes": "Procesy", - "tab_events": "Události", - "tab_activity": "Aktivita", - "tab_files": "Soubory", - "agent_lazy_hint": "Kliknutím na tuto kartu načtete živá data od agenta", - "agent_offline": "Agent je offline", - "agent_timeout": "Agent neodpověděl včas", - "agent_error": "Nepodařilo se načíst data od agenta", - "service_name": "Název", - "service_display": "Zobrazovaný název", - "service_status": "Stav", - "service_start": "Režim spuštění", - "process_name": "Název", - "process_user": "Uživatel", - "process_memory": "Paměť" + "stats": { + "active_sessions": "Aktivní fakturovatelné relace" }, - "inventory": { - "title": "Inventář", - "subtitle": "Hardwarový a softwarový inventář spravovaných zařízení", - "device_id": "ID zařízení", - "hostname": "Název hostitele", - "os": "Operační systém", - "cpu": "CPU", - "cpu_cores": "Jádra CPU", - "cpu_usage": "Využití CPU", - "memory": "Paměť", - "memory_total": "Celková paměť", - "memory_used": "Použitá paměť", - "memory_available": "Dostupná paměť", - "memory_usage": "Využití paměti", - "swap": "Swap", - "disks": "Disky", - "disk_count": "Počet disků", - "network": "Síť", - "network_interfaces": "Síťová rozhraní", - "software": "Software", - "software_count": "Nainstalovaný software", - "system": "Systém", - "kernel": "Jádro", - "architecture": "Architektura", - "uptime": "Doba běhu", - "frequency": "Frekvence", - "physical_cores": "Fyzická jádra", - "logical_cores": "Logická jádra", - "model": "Model", - "usage": "Využití", - "total": "Celkem", - "used": "Použito", - "available": "Dostupné", - "mount_point": "Přípojný bod", - "removable": "vyměnitelné", - "mac_address": "MAC adresa", - "ip_addresses": "IP adresy", - "traffic": "Provoz", - "collect_now": "Shromáždit nyní", - "collector_running": "Sběr běží", - "collector_stopped": "Sběr zastaven", - "last_upload": "Poslední nahrání", - "total_uploads": "celkem", - "last_seen": "Naposledy viděno", - "collected_at": "Shromážděno", - "no_data": "Zatím nejsou k dispozici žádná data inventáře. Kliknutím na \"Shromáždit nyní\" získáte systémové informace.", - "no_devices": "Nebyla nalezena žádná zařízení s inventárními daty", - "detail_title": "Detail inventáře zařízení", - "telemetry": "Telemetrie", - "view_detail": "Zobrazit detail", - "export": "Exportovat", - "refresh": "Obnovit" + "packages": { + "new": "Nový balíček", + "name": "Název", + "included_minutes": "Zahrnuté minuty", + "overage_rate": "Sazba překročení / h", + "currency": "Měna", + "heading": "Balíčky podpory", + "prompt_name": "Název balíčku", + "create_title": "Nový balíček pro organizaci", + "create_submit": "Vytvořit balíček", + "select_org": "Organizace", + "select_org_placeholder": "Vyberte organizaci…" }, - "tickets": { - "title": "Tickety", - "subtitle": "Podpůrné tickety a sledování problémů", - "create": "Nový ticket", - "edit": "Upravit ticket", - "delete": "Smazat ticket", - "detail": "Detail ticketu", - "ticket_id": "ID ticketu", - "ticket_title": "Název", - "description": "Popis", - "status": "Stav", - "priority": "Priorita", - "category": "Kategorie", - "assigned_to": "Přiřazeno komu", - "created_by": "Vytvořil", - "device": "Zařízení", - "sla_due": "Termín SLA", - "created_at": "Vytvořeno", - "updated_at": "Aktualizováno", - "resolved_at": "Vyřešeno", - "closed_at": "Uzavřeno", - "status_open": "Otevřený", - "status_in_progress": "Probíhá", - "status_resolved": "Vyřešený", - "status_closed": "Uzavřený", - "priority_low": "Nízká", - "priority_medium": "Střední", - "priority_high": "Vysoká", - "priority_critical": "Kritická", - "category_general": "Obecné", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Síť", - "category_access": "Přístup", - "category_other": "Jiné", - "comments": "Komentáře", - "add_comment": "Přidat komentář", - "comment_placeholder": "Napište komentář...", - "internal_note": "Interní poznámka (není viditelná koncovým uživatelům)", - "attachments": "Přílohy", - "upload_attachment": "Nahrát přílohu", - "download": "Stáhnout", - "connect_device": "Připojit k zařízení", - "no_tickets": "Nebyly nalezeny žádné tickety", - "no_comments": "Zatím žádné komentáře", - "no_attachments": "Žádné přílohy", - "title_required": "Název je povinný", - "delete_confirm": "Opravdu chcete smazat ticket č. {id}?", - "delete_success": "Ticket byl úspěšně smazán", - "created_success": "Ticket byl úspěšně vytvořen", - "updated_success": "Ticket byl úspěšně aktualizován", - "sla_overdue": "SLA po termínu", - "filter_all": "Vše", - "search_placeholder": "Hledat tickety...", - "assign_to_me": "Přiřadit mně", - "unassign": "Zrušit přiřazení", - "stats_total": "Celkem", - "stats_open": "Otevřené", - "stats_in_progress": "Probíhající", - "stats_resolved": "Vyřešené", - "stats_closed": "Uzavřené" - }, - "activity": { - "title": "Monitoring aktivity", - "subtitle": "Sledování používání aplikací a nečinnosti", - "device": "Zařízení", - "hostname": "Název hostitele", - "sessions": "Relace", - "idle_time": "Doba nečinnosti", - "active_time": "Aktivní čas", - "last_report": "Poslední report", - "top_apps": "Nejčastější aplikace", - "app_name": "Aplikace", - "window_title": "Název okna", - "category": "Kategorie", - "duration": "Doba trvání", - "started_at": "Začalo", - "ended_at": "Skončilo", - "session_count": "Počet relací", - "total_active": "Celkem aktivní", - "total_idle": "Celkem nečinné", - "detail_count": "Počet detailních záznamů", - "no_data": "Nejsou k dispozici žádná data aktivity", - "no_sessions": "Žádné relace", - "filter_from": "Od", - "filter_to": "Do", - "filter_apply": "Použít filtr", - "hours": "hodiny", - "minutes": "minuty", - "seconds": "sekundy", - "category_browser": "Prohlížeč", - "category_productivity": "Produktivita", - "category_communication": "Komunikace", - "category_development": "Vývoj", - "category_media": "Média", - "category_gaming": "Hraní", - "category_system": "Systém", - "category_other": "Ostatní", - "summary": "Souhrn", - "details": "Podrobnosti", - "refresh": "Obnovit", - "search": "Hledat zařízení...", - "date_range": "Rozsah dat", - "device_id": "ID zařízení", - "session_start": "Začátek relace", - "session_end": "Konec relace", - "user": "Uživatel", - "no_activity": "Nebyla zaznamenána žádná aktivita", - "reported_at": "Nahlášeno", - "detail": "Detail", - "no_apps": "Žádné aplikace" - }, - "automation": { - "title": "Automatizace a upozornění", - "subtitle": "Pravidla upozornění, vzdálené příkazy a konfigurace SMTP", - "rules": "Pravidla upozornění", - "rules_subtitle": "Definujte podmínky, které spouštějí oznámení", - "alerts": "Historie upozornění", - "alerts_subtitle": "Zobrazit a potvrdit spuštěná upozornění", - "commands": "Vzdálené příkazy", - "commands_subtitle": "Odesílat příkazy na vzdálená zařízení", - "smtp": "Konfigurace SMTP", - "smtp_subtitle": "Nastavení e-mailových oznámení", - "rule_name": "Název pravidla", - "description": "Popis", - "condition_type": "Typ podmínky", - "condition_op": "Operátor", - "condition_value": "Prahová hodnota", - "severity": "Závažnost", - "scope_device": "Cílové zařízení", - "scope_all": "Všechna zařízení", - "cooldown": "Cooldown (sekundy)", - "notify_emails": "E-mailové adresy pro oznámení", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "create_rule": "Vytvořit pravidlo", - "edit_rule": "Upravit pravidlo", - "delete_rule": "Smazat pravidlo", - "acknowledge": "Potvrdit", - "acknowledged": "Potvrzeno", - "unacknowledged": "Nepotvrzeno", - "triggered_at": "Spuštěno", - "severity_info": "Informace", - "severity_warning": "Varování", - "severity_critical": "Kritické", - "op_gt": "Větší než", - "op_gte": "Větší nebo rovno", - "op_lt": "Menší než", - "op_lte": "Menší nebo rovno", - "op_eq": "Rovno", - "op_neq": "Nerovno", - "type_cpu_usage": "Využití CPU (%)", - "type_memory_usage": "Využití paměti (%)", - "type_disk_usage": "Využití disku (%)", - "type_offline_duration": "Doba offline (s)", - "type_idle_duration": "Doba nečinnosti (s)", - "type_custom": "Vlastní", - "command_type": "Typ příkazu", - "command_payload": "Příkaz / skript", - "command_result": "Výsledek", - "command_status": "Stav", - "send_command": "Odeslat příkaz", - "status_pending": "Čeká", - "status_running": "Běží", - "status_completed": "Dokončeno", - "status_failed": "Selhalo", - "smtp_host": "SMTP hostitel", - "smtp_port": "Port", - "smtp_secure": "Použít TLS", - "smtp_user": "Uživatelské jméno", - "smtp_pass": "Heslo", - "smtp_from": "Adresa odesílatele", - "smtp_test": "Otestovat připojení", - "smtp_save": "Uložit konfiguraci", - "smtp_test_success": "Připojení úspěšné", - "smtp_test_failed": "Připojení selhalo", - "no_rules": "Nejsou nastavena žádná pravidla upozornění", - "no_alerts": "Nebyla spuštěna žádná upozornění", - "no_commands": "Nebyly odeslány žádné příkazy", - "id_payload_required": "ID zařízení a payload jsou povinné", - "no_commands_sent": "Zatím nebyly odeslány žádné příkazy" - }, - "file_transfer": { - "title": "Přenos souborů", - "transfers": "Přenosy", - "new_transfer": "Nový přenos", - "upload": "Nahrát", - "download": "Stáhnout", - "direction": "Směr", - "filename": "Název souboru", - "file_size": "Velikost souboru", - "mime_type": "Typ MIME", - "progress": "Průběh", - "status": "Stav", - "device": "Zařízení", - "initiated_by": "Spustil", - "created_at": "Vytvořeno", - "cancel": "Zrušit", - "cancel_confirm": "Opravdu chcete tento přenos zrušit?", - "download_file": "Stáhnout soubor", - "browse_files": "Procházet soubory", - "select_file": "Vybrat soubor", - "select_device": "Vybrat zařízení", - "no_transfers": "Žádné přenosy souborů", - "status_pending": "Čeká", - "status_active": "Aktivní", - "status_completed": "Dokončeno", - "status_failed": "Selhalo", - "status_cancelled": "Zrušeno", - "bytes_transferred": "Přenesené bajty", - "chunks": "Bloky", - "transfer_started": "Přenos spuštěn", - "transfer_completed": "Přenos dokončen", - "transfer_failed": "Přenos selhal", - "transfer_cancelled": "Přenos zrušen", - "max_file_size": "Maximální velikost souboru: 4 GB", - "error_too_large": "Soubor je příliš velký", - "error_no_device": "Není vybráno žádné zařízení", - "error_no_file": "Není vybrán žádný soubor" - }, - "network": { - "title": "Monitorování sítě", - "targets": "Cíle monitorování", - "add_target": "Přidat cíl", - "edit_target": "Upravit cíl", - "delete_target": "Smazat cíl", - "delete_confirm": "Opravdu chcete tento cíl smazat?", - "target_name": "Název", - "host": "Hostitel", - "port": "Port", - "url": "URL", - "check_type": "Typ kontroly", - "timeout": "Časový limit (ms)", - "interval": "Interval kontroly (ms)", - "enabled": "Povoleno", - "status": "Stav", - "last_check": "Poslední kontrola", - "last_rtt": "Poslední RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Dostupné", - "status_down": "Nedostupné", - "status_unknown": "Neznámý", - "check_now": "Zkontrolovat nyní", - "history": "Historie kontrol", - "stats": "Statistiky", - "total_targets": "Celkem cílů", - "targets_up": "Dostupné cíle", - "targets_down": "Nedostupné cíle", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Síťové nástroje", - "ping_tool": "Test ping", - "tcp_tool": "Kontrola TCP portu", - "http_tool": "HTTP kontrola", - "dns_tool": "Překlad DNS", - "monitor_start": "Spustit monitor", - "monitor_stop": "Zastavit monitor", - "monitor_running": "Monitor běží", - "monitor_stopped": "Monitor je zastaven", - "no_targets": "Nejsou nakonfigurovány žádné cíle monitorování", - "no_history": "Není k dispozici žádná historie kontrol", - "error_code": "Chyba", - "status_code": "Stavový kód HTTP", - "search_targets": "Hledat cíle...", - "name": "Název", - "tab_targets": "Cíle", - "tab_tools": "Nástroje", - "avg_latency": "Průměrná latence", - "type": "Typ", - "latency": "Latence", - "check_history": "Historie kontrol", - "name_host_required": "Název a hostitel jsou povinné", - "uptime": "Dostupnost", - "response_time": "Doba odezvy", - "avg_response": "Průměrná odezva", - "charts": "Grafy", - "realtime": "V reálném čase", - "response_time_ms": "Doba odezvy (ms)", - "uptime_percent": "Dostupnost %", - "last_24h": "Posledních 24 hodin", - "last_7d": "Posledních 7 dní", - "last_30d": "Posledních 30 dní" - }, - "dataguard": { - "title": "DataGuard — ochrana DLP", - "policies": "Zásady DLP", - "add_policy": "Přidat zásadu", - "edit_policy": "Upravit zásadu", - "delete_policy": "Smazat zásadu", - "delete_confirm": "Opravdu chcete tuto zásadu smazat?", - "policy_name": "Název", - "policy_description": "Popis", - "status": "Stav", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "rules": "Pravidla", - "add_rule": "Přidat pravidlo", - "rule_type": "Typ pravidla", - "rule_type_usb": "USB zařízení", - "rule_type_file": "Operace se souborem", - "action": "Akce", - "action_allow": "Povolit", - "action_block": "Blokovat", - "action_log": "Pouze zaznamenat", - "filter": "Filtr", - "vid": "ID výrobce (VID)", - "pid": "ID produktu (PID)", - "serial": "Sériové číslo", - "device_class": "Třída zařízení", - "drive_type": "Typ jednotky", - "file_extensions": "Přípony souborů", - "events": "Události DLP", - "event_source": "Zdroj", - "event_source_usb": "USB", - "event_source_file": "Soubor", - "event_type": "Typ události", - "event_details": "Podrobnosti", - "no_policies": "Nejsou nakonfigurovány žádné zásady DLP", - "no_events": "Nebyly zaznamenány žádné události DLP", - "stats": "Statistiky", - "total_events": "Celkem událostí", - "blocked_events": "Zablokováno", - "logged_events": "Zaznamenáno", - "usb_events": "Události USB", - "file_events": "Události souborů", - "device_id": "ID zařízení", - "policy_matched": "Odpovídající zásada", - "timestamp": "Časové razítko", - "drive_removable": "Vyměnitelná", - "drive_fixed": "Pevná", - "drive_network": "Síťová", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Neznámá", - "total_policies": "Celkem zásad", - "active_policies": "Aktivní zásady", - "violations": "Porušení", - "blocked": "Zablokováno", - "tab_policies": "Zásady", - "tab_events": "Události", - "search_policies": "Hledat zásady...", - "create_policy": "Vytvořit zásadu", - "policy_type": "Typ zásady", - "scope": "Rozsah", - "events_count": "Události", - "search_events": "Hledat události...", - "event_time": "Čas události", - "device": "Zařízení", - "policy": "Zásada", - "detail": "Detail", - "scope_help": "ID zařízení oddělená čárkami, nebo nechte prázdné pro všechna", - "scope_all": "Všechna zařízení", - "active": "Aktivní", - "type_file_type": "Typ souboru", - "type_clipboard": "Schránka", - "type_screen_share": "Sdílení obrazovky", - "type_file_transfer": "Přenos souborů", - "policy_desc": "Popis zásady", - "type_usb": "USB" + "sessions": { + "device": "Zařízení", + "operator": "Operátor", + "duration": "Trvání", + "phase": "Fáze", + "amount": "Částka" }, "reports": { - "title": "Reporty", - "generate": "Vygenerovat report", - "generate_csv": "Exportovat CSV", - "report_type": "Typ reportu", - "type_devices": "Souhrn zařízení", - "type_activity": "Souhrn aktivity", - "type_security": "Bezpečnostní report", - "type_tickets": "Report ticketů", - "type_network": "Síťový report", - "type_inventory": "Inventární report", - "type_alerts": "Report upozornění", - "saved": "Uložené reporty", - "save_report": "Uložit report", - "delete_report": "Smazat report", - "delete_confirm": "Opravdu chcete tento uložený report smazat?", - "no_saved": "Žádné uložené reporty", - "report_title": "Název", - "created_by": "Vytvořil", - "created_at": "Vytvořeno", - "filters": "Filtry", - "date_from": "Od", - "date_to": "Do", - "device_filter": "ID zařízení", - "generated_at": "Vygenerováno", - "section": "Datová sekce", - "total_devices": "Celkem zařízení", - "online": "Online", - "offline": "Offline", - "banned": "Zablokováno", - "platform_distribution": "Rozdělení platforem", - "top_applications": "Nejpoužívanější aplikace", - "total_active": "Celkový aktivní čas", - "total_idle": "Celková doba nečinnosti", - "dlp_stats": "Statistiky DLP", - "banned_devices": "Zablokovaná zařízení", - "audit_logs": "Auditní záznamy", - "ticket_stats": "Statistiky ticketů", - "category_distribution": "Rozdělení kategorií", - "priority_distribution": "Rozdělení priorit", - "targets_status": "Stav cílů", - "os_distribution": "Rozdělení operačních systémů", - "avg_ram": "Průměrná RAM", - "alert_rules": "Pravidla upozornění", - "recent_alerts": "Nedávná upozornění", - "tab_generate": "Vygenerovat report", - "tab_saved": "Uložené reporty", - "type_devices_desc": "Přehled všech zařízení, platforem a stavů", - "type_activity_desc": "Souhrn využití aplikací a doby nečinnosti", - "type_security_desc": "Akce blokování, události DLP a auditní záznamy", - "type_tickets_desc": "Statistiky ticketů a plnění SLA", - "type_network_desc": "Cíle monitorování sítě a data o dostupnosti", - "type_inventory_desc": "Souhrn hardwarového a softwarového inventáře", - "type_alerts_desc": "Pravidla upozornění a historie spuštěných upozornění", - "report_name": "Název reportu", - "format": "Formát", - "save": "Uložit report", - "preview": "Náhled", - "download": "Stáhnout", - "delete_saved": "Smazat report", - "raw_json": "Raw JSON" + "session": "Relace", + "summary": "Shrnutí", + "date": "Datum" }, - "tenants": { - "title": "Tenanti", - "list": "Tenanti", - "add_tenant": "Přidat tenanta", - "edit_tenant": "Upravit tenanta", - "delete_tenant": "Smazat tenanta", - "delete_confirm": "Opravdu chcete tohoto tenanta smazat? Všechna přiřazení zařízení a uživatelů budou odstraněna.", - "name": "Název", - "slug": "Slug", - "contact_name": "Kontaktní jméno", - "contact_email": "Kontaktní e-mail", - "max_devices": "Max. zařízení", - "max_devices_hint": "0 = neomezeně", - "notes": "Poznámky", - "active": "Aktivní", - "inactive": "Neaktivní", - "devices": "Zařízení", - "users": "Uživatelé", - "assign_device": "Přiřadit zařízení", - "assign_devices": "Přiřadit zařízení", - "remove_device": "Odebrat zařízení", - "assign_user": "Přiřadit uživatele", - "remove_user": "Odebrat uživatele", - "no_tenants": "Nejsou nakonfigurováni žádní tenanti", - "no_devices": "Tomuto tenantovi nejsou přiřazena žádná zařízení", - "no_users": "Tomuto tenantovi nejsou přiřazeni žádní uživatelé", - "stats": "Statistiky tenanta", - "total_devices": "Celkem zařízení", - "online_devices": "Zařízení online", - "total_users": "Celkem uživatelů", - "created_at": "Vytvořeno", - "updated_at": "Aktualizováno", - "slug_exists": "Slug tenanta již existuje", - "total_tenants": "Celkem tenantů", - "active_tenants": "Aktivní tenanti", - "search": "Hledat tenanty...", - "create_tenant": "Vytvořit tenanta", - "detail": "Detail tenanta", - "contact": "Kontakt", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "max": "max", - "info": "Informace o tenantovi", - "status": "Stav" + "contracts": { + "title": "Smlouvy organizací", + "new": "Přiřadit balíček", + "org": "Organizace", + "package": "Balíček", + "remaining": "Zbývající minuty", + "status": "Stav", + "actions": "Akce", + "suspend": "Pozastavit", + "activate": "Aktivovat", + "select_org": "Vyberte organizaci", + "select_package": "Vyberte balíček", + "no_orgs": "Nebyly nalezeny žádné organizace", + "no_packages": "Nejprve vytvořte balíček" }, - "registrations": { - "title": "Registrace zařízení", - "subtitle": "Spravujte žádosti o registraci ze zařízení objevených přes LAN", - "search_placeholder": "Hledat podle ID zařízení, hostname nebo IP...", - "no_registrations": "Žádné žádosti o registraci", - "col_device_id": "ID zařízení", - "col_hostname": "Hostname", - "col_platform": "Platforma", - "col_ip": "IP adresa", - "col_version": "Verze", - "col_status": "Stav", - "col_requested": "Požádáno", - "col_actions": "Akce", - "status_pending": "Čeká", - "status_approved": "Schváleno", - "status_rejected": "Zamítnuto", - "approve_btn": "Schválit", - "approve_confirm": "Opravdu chcete toto zařízení schválit? Obdrží přihlašovací údaje serveru a bude se moci připojit automaticky.", - "approved_success": "Registrace zařízení byla úspěšně schválena", - "reject_btn": "Zamítnout", - "reject_title": "Zamítnout registraci", - "reject_confirm": "Opravdu chcete tuto žádost o registraci zamítnout?", - "reject_reason": "Důvod (volitelné)", - "reject_reason_placeholder": "Zadejte důvod zamítnutí...", - "rejected_success": "Registrace zařízení zamítnuta", - "delete_confirm": "Opravdu chcete tento záznam registrace smazat?", - "deleted_success": "Záznam registrace byl smazán", - "enrollment_title": "Zařazení zařízení", - "enrollment_subtitle": "Čekající žádosti o zařazení z desktopových klientů BetterDesk", - "enrollment_empty": "Žádné čekající žádosti o zařazení", - "enrollment_approve": "Schválit", - "enrollment_reject": "Zamítnout", - "enrollment_display_name": "Zobrazovaný název", - "enrollment_display_name_placeholder": "Zadejte název pro toto zařízení...", - "enrollment_sync_mode": "Režim synchronizace", - "enrollment_sync_silent": "Tichý — minimální telemetrie", - "enrollment_sync_standard": "Standardní — vyvážená synchronizace", - "enrollment_sync_turbo": "Turbo — agresivní synchronizace", - "enrollment_approved_success": "Zařazení zařízení schváleno", - "enrollment_rejected_success": "Zařazení zařízení zamítnuto", - "approve_title": "Zatwierdz urzadzenie", - "field_name": "Nazwa urzadzenia", - "field_name_placeholder": "Wpisz nazwe dla tego urzadzenia...", - "field_sync_mode": "Tryb synchronizacji", - "sync_standard": "Standardowy — zbalansowana synchronizacja", - "sync_silent": "Cichy — minimalna telemetria", - "sync_turbo": "Turbo — agresywna synchronizacja", - "field_tags": "Štítky", - "field_tags_placeholder": "Štítky oddzielone przecinkami (np. biuro, laptop)...", - "field_tags_existing": "Istniejace štítky", - "field_tag_add_placeholder": "Přidat nowy tag...", - "field_tag_add_btn": "Přidat", - "field_groups": "Skupiny urzadzen", - "field_folder": "Složka", - "field_folder_none": "Bez složkau", - "reject_ban_option": "Zablokuj to urzadzenie", - "reject_ban_hint": "Urzadzenie zostanie zablokowane i nie bedzie moglo ponownie wysylac zadan rejestracji.", - "banner_open_mode": "Rejestracja jest otwarta — nowi klienci RustDesk rejestruja sie bez akceptacji operátora. Ustaw tryb Zarzadzany w Nastaveních, aby korzystac z tej kolejki.", - "banner_locked_mode": "Rejestracja jest zablokowana — pouze urzadzenia z tokenem moga sie zarejestrowac. Do akceptacji nieznanych klientow vyžadujeny jest tryb Zarzadzany.", - "enrollment_settings_link": "Nastavení rejestracji" + "export": { + "csv": "Exportovat CSV", + "pdf": "Exportovat PDF", + "sessions_csv": "Exportovat relace CSV" }, - "backup": { - "title": "Záloha", - "desc": "Stáhněte si plnou zálohu konfigurace konzole, uživatelů, skupin a nastavení. Data peer serveru Go jsou zahrnuta, pokud je aktivní backend BetterDesk.", - "restore_title": "Obnovení", - "restore_desc": "Nahrajte dříve stažený záložní soubor pro obnovení konfigurace konzole. Níže vyberte, které sekce chcete obnovit.", - "stat_users": "Uživatelé", - "stat_settings": "Nastavení", - "stat_folders": "Složky", - "stat_groups": "Skupiny", - "stat_strategies": "Strategie", - "stat_backend": "Backend", - "download": "Stáhnout zálohu", - "creating": "Vytváření zálohy...", - "download_success": "Záloha byla úspěšně stažena", - "upload": "Nahrát zálohu", - "restore_confirm": "Opravdu chcete obnovit data z této zálohy? Vybrané sekce budou přepsány.", - "restore_success": "Záloha byla úspěšně obnovena. Některé změny mohou vyžadovat znovunačtení stránky.", - "restored": "Obnoveno", - "skipped": "Přeskočeno", - "backup_date": "Datum zálohy", - "opt_settings": "Nastavení konzole", - "opt_branding": "Branding / motiv", - "opt_folders": "Složky zařízení", - "opt_groups": "Skupiny uživatelů a zařízení", - "opt_addressbooks": "Adresáře", - "opt_users": "Uživatelské účty", - "opt_users_warning": "Destruktivní: nahradí VŠECHNY uživatelské účty daty ze zálohy. Můžete být odhlášeni.", - "no_file": "Nebyl vybrán žádný záložní soubor", - "invalid_json": "Neplatný záložní soubor: nejedná se o validní JSON", - "invalid_format": "Neplatný záložní soubor: nejedná se o zálohu BetterDesk", - "stat_database": "Silnik databáze", - "stat_keys": "Klucze servera w kopii", - "stat_env": "Soubor srodowiska", - "stat_uploads": "Soubori marki", - "restart_required": "Nektore przywrocone komponenty (klucze / .env / baza Go) vyžadujeja restart uslugi, aby zadzialac.", - "security_warning": "Ta kopia zawiera dane wrazliwe (klucze servera, soubor srodowiska, hashe hasel i sekrety 2FA). Przechowuj ja bezpiecznie i nigdy nie udostepniaj.", - "restore_warning": "Przywrocenie sekretow, souboru srodowiska lub bazy servera Go nadpisuje tozsamosc servera i vyžaduje nastepnie restart uslugi.", - "opt_database": "Databáze (wszystkie tabele)", - "opt_database_hint": "Ponownie importuje wszystkie dane konsoli. Stosowane na zywo, bez restart.", - "opt_uploads": "Soubori marki", - "opt_uploads_hint": "Logo i przeslane obrázeky.", - "opt_secrets": "Klucze i sekrety servera", - "opt_secrets_warning": "Nadpisuje tozsamosc Ed25519 servera, klucz API i sekret sesji. Vyžaduje restart uslugi.", - "opt_env": "Soubor srodowiska (.env)", - "opt_env_warning": "Nadpisuje SESSION_SECRET, klucz API, DSN bazy, porty i ustawienia TLS. Vyžaduje restart uslugi.", - "opt_godb": "Databáze servera Go", - "opt_godb_warning": "Nadpisuje baze SQLite servera Go (pouze backend SQLite). Vyžaduje restart uslugi." + "report": { + "title": "Pracovní zpráva", + "subtitle": "Popište práci provedenou během této vzdálené relace.", + "category": "Kategorie", + "ticket_ref": "Reference ticketu", + "summary": "Provedená práce", + "skip": "Přeskočit nyní", + "submit": "Odeslat zprávu", + "summary_required": "Shrnutí je povinné", + "saved": "Pracovní zpráva uložena" }, - "cdap": { - "device_detail": "Zařízení CDAP", - "loading": "Načítání...", - "loading_widgets": "Načítání widgetů zařízení...", - "load_error": "Nepodařilo se načíst data zařízení", - "connected": "Připojeno", - "disconnected": "Odpojeno", - "device_offline_msg": "Zařízení je momentálně offline. Hodnoty widgetů mohou být zastaralé.", - "no_widgets": "Nejsou k dispozici žádné widgety", - "no_widgets_desc": "Toto zařízení nezaregistrovalo manifest CDAP s definicemi widgetů.", - "command_log": "Log příkazů", - "clear_log": "Vymazat log", - "confirm_command": "Potvrdit příkaz", - "select_option": "Vybrat", - "cdap_status": "Stav CDAP", - "cdap_enabled": "CDAP povoleno", - "cdap_disabled": "CDAP zakázáno", - "cdap_devices": "Zařízení CDAP", - "cdap_connections": "Aktivní připojení", - "send_command": "Odeslat příkaz", - "command_sent": "Příkaz byl úspěšně odeslán", - "command_failed": "Nepodařilo se odeslat příkaz", - "devices_title": "Zařízení CDAP", - "devices_subtitle": "Připojená zařízení přes Custom Device Application Protocol", - "stat_connected": "Připojeno", - "stat_port": "Port", - "search_devices": "Hledat zařízení...", - "no_devices": "Nejsou připojena žádná zařízení", - "no_devices_desc": "Momentálně nejsou připojena žádná zařízení CDAP. Zařízení se zde zobrazí po připojení k bráně.", - "gateway_disabled": "Brána CDAP je zakázána", - "gateway_disabled_desc": "Povolte bránu CDAP nastavením CDAP_ENABLED=true v konfiguraci serveru.", - "gateway_active": "Aktivní", - "toggle_enable": "Povolit CDAP", - "toggle_disable": "Zakázat CDAP", - "enabled_restart": "CDAP povoleno. Pro uplatnění změn je nutný restart serveru.", - "disabled_restart": "CDAP zakázáno. Pro uplatnění změn je nutný restart serveru.", - "widgets": "widgety", - "type_all": "Vše", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS agent", - "type_network": "Síť", - "type_camera": "Kamera", - "type_custom": "Vlastní", - "active_alerts": "Aktivní upozornění", - "alert_fired": "Upozornění spuštěno", - "alert_cleared": "Upozornění vymazáno", - "no_alerts": "Žádná aktivní upozornění", - "connect_terminal": "Připojit terminál", - "table_search": "Hledat...", - "just_now": "Právě teď", - "terminal_connecting": "Připojování k zařízení...", - "terminal_disconnected": "Odpojeno", - "terminal_error": "Připojení terminálu selhalo", - "linked_devices": "Propojená zařízení", - "link_device": "Propojit zařízení", - "unlink_device": "Odpojit", - "no_linked_devices": "Žádná propojená zařízení", - "unlink_confirm": "Opravdu chcete toto zařízení odpojit?", - "link_prompt": "Zadejte Peer ID pro propojení s tímto zařízením:", - "connect_desktop": "Připojit plochu", - "connect_video": "Připojit stream", - "connect_files": "Procházet soubory", - "connect_audio": "Připojit zvuk", - "upload_file": "Nahrát", - "desktop_connecting": "Připojování...", - "video_connecting": "Připojování...", - "files_connecting": "Připojování...", - "audio_connecting": "Připojování...", - "audio_streaming": "Streamování", - "clipboard_in": "Schránka přijata", - "clipboard_out": "Schránka odeslána", - "monitor_select": "Vybrat monitor", - "keyframe_request": "Vyžádat klíčový snímek", - "quality_auto": "Automatická kvalita" + "empty": { + "packages": "Zatím žádné balíčky. Vytvořte první tlačítkem výše.", + "contracts": "Zatím žádné smlouvy organizací. Přiřaďte balíček organizaci.", + "sessions": "Zatím nejsou zaznamenány fakturovatelné relace.", + "reports": "Zatím nebyly odeslány pracovní zprávy." }, - "desktop": { - "switch_mode": "Režim plochy", - "console_mode": "Režim konzole", - "loading": "Načítání...", - "minimize": "Minimalizovat", - "maximize": "Maximalizovat", - "restore": "Obnovit", - "close": "Zavřít", - "widgets_mode": "Widgety", - "windows_mode": "Okna", - "wallpaper": "Tapeta", - "add_widget": "Přidat widget", - "remove_widget": "Odebrat widget", - "pop_out_widget": "Vysunout", - "pop_in_widget": "Zasunout", - "configure": "Konfigurovat", - "search_widgets": "Hledat widgety...", - "cat_monitoring": "Monitoring", - "cat_devices": "Zařízení", - "cat_tools": "Nástroje", - "cat_general": "Obecné", - "notes_placeholder": "Sem pište poznámky...", - "search_placeholder": "Hledat zařízení, stránky, nastavení...", - "search_pages": "Stránky", - "search_devices": "Zařízení", - "search_no_results": "Žádné výsledky", - "exit_desktop": "Ukončit režim plochy", - "refresh": "Obnovit", - "widget_clock": "Hodiny", - "widget_device_status": "Stav zařízení", - "widget_server_health": "Informace o serveru", - "widget_system_stats": "Měřidla zařízení", - "widget_device_list": "Seznam zařízení", - "widget_quick_actions": "Rychlé akce", - "widget_recent_activity": "Nedávná aktivita", - "widget_notes": "Poznámky", - "widget_network_monitor": "Monitor sítě", - "widget_tickets_summary": "Tickety", - "widget_iframe": "Webové vložení", - "widget_cdap_devices": "Zařízení CDAP", - "widget_uptime": "Doba běhu", - "widget_port_status": "Stav portu", - "widget_device_grid": "Mřížka zařízení", - "widget_multi_gauge": "Měřidla serveru", - "widget_weekly_chart": "Týdenní aktivita", - "widget_quick_controls": "Rychlé ovládání", - "widget_bandwidth": "Přenosová kapacita", - "widget_connection_stats": "Statistiky připojení", - "widget_weather": "Počasí", - "widget_world_clock": "Světové hodiny", - "widget_bookmarks": "Záložky", - "widget_user_sessions": "Uživatelské relace", - "widget_alert_feed": "Přehled upozornění", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Celkem", - "label_blocked": "Blokováno", - "label_banned": "Zablokováno", - "label_active": "Aktivní", - "label_service": "Služba", - "label_port": "Port", - "label_uptime_prefix": "Doba běhu:", - "label_uptime": "Doba běhu", - "label_no_devices": "Žádná zařízení", - "label_no_activity": "Žádná aktivita", - "label_no_targets": "Žádné cíle", - "label_unavailable": "Nedostupné", - "label_open": "Otevřené", - "label_in_progress": "Probíhá", - "label_resolved": "Vyřešené", - "label_set_url": "Nastavte URL v konfiguraci", - "label_server_uptime": "Doba běhu serveru", - "label_merged_info": "Sloučeno do widgetu Informace o serveru", - "label_with_notes": "S poznámkami", - "label_metric": "Metrika", - "label_count": "Počet", - "label_total_devices": "Celkem zařízení", - "label_throughput": "Propustnost", - "label_active_relays": "Aktivní relaye", - "label_total_relayed": "Celkem relayováno", - "label_total_bytes": "Celkem bajtů", - "label_filter_devices": "Filtrovat zařízení...", - "label_all": "Vše", - "label_ban": "Blokovat", - "label_unban": "Odblokovat", - "label_connect": "Připojit", - "label_no_cdap_devices": "Žádná zařízení CDAP", - "action_add_widget": "Přidat widget", - "label_merged_server_info": "Sloučeno do widgetu Informace o serveru", - "wp_images": "Obrázky", - "wp_colors": "Plné barvy", - "wp_custom_color": "Vlastní barva", - "wp_fit_style": "Styl", - "wp_fill": "Vyplnit", - "wp_fit": "Přizpůsobit", - "wp_stretch": "Roztáhnout", - "wp_center": "Na střed", - "wp_unavailable": "Obrázky tapet nejsou na tomto serveru nainstalovány.", - "wp_download_hint": "Umístěte PNG obrázky do adresáře public/wallpapers/, aby bylo možné vybírat tapety.", - "widget_calendar": "Kalendář", - "widget_process_monitor": "Monitor procesů", - "widget_disk_usage": "Využití disku", - "widget_log_viewer": "Prohlížeč logů", - "widget_speed_test": "Test rychlosti", - "widget_database_stats": "Statistiky databáze", - "widget_docker_containers": "Docker kontejnery", - "widget_shell_command": "Příkaz shellu", - "widget_device_map": "Mapa zařízení", - "widget_remote_connect": "Vzdálené připojení", - "label_no_online": "Žádná online zařízení", - "label_no_events": "Dnes žádné události", - "label_event_title": "Název události:", - "label_no_data": "Nejsou k dispozici žádná data", - "label_download_speed": "Rychlost stahování", - "label_latency": "Latence", - "label_server": "Server BetterDesk", - "label_run_test": "Spustit test", - "label_testing": "Testování...", - "label_table": "Tabulka", - "label_rows": "Řádky", - "label_last_backup": "Poslední záloha", - "label_no_containers": "Žádné kontejnery", - "label_docker_unavailable": "Docker není dostupný", - "label_no_command": "Není nakonfigurován žádný příkaz", - "label_no_output": "Zatím žádný výstup", - "label_run": "Spustit", - "label_presets": "Předvolby", - "label_save_preset": "Uložit předvolbu", - "label_load_preset": "Načíst předvolbu", - "label_preset_name": "Název předvolby:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimální", - "label_preset_developer": "Vývojář", - "label_snap_layout": "Rozvržení přichycení", - "label_auto_arrange": "Automaticky uspořádat", - "label_zone_layout": "Rozvržení zón", - "label_2col_equal": "2 sloupce (stejné)", - "label_2col_wide": "2 sloupce (60/40)", - "label_3col": "3 sloupce", - "label_2x2_grid": "Mřížka 2×2", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Skupina widgetů", - "ungroup_widgets": "Zrušit seskupení widgetů", - "group_widgets": "Seskupit vybrané widgety", - "snap_layouts": "Rozvržení přichycení", - "snap_left": "Přichytit vlevo", - "snap_right": "Přichytit vpravo", - "snap_top_left": "Přichytit vlevo nahoře", - "snap_top_right": "Přichytit vpravo nahoře", - "snap_bottom_left": "Přichytit vlevo dole", - "snap_bottom_right": "Přichytit vpravo dole", - "aero_shake": "Zatřesením minimalizovat ostatní", - "zone_resize": "Tažením okraje změňte velikost zón", - "zone_borders": "Přetahovatelné okraje zón", - "app_drawer": "Aplikace", - "search_apps": "Hledat aplikace...", - "edit_shortcuts": "Upravit zkratky", - "widgets": "Widgety", - "theme": "Motiv", - "fullscreen": "Celá obrazovka", - "help": "Nápověda" + "assign": { + "title": "Přiřadit existující balíček", + "submit": "Přiřadit" }, - "desktop_login": { - "click_to_sign_in": "Klikněte kamkoli nebo stiskněte klávesu pro přihlášení", - "username_placeholder": "Uživatelské jméno", - "password_placeholder": "Heslo", - "sign_in": "Přihlásit se", - "verify": "Ověřit", - "totp_title": "Dvoufázové ověření", - "totp_subtitle": "Zadejte 6místný kód z vaší autentizační aplikace", - "back_to_login": "Zpět na přihlášení", - "fill_all_fields": "Prosím vyplňte všechna pole", - "invalid_credentials": "Neplatné uživatelské jméno nebo heslo", - "invalid_code": "Neplatný ověřovací kód", - "enter_6_digits": "Zadejte všech 6 číslic", - "network_error": "Chyba sítě — zkontrolujte připojení", - "session_expired": "Relace vypršela. Přihlaste se prosím znovu." - }, - "tokens": { - "title": "Tokeny zařízení", - "subtitle": "Správa registračních tokenů pro automatizované nasazování zařízení", - "enrollment_mode": "Režim registrace", - "mode_open": "Otevřený", - "mode_open_desc": "Jakékoli zařízení se může zaregistrovat bez tokenu", - "mode_managed": "Spravovaný", - "mode_managed_desc": "Zařízení potřebují k registraci platný token", - "mode_locked": "Uzamčený", - "mode_locked_desc": "Nejsou povoleny žádné nové registrace zařízení", - "total": "Tokenů celkem", - "active": "Aktivní", - "used": "Použité", - "revoked": "Zneplatněné", - "search_placeholder": "Hledat tokeny...", - "status_pending": "Čekající", - "status_active": "Aktivní", - "status_used": "Použitý", - "status_revoked": "Zneplatněný", - "status_expired": "Vypršelý", - "bulk_generate": "Hromadné generování", - "create": "Vytvořit token", - "edit": "Upravit token", - "token": "Token", - "name": "Název", - "status": "Stav", - "uses": "Použití", - "bound_peer": "Vázaný Peer", - "expires": "Vyprší", - "created": "Vytvořeno", - "actions": "Akce", - "name_placeholder": "např. Dávka pro kancelářská PC", - "max_uses": "Max. použití", - "max_uses_hint": "0 = neomezeno", - "expires_in": "Vyprší za", - "no_expiration": "Bez vypršení", - "expires_1h": "1 hodinu", - "expires_24h": "24 hodin", - "expires_7d": "7 dní", - "expires_30d": "30 dní", - "note": "Poznámka", - "note_placeholder": "Volitelná poznámka k tomuto tokenu...", - "count": "Počet", - "count_range": "Počet tokenů ke generování (1-100)", - "name_prefix": "Předpona názvu", - "generate": "Generovat", - "token_created": "Token vytvořen", - "tokens_generated": "Tokeny generovány", - "copy_warning": "Token si nyní zkopírujte. Znovu se již nezobrazí.", - "copy_token": "Kopírovat token", - "copied": "Zkopírováno!", - "revoke": "Zneplatnit", - "revoke_confirm": "Opravdu chcete tento token zneplatnit? Zařízení, která již byla pomocí něj zaregistrována, nebudou ovlivněna.", - "revoked_success": "Token byl úspěšně zneplatněn", - "no_tokens": "Nebyly nalezeny žádné tokeny", - "expired": "Vypršelo", - "never": "Nikdy", - "save": "Uložit", - "cancel": "Zrušit", - "unlimited": "Neomezeno" - }, - "tutorial": { - "next": "Další", - "prev": "Předchozí", - "skip": "Přeskočit", - "finish": "Dokončit", - "close": "Zavřít", - "step_of": "{current} z {total}", - "console_sidebar_title": "Navigační panel", - "console_sidebar_text": "Odtud máte přístup ke všem modulům. Kliknutím na libovolnou ikonu přejdete do dané sekce. Panel se přizpůsobuje velikosti obrazovky.", - "console_expand_title": "Rozbalit panel", - "console_expand_text": "Kliknutím sem rozbalíte postranní panel, abyste viděli celé popisky všech položek. Opětovným kliknutím jej sbalíte.", - "console_search_title": "Rychlé vyhledávání", - "console_search_text": "Rychle hledejte zařízení, nastavení nebo akce. Klávesová zkratka je Ctrl+K.", - "console_dashboard_title": "Nástěnka", - "console_dashboard_text": "Váš centrální uzel zobrazující stav serveru, online zařízení a rychlé akce. Sledujte důležité metriky na první pohled.", - "console_devices_title": "Správa zařízení", - "console_devices_text": "Zobrazení, vyhledávání a správa všech připojených zařízení. Filtrujte podle stavu, přidělujte štítky a konfigurujte nastavení jednotlivých zařízení.", - "console_settings_title": "Nastavení", - "console_settings_text": "Konfigurace chování serveru, možností zabezpečení, brandingu a správy uživatelů. Přizpůsobte BetterDesk svým potřebám.", - "console_desktop_title": "Režim plochy", - "console_desktop_text": "Přepněte do režimu plochy pro pracovní prostor s okny a widgety. Ideální pro multitasking a monitorovací nástěnky.", - "console_complete_title": "Jste připraveni!", - "console_complete_text": "Prozkoumejte kategorie v postranním panelu a objevte všechny funkce. Kliknutím na ikonu Nápovědy můžete průvodce kdykoli restartovat.", - "desktop_topbar_title": "Horní lišta", - "desktop_topbar_text": "Horní lišta zobrazuje hodiny, rychlé ovládací prvky a přístup k seznamu aplikací. Kliknutím na ikonu mřížky zobrazíte všechny aplikace.", - "desktop_drawer_title": "Seznam aplikací", - "desktop_drawer_text": "Otevřete seznam aplikací pro vyhledání a spuštění jakékoli funkce konzole jako plovoucího okna. Aplikace jsou seřazeny podle kategorií.", - "desktop_widgets_title": "Nástěnka widgetů", - "desktop_widgets_text": "Váš přizpůsobitelný pracovní prostor. Widgety zobrazují živé informace a poskytují rychlý přístup k funkcím. Přetažením je uspořádejte.", - "desktop_add_widget_title": "Přidat widgety", - "desktop_add_widget_text": "Kliknutím sem můžete procházet dostupné widgety. Vyberte si z monitorovacích displejů, seznamů zařízení, poznámek a dalších.", - "desktop_taskbar_title": "Hlavní panel", - "desktop_taskbar_text": "Otevřené aplikace se zobrazují zde. Kliknutím okna aktivujete nebo minimalizujete. Přejetím přes ikony zobrazíte názvy aplikací.", - "desktop_snap_title": "Rozvržení přichycení", - "desktop_snap_text": "Přetažením oken k okrajům obrazovky je přichytíte na místo, nebo najeďte na tlačítko maximalizace pro předvolby rozvržení. Zkuste Aero Shake!", - "desktop_windows_title": "Okna aplikací", - "desktop_windows_text": "Aplikace se otevírají v posuvných oknech s měnitelnou velikostí. Minimalizujte, maximalizujte nebo zavírejte z titulní lišty. Okna jsou vrstvena nad widgety.", - "desktop_search_title": "Rychlé vyhledávání", - "desktop_search_text": "Prohledávejte zařízení, stránky a nastavení. Stiskněte Ctrl+K kdekoli pro okamžité otevření vyhledávání.", - "desktop_complete_title": "Režim plochy připraven!", - "desktop_complete_text": "Zkuste otevřít aplikace ze seznamu a uspořádat okna vedle sebe. Použijte předvolby widgetů pro rychlé nastavení nástěnky.", - "devices_folders_title": "Složky zařízení", - "devices_folders_text": "Organizujte zařízení do složek. Kliknutím na složku vyfiltrujete seznam. Kliknutím pravým tlačítkem přejmenujete nebo smažete.", - "devices_search_title": "Hledání a filtry", - "devices_search_text": "Hledejte podle ID, názvu hostitele nebo platformy. Použijte filtry stavu pro zobrazení pouze online, offline nebo všech zařízení.", - "devices_table_title": "Seznam zařízení", - "devices_table_text": "Kliknutím na řádek zařízení zobrazíte detaily. Použijte menu (tři tečky) vpravo pro rychlé akce jako připojení, úpravu štítků nebo smazání.", - "devices_complete_title": "Správa zařízení připravena!", - "devices_complete_text": "Přetahujte zařízení mezi složkami pro jejich organizaci. Poklepáním na zařízení otevřete jeho panel detailů.", - "settings_tabs_title": "Kategorie nastavení", - "settings_tabs_text": "Přepínejte mezi sekcemi Obecné, Zabezpečení, Vzhled a dalšími konfiguračními částmi.", - "settings_content_title": "Konfigurace", - "settings_content_text": "Každá sekce obsahuje specifická nastavení serveru a konzole. Změny se uloží po kliknutí na tlačítko Uložit.", - "settings_complete_title": "Přehled nastavení", - "settings_complete_text": "Zkontrolujte nastavení Zabezpečení pro 2FA, API klíče a správu uživatelů. Navštivte Vzhled pro úpravu vizuálu konzole.", - "help": "Nápověda a návody", - "tour_console": "Prohlídka konzole", - "tour_desktop": "Prohlídka režimu plochy", - "tour_devices": "Prohlídka zařízení", - "tour_settings": "Prohlídka nastavení", - "reset_all": "Resetovat všechny návody", - "tour_remote": "Prohlídka vzdálené relace", - "tour_organization": "Nastavení organizace", - "tour_cdap": "Přehled CDAP", - "tour_chat": "Základy chatu", - "remote_toolbar_title": "Vzdálený panel nástrojů", - "remote_toolbar_text": "Přistupujte k ovládání zobrazení, synchronizaci schránky, speciálním klávesám a nastavení kvality. Přepínejte na celou obrazovku pomocí F11.", - "remote_canvas_title": "Vzdálený obraz", - "remote_canvas_text": "Toto je vzdálená obrazovka. Kliknutím dovnitř začnete ovládat vzdálené zařízení. Vstup myši a klávesnice je automaticky přesměrován.", - "remote_clipboard_title": "Synchronizace schránky", - "remote_clipboard_text": "Kopírujte a vkládejte text mezi vaším počítačem a vzdáleným zařízením. Používejte Ctrl+C / Ctrl+V jako obvykle.", - "remote_complete_title": "Vzdálená relace připravena!", - "remote_complete_text": "Používejte tlačítka na panelu pro speciální klávesy (Ctrl+Alt+Del, PrintScreen) a přepínání monitorů. Relaci ukončíte klávesou Escape nebo tlačítkem Odpojit.", - "org_overview_title": "Organizace", - "org_overview_text": "Organizace umožňují seskupovat uživatele, zařízení a politiky. Každá organizace má vlastního správce, operátory a nastavení.", - "org_create_title": "Vytvořit organizaci", - "org_create_text": "Kliknutím sem vytvoříte novou organizaci. Zadejte název, identifikátor (slug) a volitelný popis. Stanete se vlastníkem nové organizace.", - "org_members_title": "Správa členů", - "org_members_text": "Zvěte uživatele e-mailem, přidělujte role (admin, operátor, uživatel) a spravujte přístup. Členové uvidí zařízení přiřazená jejich organizaci.", - "org_devices_title": "Přiřazení zařízení", - "org_devices_text": "Přidejte zařízení do organizace. Zařízení zde přiřazená zdědí politiky organizace a budou viditelná pro její členy.", - "org_policies_title": "Politiky organizace", - "org_policies_text": "Nastavte bezpečnostní politiky, jako jsou požadavky na heslo, vypršení relací, vynucení 2FA a pravidla pro registraci zařízení.", - "org_complete_title": "Nastavení organizace dokončeno!", - "org_complete_text": "Pozvěte svůj tým a přiřaďte zařízení. Politiky se automaticky aplikují na všechny členy.", - "cdap_devices_title": "CDAP zařízení", - "cdap_devices_text": "Zobrazte všechna připojená CDAP zařízení — IoT senzory, PLC, mosty a vlastní agenty. Zelené indikátory značí aktivní připojení.", - "cdap_widgets_title": "Nástěnka widgetů", - "cdap_widgets_text": "Widgety zobrazují data ze zařízení v reálném čase. Ukazatele, přepínače, LED, grafy — každý typ vizualizuje jiný druh dat.", - "cdap_commands_title": "Odesílání příkazů", - "cdap_commands_text": "Interagujte se zařízeními odesíláním příkazů. Některé vyžadují potvrzení. Protokol příkazů uchovává historii všech odeslaných požadavků.", - "cdap_terminal_title": "Terminál zařízení", - "cdap_terminal_text": "Otevřete terminálovou relaci k CDAP agentům pro pokročilou diagnostiku nebo manuální konfiguraci. Příkazy pište přímo.", - "cdap_complete_title": "Přehled CDAP dokončen!", - "cdap_complete_text": "Prozkoumejte widgety, posílejte příkazy a používejte terminál nebo prohlížeč souborů. CDAP agenti hlásí metriky automaticky.", - "chat_contacts_title": "Kontakty a skupiny", - "chat_contacts_text": "Zde vidíte své kontakty a chatovací skupiny. Kliknutím na kontakt otevřete konverzaci. Zelené tečky značí online uživatele.", - "chat_send_title": "Odesílání zpráv", - "chat_send_text": "Napište zprávu a stiskněte Enter. Zprávy jsou šifrovány koncovým šifrováním (E2E), pokud jej obě strany podporují.", - "chat_file_title": "Sdílení souborů", - "chat_file_text": "Kliknutím na ikonu přílohy můžete sdílet soubory. Soubory jsou šifrované a mohou mít velikost až 50 MB.", - "chat_complete_title": "Chat připraven!", - "chat_complete_text": "Chatujte s operátory a koncovými uživateli v reálném čase. Vytvářejte skupiny pro týmovou komunikaci. Zprávy podporují potvrzení o přečtení.", - "disable_tutorials": "Vypnout návody", - "enable_tutorials": "Zapnout návody" - }, - "help_request": { - "title": "Žádosti o pomoc", - "subtitle": "Správa příchozích žádostí o pomoc z desktopových klientů", - "new_request": "Nová žádost o pomoc", - "device": "Zařízení", - "hostname": "Hostitel", - "message": "Zpráva", - "status": "Stav", - "pending": "Čekající", - "accepted": "Přijato", - "resolved": "Vyřešeno", - "accept": "Přijmout", - "resolve": "Vyřešit", - "no_requests": "Žádné žádosti o pomoc", - "notification": "Přijata žádost o pomoc od", - "stats_total": "Celkem", - "filter_all": "Vše" - }, - "organizations": { - "title": "Organizace", - "create": "Vytvořit organizaci", - "edit": "Upravit organizaci", - "detail": "Podrobnosti o organizaci", - "name": "Název", - "slug": "Identifikátor (pro URL)", - "logo_url": "URL loga", - "users": "Uživatelé", - "devices": "Zařízení", - "invitations": "Pozvánky", - "settings": "Nastavení", - "add_user": "Přidat uživatele", - "assign_device": "Přiřadit zařízení", - "create_invitation": "Vytvořit pozvánku", - "delete_confirm": "Smazat tuto organizaci? Tímto budou odstraněni všichni přidružení uživatelé, zařízení a nastavení.", - "no_orgs": "Zatím žádné organizace", - "no_orgs_hint": "Vytvořte svou první organizaci a začněte spravovat zařízení a uživatele.", - "connection_policy": "Zásady připojení", - "allow_file_transfer": "Povolit přenos souborů", - "allow_clipboard": "Povolit schránku", - "max_session_duration": "Max. délka relace (min)", - "role_owner": "Vlastník", - "role_admin": "Administrátor", - "role_operator": "Operátor", - "role_user": "Člen", - "username": "Uživatelské jméno", - "password": "Heslo", - "display_name": "Zobrazované jméno", - "email": "E-mail", - "role": "Role", - "last_login": "Poslední přihlášení", - "actions": "Akce", - "device_id": "ID zařízení", - "department": "Oddělení", - "building": "Budova", - "location": "Umístění", - "assigned_user": "Přiřazený uživatel", - "token": "Token", - "expires": "Vyprší", - "used": "Použito", - "no_users": "V této organizaci nejsou žádní uživatelé.", - "no_devices": "K této organizaci nejsou přiřazena žádná zařízení.", - "no_invitations": "Žádné pozvánky.", - "user_added": "Uživatel přidán", - "user_removed": "Uživatel odstraněn", - "user_updated": "Role uživatele aktualizována", - "device_assigned": "Zařízení přiřazeno", - "device_unassigned": "Přiřazení zařízení zrušeno", - "invitation_created": "Pozvánka vytvořena", - "settings_saved": "Nastavení uložena", - "org_deleted": "Organizace smazána", - "confirm_remove_user": "Odstranit tohoto uživatele z organizace?", - "confirm_unassign_device": "Zrušit přiřazení tohoto zařízení k organizaci?", - "confirm_delete_org": "Smazat tuto organizaci a všechna přidružená data?", - "edit_role": "Upravit roli", - "raw_settings": "Surové nastavení", - "key": "Klíč", - "value": "Hodnota", - "save": "Uložit nastavení", - "policy_unattended": "Bezobslužné (okamžité)", - "policy_attended": "S asistencí (s potvrzením)", - "policy_ask": "Vždy se ptát", - "expires_hours": "Vypršení (hodiny)", - "loading_failed": "Nepodařilo se načíst data organizace", - "name_slug_required": "Název a identifikátor jsou povinné", - "org_created": "Organizace vytvořena", - "org_updated": "Organizace aktualizována", - "create_new_user": "Vytvořit nového", - "add_existing_user": "Přidat existujícího", - "none_available": "žádný", - "select_user": "Vybrat uživatele", - "org_role": "Role v organizaci", - "link_user_hint": "Vybraný uživatel bude propojen s touto organizací pomocí svých přihlašovacích údajů k serveru.", - "no_available_users": "Všichni uživatelé serveru jsou již s touto organizací propojeni.", - "user_linked": "Uživatel propojen s organizací" - }, - "chat": { - "e2e_enabled": "Koncové šifrování aktivní", - "e2e_establishing": "Navazování zabezpečeného kanálu...", - "e2e_established": "Zabezpečený kanál navázán", - "e2e_unsupported": "E2E šifrování není v tomto prohlížeči podporováno", - "typing_indicator": "píše...", - "read_receipt": "Přečteno", - "delivered": "Doručeno", - "file_share": "Soubor", - "file_too_large": "Soubor je příliš velký (max 50 MB)", - "file_encrypted": "Šifrovaný přenos souboru", - "presence_online": "Online", - "presence_away": "Nepřítomen", - "presence_busy": "Nerušit", - "presence_offline": "Offline", - "key_rotation": "Bezpečnostní klíče byly obměněny", - "new_message": "Nová zpráva", - "title": "Chat", - "contacts": "Kontakty", - "groups": "Skupiny", - "no_contacts": "Zatím žádné kontakty", - "no_groups": "Zatím žádné skupiny", - "no_messages": "Zatím žádné zprávy", - "no_results": "Nebyly nalezeny žádné výsledky", - "select_conversation": "Vyberte konverzaci a začněte chatovat", - "type_message": "Napište zprávu...", - "send": "Odeslat", - "attach_file": "Připojit soubor", - "emoji": "Emoji", - "search_messages": "Hledat ve zprávách", - "create_group": "Vytvořit skupinu", - "group_name": "Název skupiny", - "group_members": "Členové", - "cancel": "Zrušit", - "create": "Vytvořit", - "members": "členů", - "today": "Dnes", - "yesterday": "Včera", - "react": "Reagovat", - "my_presence": "Můj stav", - "search_placeholder": "Hledat kontakty a zprávy", - "select_conversation_hint": "Vyberte konverzaci pro zobrazení zpráv", - "info": "Informace", - "group_name_placeholder": "Zadejte název skupiny" - }, - "toast": { - "device_connected": "Zařízení připojeno", - "device_disconnected": "Zařízení odpojeno", - "session_started": "Vzdálená relace zahájena", - "session_ended": "Vzdálená relace ukončena", - "file_upload_complete": "Nahrávání souboru dokončeno", - "settings_saved": "Nastavení uložena", - "error_generic": "Došlo k chybě", - "connection_lost": "Spojení ztraceno", - "reconnecting": "Opětovné připojování..." - }, - "theme": { - "dark": "Tmavý", - "light": "Světlý", - "auto": "Systémový", - "title": "Motiv" - }, - "days": { - "mon": "Po", - "tue": "Út", - "wed": "St", - "thu": "Čt", - "fri": "Pá", - "sat": "So", - "sun": "Ne" - }, - "toolkit": { - "title": "Sada nástrojů", - "subtitle": "Administrátorské utility a diagnostické nástroje", - "cat_network": "Síť", - "cat_crypto": "Kryptografie", - "cat_encoding": "Kódování", - "cat_system": "Systém", - "host": "Hostitel", - "port": "Port", - "domain": "Doména", - "run": "Spustit", - "generate": "Generovat", - "encode": "Zakódovat", - "decode": "Dekódovat", - "send": "Odeslat", - "refresh": "Obnovit", - "algorithm": "Algoritmus", - "input_text": "Vstupní text", - "enter_text": "Zadejte text...", - "length": "Délka", - "options": "Možnosti", - "source": "Zdroj", - "lines": "Řádky", - "log_console": "Konzole", - "log_go": "Server Go", - "mac_address": "MAC adresa", - "broadcast": "Všesměrové vysílání", - "ping_title": "Ping", - "ping_desc": "Kontrola dostupnosti a latence hostitele", - "tcp_title": "Kontrola TCP portu", - "tcp_desc": "Test konektivity TCP portu", - "ssl_title": "SSL Inspektor", - "ssl_desc": "Kontrola podrobností SSL/TLS certifikátu", - "http_title": "HTTP Kontrola stavu", - "http_desc": "Ověření stavu HTTP koncového bodu", - "dns_title": "DNS Lookup", - "dns_desc": "Převod názvu hostitele na IP adresu", - "whois_title": "DNS záznamy", - "whois_desc": "Dotaz na záznamy A, AAAA, MX, TXT, NS", - "speed_title": "Test rychlosti", - "speed_desc": "Měření šířky pásma stahování", - "run_speed_test": "Spustit test rychlosti", - "wol_title": "Wake-on-LAN", - "wol_desc": "Odeslání magického paketu pro probuzení zařízení", - "wol_sent": "Magický paket odeslán", - "hash_title": "Generátor hashů", - "hash_desc": "Generování kryptografických hashů", - "password_title": "Generátor hesel", - "password_desc": "Generování bezpečného náhodného hesla", - "jwt_title": "JWT Dekodér", - "jwt_desc": "Dekódování a kontrola JSON Web Tokenů", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Kódování nebo dekódování Base64 dat", - "url_title": "URL Enkodér", - "url_desc": "Kódování nebo dekódování součástí URL", - "processes_title": "Seznam procesů", - "processes_desc": "Zobrazení běžících systémových procesů", - "disk_title": "Využití disku", - "disk_desc": "Zobrazení využití diskových oddílů", - "db_title": "Statistiky databáze", - "db_desc": "Zobrazení statistik tabulek databáze", - "docker_title": "Docker kontejnery", - "docker_desc": "Zobrazení běžících Docker kontejnerů", - "logs_title": "Prohlížeč logů", - "logs_desc": "Zobrazení nedávného výstupu logů", - "ip_address": "IP", - "latency": "Latence", - "ttl": "TTL", - "status": "Stav", - "resolved": "Vyřešeno", - "subject": "Předmět", - "issuer": "Vydavatel", - "valid_from": "Platnost od", - "valid_to": "Platnost do", - "days_left": "Zbývá dní", - "days": "dní", - "protocol": "Protokol", - "cipher": "Šifra", - "alt_names": "SANs (Alternativní názvy)", - "chain": "Řetězec", - "record_type": "Typ", - "record_value": "Hodnota", - "hash_value": "Hash", - "entropy": "Entropie", - "very_strong": "Velmi silné", - "strong": "Silné", - "weak": "Slabé", - "expiry": "Expirace", - "expired": "Vypršelo", - "valid": "Platné", - "process_name": "Název", - "db_type": "Typ", - "db_size": "Velikost", - "table_name": "Tabulka", - "row_count": "Řádky", - "no_data": "Žádná data nejsou k dispozici", - "no_docker": "Nebyly nalezeny žádné Docker kontejnery nebo Docker není dostupný", - "no_logs": "Žádné řádky logu nejsou k dispozici" - }, - "policies": { - "title": "Zásady organizace", - "subtitle": "Správa zásad zabezpečení, připojení a funkcí pro vaše organizace", - "select_org": "Organizace", - "select_org_placeholder": "Vyberte organizaci...", - "select_org_first": "Vyberte organizaci pro zobrazení auditního logu zásad.", - "configured": "Nakonfigurováno", - "connection_title": "Zásady připojení", - "connection_desc": "Řízení způsobu navazování vzdálených relací", - "connection_mode": "Režim připojení", - "mode_attended": "S asistencí (vyžaduje schválení uživatelem)", - "mode_unattended": "Bezobslužné (vždy povolit)", - "mode_ask": "Vždy se ptát", - "max_session": "Max. délka relace (minuty)", - "idle_lock": "Časový limit pro uzamčení při nečinnosti (minuty)", - "wallpaper_policy": "Tapeta během relace", - "wallpaper_show": "Zobrazit", - "wallpaper_hide_session": "Skrýt během relace", - "wallpaper_hide_always": "Vždy skrývat", - "features_title": "Zásady funkcí", - "features_desc": "Povolení nebo zakázání specifických funkcí pro zařízení", - "allow_file_transfer": "Povolit přenos souborů", - "allow_clipboard": "Povolit synchronizaci schránky", - "allow_audio": "Povolit streamování zvuku", - "allow_recording": "Povolit nahrávání relace", - "security_title": "Zásady zabezpečení", - "security_desc": "Vynucení bezpečnostních požadavků na zařízení organizace", - "require_2fa": "Vyžadovat 2FA pro bezobslužný přístup", - "password_min_length": "Minimální délka hesla", - "password_require_special": "Vyžadovat speciální znaky", - "password_max_age": "Maximální stáří hesla (dny, 0=nikdy)", - "allowed_operators": "Povolené role operátorů (oddělené čárkou)", - "network_title": "Síťové zásady", - "network_desc": "Řízení relay serverů a přímých připojení", - "block_direct_p2p": "Blokovat přímé P2P (vynutit relay)", - "allowed_relays": "Povolené relay servery (jeden na řádek)", - "ip_allowlist": "Seznam povolených IP adres (CIDR, jeden na řádek)", - "update_title": "Zásady aktualizací", - "update_desc": "Řízení automatických aktualizací a aktualizačních kanálů", - "auto_update": "Povolit automatické aktualizace", - "update_channel": "Aktualizační kanál", - "audit_title": "Změny zásad", - "audit_desc": "Historie nedávných změn zásad", - "no_audit": "Nebyly zaznamenány žádné změny zásad.", - "save_success": "Zásady úspěšně uloženy", - "save_failed": "Uložení zásad selhalo", - "load_failed": "Načtení zásad selhalo", - "block_direct_p2p_hint": "Dotyczy urzadzen w tej organizacji. Domyslny tryb globalny ustawiasz w Nastavení → Strategia polaczen." - }, - "attestation": { - "title": "Atestace zařízení", - "subtitle": "Sledování ověřování identity zařízení a hardwarových otisků", - "verified": "Ověřeno", - "pending": "Čekající", - "failed": "Selhalo", - "device_list": "Záznamy atestace zařízení", - "device_list_desc": "Hardwarové otisky a stav ověření identity", - "col_device": "ID zařízení", - "col_hostname": "Hostitel", - "col_fingerprint": "Otisk (Fingerprint)", - "col_status": "Stav", - "col_last_check": "Poslední kontrola", - "col_actions": "Akce", - "no_records": "Nebyly nalezeny žádné záznamy atestace.", - "verify_success": "Zařízení bylo označeno jako ověřené", - "verify_failed": "Ověření zařízení selhalo", - "revoke_success": "Atestace zařízení byla odvolána", - "revoke_failed": "Odvolání atestace selhalo" - }, - "fleet": { - "title": "Správa flotily", - "tab_resources": "Zdroje", - "tab_tasks": "Úkoly", - "tab_builder": "Tvůrce workflow", - "tab_compliance": "Shoda (Compliance)", - "res_title": "Mapování zdrojů", - "res_all_types": "Všechny typy", - "res_type_printer": "Tiskárna", - "res_type_network_drive": "Síťový disk", - "res_type_dns": "DNS server", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Přidat zdroj", - "res_name": "Název zdroje", - "res_type": "Typ", - "res_address": "Adresa / Cesta", - "res_target": "Cíl", - "res_scope": "Rozsah", - "res_scope_org": "Organizace", - "res_scope_group": "Skupina", - "res_scope_device": "Zařízení", - "res_scope_value": "Hodnota rozsahu", - "res_status": "Stav", - "res_active": "Aktivní", - "res_inactive": "Neaktivní", - "res_no_data": "Nebyly nalezeny žádné zdroje. Klikněte na 'Přidat zdroj' pro vytvoření.", - "res_confirm_delete": "Opravdu chcete tento zdroj smazat?", - "task_title": "Plánovač úloh", - "task_all_status": "Všechny stavy", - "task_status_pending": "Čekající", - "task_status_running": "Běží", - "task_status_success": "Úspěch", - "task_status_failed": "Selhalo", - "task_search": "Hledat úkoly...", - "task_create": "Vytvořit úkol", - "task_name": "Název úkolu", - "task_type": "Typ", - "task_type_script": "Skript", - "task_type_install": "Instalace", - "task_type_update": "Aktualizace", - "task_type_restart": "Restartovat", - "task_type_deploy": "Nasazení (Deploy)", - "task_type_scan": "Skenování", - "task_targets": "Cíle", - "task_targets_help": "ID zařízení nebo názvy skupin, oddělené čárkou", - "task_schedule": "Plán", - "task_schedule_once": "Jednou", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Hodnota plánu", - "task_script": "Skript / Příkaz", - "task_retries": "Počet opakování", - "task_timeout": "Časový limit (s)", - "task_last_run": "Poslední spuštění", - "task_no_data": "Nebyly nalezeny žádné úkoly. Klikněte na 'Vytvořit úkol' pro začátek.", - "task_confirm_delete": "Opravdu chcete tento úkol smazat?", - "task_output": "Výstup úkolu", - "task_retry": "Zkusit znovu", - "builder_title": "Vizuální tvůrce workflow", - "builder_select_workflow": "Vybrat workflow...", - "builder_new": "Nový", - "builder_save": "Uložit", - "builder_export": "Exportovat", - "builder_execute": "Spustit", - "builder_dry_run": "Zkušební spuštění (Dry Run)", - "builder_triggers": "Spouštěče", - "builder_conditions": "Podmínky", - "builder_actions": "Akce", - "builder_results": "Výsledky", - "builder_transforms": "Transformace", - "builder_properties": "Vlastnosti", - "builder_no_selection": "Vyberte uzel pro úpravu jeho vlastností.", - "builder_node_trigger_manual": "Ruční spouštěč", - "builder_node_trigger_schedule": "Plán", - "builder_node_trigger_event": "Spouštěč události", - "builder_node_cond_os": "Kontrola OS", - "builder_node_cond_threshold": "Prahová hodnota", - "builder_node_cond_time_window": "Časové okno", - "builder_node_action_script": "Spustit skript", - "builder_node_action_install": "Instalovat SW", - "builder_node_action_restart": "Restartovat službu", - "builder_node_action_file_deploy": "Nasadit soubor", - "builder_node_action_message": "Odeslat zprávu", - "builder_node_result_log": "Záznam do logu", - "builder_node_result_alert": "Odeslat upozornění", - "builder_node_result_chain": "Zřetězit workflow", - "builder_node_transform_parse": "Parsovat JSON", - "builder_node_transform_filter": "Filtr", - "builder_node_transform_delay": "Zpoždění", - "workflow_name": "Název workflow:", - "comp_title": "Softwarová shoda (Compliance)", - "comp_compliant": "V shodě", - "comp_warning": "Varování", - "comp_critical": "Kritické", - "comp_score": "Prům. skóre", - "comp_device": "Zařízení", - "comp_hostname": "Hostitel", - "comp_os": "OS", - "comp_score_col": "Skóre", - "comp_issues": "Problémy", - "comp_last_scan": "Poslední sken", - "comp_scan": "Skenovat", - "comp_scan_all": "Skenovat vše", - "comp_remediate": "Napravit", - "comp_remediate_confirm": "Spustit automatickou nápravu na tomto zařízení?", - "comp_no_data": "Nejsou k dispozici žádná data o shodě. Začněte spuštěním skenu.", - "save": "Uložit", - "cancel": "Zrušit", - "close": "Zavřít", - "edit": "Upravit", - "delete": "Smazat", - "actions": "Akce", - "all_orgs": "Všechny organizace", - "select_org_placeholder": "Vybrat organizaci...", - "all_types": "Všechny typy", - "type_printer": "Tiskárna", - "type_network_drive": "Síťový disk", - "type_dns": "DNS server", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Přidat zdroj", - "edit_resource": "Upravit zdroj", - "col_name": "Název", - "col_type": "Typ", - "col_target": "Cíl", - "col_scope": "Rozsah", - "col_status": "Stav", - "col_actions": "Akce", - "no_resources": "Nebyly nalezeny žádné zdroje.", - "active": "Aktivní", - "inactive": "Neaktivní", - "address": "Adresa / Cesta", - "scope_org": "Organizace", - "scope_group": "Skupina", - "scope_device": "Zařízení", - "scope_value": "Hodnota rozsahu", - "scope_value_hint": "ID organizace, skupiny nebo zařízení", - "confirm_delete": "Opravdu chcete tuto položku smazat?", - "all_statuses": "Všechny stavy", - "status_pending": "Čekající", - "status_running": "Běží", - "status_success": "Úspěch", - "status_failed": "Selhalo", - "search_tasks": "Hledat úkoly...", - "create_task": "Vytvořit úkol", - "edit_task": "Upravit úkol", - "col_task_name": "Název úkolu", - "col_task_type": "Typ", - "col_schedule": "Plán", - "col_last_run": "Poslední spuštění", - "no_tasks": "Nebyly nalezeny žádné úkoly.", - "task_type_file_deploy": "Nasazení souboru", - "task_type_registry": "Registr", - "target_devices": "Cílová zařízení", - "target_hint": "ID zařízení nebo názvy skupin", - "schedule_immediate": "Okamžitě", - "schedule_once": "Jednou", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Skript / Příkaz", - "retry_count": "Počet opakování", - "timeout_sec": "Časový limit (s)", - "loading": "Načítání", - "no_output": "Žádný výstup není k dispozici", - "error_loading": "Chyba při načítání dat", - "select_workflow": "Vybrat workflow...", - "new_workflow": "Nový", - "export": "Exportovat", - "execute": "Spustit", - "dry_run": "Zkušební spuštění", - "node_triggers": "Spouštěče", - "node_manual": "Ruční spouštěč", - "node_schedule": "Plán", - "node_event": "Spouštěč události", - "node_conditions": "Podmínky", - "node_os_check": "Kontrola OS", - "node_threshold": "Prahová hodnota", - "node_time_window": "Časové okno", - "node_actions": "Akce", - "node_run_script": "Spustit skript", - "node_install": "Instalovat SW", - "node_restart": "Restartovat službu", - "node_file_deploy": "Nasatid soubor", - "node_send_message": "Odeslat zprávu", - "node_results": "Výsledky", - "node_log_output": "Záznam do logu", - "node_send_alert": "Odeslat upozornění", - "node_chain": "Zřetězit workflow", - "node_transforms": "Transformace", - "node_parse_json": "Parsovat JSON", - "node_filter": "Filtr", - "node_delay": "Zpoždění", - "node_properties": "Vlastnosti", - "all_organizations": "Všechny organizace", - "scan_all": "Skenovat vše", - "compliant": "V shodě", - "non_compliant": "Varování", - "critical_issues": "Kritické", - "avg_score": "Prům. skóre", - "col_device": "Zařízení", - "col_hostname": "Hostitel", - "col_os": "OS", - "col_score": "Skóre", - "col_issues": "Problémy", - "col_last_scan": "Poslední sken", - "no_compliance_data": "Nejsou k dispozici žádná data o shodě.", - "confirm_remediate": "Spustit automatickou nápravu na tomto zařízení?" - }, - "scaling": { - "title": "Škálování a správa relay uzlů", - "tab_overview": "Přehled", - "tab_relays": "Relay uzly", - "tab_rules": "Pravidla přiřazení", - "tab_capacity": "Plánování kapacity", - "arch_title": "Síťová architektura", - "arch_loading": "Načítání diagramu architektury...", - "stat_relay_nodes": "Relay uzly", - "stat_total_devices": "Celkem zařízení", - "stat_active_sessions": "Aktivní relace", - "stat_bandwidth": "Celková šířka pásma", - "relay_health": "Stav relay uzlů", - "no_relays": "Nejsou konfigurovány žádné relay uzly. Přidejte svůj první uzel pro distribuci zátěže.", - "relay_search": "Hledat relay...", - "relay_add": "Přidat relay uzel", - "relay_edit": "Upravit relay uzel", - "col_name": "Název", - "col_address": "Adresa", - "col_location": "Umístění", - "col_devices": "Zařízení", - "col_sessions": "Relace", - "col_bandwidth": "Šířka pásma", - "col_status": "Stav", - "col_actions": "Akce", - "col_priority": "Priorita", - "col_rule_name": "Název pravidla", - "col_match": "Shoda", - "col_target_relay": "Cílový relay", - "col_fallback": "Záloha (Fallback)", - "status_online": "Online", - "status_degraded": "Omezený provoz", - "status_offline": "Offline", - "status_enabled": "Povoleno", - "status_disabled": "Zakázáno", - "confirm_delete_relay": "Opravdu chcete tento relay uzel smazat?", - "confirm_delete_rule": "Opravdu chcete toto pravidlo přiřazení smazat?", - "rules_hint": "Pravidla přiřazení určují, který relay server obsluhuje konkrétní skupiny zařízení. Pravidla jsou vyhodnocována podle priority (nejnižší jako první).", - "rule_add": "Přidat pravidlo", - "rule_edit": "Upravit pravidlo", - "rule_match_type": "Typ shody", - "match_subnet": "Podsíť", - "match_group": "Skupina zařízení", - "match_tag": "Štítek zařízení", - "match_location": "Umístění", - "rule_match_value": "Hodnota shody", - "fallback_master": "Hlavní server (Master)", - "fallback_nearest": "Nejbližší relay", - "relay_max_sessions": "Max. relací", - "relay_max_bandwidth": "Max. šířka pásma (Mbps)", - "cap_tiers": "Úrovně kapacity", - "cap_loading": "Načítání dat o kapacitě...", - "cap_recommendations": "Doporučení", - "cap_no_recs": "Žádná doporučení nejsou k dispozici.", - "cap_planning": "Plánování infrastruktury", - "cap_config": "Konfigurace", - "cap_max_devices": "Max. zařízení", - "cap_max_sessions": "Max. relací", - "cap_current": "Aktuální", - "cap_utilization": "Využití", - "cap_tier_devices": "Kapacita zařízení", - "cap_tier_sessions": "Kapacita relací", - "cap_tier_bandwidth": "Kapacita šířky pásma", - "cap_single_sqlite": "Jeden server (SQLite)", - "cap_single_pg": "Jeden server (PostgreSQL)", - "cap_master_3": "Master + 3 Relay uzly", - "cap_master_10": "Master + 10 Relay uzlů", - "rec_no_relays": "Nejsou konfigurovány žádné relay uzly. Zvažte jejich přidání pro lepší výkon a redundanci.", - "rec_devices_high": "Využití zařízení je vysoké. Zvažte přidání dalších relay uzlů pro rozdělení zátěže.", - "rec_sessions_high": "Kapacita relací se blíží limitu. Zvažte upgrade relay infrastruktury.", - "rec_cpu_high": "Některé relay uzly hlásí vysoké využití CPU. Zvažte vyvažování zátěže nebo navýšení kapacity.", - "rec_all_good": "Všechny systémy pracují v rámci běžných parametrů. Není vyžadována žádná akce.", - "save": "Uložit", - "cancel": "Zrušit", - "edit": "Upravit", - "delete": "Smazat", - "close": "Zavřít", - "no_rules": "Žádná pravidla přiřazení.", - "relays_info_banner": "Tento seznam je pouze informativní. Relay servery skutečně používané klienty jsou konfigurovány přes proměnnou prostředí RELAY_SERVERS na serveru BetterDesk.", - "relay_name_address_required": "Název a adresa jsou povinné.", - "relay_save_failed": "Uložení relay uzlu selhalo.", - "relay_delete_failed": "Smazání relay uzlu selhalo.", - "relay_saved": "Relay uzel byl uložen.", - "relay_deleted": "Relay uzel byl smazán.", - "rule_name_value_required": "Název pravidla a hodnota shody jsou povinné.", - "rule_save_failed": "Uložení pravidla selhalo.", - "rule_delete_failed": "Smazání pravidla selhalo.", - "rule_saved": "Pravidlo bylo uloženo.", - "rule_deleted": "Pravidlo bylo smazáno." - }, - "cross_platform": { - "title": "Meziplatformní kompatibilita", - "tab_matrix": "Matice kompatibility", - "tab_distribution": "Distribuce", - "tab_protocols": "Protokoly", - "tab_limitations": "Omezení", - "matrix_hint": "Matice podpory funkcí napříč všemi platformami. Zelená = plná podpora, žlutá = částečná, šedá = nedostupné, modrá = plánováno.", - "col_feature": "Funkce", - "legend_full": "Plná podpora", - "legend_partial": "Částečná podpora", - "legend_none": "Nedostupné", - "legend_planned": "Plánováno", - "platform_breakdown": "Rozdělení podle platforem", - "arch_breakdown": "Rozdělení podle architektury", - "version_breakdown": "Rozdělení podle verzí", - "summary": "Souhrn", - "total_devices": "Celkem zařízení", - "unique_platforms": "Platformy", - "unique_archs": "Architektury", - "unique_versions": "Verze klientů", - "no_devices": "Zatím nejsou registrována žádná zařízení.", - "protocols_hint": "Vyjednávání schopností protokolu zajišťuje, že každý klient obdrží pouze funkce, které podporuje. Server přizpůsobuje chování na základě nahlášených schopností.", - "capability_negotiation": "Vyjednávání schopností", - "codec_support": "Podpora kodeků (online zařízení)", - "feature_support": "Podpora funkcí (online zařízení)", - "no_codec_data": "Žádná data o kodecích z online zařízení nejsou k dispozici.", - "no_feature_data": "Žádná data o funkcích z online zařízení nejsou k dispozici.", - "protobuf_schema": "Schéma ClientCapabilities Protobuf", - "diagram_client": "Klient", - "diagram_server": "Server BetterDesk", - "diagram_peer": "Vzdálený partner", - "limitations_hint": "Každá platforma má specifická omezení, která ovlivňují dostupné funkce. Při plánování nasazení tato omezení zohledněte.", - "feat_desktop_client": "Desktopový klient", - "feat_background_agent": "Agent na pozadí", - "feat_remote_target": "Vzdálený cíl", - "feat_screen_capture": "Snímání obrazovky", - "feat_input_injection": "Vkládání vstupu", - "feat_file_transfer": "Přenos souborů", - "feat_clipboard_sync": "Synchronizace schránky", - "feat_audio_streaming": "Streamování zvuku", - "feat_chat": "Chat", - "feat_h264": "H.264 Kodek", - "feat_vp9": "VP9 Kodek", - "feat_av1": "AV1 Kodek", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webový prohlížeč", - "platform_chromeos": "ChromeOS", - "status_production": "Produkce", - "status_testing": "Testování", - "status_planned": "Plánováno", - "status_limited": "Omezeno", - "status_experimental": "Experimentální", - "limit_win_uac": "Pro instalaci služby a vkládání vstupu na zabezpečených plochách je vyžadováno zvýšení oprávnění (UAC).", - "limit_win_service": "Běží jako služba NSSM; instalace vyžaduje oprávnění administrátora.", - "limit_win_firewall": "Pravidla brány Windows Firewall musí povolit porty 21115-21119 pro relay připojení.", - "limit_linux_wayland": "Wayland kompozitory omezují programové snímání obrazovky; je vyžadováno PipeWire portal API.", - "limit_linux_pipewire": "Snímání zvuku vyžaduje PipeWire; PulseAudio záloha je dostupná, ale omezená.", - "limit_linux_arm": "Sestavení pro ARM64 jsou k dispozici; některé kodeky mohou používat softwarové dekódování (pomalejší).", - "limit_mac_screen": "V Předvolbách systému > Soukromí a zabezpečení je vyžadováno oprávnění k nahrávání obrazovky.", - "limit_mac_signing": "Agent musí být pro distribuci podepsán pomocí Apple Developer ID.", - "limit_mac_notarize": "Pro macOS Gatekeeper je vyžadována notarizace (při distribuci mimo App Store).", - "limit_android_projection": "MediaProjection API vyžaduje souhlas uživatele pro každou relaci snímání obrazovky.", - "limit_android_accessibility": "Vkládání vstupu vyžaduje Službu přístupnosti; omezeno v Androidu 14+.", - "limit_android_battery": "Služba na pozadí je omezena režimem Doze; může vyžadovat výjimku z optimalizace baterie.", - "limit_ios_capture": "Apple zakazuje snímání obrazovky na pozadí; podporován je pouze režim prohlížení.", - "limit_ios_input": "Vkládání vstupu není povoleno; pouze vzdálené sledování a chat.", - "limit_ios_appstore": "Distribuce pouze přes App Store; TestFlight pro beta testování.", - "limit_web_https": "WebCodecs API a WebRTC vyžadují HTTPS; HTTP přechází na JMuxer (omezené kodeky).", - "limit_web_codec": "Podpora kodeků závisí na prohlížeči; H.264 je široce podporován, VP9/AV1 se liší.", - "limit_web_performance": "Výkon je omezen pískovištěm (sandbox) prohlížeče; bez přímé hardwarové akcelerace.", - "limit_chrome_crostini": "Plná podpora agenta pouze uvnitř Crostini Linux kontejneru.", - "limit_chrome_pwa": "Režim PWA poskytuje pouze webové funkce; bez nativních schopností agenta.", - "limit_chrome_input": "Vkládání vstupu není podporováno mimo kontejner Crostini.", - "feat_session_recording": "Nahrávání relace", - "feat_multi_monitor": "Wiele monitorow", - "feat_unattended_access": "Dostep nienadzorowany", - "limit_win_virtual_account": "Uslugi dzialaja pod izolowanymi kontami wirtualnymi zamiast LocalSystem; niestandardní sciezki logow moga vyžadujec dostosowania ACL.", - "limit_linux_unprivileged": "Uslugi dzialaja jako dedykowany nieuprzywilejowany uzytkownik 'betterdesk' z zabezpieczeniami systemd (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Bezpečnostní audit", - "tab_overview": "Přehled", - "tab_events": "Auditní události", - "tab_hardening": "Zabezpečení (Hardening)", - "tab_vulnerabilities": "Zranitelnosti", - "security_score": "Skóre zabezpečení", - "failed_logins": "Neúspěšná přihlášení (24h)", - "active_bans": "Aktivní zákazy", - "api_keys": "API klíče", - "old_keys": "Staré klíče (>90 dní)", - "security_checks": "Bezpečnostní kontroly", - "tls_status": "Stav TLS", - "pass": "V pořádku", - "warning": "Varování", - "fail": "Chyba", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "Zabezpečený WebSocket", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "all_events": "Všechny události", - "event_login_failed": "Přihlášení selhalo", - "event_login_success": "Přihlášení úspěšné", - "event_peer_banned": "Partner (Peer) zakázán", - "event_ip_banned": "IP adresa zakázána", - "event_config_changed": "Konfigurace změněna", - "event_key_created": "Klíč vytvořen", - "refresh": "Obnovit", - "col_time": "Čas", - "col_action": "Akce", - "col_actor": "Původce", - "col_target": "Cíl", - "col_ip": "IP adresa", - "col_details": "Podrobnosti", - "no_events": "Nenalezeny žádné auditní události.", - "hardening_hint": "Priority zabezpečení pro vaše nasazení BetterDesk. Položky jsou seřazeny podle závažnosti.", - "no_hardening": "Žádné položky k zabezpečení nejsou k dispozici.", - "vuln_hint": "Výsledky skenování zranitelností závislostí. Pravidelně spouštějte 'npm audit' pro udržení bezpečnosti.", - "no_vulns": "Nenalezeny žádné zranitelnosti. Vaše závislosti jsou bezpečné." - }, - "languages": { - "title": "Správa jazyků", - "total_languages": "Celkem jazyků", - "fully_translated": "Plně přeloženo", - "needs_review": "Vyžaduje kontrolu", - "reference_keys": "Referenční klíče", - "no_languages": "Nebyly nalezeny žádné jazykové soubory.", - "badge_reference": "Referenční", - "badge_review": "Vyžaduje kontrolu", - "badge_complete": "Dokončeno", - "coverage": "pokrytí", - "keys": "klíče", - "missing": "chybí", - "extra": "navíc", - "view_missing": "Zobrazit chybějící", - "fix_missing": "Opravit chybějící", - "missing_keys_for": "Chybějící klíče pro", - "missing_keys_count": "chybějících klíčů (zobrazeny výchozí anglické hodnoty)", - "and_more": "a {n} dalších...", - "all_keys_present": "Všechny klíče jsou přítomny!", - "confirm_fix": "Přidat chybějící klíče do {code} s výchozími anglickými hodnotami?", - "fixed_title": "Klíče opraveny", - "fixed_msg": "Chybějící klíče v {code} je nutné přeložit ručně.", - "no_fix_needed": "Žádné chybějící klíče k opravě." - }, - "resource_control": { - "title": "Řízení prostředků", - "tab_overview": "Přehled", - "tab_usb": "Kontrola USB", - "tab_optical": "Optické mechaniky", - "tab_monitors": "Monitory", - "tab_disks": "Přístup k diskům", - "tab_quotas": "Kvóty prostředků", - "compliance_by_category": "Shoda podle kategorií", - "device_compliance": "Shoda zařízení", - "search_devices": "Hledat zařízení...", - "col_device": "Zařízení", - "col_platform": "Platforma", - "col_status": "Stav", - "col_usb": "USB", - "col_optical": "Optické", - "col_monitors": "Monitory", - "col_disks": "Disky", - "col_quotas": "Kvóty", - "col_actions": "Akce", - "stat_total_devices": "Celkem zařízení", - "stat_compliant": "V shodě", - "stat_partial": "Částečná shoda", - "stat_noncompliant": "Nevyhovuje", - "stat_compliance_rate": "Míra shody", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Částečně", - "badge_noncompliant": "Chyba", - "btn_configure": "Konfigurovat", - "no_devices": "Nenalezena žádná zařízení", - "usb_title": "Kontrola USB portů", - "usb_hint": "Řízení přístupu k USB úložištím pro vybrané zařízení nebo výchozí zásada pro celou organizaci.", - "usb_storage_policy": "Zásady USB úložišť", - "usb_whitelist": "Povolená zařízení (jedno na řádek)", - "usb_whitelist_hint": "VID:PID (např. 0781:5583)", - "usb_audit_log": "Logovat připojení USB zařízení", - "optical_title": "Kontrola optických mechanik", - "optical_hint": "Řízení přístupu k CD/DVD/Blu-ray mechanikám pro vybrané zařízení.", - "optical_policy": "Zásady optických mechanik", - "optical_audit_log": "Logovat přístup k optickým mechanikám", - "monitors_title": "Správa monitorů", - "monitors_hint": "Konfigurace nastavení monitorů včetně maximálního počtu, vynucení rozlišení, jasu a plánů napájení.", - "monitors_max_count": "Maximální počet monitorů (0 = neomezeno)", - "monitors_max_hint": "0 znamená bez omezení", - "monitors_resolution": "Max. rozlišení", - "monitors_brightness": "Limit jasu", - "monitors_power_schedule": "Plán napájení", - "monitors_power_hint": "např. off:22:00-06:00", - "disks_title": "Kontrola přístupu k diskům", - "disks_hint": "Konfigurace zásad přístupu k diskům včetně režimu pouze pro čtení, vynucení šifrování a viditelnosti oddílů.", - "disks_readonly": "Vynutit režim pouze pro čtení", - "disks_encryption": "Vyžadovat šifrování (BitLocker/LUKS)", - "disks_smart": "Povolit monitorování S.M.A.R.T.", - "disks_hidden": "Skryté oddíly", - "disks_hidden_hint": "Čárkou oddělená písmena disků nebo body připojení", - "quotas_title": "Kvóty prostředků", - "quotas_hint": "Nastavení kvót CPU, RAM, šířky pásma a disku na uživatele pro vybrané zařízení.", - "quotas_cpu": "Limit CPU", - "quotas_ram": "Limit RAM", - "quotas_bandwidth": "Limit šířky pásma (Mbps)", - "quotas_bandwidth_hint": "0 = neomezeno", - "quotas_disk_quota": "Disková kvóta (GB)", - "quotas_disk_hint": "0 = neomezeno", - "quotas_process_whitelist": "Seznam povolených procesů (jeden na řádek)", - "quotas_process_hint": "např. chrome.exe, code.exe", - "policy_allowed": "Povoleno", - "policy_blocked": "Blokováno", - "policy_whitelist": "Pouze povolené", - "policy_any": "Jakýkoliv" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Vizuální editor toků pro CDAP mosty", - "new_flow": "Nový tok", - "open_flow": "Otevřít tok", - "save_flow": "Uložit tok", - "run_flow": "Spustit", - "debug": "Ladit", - "deploy": "Nasadit", - "undo": "Zpět", - "redo": "Znovu", - "untitled": "Nepojmenovaný tok", - "code_mode": "Režim kódu", - "toggle_grid": "Přepnout mřížku", - "zoom_in": "Přiblížit", - "zoom_out": "Oddálit", - "zoom_fit": "Přizpůsobit obrazovce", - "palette": "Paleta uzlů", - "search_nodes": "Hledat uzly...", - "cat_sources": "Zdroje", - "cat_processing": "Zpracování", - "cat_outputs": "Výstupy", - "empty_title": "Začněte tvořit", - "empty_desc": "Přetáhněte uzly z palety a začněte stavět tok", - "browse_templates": "Procházet šablony", - "inspector": "Inspektor", - "select_node": "Vyberte uzel pro zobrazení jeho vlastností", - "console": "Konzole", - "clear_console": "Vymazat", - "console_ready": "Studio připraveno", - "label": "Štítek", - "configuration": "Konfigurace", - "connections": "Připojení", - "inputs": "Vstupy", - "outputs": "Výstupy", - "delete_node": "Smazat uzel", - "nodes": "Uzly", - "wires": "Propojení", - "status_ready": "Připraveno", - "status_deployed": "Nasazeno", - "flow_name": "Název toku", - "flow_desc": "Popis", - "loading": "Načítání...", - "no_flows": "Zatím žádné uložené toky", - "confirm_delete": "Opravdu chcete tento tok smazat?", - "templates": "Šablony", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT odběr", - "node_webhook": "Webhook", - "node_device_telemetry": "Telemetrie zařízení", - "node_database_query": "Databázový dotaz", - "node_file_watch": "Sledování souborů", - "node_filter": "Filtr", - "node_transform": "Transformace", - "node_aggregate": "Agregace", - "node_delay": "Zpoždění", - "node_debounce": "Debounce", - "node_switch": "Přepínač (Switch)", - "node_merge": "Sloučit", - "node_script": "Skript", - "node_widget_update": "Aktualizace widgetu", - "node_alert": "Upozornění", - "node_command": "Příkaz", - "node_log": "Logovat", - "node_rest_call": "REST volání", - "node_mqtt_publish": "MQTT publikace", - "node_database_write": "Zápis do databáze", - "node_email": "E-mail", - "node_modbus_write": "Modbus zápis", - "import_flow": "Importovat tok" - }, - "updates": { - "tab_title": "Aktualizace", - "title": "Aktualizace softwaru", - "desc": "Kontrola nových verzí a aktualizace konzole BetterDesk z GitHubu", - "current_version": "Nainstalovaná verze", - "latest_version": "Nejnovější verze", - "status": "Stav", - "check_now": "Zkontrolovat aktualizace", - "checking": "Kontrola…", - "up_to_date": "Aktuální", - "update_available": "Aktualizace je k dispozici", - "changelog": "Poznámky k vydání", - "no_changelog": "Poznámky k vydání nejsou k dispozici", - "files_changed": "Změněné soubory", - "files": "souborů", - "changes_unavailable": "Nepodařilo se načíst seznam změn. Aktualizaci lze přesto nainstalovat.", - "create_backup": "Vytvořit zálohu před aktualizací", - "install": "Instalovat aktualizaci", - "install_confirm": "Opravdu chcete nainstalovat tuto aktualizaci? Konzole se po dokončení restartuje.", - "installing": "Instalace aktualizace…", - "creating_backup": "Vytváření zálohy…", - "downloading": "Stahování souborů…", - "install_success": "Aktualizace byla úspěšně nainstalována. Konzole se restartuje…", - "install_failed": "Instalace aktualizace selhala", - "restarting": "Čekání na restart konzole…", - "restart_complete": "Konzole byla úspěšně restartována", - "restart_timeout": "Konzole se neresetovala včas. Zkontrolujte ji prosím ručně.", - "no_version": "Nebyla vybrána žádná verze. Nejprve zkontrolujte aktualizace.", - "backups_title": "Zálohy aktualizací", - "backups_desc": "Automatické zálohy vytvořené před každou aktualizací", - "no_backups": "Nenalezeny žádné zálohy aktualizací", - "restore": "Obnovit", - "restore_confirm": "Opravdu chcete obnovit systém z této zálohy? Změněné soubory budou přepsány.", - "restore_success": "Záloha byla úspěšně obnovena. Konzole se restartuje…", - "baseline_set": "Základní verze nastavena", - "commits_behind": "commitů pozadu", - "total_files": "Celkem souborů", - "applied": "Použito", - "failed": "Selhalo", - "skipped": "Přeskočeno", - "removed": "Odstraněno", - "auto": "Automaticky", - "manual": "Ručně", - "component_console": "Webová konzole", - "component_server": "Server Go", - "component_agent": "Agent", - "component_scripts": "Skripty a Docker", - "component_other": "Ostatní", - "server_rebuild_warning": "Zdrojový kód Go serveru se změnil – je vyžadováno přebudování binárního souboru. Použijte ALL-IN-ONE skript nebo kompilujte ručně.", - "include_server": "Zahrnout Go Server (kompilace a nasazení)", - "checking_go": "Kontrola Go…", - "go_not_found": "Go není nainstalováno", - "go_check_failed": "Nepodařilo se ověřit dostupnost Go", - "server_building": "Kompilace Go serveru… To může trvat několik minut.", - "server_built": "Binární soubor serveru byl zkompilován", - "server_build_failed": "Kompilace serveru selhala", - "server_stale_title": "Binární soubor serveru je zastaralý", - "server_stale_desc": "Zdrojový kód serveru Go byl aktualizován, ale spuštěný binární soubor nebyl znovu sestaven. Sestavte jej nyní, aby se použily aktualizace zabezpečení a knihoven.", - "rebuild_server": "Znovu sestavit binární soubor serveru", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Binární soubor serveru byl znovu sestaven a restartován", - "rebuild_server_failed": "Opětovné sestavení binárního souboru serveru se nezdařilo", - "server_deployed": "Binární soubor serveru byl nasazen", - "server_deploy_failed": "Nasazení serveru selhalo", - "server_build_note": "Kompilace serveru může trvat 1–5 minut. Stránka bude během kompilace nereagovat.", - "server_source_downloading": "Stahování zdrojového kódu serveru…", - "delete": "Smazat", - "delete_confirm": "Trvale smazat zálohu {name}? Tuto akci nelze vrátit zpět.", - "delete_success": "Záloha byla smazána", - "delete_failed": "Smazání zálohy selhalo", - "retention_label": "Ponechat N nejnovějších záloh", - "retention_hint": "Starší zálohy jsou po každé aktualizaci automaticky smazány. Pro ponechání všech použijte 0.", - "retention_saved": "Nastavení uchovávání uloženo", - "retention_invalid": "Počet musí být celé číslo mezi 0 a 1000", - "retention_required_for_prune": "Nejprve nastavte hodnotu uchovávání vyšší než 0", - "prune_now": "Použít nyní", - "prune_confirm": "Ponechat pouze {n} nejnovějších záloh a zbytek smazat?", - "prune_done": "Smazáno {n} záloh", - "total_size": "Celková velikost", - "backups_count": "záloh", - "strategy_label": "Metoda aktualizace", - "strategy_download": "Stáhnout sestavený soubor", - "strategy_compile": "Kompilovat ze zdroje", - "both_available": "Stáhnout i kompilovat", - "download_available": "Stažení k dispozici", - "no_method": "Žádná metoda aktualizace", - "no_release": "Žádné vydání", - "available": "K dispozici", - "server_downloading": "Stahování binárního souboru serveru…", - "server_downloaded": "Binární soubor serveru stažen", - "server_download_failed": "Stažení binárního souboru serveru selhalo", - "server_download_note": "Předpřipravený binární soubor bude stažen z GitHub Releases. To obvykle trvá méně než minutu.", - "install_go_hint": "Nainstalujte Go z https://go.dev/dl/ pro povolení kompilace, nebo publikujte verzi s předpřipravenými binárními soubory.", - "strategy_install_go": "Auto-instalace Go a kompilace", - "strategy_install_go_hint": "Stáhne oficiální Go toolchain (~120 MB) do datového adresáře konzole a poté zkompiluje server. Použijte, pokud Go není na hostiteli nainstalováno.", - "auto_strategy": "Automaticky", - "auto_strategy_hint": "Konzole vybere nejlepší dostupnou metodu (stažení → kompilace → automatická instalace Go).", - "auto_available": "Automatické přebudování připraveno", - "toolchain_ready": "Nástroje (toolchain) nainstalovány", - "toolchain_will_install": "Go toolchain bude nainstalován automaticky", - "toolchain_downloading": "Stahování Go toolchain…", - "toolchain_failed": "Instalace Go toolchain selhala", - "modal_title": "Instalace aktualizace", - "modal_done_title": "Aktualizace dokončena", - "modal_close": "Zavřít", - "modal_reload_now": "Znovu načíst konzoli", - "phase_confirm": "Potvrzení", - "phase_backup": "Záloha", - "phase_console": "Soubory konzole", - "phase_server": "Server Go", - "phase_restart": "Restartování", - "phase_done": "Hotovo", - "preparing": "Příprava…", - "backup_skipped": "Záloha přeskočena (dle volby uživatele)", - "server_skipped": "Go server přeskočen", - "server_not_selected": "Go server nebyl vybrán", - "server_processing": "Zpracování aktualizace Go serveru…", - "no_restart_needed": "Restart není vyžadován", - "complete": "Aktualizace byla použita", - "complete_summary": "Aktualizace byla úspěšně dokončena.", - "complete_with_errors": "Aktualizace skončila, ale některé kroky selhaly. Viz podrobnosti níže.", - "modal_done_with_errors_title": "Aktualizace dokončena s chybami", - "console_will_restart": "Proces konzole se nyní restartuje…", - "restart_complete_msg": "Konzole se restartovala. Klikněte na tlačítko pro načtení nové verze. Stránka se automaticky obnoví za 8 sekund.", - "refresh_recommended": "Statické soubory byly změněny – pro zobrazení nového rozhraní obnovte stránku.", - "confirm_title": "Použít aktualizaci", - "confirm_with_backup": "Před aktualizací bude automaticky vytvořena záloha.", - "confirm_no_backup": "Záloha nebude vytvořena (pokračujete na vlastní riziko)." - }, - "permissions": { - "title": "Oprávnění", - "subtitle": "Správa oprávnění na základě rolí a uživatelská přepsání", - "info_title": "Jak fungují oprávnění", - "info_desc": "Každá role má výchozí oprávnění. Jednotlivá oprávnění můžete přidávat nebo odebírat přepnutím níže. Vlastní úpravy jsou zvýrazněny a lze je kdykoli vrátit do výchozího stavu.", - "select_role": "Vybrat roli", - "select_role_placeholder": "Zvolte roli...", - "reset_overrides": "Resetovat všechna přepsání", - "granted": "Uděleno", - "overrides": "Přepsání", - "level": "Úroveň", - "super_admin_tag": "Plný přístup", - "server_level_tag": "Úroveň serveru", - "custom": "Vlastní", - "default": "Výchozí", - "revert": "Vrátit na výchozí", - "saved": "Oprávnění aktualizováno", - "reverted": "Vráceno na výchozí", - "all_reverted": "Všechna přepsání byla vrácena", - "confirm_reset": "Resetovat všechna vlastní přepsání této role na výchozí hodnoty?", - "empty_title": "Vyberte roli", - "empty_desc": "Zvolte roli z rozbalovací nabídky výše pro zobrazení a správu jejích oprávnění.", - "locked_title": "Super Admin", - "locked_desc": "Super Admin má ve výchozím nastavení všechna oprávnění a nelze jej upravovat.", - "cat_device": "Zařízení", - "cat_user": "Uživatelé", - "cat_server": "Serverová oprávnění", - "cat_org": "Organizace", - "cat_audit": "Audit a monitorování", - "cat_cdap": "CDAP", - "cat_enrollment": "Registrace", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Zobrazit zařízení", - "perm_device_connect": "Připojit k zařízením", - "perm_device_edit": "Upravit zařízení", - "perm_device_delete": "Smazat zařízení", - "perm_device_ban": "Zakázat / povolit zařízení", - "perm_device_change_id": "Změnit ID zařízení", - "perm_user_view": "Zobrazit uživatele", - "perm_user_create": "Vytvořit uživatele", - "perm_user_edit": "Upravit uživatele", - "perm_user_delete": "Smazat uživatele", - "perm_server_config": "Konfigurace serveru", - "perm_server_keys": "Správa API klíčů", - "perm_org_create": "Vytvořit organizace", - "perm_org_edit": "Upravit organizace", - "perm_org_delete": "Smazat organizace", - "perm_org_manage_users": "Správa uživatelů organizace", - "perm_org_manage_devices": "Správa zařízení organizace", - "perm_audit_view": "Zobrazit auditní logy", - "perm_metrics_view": "Zobrazit metriky", - "perm_blocklist_edit": "Upravit seznam blokovaných", - "perm_cdap_view": "Zobrazit CDAP zařízení", - "perm_cdap_command": "Odesílat CDAP příkazy", - "perm_cdap_terminal": "Přístup k CDAP terminálu", - "perm_cdap_files": "Přístup k CDAP souborům", - "perm_enrollment_manage": "Správa registrací", - "perm_enrollment_approve": "Schvalovat registrace", - "perm_chat_access": "Přístup k chatu", - "perm_branding_edit": "Upravit branding", - "perm_server_attestation": "Atest wydajnosci servera" - }, - "notifications": { - "title": "Oznámení", - "empty": "Žádná nová oznámení", - "mark_all_read": "Označit vše jako přečtené", - "see_all": "Zobrazit všechny žádosti o pomoc", - "help_request": "Žádost o pomoc", - "just_now": "právě teď" - }, - "accessibility": { - "title": "Usnadnění", - "subtitle": "Přizpůsobte konzoli svému zraku, pohybu a potřebám při čtení.", - "close": "Zavřít menu usnadnění", - "profiles": "Rychlé profily", - "profile_low_vision": "Slabozrakost", - "profile_low_vision_hint": "Větší text, silný kontrast a zvýraznění prvků.", - "profile_dyslexia": "Pohodlné čtení", - "profile_dyslexia_hint": "Čitelné písmo a širší rozestupy.", - "profile_motion_safe": "Bezpečný pohyb", - "profile_motion_safe_hint": "Omezuje přechody a pozastavuje animace.", - "profile_color_assist": "Podpora barev", - "profile_color_assist_hint": "Barevný filtr, štítky a zvýrazněné odkazy.", - "reading": "Čtení", - "font_size": "Velikost písma", - "line_height": "Výška řádku", - "letter_spacing": "Prokládání znaků", - "word_spacing": "Mezery mezi slovy", - "readable_font": "Čitelné písmo", - "readable_font_hint": "Používá široké, známé tvary písmen.", - "dyslexia_spacing": "Dyslektické rozestupy", - "dyslexia_spacing_hint": "Přidává extra mezery pro dlouhé texty.", - "visual": "Vizuální", - "contrast": "Kontrast", - "contrast_normal": "Normální", - "contrast_high_dark": "Vysoký kontrast (tmavý)", - "contrast_high_light": "Vysoký kontrast (světlý)", - "contrast_yellow_black": "Žlutá na černé", - "color_filter": "Filtr barevného vidění", - "filter_none": "Žádný", - "filter_protanopia": "Protanopie", - "filter_deuteranopia": "Deuteranopie", - "filter_tritanopia": "Tritanopie", - "filter_achromatopsia": "Achromatopsie", - "saturation": "Sytost barev", - "underline_links": "Podtrhnout odkazy", - "underline_links_hint": "Zviditelní odkazy bez závislosti na barvě.", - "highlight_links": "Zvýraznit akce", - "highlight_links_hint": "Ohraničí odkazy a tlačítka.", - "highlight_headings": "Zvýraznit nadpisy", - "highlight_headings_hint": "Označí nadpisy sekcí barevným pruhem.", - "hide_media": "Ztlumit média", - "hide_media_hint": "Ztmaví obrázky, videa a plátna.", - "interaction": "Interakce", - "strong_focus": "Výrazné zaměření", - "strong_focus_hint": "Zobrazuje velký rámeček kolem aktivního prvku.", - "large_cursor": "Velký kurzor", - "large_cursor_hint": "Používá větší, vysoce kontrastní ukazatel.", - "reduce_motion": "Omezit pohyb", - "reduce_motion_hint": "Zkracuje přechody a plynulé posouvání.", - "pause_animations": "Pozastavit animace", - "pause_animations_hint": "Zastaví smyčkové vizuální pohyby.", - "reading_guide": "Vodítko pro čtení", - "reading_guide_hint": "Sleduje ukazatel jasnou linkou.", - "reading_mask": "Maska pro čtení", - "reading_mask_hint": "Ztmaví obsah nad a pod ukazatelem.", - "preview": "Náhled", - "preview_title": "Náhled pracovního prostoru", - "preview_text": "Zkontrolujte, zda jsou text, odkazy, ovládací prvky a štítky dobře čitelné, než toto menu zavřete.", - "preview_link": "Odkaz na detaily zařízení", - "preview_status": "Online", - "preview_button": "Primární akce", - "preview_secondary": "Sekundární", - "reset": "Obnovit", - "done": "Hotovo" - }, - "server_mgmt": { - "title": "Správa serveru", - "subtitle": "Ovládací rozhraní typu Cockpit pro hostitele konzole BetterDesk (BETA).", - "beta_tooltip": "Beta funkce — ve vývoji.", - "notice_title": "Beta funkce", - "notice_body": "Tyto nástroje běží přímo na hostiteli, kde se nachází proces konzole BetterDesk. Všechny operace jsou auditovány. Rozsah funkcí se v budoucích verzích rozšíří.", - "tab_overview": "Přehled", - "tab_terminal": "Terminál", - "tab_files": "Soubory", - "tab_services": "Služby", - "cpu": "CPU", - "memory": "Paměť", - "load": "Průměrné zatížení (Load)", - "disks": "Disky", - "history": "Historie (posledních 60 vzorků)", - "host_info": "Informace o hostiteli", - "cores": "jader", - "uptime": "Doba běhu", - "no_disks": "Data o discích nejsou k dispozici", - "info_hostname": "Název hostitele", - "info_platform": "Platforma", - "info_kernel": "Jádro (Kernel)", - "info_node": "Node.js", - "info_process_id": "ID procesu (PID)", - "info_pty_available": "PTY dostupné", - "term_connect": "Připojit", - "term_disconnect": "Odpojit", - "term_clear": "Vymazat", - "term_status": "Stav", - "term_connecting": "Připojování…", - "term_connected": "Připojeno", - "term_disconnected": "Odpojeno", - "term_error": "Chyba připojení", - "term_warning": "Příkazy běží pod uživatelem, který vlastní proces konzole. Pro povolení zvýšení oprávnění přidejte pravidlo do sudoers.", - "term_hint": "Tip: zadejte `sudo -i` pro zvýšení oprávnění (vyžaduje konfiguraci sudoers).", - "term_lib_failed": "Nepodařilo se načíst knihovnu terminálu", - "files_up": "O úroveň výš", - "files_go": "Přejít", - "files_mkdir": "Nová složka", - "files_name": "Název", - "files_size": "Velikost", - "files_perms": "Oprávnění", - "files_mtime": "Změněno", - "files_rename": "Přejmenovat", - "files_rename_prompt": "Nový název:", - "files_empty": "Prázdný adresář", - "files_error": "Nepodařilo se načíst seznam adresářů", - "read_failed": "Nepodařilo se přečíst soubor", - "save_failed": "Nepodařilo se uložit soubor", - "rename_failed": "Přejmenování selhalo", - "delete_failed": "Smazání selhalo", - "delete_confirm": "Smazat tuto položku?", - "mkdir_prompt": "Název nové složky:", - "mkdir_failed": "Nepodařilo se vytvořit složku", - "file_saved": "Soubor uložen", - "binary_warn": "Binární soubor — pouze náhled", - "encoding_utf8": "Text UTF-8", - "truncated": "zkráceno", - "full": "celý", - "svc_search_placeholder": "Hledat služby…", - "svc_name": "Služba", - "svc_state": "Stav", - "svc_description": "Popis", - "svc_empty": "Nebyly nalezeny žádné služby", - "svc_load_failed": "Nepodařilo se načíst služby", - "svc_action_failed": "Akce selhala", - "svc_confirm": "Spustit", - "svc_start": "Spustit", - "svc_stop": "Zastavit", - "svc_restart": "Restartovat", - "svc_reload": "Znovu načíst (Reload)", - "svc_enable": "Povolit", - "svc_disable": "Zakázat", - "svc_status": "Stav" - }, - "download": { - "title": "Stáhnout agenta BetterDesk", - "choose_platform": "Vyberte platformu", - "choose_platform_hint": "Vyberte instalátor odpovídající vašemu operačnímu systému.", - "download": "Stáhnout", - "building": "Sestavování…", - "failed": "Sestavení se nezdařilo", - "need_help": "Potřebujete pomoc?", - "powered_by": "Vytvořeno s" - }, - "server_attestation": { - "title": "Atestace serveru", - "subtitle": "Benchmark výkonu, který určuje kapacitu souběžných vzdálených připojení při 80% prahu CPU, RAM a disku.", - "warning_title": "Zátěžový test", - "warning_body": "Benchmark simuluje paralelní připojení WebSocket k signálním serverům a relay. Spouštějte mimo špičku — tento test zatěžuje produkci.", - "run_benchmark": "Spustit benchmark", - "abort": "Přerušit", - "download_report": "Stáhnout JSON report", - "last_test": "Poslední test", - "no_test_yet": "Dosud nebyl spuštěn žádný benchmark", - "max_connections": "Maximální počet připojení", - "threshold_80": "80% práh — závěrečné metriky", - "disk": "Disk", - "ramp_chart": "Graf nárůstu zátěže", - "connections": "Připojení", - "connections_short": "při.", - "tier_guide_title": "Co znamená každá úroveň?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "BEZ HODNOCENÍ", - "tier_bronze_desc": "1–25 souběžných připojení — malý VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 připojení — server střední třídy (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 připojení — výkonný server (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 připojení — enterprise infrastruktura (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ připojení — turbo třída: dedikovaný hardware, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Poznámka: v Dockeru mohou metriky CPU/RAM odrážet limity kontejneru spíše než fyzický hostitel.", - "badge_tooltip": "Atestace serveru BetterDesk — certifikace výkonu serveru", - "confirm_run": "Tento benchmark provede zátěžový test serveru se simulovanými připojeními. Pokračovat?", - "starting": "Spouštění...", - "complete": "Benchmark dokončen", - "signal_peers": "Signální peers", - "relay_sessions": "Relay relace", - "page_error": "Ne udalo sie zaladowac strony atestu servera", - "mode_estimated": "Szacunek (WebSocket niedostepny)", - "incomplete": "Benchmark zakonczony bez przypisanego tieru" + "form": { + "cancel": "Zrušit" } + } } diff --git a/web-nodejs/lang/da.json b/web-nodejs/lang/da.json index 781cac73..b4267dfb 100644 --- a/web-nodejs/lang/da.json +++ b/web-nodejs/lang/da.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Danish", - "native_name": "Dansk", - "flag": "🇩🇰", - "needs_review": true + "_meta": { + "name": "Danish", + "native_name": "Dansk", + "flag": "🇩🇰", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Indlæser...", + "confirm": "Bekræft", + "alert": "Advarsel", + "prompt": "Indtast værdi", + "copied": "Kopieret til udklipsholder", + "save": "Gem", + "saved": "Gemt", + "error": "Fejl", + "success": "Succes", + "warning": "Advarsel", + "info": "Information", + "all": "Alle", + "cancel": "Annuller", + "delete": "Slet", + "actions": "Handlinger", + "close": "Luk", + "required": "påkrævet", + "name_required": "Navn er påkrævet", + "active": "Aktiv", + "inactive": "Inaktiv", + "invalid_json": "Ugyldig JSON", + "field_required": "{field} er påkrævet", + "back": "Tilbage", + "edit": "Rediger", + "yes": "Ja", + "no": "Nej" + }, + "nav": { + "main": "Hoved", + "tools": "Værktøjer", + "system": "System", + "dashboard": "Oversigt", + "devices": "Enheder", + "keys": "Nøgler", + "generator": "Generator", + "settings": "Indstillinger", + "users": "Brugere", + "inventory": "Inventar", + "tickets": "Sager", + "help_requests": "Hjælpeanmodninger", + "activity": "Aktivitet", + "automation": "Automatisering", + "file_transfer": "Filoverførsel", + "network": "Netværk", + "dataguard": "DataGuard", + "reports": "Rapporter", + "tenants": "Lejere", + "registrations": "Registrations", + "management": "Ledelse", + "toggle_sidebar": "Skift sidebjælke", + "cdap": "CDAP enheder", + "fleet": "Flåde", + "scaling": "Skalering", + "cross_platform": "Krydsplatform", + "tokens": "Enhedstokens", + "organizations": "Organisationer", + "policies": "Politikker", + "attestation": "Attestering", + "remote": "Fjernskrivebord", + "toolkit": "Værktøjskasse", + "security_audit": "Sikkerhedsrevision", + "languages": "Sprog", + "resource_control": "Ressourcekontrol", + "chat": "Chat", + "help": "Hjælp", + "expand_sidebar": "Udvid sidebjælken", + "toggle_theme": "Skift tema", + "sdk_studio": "SDK Studio", + "login": "Log ind", + "permissions": "Tilladelser", + "server_management": "Serveradministration", + "server_attestation": "Serverattest", + "commercialization": "Kommercialisering" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Log ind på BetterDesk-konsollen", + "username": "Brugernavn", + "username_placeholder": "Indtast brugernavn", + "password": "Adgangskode", + "password_placeholder": "Indtast adgangskode", + "remember_me": "Remember me", + "login_failed": "Login mislykkedes. Tjek venligst dine legitimationsoplysninger.", + "invalid_credentials": "Ugyldigt brugernavn eller adgangskode.", + "username_collision": "En lokal konto med dette brugernavn findes allerede. Log ind med din lokale adgangskode, eller bed en administrator om at omdøbe eller fjerne den konfliktende konto.", + "fill_all_fields": "Udfyld venligst alle felter", + "logout_confirm": "Er du sikker på, at du vil logge ud?", + "change_password": "Skift adgangskode", + "password_required": "Adgangskode er påkrævet", + "totp_title": "To-faktor-godkendelse", + "totp_subtitle": "Indtast den 6-cifrede kode fra din autentificeringsapp", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Brug en gendannelseskode i stedet", + "totp_use_code": "Brug autentificeringskode i stedet", + "totp_recovery_code": "Gendannelseskode", + "totp_back_to_login": "Tilbage til login", + "totp_invalid_code": "Ugyldig bekræftelseskode. Prøv venligst igen.", + "totp_enter_code": "Indtast venligst en 6-cifret kode", + "totp_enter_recovery": "Indtast venligst en gendannelseskode", + "totp_session_expired": "Session udløb. Log venligst ind igen.", + "totp_already_enabled": "To-faktor-godkendelse er allerede aktiveret", + "pro_only_account": "Denne konto er kun til RustDesk desktop-klient. Brug venligst RustDesk-appen til at logge ind.", + "passwords_mismatch": "Adgangskoder stemmer ikke overens", + "or": "eller", + "login_sso": "Log ind med SSO", + "login_sso_with": "Log ind med {{provider}}", + "oidc_denied": "Adgang blev nægtet af identitetsudbyderen.", + "oidc_invalid": "Ugyldig OIDC tilbagekald. Prøv venligst igen.", + "oidc_failed": "OIDC-godkendelse mislykkedes. Prøv venligst igen.", + "oidc_error": "Der opstod en fejl under SSO login.", + "oidc_no_account": "Din konto blev ikke fundet, og automatisk registrering er deaktiveret.", + "totp_rate_limited": "For mange forsøg. Prøv venligst igen senere.", + "emergency_mode_banner": "Go server utilgængelig — kører i nødtilstand (kun admin, begrænset funktionalitet)" + }, + "dashboard": { + "title": "Oversigt", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Enheder i alt", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktive forbindelser", + "offline_devices": "Offline", + "server_status": "Serverstatus", + "quick_actions": "Hurtige handlinger", + "manage_devices": "Administrer tilsluttede enheder", + "view_keys": "Se servernøgler", + "generate_config": "Generer klientkonfiguration", + "server_settings": "Konfigurer indstillinger", + "greeting_morning": "Godmorgen, {name}", + "greeting_afternoon": "God eftermiddag, {name}", + "greeting_evening": "God aften, {name}", + "greeting_night": "Godnat, {name}", + "health_overview": "Sundhedsoversigt", + "devices_online": "Enheder online", + "active_alerts": "Aktive advarsler", + "recent_connections": "Enheder i alt", + "server_uptime": "Server oppetid", + "activity_feed": "Seneste aktivitet", + "no_recent_activity": "Ingen nylig aktivitet", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Prøv Desktop Mode for et arbejdsområde med flere vinduer med overvågningswidgets.", + "tip_keyboard_shortcuts": "Tryk på Ctrl+K hvor som helst for at åbne kommandopaletten for hurtig søgning.", + "tip_address_book": "Synkroniser din adressebog på tværs af enheder ved at logge på fra RustDesk-klienten.", + "tip_2fa": "Aktiver to-faktor-godkendelse i Indstillinger for ekstra kontosikkerhed.", + "tip_bulk_actions": "Vælg flere enheder, og brug massehandlinger til at administrere dem på én gang.", + "tip_theme": "Skift mellem mørke og lyse temaer i sidebjælkeindstillingerne.", + "tip_cdap": "Tilslut IoT-enheder og industrielle sensorer via CDAP-gatewayen.", + "tip_tutorials": "Klik på knappen Hjælp i nederste højre hjørne for interaktive selvstudier." + }, + "devices": { + "title": "Enheder", + "id": "ID", + "hostname": "Hostname", + "username": "Brugernavn", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Oprettet", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Søg efter enheder...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Synkroniseringsstatus", + "sync_success": "Status synkroniseret", + "empty_title": "Ingen enheder fundet", + "empty_text": "Ingen enheder matcher dine nuværende filtre", + "edit_title": "Enhedsdetaljer", + "delete_title": "Slet enhed", + "delete_confirm": "Er du sikker på, at du vil slette enheden {id}?", + "delete_warning": "Du er ved at slette denne enhed permanent:", + "delete_permanent": "Denne handling kan ikke fortrydes. Alle data knyttet til denne enhed vil blive permanent fjernet fra databasen.", + "delete_success": "Enheden blev slettet", + "revoke_option": "Tilbagekald enhed", + "revoke_hint": "Bloker enheds-id og afbryd aktive forbindelser", + "revoke_success": "Enheden blev tilbagekaldt", + "details": "Enhedsdetaljer", + "ban_title": "Forbyd enhed", + "ban_confirm": "Er du sikker på, at du vil udelukke enheden {id}?", + "ban_success": "Enheden blev forbudt", + "unban_title": "Fjern udelukkelse af enhed", + "unban_confirm": "Er du sikker på, at du vil fjerne forbuddet mod enheden {id}?", + "unban_success": "Enheden blev ophævet forbuddet", + "change_id": "Change ID", + "change_id_title": "Skift enheds-id", + "new_id": "New ID", + "change_id_hint": "Kun 6-16 tegn, bogstaver, tal, bindestreger og understregninger", + "change_id_success": "Enheds-id blev ændret", + "id_length_error": "ID skal være på 6-16 tegn", + "id_format_error": "ID kan kun indeholde bogstaver, tal, bindestreger og understregninger", + "bulk_delete_title": "Slet flere enheder", + "bulk_delete_confirm": "Er du sikker på, at du vil slette {count}-enheder?", + "bulk_delete_success": "{count}-enheder blev slettet", + "columns": "Columns", + "toggle_columns": "Skift synlige kolonner", + "not_found": "Enheden blev ikke fundet", + "delete_failed": "Kunne ikke slette enheden", + "change_id_failed": "Kunne ikke ændre enheds-id", + "invalid_id": "Ugyldigt enheds-id (6-16 tegn påkrævet)", + "invalid_id_format": "Ugyldigt id-format (kun bogstaver, tal, bindestreger, understregninger)", + "id_exists": "Enheds-id findes allerede", + "no_selection": "Ingen enheder valgt", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP tilsluttet", + "revoke": "Tilbagekald", + "access_policy": "Adgangspolitik", + "unattended_access": "Uovervåget adgang", + "enable_unattended": "Aktiver uovervåget adgang", + "access_password": "Adgangskode", + "password_configured": "Adgangskode indstillet", + "no_password": "Ingen adgangskode", + "new_password": "Ny adgangskode (lad tom for at holde den opdateret)", + "clear_password": "Ryd adgangskode", + "access_schedule": "Adgangsplan", + "enable_schedule": "Aktiver tidsbaseret adgang", + "allowed_days": "Tilladte dage", + "start_time": "Starttidspunkt", + "end_time": "Sluttidspunkt", + "timezone": "Tidszone", + "allowed_operators": "Tilladte operatører", + "all_operators": "Alle operatører (lad tom)", + "operators_hint": "Kommaseparerede brugernavne. Lad stå tomt for at tillade alle operatører.", + "last_updated_by": "Sidst opdateret af", + "access_policy_saved": "Adgangspolitikken er gemt", + "tabs": { + "overview": "Oversigt", + "hardware": "Hardware", + "metrics": "Målinger", + "connections": "Forbindelser", + "audit": "Audit", + "info": "Info", + "history": "Historie" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Hukommelse", + "disk": "Disk", + "os": "Operativsystem", + "hostname": "Værtsnavn", + "uptime": "Oppetid", + "load_avg": "Belastningsgennemsnit", + "network": "Netværksadaptere", + "no_data": "Ingen tilgængelige hardwaredata", + "title": "Hardware information", + "gpu": "Grafikkort" }, - "common": { - "loading": "Indlæser...", - "confirm": "Bekræft", - "alert": "Advarsel", - "prompt": "Indtast værdi", - "copied": "Kopieret til udklipsholder", - "save": "Gem", - "saved": "Gemt", - "error": "Fejl", - "success": "Succes", - "warning": "Advarsel", - "info": "Information", - "all": "Alle", - "cancel": "Annuller", - "delete": "Slet", - "actions": "Handlinger", - "close": "Luk", - "required": "påkrævet", - "name_required": "Navn er påkrævet", - "active": "Aktiv", - "inactive": "Inaktiv", - "invalid_json": "Ugyldig JSON", - "field_required": "{field} er påkrævet", - "back": "Tilbage", - "edit": "Rediger", - "yes": "Ja", - "no": "Nej" - }, - "nav": { - "main": "Hoved", - "tools": "Værktøjer", - "system": "System", - "dashboard": "Oversigt", - "devices": "Enheder", - "keys": "Nøgler", - "generator": "Generator", - "settings": "Indstillinger", - "users": "Brugere", - "inventory": "Inventar", - "tickets": "Sager", - "help_requests": "Hjælpeanmodninger", - "activity": "Aktivitet", - "automation": "Automatisering", - "file_transfer": "Filoverførsel", - "network": "Netværk", - "dataguard": "DataGuard", - "reports": "Rapporter", - "tenants": "Lejere", - "registrations": "Registrations", - "management": "Ledelse", - "toggle_sidebar": "Skift sidebjælke", - "cdap": "CDAP enheder", - "fleet": "Flåde", - "scaling": "Skalering", - "cross_platform": "Krydsplatform", - "tokens": "Enhedstokens", - "organizations": "Organisationer", - "policies": "Politikker", - "attestation": "Attestering", - "remote": "Fjernskrivebord", - "toolkit": "Værktøjskasse", - "security_audit": "Sikkerhedsrevision", - "languages": "Sprog", - "resource_control": "Ressourcekontrol", - "chat": "Chat", - "help": "Hjælp", - "expand_sidebar": "Udvid sidebjælken", - "toggle_theme": "Skift tema", - "sdk_studio": "SDK Studio", - "login": "Log ind", - "permissions": "Tilladelser", - "server_management": "Serveradministration", - "server_attestation": "Serverattest" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Log ind på BetterDesk-konsollen", - "username": "Brugernavn", - "username_placeholder": "Indtast brugernavn", - "password": "Adgangskode", - "password_placeholder": "Indtast adgangskode", - "remember_me": "Remember me", - "login_failed": "Login mislykkedes. Tjek venligst dine legitimationsoplysninger.", - "invalid_credentials": "Ugyldigt brugernavn eller adgangskode.", - "username_collision": "En lokal konto med dette brugernavn findes allerede. Log ind med din lokale adgangskode, eller bed en administrator om at omdøbe eller fjerne den konfliktende konto.", - "fill_all_fields": "Udfyld venligst alle felter", - "logout_confirm": "Er du sikker på, at du vil logge ud?", - "change_password": "Skift adgangskode", - "password_required": "Adgangskode er påkrævet", - "totp_title": "To-faktor-godkendelse", - "totp_subtitle": "Indtast den 6-cifrede kode fra din autentificeringsapp", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Brug en gendannelseskode i stedet", - "totp_use_code": "Brug autentificeringskode i stedet", - "totp_recovery_code": "Gendannelseskode", - "totp_back_to_login": "Tilbage til login", - "totp_invalid_code": "Ugyldig bekræftelseskode. Prøv venligst igen.", - "totp_enter_code": "Indtast venligst en 6-cifret kode", - "totp_enter_recovery": "Indtast venligst en gendannelseskode", - "totp_session_expired": "Session udløb. Log venligst ind igen.", - "totp_already_enabled": "To-faktor-godkendelse er allerede aktiveret", - "pro_only_account": "Denne konto er kun til RustDesk desktop-klient. Brug venligst RustDesk-appen til at logge ind.", - "passwords_mismatch": "Adgangskoder stemmer ikke overens", - "or": "eller", - "login_sso": "Log ind med SSO", - "login_sso_with": "Log ind med {{provider}}", - "oidc_denied": "Adgang blev nægtet af identitetsudbyderen.", - "oidc_invalid": "Ugyldig OIDC tilbagekald. Prøv venligst igen.", - "oidc_failed": "OIDC-godkendelse mislykkedes. Prøv venligst igen.", - "oidc_error": "Der opstod en fejl under SSO login.", - "oidc_no_account": "Din konto blev ikke fundet, og automatisk registrering er deaktiveret.", - "totp_rate_limited": "For mange forsøg. Prøv venligst igen senere.", - "emergency_mode_banner": "Go server utilgængelig — kører i nødtilstand (kun admin, begrænset funktionalitet)" - }, - "dashboard": { - "title": "Oversigt", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Enheder i alt", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktive forbindelser", - "offline_devices": "Offline", - "server_status": "Serverstatus", - "quick_actions": "Hurtige handlinger", - "manage_devices": "Administrer tilsluttede enheder", - "view_keys": "Se servernøgler", - "generate_config": "Generer klientkonfiguration", - "server_settings": "Konfigurer indstillinger", - "greeting_morning": "Godmorgen, {name}", - "greeting_afternoon": "God eftermiddag, {name}", - "greeting_evening": "God aften, {name}", - "greeting_night": "Godnat, {name}", - "health_overview": "Sundhedsoversigt", - "devices_online": "Enheder online", - "active_alerts": "Aktive advarsler", - "recent_connections": "Enheder i alt", - "server_uptime": "Server oppetid", - "activity_feed": "Seneste aktivitet", - "no_recent_activity": "Ingen nylig aktivitet", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Prøv Desktop Mode for et arbejdsområde med flere vinduer med overvågningswidgets.", - "tip_keyboard_shortcuts": "Tryk på Ctrl+K hvor som helst for at åbne kommandopaletten for hurtig søgning.", - "tip_address_book": "Synkroniser din adressebog på tværs af enheder ved at logge på fra RustDesk-klienten.", - "tip_2fa": "Aktiver to-faktor-godkendelse i Indstillinger for ekstra kontosikkerhed.", - "tip_bulk_actions": "Vælg flere enheder, og brug massehandlinger til at administrere dem på én gang.", - "tip_theme": "Skift mellem mørke og lyse temaer i sidebjælkeindstillingerne.", - "tip_cdap": "Tilslut IoT-enheder og industrielle sensorer via CDAP-gatewayen.", - "tip_tutorials": "Klik på knappen Hjælp i nederste højre hjørne for interaktive selvstudier." - }, - "devices": { - "title": "Enheder", - "id": "ID", - "hostname": "Hostname", - "username": "Brugernavn", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Oprettet", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Søg efter enheder...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Synkroniseringsstatus", - "sync_success": "Status synkroniseret", - "empty_title": "Ingen enheder fundet", - "empty_text": "Ingen enheder matcher dine nuværende filtre", - "edit_title": "Enhedsdetaljer", - "delete_title": "Slet enhed", - "delete_confirm": "Er du sikker på, at du vil slette enheden {id}?", - "delete_warning": "Du er ved at slette denne enhed permanent:", - "delete_permanent": "Denne handling kan ikke fortrydes. Alle data knyttet til denne enhed vil blive permanent fjernet fra databasen.", - "delete_success": "Enheden blev slettet", - "revoke_option": "Tilbagekald enhed", - "revoke_hint": "Bloker enheds-id og afbryd aktive forbindelser", - "revoke_success": "Enheden blev tilbagekaldt", - "details": "Enhedsdetaljer", - "ban_title": "Forbyd enhed", - "ban_confirm": "Er du sikker på, at du vil udelukke enheden {id}?", - "ban_success": "Enheden blev forbudt", - "unban_title": "Fjern udelukkelse af enhed", - "unban_confirm": "Er du sikker på, at du vil fjerne forbuddet mod enheden {id}?", - "unban_success": "Enheden blev ophævet forbuddet", - "change_id": "Change ID", - "change_id_title": "Skift enheds-id", - "new_id": "New ID", - "change_id_hint": "Kun 6-16 tegn, bogstaver, tal, bindestreger og understregninger", - "change_id_success": "Enheds-id blev ændret", - "id_length_error": "ID skal være på 6-16 tegn", - "id_format_error": "ID kan kun indeholde bogstaver, tal, bindestreger og understregninger", - "bulk_delete_title": "Slet flere enheder", - "bulk_delete_confirm": "Er du sikker på, at du vil slette {count}-enheder?", - "bulk_delete_success": "{count}-enheder blev slettet", - "columns": "Columns", - "toggle_columns": "Skift synlige kolonner", - "not_found": "Enheden blev ikke fundet", - "delete_failed": "Kunne ikke slette enheden", - "change_id_failed": "Kunne ikke ændre enheds-id", - "invalid_id": "Ugyldigt enheds-id (6-16 tegn påkrævet)", - "invalid_id_format": "Ugyldigt id-format (kun bogstaver, tal, bindestreger, understregninger)", - "id_exists": "Enheds-id findes allerede", - "no_selection": "Ingen enheder valgt", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP tilsluttet", - "revoke": "Tilbagekald", - "access_policy": "Adgangspolitik", - "unattended_access": "Uovervåget adgang", - "enable_unattended": "Aktiver uovervåget adgang", - "access_password": "Adgangskode", - "password_configured": "Adgangskode indstillet", - "no_password": "Ingen adgangskode", - "new_password": "Ny adgangskode (lad tom for at holde den opdateret)", - "clear_password": "Ryd adgangskode", - "access_schedule": "Adgangsplan", - "enable_schedule": "Aktiver tidsbaseret adgang", - "allowed_days": "Tilladte dage", - "start_time": "Starttidspunkt", - "end_time": "Sluttidspunkt", - "timezone": "Tidszone", - "allowed_operators": "Tilladte operatører", - "all_operators": "Alle operatører (lad tom)", - "operators_hint": "Kommaseparerede brugernavne. Lad stå tomt for at tillade alle operatører.", - "last_updated_by": "Sidst opdateret af", - "access_policy_saved": "Adgangspolitikken er gemt", - "tabs": { - "overview": "Oversigt", - "hardware": "Hardware", - "metrics": "Målinger", - "connections": "Forbindelser", - "audit": "Audit", - "info": "Info", - "history": "Historie" - }, - "hardware": { - "cpu": "Processor", - "memory": "Hukommelse", - "disk": "Disk", - "os": "Operativsystem", - "hostname": "Værtsnavn", - "uptime": "Oppetid", - "load_avg": "Belastningsgennemsnit", - "network": "Netværksadaptere", - "no_data": "Ingen tilgængelige hardwaredata", - "title": "Hardware information", - "gpu": "Grafikkort" - }, - "display_name": "Vist navn", - "display_name_placeholder": "Brugerdefineret navn (tilsidesætter værtsnavn)", - "note_placeholder": "Bemærkninger om denne enhed", - "tags": "Tags", - "filter_by_tags": "Filtrer efter tags", - "no_tags": "Ingen tags", - "all_groups": "Alle grupper", - "create_group": "Opret gruppe", - "manage_groups": "Administrer grupper", - "group_name": "Gruppenavn", - "group_name_placeholder": "f.eks. Medie-pc'er", - "dynamic_group": "Dynamisk gruppe fra tag", - "dynamic_group_hint": "Enheder med dette tag tilsluttes automatisk.", - "tag_filter": "Tag-filter", - "group_allowed_users": "Tilladte brugere", - "group_allowed_users_hint": "Lad være tom for at holde gruppen synlig for alle med enhedstilladelser.", - "group_tag_required": "Tag-filter er påkrævet til dynamiske grupper", - "group_invalid": "Ugyldig gruppe-id", - "group_not_found": "Gruppen blev ikke fundet", - "group_saved": "Enhedsgruppen er gemt", - "groups_saved": "Enhedsgrupper blev gemt", + "display_name": "Vist navn", + "display_name_placeholder": "Brugerdefineret navn (tilsidesætter værtsnavn)", + "note_placeholder": "Bemærkninger om denne enhed", + "tags": "Tags", + "filter_by_tags": "Filtrer efter tags", + "no_tags": "Ingen tags", + "all_groups": "Alle grupper", + "create_group": "Opret gruppe", + "manage_groups": "Administrer grupper", + "group_name": "Gruppenavn", + "group_name_placeholder": "f.eks. Medie-pc'er", + "dynamic_group": "Dynamisk gruppe fra tag", + "dynamic_group_hint": "Enheder med dette tag tilsluttes automatisk.", + "tag_filter": "Tag-filter", + "group_allowed_users": "Tilladte brugere", + "group_allowed_users_hint": "Lad være tom for at holde gruppen synlig for alle med enhedstilladelser.", + "group_tag_required": "Tag-filter er påkrævet til dynamiske grupper", + "group_invalid": "Ugyldig gruppe-id", + "group_not_found": "Gruppen blev ikke fundet", + "group_saved": "Enhedsgruppen er gemt", + "groups_saved": "Enhedsgrupper blev gemt", "group_membership_added": "Tilføjet til gruppe", "group_membership_removed": "Fjernet fra gruppe", - "no_groups": "Ingen grupper endnu", - "manual_groups": "Manuelle grupper", - "dynamic_memberships": "Dynamiske medlemskaber", - "group_allowed_user_groups": "Tilladte brugergrupper", - "group_allowed_user_groups_hint": "Brugere i udvalgte brugergrupper kan få adgang til denne enhedsgruppe.", - "no_user_groups": "Ingen brugergrupper", - "edit_group": "Rediger gruppe", - "delete_group": "Slet gruppe", - "delete_group_confirm": "Vil du slette enhedsgruppen {name}?", - "group_deleted": "Enhedsgruppen blev slettet", - "folder_group_readonly": "Mappestøttede grupper administreres fra mapper.", - "manage_user_groups": "Administrer brugergrupper", - "restore_failed": "Enhed konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Klienten kontaktede API'et for nylig, men er ikke registreret på signalserveren (UDP :21116). Genstart klienten efter servermigration.", - "per_page": "Pr. side" - }, - "keys": { - "title": "Servernøgler", - "subtitle": "Offentlig nøgle og konfiguration til RustDesk-klienter", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Serverinformation", - "download": "Download nøgle", - "show_qr": "Show QR", - "qr_hint": "Scan denne QR-kode med RustDesk mobilapp", - "no_key": "Ingen offentlig nøgle fundet", - "no_key_to_copy": "Ingen nøgle at kopiere", - "no_qr": "QR-kode er ikke tilgængelig", - "download_success": "Nøglefil blev downloadet", - "not_found": "Nøglen blev ikke fundet", - "api_not_found": "API nøgle ikke fundet" - }, - "settings": { - "title": "Indstillinger", - "subtitle": "Konsolkonfiguration og kontoindstillinger", - "tab_general": "General", - "tab_server": "Serverindstillinger", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Sprog", - "change_password": "Skift adgangskode", - "password_desc": "Opdater adgangskoden til din konto", - "current_password": "Nuværende adgangskode", - "new_password": "Ny adgangskode", - "confirm_password": "Bekræft adgangskode", - "save_password": "Opdater adgangskode", - "password_changed": "Adgangskoden blev ændret", - "fill_all_fields": "Udfyld venligst alle felter", - "passwords_not_match": "Adgangskoder stemmer ikke overens", - "password_requirements": "Adgangskodekrav", - "password_requirements_not_met": "Adgangskoden opfylder ikke kravene", - "req_length": "Mindst 8 tegn", - "req_uppercase": "Mindst ét stort bogstav", - "req_lowercase": "Mindst ét lille bogstav", - "req_number": "Mindst ét nummer", - "server_info": "Serverinformation", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Seneste konsolaktivitet", - "no_audit_logs": "Ingen revisionslogfiler fundet", - "backend_title": "Backend-konfiguration", - "backend_desc": "Vælg hvilken server-backend, der skal bruges til enhedsadministration og signal-/relætjenester.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Standard RustDesk signal- og relæservere (hbbs + hbbr). Grundlæggende HTTP API med begrænsede endepunkter.", - "backend_betterdesk_desc": "Forbedret Go-baseret server med fuld REST API, JWT-godkendelse, blokeringsliste, tags, WebSocket-hændelser i realtid og revisionslogning.", - "backend_feature_signal": "Signalserver (ID-registrering)", - "backend_feature_relay": "Relæserver (forbindelsesrelæ)", - "backend_feature_basic_api": "Grundlæggende REST API", - "backend_feature_full_api": "Fuld REST API (34+ endepunkter)", - "backend_feature_jwt": "JWT-godkendelse & TOTP 2FA", - "backend_feature_blocklist": "Administration af IP/ID-blokeringslister", - "backend_feature_tags": "Enhedsmærker og gruppering", - "backend_feature_audit": "Revider hændelseslogning", - "backend_feature_websocket": "Real-time WebSocket begivenheder", - "backend_connection": "Forbindelse", - "backend_api_url": "API URL", - "backend_test": "Test forbindelse", - "backend_testing": "Tester...", - "backend_save": "Anvend Backend", - "backend_saved": "Serverens backend blev ændret. Enhedsdata vil nu blive administreret af den nye backend.", - "backend_save_failed": "Kunne ikke skifte serverbackend", - "backend_test_success": "Forbindelsen lykkedes! Serveren er tilgængelig.", - "backend_test_failed": "Forbindelsen mislykkedes. Serveren er ikke tilgængelig.", - "backend_confirm_switch": "Er du sikker på, at du vil skifte serverbackend? Dette vil ændre, hvordan enheder administreres.", - "backend_unreachable": "Kan ikke skifte: Målserveren er ikke tilgængelig. Start serveren først.", - "invalid_backend": "Ugyldigt backend-valg. Vælg 'rustdesk' eller 'betterdesk'.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "To-faktor-godkendelse", - "totp_desc": "Tilføj et ekstra lag af sikkerhed med TOTP autentificeringsapps (Google Authenticator, Microsoft Authenticator, Authy osv.)", - "totp_enabled": "2FA aktiveret", - "totp_enabled_desc": "Din konto er beskyttet med to-faktor-godkendelse.", - "totp_disabled": "2FA ikke aktiveret", - "totp_disabled_desc": "Aktiver to-faktor-godkendelse for yderligere kontosikkerhed.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Installer en godkendelsesapp på din telefon", - "totp_step2": "Scan QR-koden nedenfor", - "totp_step3": "Indtast den 6-cifrede kode for at bekræfte", - "totp_manual_key": "Manual key", - "totp_enter_code": "Indtast bekræftelseskode", - "totp_verify_enable": "Bekræft og aktiver", - "totp_enabled_success": "To-faktor-godkendelse aktiveret!", - "totp_recovery_warning": "Gem disse gendannelseskoder på et sikkert sted. Hver kode kan kun bruges én gang. Hvis du mister adgangen til din autentificeringsapp, kan du bruge disse koder til at logge ind.", - "totp_done": "Done", - "totp_disable_warning": "Deaktivering af to-faktor-godkendelse vil gøre din konto mindre sikker. Indtast din adgangskode for at bekræfte.", - "totp_disabled_success": "To-faktor-godkendelse er blevet deaktiveret.", - "tutorials_title": "Tutorials og vejledninger", - "tutorials_desc": "Styr guidede ture og hjælpeoverlejringer, der vises overalt på konsollen", - "tutorials_enabled": "Aktiver selvstudier", - "tutorials_enabled_hint": "Når de er deaktiveret, starter selvstudier ikke automatisk, og knappen Hjælp vil være skjult", - "tutorials_reset_hint": "Marker alle selvstudier som usete, så de kan vises igen", - "tutorials_enabled_toast": "Selvstudier aktiveret", - "tutorials_disabled_toast": "Selvstudier deaktiveret", - "tutorials_reset_toast": "Alle tutorials er blevet nulstillet", - "tab_auth": "Autentificering", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurer ekstern godkendelse via LDAP eller Active Directory. Brugere vil være i stand til at logge ind med deres domæneoplysninger.", - "ldap_enabled": "Aktiver LDAP-godkendelse", - "ldap_enabled_hint": "Når det er aktiveret, kan brugere logge ind med LDAP/AD-legitimationsoplysninger. Lokale konti fungerer stadig som reserve.", - "ldap_connection": "Serverforbindelse", - "ldap_host": "vært", - "ldap_port": "Havn", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Spring over TLS-bekræftelse", - "ldap_timeout": "Forbindelse timeout (s)", - "ldap_timeout_hint": "Sekunder til at vente på LDAP-serversvar", - "ldap_bind_mode": "Indbindingstilstand", - "ldap_direct_bind": "Direkte Bind", - "ldap_direct_bind_hint": "Bind direkte med en DN-skabelon i stedet for at bruge en servicekonto til at søge.", - "ldap_bind_dn": "Bind DN (servicekonto)", - "ldap_bind_dn_hint": "Fornemt navn på en skrivebeskyttet tjenestekonto, der bruges til at søge efter brugere.", - "ldap_bind_password": "Bind adgangskode", - "ldap_base_dn": "Base DN", - "ldap_base_dn_hint": "Søgegrundlag for at finde brugere, f.eks. dc=eksempel, dc=com", - "ldap_user_filter": "Brugerfilter", - "ldap_user_filter_hint": "LDAP filter for at finde brugere. Brug {{username}} som pladsholder. Standard: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Direct Bind DN skabelon", - "ldap_direct_bind_dn_hint": "DN skabelon til direkte binding. Brug {{username}} som pladsholder, f.eks. uid={{username}},ou=brugere,dc=eksempel,dc=com", - "ldap_user_attrs": "Brugerattributter", - "ldap_attr_id": "Brugernavn attribut", - "ldap_attr_email": "E-mail-attribut", - "ldap_attr_name": "Vist navn-attribut", - "ldap_group_mapping": "Gruppe → Rollekortlægning", - "ldap_group_base_dn": "Gruppe Base DN", - "ldap_group_base_dn_hint": "Lad være tom for at bruge hovedbase-DN", - "ldap_group_filter": "Gruppefilter", - "ldap_group_attr_name": "Gruppenavnsattribut", - "ldap_default_role": "Standardrolle", - "ldap_default_role_hint": "Rolle tildelt til brugere, hvis LDAP-grupper ikke matcher nogen tilknytning", - "ldap_role_viewer": "Seer", - "ldap_role_operator": "Operatør", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Gruppe → Rollekort", - "ldap_group_role_map_hint": "Kortlæg LDAP-grupper til BetterDesk-roller. Format: GroupDN=rolle adskilt af | (rør). Eksempel: CN=Admins,DC=eksempel,DC=com=admin|CN=Ops,DC=eksempel,DC=com=operatør", - "ldap_test_connection": "Test forbindelse", - "ldap_testing": "Tester...", - "ldap_test_success": "Forbindelsen lykkedes! LDAP-serveren er tilgængelig, og bindingslegitimationsoplysningerne er gyldige.", - "ldap_test_failed": "Forbindelsen mislykkedes", - "ldap_save": "Gem LDAP-konfiguration", - "ldap_saved": "LDAP-konfigurationen blev gemt", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfigurer Single Sign-On via en OpenID Connect-udbyder (Azure AD, Okta, Google, Keycloak osv.).", - "oidc_enabled": "Aktiver OIDC-godkendelse", - "oidc_enabled_hint": "Tillad brugere at logge ind med en ekstern identitetsudbyder", - "oidc_provider": "Identitetsudbyder", - "oidc_display_name": "Knap vist navn", - "oidc_display_name_hint": "Tekst vist på login-knappen (f.eks. Azure AD, Okta)", - "oidc_issuer_url": "Udsteder URL", - "oidc_issuer_url_hint": "OpenID Connect-udsteder URL (opdagelsen vil være automatisk)", - "oidc_client_id": "Klient-id", - "oidc_client_secret": "Klientens hemmelighed", - "oidc_redirect_url": "Omdiriger URL (tilbagekald)", - "oidc_redirect_url_hint": "Skal matche nøjagtigt det, der er konfigureret i din IdP. Normalt: http(s)://din-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Omfang", - "oidc_use_pkce": "Brug PKCE (anbefales)", - "oidc_auto_discovery": "Automatisk opdagelse", - "oidc_allow_signup": "Opret brugere automatisk", - "oidc_manual_endpoints": "Manuelle slutpunkts-URL'er", - "oidc_authorization_url": "Autorisationsslutpunkt", - "oidc_token_url": "Token-endepunkt", - "oidc_userinfo_url": "Brugerinfo Slutpunkt", - "oidc_claim_mapping": "Krav kortlægning", - "oidc_claim_username": "Brugernavn krav", - "oidc_claim_email": "E-mail krav", - "oidc_claim_name": "Vist navnekrav", - "oidc_claim_groups": "Gruppekrav", - "oidc_role_mapping": "Rollekortlægning", - "oidc_default_role": "Standardrolle", - "oidc_group_role_map": "Gruppe → Rollekortlægning", - "oidc_group_role_map_hint": "Én tilknytning pr. linje: gruppenavn=rolle (f.eks. admins=admin, operatører=operatør)", - "oidc_test_discovery": "Test Discovery", - "oidc_testing": "Tester...", - "oidc_test_success": "Opdagelsen lykkedes! Slutpunkter løst.", - "oidc_test_failed": "Opdagelsen mislykkedes", - "oidc_issuer_required": "Udsteder URL er påkrævet for at teste opdagelse", - "oidc_save": "Gem OIDC-konfiguration", - "oidc_saved": "OIDC-konfigurationen blev gemt", - "connection_mode_title": "Forbindelsesstrategi", - "connection_mode_desc": "Styr, hvordan RustDesk-skrivebordsklienter opretter forbindelse.", - "connection_mode_label": "Standard forbindelsestilstand", - "connection_mode_p2p_first": "P2P først (anbefalet) — forsøg direkte forbindelse, skift til relay ved fejl", - "connection_mode_relay_only": "Kun relay — alle sessioner bruger relayserveren", - "connection_mode_advanced": "Avancerede indstillinger", - "connection_mode_fallback_ms": "P2P reserve-timeout (ms)", - "connection_mode_same_nat_relay": "Tving relay, når begge peers deler samme offentlige IP (NAT hairpin)", - "connection_mode_network_hint": "P2P kræver UDP-port 21116 tilgængelig mellem klienter.", - "connection_mode_save": "Gem", - "connection_mode_save_restart": "Gem og genstart server", - "connection_mode_saved": "Forbindelsestilstand gemt", - "connection_mode_restart_started": "Servergenstart påbegyndt", - "connection_mode_restart_failed": "Servergenstart mislykkedes", - "connection_mode_not_configurable": "Forbindelsestilstand kan ikke ændres på denne installation", - "connection_mode_source_saved": "Gemt i", - "connection_mode_source_defaults": "Bruger serverstandard (ikke skrivbar fra panel)", - "connection_mode_runtime": "Aktiv server", - "advanced_title": "Konfigurationsfiler", - "advanced_desc": "Rediger serverkonfigurationsfiler direkte. Ændringer kan kræve genstart af tjenester.", - "advanced_warning": "Disse filer indeholder hemmeligheder. Rediger kun, hvis du ved, hvad du laver.", - "advanced_files_label": "Filer", - "advanced_select_file": "Vælg en fil fra listen for at se eller redigere indholdet.", - "advanced_reload": "Genindlæs", - "advanced_save": "Gem fil", - "advanced_apply_restart": "Anvend (genstart tjeneste)", - "advanced_saved": "Konfigurationsfil gemt", - "advanced_restart_after_save": "Konfiguration gemt. Genstart den berørte tjeneste nu?", - "advanced_restart_confirm": "Genstart de relaterede BetterDesk-tjenester? Aktive forbindelser kan blive afbrudt kortvarigt.", - "advanced_restart_console_confirm": "Genstart webkonsolstjenesten? Din browsersession kobles fra kortvarigt.", - "advanced_restart_started": "Tjenesterestart påbegyndt", - "advanced_restart_done": "Konsol genstartet — genindlæser side…", - "advanced_restart_polling": "Venter på, at konsollen kommer online igen…", - "advanced_restart_timeout": "Genstart blev sendt, men konsollen reagerede ikke i tide. Tjek logs og genindlæs manuelt.", - "advanced_restart_failed": "Tjenesterestart mislykkedes", - "advanced_save_confirm": "Gem ændringer til denne fil? En sikkerhedskopi af den forrige version oprettes.", - "advanced_unsaved_confirm": "Du har ikke-gemte ændringer. Kassér dem?", - "advanced_no_files": "Ingen konfigurationsfiler tilgængelige på dette system.", - "advanced_readonly": "skrivebeskyttet", - "advanced_missing": "mangler", - "advanced_new_file": "Ny fil (oprettes ikke før du gemmer)", - "advanced_new_file_hint": "Ny fil — tilføj indhold og gem", - "advanced_backup_created": "sikkerhedskopi oprettet", - "advanced_restart_console": "Genstart webkonsolstjenesten for at anvende .env-ændringer.", - "advanced_restart_goserver": "Genstart BetterDesk Go-serveren for at indlæse bloklistingsændringer.", - "advanced_restart_systemd": "Efter redigering af systemd-enheder: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Genstart den berørte tjeneste for at anvende ændringer.", - "advanced_error_unknown": "Ukendt konfigurationsfil", - "advanced_error_not_found": "Filen eksisterer ikke", - "advanced_error_not_file": "Stien er ikke en almindelig fil", - "advanced_error_too_large": "Filen overskrider den maksimale redigerbare størrelse (512 KB)", - "advanced_error_binary": "Binære filer kan ikke redigeres i panelet", - "advanced_error_invalid": "Ugyldigt filindhold", - "advanced_error_not_writable": "Filen er ikke skrivbar af konsolprocessen", - "enrollment_title": "Enhedstilmelding (RustDesk)", - "enrollment_desc": "Styr, hvordan nye RustDesk-klienter registrerer sig.", - "enrollment_require_approval": "Kræv operatørgodkendelse (administreret tilstand)", - "enrollment_require_approval_hint": "Når aktiveret sættes ukendte klienter i kø, indtil en operatør godkender dem.", - "enrollment_rich_approve": "Fuld godkendelsesformular (navn, mappe, grupper, tags)", - "enrollment_rich_approve_hint": "Viser en detaljeret dialog ved godkendelse af tilmeldings- eller LAN-registreringsanmodninger.", - "enrollment_tag_picker": "Vælg tags fra eksisterende enhedstags", - "enrollment_tag_picker_hint": "Lader operatører vælge tags fra listen brugt på Enheder-siden.", - "enrollment_open_requests": "Åbne tilmeldingsanmodninger", - "enrollment_pending_count": "{count} ventende tilmeldingsanmodning(er)", - "tab_advanced": "Avanceret", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (tjenesteenhed)", - "advanced_file_systemd-server": "systemd: betterdesk-server (tjenesteenhed)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfiguration)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", - "advanced_restart_none": "Für diese Fil ist kein Tjenesteneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Login mislykkedes", - "action_logout": "Logout", - "action_password_change": "Adgangskode ændret", - "action_2fa_enable": "2FA aktiveret", - "action_2fa_disable": "2FA deaktiveret", - "action_user_create": "Bruger oprettet", - "action_user_update": "Bruger opdateret", - "action_user_delete": "Bruger slettet", - "action_settings_update": "Indstillinger opdateret", - "action_device_ban": "Enhed forbudt", - "action_device_unban": "Enhed ophævet", - "action_device_delete": "Enhed slettet" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Konfigurationsmuligheder", - "server_address": "Server adresse", - "server_address_hint": "Din servers domæne eller IP-adresse", - "custom_port": "Custom Port", - "port_hint": "Lad være tom som standard (21116)", - "relay_server": "Relæ server", - "relay_placeholder": "Samme som ID-server, hvis den er tom", - "relay_hint": "Valgfrit: separat relæserveradresse", - "include_key": "Inkluder offentlig nøgle i konfigurationen", - "generate": "Generer konfiguration", - "output": "Konfigurationsudgang", - "usage_title": "Tilslutningsdetaljer", - "generated": "Konfiguration genereret", - "server_required": "Serveradresse er påkrævet", - "nothing_to_copy": "Generer først en konfiguration", - "bundles_title": "Agent bundter", - "new_bundle": "Nyt bundt", - "editor_title": "Pakkeeditor", - "empty_state": "Vælg en pakke til venstre, eller opret en ny for at begynde.", - "loading": "Indlæser...", - "no_bundles": "Ingen bundter endnu. Opret din første.", - "bundle_name": "Bundens navn", - "bundle_name_hint": "Kun intern etiket — vises ikke til slutbrugere.", - "short_link": "Kort downloadlink", - "short_link_hint": "Bruges i den offentlige URL (/d/…). Kun små bogstaver, tal og bindestreger (2–32 tegn). Udfyldes automatisk fra pakkenavn — forkort for nemmere deling (f.eks. acme).", - "branding_section": "Branding", - "company_name": "Firma / mærkenavn", - "short_text": "Kort beskrivelse", - "contact_email": "Kontakt email", - "contact_phone": "Kontakt telefon", - "contact_url": "Kontakt hjemmeside", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG eller WebP. Maksimalt 256 KB.", - "logo_clear": "Fjern logo", - "primary_color": "Primær farve", - "accent_color": "Overskriftsfarve", - "default_lang": "Standardsprog", - "allow_unattended": "Tillad adgang uden opsyn", - "allow_unattended_hint": "Når den er aktiveret, viser agenten en permanent adgangskode for operatøradgang.", - "save": "Gem bundt", - "revoke": "Tilbagekald", - "unrevoke": "Genaktiver", - "revoked": "Tilbagekaldt", - "preview_title": "Liveforhåndsvisning", - "preview_hint": "Tilnærmet udseende af slutbrugeragentvinduet.", - "preview_default_name": "BetterDesk-support", - "preview_status_ready": "Klar", - "preview_id": "Dit ID", - "preview_password": "Adgangskode", - "preview_chat": "Chat med support", - "preview_settings": "Indstillinger (kun admin)", - "preview_quit": "Afslut (kun admin)", - "download_link_title": "Downloadlink", - "download_link_hint": "Del dette link med slutbrugere. De vil se en mærkevare-downloadside. Gamle hex-links virker stadig efter ændring af det korte link.", - "open_portal": "Åbn", - "created": "Bunden er oprettet", - "saved": "Bunden er gemt", - "deleted": "Bunden er slettet", - "revoked_ok": "Bunden tilbagekaldt", - "unrevoked_ok": "Bunden genaktiveret", - "link_copied": "Linket er kopieret til udklipsholderen", - "copy_failed": "Kunne ikke kopiere automatisk - kopier venligst manuelt", - "unsaved_confirm": "Vil du kassere ikke-gemte ændringer?", - "confirm_revoke": "Vil du tilbagekalde denne pakke? Downloadlinket holder op med at virke.", - "confirm_unrevoke": "Vil du genaktivere denne pakke?", - "confirm_delete": "Vil du slette denne pakke permanent? Dette kan ikke fortrydes.", - "errors": { - "validation_failed": "Validering mislykkedes", - "name_required": "Bundens navn er påkrævet", - "company_name_required": "Firmanavn er påkrævet", - "logo_invalid": "Logoet skal være en gyldig billedfil", - "logo_too_large": "Logo skal være 256 KB eller mindre", - "logo_read_failed": "Kunne ikke læse logofilen", - "primary_color_invalid": "Primærfarven skal være en hex-værdi (f.eks. #2563eb)", - "accent_color_invalid": "Overskriftsfarve skal være en hex-værdi (f.eks. #1e293b)", - "contact_url_invalid": "Kontaktwebstedet skal være en gyldig URL", - "server_host_required": "Offentlig serveradresse er påkrævet", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Kort link må kun indeholde små bogstaver, tal og bindestreger", - "slug_too_short": "Kort link skal være mindst 2 tegn", - "slug_too_long": "Kort link må højst være 32 tegn", - "slug_taken": "Dette korte link bruges allerede af en anden pakke" - }, - "legacy_title": "Klientkonfigurationsgenerator", - "connection_section": "Serverforbindelse", - "server_host": "Offentlig serveradresse", - "server_host_placeholder": "support.eksempel.dk eller 203.0.113.10", - "server_host_hint": "Domænenavn eller offentlig IP, hvor slutbrugerne når din BetterDesk-server.", - "use_https": "Brug HTTPS / WSS (anbefalet)", - "enrollment_token": "Enhedsregistrering", - "enrollment_token_hint": "Hver installation registrerer sig selv. Godkend nye enheder i Registreringspanelet.", - "enrollment_per_device": "Per enhed — godkend i Registreringer", - "background_color": "Vinduesbaggrund", - "surface_color": "Kortbaggrund", - "text_color": "Tekstfarve", - "text_muted_color": "Dæmpet tekstfarve", - "status_ready_color": "Klar-indikatorfarve", - "header_text_color": "Headertekstfarve", - "builds_title": "Klientbuilds", - "builds_hint": "Installationsprogrammer kompileret på denne server for hver platform.", - "rebuild_all": "Genbyg alle", - "rebuild_confirm": "Genbyg alle platforminstallationsprogrammer til denne pakke?", - "build_status_ready": "Klar", - "build_status_pending": "I kø", - "build_status_building": "Bygger", - "build_status_failed": "Fejlet", - "enrollment_token_pending": "Pro Enhed nach Genehmigung", - "enrollment_token_set": "Pro Enhed — in Registrierungen genehmigen", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislykkedes", - "build_error_hint": "Buildfejl", - "preview_help": "Anmod om hjælp" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID-server", - "relay_server": "Relæ server", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Tjekker...", - "label": "Status", - "no_signal": "Intet signal" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Tilslut via Desktop Client", - "remote_viewer": "Fjernvisning", - "web_remote": "Web-fjernbetjening", - "details": "Details", - "edit": "Rediger", - "delete": "Slet", - "ban": "Ban", - "unban": "Unban", - "save": "Gem", - "cancel": "Annuller", - "confirm": "Bekræft", - "close": "Luk", - "clear": "Clear", - "ok": "OK", - "saved": "Gemt", - "back": "Tilbage", - "create": "Opret", - "dismiss": "Dismiss", - "view_all": "Se alle", - "cdap_viewer": "CDAP Snapshot-visning", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s siden", - "minutes_ago": "{count}m siden", - "hours_ago": "{count}h siden", - "days_ago": "{count}d siden", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Brugerstyring", - "subtitle": "Administrer konsolbrugere og tilladelser", - "add_user": "Add User", - "edit_user": "Rediger bruger", - "username": "Brugernavn", - "username_placeholder": "Indtast brugernavn", - "username_hint": "Kun 3-32 tegn, bogstaver, tal og understregninger", - "password": "Adgangskode", - "password_placeholder": "Indtast adgangskode", - "password_hint": "Minimum 8 tegn med blandet store og små bogstaver, tal og symboler", - "password_leave_empty": "Lad være tom for at holde dig opdateret", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Oprettet", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Opret bruger", - "edit": "Rediger", - "reset_password": "Nulstil adgangskode", - "new_password": "Ny adgangskode", - "delete_title": "Slet bruger", - "delete_confirm": "Er du sikker på, at du vil slette brugeren {username}?", - "delete_success": "Brugeren blev slettet", - "user_created": "Bruger oprettet", - "user_updated": "Brugeren blev opdateret", - "password_reset_success": "Adgangskoden blev nulstillet", - "empty_title": "Ingen brugere fundet", - "empty_text": "Tilføj brugere for at administrere konsoladgang", - "fill_required": "Udfyld venligst alle obligatoriske felter", - "invalid_username": "Brugernavn må kun bestå af 3-32 tegn, bogstaver, tal og understregninger", - "username_exists": "Brugernavnet eksisterer allerede", - "weak_password": "Adgangskoden er for svag", - "password_too_short": "Adgangskoden skal være på mindst 8 tegn", - "invalid_role": "Ugyldig rolle", - "cannot_demote_self": "Du kan ikke degradere dig selv", - "cannot_delete_self": "Du kan ikke slette din egen konto", - "last_admin": "Kan ikke slette den sidste administrator", - "admin_only": "Denne funktion er kun tilgængelig for administratorer", - "password_required": "Adgangskode er påkrævet", - "not_found": "Bruger ikke fundet", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Bedste praksis for sikkerhed", - "tip_strong_passwords": "Brug stærke, unikke adgangskoder til hver bruger", - "tip_unique_accounts": "Opret individuelle konti for hver person", - "tip_viewer_role": "Brug fremviserrolle til brugere, der kun har brug for læseadgang", - "tip_operator_role": "Brug operatørrolle for brugere, der skal administrere enheder, men ikke brugere", - "tip_audit_logs": "Gennemgå revisionslogfiler regelmæssigt for mistænkelig aktivitet", - "role_pro": "Pro (kun API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Serveradministrator", - "role_global_admin": "Overordnet administrator", - "organizations": "Organisationer", - "user_organizations": "Organisationer for {username}", - "no_organizations": "Brugeren er ikke tildelt nogen organisation", - "org_removed": "Organisationsopgave fjernet", - "server_role_label": "Serverrolle", - "server_role_hint": "Bestemmer, hvad brugeren kan gøre på tværs af hele konsollen (paneladgang, serverkonfiguration, revision osv.).", - "org_membership_section": "Organisationsmedlemskab", - "org_membership_hint": "En bruger kan tilhøre flere organisationer. Organisationsrollen kontrollerer kun tilladelser i den pågældende organisation og er uafhængig af serverrollen ovenfor.", - "column_organizations": "Organisationer", - "no_orgs_short": "—", - "org_count_one": "{count} organisation", - "org_count_many": "{count} organisationer", - "all_orgs_assigned": "Brugeren er allerede medlem af hver organisation.", - "user_groups": "Brugergrupper", - "user_groups_hint": "Brugergrupper kan bruges til at give adgang til udvalgte enhedsgrupper.", - "loading_user_groups": "Indlæser brugergrupper...", - "no_user_groups": "Ingen tilgængelige brugergrupper", - "create_user_group": "Opret gruppe", - "edit_user_group": "Rediger brugergruppe", - "delete_user_group": "Slet brugergruppe", - "delete_user_group_confirm": "Slet brugergruppe {name}? Medlemmer mister adgang givet gennem denne gruppe.", - "user_group_created": "Brugergruppe oprettet", - "user_group_updated": "Brugergruppe opdateret", - "user_group_deleted": "Brugergruppe slettet", - "user_group_not_found": "Brugergruppen blev ikke fundet", - "group_name": "Gruppenavn", - "group_name_placeholder": "Operatører", - "group_note": "Note", - "group_note_placeholder": "Valgfri bemærkning", - "group_name_required": "Gruppenavn er påkrævet", - "group_members_count": "{count} medlemmer", - "provider": "Udbyder", - "provider_local": "Lokal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Administreret af identitetsudbyder", - "provider_managed_hint": "Denne konto administreres af en ekstern identitetsudbyder (LDAP/AD eller SSO). Adgangskoden og rollen styres af udbyderen." - }, - "folders": { - "title": "Folders", - "create": "Opret mappe", - "edit": "Rediger mappe", - "delete": "Slet mappe", - "name": "Folder Name", - "name_placeholder": "Indtast mappenavn", - "name_required": "Mappenavn er påkrævet", - "name_too_long": "Mappenavnet er for langt (maks. 50 tegn)", - "color": "Color", - "icon": "Icon", - "not_found": "Mappe ikke fundet", - "delete_confirm": "Er du sikker på, at du vil slette denne mappe? Tildelingen af ​​enheder fjernes.", - "delete_success": "Mappe slettet", - "created": "Mappe oprettet", - "updated": "Mappe blev opdateret", - "no_devices_selected": "Ingen enheder valgt", - "devices_moved": "Enheder blev flyttet", - "device_assigned": "Enhed tildelt til mappe", - "unassigned": "Unassigned", - "all_devices": "Alle enheder", - "drag_hint": "Træk enheder til mapper for at organisere dem", - "move_to": "Flyt til", - "toggle_sidebar": "Skift sidebjælke" - }, + "no_groups": "Ingen grupper endnu", + "manual_groups": "Manuelle grupper", + "dynamic_memberships": "Dynamiske medlemskaber", + "group_allowed_user_groups": "Tilladte brugergrupper", + "group_allowed_user_groups_hint": "Brugere i udvalgte brugergrupper kan få adgang til denne enhedsgruppe.", + "no_user_groups": "Ingen brugergrupper", + "edit_group": "Rediger gruppe", + "delete_group": "Slet gruppe", + "delete_group_confirm": "Vil du slette enhedsgruppen {name}?", + "group_deleted": "Enhedsgruppen blev slettet", + "folder_group_readonly": "Mappestøttede grupper administreres fra mapper.", + "manage_user_groups": "Administrer brugergrupper", + "restore_failed": "Enhed konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Klienten kontaktede API'et for nylig, men er ikke registreret på signalserveren (UDP :21116). Genstart klienten efter servermigration.", + "per_page": "Pr. side" + }, + "keys": { + "title": "Servernøgler", + "subtitle": "Offentlig nøgle og konfiguration til RustDesk-klienter", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Serverinformation", + "download": "Download nøgle", + "show_qr": "Show QR", + "qr_hint": "Scan denne QR-kode med RustDesk mobilapp", + "no_key": "Ingen offentlig nøgle fundet", + "no_key_to_copy": "Ingen nøgle at kopiere", + "no_qr": "QR-kode er ikke tilgængelig", + "download_success": "Nøglefil blev downloadet", + "not_found": "Nøglen blev ikke fundet", + "api_not_found": "API nøgle ikke fundet" + }, + "settings": { + "title": "Indstillinger", + "subtitle": "Konsolkonfiguration og kontoindstillinger", + "tab_general": "General", + "tab_server": "Serverindstillinger", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Sprog", + "change_password": "Skift adgangskode", + "password_desc": "Opdater adgangskoden til din konto", + "current_password": "Nuværende adgangskode", + "new_password": "Ny adgangskode", + "confirm_password": "Bekræft adgangskode", + "save_password": "Opdater adgangskode", + "password_changed": "Adgangskoden blev ændret", + "fill_all_fields": "Udfyld venligst alle felter", + "passwords_not_match": "Adgangskoder stemmer ikke overens", + "password_requirements": "Adgangskodekrav", + "password_requirements_not_met": "Adgangskoden opfylder ikke kravene", + "req_length": "Mindst 8 tegn", + "req_uppercase": "Mindst ét stort bogstav", + "req_lowercase": "Mindst ét lille bogstav", + "req_number": "Mindst ét nummer", + "server_info": "Serverinformation", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Seneste konsolaktivitet", + "no_audit_logs": "Ingen revisionslogfiler fundet", + "backend_title": "Backend-konfiguration", + "backend_desc": "Vælg hvilken server-backend, der skal bruges til enhedsadministration og signal-/relætjenester.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Standard RustDesk signal- og relæservere (hbbs + hbbr). Grundlæggende HTTP API med begrænsede endepunkter.", + "backend_betterdesk_desc": "Forbedret Go-baseret server med fuld REST API, JWT-godkendelse, blokeringsliste, tags, WebSocket-hændelser i realtid og revisionslogning.", + "backend_feature_signal": "Signalserver (ID-registrering)", + "backend_feature_relay": "Relæserver (forbindelsesrelæ)", + "backend_feature_basic_api": "Grundlæggende REST API", + "backend_feature_full_api": "Fuld REST API (34+ endepunkter)", + "backend_feature_jwt": "JWT-godkendelse & TOTP 2FA", + "backend_feature_blocklist": "Administration af IP/ID-blokeringslister", + "backend_feature_tags": "Enhedsmærker og gruppering", + "backend_feature_audit": "Revider hændelseslogning", + "backend_feature_websocket": "Real-time WebSocket begivenheder", + "backend_connection": "Forbindelse", + "backend_api_url": "API URL", + "backend_test": "Test forbindelse", + "backend_testing": "Tester...", + "backend_save": "Anvend Backend", + "backend_saved": "Serverens backend blev ændret. Enhedsdata vil nu blive administreret af den nye backend.", + "backend_save_failed": "Kunne ikke skifte serverbackend", + "backend_test_success": "Forbindelsen lykkedes! Serveren er tilgængelig.", + "backend_test_failed": "Forbindelsen mislykkedes. Serveren er ikke tilgængelig.", + "backend_confirm_switch": "Er du sikker på, at du vil skifte serverbackend? Dette vil ændre, hvordan enheder administreres.", + "backend_unreachable": "Kan ikke skifte: Målserveren er ikke tilgængelig. Start serveren først.", + "invalid_backend": "Ugyldigt backend-valg. Vælg 'rustdesk' eller 'betterdesk'.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "To-faktor-godkendelse", + "totp_desc": "Tilføj et ekstra lag af sikkerhed med TOTP autentificeringsapps (Google Authenticator, Microsoft Authenticator, Authy osv.)", + "totp_enabled": "2FA aktiveret", + "totp_enabled_desc": "Din konto er beskyttet med to-faktor-godkendelse.", + "totp_disabled": "2FA ikke aktiveret", + "totp_disabled_desc": "Aktiver to-faktor-godkendelse for yderligere kontosikkerhed.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Installer en godkendelsesapp på din telefon", + "totp_step2": "Scan QR-koden nedenfor", + "totp_step3": "Indtast den 6-cifrede kode for at bekræfte", + "totp_manual_key": "Manual key", + "totp_enter_code": "Indtast bekræftelseskode", + "totp_verify_enable": "Bekræft og aktiver", + "totp_enabled_success": "To-faktor-godkendelse aktiveret!", + "totp_recovery_warning": "Gem disse gendannelseskoder på et sikkert sted. Hver kode kan kun bruges én gang. Hvis du mister adgangen til din autentificeringsapp, kan du bruge disse koder til at logge ind.", + "totp_done": "Done", + "totp_disable_warning": "Deaktivering af to-faktor-godkendelse vil gøre din konto mindre sikker. Indtast din adgangskode for at bekræfte.", + "totp_disabled_success": "To-faktor-godkendelse er blevet deaktiveret.", + "tutorials_title": "Tutorials og vejledninger", + "tutorials_desc": "Styr guidede ture og hjælpeoverlejringer, der vises overalt på konsollen", + "tutorials_enabled": "Aktiver selvstudier", + "tutorials_enabled_hint": "Når de er deaktiveret, starter selvstudier ikke automatisk, og knappen Hjælp vil være skjult", + "tutorials_reset_hint": "Marker alle selvstudier som usete, så de kan vises igen", + "tutorials_enabled_toast": "Selvstudier aktiveret", + "tutorials_disabled_toast": "Selvstudier deaktiveret", + "tutorials_reset_toast": "Alle tutorials er blevet nulstillet", + "tab_auth": "Autentificering", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurer ekstern godkendelse via LDAP eller Active Directory. Brugere vil være i stand til at logge ind med deres domæneoplysninger.", + "ldap_enabled": "Aktiver LDAP-godkendelse", + "ldap_enabled_hint": "Når det er aktiveret, kan brugere logge ind med LDAP/AD-legitimationsoplysninger. Lokale konti fungerer stadig som reserve.", + "ldap_connection": "Serverforbindelse", + "ldap_host": "vært", + "ldap_port": "Havn", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Spring over TLS-bekræftelse", + "ldap_timeout": "Forbindelse timeout (s)", + "ldap_timeout_hint": "Sekunder til at vente på LDAP-serversvar", + "ldap_bind_mode": "Indbindingstilstand", + "ldap_direct_bind": "Direkte Bind", + "ldap_direct_bind_hint": "Bind direkte med en DN-skabelon i stedet for at bruge en servicekonto til at søge.", + "ldap_bind_dn": "Bind DN (servicekonto)", + "ldap_bind_dn_hint": "Fornemt navn på en skrivebeskyttet tjenestekonto, der bruges til at søge efter brugere.", + "ldap_bind_password": "Bind adgangskode", + "ldap_base_dn": "Base DN", + "ldap_base_dn_hint": "Søgegrundlag for at finde brugere, f.eks. dc=eksempel, dc=com", + "ldap_user_filter": "Brugerfilter", + "ldap_user_filter_hint": "LDAP filter for at finde brugere. Brug {{username}} som pladsholder. Standard: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Direct Bind DN skabelon", + "ldap_direct_bind_dn_hint": "DN skabelon til direkte binding. Brug {{username}} som pladsholder, f.eks. uid={{username}},ou=brugere,dc=eksempel,dc=com", + "ldap_user_attrs": "Brugerattributter", + "ldap_attr_id": "Brugernavn attribut", + "ldap_attr_email": "E-mail-attribut", + "ldap_attr_name": "Vist navn-attribut", + "ldap_group_mapping": "Gruppe → Rollekortlægning", + "ldap_group_base_dn": "Gruppe Base DN", + "ldap_group_base_dn_hint": "Lad være tom for at bruge hovedbase-DN", + "ldap_group_filter": "Gruppefilter", + "ldap_group_attr_name": "Gruppenavnsattribut", + "ldap_default_role": "Standardrolle", + "ldap_default_role_hint": "Rolle tildelt til brugere, hvis LDAP-grupper ikke matcher nogen tilknytning", + "ldap_role_viewer": "Seer", + "ldap_role_operator": "Operatør", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Gruppe → Rollekort", + "ldap_group_role_map_hint": "Kortlæg LDAP-grupper til BetterDesk-roller. Format: GroupDN=rolle adskilt af | (rør). Eksempel: CN=Admins,DC=eksempel,DC=com=admin|CN=Ops,DC=eksempel,DC=com=operatør", + "ldap_test_connection": "Test forbindelse", + "ldap_testing": "Tester...", + "ldap_test_success": "Forbindelsen lykkedes! LDAP-serveren er tilgængelig, og bindingslegitimationsoplysningerne er gyldige.", + "ldap_test_failed": "Forbindelsen mislykkedes", + "ldap_save": "Gem LDAP-konfiguration", + "ldap_saved": "LDAP-konfigurationen blev gemt", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfigurer Single Sign-On via en OpenID Connect-udbyder (Azure AD, Okta, Google, Keycloak osv.).", + "oidc_enabled": "Aktiver OIDC-godkendelse", + "oidc_enabled_hint": "Tillad brugere at logge ind med en ekstern identitetsudbyder", + "oidc_provider": "Identitetsudbyder", + "oidc_display_name": "Knap vist navn", + "oidc_display_name_hint": "Tekst vist på login-knappen (f.eks. Azure AD, Okta)", + "oidc_issuer_url": "Udsteder URL", + "oidc_issuer_url_hint": "OpenID Connect-udsteder URL (opdagelsen vil være automatisk)", + "oidc_client_id": "Klient-id", + "oidc_client_secret": "Klientens hemmelighed", + "oidc_redirect_url": "Omdiriger URL (tilbagekald)", + "oidc_redirect_url_hint": "Skal matche nøjagtigt det, der er konfigureret i din IdP. Normalt: http(s)://din-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Omfang", + "oidc_use_pkce": "Brug PKCE (anbefales)", + "oidc_auto_discovery": "Automatisk opdagelse", + "oidc_allow_signup": "Opret brugere automatisk", + "oidc_manual_endpoints": "Manuelle slutpunkts-URL'er", + "oidc_authorization_url": "Autorisationsslutpunkt", + "oidc_token_url": "Token-endepunkt", + "oidc_userinfo_url": "Brugerinfo Slutpunkt", + "oidc_claim_mapping": "Krav kortlægning", + "oidc_claim_username": "Brugernavn krav", + "oidc_claim_email": "E-mail krav", + "oidc_claim_name": "Vist navnekrav", + "oidc_claim_groups": "Gruppekrav", + "oidc_role_mapping": "Rollekortlægning", + "oidc_default_role": "Standardrolle", + "oidc_group_role_map": "Gruppe → Rollekortlægning", + "oidc_group_role_map_hint": "Én tilknytning pr. linje: gruppenavn=rolle (f.eks. admins=admin, operatører=operatør)", + "oidc_test_discovery": "Test Discovery", + "oidc_testing": "Tester...", + "oidc_test_success": "Opdagelsen lykkedes! Slutpunkter løst.", + "oidc_test_failed": "Opdagelsen mislykkedes", + "oidc_issuer_required": "Udsteder URL er påkrævet for at teste opdagelse", + "oidc_save": "Gem OIDC-konfiguration", + "oidc_saved": "OIDC-konfigurationen blev gemt", + "connection_mode_title": "Forbindelsesstrategi", + "connection_mode_desc": "Styr, hvordan RustDesk-skrivebordsklienter opretter forbindelse.", + "connection_mode_label": "Standard forbindelsestilstand", + "connection_mode_p2p_first": "P2P først (anbefalet) — forsøg direkte forbindelse, skift til relay ved fejl", + "connection_mode_relay_only": "Kun relay — alle sessioner bruger relayserveren", + "connection_mode_advanced": "Avancerede indstillinger", + "connection_mode_fallback_ms": "P2P reserve-timeout (ms)", + "connection_mode_same_nat_relay": "Tving relay, når begge peers deler samme offentlige IP (NAT hairpin)", + "connection_mode_network_hint": "P2P kræver UDP-port 21116 tilgængelig mellem klienter.", + "connection_mode_save": "Gem", + "connection_mode_save_restart": "Gem og genstart server", + "connection_mode_saved": "Forbindelsestilstand gemt", + "connection_mode_restart_started": "Servergenstart påbegyndt", + "connection_mode_restart_failed": "Servergenstart mislykkedes", + "connection_mode_not_configurable": "Forbindelsestilstand kan ikke ændres på denne installation", + "connection_mode_source_saved": "Gemt i", + "connection_mode_source_defaults": "Bruger serverstandard (ikke skrivbar fra panel)", + "connection_mode_runtime": "Aktiv server", + "advanced_title": "Konfigurationsfiler", + "advanced_desc": "Rediger serverkonfigurationsfiler direkte. Ændringer kan kræve genstart af tjenester.", + "advanced_warning": "Disse filer indeholder hemmeligheder. Rediger kun, hvis du ved, hvad du laver.", + "advanced_files_label": "Filer", + "advanced_select_file": "Vælg en fil fra listen for at se eller redigere indholdet.", + "advanced_reload": "Genindlæs", + "advanced_save": "Gem fil", + "advanced_apply_restart": "Anvend (genstart tjeneste)", + "advanced_saved": "Konfigurationsfil gemt", + "advanced_restart_after_save": "Konfiguration gemt. Genstart den berørte tjeneste nu?", + "advanced_restart_confirm": "Genstart de relaterede BetterDesk-tjenester? Aktive forbindelser kan blive afbrudt kortvarigt.", + "advanced_restart_console_confirm": "Genstart webkonsolstjenesten? Din browsersession kobles fra kortvarigt.", + "advanced_restart_started": "Tjenesterestart påbegyndt", + "advanced_restart_done": "Konsol genstartet — genindlæser side…", + "advanced_restart_polling": "Venter på, at konsollen kommer online igen…", + "advanced_restart_timeout": "Genstart blev sendt, men konsollen reagerede ikke i tide. Tjek logs og genindlæs manuelt.", + "advanced_restart_failed": "Tjenesterestart mislykkedes", + "advanced_save_confirm": "Gem ændringer til denne fil? En sikkerhedskopi af den forrige version oprettes.", + "advanced_unsaved_confirm": "Du har ikke-gemte ændringer. Kassér dem?", + "advanced_no_files": "Ingen konfigurationsfiler tilgængelige på dette system.", + "advanced_readonly": "skrivebeskyttet", + "advanced_missing": "mangler", + "advanced_new_file": "Ny fil (oprettes ikke før du gemmer)", + "advanced_new_file_hint": "Ny fil — tilføj indhold og gem", + "advanced_backup_created": "sikkerhedskopi oprettet", + "advanced_restart_console": "Genstart webkonsolstjenesten for at anvende .env-ændringer.", + "advanced_restart_goserver": "Genstart BetterDesk Go-serveren for at indlæse bloklistingsændringer.", + "advanced_restart_systemd": "Efter redigering af systemd-enheder: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Genstart den berørte tjeneste for at anvende ændringer.", + "advanced_error_unknown": "Ukendt konfigurationsfil", + "advanced_error_not_found": "Filen eksisterer ikke", + "advanced_error_not_file": "Stien er ikke en almindelig fil", + "advanced_error_too_large": "Filen overskrider den maksimale redigerbare størrelse (512 KB)", + "advanced_error_binary": "Binære filer kan ikke redigeres i panelet", + "advanced_error_invalid": "Ugyldigt filindhold", + "advanced_error_not_writable": "Filen er ikke skrivbar af konsolprocessen", + "enrollment_title": "Enhedstilmelding (RustDesk)", + "enrollment_desc": "Styr, hvordan nye RustDesk-klienter registrerer sig.", + "enrollment_require_approval": "Kræv operatørgodkendelse (administreret tilstand)", + "enrollment_require_approval_hint": "Når aktiveret sættes ukendte klienter i kø, indtil en operatør godkender dem.", + "enrollment_rich_approve": "Fuld godkendelsesformular (navn, mappe, grupper, tags)", + "enrollment_rich_approve_hint": "Viser en detaljeret dialog ved godkendelse af tilmeldings- eller LAN-registreringsanmodninger.", + "enrollment_tag_picker": "Vælg tags fra eksisterende enhedstags", + "enrollment_tag_picker_hint": "Lader operatører vælge tags fra listen brugt på Enheder-siden.", + "enrollment_open_requests": "Åbne tilmeldingsanmodninger", + "enrollment_pending_count": "{count} ventende tilmeldingsanmodning(er)", + "tab_advanced": "Avanceret", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (tjenesteenhed)", + "advanced_file_systemd-server": "systemd: betterdesk-server (tjenesteenhed)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfiguration)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", + "advanced_restart_none": "Für diese Fil ist kein Tjenesteneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Login mislykkedes", + "action_logout": "Logout", + "action_password_change": "Adgangskode ændret", + "action_2fa_enable": "2FA aktiveret", + "action_2fa_disable": "2FA deaktiveret", + "action_user_create": "Bruger oprettet", + "action_user_update": "Bruger opdateret", + "action_user_delete": "Bruger slettet", + "action_settings_update": "Indstillinger opdateret", + "action_device_ban": "Enhed forbudt", + "action_device_unban": "Enhed ophævet", + "action_device_delete": "Enhed slettet" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidlig funktion — agentpakkegeneratoren er under aktiv udvikling.", + "config_options": "Konfigurationsmuligheder", + "server_address": "Server adresse", + "server_address_hint": "Din servers domæne eller IP-adresse", + "custom_port": "Custom Port", + "port_hint": "Lad være tom som standard (21116)", + "relay_server": "Relæ server", + "relay_placeholder": "Samme som ID-server, hvis den er tom", + "relay_hint": "Valgfrit: separat relæserveradresse", + "include_key": "Inkluder offentlig nøgle i konfigurationen", + "generate": "Generer konfiguration", + "output": "Konfigurationsudgang", + "usage_title": "Tilslutningsdetaljer", + "generated": "Konfiguration genereret", + "server_required": "Serveradresse er påkrævet", + "nothing_to_copy": "Generer først en konfiguration", + "bundles_title": "Agent bundter", + "new_bundle": "Nyt bundt", + "editor_title": "Pakkeeditor", + "empty_state": "Vælg en pakke til venstre, eller opret en ny for at begynde.", + "loading": "Indlæser...", + "no_bundles": "Ingen bundter endnu. Opret din første.", + "bundle_name": "Bundens navn", + "bundle_name_hint": "Kun intern etiket — vises ikke til slutbrugere.", + "short_link": "Kort downloadlink", + "short_link_hint": "Bruges i den offentlige URL (/d/…). Kun små bogstaver, tal og bindestreger (2–32 tegn). Udfyldes automatisk fra pakkenavn — forkort for nemmere deling (f.eks. acme).", + "branding_section": "Branding", + "company_name": "Firma / mærkenavn", + "short_text": "Kort beskrivelse", + "contact_email": "Kontakt email", + "contact_phone": "Kontakt telefon", + "contact_url": "Kontakt hjemmeside", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG eller WebP. Maksimalt 256 KB.", + "logo_clear": "Fjern logo", + "primary_color": "Primær farve", + "accent_color": "Overskriftsfarve", + "default_lang": "Standardsprog", + "allow_unattended": "Tillad adgang uden opsyn", + "allow_unattended_hint": "Når den er aktiveret, viser agenten en permanent adgangskode for operatøradgang.", + "save": "Gem bundt", + "revoke": "Tilbagekald", + "unrevoke": "Genaktiver", + "revoked": "Tilbagekaldt", + "preview_title": "Liveforhåndsvisning", + "preview_hint": "Tilnærmet udseende af slutbrugeragentvinduet.", + "preview_default_name": "BetterDesk-support", + "preview_status_ready": "Klar", + "preview_id": "Dit ID", + "preview_password": "Adgangskode", + "preview_chat": "Chat med support", + "preview_settings": "Indstillinger (kun admin)", + "preview_quit": "Afslut (kun admin)", + "download_link_title": "Downloadlink", + "download_link_hint": "Del dette link med slutbrugere. De vil se en mærkevare-downloadside. Gamle hex-links virker stadig efter ændring af det korte link.", + "open_portal": "Åbn", + "created": "Bunden er oprettet", + "saved": "Bunden er gemt", + "deleted": "Bunden er slettet", + "revoked_ok": "Bunden tilbagekaldt", + "unrevoked_ok": "Bunden genaktiveret", + "link_copied": "Linket er kopieret til udklipsholderen", + "copy_failed": "Kunne ikke kopiere automatisk - kopier venligst manuelt", + "unsaved_confirm": "Vil du kassere ikke-gemte ændringer?", + "confirm_revoke": "Vil du tilbagekalde denne pakke? Downloadlinket holder op med at virke.", + "confirm_unrevoke": "Vil du genaktivere denne pakke?", + "confirm_delete": "Vil du slette denne pakke permanent? Dette kan ikke fortrydes.", "errors": { - "forbidden_title": "Adgang nægtet", - "forbidden_message": "Du har ikke tilladelse til at få adgang til denne ressource.", - "not_found_title": "Side ikke fundet", - "not_found_message": "Den side, du leder efter, findes ikke eller er blevet flyttet.", - "server_error_title": "Serverfejl", - "server_error_message": "Noget gik galt. Prøv venligst igen senere.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Kunne ikke indlæse enheder", - "load_key_failed": "Nøglen kunne ikke indlæses", - "load_qr_failed": "Kunne ikke indlæse QR", - "load_audit_failed": "Kunne ikke indlæse revisionslog", - "load_users_failed": "Kunne ikke indlæse brugere", - "load_folders_failed": "Kunne ikke indlæse mapper", - "download_failed": "Download mislykkedes", - "logout_failed": "Log ud mislykkedes", - "password_change_failed": "Kunne ikke ændre adgangskoden", - "language_change_failed": "Kunne ikke ændre sprog", - "ban_failed": "Enheden kunne ikke udelukkes", - "unban_failed": "Enheden kunne ikke fjernes", - "delete_failed": "Kunne ikke slette enheden", - "change_id_failed": "Kunne ikke ændre enheds-id", - "bulk_delete_failed": "Kunne ikke slette enheder", - "sync_failed": "Kunne ikke synkronisere status", - "error": "Error", - "not_found": "Not found", - "server_error": "Serverfejl", - "load_device_failed": "Kunne ikke indlæse enheden", - "load_orgs_failed": "Kunne ikke indlæse organisationer" + "validation_failed": "Validering mislykkedes", + "name_required": "Bundens navn er påkrævet", + "company_name_required": "Firmanavn er påkrævet", + "logo_invalid": "Logoet skal være en gyldig billedfil", + "logo_too_large": "Logo skal være 256 KB eller mindre", + "logo_read_failed": "Kunne ikke læse logofilen", + "primary_color_invalid": "Primærfarven skal være en hex-værdi (f.eks. #2563eb)", + "accent_color_invalid": "Overskriftsfarve skal være en hex-værdi (f.eks. #1e293b)", + "contact_url_invalid": "Kontaktwebstedet skal være en gyldig URL", + "server_host_required": "Offentlig serveradresse er påkrævet", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Kort link må kun indeholde små bogstaver, tal og bindestreger", + "slug_too_short": "Kort link skal være mindst 2 tegn", + "slug_too_long": "Kort link må højst være 32 tegn", + "slug_taken": "Dette korte link bruges allerede af en anden pakke" }, - "remote": { - "title": "Fjernskrivebord", - "connecting": "Opretter forbindelse...", - "waiting_password": "Venter på adgangskode", - "authenticating": "Godkender...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Adgangskode påkrævet", - "enter_password_for": "Indtast adgangskode til enheden", - "password_placeholder": "Enhedens adgangskode", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Tilbage til Enheder", - "fullscreen": "Fullscreen", - "toggle_audio": "Skift lyd", - "send_keys": "Send nøgler", - "scale_mode": "Scale Mode", - "scale_fit": "Tilpas til vinduet", - "scale_fill": "Fill Window", - "scale_original": "Original størrelse (1:1)", - "scale_stretch": "Stræk for at fylde", - "actions": "Actions", - "lock_screen": "Lås skærm", - "restart_remote": "Genstart fjernenhed", - "refresh_screen": "Opdater skærmen", - "clipboard_paste": "Indsæt fra udklipsholder", - "block_input": "Block Input", - "display_settings": "Skærmindstillinger", - "image_quality": "Billedkvalitet", - "quality_best": "Bedst (fuld kvalitet, 60 fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Vis fjernmarkør", - "lock_after_session": "Lås efter session", - "privacy_mode": "Privatlivstilstand", - "disable_clipboard": "Deaktiver udklipsholder", - "chat": "Chat", - "chat_placeholder": "Skriv en besked...", - "record": "Optag skærm", - "view_only": "Kun visning", - "pin_toolbar": "Fastgør værktøjslinjen", - "monitors": "Monitors", - "select_monitor": "Vælg Monitor", - "quality_speed": "Hastighed (lav kvalitet, 60 fps)", - "quality_quality": "Kvalitet (bedst, 30 fps)", - "recording_started": "Optagelsen startede", - "recording_stopped": "Optagelsen stoppede", - "download_recording": "Download optagelse", - "e2e_encrypted": "End-to-end krypteret", - "e2e_key_exchange": "Etablerer sikker kanal...", - "confirm_restart": "Er du sikker på, at du vil genstarte fjernenheden?", - "webcodecs_not_supported": "Din browser understøtter ikke WebCodecs API. Brug venligst Chrome 94+ eller Edge 94+.", - "webcodecs_insecure_context": "WebCodecs utilgængelig over HTTP. Video bruger softwaretilbagegang. For den bedste ydeevne skal du bruge HTTPS.", - "webcodecs_fallback_active": "Software videodekoder aktiv (begrænset ydeevne)", - "click_to_start": "Klik for at starte", - "autoplay_blocked": "Browser kræver brugerinteraktion for at starte video- og lydafspilning.", - "start_playback": "Start afspilning", - "new_connection": "Ny forbindelse", - "device_id_placeholder": "Indtast enheds-id", - "http_warning": "HTTP-tilstand: begrænset til H.264-softwareafkodning (~15 FPS). Brug HTTPS for fuld ydeevne (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Filoverførsel", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Denne mappe er tom", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Overførslen mislykkedes", - "file_show_hidden": "Vis skjulte filer", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Indtast mappenavn:", - "file_parent": "Forældremappe", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Indtast nyt navn:", - "file_delete_confirm": "Er du sikker på, at du vil slette dette element?", - "file_cancelled": "Overførslen er annulleret", - "2fa_required": "2FA-bekræftelse påkrævet", - "2fa_hint": "Indtast den 6-cifrede kode fra din autentificeringsapp", - "2fa_invalid": "Indtast en gyldig 6-cifret kode", - "verify": "Verify", - "use_cdap_fallback": "Brug CDAP viewer", - "cdap_fallback_hint": "Åbn den letvægts JPEG-pollingvisning der bruger bd-signal/CDAP i stedet for RustDesk-relay. Nyttig når peer'en er offline på relay men tilgængelig via agentstyrekanalen.", - "clipboard_empty": "Udklipsholderen er tom", - "clipboard_denied": "Adgang til Udklipsholder nægtet. HTTPS påkrævet eller tilladelse ikke givet.", - "file_loading": "Indlæser...", - "file_timeout": "Fjernenheden reagerede ikke. Filoverførsel understøttes muligvis ikke eller er deaktiveret på fjernmaskinen.", - "codec": "Video Codec", - "codec_auto": "Auto (anbefales)" + "legacy_title": "Klientkonfigurationsgenerator", + "connection_section": "Serverforbindelse", + "server_host": "Offentlig serveradresse", + "server_host_placeholder": "support.eksempel.dk eller 203.0.113.10", + "server_host_hint": "Domænenavn eller offentlig IP, hvor slutbrugerne når din BetterDesk-server.", + "use_https": "Brug HTTPS / WSS (anbefalet)", + "enrollment_token": "Enhedsregistrering", + "enrollment_token_hint": "Hver installation registrerer sig selv. Godkend nye enheder i Registreringspanelet.", + "enrollment_per_device": "Per enhed — godkend i Registreringer", + "background_color": "Vinduesbaggrund", + "surface_color": "Kortbaggrund", + "text_color": "Tekstfarve", + "text_muted_color": "Dæmpet tekstfarve", + "status_ready_color": "Klar-indikatorfarve", + "header_text_color": "Headertekstfarve", + "builds_title": "Klientbuilds", + "builds_hint": "Installationsprogrammer kompileret på denne server for hver platform.", + "rebuild_all": "Genbyg alle", + "rebuild_confirm": "Genbyg alle platforminstallationsprogrammer til denne pakke?", + "build_status_ready": "Klar", + "build_status_pending": "I kø", + "build_status_building": "Bygger", + "build_status_failed": "Fejlet", + "enrollment_token_pending": "Pro Enhed nach Genehmigung", + "enrollment_token_set": "Pro Enhed — in Registrierungen genehmigen", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislykkedes", + "build_error_hint": "Buildfejl", + "preview_help": "Anmod om hjælp" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID-server", + "relay_server": "Relæ server", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Tjekker...", + "label": "Status", + "no_signal": "Intet signal" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Tilslut via Desktop Client", + "remote_viewer": "Fjernvisning", + "web_remote": "Web-fjernbetjening", + "details": "Details", + "edit": "Rediger", + "delete": "Slet", + "ban": "Ban", + "unban": "Unban", + "save": "Gem", + "cancel": "Annuller", + "confirm": "Bekræft", + "close": "Luk", + "clear": "Clear", + "ok": "OK", + "saved": "Gemt", + "back": "Tilbage", + "create": "Opret", + "dismiss": "Dismiss", + "view_all": "Se alle", + "cdap_viewer": "CDAP Snapshot-visning", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s siden", + "minutes_ago": "{count}m siden", + "hours_ago": "{count}h siden", + "days_ago": "{count}d siden", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Brugerstyring", + "subtitle": "Administrer konsolbrugere og tilladelser", + "add_user": "Add User", + "edit_user": "Rediger bruger", + "username": "Brugernavn", + "username_placeholder": "Indtast brugernavn", + "username_hint": "Kun 3-32 tegn, bogstaver, tal og understregninger", + "password": "Adgangskode", + "password_placeholder": "Indtast adgangskode", + "password_hint": "Minimum 8 tegn med blandet store og små bogstaver, tal og symboler", + "password_leave_empty": "Lad være tom for at holde dig opdateret", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Oprettet", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Opret bruger", + "edit": "Rediger", + "reset_password": "Nulstil adgangskode", + "new_password": "Ny adgangskode", + "delete_title": "Slet bruger", + "delete_confirm": "Er du sikker på, at du vil slette brugeren {username}?", + "delete_success": "Brugeren blev slettet", + "user_created": "Bruger oprettet", + "user_updated": "Brugeren blev opdateret", + "password_reset_success": "Adgangskoden blev nulstillet", + "empty_title": "Ingen brugere fundet", + "empty_text": "Tilføj brugere for at administrere konsoladgang", + "fill_required": "Udfyld venligst alle obligatoriske felter", + "invalid_username": "Brugernavn må kun bestå af 3-32 tegn, bogstaver, tal og understregninger", + "username_exists": "Brugernavnet eksisterer allerede", + "weak_password": "Adgangskoden er for svag", + "password_too_short": "Adgangskoden skal være på mindst 8 tegn", + "invalid_role": "Ugyldig rolle", + "cannot_demote_self": "Du kan ikke degradere dig selv", + "cannot_delete_self": "Du kan ikke slette din egen konto", + "last_admin": "Kan ikke slette den sidste administrator", + "admin_only": "Denne funktion er kun tilgængelig for administratorer", + "password_required": "Adgangskode er påkrævet", + "not_found": "Bruger ikke fundet", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Bedste praksis for sikkerhed", + "tip_strong_passwords": "Brug stærke, unikke adgangskoder til hver bruger", + "tip_unique_accounts": "Opret individuelle konti for hver person", + "tip_viewer_role": "Brug fremviserrolle til brugere, der kun har brug for læseadgang", + "tip_operator_role": "Brug operatørrolle for brugere, der skal administrere enheder, men ikke brugere", + "tip_audit_logs": "Gennemgå revisionslogfiler regelmæssigt for mistænkelig aktivitet", + "role_pro": "Pro (kun API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Serveradministrator", + "role_global_admin": "Overordnet administrator", + "organizations": "Organisationer", + "user_organizations": "Organisationer for {username}", + "no_organizations": "Brugeren er ikke tildelt nogen organisation", + "org_removed": "Organisationsopgave fjernet", + "server_role_label": "Serverrolle", + "server_role_hint": "Bestemmer, hvad brugeren kan gøre på tværs af hele konsollen (paneladgang, serverkonfiguration, revision osv.).", + "org_membership_section": "Organisationsmedlemskab", + "org_membership_hint": "En bruger kan tilhøre flere organisationer. Organisationsrollen kontrollerer kun tilladelser i den pågældende organisation og er uafhængig af serverrollen ovenfor.", + "column_organizations": "Organisationer", + "no_orgs_short": "—", + "org_count_one": "{count} organisation", + "org_count_many": "{count} organisationer", + "all_orgs_assigned": "Brugeren er allerede medlem af hver organisation.", + "user_groups": "Brugergrupper", + "user_groups_hint": "Brugergrupper kan bruges til at give adgang til udvalgte enhedsgrupper.", + "loading_user_groups": "Indlæser brugergrupper...", + "no_user_groups": "Ingen tilgængelige brugergrupper", + "create_user_group": "Opret gruppe", + "edit_user_group": "Rediger brugergruppe", + "delete_user_group": "Slet brugergruppe", + "delete_user_group_confirm": "Slet brugergruppe {name}? Medlemmer mister adgang givet gennem denne gruppe.", + "user_group_created": "Brugergruppe oprettet", + "user_group_updated": "Brugergruppe opdateret", + "user_group_deleted": "Brugergruppe slettet", + "user_group_not_found": "Brugergruppen blev ikke fundet", + "group_name": "Gruppenavn", + "group_name_placeholder": "Operatører", + "group_note": "Note", + "group_note_placeholder": "Valgfri bemærkning", + "group_name_required": "Gruppenavn er påkrævet", + "group_members_count": "{count} medlemmer", + "provider": "Udbyder", + "provider_local": "Lokal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Administreret af identitetsudbyder", + "provider_managed_hint": "Denne konto administreres af en ekstern identitetsudbyder (LDAP/AD eller SSO). Adgangskoden og rollen styres af udbyderen." + }, + "folders": { + "title": "Folders", + "create": "Opret mappe", + "edit": "Rediger mappe", + "delete": "Slet mappe", + "name": "Folder Name", + "name_placeholder": "Indtast mappenavn", + "name_required": "Mappenavn er påkrævet", + "name_too_long": "Mappenavnet er for langt (maks. 50 tegn)", + "color": "Color", + "icon": "Icon", + "not_found": "Mappe ikke fundet", + "delete_confirm": "Er du sikker på, at du vil slette denne mappe? Tildelingen af ​​enheder fjernes.", + "delete_success": "Mappe slettet", + "created": "Mappe oprettet", + "updated": "Mappe blev opdateret", + "no_devices_selected": "Ingen enheder valgt", + "devices_moved": "Enheder blev flyttet", + "device_assigned": "Enhed tildelt til mappe", + "unassigned": "Unassigned", + "all_devices": "Alle enheder", + "drag_hint": "Træk enheder til mapper for at organisere dem", + "move_to": "Flyt til", + "toggle_sidebar": "Skift sidebjælke" + }, + "errors": { + "forbidden_title": "Adgang nægtet", + "forbidden_message": "Du har ikke tilladelse til at få adgang til denne ressource.", + "not_found_title": "Side ikke fundet", + "not_found_message": "Den side, du leder efter, findes ikke eller er blevet flyttet.", + "server_error_title": "Serverfejl", + "server_error_message": "Noget gik galt. Prøv venligst igen senere.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Kunne ikke indlæse enheder", + "load_key_failed": "Nøglen kunne ikke indlæses", + "load_qr_failed": "Kunne ikke indlæse QR", + "load_audit_failed": "Kunne ikke indlæse revisionslog", + "load_users_failed": "Kunne ikke indlæse brugere", + "load_folders_failed": "Kunne ikke indlæse mapper", + "download_failed": "Download mislykkedes", + "logout_failed": "Log ud mislykkedes", + "password_change_failed": "Kunne ikke ændre adgangskoden", + "language_change_failed": "Kunne ikke ændre sprog", + "ban_failed": "Enheden kunne ikke udelukkes", + "unban_failed": "Enheden kunne ikke fjernes", + "delete_failed": "Kunne ikke slette enheden", + "change_id_failed": "Kunne ikke ændre enheds-id", + "bulk_delete_failed": "Kunne ikke slette enheder", + "sync_failed": "Kunne ikke synkronisere status", + "error": "Error", + "not_found": "Not found", + "server_error": "Serverfejl", + "load_device_failed": "Kunne ikke indlæse enheden", + "load_orgs_failed": "Kunne ikke indlæse organisationer" + }, + "remote": { + "title": "Fjernskrivebord", + "connecting": "Opretter forbindelse...", + "waiting_password": "Venter på adgangskode", + "authenticating": "Godkender...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Adgangskode påkrævet", + "enter_password_for": "Indtast adgangskode til enheden", + "password_placeholder": "Enhedens adgangskode", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Tilbage til Enheder", + "fullscreen": "Fullscreen", + "toggle_audio": "Skift lyd", + "send_keys": "Send nøgler", + "scale_mode": "Scale Mode", + "scale_fit": "Tilpas til vinduet", + "scale_fill": "Fill Window", + "scale_original": "Original størrelse (1:1)", + "scale_stretch": "Stræk for at fylde", + "actions": "Actions", + "lock_screen": "Lås skærm", + "restart_remote": "Genstart fjernenhed", + "refresh_screen": "Opdater skærmen", + "clipboard_paste": "Indsæt fra udklipsholder", + "block_input": "Block Input", + "display_settings": "Skærmindstillinger", + "image_quality": "Billedkvalitet", + "quality_best": "Bedst (fuld kvalitet, 60 fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Vis fjernmarkør", + "lock_after_session": "Lås efter session", + "privacy_mode": "Privatlivstilstand", + "disable_clipboard": "Deaktiver udklipsholder", + "chat": "Chat", + "chat_placeholder": "Skriv en besked...", + "record": "Optag skærm", + "view_only": "Kun visning", + "pin_toolbar": "Fastgør værktøjslinjen", + "monitors": "Monitors", + "select_monitor": "Vælg Monitor", + "quality_speed": "Hastighed (lav kvalitet, 60 fps)", + "quality_quality": "Kvalitet (bedst, 30 fps)", + "recording_started": "Optagelsen startede", + "recording_stopped": "Optagelsen stoppede", + "download_recording": "Download optagelse", + "e2e_encrypted": "End-to-end krypteret", + "e2e_key_exchange": "Etablerer sikker kanal...", + "confirm_restart": "Er du sikker på, at du vil genstarte fjernenheden?", + "webcodecs_not_supported": "Din browser understøtter ikke WebCodecs API. Brug venligst Chrome 94+ eller Edge 94+.", + "webcodecs_insecure_context": "WebCodecs utilgængelig over HTTP. Video bruger softwaretilbagegang. For den bedste ydeevne skal du bruge HTTPS.", + "webcodecs_fallback_active": "Software videodekoder aktiv (begrænset ydeevne)", + "click_to_start": "Klik for at starte", + "autoplay_blocked": "Browser kræver brugerinteraktion for at starte video- og lydafspilning.", + "start_playback": "Start afspilning", + "new_connection": "Ny forbindelse", + "device_id_placeholder": "Indtast enheds-id", + "http_warning": "HTTP-tilstand: begrænset til H.264-softwareafkodning (~15 FPS). Brug HTTPS for fuld ydeevne (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Filoverførsel", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Denne mappe er tom", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Overførslen mislykkedes", + "file_show_hidden": "Vis skjulte filer", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Indtast mappenavn:", + "file_parent": "Forældremappe", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Indtast nyt navn:", + "file_delete_confirm": "Er du sikker på, at du vil slette dette element?", + "file_cancelled": "Overførslen er annulleret", + "2fa_required": "2FA-bekræftelse påkrævet", + "2fa_hint": "Indtast den 6-cifrede kode fra din autentificeringsapp", + "2fa_invalid": "Indtast en gyldig 6-cifret kode", + "verify": "Verify", + "use_cdap_fallback": "Brug CDAP viewer", + "cdap_fallback_hint": "Åbn den letvægts JPEG-pollingvisning der bruger bd-signal/CDAP i stedet for RustDesk-relay. Nyttig når peer'en er offline på relay men tilgængelig via agentstyrekanalen.", + "clipboard_empty": "Udklipsholderen er tom", + "clipboard_denied": "Adgang til Udklipsholder nægtet. HTTPS påkrævet eller tilladelse ikke givet.", + "file_loading": "Indlæser...", + "file_timeout": "Fjernenheden reagerede ikke. Filoverførsel understøttes muligvis ikke eller er deaktiveret på fjernmaskinen.", + "codec": "Video Codec", + "codec_auto": "Auto (anbefales)" + }, + "branding": { + "identity_title": "Brand Identitet", + "identity_desc": "Tilpas applikationsnavnet og beskrivelsen vist på tværs af konsollen", + "app_name": "Ansøgningsnavn", + "app_description": "Ansøgningsbeskrivelse", + "logo_title": "Logo", + "logo_desc": "Vælg, hvordan dit logo skal vises i sidebjælken og login-siden", + "logo_type_icon": "Materiale ikon", + "logo_type_svg": "SVG-kode", + "logo_type_image": "Billed-URL", + "logo_icon_name": "Ikonnavn", + "logo_icon_hint": "Indtast et Material Icons-navn (f.eks. dns, cloud, sikkerhed). Se fonts.google.com/icons", + "logo_svg_code": "SVG-kode", + "logo_svg_hint": "Indsæt din SVG-markering her. Understøtter fulde -elementer med stier og stilarter.", + "logo_image_upload": "Upload billede", + "logo_image_choose": "Vælg billedfil", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Ugyldig filtype. Brug PNG, JPG, GIF, WebP eller SVG.", + "preview": "Forhåndsvisning", + "colors_title": "Farveskema", + "colors_desc": "Tilpas farvepaletten. Lad være tom for at bruge standardindstillinger.", + "colors_backgrounds": "Baggrunde", + "colors_text": "Tekst", + "colors_accents": "Accent farver", + "colors_borders": "Kanter", + "import_export_title": "Import/eksport", + "import_export_desc": "Gem dit tema som en JSON-fil eller importer en fra en anden instans", + "export_theme": "Eksporter tema", + "import_theme": "Importer tema", + "reset_defaults": "Nulstil til standarder", + "save_branding": "Gem branding", + "saved": "Branding blev gemt. Genindlæser...", + "exported": "Tema eksporteret", + "imported": "Tema importeret. Genindlæser...", + "import_error": "Temaet kunne ikke importeres. Ugyldigt filformat.", + "reset_confirm": "Er du sikker på, at du vil nulstille branding til standardindstillingerne? Dette kan ikke fortrydes.", + "reset_success": "Branding nulstillet til standardindstillinger. Genindlæser...", + "logo_type_text": "Tekstlogo", + "logo_text": "Logotekst", + "logo_text_hint": "Primær tekst vist som dit brandlogo", + "logo_text_accent": "Accenttekst", + "logo_text_accent_hint": "Sekundær tekst under logoet (f.eks. produktnavn eller tagline)", + "logo_upload_success": "Logoet blev uploadet.", + "typography_title": "Typografi", + "typography_desc": "Vælg skrifttyper til overskrifter og brødtekst. Skrifttyper downloades til serveren til selvhosting.", + "font_heading": "Overskrift skrifttype", + "font_heading_hint": "Anvendes til overskrifter (H1–H6) og tekstlogo", + "font_body": "Brødtekstskrifttype", + "font_body_hint": "Bruges til brødtekst og UI-elementer", + "font_search_placeholder": "Søg skrifttyper...", + "font_system_default": "System standard", + "font_clear": "Ryd", + "font_cat_all": "Alle", + "font_downloaded_count": "skrifttyper downloadet på serveren", + "powered_by": "Drevet af", + "background_title": "Baggrund og udseende", + "background_desc": "Indstil en konsolbaggrund, gradient eller ensfarvet baggrund.", + "bg_type_none": "Ingen", + "bg_type_color": "Ensfarvet", + "bg_type_gradient": "Gradient", + "bg_type_image": "Billede", + "bg_color": "Baggrundsfarve", + "bg_gradient": "CSS-gradient", + "bg_gradient_hint": "Enhver gyldig CSS-gradient, f.eks. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Upload baggrundsbillede", + "bg_image_choose": "Vælg billedfil", + "bg_image_hint": "PNG, JPG, WebP eller GIF. Maks. 8 MB.", + "bg_image_url": "Bildesti / URL", + "bg_size": "Billedstørrelse", + "bg_size_cover": "Dæk (udfyld skærm)", + "bg_size_contain": "Tilpas (fit)", + "bg_size_auto": "Automatisk (original)", + "bg_blur": "Baggrundsslør", + "bg_overlay": "Mørkt overlay", + "bg_overlay_hint": "Mørkner baggrunden for bedre tekstlæsbarhed.", + "bg_image_too_large": "Billedet er for stort. Maksimal størrelse er 8 MB.", + "bg_image_invalid_type": "Ugyldig filtype. Brug PNG, JPG, WebP eller GIF.", + "bg_upload_success": "Baggrundsbillede uploadet.", + "login_title": "Loginside", + "login_desc": "Tilpas loginskærmens overskrift, undertitel og baggrund.", + "login_heading": "Loginoverskrift", + "login_heading_placeholder": "Velkommen tilbage", + "login_subheading": "Loginundertitel", + "login_subheading_placeholder": "Log ind på din konto", + "login_bg_inherit": "Samme som konsollen", + "agent_title": "Agent-downloadside", + "agent_desc": "Tilpas den offentlige agent-downloadportal vist til slutbrugere.", + "agent_show_powered": "Vis \"Drevet af BetterDesk\"", + "agent_show_powered_hint": "Vis BetterDesk-tilskrivningen i downloadportalens sidefod.", + "footer_title": "Sidefod og ophavsret", + "footer_desc": "Tilføj en brugerdefineret sidefodlinje vist på loginskærmen og konsolsidepanelet.", + "footer_text": "Sidefodtekst", + "footer_text_hint": "f.eks. en ophavsretsbemærkning eller firmanavn.", + "show_powered": "Vis \"BetterDesk\"-tilskrivning", + "show_powered_hint": "Vis BetterDesk-navn og version i loginfoden og sidepanelet.", + "custom_css_title": "Brugerdefineret CSS", + "custom_css_desc": "Avanceret: injicér brugerdefineret CSS i konsollen og loginsiden.", + "custom_css_hint": "Brug med forsigtighed. Maks. 20.000 tegn." + }, + "device_detail": { + "tab_overview": "Oversigt", + "tab_tags": "Tags og noter", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Forbindelse", + "section_manage": "Ledelse", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Denne enhed er forbudt", + "no_reason": "Ingen grund angivet", + "tags": "Tags", + "no_tags": "Ingen tags tildelt denne enhed", + "tag_placeholder": "Indtast et tagnavn...", + "add_tag": "Add", + "tag_exists": "Dette tag findes allerede", + "notes": "Notes", + "notes_placeholder": "Tilføj bemærkninger om denne enhed...", + "danger_zone": "Danger Zone", + "action_connect_web": "Web-fjernbetjening", + "action_connect_web_desc": "Tilslut via browserens fjernskrivebord", + "action_native_remote": "BetterDesk fjernbetjening", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Desktop klient", + "action_connect_desktop_desc": "Åbn i desktop-klient-appen", + "action_change_id_desc": "Skift enhedsregistrerings-id'et", + "action_ban_desc": "Bloker denne enhed fra at oprette forbindelse", + "action_unban_desc": "Tillad denne enhed at oprette forbindelse igen", + "action_delete_desc": "Fjern denne enhed permanent", + "tab_hardware": "Hardware", + "tab_metrics": "Målinger", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kodningsmuligheder", + "section_live_metrics": "Live målinger", + "section_current_usage": "Nuværende brug", + "section_usage_history": "Brugshistorik", + "os": "Operativsystem", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU frekvens", + "total_memory": "Total Hukommelse", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Opdateret", + "device_groups": "Grupper", + "no_sysinfo": "Ingen tilgængelige hardwareoplysninger", + "no_sysinfo_hint": "Systeminfo vises, efter at enheden har sendt en sysinfo-rapport", + "no_metrics": "Der er ingen tilgængelige metrics", + "no_metrics_hint": "Metrics vises, når enheden har sendt hjerteslagsrapporter", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Filer", + "agent_lazy_hint": "Klik på denne fane for at indlæse live data fra agenten", + "agent_offline": "Agenten er offline", + "agent_timeout": "Agenten svarede ikke i tide", + "agent_error": "Kunne ikke indlæse data fra agent", + "service_name": "Name", + "service_display": "Vist navn", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Hardware og software opgørelse over administrerede enheder", + "device_id": "Enheds-id", + "hostname": "Hostname", + "os": "Operativsystem", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Total Hukommelse", + "memory_used": "Used Memory", + "memory_available": "Tilgængelig hukommelse", + "memory_usage": "Hukommelsesbrug", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Netværksgrænseflader", + "software": "Software", + "software_count": "Installeret software", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fysiske kerner", + "logical_cores": "Logiske kerner", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Tilgængelig", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-adresser", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Samler kører", + "collector_stopped": "Samler stoppet", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Afhentes kl", + "no_data": "Ingen lagerdata tilgængelige endnu. Klik på \"Saml nu\" for at indsamle systemoplysninger.", + "no_devices": "Der blev ikke fundet nogen enheder med lagerdata", + "detail_title": "Enhedsbeholdningsdetaljer", + "telemetry": "Telemetry", + "view_detail": "Se detaljer", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Supportbilletter og problemsporing", + "create": "New Ticket", + "edit": "Rediger billet", + "delete": "Slet billet", + "detail": "Billetdetaljer", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Tildelt til", + "created_by": "Skabt af", + "device": "Enhed", + "sla_due": "SLA Due", + "created_at": "Oprettet", + "updated_at": "Opdateret", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Åbn", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Skriv en kommentar...", + "internal_note": "Intern note (ikke synlig for slutbrugere)", + "attachments": "Attachments", + "upload_attachment": "Upload vedhæftet fil", + "download": "Download", + "connect_device": "Opret forbindelse til enhed", + "no_tickets": "Ingen billetter fundet", + "no_comments": "Ingen kommentarer endnu", + "no_attachments": "Ingen vedhæftede filer", + "title_required": "Titel er påkrævet", + "delete_confirm": "Er du sikker på, at du vil slette billet #{id}?", + "delete_success": "Billetten blev slettet", + "created_success": "Billet blev oprettet", + "updated_success": "Billetten blev opdateret", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Søg billetter...", + "assign_to_me": "Tildel mig", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Åbn", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Aktivitetsovervågning", + "subtitle": "Applikationsbrug og inaktiv sporing", + "device": "Enhed", + "hostname": "Hostname", + "sessions": "Sessioner", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Top applikationer", + "app_name": "Application", + "window_title": "Vinduets titel", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Sessiontælling", + "total_active": "Total aktiv", + "total_idle": "Total Idle", + "detail_count": "Detaljerede optegnelser", + "no_data": "Ingen tilgængelig aktivitetsdata", + "no_sessions": "Ingen sessioner", + "filter_from": "Fra", + "filter_to": "Til", + "filter_apply": "Anvend filter", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Søg efter enheder...", + "date_range": "Date Range", + "device_id": "Enheds-id", + "session_start": "Session start", + "session_end": "Session slut", + "user": "User", + "no_activity": "Ingen aktivitet registreret", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Ingen ansøgninger" + }, + "automation": { + "title": "Automatisering og advarsler", + "subtitle": "Advarselsregler, fjernkommandoer og SMTP-konfiguration", + "rules": "Alert Rules", + "rules_subtitle": "Definer betingelser, der udløser meddelelser", + "alerts": "Alarmhistorik", + "alerts_subtitle": "Se og anerkend udløste advarsler", + "commands": "Fjernkommandoer", + "commands_subtitle": "Send kommandoer til eksterne enheder", + "smtp": "SMTP-konfiguration", + "smtp_subtitle": "Indstillinger for e-mailbeskeder", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Tilstandstype", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Målenhed", + "scope_all": "Alle enheder", + "cooldown": "Nedkøling (sekunder)", + "notify_emails": "Meddelelsesmails", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "create_rule": "Opret regel", + "edit_rule": "Rediger regel", + "delete_rule": "Slet regel", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Udløst kl", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Større end", + "op_gte": "Større eller lige", + "op_lt": "Less than", + "op_lte": "Mindre eller lige", + "op_eq": "Lige til", + "op_neq": "Ikke lig med", + "type_cpu_usage": "CPU-brug (%)", + "type_memory_usage": "Hukommelsesforbrug (%)", + "type_disk_usage": "Diskbrug (%)", + "type_offline_duration": "Offline varighed (r)", + "type_idle_duration": "Inaktiv varighed (r)", + "type_custom": "Custom", + "command_type": "Kommandotype", + "command_payload": "Kommando / script", + "command_result": "Result", + "command_status": "Status", + "send_command": "Send kommando", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Mislykkedes", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Brugernavn", + "smtp_pass": "Adgangskode", + "smtp_from": "Fra Adresse", + "smtp_test": "Test forbindelse", + "smtp_save": "Gem konfiguration", + "smtp_test_success": "Forbindelsen lykkedes", + "smtp_test_failed": "Forbindelsen mislykkedes", + "no_rules": "Ingen advarselsregler er konfigureret", + "no_alerts": "Ingen advarsler udløst", + "no_commands": "Ingen kommandoer sendt", + "id_payload_required": "Enheds-id og nyttelast er påkrævet", + "no_commands_sent": "Ingen kommandoer er blevet sendt endnu" + }, + "file_transfer": { + "title": "Filoverførsel", + "transfers": "Transfers", + "new_transfer": "Ny overførsel", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Filstørrelse", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Enhed", + "initiated_by": "Iværksat af", + "created_at": "Oprettet kl", + "cancel": "Annuller", + "cancel_confirm": "Er du sikker på, at du vil annullere denne overførsel?", + "download_file": "Download fil", + "browse_files": "Gennemse filer", + "select_file": "Vælg Fil", + "select_device": "Vælg Enhed", + "no_transfers": "Ingen filoverførsler", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Mislykkedes", + "status_cancelled": "Cancelled", + "bytes_transferred": "Bytes overført", + "chunks": "Chunks", + "transfer_started": "Overførslen startede", + "transfer_completed": "Overførslen gennemført", + "transfer_failed": "Overførslen mislykkedes", + "transfer_cancelled": "Overførslen er annulleret", + "max_file_size": "Maksimal filstørrelse: 4 GB", + "error_too_large": "Filen er for stor", + "error_no_device": "Ingen enhed valgt", + "error_no_file": "Ingen fil valgt" + }, + "network": { + "title": "Netværksovervågning", + "targets": "Overvågning af mål", + "add_target": "Add Target", + "edit_target": "Rediger mål", + "delete_target": "Slet mål", + "delete_confirm": "Er du sikker på, at du vil slette dette mål?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Tidsgrænse", + "interval": "Intervaltid", + "enabled": "Aktiveret", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Tjek historik", + "stats": "Statistics", + "total_targets": "Samlede mål", + "targets_up": "Targets Up", + "targets_down": "Mål ned", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Netværksværktøjer", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Portkontrol", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Start overvågning", + "monitor_stop": "Stop overvågning", + "monitor_running": "Monitor kører", + "monitor_stopped": "Monitor er stoppet", + "no_targets": "Ingen overvågningsmål konfigureret", + "no_history": "Ingen kontrolhistorik tilgængelig", + "error_code": "Error", + "status_code": "HTTP Statuskode", + "search_targets": "Søg efter mål...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Tjek historik", + "name_host_required": "Navn og vært er påkrævet", + "uptime": "Uptime", + "response_time": "Svartid", + "avg_response": "Gennemsnitlig respons", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Svartid (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Sidste 24 timer", + "last_7d": "Last 7 days", + "last_30d": "Sidste 30 dage" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP-politikker", + "add_policy": "Tilføj politik", + "edit_policy": "Rediger politik", + "delete_policy": "Slet politik", + "delete_confirm": "Er du sikker på, at du vil slette denne politik?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB enhed", + "rule_type_file": "Filbetjening", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Leverandør-id (VID)", + "pid": "Produkt-id (PID)", + "serial": "Serienummer", + "device_class": "Enhedsklasse", + "drive_type": "Drive Type", + "file_extensions": "Filudvidelser", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Fil", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Ingen DLP-politikker er konfigureret", + "no_events": "Ingen DLP-hændelser registreret", + "stats": "Statistics", + "total_events": "Begivenheder i alt", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Fil Begivenheder", + "device_id": "Enheds-id", + "policy_matched": "Politik matchet", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Samlede politikker", + "active_policies": "Aktive politikker", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Politikker", + "tab_events": "Events", + "search_policies": "Søgepolitikker...", + "create_policy": "Opret politik", + "policy_type": "Politiktype", + "scope": "Scope", + "events_count": "Events", + "search_events": "Søg begivenheder...", + "event_time": "Event Time", + "device": "Enhed", + "policy": "Politik", + "detail": "Detail", + "scope_help": "Kommaseparerede enheds-id'er, eller lad dem stå tomme for alle", + "scope_all": "Alle enheder", + "active": "Active", + "type_file_type": "Filtype", + "type_clipboard": "Udklipsholder", + "type_screen_share": "Skærmdeling", + "type_file_transfer": "Filoverførsel", + "policy_desc": "Politikbeskrivelse", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Generer rapport", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Enhedsoversigt", + "type_activity": "Aktivitetsoversigt", + "type_security": "Sikkerhedsrapport", + "type_tickets": "Billetrapport", + "type_network": "Netværksrapport", + "type_inventory": "Inventarrapport", + "type_alerts": "Advarselsrapport", + "saved": "Gemte rapporter", + "save_report": "Gem rapport", + "delete_report": "Slet rapport", + "delete_confirm": "Er du sikker på, at du vil slette denne gemte rapport?", + "no_saved": "Ingen gemte rapporter", + "report_title": "Title", + "created_by": "Skabt af", + "created_at": "Oprettet kl", + "filters": "Filters", + "date_from": "Fra", + "date_to": "Til", + "device_filter": "Enheds-id", + "generated_at": "Genereret kl", + "section": "Dataafsnit", + "total_devices": "Enheder i alt", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Platform distribution", + "top_applications": "Top applikationer", + "total_active": "Samlet aktiv tid", + "total_idle": "Samlet inaktiv tid", + "dlp_stats": "DLP statistik", + "banned_devices": "Forbudte enheder", + "audit_logs": "Audit Logs", + "ticket_stats": "Billetstatistik", + "category_distribution": "Kategorifordeling", + "priority_distribution": "Prioritetsfordeling", + "targets_status": "Målstatus", + "os_distribution": "OS distribution", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Seneste advarsler", + "tab_generate": "Generer rapport", + "tab_saved": "Gemte rapporter", + "type_devices_desc": "Oversigt over alle enheder, platforme og statusser", + "type_activity_desc": "Opsummering af applikationsbrug og ledig tid", + "type_security_desc": "Forbyd handlinger, DLP-hændelser og revisionslogfiler", + "type_tickets_desc": "Billetstatistik og SLA-ydelse", + "type_network_desc": "Netværksovervågningsmål og oppetidsdata", + "type_inventory_desc": "Opgørelse over hardware og software", + "type_alerts_desc": "Advarselsregler og udløst advarselshistorik", + "report_name": "Report Name", + "format": "Format", + "save": "Gem rapport", + "preview": "Preview", + "download": "Download", + "delete_saved": "Slet rapport", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Rediger lejer", + "delete_tenant": "Slet lejer", + "delete_confirm": "Er du sikker på, at du vil slette denne lejer? Alle enheds- og brugertildelinger vil blive fjernet.", + "name": "Name", + "slug": "Slug", + "contact_name": "Navn på kontaktperson", + "contact_email": "Kontakt email", + "max_devices": "Max enheder", + "max_devices_hint": "0 = ubegrænset", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Enheder", + "users": "Users", + "assign_device": "Tildel enhed", + "assign_devices": "Tildel enheder", + "remove_device": "Fjern enhed", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Ingen lejere konfigureret", + "no_devices": "Ingen enheder tildelt denne lejer", + "no_users": "Ingen brugere er tildelt denne lejer", + "stats": "Lejerstatistik", + "total_devices": "Enheder i alt", + "online_devices": "Online enheder", + "total_users": "Total Users", + "created_at": "Oprettet kl", + "updated_at": "Opdateret kl", + "slug_exists": "Lejersnegl findes allerede", + "total_tenants": "Samlede lejere", + "active_tenants": "Aktive lejere", + "search": "Søg efter lejere...", + "create_tenant": "Opret lejer", + "detail": "Lejer detalje", + "contact": "Contact", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Søg efter enheds-id, værtsnavn eller IP...", + "no_registrations": "No registration requests", + "col_device_id": "Enheds-id", + "col_hostname": "Værtsnavn", + "col_platform": "Platform", + "col_ip": "IP-adresse", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Anmodet", + "col_actions": "Handlinger", + "status_pending": "Afventer", + "status_approved": "Godkendt", + "status_rejected": "Afvist", + "approve_btn": "Godkend", + "approve_confirm": "Er du sikker på, at du vil godkende denne enhed? Den modtager serverlegitimationsoplysninger og kan oprette forbindelse automatisk.", + "approved_success": "Enhedsregistrering godkendt", + "reject_btn": "Afvis", + "reject_title": "Afvis registrering", + "reject_confirm": "Er du sikker på, at du vil afvise denne registreringsanmodning?", + "reject_reason": "Årsag (valgfrit)", + "reject_reason_placeholder": "Angiv årsag til afvisning...", + "rejected_success": "Enhedsregistrering afvist", + "delete_confirm": "Er du sikker på, at du vil slette denne registreringspost?", + "deleted_success": "Registreringspost slettet", + "enrollment_title": "Enhedstilmelding", + "enrollment_subtitle": "Afventende tilmeldingsanmodninger fra BetterDesk desktop-klienter", + "enrollment_empty": "Ingen afventende tilmeldingsanmodninger", + "enrollment_approve": "Godkend", + "enrollment_reject": "Afvis", + "enrollment_display_name": "Vist navn", + "enrollment_display_name_placeholder": "Indtast et navn til denne enhed...", + "enrollment_sync_mode": "Synkroniseringstilstand", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Enhedstilmelding godkendt", + "enrollment_rejected_success": "Enhedstilmelding afvist", + "approve_title": "Godkend enhed", + "field_name": "Enhedsnavn", + "field_name_placeholder": "Indtast et navn til denne enhed...", + "field_sync_mode": "Synkroniseringstilstand", + "sync_standard": "Standard — balanceret synkronisering", + "sync_silent": "Stille — minimal telemetri", + "sync_turbo": "Turbo — aggressiv synkronisering", + "field_tags": "Tags", + "field_tags_placeholder": "Kommaadskilte tags (f.eks. kontor, bærbar)...", + "field_tags_existing": "Eksisterende tags", + "field_tag_add_placeholder": "Tilføj et nyt tag...", + "field_tag_add_btn": "Tilføj", + "field_groups": "Enhedsgrupper", + "field_folder": "Mappe", + "field_folder_none": "Ingen mappe", + "reject_ban_option": "Forbyd denne enhed", + "reject_ban_hint": "Enheden vil blive blokeret og kan ikke sende nye registreringsanmodninger.", + "banner_open_mode": "Tilmelding er åben — nye RustDesk-klienter registrerer sig uden operatørgodkendelse.", + "banner_locked_mode": "Tilmelding er låst — kun token-bundne enheder kan registrere sig.", + "enrollment_settings_link": "Tilmeldingsindstillinger" + }, + "backup": { + "title": "Sikkerhedskopi", + "desc": "Download en komplet sikkerhedskopi af din konsolkonfiguration, brugere, grupper og indstillinger. Go server peer-data er inkluderet, når BetterDesk-backend er aktiv.", + "restore_title": "Gendan", + "restore_desc": "Upload en tidligere downloadet backupfil for at gendanne konsolkonfigurationen. Vælg, hvilke sektioner der skal gendannes nedenfor.", + "stat_users": "Brugere", + "stat_settings": "Indstillinger", + "stat_folders": "Mapper", + "stat_groups": "Grupper", + "stat_strategies": "Strategier", + "stat_backend": "Backend", + "download": "Download sikkerhedskopi", + "creating": "Opretter backup...", + "download_success": "Sikkerhedskopien blev downloadet", + "upload": "Upload backup", + "restore_confirm": "Er du sikker på, at du vil gendanne fra denne sikkerhedskopi? Udvalgte afsnit vil blive overskrevet.", + "restore_success": "Sikkerhedskopien blev gendannet. Nogle ændringer kan kræve en genindlæsning af siden.", + "restored": "Gendannet", + "skipped": "Sprunget over", + "backup_date": "Sikkerhedskopidato", + "opt_settings": "Konsolindstillinger", + "opt_branding": "Branding / Tema", + "opt_folders": "Enhedsmapper", + "opt_groups": "Bruger- og enhedsgrupper", + "opt_addressbooks": "Adressebøger", + "opt_users": "Brugerkonti", + "opt_users_warning": "Destruktiv: erstatter ALLE brugerkonti med backupdata. Du kan være logget ud.", + "no_file": "Ingen backupfil valgt", + "invalid_json": "Ugyldig backupfil: ikke gyldig JSON", + "invalid_format": "Ugyldig backupfil: ikke en BetterDesk backup", + "stat_database": "Databasemotor", + "stat_keys": "Servernøgler inkluderet", + "stat_env": "Miljøfil", + "stat_uploads": "Brandingfiler", + "restart_required": "Nogle gendannede komponenter (nøgler / .env / Go-database) kræver genstart af tjenesten.", + "security_warning": "Denne sikkerhedskopi indeholder hemmeligheder. Opbevar den sikkert og del den aldrig.", + "restore_warning": "Gendannelse af hemmeligheder eller Go-serverdatabasen overskriver serveridentiteten og kræver en tjenesterestart.", + "opt_database": "Database (alle tabeller)", + "opt_database_hint": "Genimporterer alle konsoldata. Ingen genstart nødvendig.", + "opt_uploads": "Brandingfiler", + "opt_uploads_hint": "Logoer og uploadede billeder.", + "opt_secrets": "Servernøgler og hemmeligheder", + "opt_secrets_warning": "Overskriver Ed25519-serveridentitet, API-nøgle og sessionshemlighed. Kræver tjenesterestart.", + "opt_env": "Miljøfil (.env)", + "opt_env_warning": "Overskriver SESSION_SECRET, API-nøgle, database-DSN, porte og TLS-indstillinger. Kræver tjenesterestart.", + "opt_godb": "Go-serverdatabase", + "opt_godb_warning": "Overskriver Go-serverens SQLite-database (kun SQLite-backend). Kræver tjenesterestart." + }, + "cdap": { + "device_detail": "CDAP enhed", + "loading": "Indlæser...", + "loading_widgets": "Indlæser enhedswidgets...", + "load_error": "Kunne ikke indlæse enhedsdata", + "connected": "Forbundet", + "disconnected": "Afbrudt", + "device_offline_msg": "Enheden er i øjeblikket offline. Widget-værdier kan være forældede.", + "no_widgets": "Ingen tilgængelige widgets", + "no_widgets_desc": "Denne enhed har ikke registreret et CDAP-manifest med widgetdefinitioner.", + "command_log": "Kommandolog", + "clear_log": "Ryd log", + "confirm_command": "Bekræft kommando", + "select_option": "Vælg", + "cdap_status": "CDAP-status", + "cdap_enabled": "CDAP aktiveret", + "cdap_disabled": "CDAP deaktiveret", + "cdap_devices": "CDAP-enheder", + "cdap_connections": "Aktive forbindelser", + "send_command": "Send kommando", + "command_sent": "Kommandoen blev sendt", + "command_failed": "Kunne ikke sende kommandoen", + "devices_title": "CDAP enheder", + "devices_subtitle": "Tilsluttede enheder via Custom Device Application Protocol", + "stat_connected": "Forbundet", + "stat_port": "Port", + "search_devices": "Søg efter enheder...", + "no_devices": "Ingen enheder tilsluttet", + "no_devices_desc": "Ingen CDAP-enheder er tilsluttet i øjeblikket. Enheder vises her, når de opretter forbindelse til gatewayen.", + "gateway_disabled": "CDAP Gateway deaktiveret", + "gateway_disabled_desc": "Aktiver CDAP-gatewayen ved at indstille CDAP_ENABLED=true i serverkonfigurationen.", + "gateway_active": "Aktiv", + "toggle_enable": "Aktiver CDAP", + "toggle_disable": "Deaktiver CDAP", + "enabled_restart": "CDAP aktiveret. Servergenstart påkrævet for at anvende ændringer.", + "disabled_restart": "CDAP deaktiveret. Servergenstart påkrævet for at anvende ændringer.", + "widgets": "CDAP-kontrolfelter", + "type_all": "Alle", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-agent", + "type_network": "Netværk", + "type_camera": "Kamera", + "type_custom": "Brugerdefineret", + "active_alerts": "Aktive advarsler", + "alert_fired": "Advarsel udløst", + "alert_cleared": "Alarm ryddet", + "no_alerts": "Ingen aktive alarmer", + "connect_terminal": "Tilslut terminal", + "table_search": "Søg...", + "just_now": "Lige nu", + "terminal_connecting": "Opretter forbindelse til enhed...", + "terminal_disconnected": "Afbrudt", + "terminal_error": "Terminalforbindelse mislykkedes", + "linked_devices": "Forbundne enheder", + "link_device": "Link enhed", + "unlink_device": "Fjern tilknytning", + "no_linked_devices": "Ingen tilknyttede enheder", + "unlink_confirm": "Er du sikker på, at du vil fjerne linket til denne enhed?", + "link_prompt": "Indtast peer-id'et for at linke til denne enhed:", + "connect_desktop": "Tilslut skrivebordet", + "connect_video": "Tilslut Stream", + "connect_files": "Gennemse filer", + "connect_audio": "Tilslut lyd", + "upload_file": "Upload", + "desktop_connecting": "Opretter forbindelse...", + "video_connecting": "Opretter forbindelse...", + "files_connecting": "Opretter forbindelse...", + "audio_connecting": "Opretter forbindelse...", + "audio_streaming": "Streamer", + "clipboard_in": "Udklipsholder modtaget", + "clipboard_out": "Udklipsholder sendt", + "monitor_select": "Vælg Monitor", + "keyframe_request": "Anmod om Keyframe", + "quality_auto": "Auto kvalitet" + }, + "desktop": { + "switch_mode": "Skrivebordstilstand", + "console_mode": "Konsoltilstand", + "loading": "Indlæser...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Luk", + "widgets_mode": "Kontrolfelttilstand", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Tilføj widget", + "remove_widget": "Fjern widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurer", + "search_widgets": "Søg efter widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Enheder", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Skriv noter her...", + "search_placeholder": "Søg efter enheder, sider, indstillinger...", + "search_pages": "Pages", + "search_devices": "Enheder", + "search_no_results": "No results", + "exit_desktop": "Afslut skrivebordstilstand", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Enhedsstatus", + "widget_server_health": "Server info", + "widget_system_stats": "Enhedsmålere", + "widget_device_list": "Enhedsliste", + "widget_quick_actions": "Hurtige handlinger", + "widget_recent_activity": "Seneste aktivitet", + "widget_notes": "Notes", + "widget_network_monitor": "Netværksmonitor", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP enheder", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Enhedsgitter", + "widget_multi_gauge": "Server målere", + "widget_weekly_chart": "Ugentlig aktivitet", + "widget_quick_controls": "Hurtig kontrol", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Forbindelsesstatistik", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Brugersessioner", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Ingen enheder", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Åbn", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Indstil URL i config", + "label_server_uptime": "Server oppetid", + "label_merged_info": "Slået sammen til serverinfo-widget", + "label_with_notes": "Med noter", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Enheder i alt", + "label_throughput": "Throughput", + "label_active_relays": "Aktive relæer", + "label_total_relayed": "Total relæet", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrer enheder...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Ingen CDAP enheder", + "action_add_widget": "Tilføj widget", + "label_merged_server_info": "Slået sammen til serverinfo-widget", + "wp_images": "Images", + "wp_colors": "Solide farver", + "wp_custom_color": "Brugerdefineret farve", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Tapetbilleder er ikke installeret på denne server.", + "wp_download_hint": "Placer PNG-billeder i mappen public/wallpapers/ for at aktivere valg af tapet.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Procesmonitor", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Databasestatistik", + "widget_docker_containers": "Docker containere", + "widget_shell_command": "Shell kommando", + "widget_device_map": "Enhedskort", + "widget_remote_connect": "Fjerntilslutning", + "label_no_online": "Ingen online enheder", + "label_no_events": "Ingen begivenheder i dag", + "label_event_title": "Begivenhedens titel:", + "label_no_data": "Ingen tilgængelige data", + "label_download_speed": "Download hastighed", + "label_latency": "Latency", + "label_server": "Serverinstans", + "label_run_test": "Run Test", + "label_testing": "Tester...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Ingen containere", + "label_docker_unavailable": "Docker ikke tilgængelig", + "label_no_command": "Ingen kommando konfigureret", + "label_no_output": "Ingen output endnu", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Gem forudindstilling", + "label_load_preset": "Load Preset", + "label_preset_name": "Forudindstillet navn:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Auto Arranger", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 kolonner (lige)", + "label_2col_wide": "2 kolonner (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget-gruppe", + "ungroup_widgets": "Ophæv gruppering af widgets", + "group_widgets": "Gruppér valgte widgets", + "snap_layouts": "Snap-layouts", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Snap øverst til venstre", + "snap_top_right": "Snap øverst til højre", + "snap_bottom_left": "Snap nederst til venstre", + "snap_bottom_right": "Snap nederst til højre", + "aero_shake": "Ryst for at minimere andre", + "zone_resize": "Træk kant for at ændre størrelse på zoner", + "zone_borders": "Trækbare zonegrænser", + "app_drawer": "Applications", + "search_apps": "Søg i apps...", + "edit_shortcuts": "Rediger genveje", + "widgets": "Kontrolfelter", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Klik hvor som helst, eller tryk på en tast for at logge ind", + "username_placeholder": "Brugernavn", + "password_placeholder": "Adgangskode", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "To-faktor-godkendelse", + "totp_subtitle": "Indtast den 6-cifrede kode fra din autentificeringsapp", + "back_to_login": "Tilbage til login", + "fill_all_fields": "Udfyld venligst alle felter", + "invalid_credentials": "Ugyldigt brugernavn eller adgangskode", + "invalid_code": "Ugyldig bekræftelseskode", + "enter_6_digits": "Indtast alle 6 cifre", + "network_error": "Network error — check your connection", + "session_expired": "Session udløb. Log venligst ind igen." + }, + "tokens": { + "title": "Enhedstokens", + "subtitle": "Administrer tilmeldingstokens til automatisk levering af enhed", + "enrollment_mode": "Tilmeldingstilstand", + "mode_open": "Åbn", + "mode_open_desc": "Enhver enhed kan registrere sig uden et token", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Samlede tokens", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Søg efter tokens...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Bulk Generer", + "create": "Opret token", + "edit": "Rediger token", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Oprettet", + "actions": "Actions", + "name_placeholder": "f.eks. Office PC batch", + "max_uses": "Max Uses", + "max_uses_hint": "0 = ubegrænset", + "expires_in": "Expires In", + "no_expiration": "Ingen udløb", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Valgfri bemærkning om dette token...", + "count": "Count", + "count_range": "Antal tokens, der skal genereres (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token oprettet", + "tokens_generated": "Tokens genereret", + "copy_warning": "Kopiér tokenet nu. Det bliver ikke vist igen.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Er du sikker på, at du vil tilbagekalde dette token? Enheder, der allerede er registreret hos den, vil ikke blive påvirket.", + "revoked_success": "Token blev tilbagekaldt", + "no_tokens": "Ingen tokens fundet", + "expired": "Expired", + "never": "Never", + "save": "Gem", + "cancel": "Annuller", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Næste", + "prev": "Previous", + "skip": "Skip", + "finish": "Afslut", + "close": "Luk", + "step_of": "{current} af {total}", + "console_sidebar_title": "Navigationssidebjælke", + "console_sidebar_text": "Få adgang til alle moduler herfra. Klik på et ikon for at navigere til den sektion. Sidebjælken tilpasser sig din skærmstørrelse.", + "console_expand_title": "Udvid sidepanelet", + "console_expand_text": "Klik her for at udvide sidebjælken og se hele etiketter for alle navigationselementer. Klik igen for at skjule.", + "console_search_title": "Hurtig søgning", + "console_search_text": "Søg hurtigt efter enheder, indstillinger eller handlinger. Tryk på Ctrl+K for tastaturgenvej.", + "console_dashboard_title": "Oversigtspanel", + "console_dashboard_text": "Din centrale hub, der viser serverstatus, online-enheder og hurtige handlinger. Hold øje med vigtige metrics på et øjeblik.", + "console_devices_title": "Enhedshåndtering", + "console_devices_text": "Se, søg og administrer alle tilsluttede enheder. Filtrer efter status, tildel tags, og konfigurer individuelle enhedsindstillinger.", + "console_settings_title": "Indstillinger", + "console_settings_text": "Konfigurer serveradfærd, sikkerhedsindstillinger, branding og brugeradministration. Tilpas BetterDesk, så den passer til dine behov.", + "console_desktop_title": "Skrivebordstilstand", + "console_desktop_text": "Skift til skrivebordstilstand for et arbejdsområde med vinduer med widgets. Perfekt til multi-tasking og overvågning af dashboards.", + "console_complete_title": "Du er klar!", + "console_complete_text": "Udforsk sidebjælkekategorierne for at opdage alle funktioner. Klik på hjælpeikonet når som helst for at genstarte denne vejledning.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Den øverste bjælke viser uret, hurtige kontroller og adgang til appskuffen. Klik på gitterikonet for at gennemse alle apps.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Åbn appskuffen for at søge og starte enhver konsolfunktion som et flydende vindue. Apps er organiseret efter kategori.", + "desktop_widgets_title": "Kontrolfelter", + "desktop_widgets_text": "Dit arbejdsområde, der kan tilpasses. Widgets viser live information og giver hurtig adgang til funktioner. Træk for at omarrangere.", + "desktop_add_widget_title": "Tilføj widgets", + "desktop_add_widget_text": "Klik her for at gennemse tilgængelige widgets. Vælg mellem overvågningsskærme, enhedslister, noter og mere.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Åbne apps vises her. Klik for at fokusere eller minimere vinduer. Hold musen over ikoner for at se appetiketter.", + "desktop_snap_title": "Snap-layouts", + "desktop_snap_text": "Træk vinduer til skærmens kanter for at fastgøre dem på plads, eller svæv maksimer-knappen for forudindstillinger af layout. Prøv Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Apps åbnes i vinduer, der kan trækkes, kan ændres størrelse. Minimer, maksimer eller luk fra titellinjen. Windows lag over widgets.", + "desktop_search_title": "Hurtig søgning", + "desktop_search_text": "Søg på tværs af enheder, sider og indstillinger. Tryk på Ctrl+K hvor som helst for at åbne søgning med det samme.", + "desktop_complete_title": "Skrivebordstilstand klar!", + "desktop_complete_text": "Prøv at åbne apps fra skuffen og arrangere vinduer side om side. Brug widget-forudindstillinger til hurtige dashboard-layouts.", + "devices_folders_title": "Enhedsmapper", + "devices_folders_text": "Organiser enheder i mapper. Klik på en mappe for at filtrere listen. Højreklik for at omdøbe eller slette.", + "devices_search_title": "Søg og filtrer", + "devices_search_text": "Søg efter ID, værtsnavn eller platform. Brug statuspillerne til kun at vise online, offline eller alle enheder.", + "devices_table_title": "Enhedsliste", + "devices_table_text": "Klik på en enhedsrække for detaljer. Brug kebabmenuen til højre til hurtige handlinger som f.eks. oprette forbindelse, redigere tags eller slette.", + "devices_complete_title": "Enhedshåndtering klar!", + "devices_complete_text": "Træk enheder mellem mapper for at organisere dem. Dobbeltklik på en enhed for at åbne dens detaljepanel.", + "settings_tabs_title": "Indstillinger Kategorier", + "settings_tabs_text": "Naviger mellem Generelt, Sikkerhed, Udseende og andre konfigurationssektioner.", + "settings_content_title": "Konfiguration", + "settings_content_text": "Hver sektion indeholder specifikke server- og konsolindstillinger. Ændringer gemmes, når du klikker på Gem.", + "settings_complete_title": "Oversigt over indstillinger", + "settings_complete_text": "Tjek sikkerhedsindstillinger for 2FA, API nøgler og brugeradministration. Besøg Udseende for at tilpasse konsoludseendet.", + "help": "Hjælp og vejledninger", + "tour_console": "Konsoltur", + "tour_desktop": "Skrivebordstur", + "tour_devices": "Enhedsrundvisning", + "tour_settings": "Indstillinger Rundvisning", + "reset_all": "Nulstil alle selvstudier", + "tour_remote": "Fjernstyringstur", + "tour_organization": "Organisationsopsætning", + "tour_cdap": "CDAP Oversigt", + "tour_chat": "Grundlæggende om chat", + "remote_toolbar_title": "Fjernværktøjslinje", + "remote_toolbar_text": "Få adgang til skærmkontroller, udklipsholdersynkronisering, specielle taster og kvalitetsindstillinger fra værktøjslinjen. Skift fuldskærm med F11.", + "remote_canvas_title": "Fjerndisplay", + "remote_canvas_text": "Dette er fjernskærmen. Klik inde for at begynde at styre fjernenheden. Indtastning af mus og tastatur videresendes automatisk.", + "remote_clipboard_title": "Udklipsholder Sync", + "remote_clipboard_text": "Kopier og indsæt tekst mellem din computer og fjernenheden. Brug Ctrl+C / Ctrl+V som normalt, mens du fokuserer på fjerndisplayet.", + "remote_complete_title": "Klar til fjernsession!", + "remote_complete_text": "Brug knapperne på værktøjslinjen til specielle taster (Ctrl+Alt+Del, PrintScreen) og skærmskift. Tryk på Escape eller klik på Afbryd forbindelse for at afslutte sessionen.", + "org_overview_title": "Organisationer", + "org_overview_text": "Organisationer giver dig mulighed for at gruppere brugere, enheder og politikker. Hver organisation har sin egen administrator, operatører og indstillinger.", + "org_create_title": "Opret organisation", + "org_create_text": "Klik her for at oprette en ny organisation. Angiv et navn, slug og valgfri beskrivelse. Du bliver ejer af den nye organisation.", + "org_members_title": "Administrer medlemmer", + "org_members_text": "Inviter brugere via e-mail, tildel roller (admin, operatør, bruger) og administrer adgang. Medlemmer kan se enheder, der er tildelt deres organisation.", + "org_devices_title": "Tildel enheder", + "org_devices_text": "Tilføj enheder til organisationen. Enheder, der er tildelt her, vil arve organisationens politikker og være synlige for dens medlemmer.", + "org_policies_title": "Organisationspolitikker", + "org_policies_text": "Indstil sikkerhedspolitikker som adgangskodekrav, sessionstimeout, 2FA-håndhævelse og regler for enhedstilmelding for organisationen.", + "org_complete_title": "Organisationsopsætning fuldført!", + "org_complete_text": "Inviter dit team og tildel enheder for at begynde at bruge organisationsstyret administration. Politikker gælder automatisk for alle medlemmer.", + "cdap_devices_title": "CDAP-enheder", + "cdap_devices_text": "Se alle tilsluttede CDAP-enheder — IoT-sensorer, PLC'er, broer og brugerdefinerede agenter. Grønne indikatorer viser liveforbindelser.", + "cdap_widgets_title": "Widget-kontrolpanel", + "cdap_widgets_text": "Widgets viser realtidsdata fra enheder. Målere, kontakter, LED'er, diagrammer — hver widgettype visualiserer en anden slags data.", + "cdap_commands_title": "Send kommandoer", + "cdap_commands_text": "Interager med enheder ved at sende kommandoer. Nogle kommandoer kræver bekræftelse. Kommandologgen gemmer historikken.", + "cdap_terminal_title": "Enhedsterminal", + "cdap_terminal_text": "Åbn en terminalsession til CDAP-agenter for avanceret diagnostik eller manuel konfiguration.", + "cdap_complete_title": "CDAP-oversigt afsluttet!", + "cdap_complete_text": "Udforsk enhedswidgets, send kommandoer og brug terminal eller filbrowser til dybere styring. CDAP-agenter rapporterer målinger automatisk.", + "chat_contacts_title": "Kontakter og grupper", + "chat_contacts_text": "Se dine kontakter og chatgrupper. Klik på en kontakt for at åbne en samtale. Grønne prikker angiver onlinebrugere.", + "chat_send_title": "Send beskeder", + "chat_send_text": "Indtast din besked, og tryk på Enter for at sende. Beskeder er ende-til-ende-krypteret, når begge parter understøtter E2E.", + "chat_file_title": "Del filer", + "chat_file_text": "Klik på den vedhæftede fil for at dele filer. Filer er krypteret og kan være op til 50 MB.", + "chat_complete_title": "Chat klar!", + "chat_complete_text": "Chat med operatører og slutbrugere i realtid. Opret grupper til teamkommunikation. Alle beskeder understøtter læsekvitteringer.", + "disable_tutorials": "Deaktiver selvstudier", + "enable_tutorials": "Aktiver selvstudier" + }, + "help_request": { + "title": "Hjælpeanmodninger", + "subtitle": "Administrer indkommende anmodninger om hjælp fra desktop-klienter", + "new_request": "Ny anmodning om hjælp", + "device": "Enhed", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Ingen anmodninger om hjælp", + "notification": "Hjælpanmodning modtaget fra", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisationer", + "create": "Opret organisation", + "edit": "Rediger organisation", + "detail": "Organisationsdetaljer", + "name": "Name", + "slug": "Slug (URL-sikker)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Enheder", + "invitations": "Invitations", + "settings": "Indstillinger", + "add_user": "Add User", + "assign_device": "Tildel enhed", + "create_invitation": "Opret invitation", + "delete_confirm": "Vil du slette denne organisation? Dette vil fjerne alle tilknyttede brugere, enheder og indstillinger.", + "no_orgs": "Ingen organisationer endnu", + "no_orgs_hint": "Opret din første organisation til at begynde at administrere enheder og brugere.", + "connection_policy": "Forbindelsespolitik", + "allow_file_transfer": "Tillad filoverførsel", + "allow_clipboard": "Tillad udklipsholder", + "max_session_duration": "Maks. sessionsvarighed (min)", + "role_owner": "Owner", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Medlem", + "username": "Brugernavn", + "password": "Adgangskode", + "display_name": "Vist navn", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Enheds-id", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Tildelt bruger", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Ingen brugere i denne organisation.", + "no_devices": "Ingen enheder er tildelt denne organisation.", + "no_invitations": "Ingen invitationer.", + "user_added": "User added", + "user_removed": "Bruger fjernet", + "user_updated": "Brugerrolle opdateret", + "device_assigned": "Enhed tildelt", + "device_unassigned": "Enheden er ikke tildelt", + "invitation_created": "Invitation oprettet", + "settings_saved": "Indstillinger gemt", + "org_deleted": "Organisation slettet", + "confirm_remove_user": "Vil du fjerne denne bruger fra organisationen?", + "confirm_unassign_device": "Vil du fjerne tildelingen af denne enhed fra organisationen?", + "confirm_delete_org": "Vil du slette denne organisation og alle tilknyttede data?", + "edit_role": "Rediger rolle", + "raw_settings": "Rå indstillinger", + "key": "Key", + "value": "Value", + "save": "Gem indstillinger", + "policy_unattended": "Uovervåget (øjeblikkelig)", + "policy_attended": "Deltog (med bekræftelse)", + "policy_ask": "Always ask", + "expires_hours": "Udløb (timer)", + "loading_failed": "Kunne ikke indlæse organisationsdata", + "name_slug_required": "Navn og snegl er påkrævet", + "org_created": "Organisation oprettet", + "org_updated": "Organisationen opdateret", + "create_new_user": "Opret ny", + "add_existing_user": "Tilføj eksisterende", + "none_available": "none", + "select_user": "Vælg bruger", + "org_role": "Organisations rolle", + "link_user_hint": "Den valgte bruger vil blive knyttet til denne organisation ved hjælp af deres serverkontooplysninger.", + "no_available_users": "Alle serverbrugere er allerede knyttet til denne organisation.", + "user_linked": "Bruger knyttet til organisation" + }, + "chat": { + "e2e_enabled": "End-to-end krypteret", + "e2e_establishing": "Etablerer sikker kanal...", + "e2e_established": "Sikker kanal etableret", + "e2e_unsupported": "E2E-kryptering understøttes ikke i denne browser", + "typing_indicator": "skriver...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Fil", + "file_too_large": "Filen er for stor (maks. 50 MB)", + "file_encrypted": "Krypteret filoverførsel", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Sikkerhedsnøgler drejet", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Grupper", + "no_contacts": "Ingen kontakter endnu", + "no_groups": "Ingen grupper endnu", + "no_messages": "Ingen beskeder endnu", + "no_results": "Ingen resultater fundet", + "select_conversation": "Vælg en samtale for at begynde at chatte", + "type_message": "Skriv en besked...", + "send": "Send besked", + "attach_file": "Vedhæft fil", + "emoji": "Emoji", + "search_messages": "Søg efter beskeder", + "create_group": "Opret gruppe", + "group_name": "Gruppenavn", + "group_members": "Medlemmer", + "cancel": "Annuller", + "create": "Opret", + "members": "medlemmer", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Søg i kontakter og beskeder", + "select_conversation_hint": "Vælg en samtale for at se beskeder", + "info": "Info", + "group_name_placeholder": "Indtast gruppenavn" + }, + "toast": { + "device_connected": "Enhed tilsluttet", + "device_disconnected": "Enhed afbrudt", + "session_started": "Fjernsession startede", + "session_ended": "Fjernsession afsluttet", + "file_upload_complete": "Filupload fuldført", + "settings_saved": "Indstillinger gemt", + "error_generic": "Der opstod en fejl", + "connection_lost": "Forbindelse mistet", + "reconnecting": "Genopretter forbindelse..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Admin-værktøjer og diagnostiske værktøjer", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Send forespørgsel", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Indtast tekst...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Gå til server", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Tjek værtens tilgængelighed og latenstid", + "tcp_title": "TCP Portkontrol", + "tcp_desc": "Test TCP-portforbindelsen", + "ssl_title": "SSL-inspektør", + "ssl_desc": "Undersøg SSL/TLS-certifikatoplysninger", + "http_title": "HTTP Sundhedstjek", + "http_desc": "Bekræft HTTP-endepunktsstatus", + "dns_title": "DNS Lookup", + "dns_desc": "Løs hostnavn til IP-adresse", + "whois_title": "DNS Records", + "whois_desc": "Forespørgsel A, AAAA, MX, TXT, NS poster", + "speed_title": "Speed Test", + "speed_desc": "Mål downloadbåndbredde", + "run_speed_test": "Kør hastighedstest", + "wol_title": "Wake-on-LAN", + "wol_desc": "Send magisk pakke for at vække en enhed", + "wol_sent": "Magisk pakke sendt", + "hash_title": "Hashberegner", + "hash_desc": "Generer kryptografiske hashes", + "password_title": "Adgangskodegenerator", + "password_desc": "Generer en sikker tilfældig adgangskode", + "jwt_title": "JWT Decoder", + "jwt_desc": "Afkode og inspicer JSON Web-tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Indkode eller afkode Base64-data", + "url_title": "URL Encoder", + "url_desc": "Indkode eller afkode URL-komponenter", + "processes_title": "Procesliste", + "processes_desc": "Se kørende systemprocesser", + "disk_title": "Disk Usage", + "disk_desc": "Se brug af diskpartitioner", + "db_title": "Databasestatistik", + "db_desc": "Se databasetabelstatistik", + "docker_title": "Docker containere", + "docker_desc": "Se kørende Docker-containere", + "logs_title": "Log Viewer", + "logs_desc": "Se seneste logoutput", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Gyldig fra", + "valid_to": "Gyldig til", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Ingen tilgængelige data", + "no_docker": "Ingen Docker-beholdere fundet eller Docker ikke tilgængelig", + "no_logs": "Ingen log linjer tilgængelige" + }, + "policies": { + "title": "Organisationspolitikker", + "subtitle": "Administrer sikkerheds-, forbindelses- og funktionspolitikker for dine organisationer", + "select_org": "Organisation", + "select_org_placeholder": "Vælg en organisation...", + "select_org_first": "Vælg en organisation for at se politikrevisionslog.", + "configured": "Konfigureret", + "connection_title": "Forbindelsespolitik", + "connection_desc": "Styr, hvordan fjernsessioner etableres", + "connection_mode": "Tilslutningstilstand", + "mode_attended": "Deltog (kræver brugergodkendelse)", + "mode_unattended": "Uovervåget (tillad altid)", + "mode_ask": "Spørg altid", + "max_session": "Maks. sessionsvarighed (minutter)", + "idle_lock": "Timeout for tomgangslås (minutter)", + "wallpaper_policy": "Tapet under session", + "wallpaper_show": "Vis", + "wallpaper_hide_session": "Skjul under sessionen", + "wallpaper_hide_always": "Skjul altid", + "features_title": "Funktionspolitik", + "features_desc": "Aktiver eller deaktiver specifikke funktioner for enheder", + "allow_file_transfer": "Tillad filoverførsel", + "allow_clipboard": "Tillad Clipboard Sync", + "allow_audio": "Tillad lydstreaming", + "allow_recording": "Tillad sessionsoptagelse", + "security_title": "Sikkerhedspolitik", + "security_desc": "Håndhæv sikkerhedskrav til organisationsenheder", + "require_2fa": "Kræv 2FA for uovervåget adgang", + "password_min_length": "Minimum adgangskodelængde", + "password_require_special": "Kræv specialtegn", + "password_max_age": "Adgangskode maks. alder (dage, 0=aldrig)", + "allowed_operators": "Tilladte operatørroller (kommasepareret)", + "network_title": "Netværkspolitik", + "network_desc": "Styr relæservere og direkte forbindelser", + "block_direct_p2p": "Bloker direkte P2P (kraftrelæ)", + "allowed_relays": "Tilladte relæservere (én pr. linje)", + "ip_allowlist": "IP-tilladelsesliste (CIDR, én pr. linje)", + "update_title": "Opdater politik", + "update_desc": "Styr automatiske opdateringer og opdateringskanaler", + "auto_update": "Aktiver automatisk opdatering", + "update_channel": "Opdater kanal", + "audit_title": "Politikændringer", + "audit_desc": "Seneste politikændringshistorie", + "no_audit": "Ingen politikændringer registreret.", + "save_success": "Politik blev gemt", + "save_failed": "Politikken kunne ikke gemmes", + "load_failed": "Politikker kunne ikke indlæses", + "block_direct_p2p_hint": "Gælder for enheder i denne organisation." + }, + "attestation": { + "title": "Enhedsattest", + "subtitle": "Overvåg enhedsidentitetsbekræftelse og hardwarefingeraftryk", + "verified": "Verified", + "pending": "Pending", + "failed": "Mislykkedes", + "device_list": "Enhedsattestationsposter", + "device_list_desc": "Hardware-fingeraftryk og identitetsbekræftelsesstatus", + "col_device": "Enheds-id", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Ingen attestationsregistreringer fundet.", + "verify_success": "Enheden er markeret som bekræftet", + "verify_failed": "Enheden kunne ikke bekræftes", + "revoke_success": "Enhedsattest tilbagekaldt", + "revoke_failed": "Kunne ikke tilbagekalde attestation" + }, + "fleet": { + "title": "Flådestyring", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Arbejdsgangsbygger", + "tab_compliance": "Compliance", + "res_title": "Ressource kortlægning", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Netværksdrev", + "res_type_dns": "DNS server", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Tilføj ressource", + "res_name": "Ressourcenavn", + "res_type": "Type", + "res_address": "Adresse/sti", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organisation", + "res_scope_group": "Gruppe", + "res_scope_device": "Enhed", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Ingen ressourcer fundet. Klik på 'Tilføj ressource' for at oprette en.", + "res_confirm_delete": "Er du sikker på, at du vil slette denne ressource?", + "task_title": "Opgaveplanlægger", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Mislykkedes", + "task_search": "Search tasks…", + "task_create": "Opret opgave", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Opdatering", + "task_type_restart": "Genstart", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Enheds-id'er eller gruppenavne, kommasepareret", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Tidsplan værdi", + "task_script": "Script / Kommando", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Ingen opgaver fundet. Klik på 'Opret opgave' for at komme i gang.", + "task_confirm_delete": "Er du sikker på, at du vil slette denne opgave?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Arbejdsgangsbygger", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Gem", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Vælg en node for at redigere dens egenskaber.", + "builder_node_trigger_manual": "Manuel udløser", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Hændelsesudløser", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Genstart Svc", + "builder_node_action_file_deploy": "Implementer fil", + "builder_node_action_message": "Send besked", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Send advarsel", + "builder_node_result_chain": "Kæde arbejdsgang", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Workflow navn:", + "comp_title": "Softwareoverholdelse", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Enhed", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Vil du køre automatisk afhjælpning på denne enhed?", + "comp_no_data": "Ingen overholdelsesdata tilgængelige. Kør en scanning for at komme i gang.", + "save": "Gem", + "cancel": "Annuller", + "close": "Luk", + "edit": "Rediger", + "delete": "Slet", + "actions": "Actions", + "all_orgs": "Alle organisationer", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Netværksdrev", + "type_dns": "DNS server", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Tilføj ressource", + "edit_resource": "Rediger ressource", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adresse/sti", + "scope_org": "Organisation", + "scope_group": "Gruppe", + "scope_device": "Enhed", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Er du sikker på, at du vil slette dette element?", + "all_statuses": "Alle statusser", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Mislykkedes", + "search_tasks": "Search tasks�", + "create_task": "Opret opgave", + "edit_task": "Rediger opgave", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Filimplementering", + "task_type_registry": "Registry", + "target_devices": "Målenheder", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / Kommando", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Indlæser", + "no_output": "Ingen output tilgængelig", + "error_loading": "Fejl ved indlæsning af data", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuel udløser", + "node_schedule": "Schedule", + "node_event": "Hændelsesudløser", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Genstart Svc", + "node_file_deploy": "Implementer fil", + "node_send_message": "Send besked", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Send advarsel", + "node_chain": "Kæde arbejdsgang", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Alle organisationer", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Enhed", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Vil du køre automatisk afhjælpning på denne enhed?" + }, + "scaling": { + "title": "Skalering & Relæstyring", + "tab_overview": "Oversigt", + "tab_relays": "Relay Nodes", + "tab_rules": "Tildelingsregler", + "tab_capacity": "Kapacitetsplanlægning", + "arch_title": "Netværksarkitektur", + "arch_loading": "Indlæser arkitekturdiagram...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Enheder i alt", + "stat_active_sessions": "Aktive sessioner", + "stat_bandwidth": "Samlet båndbredde", + "relay_health": "Stafett sundhed", + "no_relays": "Ingen relæknuder er konfigureret. Tilføj din første relæknude for at fordele belastningen.", + "relay_search": "Søg relæer...", + "relay_add": "Tilføj relæknude", + "relay_edit": "Rediger relæknude", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Enheder", + "col_sessions": "Sessioner", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Mål relæ", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Aktiveret", + "status_disabled": "Deaktiveret", + "confirm_delete_relay": "Er du sikker på, at du vil slette denne relæknude?", + "confirm_delete_rule": "Er du sikker på, at du vil slette denne tildelingsregel?", + "rules_hint": "Tildelingsregler bestemmer, hvilken relæserver, der håndterer specifikke enhedsgrupper. Regler vurderes efter prioritet (laveste først).", + "rule_add": "Add Rule", + "rule_edit": "Rediger regel", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Enhedsgruppe", + "match_tag": "Enhedsmærke", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Primær reservenode", + "fallback_nearest": "Nærmeste relæ", + "relay_max_sessions": "Max sessioner", + "relay_max_bandwidth": "Maks. båndbredde (Mbps)", + "cap_tiers": "Kapacitetsniveauer", + "cap_loading": "Indlæser kapacitetsdata...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Ingen tilgængelige anbefalinger.", + "cap_planning": "Infrastrukturplanlægning", + "cap_config": "Konfiguration", + "cap_max_devices": "Max enheder", + "cap_max_sessions": "Max sessioner", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Enhedens kapacitet", + "cap_tier_sessions": "Sessionskapacitet", + "cap_tier_bandwidth": "Båndbreddekapacitet", + "cap_single_sqlite": "Enkelt server (SQLite)", + "cap_single_pg": "Enkelt server (PostgreSQL)", + "cap_master_3": "Master + 3 relæer", + "cap_master_10": "Master + 10 relæer", + "rec_no_relays": "Ingen relæknuder er konfigureret. Overvej at tilføje relæknuder for bedre ydeevne og redundans.", + "rec_devices_high": "Enhedsudnyttelsen er høj. Overvej at tilføje flere relæknuder for at fordele belastningen.", + "rec_sessions_high": "Sessionskapaciteten nærmer sig sin grænse. Overvej at opgradere relæinfrastruktur.", + "rec_cpu_high": "Nogle relæknuder rapporterer højt CPU-forbrug. Overvej belastningsbalancering eller kapacitetsopgraderinger.", + "rec_all_good": "Alle systemer fungerer inden for normale parametre. Ingen handling påkrævet.", + "save": "Gem", + "cancel": "Annuller", + "edit": "Rediger", + "delete": "Slet", + "close": "Luk", + "no_rules": "Ingen tildelingsregler.", + "relays_info_banner": "Denne liste er informativ. De relæservere, der faktisk bruges af klienter, konfigureres via miljøvariablen RELAY_SERVERS på BetterDesk-serveren.", + "relay_name_address_required": "Navn og adresse er påkrævet.", + "relay_save_failed": "Relæknudepunktet kunne ikke gemmes.", + "relay_delete_failed": "Relæknudepunktet kunne ikke slettes.", + "relay_saved": "Relæknude er gemt.", + "relay_deleted": "Relæknude er slettet.", + "rule_name_value_required": "Regelnavn og matchværdi er påkrævet.", + "rule_save_failed": "Reglen kunne ikke gemmes.", + "rule_delete_failed": "Reglen kunne ikke slettes.", + "rule_saved": "Regel gemt.", + "rule_deleted": "Regel slettet." + }, + "cross_platform": { + "title": "Kompatibilitet på tværs af platforme", + "tab_matrix": "Kompatibilitetsmatrix", + "tab_distribution": "Distribution", + "tab_protocols": "Protokoller", + "tab_limitations": "Begrænsninger", + "matrix_hint": "Funktionsunderstøttelsesmatrix på tværs af alle understøttede platforme. Grøn = fuld støtte, gul = delvis, grå = ikke tilgængelig, blå = planlagt.", + "col_feature": "Funktion", + "legend_full": "Fuld støtte", + "legend_partial": "Delvis støtte", + "legend_none": "Ikke tilgængelig", + "legend_planned": "Planlagt", + "platform_breakdown": "Platformnedbrud", + "arch_breakdown": "Arkitektur sammenbrud", + "version_breakdown": "Versionsopdeling", + "summary": "Resumé", + "total_devices": "Enheder i alt", + "unique_platforms": "Platforme", + "unique_archs": "Arkitekturer", + "unique_versions": "Klientversioner", + "no_devices": "Ingen enheder registreret endnu.", + "protocols_hint": "Forhandling af protokolkapacitet sikrer, at hver klient kun modtager de funktioner, den understøtter. Serveren tilpasser adfærd baseret på rapporterede muligheder.", + "capability_negotiation": "Kapacitetsforhandling", + "codec_support": "Codec-support (online-enheder)", + "feature_support": "Funktionssupport (online enheder)", + "no_codec_data": "Ingen tilgængelige codec-data fra online-enheder.", + "no_feature_data": "Ingen funktionsdata tilgængelige fra online-enheder.", + "protobuf_schema": "Protokolbufferskema", + "diagram_client": "Klient", + "diagram_server": "BetterDesk server", + "diagram_peer": "Klientnode", + "limitations_hint": "Hver platform har specifikke begrænsninger, der påvirker tilgængelige funktioner. Gennemgå disse begrænsninger, når du planlægger implementeringer.", + "feat_desktop_client": "Desktop klient", + "feat_background_agent": "Baggrundsagent", + "feat_remote_target": "Fjernmål", + "feat_screen_capture": "Skærmoptagelse", + "feat_input_injection": "Input injektion", + "feat_file_transfer": "Filoverførsel", + "feat_clipboard_sync": "Udklipsholder Sync", + "feat_audio_streaming": "Lydstreaming", + "feat_chat": "Chat", + "feat_h264": "H.264 codec", + "feat_vp9": "VP9 codec", + "feat_av1": "AV1 codec", + "feat_cdap_agent": "CDAP-agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webbrowser", + "platform_chromeos": "ChromeOS", + "status_production": "Produktion", + "status_testing": "Test", + "status_planned": "Planlagt", + "status_limited": "Begrænset", + "status_experimental": "Eksperimentel", + "limit_win_uac": "UAC-højde påkrævet til serviceinstallation og input-injektion på sikre desktops.", + "limit_win_service": "Kører som NSSM service; kræver administratorrettigheder til installation.", + "limit_win_firewall": "Windows Firewall-regler skal tillade porte 21115-21119 for relæforbindelser.", + "limit_linux_wayland": "Wayland-komponister begrænser programmatisk skærmoptagelse; PipeWire-portal API påkrævet.", + "limit_linux_pipewire": "Lydoptagelse kræver PipeWire; PulseAudio fallback tilgængelig, men begrænset.", + "limit_linux_arm": "ARM64 builds tilgængelige; nogle codecs kan bruge softwareafkodning (langsommere).", + "limit_mac_screen": "Tilladelse til skærmoptagelse påkrævet i Systemindstillinger > Fortrolighed og sikkerhed.", + "limit_mac_signing": "Agent skal være underskrevet med Apple Developer ID for distribution.", + "limit_mac_notarize": "Notarisering påkrævet for macOS Gatekeeper (ikke-App Store-distribution).", + "limit_android_projection": "MediaProjection API kræver brugersamtykke for hver skærmoptagelsessession.", + "limit_android_accessibility": "Inputinjektion kræver AccessibilityService; begrænset i Android 14+.", + "limit_android_battery": "Baggrundstjeneste begrænset af døsetilstand; kan kræve batterioptimeringsfritagelse.", + "limit_ios_capture": "Apple forbyder baggrundsskærmbillede; kun seer-tilstand understøttet.", + "limit_ios_input": "Ingen input-injektion tilladt; Kun fjernvisning og chat.", + "limit_ios_appstore": "Distribution kun via App Store; TestFlight til beta-test.", + "limit_web_https": "WebCodecs API og WebRTC kræver HTTPS; HTTP falder tilbage til JMuxer (begrænsede codecs).", + "limit_web_codec": "Codec-understøttelse afhænger af browseren; H.264 bredt understøttet, VP9/AV1 varierer.", + "limit_web_performance": "Ydeevne begrænset af browsersandbox; ingen direkte hardwareacceleration.", + "limit_chrome_crostini": "Fuld agentstøtte kun inde i Crostini Linux-beholderen.", + "limit_chrome_pwa": "PWA-tilstand giver kun web-funktioner; ingen native agent-kapaciteter.", + "limit_chrome_input": "Inputinjektion understøttes ikke uden for Crostini-beholderen.", + "feat_session_recording": "Sessionsoptagelse", + "feat_multi_monitor": "Flere skærme", + "feat_unattended_access": "Ubevogtet adgang", + "limit_win_virtual_account": "Tjenestee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Tjenestee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Sikkerhedsrevision", + "tab_overview": "Oversigt", + "tab_events": "Revisionsbegivenheder", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Sikkerhedsscore", + "failed_logins": "Mislykkede logins (24 timer)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Gamle nøgler (>90d)", + "security_checks": "Sikkerhedstjek", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Sikker", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "all_events": "All Events", + "event_login_failed": "Login mislykkedes", + "event_login_success": "Login succes", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfiguration ændret", + "event_key_created": "Nøgle oprettet", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Ingen revisionsbegivenheder fundet.", + "hardening_hint": "Sikkerhedshærdende prioriteter for din BetterDesk-implementering. Varerne er sorteret efter sværhedsgrad.", + "no_hardening": "Ingen hærdende emner tilgængelige.", + "vuln_hint": "Resultater af afhængighedssårbarhedsscanning. Kør npm-revision regelmæssigt for at holde afhængigheder sikre.", + "no_vulns": "Ingen sårbarheder fundet. Dine afhængigheder er sikre." + }, + "languages": { + "title": "Sprogstyring", + "total_languages": "Samlede sprog", + "fully_translated": "Fuldt oversat", + "needs_review": "Trænger til gennemgang", + "reference_keys": "Referencenøgler", + "no_languages": "Ingen sprogfiler fundet.", + "badge_reference": "Reference", + "badge_review": "Trænger til gennemgang", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Visning mangler", + "fix_missing": "Fix Missing", + "missing_keys_for": "Mangler nøgler til", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "og {n} mere...", + "all_keys_present": "Alle nøgler er til stede!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Manglende nøgler i {code} skal oversættes manuelt.", + "no_fix_needed": "Ingen manglende nøgler at rette." + }, + "resource_control": { + "title": "Ressourcekontrol", + "tab_overview": "Oversigt", + "tab_usb": "USB Control", + "tab_optical": "Optiske drev", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Ressourcekvoter", + "compliance_by_category": "Overholdelse efter kategori", + "device_compliance": "Enhedsoverholdelse", + "search_devices": "Søg efter enheder...", + "col_device": "Enhed", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Enheder i alt", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Overholdelsesgrad", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurer", + "no_devices": "Ingen enheder fundet", + "usb_title": "USB Portkontrol", + "usb_hint": "Kontroller USB-lagerenhedsadgang for den valgte enhed eller standardpolitik for hele organisationen.", + "usb_storage_policy": "USB opbevaringspolitik", + "usb_whitelist": "Hvidlistede enheder (én pr. linje)", + "usb_whitelist_hint": "VID:PID (f.eks. 0781:5583)", + "usb_audit_log": "Log USB enhedsforbindelser", + "optical_title": "Kontrol af optisk drev", + "optical_hint": "Styr adgangen til CD/DVD/Blu-ray-drevet for den valgte enhed.", + "optical_policy": "Politik for optisk drev", + "optical_audit_log": "Log adgang til optisk drev", + "monitors_title": "Overvåg ledelse", + "monitors_hint": "Konfigurer skærmindstillinger, herunder maksimalt antal, opløsningshåndhævelse, lysstyrke og strømplaner.", + "monitors_max_count": "Maksimalt antal skærme (0 = ubegrænset)", + "monitors_max_hint": "0 betyder ingen grænse", + "monitors_resolution": "Max opløsning", + "monitors_brightness": "Lysstyrkegrænse", + "monitors_power_schedule": "Strømskema", + "monitors_power_hint": "f.eks. off: 22:00-06:00", + "disks_title": "Diskadgangskontrol", + "disks_hint": "Konfigurer diskadgangspolitikker, herunder skrivebeskyttet tilstand, håndhævelse af kryptering og partitionssynlighed.", + "disks_readonly": "Tving skrivebeskyttet tilstand", + "disks_encryption": "Kræv kryptering (BitLocker/LUKS)", + "disks_smart": "Aktiver S.M.A.R.T. overvågning", + "disks_hidden": "Skjulte partitioner", + "disks_hidden_hint": "Kommaseparerede drevbogstaver eller monteringspunkter", + "quotas_title": "Ressourcekvoter", + "quotas_hint": "Indstil CPU-, RAM-, båndbredde- og diskkvoter pr. bruger for den valgte enhed.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Båndbreddegrænse (Mbps)", + "quotas_bandwidth_hint": "0 = ubegrænset", + "quotas_disk_quota": "Diskkvote (GB)", + "quotas_disk_hint": "0 = ubegrænset", + "quotas_process_whitelist": "Proceshvidliste (én pr. linje)", + "quotas_process_hint": "f.eks. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Kun hvidliste", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Softwareopdateringer", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Installeret version", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Se efter opdateringer", + "checking": "Checking…", + "up_to_date": "Op til dato", + "update_available": "Opdatering tilgængelig", + "changelog": "Release Notes", + "no_changelog": "Ingen tilgængelige release notes", + "files_changed": "Filer ændret", + "files": "filer", + "changes_unavailable": "Kunne ikke indlæse filændringslisten. Du kan stadig installere opdateringen.", + "create_backup": "Opret backup før opdatering", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installerer opdatering...", + "creating_backup": "Opretter backup...", + "downloading": "Downloader filer...", + "install_success": "Opdateringen er installeret. Konsolen genstarter...", + "install_failed": "Installation af opdatering mislykkedes", + "restarting": "Venter på, at konsollen genstarter...", + "restart_complete": "Konsolen blev genstartet", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Der er ikke valgt nogen opdateringsversion. Tjek først for opdateringer.", + "backups_title": "Opdater sikkerhedskopier", + "backups_desc": "Forudgående opdatering af sikkerhedskopier oprettet automatisk før hver opdatering", + "no_backups": "Ingen opdateringssikkerhedskopier fundet", + "restore": "Restore", + "restore_confirm": "Er du sikker på, at du vil gendanne fra denne sikkerhedskopi? Ændrede filer vil blive overskrevet.", + "restore_success": "Sikkerhedskopien blev gendannet. Konsolen genstarter...", + "baseline_set": "Baseline sæt", + "commits_behind": "forpligter sig bag", + "total_files": "Samlede filer", + "applied": "Applied", + "failed": "Mislykkedes", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Gå til server", + "component_agent": "Agent", + "component_scripts": "Installationsscripts", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Kontrollerer Go...", + "go_not_found": "Gå ikke installeret", + "go_check_failed": "Kunne ikke kontrollere Go tilgængelighed", + "server_building": "Kompilerer Go server... Dette kan tage et par minutter.", + "server_built": "Server binær kompileret", + "server_build_failed": "Serverkompilering mislykkedes", + "server_stale_title": "Server binær forældet", + "server_stale_desc": "Go server-kilden blev opdateret, men den kørende binære fil blev ikke genopbygget. Genopbyg det nu for at anvende sikkerheds- og biblioteksopdateringer.", + "rebuild_server": "Genopbyg server binær", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Server binær genopbygget og genstartet", + "rebuild_server_failed": "Server binær genopbygning mislykkedes", + "server_deployed": "Server binært installeret", + "server_deploy_failed": "Serverimplementering mislykkedes", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Downloader serverkilde...", + "delete": "Slet", + "delete_confirm": "Vil du permanent slette backup {name}? Dette kan ikke fortrydes.", + "delete_success": "Backup slettet", + "delete_failed": "Kunne ikke slette backup", + "retention_label": "Behold N seneste sikkerhedskopier", + "retention_hint": "Ældre sikkerhedskopier slettes automatisk efter hver opdatering. Brug 0 for at beholde alle sikkerhedskopier.", + "retention_saved": "Opbevaringsindstillingen er gemt", + "retention_invalid": "Retention skal være et heltal mellem 0 og 1000", + "retention_required_for_prune": "Indstil først en retentionsværdi større end 0", + "prune_now": "Apply now", + "prune_confirm": "Behold kun {n} seneste sikkerhedskopier og slette resten?", + "prune_done": "Beskåret {n} backup(r)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Opdateringsmetode", + "strategy_download": "Download forudbygget binær", + "strategy_compile": "Kompiler fra kilden", + "both_available": "Download og kompilér", + "download_available": "Download tilgængelig", + "no_method": "Ingen opdateringsmetode", + "no_release": "No release", + "available": "Tilgængelig", + "server_downloading": "Downloader binær server...", + "server_downloaded": "Server binær downloadet", + "server_download_failed": "Server binær download mislykkedes", + "server_download_note": "En forudbygget binær vil blive downloadet fra GitHub-udgivelser. Dette tager normalt mindre end et minut.", + "install_go_hint": "Installer Go fra https://go.dev/dl/ for at aktivere kompilering, eller udgiv en udgivelse med forudbyggede binære filer", + "strategy_install_go": "Autoinstaller Go og kompilér", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Klar til automatisk genopbygning", + "toolchain_ready": "Værktøjskæde installeret", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Downloader Go værktøjskæde...", + "toolchain_failed": "Go toolchain installation mislykkedes", + "modal_title": "Installerer opdatering", + "modal_done_title": "Opdatering fuldført", + "modal_close": "Luk", + "modal_reload_now": "Genindlæs konsollen", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsol filer", + "phase_server": "Serverkomponent", + "phase_restart": "Genstart", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Backup sprunget over (efter brugervalg)", + "server_skipped": "Go server sprunget over", + "server_not_selected": "Go server not selected", + "server_processing": "Behandler Go server-opdatering...", + "no_restart_needed": "Ingen genstart nødvendig", + "complete": "Opdatering anvendt", + "complete_summary": "Opdateringen er blevet anvendt.", + "complete_with_errors": "Opdateringen blev afsluttet, men nogle trin mislykkedes. Se detaljer nedenfor.", + "modal_done_with_errors_title": "Opdatering afsluttet med fejl", + "console_will_restart": "Konsolprocessen genstartes nu...", + "restart_complete_msg": "Konsollen blev færdig med at genstarte. Klik på genindlæs for at indlæse den nye version. Siden genindlæses automatisk om 8 sekunder.", + "refresh_recommended": "Statiske aktiver ændret — genindlæs siden for at se den nye brugergrænseflade.", + "confirm_title": "Anvend opdatering", + "confirm_with_backup": "Der oprettes automatisk en sikkerhedskopi på forhånd.", + "confirm_no_backup": "Der oprettes ingen backup (fortsæt på eget ansvar)." + }, + "permissions": { + "title": "Tilladelser", + "subtitle": "Administrer rollebaserede tilladelser og tilpassede tilsidesættelser", + "info_title": "Sådan fungerer tilladelser", + "info_desc": "Hver rolle har standardtilladelser. Du kan tilføje eller fjerne individuelle tilladelser pr. rolle ved at skifte mellem dem nedenfor. Brugerdefinerede tilsidesættelser er fremhævet og kan til enhver tid vendes tilbage til standardindstillingerne.", + "select_role": "Vælg rolle", + "select_role_placeholder": "Vælg en rolle...", + "reset_overrides": "Nulstil alle tilsidesættelser", + "granted": "Tildelt", + "overrides": "Tilsidesættelser", + "level": "Niveau", + "super_admin_tag": "Fuld adgang", + "server_level_tag": "Server-niveau", + "custom": "Brugerdefineret", + "default": "Standard", + "revert": "Vend tilbage til standard", + "saved": "Tilladelsen er opdateret", + "reverted": "Gendannet til standard", + "all_reverted": "Alle tilsidesættelser er vendt tilbage", + "confirm_reset": "Vil du nulstille alle tilpassede tilsidesættelser for denne rolle til standardindstillingerne?", + "empty_title": "Vælg en rolle", + "empty_desc": "Vælg en rolle fra rullemenuen ovenfor for at se og administrere dens tilladelser.", + "locked_title": "Superadministrator", + "locked_desc": "Super Admin har alle tilladelser som standard og kan ikke tilpasses.", + "cat_device": "Enheder", + "cat_user": "Brugere", + "cat_server": "Serversystem", + "cat_org": "Organisationer", + "cat_audit": "Revision & Overvågning", + "cat_cdap": "CDAP", + "cat_enrollment": "Tilmelding", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Se enheder", + "perm_device_connect": "Opret forbindelse til enheder", + "perm_device_edit": "Rediger enheder", + "perm_device_delete": "Slet enheder", + "perm_device_ban": "Forbyd/ophæv forbud mod enheder", + "perm_device_change_id": "Skift enheds-id", + "perm_user_view": "Se brugere", + "perm_user_create": "Opret brugere", + "perm_user_edit": "Rediger brugere", + "perm_user_delete": "Slet brugere", + "perm_server_config": "Server konfiguration", + "perm_server_keys": "Administrer API nøgler", + "perm_org_create": "Skab organisationer", + "perm_org_edit": "Rediger organisationer", + "perm_org_delete": "Slet organisationer", + "perm_org_manage_users": "Administrer organisationens brugere", + "perm_org_manage_devices": "Administrer organisationsenheder", + "perm_audit_view": "Se revisionslogfiler", + "perm_metrics_view": "Se metrics", + "perm_blocklist_edit": "Rediger blokeringsliste", + "perm_cdap_view": "Se CDAP-enheder", + "perm_cdap_command": "Send CDAP-kommandoer", + "perm_cdap_terminal": "CDAP terminaladgang", + "perm_cdap_files": "CDAP filadgang", + "perm_enrollment_manage": "Administrer tilmelding", + "perm_enrollment_approve": "Godkend tilmelding", + "perm_chat_access": "Chatadgang", + "perm_branding_edit": "Rediger branding", + "perm_server_attestation": "Serverydelsesattest" + }, + "notifications": { + "title": "Meddelelser", + "empty": "Ingen nye meddelelser", + "mark_all_read": "Marker alt som læst", + "see_all": "Se alle anmodninger om hjælp", + "help_request": "Hjælp anmodning", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Juster konsollen til dine syns-, bevægelses- og læsebehov.", + "close": "Luk tilgængelighedsmenu", + "profiles": "Hurtige profiler", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Større tekst, stærk kontrast og fokus.", + "profile_dyslexia": "Læsekomfort", + "profile_dyslexia_hint": "Læsbar skrifttype og bredere mellemrum.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reducerer overgange og sætter animation på pause.", + "profile_color_assist": "Farvestøtte", + "profile_color_assist_hint": "Farvefilter, etiketter og fremhævede links.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Bogstavafstand", + "word_spacing": "Ordafstand", + "readable_font": "Læsbar skrifttype", + "readable_font_hint": "Bruger brede, velkendte bogstavformer.", + "dyslexia_spacing": "Ordblindhedsafstand", + "dyslexia_spacing_hint": "Tilføjer ekstra mellemrum til lang tekst.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Høj kontrast mørk", + "contrast_high_light": "Lys med høj kontrast", + "contrast_yellow_black": "Gul på sort", + "color_filter": "Farvesynsfilter", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Farvemætning", + "underline_links": "Understreg links", + "underline_links_hint": "Gør links synlige uden at være afhængig af farve.", + "highlight_links": "Fremhæv handlinger", + "highlight_links_hint": "Skitserer links og knapper.", + "highlight_headings": "Fremhæv overskrifter", + "highlight_headings_hint": "Markerer afsnitstitler med en farvebjælke.", + "hide_media": "Dim media", + "hide_media_hint": "Dæmper billeder, videoer og lærreder.", + "interaction": "Interaction", + "strong_focus": "Stærkt fokus", + "strong_focus_hint": "Viser en stor tastaturfokusring.", + "large_cursor": "Stor markør", + "large_cursor_hint": "Bruger en større højkontrastmarkør.", + "reduce_motion": "Reducer bevægelse", + "reduce_motion_hint": "Forkorter overgange og jævn rulning.", + "pause_animations": "Sæt animationer på pause", + "pause_animations_hint": "Stopper visuelle bevægelser i sløjfer.", + "reading_guide": "Læsevejledning", + "reading_guide_hint": "Følger markøren med en lys linje.", + "reading_mask": "Læsemaske", + "reading_mask_hint": "Dæmper indholdet over og under markøren.", + "preview": "Preview", + "preview_title": "Forhåndsvisning af operatørens arbejdsområde", + "preview_text": "Tjek, om tekst, links, kontroller og statusetiketter er behagelige at læse, før du lukker denne menu.", + "preview_link": "Link til enhedsdetaljer", + "preview_status": "Online", + "preview_button": "Primær handling", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Serveradministration", + "subtitle": "Cockpit-lignende kontrolplan til BetterDesk-konsolværten (BETA).", + "beta_tooltip": "Beta-funktion — under aktiv udvikling.", + "notice_title": "Beta funktion", + "notice_body": "Disse værktøjer kører på værten, hvor BetterDesk-konsolprocessen lever. Alle operationer er revideret. Funktionsomfanget udvides i fremtidige udgivelser.", + "tab_overview": "Oversigt", + "tab_terminal": "Terminal", + "tab_files": "Filer", + "tab_services": "Tjenester", + "cpu": "CPU", + "memory": "Hukommelse", + "load": "Belastningsgennemsnit", + "disks": "Diske", + "history": "Historik (sidste 60 prøver)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Oppetid", + "no_disks": "Ingen diskdata tilgængelige", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY tilgængelig", + "term_connect": "Forbind", + "term_disconnect": "Afbryd", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Forbindelsesfejl", + "term_warning": "Kommandoer kører som den bruger, der ejer konsolprocessen. Tilføj en sudoers-regel for at aktivere elevation.", + "term_hint": "Tip: skriv `sudo -i` for at eskalere (kræver sudoers-konfiguration).", + "term_lib_failed": "Terminalbiblioteket kunne ikke indlæses", + "files_up": "Et niveau op", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Tom mappe", + "files_error": "Biblioteket kunne ikke vises", + "read_failed": "Filen kunne ikke læses", + "save_failed": "Filen kunne ikke gemmes", + "rename_failed": "Omdøbning mislykkedes", + "delete_failed": "Sletning mislykkedes", + "delete_confirm": "Vil du slette denne post?", + "mkdir_prompt": "Nyt mappenavn:", + "mkdir_failed": "Kunne ikke oprette mappe", + "file_saved": "Filen er gemt", + "binary_warn": "Binær fil - kun forhåndsvisning", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Søgetjenester...", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Ingen tjenester fundet", + "svc_load_failed": "Kunne ikke indlæse tjenester", + "svc_action_failed": "Handlingen mislykkedes", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Genstart", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Download BetterDesk-agent", + "choose_platform": "Vælg din platform", + "choose_platform_hint": "Vælg det installationsprogram, der matcher dit operativsystem.", + "download": "Download", + "building": "Bygning…", + "failed": "Byg mislykkedes", + "need_help": "Har du brug for hjælp?", + "powered_by": "Drevet af" + }, + "server_attestation": { + "title": "Serverattest", + "subtitle": "Ydelsesbenchmark der fastlægger kapacitet for samtidige fjernforbindelser ved 80 % CPU-, RAM- og disktærskel.", + "warning_title": "Belastningstest", + "warning_body": "Benchmarket simulerer parallelle WebSocket-forbindelser til signal- og relayserverne. Kør uden for spidsbelastningstimer — testen belaster produktionen.", + "run_benchmark": "Kør benchmark", + "abort": "Afbryd", + "download_report": "Download JSON-rapport", + "last_test": "Seneste test", + "no_test_yet": "Der er ikke kørt noget benchmark endnu", + "max_connections": "Maks. forbindelser", + "threshold_80": "80 % tærskel — endelige målinger", + "disk": "Disk", + "ramp_chart": "Belastningsrampediagram", + "connections": "Forbindelser", + "connections_short": "forb.", + "tier_guide_title": "Hvad betyder hvert niveau?", + "tier_bronze": "BRONZE", + "tier_iron": "JERN", + "tier_titanium": "TITAN", + "tier_platinum": "PLATIN", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UVURDERET", + "tier_bronze_desc": "1–25 samtidige forbindelser — lille VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 forbindelser — midterklasse-server (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 forbindelser — højydelsesserver (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 forbindelser — virksomhedsinfrastruktur (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ forbindelser — turboklasse: dedikeret hardware, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Bemærk: I Docker kan CPU/RAM-målinger afspejle containerbegrænsninger frem for den fysiske vært.", + "badge_tooltip": "BetterDesk Serverattest — serverydelsescertificering", + "confirm_run": "Dette benchmark belastningstester serveren med simulerede forbindelser. Fortsæt?", + "starting": "Starter...", + "complete": "Benchmark afsluttet", + "signal_peers": "Signalpeers", + "relay_sessions": "Relaysessioner", + "page_error": "Kunne ikke indlæse Serverattest-siden", + "mode_estimated": "Estimeret (WebSocket utilgængeligt)", + "incomplete": "Benchmark afsluttet uden et gyldigt niveau" + }, + "commercialization": { + "title": "Kommercialisering", + "subtitle": "Supportpakker, fakturerbare sessioner og rapporter", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidlig funktion — fakturering og pakker er under aktiv udvikling.", + "tabs": { + "overview": "Overblik", + "packages": "Pakker og kontrakter", + "sessions": "Sessioner", + "reports": "Rapporter", + "settings": "Avancerede indstillinger" }, - "branding": { - "identity_title": "Brand Identitet", - "identity_desc": "Tilpas applikationsnavnet og beskrivelsen vist på tværs af konsollen", - "app_name": "Ansøgningsnavn", - "app_description": "Ansøgningsbeskrivelse", - "logo_title": "Logo", - "logo_desc": "Vælg, hvordan dit logo skal vises i sidebjælken og login-siden", - "logo_type_icon": "Materiale ikon", - "logo_type_svg": "SVG-kode", - "logo_type_image": "Billed-URL", - "logo_icon_name": "Ikonnavn", - "logo_icon_hint": "Indtast et Material Icons-navn (f.eks. dns, cloud, sikkerhed). Se fonts.google.com/icons", - "logo_svg_code": "SVG-kode", - "logo_svg_hint": "Indsæt din SVG-markering her. Understøtter fulde -elementer med stier og stilarter.", - "logo_image_upload": "Upload billede", - "logo_image_choose": "Vælg billedfil", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Ugyldig filtype. Brug PNG, JPG, GIF, WebP eller SVG.", - "preview": "Forhåndsvisning", - "colors_title": "Farveskema", - "colors_desc": "Tilpas farvepaletten. Lad være tom for at bruge standardindstillinger.", - "colors_backgrounds": "Baggrunde", - "colors_text": "Tekst", - "colors_accents": "Accent farver", - "colors_borders": "Kanter", - "import_export_title": "Import/eksport", - "import_export_desc": "Gem dit tema som en JSON-fil eller importer en fra en anden instans", - "export_theme": "Eksporter tema", - "import_theme": "Importer tema", - "reset_defaults": "Nulstil til standarder", - "save_branding": "Gem branding", - "saved": "Branding blev gemt. Genindlæser...", - "exported": "Tema eksporteret", - "imported": "Tema importeret. Genindlæser...", - "import_error": "Temaet kunne ikke importeres. Ugyldigt filformat.", - "reset_confirm": "Er du sikker på, at du vil nulstille branding til standardindstillingerne? Dette kan ikke fortrydes.", - "reset_success": "Branding nulstillet til standardindstillinger. Genindlæser...", - "logo_type_text": "Tekstlogo", - "logo_text": "Logotekst", - "logo_text_hint": "Primær tekst vist som dit brandlogo", - "logo_text_accent": "Accenttekst", - "logo_text_accent_hint": "Sekundær tekst under logoet (f.eks. produktnavn eller tagline)", - "logo_upload_success": "Logoet blev uploadet.", - "typography_title": "Typografi", - "typography_desc": "Vælg skrifttyper til overskrifter og brødtekst. Skrifttyper downloades til serveren til selvhosting.", - "font_heading": "Overskrift skrifttype", - "font_heading_hint": "Anvendes til overskrifter (H1–H6) og tekstlogo", - "font_body": "Brødtekstskrifttype", - "font_body_hint": "Bruges til brødtekst og UI-elementer", - "font_search_placeholder": "Søg skrifttyper...", - "font_system_default": "System standard", - "font_clear": "Ryd", - "font_cat_all": "Alle", - "font_downloaded_count": "skrifttyper downloadet på serveren", - "powered_by": "Drevet af", - "background_title": "Baggrund og udseende", - "background_desc": "Indstil en konsolbaggrund, gradient eller ensfarvet baggrund.", - "bg_type_none": "Ingen", - "bg_type_color": "Ensfarvet", - "bg_type_gradient": "Gradient", - "bg_type_image": "Billede", - "bg_color": "Baggrundsfarve", - "bg_gradient": "CSS-gradient", - "bg_gradient_hint": "Enhver gyldig CSS-gradient, f.eks. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Upload baggrundsbillede", - "bg_image_choose": "Vælg billedfil", - "bg_image_hint": "PNG, JPG, WebP eller GIF. Maks. 8 MB.", - "bg_image_url": "Bildesti / URL", - "bg_size": "Billedstørrelse", - "bg_size_cover": "Dæk (udfyld skærm)", - "bg_size_contain": "Tilpas (fit)", - "bg_size_auto": "Automatisk (original)", - "bg_blur": "Baggrundsslør", - "bg_overlay": "Mørkt overlay", - "bg_overlay_hint": "Mørkner baggrunden for bedre tekstlæsbarhed.", - "bg_image_too_large": "Billedet er for stort. Maksimal størrelse er 8 MB.", - "bg_image_invalid_type": "Ugyldig filtype. Brug PNG, JPG, WebP eller GIF.", - "bg_upload_success": "Baggrundsbillede uploadet.", - "login_title": "Loginside", - "login_desc": "Tilpas loginskærmens overskrift, undertitel og baggrund.", - "login_heading": "Loginoverskrift", - "login_heading_placeholder": "Velkommen tilbage", - "login_subheading": "Loginundertitel", - "login_subheading_placeholder": "Log ind på din konto", - "login_bg_inherit": "Samme som konsollen", - "agent_title": "Agent-downloadside", - "agent_desc": "Tilpas den offentlige agent-downloadportal vist til slutbrugere.", - "agent_show_powered": "Vis \"Drevet af BetterDesk\"", - "agent_show_powered_hint": "Vis BetterDesk-tilskrivningen i downloadportalens sidefod.", - "footer_title": "Sidefod og ophavsret", - "footer_desc": "Tilføj en brugerdefineret sidefodlinje vist på loginskærmen og konsolsidepanelet.", - "footer_text": "Sidefodtekst", - "footer_text_hint": "f.eks. en ophavsretsbemærkning eller firmanavn.", - "show_powered": "Vis \"BetterDesk\"-tilskrivning", - "show_powered_hint": "Vis BetterDesk-navn og version i loginfoden og sidepanelet.", - "custom_css_title": "Brugerdefineret CSS", - "custom_css_desc": "Avanceret: injicér brugerdefineret CSS i konsollen og loginsiden.", - "custom_css_hint": "Brug med forsigtighed. Maks. 20.000 tegn." + "clock": { + "title": "Servertid (NTP)", + "check_now": "Tjek nu", + "unsynced": "Serveruret er ikke synkroniseret — fakturerbare sessioner kan blive blokeret" }, - "device_detail": { - "tab_overview": "Oversigt", - "tab_tags": "Tags og noter", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Forbindelse", - "section_manage": "Ledelse", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Denne enhed er forbudt", - "no_reason": "Ingen grund angivet", - "tags": "Tags", - "no_tags": "Ingen tags tildelt denne enhed", - "tag_placeholder": "Indtast et tagnavn...", - "add_tag": "Add", - "tag_exists": "Dette tag findes allerede", - "notes": "Notes", - "notes_placeholder": "Tilføj bemærkninger om denne enhed...", - "danger_zone": "Danger Zone", - "action_connect_web": "Web-fjernbetjening", - "action_connect_web_desc": "Tilslut via browserens fjernskrivebord", - "action_native_remote": "BetterDesk fjernbetjening", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Desktop klient", - "action_connect_desktop_desc": "Åbn i desktop-klient-appen", - "action_change_id_desc": "Skift enhedsregistrerings-id'et", - "action_ban_desc": "Bloker denne enhed fra at oprette forbindelse", - "action_unban_desc": "Tillad denne enhed at oprette forbindelse igen", - "action_delete_desc": "Fjern denne enhed permanent", - "tab_hardware": "Hardware", - "tab_metrics": "Målinger", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kodningsmuligheder", - "section_live_metrics": "Live målinger", - "section_current_usage": "Nuværende brug", - "section_usage_history": "Brugshistorik", - "os": "Operativsystem", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU frekvens", - "total_memory": "Total Hukommelse", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Opdateret", - "device_groups": "Grupper", - "no_sysinfo": "Ingen tilgængelige hardwareoplysninger", - "no_sysinfo_hint": "Systeminfo vises, efter at enheden har sendt en sysinfo-rapport", - "no_metrics": "Der er ingen tilgængelige metrics", - "no_metrics_hint": "Metrics vises, når enheden har sendt hjerteslagsrapporter", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Filer", - "agent_lazy_hint": "Klik på denne fane for at indlæse live data fra agenten", - "agent_offline": "Agenten er offline", - "agent_timeout": "Agenten svarede ikke i tide", - "agent_error": "Kunne ikke indlæse data fra agent", - "service_name": "Name", - "service_display": "Vist navn", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktive fakturerbare sessioner" }, - "inventory": { - "title": "Inventory", - "subtitle": "Hardware og software opgørelse over administrerede enheder", - "device_id": "Enheds-id", - "hostname": "Hostname", - "os": "Operativsystem", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Total Hukommelse", - "memory_used": "Used Memory", - "memory_available": "Tilgængelig hukommelse", - "memory_usage": "Hukommelsesbrug", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Netværksgrænseflader", - "software": "Software", - "software_count": "Installeret software", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fysiske kerner", - "logical_cores": "Logiske kerner", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Tilgængelig", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-adresser", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Samler kører", - "collector_stopped": "Samler stoppet", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Afhentes kl", - "no_data": "Ingen lagerdata tilgængelige endnu. Klik på \"Saml nu\" for at indsamle systemoplysninger.", - "no_devices": "Der blev ikke fundet nogen enheder med lagerdata", - "detail_title": "Enhedsbeholdningsdetaljer", - "telemetry": "Telemetry", - "view_detail": "Se detaljer", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Ny pakke", + "name": "Navn", + "included_minutes": "Inkluderede minutter", + "overage_rate": "Overforbrugssats / t", + "currency": "Valuta", + "heading": "Supportpakker", + "prompt_name": "Pakkenavn", + "create_title": "Ny pakke til organisation", + "create_submit": "Opret pakke", + "select_org": "Organisation", + "select_org_placeholder": "Vælg organisation…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Supportbilletter og problemsporing", - "create": "New Ticket", - "edit": "Rediger billet", - "delete": "Slet billet", - "detail": "Billetdetaljer", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Tildelt til", - "created_by": "Skabt af", - "device": "Enhed", - "sla_due": "SLA Due", - "created_at": "Oprettet", - "updated_at": "Opdateret", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Åbn", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Skriv en kommentar...", - "internal_note": "Intern note (ikke synlig for slutbrugere)", - "attachments": "Attachments", - "upload_attachment": "Upload vedhæftet fil", - "download": "Download", - "connect_device": "Opret forbindelse til enhed", - "no_tickets": "Ingen billetter fundet", - "no_comments": "Ingen kommentarer endnu", - "no_attachments": "Ingen vedhæftede filer", - "title_required": "Titel er påkrævet", - "delete_confirm": "Er du sikker på, at du vil slette billet #{id}?", - "delete_success": "Billetten blev slettet", - "created_success": "Billet blev oprettet", - "updated_success": "Billetten blev opdateret", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Søg billetter...", - "assign_to_me": "Tildel mig", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Åbn", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Aktivitetsovervågning", - "subtitle": "Applikationsbrug og inaktiv sporing", - "device": "Enhed", - "hostname": "Hostname", - "sessions": "Sessioner", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Top applikationer", - "app_name": "Application", - "window_title": "Vinduets titel", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Sessiontælling", - "total_active": "Total aktiv", - "total_idle": "Total Idle", - "detail_count": "Detaljerede optegnelser", - "no_data": "Ingen tilgængelig aktivitetsdata", - "no_sessions": "Ingen sessioner", - "filter_from": "Fra", - "filter_to": "Til", - "filter_apply": "Anvend filter", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Søg efter enheder...", - "date_range": "Date Range", - "device_id": "Enheds-id", - "session_start": "Session start", - "session_end": "Session slut", - "user": "User", - "no_activity": "Ingen aktivitet registreret", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Ingen ansøgninger" - }, - "automation": { - "title": "Automatisering og advarsler", - "subtitle": "Advarselsregler, fjernkommandoer og SMTP-konfiguration", - "rules": "Alert Rules", - "rules_subtitle": "Definer betingelser, der udløser meddelelser", - "alerts": "Alarmhistorik", - "alerts_subtitle": "Se og anerkend udløste advarsler", - "commands": "Fjernkommandoer", - "commands_subtitle": "Send kommandoer til eksterne enheder", - "smtp": "SMTP-konfiguration", - "smtp_subtitle": "Indstillinger for e-mailbeskeder", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Tilstandstype", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Målenhed", - "scope_all": "Alle enheder", - "cooldown": "Nedkøling (sekunder)", - "notify_emails": "Meddelelsesmails", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "create_rule": "Opret regel", - "edit_rule": "Rediger regel", - "delete_rule": "Slet regel", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Udløst kl", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Større end", - "op_gte": "Større eller lige", - "op_lt": "Less than", - "op_lte": "Mindre eller lige", - "op_eq": "Lige til", - "op_neq": "Ikke lig med", - "type_cpu_usage": "CPU-brug (%)", - "type_memory_usage": "Hukommelsesforbrug (%)", - "type_disk_usage": "Diskbrug (%)", - "type_offline_duration": "Offline varighed (r)", - "type_idle_duration": "Inaktiv varighed (r)", - "type_custom": "Custom", - "command_type": "Kommandotype", - "command_payload": "Kommando / script", - "command_result": "Result", - "command_status": "Status", - "send_command": "Send kommando", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Mislykkedes", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Brugernavn", - "smtp_pass": "Adgangskode", - "smtp_from": "Fra Adresse", - "smtp_test": "Test forbindelse", - "smtp_save": "Gem konfiguration", - "smtp_test_success": "Forbindelsen lykkedes", - "smtp_test_failed": "Forbindelsen mislykkedes", - "no_rules": "Ingen advarselsregler er konfigureret", - "no_alerts": "Ingen advarsler udløst", - "no_commands": "Ingen kommandoer sendt", - "id_payload_required": "Enheds-id og nyttelast er påkrævet", - "no_commands_sent": "Ingen kommandoer er blevet sendt endnu" - }, - "file_transfer": { - "title": "Filoverførsel", - "transfers": "Transfers", - "new_transfer": "Ny overførsel", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Filstørrelse", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Enhed", - "initiated_by": "Iværksat af", - "created_at": "Oprettet kl", - "cancel": "Annuller", - "cancel_confirm": "Er du sikker på, at du vil annullere denne overførsel?", - "download_file": "Download fil", - "browse_files": "Gennemse filer", - "select_file": "Vælg Fil", - "select_device": "Vælg Enhed", - "no_transfers": "Ingen filoverførsler", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Mislykkedes", - "status_cancelled": "Cancelled", - "bytes_transferred": "Bytes overført", - "chunks": "Chunks", - "transfer_started": "Overførslen startede", - "transfer_completed": "Overførslen gennemført", - "transfer_failed": "Overførslen mislykkedes", - "transfer_cancelled": "Overførslen er annulleret", - "max_file_size": "Maksimal filstørrelse: 4 GB", - "error_too_large": "Filen er for stor", - "error_no_device": "Ingen enhed valgt", - "error_no_file": "Ingen fil valgt" - }, - "network": { - "title": "Netværksovervågning", - "targets": "Overvågning af mål", - "add_target": "Add Target", - "edit_target": "Rediger mål", - "delete_target": "Slet mål", - "delete_confirm": "Er du sikker på, at du vil slette dette mål?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Tidsgrænse", - "interval": "Intervaltid", - "enabled": "Aktiveret", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Tjek historik", - "stats": "Statistics", - "total_targets": "Samlede mål", - "targets_up": "Targets Up", - "targets_down": "Mål ned", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Netværksværktøjer", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Portkontrol", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Start overvågning", - "monitor_stop": "Stop overvågning", - "monitor_running": "Monitor kører", - "monitor_stopped": "Monitor er stoppet", - "no_targets": "Ingen overvågningsmål konfigureret", - "no_history": "Ingen kontrolhistorik tilgængelig", - "error_code": "Error", - "status_code": "HTTP Statuskode", - "search_targets": "Søg efter mål...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Tjek historik", - "name_host_required": "Navn og vært er påkrævet", - "uptime": "Uptime", - "response_time": "Svartid", - "avg_response": "Gennemsnitlig respons", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Svartid (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Sidste 24 timer", - "last_7d": "Last 7 days", - "last_30d": "Sidste 30 dage" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP-politikker", - "add_policy": "Tilføj politik", - "edit_policy": "Rediger politik", - "delete_policy": "Slet politik", - "delete_confirm": "Er du sikker på, at du vil slette denne politik?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB enhed", - "rule_type_file": "Filbetjening", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Leverandør-id (VID)", - "pid": "Produkt-id (PID)", - "serial": "Serienummer", - "device_class": "Enhedsklasse", - "drive_type": "Drive Type", - "file_extensions": "Filudvidelser", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Fil", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Ingen DLP-politikker er konfigureret", - "no_events": "Ingen DLP-hændelser registreret", - "stats": "Statistics", - "total_events": "Begivenheder i alt", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Fil Begivenheder", - "device_id": "Enheds-id", - "policy_matched": "Politik matchet", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Samlede politikker", - "active_policies": "Aktive politikker", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Politikker", - "tab_events": "Events", - "search_policies": "Søgepolitikker...", - "create_policy": "Opret politik", - "policy_type": "Politiktype", - "scope": "Scope", - "events_count": "Events", - "search_events": "Søg begivenheder...", - "event_time": "Event Time", - "device": "Enhed", - "policy": "Politik", - "detail": "Detail", - "scope_help": "Kommaseparerede enheds-id'er, eller lad dem stå tomme for alle", - "scope_all": "Alle enheder", - "active": "Active", - "type_file_type": "Filtype", - "type_clipboard": "Udklipsholder", - "type_screen_share": "Skærmdeling", - "type_file_transfer": "Filoverførsel", - "policy_desc": "Politikbeskrivelse", - "type_usb": "USB" + "sessions": { + "device": "Enhed", + "operator": "Operatør", + "duration": "Varighed", + "phase": "Fase", + "amount": "Beløb" }, "reports": { - "title": "Reports", - "generate": "Generer rapport", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Enhedsoversigt", - "type_activity": "Aktivitetsoversigt", - "type_security": "Sikkerhedsrapport", - "type_tickets": "Billetrapport", - "type_network": "Netværksrapport", - "type_inventory": "Inventarrapport", - "type_alerts": "Advarselsrapport", - "saved": "Gemte rapporter", - "save_report": "Gem rapport", - "delete_report": "Slet rapport", - "delete_confirm": "Er du sikker på, at du vil slette denne gemte rapport?", - "no_saved": "Ingen gemte rapporter", - "report_title": "Title", - "created_by": "Skabt af", - "created_at": "Oprettet kl", - "filters": "Filters", - "date_from": "Fra", - "date_to": "Til", - "device_filter": "Enheds-id", - "generated_at": "Genereret kl", - "section": "Dataafsnit", - "total_devices": "Enheder i alt", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Platform distribution", - "top_applications": "Top applikationer", - "total_active": "Samlet aktiv tid", - "total_idle": "Samlet inaktiv tid", - "dlp_stats": "DLP statistik", - "banned_devices": "Forbudte enheder", - "audit_logs": "Audit Logs", - "ticket_stats": "Billetstatistik", - "category_distribution": "Kategorifordeling", - "priority_distribution": "Prioritetsfordeling", - "targets_status": "Målstatus", - "os_distribution": "OS distribution", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Seneste advarsler", - "tab_generate": "Generer rapport", - "tab_saved": "Gemte rapporter", - "type_devices_desc": "Oversigt over alle enheder, platforme og statusser", - "type_activity_desc": "Opsummering af applikationsbrug og ledig tid", - "type_security_desc": "Forbyd handlinger, DLP-hændelser og revisionslogfiler", - "type_tickets_desc": "Billetstatistik og SLA-ydelse", - "type_network_desc": "Netværksovervågningsmål og oppetidsdata", - "type_inventory_desc": "Opgørelse over hardware og software", - "type_alerts_desc": "Advarselsregler og udløst advarselshistorik", - "report_name": "Report Name", - "format": "Format", - "save": "Gem rapport", - "preview": "Preview", - "download": "Download", - "delete_saved": "Slet rapport", - "raw_json": "Raw JSON" + "session": "Session", + "summary": "Resumé", + "date": "Dato" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Rediger lejer", - "delete_tenant": "Slet lejer", - "delete_confirm": "Er du sikker på, at du vil slette denne lejer? Alle enheds- og brugertildelinger vil blive fjernet.", - "name": "Name", - "slug": "Slug", - "contact_name": "Navn på kontaktperson", - "contact_email": "Kontakt email", - "max_devices": "Max enheder", - "max_devices_hint": "0 = ubegrænset", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Enheder", - "users": "Users", - "assign_device": "Tildel enhed", - "assign_devices": "Tildel enheder", - "remove_device": "Fjern enhed", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Ingen lejere konfigureret", - "no_devices": "Ingen enheder tildelt denne lejer", - "no_users": "Ingen brugere er tildelt denne lejer", - "stats": "Lejerstatistik", - "total_devices": "Enheder i alt", - "online_devices": "Online enheder", - "total_users": "Total Users", - "created_at": "Oprettet kl", - "updated_at": "Opdateret kl", - "slug_exists": "Lejersnegl findes allerede", - "total_tenants": "Samlede lejere", - "active_tenants": "Aktive lejere", - "search": "Søg efter lejere...", - "create_tenant": "Opret lejer", - "detail": "Lejer detalje", - "contact": "Contact", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Organisationskontrakter", + "new": "Tildel pakke", + "org": "Organisation", + "package": "Pakke", + "remaining": "Resterende minutter", + "status": "Status", + "actions": "Handlinger", + "suspend": "Suspender", + "activate": "Aktiver", + "select_org": "Vælg organisation", + "select_package": "Vælg pakke", + "no_orgs": "Ingen organisationer fundet", + "no_packages": "Opret først en pakke" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Søg efter enheds-id, værtsnavn eller IP...", - "no_registrations": "No registration requests", - "col_device_id": "Enheds-id", - "col_hostname": "Værtsnavn", - "col_platform": "Platform", - "col_ip": "IP-adresse", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Anmodet", - "col_actions": "Handlinger", - "status_pending": "Afventer", - "status_approved": "Godkendt", - "status_rejected": "Afvist", - "approve_btn": "Godkend", - "approve_confirm": "Er du sikker på, at du vil godkende denne enhed? Den modtager serverlegitimationsoplysninger og kan oprette forbindelse automatisk.", - "approved_success": "Enhedsregistrering godkendt", - "reject_btn": "Afvis", - "reject_title": "Afvis registrering", - "reject_confirm": "Er du sikker på, at du vil afvise denne registreringsanmodning?", - "reject_reason": "Årsag (valgfrit)", - "reject_reason_placeholder": "Angiv årsag til afvisning...", - "rejected_success": "Enhedsregistrering afvist", - "delete_confirm": "Er du sikker på, at du vil slette denne registreringspost?", - "deleted_success": "Registreringspost slettet", - "enrollment_title": "Enhedstilmelding", - "enrollment_subtitle": "Afventende tilmeldingsanmodninger fra BetterDesk desktop-klienter", - "enrollment_empty": "Ingen afventende tilmeldingsanmodninger", - "enrollment_approve": "Godkend", - "enrollment_reject": "Afvis", - "enrollment_display_name": "Vist navn", - "enrollment_display_name_placeholder": "Indtast et navn til denne enhed...", - "enrollment_sync_mode": "Synkroniseringstilstand", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Enhedstilmelding godkendt", - "enrollment_rejected_success": "Enhedstilmelding afvist", - "approve_title": "Godkend enhed", - "field_name": "Enhedsnavn", - "field_name_placeholder": "Indtast et navn til denne enhed...", - "field_sync_mode": "Synkroniseringstilstand", - "sync_standard": "Standard — balanceret synkronisering", - "sync_silent": "Stille — minimal telemetri", - "sync_turbo": "Turbo — aggressiv synkronisering", - "field_tags": "Tags", - "field_tags_placeholder": "Kommaadskilte tags (f.eks. kontor, bærbar)...", - "field_tags_existing": "Eksisterende tags", - "field_tag_add_placeholder": "Tilføj et nyt tag...", - "field_tag_add_btn": "Tilføj", - "field_groups": "Enhedsgrupper", - "field_folder": "Mappe", - "field_folder_none": "Ingen mappe", - "reject_ban_option": "Forbyd denne enhed", - "reject_ban_hint": "Enheden vil blive blokeret og kan ikke sende nye registreringsanmodninger.", - "banner_open_mode": "Tilmelding er åben — nye RustDesk-klienter registrerer sig uden operatørgodkendelse.", - "banner_locked_mode": "Tilmelding er låst — kun token-bundne enheder kan registrere sig.", - "enrollment_settings_link": "Tilmeldingsindstillinger" + "export": { + "csv": "Eksporter CSV", + "pdf": "Eksporter PDF", + "sessions_csv": "Eksporter sessioner CSV" }, - "backup": { - "title": "Sikkerhedskopi", - "desc": "Download en komplet sikkerhedskopi af din konsolkonfiguration, brugere, grupper og indstillinger. Go server peer-data er inkluderet, når BetterDesk-backend er aktiv.", - "restore_title": "Gendan", - "restore_desc": "Upload en tidligere downloadet backupfil for at gendanne konsolkonfigurationen. Vælg, hvilke sektioner der skal gendannes nedenfor.", - "stat_users": "Brugere", - "stat_settings": "Indstillinger", - "stat_folders": "Mapper", - "stat_groups": "Grupper", - "stat_strategies": "Strategier", - "stat_backend": "Backend", - "download": "Download sikkerhedskopi", - "creating": "Opretter backup...", - "download_success": "Sikkerhedskopien blev downloadet", - "upload": "Upload backup", - "restore_confirm": "Er du sikker på, at du vil gendanne fra denne sikkerhedskopi? Udvalgte afsnit vil blive overskrevet.", - "restore_success": "Sikkerhedskopien blev gendannet. Nogle ændringer kan kræve en genindlæsning af siden.", - "restored": "Gendannet", - "skipped": "Sprunget over", - "backup_date": "Sikkerhedskopidato", - "opt_settings": "Konsolindstillinger", - "opt_branding": "Branding / Tema", - "opt_folders": "Enhedsmapper", - "opt_groups": "Bruger- og enhedsgrupper", - "opt_addressbooks": "Adressebøger", - "opt_users": "Brugerkonti", - "opt_users_warning": "Destruktiv: erstatter ALLE brugerkonti med backupdata. Du kan være logget ud.", - "no_file": "Ingen backupfil valgt", - "invalid_json": "Ugyldig backupfil: ikke gyldig JSON", - "invalid_format": "Ugyldig backupfil: ikke en BetterDesk backup", - "stat_database": "Databasemotor", - "stat_keys": "Servernøgler inkluderet", - "stat_env": "Miljøfil", - "stat_uploads": "Brandingfiler", - "restart_required": "Nogle gendannede komponenter (nøgler / .env / Go-database) kræver genstart af tjenesten.", - "security_warning": "Denne sikkerhedskopi indeholder hemmeligheder. Opbevar den sikkert og del den aldrig.", - "restore_warning": "Gendannelse af hemmeligheder eller Go-serverdatabasen overskriver serveridentiteten og kræver en tjenesterestart.", - "opt_database": "Database (alle tabeller)", - "opt_database_hint": "Genimporterer alle konsoldata. Ingen genstart nødvendig.", - "opt_uploads": "Brandingfiler", - "opt_uploads_hint": "Logoer og uploadede billeder.", - "opt_secrets": "Servernøgler og hemmeligheder", - "opt_secrets_warning": "Overskriver Ed25519-serveridentitet, API-nøgle og sessionshemlighed. Kræver tjenesterestart.", - "opt_env": "Miljøfil (.env)", - "opt_env_warning": "Overskriver SESSION_SECRET, API-nøgle, database-DSN, porte og TLS-indstillinger. Kræver tjenesterestart.", - "opt_godb": "Go-serverdatabase", - "opt_godb_warning": "Overskriver Go-serverens SQLite-database (kun SQLite-backend). Kræver tjenesterestart." + "report": { + "title": "Arbejdsrapport", + "subtitle": "Beskriv arbejdet udført under denne fjernsession.", + "category": "Kategori", + "ticket_ref": "Ticketreference", + "summary": "Udført arbejde", + "skip": "Spring over for nu", + "submit": "Send rapport", + "summary_required": "Resumé er påkrævet", + "saved": "Arbejdsrapport gemt" }, - "cdap": { - "device_detail": "CDAP enhed", - "loading": "Indlæser...", - "loading_widgets": "Indlæser enhedswidgets...", - "load_error": "Kunne ikke indlæse enhedsdata", - "connected": "Forbundet", - "disconnected": "Afbrudt", - "device_offline_msg": "Enheden er i øjeblikket offline. Widget-værdier kan være forældede.", - "no_widgets": "Ingen tilgængelige widgets", - "no_widgets_desc": "Denne enhed har ikke registreret et CDAP-manifest med widgetdefinitioner.", - "command_log": "Kommandolog", - "clear_log": "Ryd log", - "confirm_command": "Bekræft kommando", - "select_option": "Vælg", - "cdap_status": "CDAP-status", - "cdap_enabled": "CDAP aktiveret", - "cdap_disabled": "CDAP deaktiveret", - "cdap_devices": "CDAP-enheder", - "cdap_connections": "Aktive forbindelser", - "send_command": "Send kommando", - "command_sent": "Kommandoen blev sendt", - "command_failed": "Kunne ikke sende kommandoen", - "devices_title": "CDAP enheder", - "devices_subtitle": "Tilsluttede enheder via Custom Device Application Protocol", - "stat_connected": "Forbundet", - "stat_port": "Port", - "search_devices": "Søg efter enheder...", - "no_devices": "Ingen enheder tilsluttet", - "no_devices_desc": "Ingen CDAP-enheder er tilsluttet i øjeblikket. Enheder vises her, når de opretter forbindelse til gatewayen.", - "gateway_disabled": "CDAP Gateway deaktiveret", - "gateway_disabled_desc": "Aktiver CDAP-gatewayen ved at indstille CDAP_ENABLED=true i serverkonfigurationen.", - "gateway_active": "Aktiv", - "toggle_enable": "Aktiver CDAP", - "toggle_disable": "Deaktiver CDAP", - "enabled_restart": "CDAP aktiveret. Servergenstart påkrævet for at anvende ændringer.", - "disabled_restart": "CDAP deaktiveret. Servergenstart påkrævet for at anvende ændringer.", - "widgets": "CDAP-kontrolfelter", - "type_all": "Alle", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-agent", - "type_network": "Netværk", - "type_camera": "Kamera", - "type_custom": "Brugerdefineret", - "active_alerts": "Aktive advarsler", - "alert_fired": "Advarsel udløst", - "alert_cleared": "Alarm ryddet", - "no_alerts": "Ingen aktive alarmer", - "connect_terminal": "Tilslut terminal", - "table_search": "Søg...", - "just_now": "Lige nu", - "terminal_connecting": "Opretter forbindelse til enhed...", - "terminal_disconnected": "Afbrudt", - "terminal_error": "Terminalforbindelse mislykkedes", - "linked_devices": "Forbundne enheder", - "link_device": "Link enhed", - "unlink_device": "Fjern tilknytning", - "no_linked_devices": "Ingen tilknyttede enheder", - "unlink_confirm": "Er du sikker på, at du vil fjerne linket til denne enhed?", - "link_prompt": "Indtast peer-id'et for at linke til denne enhed:", - "connect_desktop": "Tilslut skrivebordet", - "connect_video": "Tilslut Stream", - "connect_files": "Gennemse filer", - "connect_audio": "Tilslut lyd", - "upload_file": "Upload", - "desktop_connecting": "Opretter forbindelse...", - "video_connecting": "Opretter forbindelse...", - "files_connecting": "Opretter forbindelse...", - "audio_connecting": "Opretter forbindelse...", - "audio_streaming": "Streamer", - "clipboard_in": "Udklipsholder modtaget", - "clipboard_out": "Udklipsholder sendt", - "monitor_select": "Vælg Monitor", - "keyframe_request": "Anmod om Keyframe", - "quality_auto": "Auto kvalitet" + "empty": { + "packages": "Ingen pakker endnu. Opret en med knappen ovenfor.", + "contracts": "Ingen organisationskontrakter endnu. Tildel en pakke til en organisation.", + "sessions": "Ingen fakturerbare sessioner registreret endnu.", + "reports": "Ingen arbejdsrapporter indsendt endnu." }, - "desktop": { - "switch_mode": "Skrivebordstilstand", - "console_mode": "Konsoltilstand", - "loading": "Indlæser...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Luk", - "widgets_mode": "Kontrolfelttilstand", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Tilføj widget", - "remove_widget": "Fjern widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurer", - "search_widgets": "Søg efter widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Enheder", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Skriv noter her...", - "search_placeholder": "Søg efter enheder, sider, indstillinger...", - "search_pages": "Pages", - "search_devices": "Enheder", - "search_no_results": "No results", - "exit_desktop": "Afslut skrivebordstilstand", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Enhedsstatus", - "widget_server_health": "Server info", - "widget_system_stats": "Enhedsmålere", - "widget_device_list": "Enhedsliste", - "widget_quick_actions": "Hurtige handlinger", - "widget_recent_activity": "Seneste aktivitet", - "widget_notes": "Notes", - "widget_network_monitor": "Netværksmonitor", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP enheder", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Enhedsgitter", - "widget_multi_gauge": "Server målere", - "widget_weekly_chart": "Ugentlig aktivitet", - "widget_quick_controls": "Hurtig kontrol", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Forbindelsesstatistik", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Brugersessioner", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Ingen enheder", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Åbn", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Indstil URL i config", - "label_server_uptime": "Server oppetid", - "label_merged_info": "Slået sammen til serverinfo-widget", - "label_with_notes": "Med noter", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Enheder i alt", - "label_throughput": "Throughput", - "label_active_relays": "Aktive relæer", - "label_total_relayed": "Total relæet", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrer enheder...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Ingen CDAP enheder", - "action_add_widget": "Tilføj widget", - "label_merged_server_info": "Slået sammen til serverinfo-widget", - "wp_images": "Images", - "wp_colors": "Solide farver", - "wp_custom_color": "Brugerdefineret farve", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Tapetbilleder er ikke installeret på denne server.", - "wp_download_hint": "Placer PNG-billeder i mappen public/wallpapers/ for at aktivere valg af tapet.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Procesmonitor", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Databasestatistik", - "widget_docker_containers": "Docker containere", - "widget_shell_command": "Shell kommando", - "widget_device_map": "Enhedskort", - "widget_remote_connect": "Fjerntilslutning", - "label_no_online": "Ingen online enheder", - "label_no_events": "Ingen begivenheder i dag", - "label_event_title": "Begivenhedens titel:", - "label_no_data": "Ingen tilgængelige data", - "label_download_speed": "Download hastighed", - "label_latency": "Latency", - "label_server": "Serverinstans", - "label_run_test": "Run Test", - "label_testing": "Tester...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Ingen containere", - "label_docker_unavailable": "Docker ikke tilgængelig", - "label_no_command": "Ingen kommando konfigureret", - "label_no_output": "Ingen output endnu", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Gem forudindstilling", - "label_load_preset": "Load Preset", - "label_preset_name": "Forudindstillet navn:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Auto Arranger", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 kolonner (lige)", - "label_2col_wide": "2 kolonner (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget-gruppe", - "ungroup_widgets": "Ophæv gruppering af widgets", - "group_widgets": "Gruppér valgte widgets", - "snap_layouts": "Snap-layouts", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Snap øverst til venstre", - "snap_top_right": "Snap øverst til højre", - "snap_bottom_left": "Snap nederst til venstre", - "snap_bottom_right": "Snap nederst til højre", - "aero_shake": "Ryst for at minimere andre", - "zone_resize": "Træk kant for at ændre størrelse på zoner", - "zone_borders": "Trækbare zonegrænser", - "app_drawer": "Applications", - "search_apps": "Søg i apps...", - "edit_shortcuts": "Rediger genveje", - "widgets": "Kontrolfelter", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Tildel eksisterende pakke", + "submit": "Tildel" }, - "desktop_login": { - "click_to_sign_in": "Klik hvor som helst, eller tryk på en tast for at logge ind", - "username_placeholder": "Brugernavn", - "password_placeholder": "Adgangskode", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "To-faktor-godkendelse", - "totp_subtitle": "Indtast den 6-cifrede kode fra din autentificeringsapp", - "back_to_login": "Tilbage til login", - "fill_all_fields": "Udfyld venligst alle felter", - "invalid_credentials": "Ugyldigt brugernavn eller adgangskode", - "invalid_code": "Ugyldig bekræftelseskode", - "enter_6_digits": "Indtast alle 6 cifre", - "network_error": "Network error — check your connection", - "session_expired": "Session udløb. Log venligst ind igen." - }, - "tokens": { - "title": "Enhedstokens", - "subtitle": "Administrer tilmeldingstokens til automatisk levering af enhed", - "enrollment_mode": "Tilmeldingstilstand", - "mode_open": "Åbn", - "mode_open_desc": "Enhver enhed kan registrere sig uden et token", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Samlede tokens", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Søg efter tokens...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Bulk Generer", - "create": "Opret token", - "edit": "Rediger token", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Oprettet", - "actions": "Actions", - "name_placeholder": "f.eks. Office PC batch", - "max_uses": "Max Uses", - "max_uses_hint": "0 = ubegrænset", - "expires_in": "Expires In", - "no_expiration": "Ingen udløb", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Valgfri bemærkning om dette token...", - "count": "Count", - "count_range": "Antal tokens, der skal genereres (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token oprettet", - "tokens_generated": "Tokens genereret", - "copy_warning": "Kopiér tokenet nu. Det bliver ikke vist igen.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Er du sikker på, at du vil tilbagekalde dette token? Enheder, der allerede er registreret hos den, vil ikke blive påvirket.", - "revoked_success": "Token blev tilbagekaldt", - "no_tokens": "Ingen tokens fundet", - "expired": "Expired", - "never": "Never", - "save": "Gem", - "cancel": "Annuller", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Næste", - "prev": "Previous", - "skip": "Skip", - "finish": "Afslut", - "close": "Luk", - "step_of": "{current} af {total}", - "console_sidebar_title": "Navigationssidebjælke", - "console_sidebar_text": "Få adgang til alle moduler herfra. Klik på et ikon for at navigere til den sektion. Sidebjælken tilpasser sig din skærmstørrelse.", - "console_expand_title": "Udvid sidepanelet", - "console_expand_text": "Klik her for at udvide sidebjælken og se hele etiketter for alle navigationselementer. Klik igen for at skjule.", - "console_search_title": "Hurtig søgning", - "console_search_text": "Søg hurtigt efter enheder, indstillinger eller handlinger. Tryk på Ctrl+K for tastaturgenvej.", - "console_dashboard_title": "Oversigtspanel", - "console_dashboard_text": "Din centrale hub, der viser serverstatus, online-enheder og hurtige handlinger. Hold øje med vigtige metrics på et øjeblik.", - "console_devices_title": "Enhedshåndtering", - "console_devices_text": "Se, søg og administrer alle tilsluttede enheder. Filtrer efter status, tildel tags, og konfigurer individuelle enhedsindstillinger.", - "console_settings_title": "Indstillinger", - "console_settings_text": "Konfigurer serveradfærd, sikkerhedsindstillinger, branding og brugeradministration. Tilpas BetterDesk, så den passer til dine behov.", - "console_desktop_title": "Skrivebordstilstand", - "console_desktop_text": "Skift til skrivebordstilstand for et arbejdsområde med vinduer med widgets. Perfekt til multi-tasking og overvågning af dashboards.", - "console_complete_title": "Du er klar!", - "console_complete_text": "Udforsk sidebjælkekategorierne for at opdage alle funktioner. Klik på hjælpeikonet når som helst for at genstarte denne vejledning.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Den øverste bjælke viser uret, hurtige kontroller og adgang til appskuffen. Klik på gitterikonet for at gennemse alle apps.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Åbn appskuffen for at søge og starte enhver konsolfunktion som et flydende vindue. Apps er organiseret efter kategori.", - "desktop_widgets_title": "Kontrolfelter", - "desktop_widgets_text": "Dit arbejdsområde, der kan tilpasses. Widgets viser live information og giver hurtig adgang til funktioner. Træk for at omarrangere.", - "desktop_add_widget_title": "Tilføj widgets", - "desktop_add_widget_text": "Klik her for at gennemse tilgængelige widgets. Vælg mellem overvågningsskærme, enhedslister, noter og mere.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Åbne apps vises her. Klik for at fokusere eller minimere vinduer. Hold musen over ikoner for at se appetiketter.", - "desktop_snap_title": "Snap-layouts", - "desktop_snap_text": "Træk vinduer til skærmens kanter for at fastgøre dem på plads, eller svæv maksimer-knappen for forudindstillinger af layout. Prøv Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Apps åbnes i vinduer, der kan trækkes, kan ændres størrelse. Minimer, maksimer eller luk fra titellinjen. Windows lag over widgets.", - "desktop_search_title": "Hurtig søgning", - "desktop_search_text": "Søg på tværs af enheder, sider og indstillinger. Tryk på Ctrl+K hvor som helst for at åbne søgning med det samme.", - "desktop_complete_title": "Skrivebordstilstand klar!", - "desktop_complete_text": "Prøv at åbne apps fra skuffen og arrangere vinduer side om side. Brug widget-forudindstillinger til hurtige dashboard-layouts.", - "devices_folders_title": "Enhedsmapper", - "devices_folders_text": "Organiser enheder i mapper. Klik på en mappe for at filtrere listen. Højreklik for at omdøbe eller slette.", - "devices_search_title": "Søg og filtrer", - "devices_search_text": "Søg efter ID, værtsnavn eller platform. Brug statuspillerne til kun at vise online, offline eller alle enheder.", - "devices_table_title": "Enhedsliste", - "devices_table_text": "Klik på en enhedsrække for detaljer. Brug kebabmenuen til højre til hurtige handlinger som f.eks. oprette forbindelse, redigere tags eller slette.", - "devices_complete_title": "Enhedshåndtering klar!", - "devices_complete_text": "Træk enheder mellem mapper for at organisere dem. Dobbeltklik på en enhed for at åbne dens detaljepanel.", - "settings_tabs_title": "Indstillinger Kategorier", - "settings_tabs_text": "Naviger mellem Generelt, Sikkerhed, Udseende og andre konfigurationssektioner.", - "settings_content_title": "Konfiguration", - "settings_content_text": "Hver sektion indeholder specifikke server- og konsolindstillinger. Ændringer gemmes, når du klikker på Gem.", - "settings_complete_title": "Oversigt over indstillinger", - "settings_complete_text": "Tjek sikkerhedsindstillinger for 2FA, API nøgler og brugeradministration. Besøg Udseende for at tilpasse konsoludseendet.", - "help": "Hjælp og vejledninger", - "tour_console": "Konsoltur", - "tour_desktop": "Skrivebordstur", - "tour_devices": "Enhedsrundvisning", - "tour_settings": "Indstillinger Rundvisning", - "reset_all": "Nulstil alle selvstudier", - "tour_remote": "Fjernstyringstur", - "tour_organization": "Organisationsopsætning", - "tour_cdap": "CDAP Oversigt", - "tour_chat": "Grundlæggende om chat", - "remote_toolbar_title": "Fjernværktøjslinje", - "remote_toolbar_text": "Få adgang til skærmkontroller, udklipsholdersynkronisering, specielle taster og kvalitetsindstillinger fra værktøjslinjen. Skift fuldskærm med F11.", - "remote_canvas_title": "Fjerndisplay", - "remote_canvas_text": "Dette er fjernskærmen. Klik inde for at begynde at styre fjernenheden. Indtastning af mus og tastatur videresendes automatisk.", - "remote_clipboard_title": "Udklipsholder Sync", - "remote_clipboard_text": "Kopier og indsæt tekst mellem din computer og fjernenheden. Brug Ctrl+C / Ctrl+V som normalt, mens du fokuserer på fjerndisplayet.", - "remote_complete_title": "Klar til fjernsession!", - "remote_complete_text": "Brug knapperne på værktøjslinjen til specielle taster (Ctrl+Alt+Del, PrintScreen) og skærmskift. Tryk på Escape eller klik på Afbryd forbindelse for at afslutte sessionen.", - "org_overview_title": "Organisationer", - "org_overview_text": "Organisationer giver dig mulighed for at gruppere brugere, enheder og politikker. Hver organisation har sin egen administrator, operatører og indstillinger.", - "org_create_title": "Opret organisation", - "org_create_text": "Klik her for at oprette en ny organisation. Angiv et navn, slug og valgfri beskrivelse. Du bliver ejer af den nye organisation.", - "org_members_title": "Administrer medlemmer", - "org_members_text": "Inviter brugere via e-mail, tildel roller (admin, operatør, bruger) og administrer adgang. Medlemmer kan se enheder, der er tildelt deres organisation.", - "org_devices_title": "Tildel enheder", - "org_devices_text": "Tilføj enheder til organisationen. Enheder, der er tildelt her, vil arve organisationens politikker og være synlige for dens medlemmer.", - "org_policies_title": "Organisationspolitikker", - "org_policies_text": "Indstil sikkerhedspolitikker som adgangskodekrav, sessionstimeout, 2FA-håndhævelse og regler for enhedstilmelding for organisationen.", - "org_complete_title": "Organisationsopsætning fuldført!", - "org_complete_text": "Inviter dit team og tildel enheder for at begynde at bruge organisationsstyret administration. Politikker gælder automatisk for alle medlemmer.", - "cdap_devices_title": "CDAP-enheder", - "cdap_devices_text": "Se alle tilsluttede CDAP-enheder — IoT-sensorer, PLC'er, broer og brugerdefinerede agenter. Grønne indikatorer viser liveforbindelser.", - "cdap_widgets_title": "Widget-kontrolpanel", - "cdap_widgets_text": "Widgets viser realtidsdata fra enheder. Målere, kontakter, LED'er, diagrammer — hver widgettype visualiserer en anden slags data.", - "cdap_commands_title": "Send kommandoer", - "cdap_commands_text": "Interager med enheder ved at sende kommandoer. Nogle kommandoer kræver bekræftelse. Kommandologgen gemmer historikken.", - "cdap_terminal_title": "Enhedsterminal", - "cdap_terminal_text": "Åbn en terminalsession til CDAP-agenter for avanceret diagnostik eller manuel konfiguration.", - "cdap_complete_title": "CDAP-oversigt afsluttet!", - "cdap_complete_text": "Udforsk enhedswidgets, send kommandoer og brug terminal eller filbrowser til dybere styring. CDAP-agenter rapporterer målinger automatisk.", - "chat_contacts_title": "Kontakter og grupper", - "chat_contacts_text": "Se dine kontakter og chatgrupper. Klik på en kontakt for at åbne en samtale. Grønne prikker angiver onlinebrugere.", - "chat_send_title": "Send beskeder", - "chat_send_text": "Indtast din besked, og tryk på Enter for at sende. Beskeder er ende-til-ende-krypteret, når begge parter understøtter E2E.", - "chat_file_title": "Del filer", - "chat_file_text": "Klik på den vedhæftede fil for at dele filer. Filer er krypteret og kan være op til 50 MB.", - "chat_complete_title": "Chat klar!", - "chat_complete_text": "Chat med operatører og slutbrugere i realtid. Opret grupper til teamkommunikation. Alle beskeder understøtter læsekvitteringer.", - "disable_tutorials": "Deaktiver selvstudier", - "enable_tutorials": "Aktiver selvstudier" - }, - "help_request": { - "title": "Hjælpeanmodninger", - "subtitle": "Administrer indkommende anmodninger om hjælp fra desktop-klienter", - "new_request": "Ny anmodning om hjælp", - "device": "Enhed", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Ingen anmodninger om hjælp", - "notification": "Hjælpanmodning modtaget fra", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisationer", - "create": "Opret organisation", - "edit": "Rediger organisation", - "detail": "Organisationsdetaljer", - "name": "Name", - "slug": "Slug (URL-sikker)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Enheder", - "invitations": "Invitations", - "settings": "Indstillinger", - "add_user": "Add User", - "assign_device": "Tildel enhed", - "create_invitation": "Opret invitation", - "delete_confirm": "Vil du slette denne organisation? Dette vil fjerne alle tilknyttede brugere, enheder og indstillinger.", - "no_orgs": "Ingen organisationer endnu", - "no_orgs_hint": "Opret din første organisation til at begynde at administrere enheder og brugere.", - "connection_policy": "Forbindelsespolitik", - "allow_file_transfer": "Tillad filoverførsel", - "allow_clipboard": "Tillad udklipsholder", - "max_session_duration": "Maks. sessionsvarighed (min)", - "role_owner": "Owner", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Medlem", - "username": "Brugernavn", - "password": "Adgangskode", - "display_name": "Vist navn", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Enheds-id", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Tildelt bruger", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Ingen brugere i denne organisation.", - "no_devices": "Ingen enheder er tildelt denne organisation.", - "no_invitations": "Ingen invitationer.", - "user_added": "User added", - "user_removed": "Bruger fjernet", - "user_updated": "Brugerrolle opdateret", - "device_assigned": "Enhed tildelt", - "device_unassigned": "Enheden er ikke tildelt", - "invitation_created": "Invitation oprettet", - "settings_saved": "Indstillinger gemt", - "org_deleted": "Organisation slettet", - "confirm_remove_user": "Vil du fjerne denne bruger fra organisationen?", - "confirm_unassign_device": "Vil du fjerne tildelingen af denne enhed fra organisationen?", - "confirm_delete_org": "Vil du slette denne organisation og alle tilknyttede data?", - "edit_role": "Rediger rolle", - "raw_settings": "Rå indstillinger", - "key": "Key", - "value": "Value", - "save": "Gem indstillinger", - "policy_unattended": "Uovervåget (øjeblikkelig)", - "policy_attended": "Deltog (med bekræftelse)", - "policy_ask": "Always ask", - "expires_hours": "Udløb (timer)", - "loading_failed": "Kunne ikke indlæse organisationsdata", - "name_slug_required": "Navn og snegl er påkrævet", - "org_created": "Organisation oprettet", - "org_updated": "Organisationen opdateret", - "create_new_user": "Opret ny", - "add_existing_user": "Tilføj eksisterende", - "none_available": "none", - "select_user": "Vælg bruger", - "org_role": "Organisations rolle", - "link_user_hint": "Den valgte bruger vil blive knyttet til denne organisation ved hjælp af deres serverkontooplysninger.", - "no_available_users": "Alle serverbrugere er allerede knyttet til denne organisation.", - "user_linked": "Bruger knyttet til organisation" - }, - "chat": { - "e2e_enabled": "End-to-end krypteret", - "e2e_establishing": "Etablerer sikker kanal...", - "e2e_established": "Sikker kanal etableret", - "e2e_unsupported": "E2E-kryptering understøttes ikke i denne browser", - "typing_indicator": "skriver...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Fil", - "file_too_large": "Filen er for stor (maks. 50 MB)", - "file_encrypted": "Krypteret filoverførsel", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Sikkerhedsnøgler drejet", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Grupper", - "no_contacts": "Ingen kontakter endnu", - "no_groups": "Ingen grupper endnu", - "no_messages": "Ingen beskeder endnu", - "no_results": "Ingen resultater fundet", - "select_conversation": "Vælg en samtale for at begynde at chatte", - "type_message": "Skriv en besked...", - "send": "Send besked", - "attach_file": "Vedhæft fil", - "emoji": "Emoji", - "search_messages": "Søg efter beskeder", - "create_group": "Opret gruppe", - "group_name": "Gruppenavn", - "group_members": "Medlemmer", - "cancel": "Annuller", - "create": "Opret", - "members": "medlemmer", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Søg i kontakter og beskeder", - "select_conversation_hint": "Vælg en samtale for at se beskeder", - "info": "Info", - "group_name_placeholder": "Indtast gruppenavn" - }, - "toast": { - "device_connected": "Enhed tilsluttet", - "device_disconnected": "Enhed afbrudt", - "session_started": "Fjernsession startede", - "session_ended": "Fjernsession afsluttet", - "file_upload_complete": "Filupload fuldført", - "settings_saved": "Indstillinger gemt", - "error_generic": "Der opstod en fejl", - "connection_lost": "Forbindelse mistet", - "reconnecting": "Genopretter forbindelse..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Admin-værktøjer og diagnostiske værktøjer", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Send forespørgsel", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Indtast tekst...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Gå til server", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Tjek værtens tilgængelighed og latenstid", - "tcp_title": "TCP Portkontrol", - "tcp_desc": "Test TCP-portforbindelsen", - "ssl_title": "SSL-inspektør", - "ssl_desc": "Undersøg SSL/TLS-certifikatoplysninger", - "http_title": "HTTP Sundhedstjek", - "http_desc": "Bekræft HTTP-endepunktsstatus", - "dns_title": "DNS Lookup", - "dns_desc": "Løs hostnavn til IP-adresse", - "whois_title": "DNS Records", - "whois_desc": "Forespørgsel A, AAAA, MX, TXT, NS poster", - "speed_title": "Speed Test", - "speed_desc": "Mål downloadbåndbredde", - "run_speed_test": "Kør hastighedstest", - "wol_title": "Wake-on-LAN", - "wol_desc": "Send magisk pakke for at vække en enhed", - "wol_sent": "Magisk pakke sendt", - "hash_title": "Hashberegner", - "hash_desc": "Generer kryptografiske hashes", - "password_title": "Adgangskodegenerator", - "password_desc": "Generer en sikker tilfældig adgangskode", - "jwt_title": "JWT Decoder", - "jwt_desc": "Afkode og inspicer JSON Web-tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Indkode eller afkode Base64-data", - "url_title": "URL Encoder", - "url_desc": "Indkode eller afkode URL-komponenter", - "processes_title": "Procesliste", - "processes_desc": "Se kørende systemprocesser", - "disk_title": "Disk Usage", - "disk_desc": "Se brug af diskpartitioner", - "db_title": "Databasestatistik", - "db_desc": "Se databasetabelstatistik", - "docker_title": "Docker containere", - "docker_desc": "Se kørende Docker-containere", - "logs_title": "Log Viewer", - "logs_desc": "Se seneste logoutput", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Gyldig fra", - "valid_to": "Gyldig til", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Ingen tilgængelige data", - "no_docker": "Ingen Docker-beholdere fundet eller Docker ikke tilgængelig", - "no_logs": "Ingen log linjer tilgængelige" - }, - "policies": { - "title": "Organisationspolitikker", - "subtitle": "Administrer sikkerheds-, forbindelses- og funktionspolitikker for dine organisationer", - "select_org": "Organisation", - "select_org_placeholder": "Vælg en organisation...", - "select_org_first": "Vælg en organisation for at se politikrevisionslog.", - "configured": "Konfigureret", - "connection_title": "Forbindelsespolitik", - "connection_desc": "Styr, hvordan fjernsessioner etableres", - "connection_mode": "Tilslutningstilstand", - "mode_attended": "Deltog (kræver brugergodkendelse)", - "mode_unattended": "Uovervåget (tillad altid)", - "mode_ask": "Spørg altid", - "max_session": "Maks. sessionsvarighed (minutter)", - "idle_lock": "Timeout for tomgangslås (minutter)", - "wallpaper_policy": "Tapet under session", - "wallpaper_show": "Vis", - "wallpaper_hide_session": "Skjul under sessionen", - "wallpaper_hide_always": "Skjul altid", - "features_title": "Funktionspolitik", - "features_desc": "Aktiver eller deaktiver specifikke funktioner for enheder", - "allow_file_transfer": "Tillad filoverførsel", - "allow_clipboard": "Tillad Clipboard Sync", - "allow_audio": "Tillad lydstreaming", - "allow_recording": "Tillad sessionsoptagelse", - "security_title": "Sikkerhedspolitik", - "security_desc": "Håndhæv sikkerhedskrav til organisationsenheder", - "require_2fa": "Kræv 2FA for uovervåget adgang", - "password_min_length": "Minimum adgangskodelængde", - "password_require_special": "Kræv specialtegn", - "password_max_age": "Adgangskode maks. alder (dage, 0=aldrig)", - "allowed_operators": "Tilladte operatørroller (kommasepareret)", - "network_title": "Netværkspolitik", - "network_desc": "Styr relæservere og direkte forbindelser", - "block_direct_p2p": "Bloker direkte P2P (kraftrelæ)", - "allowed_relays": "Tilladte relæservere (én pr. linje)", - "ip_allowlist": "IP-tilladelsesliste (CIDR, én pr. linje)", - "update_title": "Opdater politik", - "update_desc": "Styr automatiske opdateringer og opdateringskanaler", - "auto_update": "Aktiver automatisk opdatering", - "update_channel": "Opdater kanal", - "audit_title": "Politikændringer", - "audit_desc": "Seneste politikændringshistorie", - "no_audit": "Ingen politikændringer registreret.", - "save_success": "Politik blev gemt", - "save_failed": "Politikken kunne ikke gemmes", - "load_failed": "Politikker kunne ikke indlæses", - "block_direct_p2p_hint": "Gælder for enheder i denne organisation." - }, - "attestation": { - "title": "Enhedsattest", - "subtitle": "Overvåg enhedsidentitetsbekræftelse og hardwarefingeraftryk", - "verified": "Verified", - "pending": "Pending", - "failed": "Mislykkedes", - "device_list": "Enhedsattestationsposter", - "device_list_desc": "Hardware-fingeraftryk og identitetsbekræftelsesstatus", - "col_device": "Enheds-id", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Ingen attestationsregistreringer fundet.", - "verify_success": "Enheden er markeret som bekræftet", - "verify_failed": "Enheden kunne ikke bekræftes", - "revoke_success": "Enhedsattest tilbagekaldt", - "revoke_failed": "Kunne ikke tilbagekalde attestation" - }, - "fleet": { - "title": "Flådestyring", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Arbejdsgangsbygger", - "tab_compliance": "Compliance", - "res_title": "Ressource kortlægning", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Netværksdrev", - "res_type_dns": "DNS server", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Tilføj ressource", - "res_name": "Ressourcenavn", - "res_type": "Type", - "res_address": "Adresse/sti", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organisation", - "res_scope_group": "Gruppe", - "res_scope_device": "Enhed", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Ingen ressourcer fundet. Klik på 'Tilføj ressource' for at oprette en.", - "res_confirm_delete": "Er du sikker på, at du vil slette denne ressource?", - "task_title": "Opgaveplanlægger", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Mislykkedes", - "task_search": "Search tasks…", - "task_create": "Opret opgave", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Opdatering", - "task_type_restart": "Genstart", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Enheds-id'er eller gruppenavne, kommasepareret", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Tidsplan værdi", - "task_script": "Script / Kommando", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Ingen opgaver fundet. Klik på 'Opret opgave' for at komme i gang.", - "task_confirm_delete": "Er du sikker på, at du vil slette denne opgave?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Arbejdsgangsbygger", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Gem", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Vælg en node for at redigere dens egenskaber.", - "builder_node_trigger_manual": "Manuel udløser", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Hændelsesudløser", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Genstart Svc", - "builder_node_action_file_deploy": "Implementer fil", - "builder_node_action_message": "Send besked", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Send advarsel", - "builder_node_result_chain": "Kæde arbejdsgang", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Workflow navn:", - "comp_title": "Softwareoverholdelse", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Enhed", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Vil du køre automatisk afhjælpning på denne enhed?", - "comp_no_data": "Ingen overholdelsesdata tilgængelige. Kør en scanning for at komme i gang.", - "save": "Gem", - "cancel": "Annuller", - "close": "Luk", - "edit": "Rediger", - "delete": "Slet", - "actions": "Actions", - "all_orgs": "Alle organisationer", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Netværksdrev", - "type_dns": "DNS server", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Tilføj ressource", - "edit_resource": "Rediger ressource", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adresse/sti", - "scope_org": "Organisation", - "scope_group": "Gruppe", - "scope_device": "Enhed", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Er du sikker på, at du vil slette dette element?", - "all_statuses": "Alle statusser", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Mislykkedes", - "search_tasks": "Search tasks�", - "create_task": "Opret opgave", - "edit_task": "Rediger opgave", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Filimplementering", - "task_type_registry": "Registry", - "target_devices": "Målenheder", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / Kommando", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Indlæser", - "no_output": "Ingen output tilgængelig", - "error_loading": "Fejl ved indlæsning af data", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuel udløser", - "node_schedule": "Schedule", - "node_event": "Hændelsesudløser", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Genstart Svc", - "node_file_deploy": "Implementer fil", - "node_send_message": "Send besked", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Send advarsel", - "node_chain": "Kæde arbejdsgang", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Alle organisationer", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Enhed", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Vil du køre automatisk afhjælpning på denne enhed?" - }, - "scaling": { - "title": "Skalering & Relæstyring", - "tab_overview": "Oversigt", - "tab_relays": "Relay Nodes", - "tab_rules": "Tildelingsregler", - "tab_capacity": "Kapacitetsplanlægning", - "arch_title": "Netværksarkitektur", - "arch_loading": "Indlæser arkitekturdiagram...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Enheder i alt", - "stat_active_sessions": "Aktive sessioner", - "stat_bandwidth": "Samlet båndbredde", - "relay_health": "Stafett sundhed", - "no_relays": "Ingen relæknuder er konfigureret. Tilføj din første relæknude for at fordele belastningen.", - "relay_search": "Søg relæer...", - "relay_add": "Tilføj relæknude", - "relay_edit": "Rediger relæknude", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Enheder", - "col_sessions": "Sessioner", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Mål relæ", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Aktiveret", - "status_disabled": "Deaktiveret", - "confirm_delete_relay": "Er du sikker på, at du vil slette denne relæknude?", - "confirm_delete_rule": "Er du sikker på, at du vil slette denne tildelingsregel?", - "rules_hint": "Tildelingsregler bestemmer, hvilken relæserver, der håndterer specifikke enhedsgrupper. Regler vurderes efter prioritet (laveste først).", - "rule_add": "Add Rule", - "rule_edit": "Rediger regel", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Enhedsgruppe", - "match_tag": "Enhedsmærke", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Primær reservenode", - "fallback_nearest": "Nærmeste relæ", - "relay_max_sessions": "Max sessioner", - "relay_max_bandwidth": "Maks. båndbredde (Mbps)", - "cap_tiers": "Kapacitetsniveauer", - "cap_loading": "Indlæser kapacitetsdata...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Ingen tilgængelige anbefalinger.", - "cap_planning": "Infrastrukturplanlægning", - "cap_config": "Konfiguration", - "cap_max_devices": "Max enheder", - "cap_max_sessions": "Max sessioner", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Enhedens kapacitet", - "cap_tier_sessions": "Sessionskapacitet", - "cap_tier_bandwidth": "Båndbreddekapacitet", - "cap_single_sqlite": "Enkelt server (SQLite)", - "cap_single_pg": "Enkelt server (PostgreSQL)", - "cap_master_3": "Master + 3 relæer", - "cap_master_10": "Master + 10 relæer", - "rec_no_relays": "Ingen relæknuder er konfigureret. Overvej at tilføje relæknuder for bedre ydeevne og redundans.", - "rec_devices_high": "Enhedsudnyttelsen er høj. Overvej at tilføje flere relæknuder for at fordele belastningen.", - "rec_sessions_high": "Sessionskapaciteten nærmer sig sin grænse. Overvej at opgradere relæinfrastruktur.", - "rec_cpu_high": "Nogle relæknuder rapporterer højt CPU-forbrug. Overvej belastningsbalancering eller kapacitetsopgraderinger.", - "rec_all_good": "Alle systemer fungerer inden for normale parametre. Ingen handling påkrævet.", - "save": "Gem", - "cancel": "Annuller", - "edit": "Rediger", - "delete": "Slet", - "close": "Luk", - "no_rules": "Ingen tildelingsregler.", - "relays_info_banner": "Denne liste er informativ. De relæservere, der faktisk bruges af klienter, konfigureres via miljøvariablen RELAY_SERVERS på BetterDesk-serveren.", - "relay_name_address_required": "Navn og adresse er påkrævet.", - "relay_save_failed": "Relæknudepunktet kunne ikke gemmes.", - "relay_delete_failed": "Relæknudepunktet kunne ikke slettes.", - "relay_saved": "Relæknude er gemt.", - "relay_deleted": "Relæknude er slettet.", - "rule_name_value_required": "Regelnavn og matchværdi er påkrævet.", - "rule_save_failed": "Reglen kunne ikke gemmes.", - "rule_delete_failed": "Reglen kunne ikke slettes.", - "rule_saved": "Regel gemt.", - "rule_deleted": "Regel slettet." - }, - "cross_platform": { - "title": "Kompatibilitet på tværs af platforme", - "tab_matrix": "Kompatibilitetsmatrix", - "tab_distribution": "Distribution", - "tab_protocols": "Protokoller", - "tab_limitations": "Begrænsninger", - "matrix_hint": "Funktionsunderstøttelsesmatrix på tværs af alle understøttede platforme. Grøn = fuld støtte, gul = delvis, grå = ikke tilgængelig, blå = planlagt.", - "col_feature": "Funktion", - "legend_full": "Fuld støtte", - "legend_partial": "Delvis støtte", - "legend_none": "Ikke tilgængelig", - "legend_planned": "Planlagt", - "platform_breakdown": "Platformnedbrud", - "arch_breakdown": "Arkitektur sammenbrud", - "version_breakdown": "Versionsopdeling", - "summary": "Resumé", - "total_devices": "Enheder i alt", - "unique_platforms": "Platforme", - "unique_archs": "Arkitekturer", - "unique_versions": "Klientversioner", - "no_devices": "Ingen enheder registreret endnu.", - "protocols_hint": "Forhandling af protokolkapacitet sikrer, at hver klient kun modtager de funktioner, den understøtter. Serveren tilpasser adfærd baseret på rapporterede muligheder.", - "capability_negotiation": "Kapacitetsforhandling", - "codec_support": "Codec-support (online-enheder)", - "feature_support": "Funktionssupport (online enheder)", - "no_codec_data": "Ingen tilgængelige codec-data fra online-enheder.", - "no_feature_data": "Ingen funktionsdata tilgængelige fra online-enheder.", - "protobuf_schema": "Protokolbufferskema", - "diagram_client": "Klient", - "diagram_server": "BetterDesk server", - "diagram_peer": "Klientnode", - "limitations_hint": "Hver platform har specifikke begrænsninger, der påvirker tilgængelige funktioner. Gennemgå disse begrænsninger, når du planlægger implementeringer.", - "feat_desktop_client": "Desktop klient", - "feat_background_agent": "Baggrundsagent", - "feat_remote_target": "Fjernmål", - "feat_screen_capture": "Skærmoptagelse", - "feat_input_injection": "Input injektion", - "feat_file_transfer": "Filoverførsel", - "feat_clipboard_sync": "Udklipsholder Sync", - "feat_audio_streaming": "Lydstreaming", - "feat_chat": "Chat", - "feat_h264": "H.264 codec", - "feat_vp9": "VP9 codec", - "feat_av1": "AV1 codec", - "feat_cdap_agent": "CDAP-agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webbrowser", - "platform_chromeos": "ChromeOS", - "status_production": "Produktion", - "status_testing": "Test", - "status_planned": "Planlagt", - "status_limited": "Begrænset", - "status_experimental": "Eksperimentel", - "limit_win_uac": "UAC-højde påkrævet til serviceinstallation og input-injektion på sikre desktops.", - "limit_win_service": "Kører som NSSM service; kræver administratorrettigheder til installation.", - "limit_win_firewall": "Windows Firewall-regler skal tillade porte 21115-21119 for relæforbindelser.", - "limit_linux_wayland": "Wayland-komponister begrænser programmatisk skærmoptagelse; PipeWire-portal API påkrævet.", - "limit_linux_pipewire": "Lydoptagelse kræver PipeWire; PulseAudio fallback tilgængelig, men begrænset.", - "limit_linux_arm": "ARM64 builds tilgængelige; nogle codecs kan bruge softwareafkodning (langsommere).", - "limit_mac_screen": "Tilladelse til skærmoptagelse påkrævet i Systemindstillinger > Fortrolighed og sikkerhed.", - "limit_mac_signing": "Agent skal være underskrevet med Apple Developer ID for distribution.", - "limit_mac_notarize": "Notarisering påkrævet for macOS Gatekeeper (ikke-App Store-distribution).", - "limit_android_projection": "MediaProjection API kræver brugersamtykke for hver skærmoptagelsessession.", - "limit_android_accessibility": "Inputinjektion kræver AccessibilityService; begrænset i Android 14+.", - "limit_android_battery": "Baggrundstjeneste begrænset af døsetilstand; kan kræve batterioptimeringsfritagelse.", - "limit_ios_capture": "Apple forbyder baggrundsskærmbillede; kun seer-tilstand understøttet.", - "limit_ios_input": "Ingen input-injektion tilladt; Kun fjernvisning og chat.", - "limit_ios_appstore": "Distribution kun via App Store; TestFlight til beta-test.", - "limit_web_https": "WebCodecs API og WebRTC kræver HTTPS; HTTP falder tilbage til JMuxer (begrænsede codecs).", - "limit_web_codec": "Codec-understøttelse afhænger af browseren; H.264 bredt understøttet, VP9/AV1 varierer.", - "limit_web_performance": "Ydeevne begrænset af browsersandbox; ingen direkte hardwareacceleration.", - "limit_chrome_crostini": "Fuld agentstøtte kun inde i Crostini Linux-beholderen.", - "limit_chrome_pwa": "PWA-tilstand giver kun web-funktioner; ingen native agent-kapaciteter.", - "limit_chrome_input": "Inputinjektion understøttes ikke uden for Crostini-beholderen.", - "feat_session_recording": "Sessionsoptagelse", - "feat_multi_monitor": "Flere skærme", - "feat_unattended_access": "Ubevogtet adgang", - "limit_win_virtual_account": "Tjenestee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Tjenestee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Sikkerhedsrevision", - "tab_overview": "Oversigt", - "tab_events": "Revisionsbegivenheder", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Sikkerhedsscore", - "failed_logins": "Mislykkede logins (24 timer)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Gamle nøgler (>90d)", - "security_checks": "Sikkerhedstjek", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Sikker", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "all_events": "All Events", - "event_login_failed": "Login mislykkedes", - "event_login_success": "Login succes", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfiguration ændret", - "event_key_created": "Nøgle oprettet", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Ingen revisionsbegivenheder fundet.", - "hardening_hint": "Sikkerhedshærdende prioriteter for din BetterDesk-implementering. Varerne er sorteret efter sværhedsgrad.", - "no_hardening": "Ingen hærdende emner tilgængelige.", - "vuln_hint": "Resultater af afhængighedssårbarhedsscanning. Kør npm-revision regelmæssigt for at holde afhængigheder sikre.", - "no_vulns": "Ingen sårbarheder fundet. Dine afhængigheder er sikre." - }, - "languages": { - "title": "Sprogstyring", - "total_languages": "Samlede sprog", - "fully_translated": "Fuldt oversat", - "needs_review": "Trænger til gennemgang", - "reference_keys": "Referencenøgler", - "no_languages": "Ingen sprogfiler fundet.", - "badge_reference": "Reference", - "badge_review": "Trænger til gennemgang", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Visning mangler", - "fix_missing": "Fix Missing", - "missing_keys_for": "Mangler nøgler til", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "og {n} mere...", - "all_keys_present": "Alle nøgler er til stede!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Manglende nøgler i {code} skal oversættes manuelt.", - "no_fix_needed": "Ingen manglende nøgler at rette." - }, - "resource_control": { - "title": "Ressourcekontrol", - "tab_overview": "Oversigt", - "tab_usb": "USB Control", - "tab_optical": "Optiske drev", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Ressourcekvoter", - "compliance_by_category": "Overholdelse efter kategori", - "device_compliance": "Enhedsoverholdelse", - "search_devices": "Søg efter enheder...", - "col_device": "Enhed", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Enheder i alt", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Overholdelsesgrad", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurer", - "no_devices": "Ingen enheder fundet", - "usb_title": "USB Portkontrol", - "usb_hint": "Kontroller USB-lagerenhedsadgang for den valgte enhed eller standardpolitik for hele organisationen.", - "usb_storage_policy": "USB opbevaringspolitik", - "usb_whitelist": "Hvidlistede enheder (én pr. linje)", - "usb_whitelist_hint": "VID:PID (f.eks. 0781:5583)", - "usb_audit_log": "Log USB enhedsforbindelser", - "optical_title": "Kontrol af optisk drev", - "optical_hint": "Styr adgangen til CD/DVD/Blu-ray-drevet for den valgte enhed.", - "optical_policy": "Politik for optisk drev", - "optical_audit_log": "Log adgang til optisk drev", - "monitors_title": "Overvåg ledelse", - "monitors_hint": "Konfigurer skærmindstillinger, herunder maksimalt antal, opløsningshåndhævelse, lysstyrke og strømplaner.", - "monitors_max_count": "Maksimalt antal skærme (0 = ubegrænset)", - "monitors_max_hint": "0 betyder ingen grænse", - "monitors_resolution": "Max opløsning", - "monitors_brightness": "Lysstyrkegrænse", - "monitors_power_schedule": "Strømskema", - "monitors_power_hint": "f.eks. off: 22:00-06:00", - "disks_title": "Diskadgangskontrol", - "disks_hint": "Konfigurer diskadgangspolitikker, herunder skrivebeskyttet tilstand, håndhævelse af kryptering og partitionssynlighed.", - "disks_readonly": "Tving skrivebeskyttet tilstand", - "disks_encryption": "Kræv kryptering (BitLocker/LUKS)", - "disks_smart": "Aktiver S.M.A.R.T. overvågning", - "disks_hidden": "Skjulte partitioner", - "disks_hidden_hint": "Kommaseparerede drevbogstaver eller monteringspunkter", - "quotas_title": "Ressourcekvoter", - "quotas_hint": "Indstil CPU-, RAM-, båndbredde- og diskkvoter pr. bruger for den valgte enhed.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Båndbreddegrænse (Mbps)", - "quotas_bandwidth_hint": "0 = ubegrænset", - "quotas_disk_quota": "Diskkvote (GB)", - "quotas_disk_hint": "0 = ubegrænset", - "quotas_process_whitelist": "Proceshvidliste (én pr. linje)", - "quotas_process_hint": "f.eks. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Kun hvidliste", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Softwareopdateringer", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Installeret version", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Se efter opdateringer", - "checking": "Checking…", - "up_to_date": "Op til dato", - "update_available": "Opdatering tilgængelig", - "changelog": "Release Notes", - "no_changelog": "Ingen tilgængelige release notes", - "files_changed": "Filer ændret", - "files": "filer", - "changes_unavailable": "Kunne ikke indlæse filændringslisten. Du kan stadig installere opdateringen.", - "create_backup": "Opret backup før opdatering", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installerer opdatering...", - "creating_backup": "Opretter backup...", - "downloading": "Downloader filer...", - "install_success": "Opdateringen er installeret. Konsolen genstarter...", - "install_failed": "Installation af opdatering mislykkedes", - "restarting": "Venter på, at konsollen genstarter...", - "restart_complete": "Konsolen blev genstartet", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Der er ikke valgt nogen opdateringsversion. Tjek først for opdateringer.", - "backups_title": "Opdater sikkerhedskopier", - "backups_desc": "Forudgående opdatering af sikkerhedskopier oprettet automatisk før hver opdatering", - "no_backups": "Ingen opdateringssikkerhedskopier fundet", - "restore": "Restore", - "restore_confirm": "Er du sikker på, at du vil gendanne fra denne sikkerhedskopi? Ændrede filer vil blive overskrevet.", - "restore_success": "Sikkerhedskopien blev gendannet. Konsolen genstarter...", - "baseline_set": "Baseline sæt", - "commits_behind": "forpligter sig bag", - "total_files": "Samlede filer", - "applied": "Applied", - "failed": "Mislykkedes", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Gå til server", - "component_agent": "Agent", - "component_scripts": "Installationsscripts", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Kontrollerer Go...", - "go_not_found": "Gå ikke installeret", - "go_check_failed": "Kunne ikke kontrollere Go tilgængelighed", - "server_building": "Kompilerer Go server... Dette kan tage et par minutter.", - "server_built": "Server binær kompileret", - "server_build_failed": "Serverkompilering mislykkedes", - "server_stale_title": "Server binær forældet", - "server_stale_desc": "Go server-kilden blev opdateret, men den kørende binære fil blev ikke genopbygget. Genopbyg det nu for at anvende sikkerheds- og biblioteksopdateringer.", - "rebuild_server": "Genopbyg server binær", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Server binær genopbygget og genstartet", - "rebuild_server_failed": "Server binær genopbygning mislykkedes", - "server_deployed": "Server binært installeret", - "server_deploy_failed": "Serverimplementering mislykkedes", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Downloader serverkilde...", - "delete": "Slet", - "delete_confirm": "Vil du permanent slette backup {name}? Dette kan ikke fortrydes.", - "delete_success": "Backup slettet", - "delete_failed": "Kunne ikke slette backup", - "retention_label": "Behold N seneste sikkerhedskopier", - "retention_hint": "Ældre sikkerhedskopier slettes automatisk efter hver opdatering. Brug 0 for at beholde alle sikkerhedskopier.", - "retention_saved": "Opbevaringsindstillingen er gemt", - "retention_invalid": "Retention skal være et heltal mellem 0 og 1000", - "retention_required_for_prune": "Indstil først en retentionsværdi større end 0", - "prune_now": "Apply now", - "prune_confirm": "Behold kun {n} seneste sikkerhedskopier og slette resten?", - "prune_done": "Beskåret {n} backup(r)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Opdateringsmetode", - "strategy_download": "Download forudbygget binær", - "strategy_compile": "Kompiler fra kilden", - "both_available": "Download og kompilér", - "download_available": "Download tilgængelig", - "no_method": "Ingen opdateringsmetode", - "no_release": "No release", - "available": "Tilgængelig", - "server_downloading": "Downloader binær server...", - "server_downloaded": "Server binær downloadet", - "server_download_failed": "Server binær download mislykkedes", - "server_download_note": "En forudbygget binær vil blive downloadet fra GitHub-udgivelser. Dette tager normalt mindre end et minut.", - "install_go_hint": "Installer Go fra https://go.dev/dl/ for at aktivere kompilering, eller udgiv en udgivelse med forudbyggede binære filer", - "strategy_install_go": "Autoinstaller Go og kompilér", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Klar til automatisk genopbygning", - "toolchain_ready": "Værktøjskæde installeret", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Downloader Go værktøjskæde...", - "toolchain_failed": "Go toolchain installation mislykkedes", - "modal_title": "Installerer opdatering", - "modal_done_title": "Opdatering fuldført", - "modal_close": "Luk", - "modal_reload_now": "Genindlæs konsollen", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsol filer", - "phase_server": "Serverkomponent", - "phase_restart": "Genstart", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Backup sprunget over (efter brugervalg)", - "server_skipped": "Go server sprunget over", - "server_not_selected": "Go server not selected", - "server_processing": "Behandler Go server-opdatering...", - "no_restart_needed": "Ingen genstart nødvendig", - "complete": "Opdatering anvendt", - "complete_summary": "Opdateringen er blevet anvendt.", - "complete_with_errors": "Opdateringen blev afsluttet, men nogle trin mislykkedes. Se detaljer nedenfor.", - "modal_done_with_errors_title": "Opdatering afsluttet med fejl", - "console_will_restart": "Konsolprocessen genstartes nu...", - "restart_complete_msg": "Konsollen blev færdig med at genstarte. Klik på genindlæs for at indlæse den nye version. Siden genindlæses automatisk om 8 sekunder.", - "refresh_recommended": "Statiske aktiver ændret — genindlæs siden for at se den nye brugergrænseflade.", - "confirm_title": "Anvend opdatering", - "confirm_with_backup": "Der oprettes automatisk en sikkerhedskopi på forhånd.", - "confirm_no_backup": "Der oprettes ingen backup (fortsæt på eget ansvar)." - }, - "permissions": { - "title": "Tilladelser", - "subtitle": "Administrer rollebaserede tilladelser og tilpassede tilsidesættelser", - "info_title": "Sådan fungerer tilladelser", - "info_desc": "Hver rolle har standardtilladelser. Du kan tilføje eller fjerne individuelle tilladelser pr. rolle ved at skifte mellem dem nedenfor. Brugerdefinerede tilsidesættelser er fremhævet og kan til enhver tid vendes tilbage til standardindstillingerne.", - "select_role": "Vælg rolle", - "select_role_placeholder": "Vælg en rolle...", - "reset_overrides": "Nulstil alle tilsidesættelser", - "granted": "Tildelt", - "overrides": "Tilsidesættelser", - "level": "Niveau", - "super_admin_tag": "Fuld adgang", - "server_level_tag": "Server-niveau", - "custom": "Brugerdefineret", - "default": "Standard", - "revert": "Vend tilbage til standard", - "saved": "Tilladelsen er opdateret", - "reverted": "Gendannet til standard", - "all_reverted": "Alle tilsidesættelser er vendt tilbage", - "confirm_reset": "Vil du nulstille alle tilpassede tilsidesættelser for denne rolle til standardindstillingerne?", - "empty_title": "Vælg en rolle", - "empty_desc": "Vælg en rolle fra rullemenuen ovenfor for at se og administrere dens tilladelser.", - "locked_title": "Superadministrator", - "locked_desc": "Super Admin har alle tilladelser som standard og kan ikke tilpasses.", - "cat_device": "Enheder", - "cat_user": "Brugere", - "cat_server": "Serversystem", - "cat_org": "Organisationer", - "cat_audit": "Revision & Overvågning", - "cat_cdap": "CDAP", - "cat_enrollment": "Tilmelding", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Se enheder", - "perm_device_connect": "Opret forbindelse til enheder", - "perm_device_edit": "Rediger enheder", - "perm_device_delete": "Slet enheder", - "perm_device_ban": "Forbyd/ophæv forbud mod enheder", - "perm_device_change_id": "Skift enheds-id", - "perm_user_view": "Se brugere", - "perm_user_create": "Opret brugere", - "perm_user_edit": "Rediger brugere", - "perm_user_delete": "Slet brugere", - "perm_server_config": "Server konfiguration", - "perm_server_keys": "Administrer API nøgler", - "perm_org_create": "Skab organisationer", - "perm_org_edit": "Rediger organisationer", - "perm_org_delete": "Slet organisationer", - "perm_org_manage_users": "Administrer organisationens brugere", - "perm_org_manage_devices": "Administrer organisationsenheder", - "perm_audit_view": "Se revisionslogfiler", - "perm_metrics_view": "Se metrics", - "perm_blocklist_edit": "Rediger blokeringsliste", - "perm_cdap_view": "Se CDAP-enheder", - "perm_cdap_command": "Send CDAP-kommandoer", - "perm_cdap_terminal": "CDAP terminaladgang", - "perm_cdap_files": "CDAP filadgang", - "perm_enrollment_manage": "Administrer tilmelding", - "perm_enrollment_approve": "Godkend tilmelding", - "perm_chat_access": "Chatadgang", - "perm_branding_edit": "Rediger branding", - "perm_server_attestation": "Serverydelsesattest" - }, - "notifications": { - "title": "Meddelelser", - "empty": "Ingen nye meddelelser", - "mark_all_read": "Marker alt som læst", - "see_all": "Se alle anmodninger om hjælp", - "help_request": "Hjælp anmodning", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Juster konsollen til dine syns-, bevægelses- og læsebehov.", - "close": "Luk tilgængelighedsmenu", - "profiles": "Hurtige profiler", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Større tekst, stærk kontrast og fokus.", - "profile_dyslexia": "Læsekomfort", - "profile_dyslexia_hint": "Læsbar skrifttype og bredere mellemrum.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reducerer overgange og sætter animation på pause.", - "profile_color_assist": "Farvestøtte", - "profile_color_assist_hint": "Farvefilter, etiketter og fremhævede links.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Bogstavafstand", - "word_spacing": "Ordafstand", - "readable_font": "Læsbar skrifttype", - "readable_font_hint": "Bruger brede, velkendte bogstavformer.", - "dyslexia_spacing": "Ordblindhedsafstand", - "dyslexia_spacing_hint": "Tilføjer ekstra mellemrum til lang tekst.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Høj kontrast mørk", - "contrast_high_light": "Lys med høj kontrast", - "contrast_yellow_black": "Gul på sort", - "color_filter": "Farvesynsfilter", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Farvemætning", - "underline_links": "Understreg links", - "underline_links_hint": "Gør links synlige uden at være afhængig af farve.", - "highlight_links": "Fremhæv handlinger", - "highlight_links_hint": "Skitserer links og knapper.", - "highlight_headings": "Fremhæv overskrifter", - "highlight_headings_hint": "Markerer afsnitstitler med en farvebjælke.", - "hide_media": "Dim media", - "hide_media_hint": "Dæmper billeder, videoer og lærreder.", - "interaction": "Interaction", - "strong_focus": "Stærkt fokus", - "strong_focus_hint": "Viser en stor tastaturfokusring.", - "large_cursor": "Stor markør", - "large_cursor_hint": "Bruger en større højkontrastmarkør.", - "reduce_motion": "Reducer bevægelse", - "reduce_motion_hint": "Forkorter overgange og jævn rulning.", - "pause_animations": "Sæt animationer på pause", - "pause_animations_hint": "Stopper visuelle bevægelser i sløjfer.", - "reading_guide": "Læsevejledning", - "reading_guide_hint": "Følger markøren med en lys linje.", - "reading_mask": "Læsemaske", - "reading_mask_hint": "Dæmper indholdet over og under markøren.", - "preview": "Preview", - "preview_title": "Forhåndsvisning af operatørens arbejdsområde", - "preview_text": "Tjek, om tekst, links, kontroller og statusetiketter er behagelige at læse, før du lukker denne menu.", - "preview_link": "Link til enhedsdetaljer", - "preview_status": "Online", - "preview_button": "Primær handling", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Serveradministration", - "subtitle": "Cockpit-lignende kontrolplan til BetterDesk-konsolværten (BETA).", - "beta_tooltip": "Beta-funktion — under aktiv udvikling.", - "notice_title": "Beta funktion", - "notice_body": "Disse værktøjer kører på værten, hvor BetterDesk-konsolprocessen lever. Alle operationer er revideret. Funktionsomfanget udvides i fremtidige udgivelser.", - "tab_overview": "Oversigt", - "tab_terminal": "Terminal", - "tab_files": "Filer", - "tab_services": "Tjenester", - "cpu": "CPU", - "memory": "Hukommelse", - "load": "Belastningsgennemsnit", - "disks": "Diske", - "history": "Historik (sidste 60 prøver)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Oppetid", - "no_disks": "Ingen diskdata tilgængelige", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY tilgængelig", - "term_connect": "Forbind", - "term_disconnect": "Afbryd", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Forbindelsesfejl", - "term_warning": "Kommandoer kører som den bruger, der ejer konsolprocessen. Tilføj en sudoers-regel for at aktivere elevation.", - "term_hint": "Tip: skriv `sudo -i` for at eskalere (kræver sudoers-konfiguration).", - "term_lib_failed": "Terminalbiblioteket kunne ikke indlæses", - "files_up": "Et niveau op", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Tom mappe", - "files_error": "Biblioteket kunne ikke vises", - "read_failed": "Filen kunne ikke læses", - "save_failed": "Filen kunne ikke gemmes", - "rename_failed": "Omdøbning mislykkedes", - "delete_failed": "Sletning mislykkedes", - "delete_confirm": "Vil du slette denne post?", - "mkdir_prompt": "Nyt mappenavn:", - "mkdir_failed": "Kunne ikke oprette mappe", - "file_saved": "Filen er gemt", - "binary_warn": "Binær fil - kun forhåndsvisning", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Søgetjenester...", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Ingen tjenester fundet", - "svc_load_failed": "Kunne ikke indlæse tjenester", - "svc_action_failed": "Handlingen mislykkedes", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Genstart", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Download BetterDesk-agent", - "choose_platform": "Vælg din platform", - "choose_platform_hint": "Vælg det installationsprogram, der matcher dit operativsystem.", - "download": "Download", - "building": "Bygning…", - "failed": "Byg mislykkedes", - "need_help": "Har du brug for hjælp?", - "powered_by": "Drevet af" - }, - "server_attestation": { - "title": "Serverattest", - "subtitle": "Ydelsesbenchmark der fastlægger kapacitet for samtidige fjernforbindelser ved 80 % CPU-, RAM- og disktærskel.", - "warning_title": "Belastningstest", - "warning_body": "Benchmarket simulerer parallelle WebSocket-forbindelser til signal- og relayserverne. Kør uden for spidsbelastningstimer — testen belaster produktionen.", - "run_benchmark": "Kør benchmark", - "abort": "Afbryd", - "download_report": "Download JSON-rapport", - "last_test": "Seneste test", - "no_test_yet": "Der er ikke kørt noget benchmark endnu", - "max_connections": "Maks. forbindelser", - "threshold_80": "80 % tærskel — endelige målinger", - "disk": "Disk", - "ramp_chart": "Belastningsrampediagram", - "connections": "Forbindelser", - "connections_short": "forb.", - "tier_guide_title": "Hvad betyder hvert niveau?", - "tier_bronze": "BRONZE", - "tier_iron": "JERN", - "tier_titanium": "TITAN", - "tier_platinum": "PLATIN", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UVURDERET", - "tier_bronze_desc": "1–25 samtidige forbindelser — lille VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 forbindelser — midterklasse-server (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 forbindelser — højydelsesserver (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 forbindelser — virksomhedsinfrastruktur (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ forbindelser — turboklasse: dedikeret hardware, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Bemærk: I Docker kan CPU/RAM-målinger afspejle containerbegrænsninger frem for den fysiske vært.", - "badge_tooltip": "BetterDesk Serverattest — serverydelsescertificering", - "confirm_run": "Dette benchmark belastningstester serveren med simulerede forbindelser. Fortsæt?", - "starting": "Starter...", - "complete": "Benchmark afsluttet", - "signal_peers": "Signalpeers", - "relay_sessions": "Relaysessioner", - "page_error": "Kunne ikke indlæse Serverattest-siden", - "mode_estimated": "Estimeret (WebSocket utilgængeligt)", - "incomplete": "Benchmark afsluttet uden et gyldigt niveau" + "form": { + "cancel": "Annuller" } + } } diff --git a/web-nodejs/lang/de.json b/web-nodejs/lang/de.json index 91d39aaf..bd14b6ff 100644 --- a/web-nodejs/lang/de.json +++ b/web-nodejs/lang/de.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "de", - "name": "German", - "native_name": "Deutsch", - "direction": "ltr" + "meta": { + "lang": "de", + "name": "German", + "native_name": "Deutsch", + "direction": "ltr" + }, + "common": { + "loading": "Laden...", + "confirm": "Bestätigen", + "alert": "Warnung", + "prompt": "Wert eingeben", + "copied": "In die Zwischenablage kopiert", + "save": "Speichern", + "saved": "Gespeichert", + "error": "Fehler", + "success": "Erfolg", + "warning": "Warnung", + "info": "Informationen", + "all": "All", + "cancel": "Abbrechen", + "delete": "Löschen", + "actions": "Aktionen", + "close": "Schließen", + "required": "Erforderlich", + "name_required": "Name ist erforderlich", + "active": "Active", + "inactive": "Inaktiv", + "invalid_json": "Ungültiges JSON", + "field_required": "{field} ist erforderlich", + "back": "Zurück", + "edit": "Bearbeiten", + "yes": "Ja", + "no": "Nein" + }, + "nav": { + "main": "Hauptmenü", + "tools": "Werkzeuge", + "system": "System", + "dashboard": "Übersicht", + "devices": "Geräte", + "keys": "Schlüssel", + "generator": "Generator", + "settings": "Einstellungen", + "users": "Benutzer", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Hilfeanfragen", + "activity": "Activity", + "automation": "Automatisierung", + "file_transfer": "Dateiübertragung", + "network": "Network Adapters", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrierungen", + "management": "Verwaltung", + "toggle_sidebar": "Seitenleiste umschalten", + "toggle_theme": "Thema wechseln", + "cdap": "CDAP", + "fleet": "Flotte", + "scaling": "Skalierung", + "cross_platform": "Cross-Platform", + "tokens": "Zugriffstokens", + "organizations": "Organisationen", + "policies": "Richtlinien", + "attestation": "Attestierung", + "remote": "Fernzugriff", + "toolkit": "Toolkit", + "security_audit": "Sicherheitsprüfung", + "languages": "Sprachen", + "resource_control": "Ressourcenkontrolle", + "sdk_studio": "SDK Studio", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "Seitenleiste erweitern", + "login": "Anmelden", + "permissions": "Berechtigungen", + "server_management": "Server-Verwaltung", + "server_attestation": "Server-Attestierung", + "commercialization": "Kommerzialisierung" + }, + "auth": { + "login": "Anmelden", + "logout": "Abmelden", + "login_title": "Anmelden", + "login_subtitle": "Anmelden bei BetterDesk Console", + "username": "Benutzername", + "username_placeholder": "Benutzername eingeben", + "password": "Passwort", + "password_placeholder": "Passwort eingeben", + "remember_me": "Angemeldet bleiben", + "login_failed": "Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldedaten.", + "invalid_credentials": "Ungültiger Benutzername oder Passwort.", + "username_collision": "Ein lokales Konto mit diesem Benutzernamen existiert bereits. Melden Sie sich mit Ihrem lokalen Passwort an, oder bitten Sie einen Administrator, das kollidierende Konto umzubenennen oder zu entfernen.", + "pro_only_account": "Dieses Konto ist nur fuer den RustDesk-Desktopclient vorgesehen. Bitte verwenden Sie die RustDesk-App zum Anmelden.", + "fill_all_fields": "Bitte füllen Sie alle Felder aus", + "logout_confirm": "Sind Sie sicher, dass Sie sich abmelden möchten?", + "change_password": "Passwort ändern", + "password_required": "Passwort ist erforderlich", + "totp_title": "Zwei-Faktor-Authentifizierung", + "totp_subtitle": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", + "totp_code": "Bestätigungscode", + "totp_verify": "Bestätigen", + "totp_use_recovery": "Stattdessen einen Wiederherstellungscode verwenden", + "totp_use_code": "Stattdessen Authenticator-Code verwenden", + "totp_recovery_code": "Wiederherstellungscode", + "totp_back_to_login": "Zurück zur Anmeldung", + "totp_invalid_code": "Ungültiger Bestätigungscode. Bitte versuchen Sie es erneut.", + "totp_enter_code": "Bitte geben Sie einen 6-stelligen Code ein", + "totp_enter_recovery": "Bitte geben Sie einen Wiederherstellungscode ein", + "totp_session_expired": "Sitzung abgelaufen. Bitte melden Sie sich erneut an.", + "totp_already_enabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert", + "passwords_mismatch": "Passwörter stimmen nicht überein", + "or": "oder", + "login_sso": "Mit SSO anmelden", + "login_sso_with": "Mit {{provider}} anmelden", + "oidc_denied": "Der Zugriff wurde vom Identitätsanbieter verweigert.", + "oidc_invalid": "Ungültiger OIDC-Rückruf. Bitte versuchen Sie es erneut.", + "oidc_failed": "OIDC-Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.", + "oidc_error": "Beim SSO-Anmelden ist ein Fehler aufgetreten.", + "oidc_no_account": "Ihr Konto wurde nicht gefunden und die automatische Registrierung ist deaktiviert.", + "totp_rate_limited": "Zu viele Versuche. Bitte versuchen Sie es später erneut.", + "emergency_mode_banner": "Go-Server nicht erreichbar — Notfallmodus aktiv (nur Admin, eingeschränkte Funktionalität)" + }, + "dashboard": { + "title": "Übersicht", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "total_devices": "Geräte gesamt", + "online_now": "Jetzt online", + "banned": "Gesperrt", + "active_connections": "Aktive Verbindungen", + "offline_devices": "Offline", + "server_status": "Serverstatus", + "quick_actions": "Schnellaktionen", + "manage_devices": "Verbundene Geräte verwalten", + "view_keys": "Serverschlüssel anzeigen", + "generate_config": "Client-Konfiguration generieren", + "server_settings": "Einstellungen konfigurieren", + "greeting_morning": "Guten Morgen, {name}", + "greeting_afternoon": "Guten Tag, {name}", + "greeting_evening": "Guten Abend, {name}", + "greeting_night": "Gute Nacht, {name}", + "health_overview": "Gesundheitsübersicht", + "devices_online": "Geräte online", + "active_alerts": "Aktive Warnungen", + "recent_connections": "Gesamtgeräte", + "server_uptime": "Serverlaufzeit", + "activity_feed": "Letzte Aktivität", + "no_recent_activity": "Keine kürzliche Aktivität", + "just_now": "gerade eben", + "ago": "vor", + "tip_desktop_mode": "Probieren Sie den Desktop-Modus fuer einen Arbeitsbereich mit mehreren Fenstern und Monitoring-Widgets aus.", + "tip_keyboard_shortcuts": "Druecken Sie irgendwo Ctrl+K, um die Schnellbefehls-Palette zu oeffnen.", + "tip_address_book": "Synchronisieren Sie Ihr Adressbuch geraeteuebergreifend, indem Sie sich ueber den RustDesk-Client anmelden.", + "tip_2fa": "Aktivieren Sie die Zwei-Faktor-Authentifizierung in den Einstellungen fuer mehr Kontosicherheit.", + "tip_bulk_actions": "Waehlen Sie mehrere Geraete aus und verwalten Sie sie gleichzeitig mit Sammelaktionen.", + "tip_theme": "Wechseln Sie in den Seitenleisteneinstellungen zwischen dunklem und hellem Design.", + "tip_cdap": "Verbinden Sie IoT-Geraete und Industriesensoren ueber das CDAP-Gateway.", + "tip_tutorials": "Klicken Sie unten rechts auf die Hilfeschaltflaeche fuer interaktive Anleitungen." + }, + "devices": { + "title": "Dashboard", + "id": "ID", + "hostname": "Hostname", + "username": "Benutzername", + "platform": "Plattform", + "version": "Version", + "ip_address": "IP-Adresse", + "note": "Notiz", + "last_seen": "Zuletzt gesehen", + "last_online": "Zuletzt online", + "first_seen": "Erstmals gesehen", + "created": "Erstellt", + "status": "Status", + "ban_reason": "Sperrgrund", + "actions": "Aktionen", + "search_placeholder": "Geräte suchen...", + "filter_all": "Alle", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Gesperrt", + "selected": "ausgewählt", + "showing": "Anzeige", + "of": "von", + "sync_status": "Synchronisierungsstatus", + "sync_success": "Status erfolgreich synchronisiert", + "empty_title": "Keine Geräte gefunden", + "empty_text": "Keine Geräte entsprechen Ihren aktuellen Filtern", + "edit_title": "Gerätedetails", + "delete_title": "Gerät löschen", + "delete_confirm": "Sind Sie sicher, dass Sie Gerät {id} löschen möchten?", + "delete_warning": "Sie sind dabei, dieses Gerät dauerhaft zu löschen:", + "delete_permanent": "Diese Aktion kann nicht rückgängig gemacht werden. Alle mit diesem Gerät verknüpften Daten werden dauerhaft aus der Datenbank entfernt.", + "delete_success": "Gerät erfolgreich gelöscht", + "revoke_option": "Gerät widerrufen", + "revoke_hint": "Gerät blockieren und aktive Verbindungen trennen", + "revoke_success": "Gerät erfolgreich widerrufen", + "details": "Gerätedetails", + "ban_title": "Gerät sperren", + "ban_confirm": "Sind Sie sicher, dass Sie Gerät {id} sperren möchten?", + "ban_success": "Gerät erfolgreich gesperrt", + "unban_title": "Gerät entsperren", + "unban_confirm": "Sind Sie sicher, dass Sie Gerät {id} entsperren möchten?", + "unban_success": "Gerät erfolgreich entsperrt", + "change_id": "ID ändern", + "change_id_title": "Geräte-ID ändern", + "new_id": "Neue ID", + "change_id_hint": "6-16 Zeichen, nur Buchstaben, Zahlen, Bindestriche und Unterstriche", + "change_id_success": "Geräte-ID erfolgreich geändert", + "id_length_error": "ID muss 6-16 Zeichen lang sein", + "id_format_error": "ID darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten", + "bulk_delete_title": "Mehrere Geräte löschen", + "bulk_delete_confirm": "Sind Sie sicher, dass Sie {count} Geräte löschen möchten?", + "bulk_delete_success": "{count} Geräte erfolgreich gelöscht", + "columns": "Spalten", + "toggle_columns": "Sichtbare Spalten umschalten", + "not_found": "Gerät nicht gefunden", + "delete_failed": "Gerät konnte nicht gelöscht werden", + "change_id_failed": "Geräte-ID konnte nicht geändert werden", + "invalid_id": "Ungültige Geräte-ID", + "invalid_id_format": "Ungültiges ID-Format", + "id_exists": "Diese Geräte-ID ist bereits vorhanden", + "no_selection": "Keine Geräte ausgewählt", + "device_type": "Gerätetyp", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Widerrufen", + "access_policy": "Zugriffsrichtlinie", + "unattended_access": "Unbeaufsichtigter Zugriff", + "enable_unattended": "Unbeaufsichtigten Zugriff aktivieren", + "access_password": "Zugriffspasswort", + "password_configured": "Passwort konfiguriert", + "no_password": "Kein Passwort festgelegt", + "new_password": "Neues Passwort", + "clear_password": "Passwort löschen", + "access_schedule": "Zugriffszeitplan", + "enable_schedule": "Zeitplan aktivieren", + "allowed_days": "Zugelassene Tage", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Zugelassene Operatoren", + "all_operators": "Alle Operatoren", + "operators_hint": "Leer lassen, um allen Operatoren Zugriff zu erlauben.", + "last_updated_by": "Zuletzt aktualisiert von", + "access_policy_saved": "Zugriffsrichtlinie gespeichert", + "display_name": "Anzeigename", + "display_name_placeholder": "Anzeigenamen eingeben...", + "note_placeholder": "Notiz eingeben...", + "tabs": { + "overview": "Übersicht", + "hardware": "Hardware", + "metrics": "Metriken", + "connections": "Verbindungen", + "audit": "Audit", + "info": "Informationen", + "history": "Verlauf" }, - "common": { - "loading": "Laden...", - "confirm": "Bestätigen", - "alert": "Warnung", - "prompt": "Wert eingeben", - "copied": "In die Zwischenablage kopiert", - "save": "Speichern", - "saved": "Gespeichert", - "error": "Fehler", - "success": "Erfolg", - "warning": "Warnung", - "info": "Informationen", - "all": "All", - "cancel": "Abbrechen", - "delete": "Löschen", - "actions": "Aktionen", - "close": "Schließen", - "required": "Erforderlich", - "name_required": "Name ist erforderlich", - "active": "Active", - "inactive": "Inaktiv", - "invalid_json": "Ungültiges JSON", - "field_required": "{field} ist erforderlich", - "back": "Zurück", - "edit": "Bearbeiten", - "yes": "Ja", - "no": "Nein" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Durchschnittslast", + "network": "Netzwerk", + "no_data": "Keine Hardwaredaten verfügbar", + "title": "Dashboard", + "gpu": "Graphics Card" }, - "nav": { - "main": "Hauptmenü", - "tools": "Werkzeuge", - "system": "System", - "dashboard": "Übersicht", - "devices": "Geräte", - "keys": "Schlüssel", - "generator": "Generator", - "settings": "Einstellungen", - "users": "Benutzer", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Hilfeanfragen", - "activity": "Activity", - "automation": "Automatisierung", - "file_transfer": "Dateiübertragung", - "network": "Network Adapters", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrierungen", - "management": "Verwaltung", - "toggle_sidebar": "Seitenleiste umschalten", - "toggle_theme": "Thema wechseln", - "cdap": "CDAP", - "fleet": "Flotte", - "scaling": "Skalierung", - "cross_platform": "Cross-Platform", - "tokens": "Zugriffstokens", - "organizations": "Organisationen", - "policies": "Richtlinien", - "attestation": "Attestierung", - "remote": "Fernzugriff", - "toolkit": "Toolkit", - "security_audit": "Sicherheitsprüfung", - "languages": "Sprachen", - "resource_control": "Ressourcenkontrolle", - "sdk_studio": "SDK Studio", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "Seitenleiste erweitern", - "login": "Anmelden", - "permissions": "Berechtigungen", - "server_management": "Server-Verwaltung", - "server_attestation": "Server-Attestierung" - }, - "auth": { - "login": "Anmelden", - "logout": "Abmelden", - "login_title": "Anmelden", - "login_subtitle": "Anmelden bei BetterDesk Console", - "username": "Benutzername", - "username_placeholder": "Benutzername eingeben", - "password": "Passwort", - "password_placeholder": "Passwort eingeben", - "remember_me": "Angemeldet bleiben", - "login_failed": "Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldedaten.", - "invalid_credentials": "Ungültiger Benutzername oder Passwort.", - "username_collision": "Ein lokales Konto mit diesem Benutzernamen existiert bereits. Melden Sie sich mit Ihrem lokalen Passwort an, oder bitten Sie einen Administrator, das kollidierende Konto umzubenennen oder zu entfernen.", - "pro_only_account": "Dieses Konto ist nur fuer den RustDesk-Desktopclient vorgesehen. Bitte verwenden Sie die RustDesk-App zum Anmelden.", - "fill_all_fields": "Bitte füllen Sie alle Felder aus", - "logout_confirm": "Sind Sie sicher, dass Sie sich abmelden möchten?", - "change_password": "Passwort ändern", - "password_required": "Passwort ist erforderlich", - "totp_title": "Zwei-Faktor-Authentifizierung", - "totp_subtitle": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", - "totp_code": "Bestätigungscode", - "totp_verify": "Bestätigen", - "totp_use_recovery": "Stattdessen einen Wiederherstellungscode verwenden", - "totp_use_code": "Stattdessen Authenticator-Code verwenden", - "totp_recovery_code": "Wiederherstellungscode", - "totp_back_to_login": "Zurück zur Anmeldung", - "totp_invalid_code": "Ungültiger Bestätigungscode. Bitte versuchen Sie es erneut.", - "totp_enter_code": "Bitte geben Sie einen 6-stelligen Code ein", - "totp_enter_recovery": "Bitte geben Sie einen Wiederherstellungscode ein", - "totp_session_expired": "Sitzung abgelaufen. Bitte melden Sie sich erneut an.", - "totp_already_enabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert", - "passwords_mismatch": "Passwörter stimmen nicht überein", - "or": "oder", - "login_sso": "Mit SSO anmelden", - "login_sso_with": "Mit {{provider}} anmelden", - "oidc_denied": "Der Zugriff wurde vom Identitätsanbieter verweigert.", - "oidc_invalid": "Ungültiger OIDC-Rückruf. Bitte versuchen Sie es erneut.", - "oidc_failed": "OIDC-Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.", - "oidc_error": "Beim SSO-Anmelden ist ein Fehler aufgetreten.", - "oidc_no_account": "Ihr Konto wurde nicht gefunden und die automatische Registrierung ist deaktiviert.", - "totp_rate_limited": "Zu viele Versuche. Bitte versuchen Sie es später erneut.", - "emergency_mode_banner": "Go-Server nicht erreichbar — Notfallmodus aktiv (nur Admin, eingeschränkte Funktionalität)" - }, - "dashboard": { - "title": "Übersicht", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "total_devices": "Geräte gesamt", - "online_now": "Jetzt online", - "banned": "Gesperrt", - "active_connections": "Aktive Verbindungen", - "offline_devices": "Offline", - "server_status": "Serverstatus", - "quick_actions": "Schnellaktionen", - "manage_devices": "Verbundene Geräte verwalten", - "view_keys": "Serverschlüssel anzeigen", - "generate_config": "Client-Konfiguration generieren", - "server_settings": "Einstellungen konfigurieren", - "greeting_morning": "Guten Morgen, {name}", - "greeting_afternoon": "Guten Tag, {name}", - "greeting_evening": "Guten Abend, {name}", - "greeting_night": "Gute Nacht, {name}", - "health_overview": "Gesundheitsübersicht", - "devices_online": "Geräte online", - "active_alerts": "Aktive Warnungen", - "recent_connections": "Gesamtgeräte", - "server_uptime": "Serverlaufzeit", - "activity_feed": "Letzte Aktivität", - "no_recent_activity": "Keine kürzliche Aktivität", - "just_now": "gerade eben", - "ago": "vor", - "tip_desktop_mode": "Probieren Sie den Desktop-Modus fuer einen Arbeitsbereich mit mehreren Fenstern und Monitoring-Widgets aus.", - "tip_keyboard_shortcuts": "Druecken Sie irgendwo Ctrl+K, um die Schnellbefehls-Palette zu oeffnen.", - "tip_address_book": "Synchronisieren Sie Ihr Adressbuch geraeteuebergreifend, indem Sie sich ueber den RustDesk-Client anmelden.", - "tip_2fa": "Aktivieren Sie die Zwei-Faktor-Authentifizierung in den Einstellungen fuer mehr Kontosicherheit.", - "tip_bulk_actions": "Waehlen Sie mehrere Geraete aus und verwalten Sie sie gleichzeitig mit Sammelaktionen.", - "tip_theme": "Wechseln Sie in den Seitenleisteneinstellungen zwischen dunklem und hellem Design.", - "tip_cdap": "Verbinden Sie IoT-Geraete und Industriesensoren ueber das CDAP-Gateway.", - "tip_tutorials": "Klicken Sie unten rechts auf die Hilfeschaltflaeche fuer interaktive Anleitungen." - }, - "devices": { - "title": "Dashboard", - "id": "ID", - "hostname": "Hostname", - "username": "Benutzername", - "platform": "Plattform", - "version": "Version", - "ip_address": "IP-Adresse", - "note": "Notiz", - "last_seen": "Zuletzt gesehen", - "last_online": "Zuletzt online", - "first_seen": "Erstmals gesehen", - "created": "Erstellt", - "status": "Status", - "ban_reason": "Sperrgrund", - "actions": "Aktionen", - "search_placeholder": "Geräte suchen...", - "filter_all": "Alle", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Gesperrt", - "selected": "ausgewählt", - "showing": "Anzeige", - "of": "von", - "sync_status": "Synchronisierungsstatus", - "sync_success": "Status erfolgreich synchronisiert", - "empty_title": "Keine Geräte gefunden", - "empty_text": "Keine Geräte entsprechen Ihren aktuellen Filtern", - "edit_title": "Gerätedetails", - "delete_title": "Gerät löschen", - "delete_confirm": "Sind Sie sicher, dass Sie Gerät {id} löschen möchten?", - "delete_warning": "Sie sind dabei, dieses Gerät dauerhaft zu löschen:", - "delete_permanent": "Diese Aktion kann nicht rückgängig gemacht werden. Alle mit diesem Gerät verknüpften Daten werden dauerhaft aus der Datenbank entfernt.", - "delete_success": "Gerät erfolgreich gelöscht", - "revoke_option": "Gerät widerrufen", - "revoke_hint": "Gerät blockieren und aktive Verbindungen trennen", - "revoke_success": "Gerät erfolgreich widerrufen", - "details": "Gerätedetails", - "ban_title": "Gerät sperren", - "ban_confirm": "Sind Sie sicher, dass Sie Gerät {id} sperren möchten?", - "ban_success": "Gerät erfolgreich gesperrt", - "unban_title": "Gerät entsperren", - "unban_confirm": "Sind Sie sicher, dass Sie Gerät {id} entsperren möchten?", - "unban_success": "Gerät erfolgreich entsperrt", - "change_id": "ID ändern", - "change_id_title": "Geräte-ID ändern", - "new_id": "Neue ID", - "change_id_hint": "6-16 Zeichen, nur Buchstaben, Zahlen, Bindestriche und Unterstriche", - "change_id_success": "Geräte-ID erfolgreich geändert", - "id_length_error": "ID muss 6-16 Zeichen lang sein", - "id_format_error": "ID darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten", - "bulk_delete_title": "Mehrere Geräte löschen", - "bulk_delete_confirm": "Sind Sie sicher, dass Sie {count} Geräte löschen möchten?", - "bulk_delete_success": "{count} Geräte erfolgreich gelöscht", - "columns": "Spalten", - "toggle_columns": "Sichtbare Spalten umschalten", - "not_found": "Gerät nicht gefunden", - "delete_failed": "Gerät konnte nicht gelöscht werden", - "change_id_failed": "Geräte-ID konnte nicht geändert werden", - "invalid_id": "Ungültige Geräte-ID", - "invalid_id_format": "Ungültiges ID-Format", - "id_exists": "Diese Geräte-ID ist bereits vorhanden", - "no_selection": "Keine Geräte ausgewählt", - "device_type": "Gerätetyp", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Widerrufen", - "access_policy": "Zugriffsrichtlinie", - "unattended_access": "Unbeaufsichtigter Zugriff", - "enable_unattended": "Unbeaufsichtigten Zugriff aktivieren", - "access_password": "Zugriffspasswort", - "password_configured": "Passwort konfiguriert", - "no_password": "Kein Passwort festgelegt", - "new_password": "Neues Passwort", - "clear_password": "Passwort löschen", - "access_schedule": "Zugriffszeitplan", - "enable_schedule": "Zeitplan aktivieren", - "allowed_days": "Zugelassene Tage", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Zugelassene Operatoren", - "all_operators": "Alle Operatoren", - "operators_hint": "Leer lassen, um allen Operatoren Zugriff zu erlauben.", - "last_updated_by": "Zuletzt aktualisiert von", - "access_policy_saved": "Zugriffsrichtlinie gespeichert", - "display_name": "Anzeigename", - "display_name_placeholder": "Anzeigenamen eingeben...", - "note_placeholder": "Notiz eingeben...", - "tabs": { - "overview": "Übersicht", - "hardware": "Hardware", - "metrics": "Metriken", - "connections": "Verbindungen", - "audit": "Audit", - "info": "Informationen", - "history": "Verlauf" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Durchschnittslast", - "network": "Netzwerk", - "no_data": "Keine Hardwaredaten verfügbar", - "title": "Dashboard", - "gpu": "Graphics Card" - }, - "tags": "Tags", - "filter_by_tags": "Nach Tags filtern", - "no_tags": "No tags", - "all_groups": "Alle Gruppen", - "create_group": "Gruppe erstellen", - "manage_groups": "Gruppen verwalten", - "group_name": "Gruppenname", - "group_name_placeholder": "z. B. Medien-PCs", - "dynamic_group": "Dynamische Gruppe aus Tag", - "dynamic_group_hint": "Geräte mit diesem Tag treten automatisch bei.", - "tag_filter": "Tag filter", - "group_allowed_users": "Zugelassene Benutzer", - "group_allowed_users_hint": "Leer lassen, damit die Gruppe für alle mit Geräteberechtigungen sichtbar bleibt.", - "group_tag_required": "Tag-Filter ist für dynamische Gruppen erforderlich", - "group_invalid": "Ungültige Gruppenkennung", - "group_not_found": "Gruppe nicht gefunden", - "group_saved": "Gerätegruppe gespeichert", - "groups_saved": "Gerätegruppen gespeichert", + "tags": "Tags", + "filter_by_tags": "Nach Tags filtern", + "no_tags": "No tags", + "all_groups": "Alle Gruppen", + "create_group": "Gruppe erstellen", + "manage_groups": "Gruppen verwalten", + "group_name": "Gruppenname", + "group_name_placeholder": "z. B. Medien-PCs", + "dynamic_group": "Dynamische Gruppe aus Tag", + "dynamic_group_hint": "Geräte mit diesem Tag treten automatisch bei.", + "tag_filter": "Tag filter", + "group_allowed_users": "Zugelassene Benutzer", + "group_allowed_users_hint": "Leer lassen, damit die Gruppe für alle mit Geräteberechtigungen sichtbar bleibt.", + "group_tag_required": "Tag-Filter ist für dynamische Gruppen erforderlich", + "group_invalid": "Ungültige Gruppenkennung", + "group_not_found": "Gruppe nicht gefunden", + "group_saved": "Gerätegruppe gespeichert", + "groups_saved": "Gerätegruppen gespeichert", "group_membership_added": "Zur Gruppe hinzugefügt", "group_membership_removed": "Aus Gruppe entfernt", - "no_groups": "Noch keine Gruppen", - "manual_groups": "Manuelle Gruppen", - "dynamic_memberships": "Dynamische Mitgliedschaften", - "group_allowed_user_groups": "Zugelassene Benutzergruppen", - "group_allowed_user_groups_hint": "Benutzer in ausgewählten Benutzergruppen können auf diese Gerätegruppe zugreifen.", - "no_user_groups": "Keine Benutzergruppen", - "edit_group": "Gruppe bearbeiten", - "delete_group": "Gruppe löschen", - "delete_group_confirm": "Gerätegruppe {name} löschen?", - "group_deleted": "Gerätegruppe gelöscht", - "folder_group_readonly": "Ordnerbasierte Gruppen werden über Ordner verwaltet.", - "manage_user_groups": "Benutzergruppen verwalten", - "restore_failed": "Gerät konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Der Client hat kürzlich die API kontaktiert, ist aber nicht auf dem Signalserver registriert (UDP :21116). Starten Sie den Client nach der Servermigration neu.", - "per_page": "Pro Seite" - }, - "keys": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "public_key": "Öffentlicher Schlüssel", - "qr_code": "QR-Code", - "server_info": "Serverinformationen", - "download": "Schlüssel herunterladen", - "show_qr": "QR anzeigen", - "qr_hint": "Scannen Sie diesen QR-Code mit der RustDesk-Mobilapp", - "no_key": "Kein öffentlicher Schlüssel gefunden", - "no_key_to_copy": "Kein Schlüssel zum Kopieren", - "no_qr": "QR-Code nicht verfügbar", - "download_success": "Schlüsseldatei heruntergeladen", - "not_found": "Device not found", - "api_not_found": "API-Schlüssel nicht gefunden" - }, - "settings": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "tab_general": "Allgemein", - "tab_server": "Servereinstellungen", - "tab_branding": "Branding", - "tab_backup": "Sicherung", - "language": "Sprache", - "change_password": "Passwort ändern", - "password_desc": "Aktualisieren Sie Ihr Kontopasswort", - "current_password": "Aktuelles Passwort", - "new_password": "Neues Passwort", - "confirm_password": "Passwort bestätigen", - "save_password": "Passwort aktualisieren", - "password_changed": "Passwort erfolgreich geändert", - "fill_all_fields": "Bitte füllen Sie alle Felder aus", - "passwords_not_match": "Passwörter stimmen nicht überein", - "password_requirements": "Passwortanforderungen", - "password_requirements_not_met": "Passwort erfüllt nicht die Anforderungen", - "req_length": "Mindestens 8 Zeichen", - "req_uppercase": "Mindestens ein Großbuchstabe", - "req_lowercase": "Mindestens ein Kleinbuchstabe", - "req_number": "Mindestens eine Zahl", - "server_info": "Serverinformationen", - "version": "Version", - "database": "Datenbank", - "uptime": "Uptime", - "audit_log": "Audit-Protokoll", - "audit_desc": "Aktuelle Konsolenaktivität", - "no_audit_logs": "Keine Audit-Protokolle gefunden", - "backend_title": "Server-Backend", - "backend_desc": "Wählen Sie das Server-Backend für Geräteverwaltung und Signal-/Relay-Dienste.", - "backend_original": "Original", - "backend_enhanced": "Erweitert", - "backend_rustdesk_desc": "Standard RustDesk Signal- und Relay-Server (hbbs + hbbr). Basis-HTTP-API mit eingeschränkten Endpunkten.", - "backend_betterdesk_desc": "Erweiterter Go-basierter Server mit vollständiger REST-API, JWT-Authentifizierung, Sperrliste, Tags, Echtzeit-WebSocket-Events und Audit-Protokollierung.", - "backend_feature_signal": "Signal-Server (ID-Registrierung)", - "backend_feature_relay": "Relay-Server (Verbindungsweiterleitung)", - "backend_feature_basic_api": "Basis-REST-API", - "backend_feature_full_api": "Vollständige REST-API (34+ Endpunkte)", - "backend_feature_jwt": "JWT-Authentifizierung & TOTP 2FA", - "backend_feature_blocklist": "IP/ID-Sperrlisten-Verwaltung", - "backend_feature_tags": "Geräte-Tags & Gruppierung", - "backend_feature_audit": "Audit-Ereignisprotokollierung", - "backend_feature_websocket": "Echtzeit-WebSocket-Events", - "backend_connection": "Verbindung", - "backend_api_url": "API-URL", - "backend_test": "Verbindung testen", - "backend_testing": "Teste...", - "backend_save": "Backend übernehmen", - "backend_saved": "Server-Backend erfolgreich gewechselt. Gerätedaten werden jetzt vom neuen Backend verwaltet.", - "backend_save_failed": "Wechsel des Server-Backends fehlgeschlagen", - "backend_test_success": "Verbindung erfolgreich! Server ist erreichbar.", - "backend_test_failed": "Verbindung fehlgeschlagen. Server ist nicht erreichbar.", - "backend_confirm_switch": "Sind Sie sicher, dass Sie das Server-Backend wechseln möchten? Dies ändert die Geräteverwaltung.", - "backend_unreachable": "Wechsel nicht möglich: Zielserver ist nicht erreichbar. Starten Sie den Server zuerst.", - "invalid_backend": "Ungültige Backend-Auswahl. Wählen Sie 'rustdesk' oder 'betterdesk'.", - "backend_status_running": "Verbunden", - "backend_status_unreachable": "Nicht erreichbar", - "backend_status_error": "Fehler", - "backend_status_unknown": "Unbekannt", - "totp_title": "Zwei-Faktor-Authentifizierung", - "totp_desc": "Fügen Sie eine zusätzliche Sicherheitsebene mit TOTP-Authenticator-Apps hinzu (Google Authenticator, Microsoft Authenticator, Authy usw.)", - "totp_enabled": "2FA aktiviert", - "totp_enabled_desc": "Ihr Konto ist durch Zwei-Faktor-Authentifizierung geschützt.", - "totp_disabled": "2FA nicht aktiviert", - "totp_disabled_desc": "Aktivieren Sie die Zwei-Faktor-Authentifizierung für zusätzliche Kontosicherheit.", - "totp_setup": "2FA aktivieren", - "totp_disable": "2FA deaktivieren", - "totp_step1": "Installieren Sie eine Authenticator-App auf Ihrem Telefon", - "totp_step2": "Scannen Sie den QR-Code unten", - "totp_step3": "Geben Sie den 6-stelligen Code zur Überprüfung ein", - "totp_manual_key": "Manueller Schlüssel", - "totp_enter_code": "Bitte geben Sie einen 6-stelligen Code ein", - "totp_verify_enable": "Überprüfen & Aktivieren", - "totp_enabled_success": "Zwei-Faktor-Authentifizierung aktiviert!", - "totp_recovery_warning": "Bewahren Sie diese Wiederherstellungscodes sicher auf. Jeder Code kann nur einmal verwendet werden. Wenn Sie den Zugang zu Ihrer Authenticator-App verlieren, können Sie diese Codes zum Anmelden verwenden.", - "totp_done": "Fertig", - "totp_disable_warning": "Das Deaktivieren der Zwei-Faktor-Authentifizierung macht Ihr Konto weniger sicher. Geben Sie Ihr Passwort zur Bestätigung ein.", - "totp_disabled_success": "Zwei-Faktor-Authentifizierung wurde deaktiviert.", - "tutorials_title": "Interaktive Einführungen", - "tutorials_desc": "Kurze geführte Hinweise für neue oder geänderte Bereiche der Konsole anzeigen.", - "tutorials_enabled": "Einführungen aktivieren", - "tutorials_enabled_hint": "Wenn aktiviert, werden Einführungen automatisch für Bereiche angezeigt, die Sie noch nicht abgeschlossen haben.", - "tutorials_reset_hint": "Alle gespeicherten Fortschritte löschen, damit die Einführungen erneut angezeigt werden.", - "tutorials_enabled_toast": "Einführungen aktiviert", - "tutorials_disabled_toast": "Einführungen deaktiviert", - "tutorials_reset_toast": "Einführungsfortschritt zurückgesetzt", - "tab_auth": "Authentifizierung", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurieren Sie externe Authentifizierung über LDAP oder Active Directory. Benutzer können sich mit ihren Domänenanmeldedaten anmelden.", - "ldap_enabled": "LDAP-Authentifizierung aktivieren", - "ldap_enabled_hint": "Wenn aktiviert, können sich Benutzer mit LDAP/AD-Anmeldedaten anmelden. Lokale Konten funktionieren weiterhin als Fallback.", - "ldap_connection": "Serververbindung", - "ldap_host": "Host", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "TLS-Prüfung überspringen", - "ldap_timeout": "Verbindungs-Timeout (s)", - "ldap_timeout_hint": "Sekunden, die auf eine Antwort des LDAP-Servers gewartet wird", - "ldap_bind_mode": "Bind-Modus", - "ldap_direct_bind": "Direkter Bind", - "ldap_direct_bind_hint": "Direkt mit einer DN-Vorlage binden, statt ein Dienstkonto für die Suche zu verwenden.", - "ldap_bind_dn": "Bind-DN (Dienstkonto)", - "ldap_bind_dn_hint": "Distinguished Name eines schreibgeschützten Dienstkontos, das zur Benutzersuche verwendet wird.", - "ldap_bind_password": "Bind-Passwort", - "ldap_base_dn": "Basis-DN", - "ldap_base_dn_hint": "Suchbasis zum Finden von Benutzern, z. B. dc=example,dc=com", - "ldap_user_filter": "Benutzerfilter", - "ldap_user_filter_hint": "LDAP-Filter zum Finden von Benutzern. Verwenden Sie {{username}} als Platzhalter. Standard: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "DN-Vorlage für direkten Bind", - "ldap_direct_bind_dn_hint": "DN-Vorlage für direkten Bind. Verwenden Sie {{username}} als Platzhalter, z. B. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Benutzerattribute", - "ldap_attr_id": "Benutzernamen-Attribut", - "ldap_attr_email": "E-Mail-Attribut", - "ldap_attr_name": "Anzeigenamen-Attribut", - "ldap_group_mapping": "Gruppen → Rollen-Zuordnung", - "ldap_group_base_dn": "Basis-DN für Gruppen", - "ldap_group_base_dn_hint": "Leer lassen, um die Haupt-Basis-DN zu verwenden", - "ldap_group_filter": "Gruppenfilter", - "ldap_group_attr_name": "Gruppennamen-Attribut", - "ldap_default_role": "Standardrolle", - "ldap_default_role_hint": "Rolle für Benutzer, deren LDAP-Gruppen keiner Zuordnung entsprechen", - "ldap_role_viewer": "Betrachter", - "ldap_role_operator": "Operator", - "ldap_role_admin": "Administrator", - "ldap_group_role_map": "Gruppen → Rollen-Karte", - "ldap_group_role_map_hint": "Ordnen Sie LDAP-Gruppen BetterDesk-Rollen zu. Format: GroupDN=Rolle, getrennt durch | (Pipe). Beispiel: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Verbindung testen", - "ldap_testing": "Test läuft...", - "ldap_test_success": "Verbindung erfolgreich! Der LDAP-Server ist erreichbar und die Bind-Anmeldedaten sind gültig.", - "ldap_test_failed": "Verbindung fehlgeschlagen", - "ldap_save": "LDAP-Konfiguration speichern", - "ldap_saved": "LDAP-Konfiguration erfolgreich gespeichert", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfigurieren Sie Single Sign-On über einen OpenID-Connect-Anbieter (Azure AD, Okta, Google, Keycloak usw.).", - "oidc_enabled": "OIDC-Authentifizierung aktivieren", - "oidc_enabled_hint": "Benutzern erlauben, sich mit einem externen Identitätsanbieter anzumelden", - "oidc_provider": "Identitätsanbieter", - "oidc_display_name": "Anzeigename der Schaltfläche", - "oidc_display_name_hint": "Text auf der Anmeldeschaltfläche (z. B. Azure AD, Okta)", - "oidc_issuer_url": "Aussteller-URL", - "oidc_issuer_url_hint": "Aussteller-URL von OpenID Connect (Discovery erfolgt automatisch)", - "oidc_client_id": "Client-ID", - "oidc_client_secret": "Client-Secret", - "oidc_redirect_url": "Weiterleitungs-URL (Callback)", - "oidc_redirect_url_hint": "Muss exakt mit der Konfiguration in Ihrem IdP übereinstimmen. Üblicherweise: http(s)://ihr-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Scopes", - "oidc_use_pkce": "PKCE verwenden (empfohlen)", - "oidc_auto_discovery": "Automatische Discovery", - "oidc_allow_signup": "Benutzer automatisch erstellen", - "oidc_manual_endpoints": "Manuelle Endpoint-URLs", - "oidc_authorization_url": "Autorisierungs-Endpoint", - "oidc_token_url": "Token-Endpoint", - "oidc_userinfo_url": "UserInfo-Endpoint", - "oidc_claim_mapping": "Claim-Zuordnung", - "oidc_claim_username": "Benutzername-Claim", - "oidc_claim_email": "E-Mail-Claim", - "oidc_claim_name": "Anzeigename-Claim", - "oidc_claim_groups": "Gruppen-Claim", - "oidc_role_mapping": "Rollenzuordnung", - "oidc_default_role": "Standardrolle", - "oidc_group_role_map": "Gruppen → Rollen-Zuordnung", - "oidc_group_role_map_hint": "Eine Zuordnung pro Zeile: gruppenname=rolle (z. B. admins=admin, operators=operator)", - "oidc_test_discovery": "Discovery testen", - "oidc_testing": "Test läuft...", - "oidc_test_success": "Discovery erfolgreich! Endpoints aufgelöst.", - "oidc_test_failed": "Discovery fehlgeschlagen", - "oidc_issuer_required": "Die Aussteller-URL ist für den Discovery-Test erforderlich", - "oidc_save": "OIDC-Konfiguration speichern", - "oidc_saved": "OIDC-Konfiguration erfolgreich gespeichert", - "tab_advanced": "Erweitert", - "connection_mode_title": "Verbindungsstrategie", - "connection_mode_desc": "Steuern, wie RustDesk-Desktop-Clients verbinden: direktes P2P (Hole Punch) wenn möglich oder immer über Relay.", - "connection_mode_label": "Standard-Verbindungsmodus", - "connection_mode_p2p_first": "P2P zuerst (empfohlen) — direkte Verbindung versuchen, auf Relay zurückfallen", - "connection_mode_relay_only": "Nur Relay — alle Sitzungen verwenden den Relay-Server", - "connection_mode_advanced": "Erweiterte Optionen", - "connection_mode_fallback_ms": "P2P-Fallback-Timeout (ms)", - "connection_mode_same_nat_relay": "Relay erzwingen, wenn beide Peers dieselbe öffentliche IP teilen (NAT-Hairpin)", - "connection_mode_network_hint": "P2P erfordert, dass UDP-Port 21116 zwischen Clients erreichbar ist. Signal TCP 21116, Relay TCP 21117, NAT-Test 21115 müssen auf dem Server offen sein. Webbrowser-Clients verwenden immer Relay.", - "connection_mode_save": "Speichern", - "connection_mode_save_restart": "Speichern & Server neu starten", - "connection_mode_saved": "Verbindungsmodus gespeichert", - "connection_mode_restart_started": "Server-Neustart eingeleitet", - "connection_mode_restart_failed": "Server-Neustart fehlgeschlagen", - "connection_mode_not_configurable": "Verbindungsmodus kann auf diesem Deployment nicht geändert werden (keine systemd-Unit oder docker-compose gefunden)", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "connection_mode_source_saved": "Gespeichert in", - "connection_mode_source_defaults": "Server-Standardwerte verwenden (nicht über Panel beschreibbar)", - "connection_mode_runtime": "Aktiver Server", - "advanced_title": "Konfigurationsdateien", - "advanced_desc": "Serverkonfigurationsdateien direkt bearbeiten. Änderungen erfordern möglicherweise einen Dienstneustart. Vor jedem Speichern wird eine Sicherungskopie erstellt.", - "advanced_warning": "Diese Dateien enthalten Geheimnisse (API-Schlüssel, Datenbankpasswörter, Sitzungsgeheimnisse). Nur bearbeiten, wenn Sie wissen, was Sie tun. Falsche Syntax kann verhindern, dass der Server startet.", - "advanced_files_label": "Dateien", - "advanced_select_file": "Eine Datei aus der Liste auswählen, um deren Inhalt anzuzeigen oder zu bearbeiten.", - "advanced_reload": "Neu laden", - "advanced_save": "Datei speichern", - "advanced_apply_restart": "Anwenden (Dienst neu starten)", - "advanced_saved": "Konfigurationsdatei gespeichert", - "advanced_restart_after_save": "Konfiguration gespeichert. Den betroffenen Dienst jetzt neu starten, damit die Änderungen wirksam werden?", - "advanced_restart_confirm": "Die zugehörigen BetterDesk-Dienste neu starten? Aktive Verbindungen können kurz unterbrochen werden.", - "advanced_restart_console_confirm": "Den Webkonsolendienst neu starten? Ihre Browsersitzung wird kurz getrennt und die Seite wird neu geladen, wenn die Konsole wieder verfügbar ist.", - "advanced_restart_started": "Dienstneustart eingeleitet", - "advanced_restart_done": "Konsole neu gestartet — Seite wird neu geladen…", - "advanced_restart_polling": "Warten, bis die Konsole wieder online ist…", - "advanced_restart_timeout": "Neustart wurde gesendet, aber die Konsole hat nicht rechtzeitig geantwortet. Systemd/NSSM-Protokolle prüfen und manuell neu laden.", - "advanced_restart_failed": "Dienstneustart fehlgeschlagen (unzureichende Berechtigungen oder Dienst nicht installiert)", - "advanced_save_confirm": "Änderungen an dieser Datei speichern? Eine Sicherung der vorherigen Version wird erstellt.", - "advanced_unsaved_confirm": "Sie haben ungespeicherte Änderungen. Diese verwerfen?", - "advanced_no_files": "Keine Konfigurationsdateien auf diesem System verfügbar.", - "advanced_readonly": "schreibgeschützt", - "advanced_missing": "fehlend", - "advanced_new_file": "Neue Datei (wird erst beim Speichern erstellt)", - "advanced_new_file_hint": "Neue Datei — Inhalt hinzufügen und speichern", - "advanced_backup_created": "Sicherung erstellt", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Dienst neu starten, damit die Änderungen wirksam werden.", - "advanced_error_unknown": "Unbekannte Konfigurationsdatei", - "advanced_error_not_found": "Datei existiert nicht", - "advanced_error_not_file": "Pfad ist keine reguläre Datei", - "advanced_error_too_large": "Datei überschreitet die maximale bearbeitbare Größe (512 KB)", - "advanced_error_binary": "Binärdateien können nicht im Panel bearbeitet werden", - "advanced_error_invalid": "Ungültiger Dateiinhalt", - "advanced_error_not_writable": "Datei ist nicht vom Konsolenprozess beschreibbar", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (Dienst-Unit)", - "advanced_file_systemd-server": "systemd: betterdesk-server (Dienst-Unit)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (Supervisor-Konfiguration)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (Orchestrierung)", - "advanced_restart_none": "Für diese Datei ist kein Dienstneustart erforderlich.", - "enrollment_title": "Geräteregistrierung (RustDesk)", - "enrollment_desc": "Steuern, wie sich neue RustDesk-Clients registrieren und wie Operatoren sie auf der Seite mit den Registrierungsanfragen genehmigen.", - "enrollment_require_approval": "Genehmigung des Operators erforderlich (Verwalteter Modus)", - "enrollment_require_approval_hint": "Wenn aktiviert, werden unbekannte Clients in die Warteschlange eingereiht, bis ein Operator sie in den Registrierungsanfragen genehmigt.", - "enrollment_rich_approve": "Vollständiges Genehmigungsformular (Name, Ordner, Gruppen, Tags)", - "enrollment_rich_approve_hint": "Zeigt einen detaillierten Dialog bei der Genehmigung von Registrierungs- oder LAN-Registrierungsanfragen an.", - "enrollment_tag_picker": "Tags aus vorhandenen Geräte-Tags auswählen", - "enrollment_tag_picker_hint": "Ermöglicht Operatoren, Tags aus der auf der Geräteseite verwendeten Liste auszuwählen, anstatt nur zu tippen.", - "enrollment_open_requests": "Offene Registrierungsanfragen", - "enrollment_pending_count": "{count} ausstehende Registrierungsanfrage(n)" - }, - "audit": { - "time": "Zeit", - "user": "Benutzer", - "action": "Aktion", - "details": "Gerätedetails", - "action_login": "Login", - "action_login_failed": "Anmeldung fehlgeschlagen", - "action_logout": "Logout", - "action_password_change": "Passwort geändert", - "action_2fa_enable": "2FA aktiviert", - "action_2fa_disable": "2FA deaktiviert", - "action_user_create": "Benutzer erstellt", - "action_user_update": "Benutzer aktualisiert", - "action_user_delete": "Benutzer gelöscht", - "action_settings_update": "Einstellungen aktualisiert", - "action_device_ban": "Gerät gesperrt", - "action_device_unban": "Gerätesperre aufgehoben", - "action_device_delete": "Gerät gelöscht" - }, - "generator": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "config_options": "Konfigurationsoptionen", - "server_address": "Serveradresse", - "server_address_hint": "Domain oder IP-Adresse Ihres Servers", - "custom_port": "Benutzerdefinierter Port", - "port_hint": "Leer lassen für Standard (21116)", - "relay_server": "Relay-Server", - "relay_placeholder": "Gleich wie ID-Server, wenn leer", - "relay_hint": "Optional: separate Relay-Serveradresse", - "include_key": "Öffentlichen Schlüssel in Konfiguration aufnehmen", - "generate": "Konfiguration generieren", - "output": "Konfigurationsausgabe", - "usage_title": "Verbindungsdetails", - "generated": "Konfiguration generiert", - "server_required": "Serveradresse ist erforderlich", - "nothing_to_copy": "Generieren Sie zuerst eine Konfiguration", - "bundles_title": "Agent-Pakete", - "new_bundle": "Neues Paket", - "editor_title": "Paket-Editor", - "empty_state": "Wählen Sie links ein Paket aus oder erstellen Sie ein neues, um zu beginnen.", - "loading": "Wird geladen…", - "no_bundles": "Noch keine Pakete. Erstellen Sie Ihr erstes Paket.", - "bundle_name": "Paketname", - "bundle_name_hint": "Nur interne Bezeichnung — wird Endbenutzern nicht angezeigt.", - "short_link": "Kurzer Download-Link", - "short_link_hint": "Wird in der öffentlichen URL (/d/…) verwendet. Nur Kleinbuchstaben, Zahlen und Bindestriche (2–32 Zeichen). Wird automatisch aus dem Paketnamen übernommen — kürzen Sie ihn für einfacheres Teilen (z. B. acme).", - "branding_section": "Branding", - "company_name": "Unternehmens-/Markenname", - "short_text": "Kurzbeschreibung", - "contact_email": "Kontakt-E-Mail", - "contact_phone": "Kontakttelefon", - "contact_url": "Kontaktwebsite", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG oder WebP. Maximal 256 KB.", - "logo_clear": "Logo entfernen", - "primary_color": "Primärfarbe", - "accent_color": "Kopfzeilenfarbe", - "default_lang": "Standardsprache", - "allow_unattended": "Unbeaufsichtigten Zugriff erlauben", - "allow_unattended_hint": "Wenn aktiviert, zeigt der Agent ein dauerhaftes Passwort für den Operatorzugriff an.", - "save": "Paket speichern", - "revoke": "Widerrufen", - "unrevoke": "Wieder aktivieren", - "revoked": "Widerrufen", - "preview_title": "Live-Vorschau", - "preview_hint": "Ungefähres Aussehen des Agentfensters für Endbenutzer.", - "preview_default_name": "BetterDesk-Support", - "preview_status_ready": "Bereit", - "preview_id": "Ihre ID", - "preview_password": "Passwort", - "preview_chat": "Mit Support chatten", - "preview_settings": "Einstellungen (nur Admin)", - "preview_quit": "Beenden (nur Admin)", - "download_link_title": "Download-Link", - "download_link_hint": "Teilen Sie diesen Link mit Endbenutzern. Sie sehen eine gebrandete Download-Seite. Alte Hex-Links funktionieren weiterhin, wenn Sie den kurzen Link ändern.", - "open_portal": "Öffnen", - "created": "Paket erstellt", - "saved": "Paket gespeichert", - "deleted": "Paket gelöscht", - "revoked_ok": "Paket widerrufen", - "unrevoked_ok": "Paket wieder aktiviert", - "link_copied": "Link in die Zwischenablage kopiert", - "copy_failed": "Automatisches Kopieren fehlgeschlagen — bitte manuell kopieren", - "unsaved_confirm": "Nicht gespeicherte Änderungen verwerfen?", - "confirm_revoke": "Dieses Paket widerrufen? Der Download-Link funktioniert danach nicht mehr.", - "confirm_unrevoke": "Dieses Paket wieder aktivieren?", - "confirm_delete": "Dieses Paket dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "errors": { - "validation_failed": "Validierung fehlgeschlagen", - "name_required": "Paketname ist erforderlich", - "company_name_required": "Unternehmensname ist erforderlich", - "logo_invalid": "Das Logo muss eine gültige Bilddatei sein", - "logo_too_large": "Das Logo darf höchstens 256 KB groß sein", - "logo_read_failed": "Logodatei konnte nicht gelesen werden", - "primary_color_invalid": "Primärfarbe muss ein Hex-Wert sein (z. B. #2563eb)", - "accent_color_invalid": "Kopfzeilenfarbe muss ein Hex-Wert sein (z. B. #1e293b)", - "contact_url_invalid": "Kontaktwebsite muss eine gültige URL sein", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "server_host_required": "Öffentliche Serveradresse ist erforderlich", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "slug_invalid": "Der kurze Link darf nur Kleinbuchstaben, Zahlen und Bindestriche enthalten", - "slug_too_short": "Der kurze Link muss mindestens 2 Zeichen haben", - "slug_too_long": "Der kurze Link darf höchstens 32 Zeichen haben", - "slug_taken": "Dieser kurze Link wird bereits von einem anderen Paket verwendet" - }, - "legacy_title": "Client-Konfigurationsgenerator", - "background_color": "Fensterhintergrund", - "build_error_hint": "Build-Fehler", - "build_status_building": "Wird erstellt", - "build_status_failed": "Fehlgeschlagen", - "build_status_pending": "In Warteschlange", - "build_status_ready": "Bereit", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} fehlgeschlagen", - "builds_title": "Client-Builds", - "connection_section": "Serververbindung", - "enrollment_per_device": "Pro Gerät — in Registrierungen genehmigen", - "enrollment_token": "Geräteregistrierung", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Geräte im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "enrollment_token_pending": "Pro Gerät nach Genehmigung", - "enrollment_token_set": "Pro Gerät — in Registrierungen genehmigen", - "header_text_color": "Kopfzeilentextfarbe", - "rebuild_all": "Alle neu erstellen", - "rebuild_confirm": "Alle Plattform-Installer für dieses Paket neu erstellen? Vorhandene fertige Artefakte werden ersetzt.", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "rebuilding_all": "Neubuilds werden eingereiht…", - "server_host": "Öffentliche Serveradresse", - "server_host_hint": "Domainname oder öffentliche IP-Adresse, unter der Endbenutzer Ihren BetterDesk-Server erreichen. Port wird aus der Konsolenkonfiguration übernommen.", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "status_ready_color": "Farbe des Bereit-Indikators", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "use_https": "HTTPS / WSS verwenden (empfohlen)", - "preview_help": "Hilfe anfordern" - }, - "server": { - "port": "Port", - "api_port": "API-Port", - "id_server": "ID-Server", - "relay_server": "Relay-Server", - "api_key": "API-Schlüssel" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Gesperrt", - "running": "Läuft", - "stopped": "Gestoppt", - "unknown": "Unbekannt", - "checking": "Prüfe...", - "label": "Status", - "no_signal": "Kein Signal" - }, - "actions": { - "refresh": "Aktualisieren", - "copy": "Kopieren", - "connect": "Verbinden", - "connect_desktop": "Über Desktop-Client verbinden", - "remote_viewer": "Remote-Ansicht", - "web_remote": "Web-Remote", - "details": "Gerätedetails", - "edit": "Bearbeiten", - "delete": "Löschen", - "ban": "Sperren", - "unban": "Entsperren", - "save": "Speichern", - "cancel": "Abbrechen", - "confirm": "Bestätigen", - "close": "Schließen", - "clear": "Leeren", - "ok": "OK", - "saved": "Gespeichert", - "back": "Zurück", - "create": "Erstellen", - "dismiss": "Verwerfen", - "view_all": "Alle anzeigen", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "gerade eben", - "seconds_ago": "Vor {count} Sekunde(n)", - "minutes_ago": "Vor {count} Minute(n)", - "hours_ago": "Vor {count} Stunde(n)", - "days_ago": "Vor {count} Tag(en)", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "add_user": "Benutzer hinzufügen", - "edit_user": "Benutzer bearbeiten", - "username": "Benutzername", - "username_placeholder": "Benutzername eingeben", - "username_hint": "3-32 Zeichen, nur Buchstaben, Zahlen und Unterstriche", - "password": "Passwort", - "password_placeholder": "Passwort eingeben", - "password_hint": "Mindestens 8 Zeichen mit Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen", - "password_leave_empty": "Leer lassen, um aktuelles beizubehalten", - "role": "Rolle", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Betrachter", - "role_pro": "Pro", - "role_hint": "Betrachter können nur Daten einsehen, Operatoren können Geräte verwalten, Administratoren haben vollen Zugriff", - "created": "Erstellt", - "last_login": "Letzte Anmeldung", - "never": "Nie", - "actions": "Aktionen", - "create": "Erstellen", - "edit": "Bearbeiten", - "reset_password": "Passwort zurücksetzen", - "new_password": "Neues Passwort", - "delete_title": "Gerät löschen", - "delete_confirm": "Sind Sie sicher, dass Sie Benutzer {username} löschen möchten?", - "delete_success": "Gerät erfolgreich gelöscht", - "user_created": "Benutzer erfolgreich erstellt", - "user_updated": "Benutzer erfolgreich aktualisiert", - "password_reset_success": "Passwort erfolgreich zurückgesetzt", - "empty_title": "Keine Geräte gefunden", - "empty_text": "Keine Geräte entsprechen Ihren aktuellen Filtern", - "fill_required": "Bitte füllen Sie alle Pflichtfelder aus", - "invalid_username": "Benutzername muss 3-32 Zeichen lang sein, nur Buchstaben, Zahlen und Unterstriche", - "username_exists": "Benutzername existiert bereits", - "weak_password": "Passwort ist zu schwach", - "password_too_short": "Passwort muss mindestens 8 Zeichen lang sein", - "invalid_role": "Ungültige Rolle", - "cannot_demote_self": "Sie können sich nicht selbst herabstufen", - "cannot_delete_self": "Sie können Ihr eigenes Konto nicht löschen", - "last_admin": "Der letzte Administrator kann nicht gelöscht werden", - "admin_only": "Diese Funktion ist nur für Administratoren verfügbar", - "password_required": "Passwort ist erforderlich", - "not_found": "Device not found", - "strength_weak": "Schwach", - "strength_medium": "Mittel", - "strength_strong": "Stark", - "security_tips_title": "Sicherheitsempfehlungen", - "tip_strong_passwords": "Verwenden Sie starke, einzigartige Passwörter für jeden Benutzer", - "tip_unique_accounts": "Erstellen Sie individuelle Konten für jede Person", - "tip_viewer_role": "Verwenden Sie die Betrachter-Rolle für Benutzer, die nur Lesezugriff benötigen", - "tip_operator_role": "Verwenden Sie die Operator-Rolle für Benutzer, die Geräte verwalten, aber keine Benutzer verwalten müssen", - "tip_audit_logs": "Überprüfen Sie regelmäßig die Audit-Protokolle auf verdächtige Aktivitäten", - "role_super_admin": "Super Admin", - "role_server_admin": "Serveradministrator", - "role_global_admin": "Globaler Administrator", - "organizations": "Organisationen", - "user_organizations": "Organisationen für {username}", - "no_organizations": "Keine Organisationen", - "org_removed": "Benutzer aus Organisation entfernt", - "server_role_label": "Serverrolle", - "server_role_hint": "Legt fest, was der Benutzer in der gesamten Konsole tun kann (Panelzugriff, Serverkonfiguration, Audit usw.).", - "org_membership_section": "Organisationsmitgliedschaft", - "org_membership_hint": "Ein Benutzer kann mehreren Organisationen angehören. Die Organisationsrolle steuert nur Berechtigungen innerhalb dieser Organisation und ist unabhängig von der Serverrolle oben.", - "column_organizations": "Organisationen", - "no_orgs_short": "—", - "org_count_one": "{count} Organisation", - "org_count_many": "{count} Organisationen", - "all_orgs_assigned": "Der Benutzer ist bereits Mitglied jeder Organisation.", - "user_groups": "Benutzergruppen", - "user_groups_hint": "Benutzergruppen können Zugriff auf ausgewählte Gerätegruppen gewähren.", - "loading_user_groups": "Benutzergruppen werden geladen...", - "no_user_groups": "Keine Benutzergruppen verfügbar", - "create_user_group": "Gruppe erstellen", - "edit_user_group": "Benutzergruppe bearbeiten", - "delete_user_group": "Benutzergruppe löschen", - "delete_user_group_confirm": "Benutzergruppe {name} löschen? Mitglieder verlieren den über diese Gruppe gewährten Zugriff.", - "user_group_created": "Benutzergruppe erstellt", - "user_group_updated": "Benutzergruppe aktualisiert", - "user_group_deleted": "Benutzergruppe gelöscht", - "user_group_not_found": "Benutzergruppe nicht gefunden", - "group_name": "Gruppenname", - "group_name_placeholder": "Operatoren", - "group_note": "Note", - "group_note_placeholder": "Optionale Notiz", - "group_name_required": "Gruppenname ist erforderlich", - "group_members_count": "{count} Mitglieder", - "provider": "Anbieter", - "provider_local": "Lokal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Vom Identitätsanbieter verwaltet", - "provider_managed_hint": "Dieses Konto wird von einem externen Identitätsanbieter (LDAP/AD oder SSO) verwaltet. Passwort und Rolle werden vom Anbieter gesteuert und können hier nicht geändert werden." - }, - "folders": { - "title": "Dashboard", - "create": "Erstellen", - "edit": "Bearbeiten", - "delete": "Löschen", - "name": "Folder Name", - "name_placeholder": "Ordnername eingeben", - "name_required": "Name ist erforderlich", - "name_too_long": "Ordnername ist zu lang (max. 50 Zeichen)", - "color": "Farbe", - "icon": "Symbol", - "not_found": "Device not found", - "delete_confirm": "Sind Sie sicher, dass Sie diesen Ordner löschen möchten? Geräte werden daraus entfernt.", - "delete_success": "Gerät erfolgreich gelöscht", - "created": "Erstellt", - "updated": "Ordner erfolgreich aktualisiert", - "no_devices_selected": "Keine Geräte ausgewählt", - "devices_moved": "Geräte erfolgreich verschoben", - "device_assigned": "Gerät dem Ordner zugewiesen", - "unassigned": "Nicht zugewiesen", - "all_devices": "Alle Geräte", - "drag_hint": "Ziehen Sie Geräte in Ordner, um sie zu organisieren", - "move_to": "Verschieben nach", - "toggle_sidebar": "Seitenleiste umschalten" - }, + "no_groups": "Noch keine Gruppen", + "manual_groups": "Manuelle Gruppen", + "dynamic_memberships": "Dynamische Mitgliedschaften", + "group_allowed_user_groups": "Zugelassene Benutzergruppen", + "group_allowed_user_groups_hint": "Benutzer in ausgewählten Benutzergruppen können auf diese Gerätegruppe zugreifen.", + "no_user_groups": "Keine Benutzergruppen", + "edit_group": "Gruppe bearbeiten", + "delete_group": "Gruppe löschen", + "delete_group_confirm": "Gerätegruppe {name} löschen?", + "group_deleted": "Gerätegruppe gelöscht", + "folder_group_readonly": "Ordnerbasierte Gruppen werden über Ordner verwaltet.", + "manage_user_groups": "Benutzergruppen verwalten", + "restore_failed": "Gerät konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Der Client hat kürzlich die API kontaktiert, ist aber nicht auf dem Signalserver registriert (UDP :21116). Starten Sie den Client nach der Servermigration neu.", + "per_page": "Pro Seite" + }, + "keys": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "public_key": "Öffentlicher Schlüssel", + "qr_code": "QR-Code", + "server_info": "Serverinformationen", + "download": "Schlüssel herunterladen", + "show_qr": "QR anzeigen", + "qr_hint": "Scannen Sie diesen QR-Code mit der RustDesk-Mobilapp", + "no_key": "Kein öffentlicher Schlüssel gefunden", + "no_key_to_copy": "Kein Schlüssel zum Kopieren", + "no_qr": "QR-Code nicht verfügbar", + "download_success": "Schlüsseldatei heruntergeladen", + "not_found": "Device not found", + "api_not_found": "API-Schlüssel nicht gefunden" + }, + "settings": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "tab_general": "Allgemein", + "tab_server": "Servereinstellungen", + "tab_branding": "Branding", + "tab_backup": "Sicherung", + "language": "Sprache", + "change_password": "Passwort ändern", + "password_desc": "Aktualisieren Sie Ihr Kontopasswort", + "current_password": "Aktuelles Passwort", + "new_password": "Neues Passwort", + "confirm_password": "Passwort bestätigen", + "save_password": "Passwort aktualisieren", + "password_changed": "Passwort erfolgreich geändert", + "fill_all_fields": "Bitte füllen Sie alle Felder aus", + "passwords_not_match": "Passwörter stimmen nicht überein", + "password_requirements": "Passwortanforderungen", + "password_requirements_not_met": "Passwort erfüllt nicht die Anforderungen", + "req_length": "Mindestens 8 Zeichen", + "req_uppercase": "Mindestens ein Großbuchstabe", + "req_lowercase": "Mindestens ein Kleinbuchstabe", + "req_number": "Mindestens eine Zahl", + "server_info": "Serverinformationen", + "version": "Version", + "database": "Datenbank", + "uptime": "Uptime", + "audit_log": "Audit-Protokoll", + "audit_desc": "Aktuelle Konsolenaktivität", + "no_audit_logs": "Keine Audit-Protokolle gefunden", + "backend_title": "Server-Backend", + "backend_desc": "Wählen Sie das Server-Backend für Geräteverwaltung und Signal-/Relay-Dienste.", + "backend_original": "Original", + "backend_enhanced": "Erweitert", + "backend_rustdesk_desc": "Standard RustDesk Signal- und Relay-Server (hbbs + hbbr). Basis-HTTP-API mit eingeschränkten Endpunkten.", + "backend_betterdesk_desc": "Erweiterter Go-basierter Server mit vollständiger REST-API, JWT-Authentifizierung, Sperrliste, Tags, Echtzeit-WebSocket-Events und Audit-Protokollierung.", + "backend_feature_signal": "Signal-Server (ID-Registrierung)", + "backend_feature_relay": "Relay-Server (Verbindungsweiterleitung)", + "backend_feature_basic_api": "Basis-REST-API", + "backend_feature_full_api": "Vollständige REST-API (34+ Endpunkte)", + "backend_feature_jwt": "JWT-Authentifizierung & TOTP 2FA", + "backend_feature_blocklist": "IP/ID-Sperrlisten-Verwaltung", + "backend_feature_tags": "Geräte-Tags & Gruppierung", + "backend_feature_audit": "Audit-Ereignisprotokollierung", + "backend_feature_websocket": "Echtzeit-WebSocket-Events", + "backend_connection": "Verbindung", + "backend_api_url": "API-URL", + "backend_test": "Verbindung testen", + "backend_testing": "Teste...", + "backend_save": "Backend übernehmen", + "backend_saved": "Server-Backend erfolgreich gewechselt. Gerätedaten werden jetzt vom neuen Backend verwaltet.", + "backend_save_failed": "Wechsel des Server-Backends fehlgeschlagen", + "backend_test_success": "Verbindung erfolgreich! Server ist erreichbar.", + "backend_test_failed": "Verbindung fehlgeschlagen. Server ist nicht erreichbar.", + "backend_confirm_switch": "Sind Sie sicher, dass Sie das Server-Backend wechseln möchten? Dies ändert die Geräteverwaltung.", + "backend_unreachable": "Wechsel nicht möglich: Zielserver ist nicht erreichbar. Starten Sie den Server zuerst.", + "invalid_backend": "Ungültige Backend-Auswahl. Wählen Sie 'rustdesk' oder 'betterdesk'.", + "backend_status_running": "Verbunden", + "backend_status_unreachable": "Nicht erreichbar", + "backend_status_error": "Fehler", + "backend_status_unknown": "Unbekannt", + "totp_title": "Zwei-Faktor-Authentifizierung", + "totp_desc": "Fügen Sie eine zusätzliche Sicherheitsebene mit TOTP-Authenticator-Apps hinzu (Google Authenticator, Microsoft Authenticator, Authy usw.)", + "totp_enabled": "2FA aktiviert", + "totp_enabled_desc": "Ihr Konto ist durch Zwei-Faktor-Authentifizierung geschützt.", + "totp_disabled": "2FA nicht aktiviert", + "totp_disabled_desc": "Aktivieren Sie die Zwei-Faktor-Authentifizierung für zusätzliche Kontosicherheit.", + "totp_setup": "2FA aktivieren", + "totp_disable": "2FA deaktivieren", + "totp_step1": "Installieren Sie eine Authenticator-App auf Ihrem Telefon", + "totp_step2": "Scannen Sie den QR-Code unten", + "totp_step3": "Geben Sie den 6-stelligen Code zur Überprüfung ein", + "totp_manual_key": "Manueller Schlüssel", + "totp_enter_code": "Bitte geben Sie einen 6-stelligen Code ein", + "totp_verify_enable": "Überprüfen & Aktivieren", + "totp_enabled_success": "Zwei-Faktor-Authentifizierung aktiviert!", + "totp_recovery_warning": "Bewahren Sie diese Wiederherstellungscodes sicher auf. Jeder Code kann nur einmal verwendet werden. Wenn Sie den Zugang zu Ihrer Authenticator-App verlieren, können Sie diese Codes zum Anmelden verwenden.", + "totp_done": "Fertig", + "totp_disable_warning": "Das Deaktivieren der Zwei-Faktor-Authentifizierung macht Ihr Konto weniger sicher. Geben Sie Ihr Passwort zur Bestätigung ein.", + "totp_disabled_success": "Zwei-Faktor-Authentifizierung wurde deaktiviert.", + "tutorials_title": "Interaktive Einführungen", + "tutorials_desc": "Kurze geführte Hinweise für neue oder geänderte Bereiche der Konsole anzeigen.", + "tutorials_enabled": "Einführungen aktivieren", + "tutorials_enabled_hint": "Wenn aktiviert, werden Einführungen automatisch für Bereiche angezeigt, die Sie noch nicht abgeschlossen haben.", + "tutorials_reset_hint": "Alle gespeicherten Fortschritte löschen, damit die Einführungen erneut angezeigt werden.", + "tutorials_enabled_toast": "Einführungen aktiviert", + "tutorials_disabled_toast": "Einführungen deaktiviert", + "tutorials_reset_toast": "Einführungsfortschritt zurückgesetzt", + "tab_auth": "Authentifizierung", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurieren Sie externe Authentifizierung über LDAP oder Active Directory. Benutzer können sich mit ihren Domänenanmeldedaten anmelden.", + "ldap_enabled": "LDAP-Authentifizierung aktivieren", + "ldap_enabled_hint": "Wenn aktiviert, können sich Benutzer mit LDAP/AD-Anmeldedaten anmelden. Lokale Konten funktionieren weiterhin als Fallback.", + "ldap_connection": "Serververbindung", + "ldap_host": "Host", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "TLS-Prüfung überspringen", + "ldap_timeout": "Verbindungs-Timeout (s)", + "ldap_timeout_hint": "Sekunden, die auf eine Antwort des LDAP-Servers gewartet wird", + "ldap_bind_mode": "Bind-Modus", + "ldap_direct_bind": "Direkter Bind", + "ldap_direct_bind_hint": "Direkt mit einer DN-Vorlage binden, statt ein Dienstkonto für die Suche zu verwenden.", + "ldap_bind_dn": "Bind-DN (Dienstkonto)", + "ldap_bind_dn_hint": "Distinguished Name eines schreibgeschützten Dienstkontos, das zur Benutzersuche verwendet wird.", + "ldap_bind_password": "Bind-Passwort", + "ldap_base_dn": "Basis-DN", + "ldap_base_dn_hint": "Suchbasis zum Finden von Benutzern, z. B. dc=example,dc=com", + "ldap_user_filter": "Benutzerfilter", + "ldap_user_filter_hint": "LDAP-Filter zum Finden von Benutzern. Verwenden Sie {{username}} als Platzhalter. Standard: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "DN-Vorlage für direkten Bind", + "ldap_direct_bind_dn_hint": "DN-Vorlage für direkten Bind. Verwenden Sie {{username}} als Platzhalter, z. B. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Benutzerattribute", + "ldap_attr_id": "Benutzernamen-Attribut", + "ldap_attr_email": "E-Mail-Attribut", + "ldap_attr_name": "Anzeigenamen-Attribut", + "ldap_group_mapping": "Gruppen → Rollen-Zuordnung", + "ldap_group_base_dn": "Basis-DN für Gruppen", + "ldap_group_base_dn_hint": "Leer lassen, um die Haupt-Basis-DN zu verwenden", + "ldap_group_filter": "Gruppenfilter", + "ldap_group_attr_name": "Gruppennamen-Attribut", + "ldap_default_role": "Standardrolle", + "ldap_default_role_hint": "Rolle für Benutzer, deren LDAP-Gruppen keiner Zuordnung entsprechen", + "ldap_role_viewer": "Betrachter", + "ldap_role_operator": "Operator", + "ldap_role_admin": "Administrator", + "ldap_group_role_map": "Gruppen → Rollen-Karte", + "ldap_group_role_map_hint": "Ordnen Sie LDAP-Gruppen BetterDesk-Rollen zu. Format: GroupDN=Rolle, getrennt durch | (Pipe). Beispiel: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Verbindung testen", + "ldap_testing": "Test läuft...", + "ldap_test_success": "Verbindung erfolgreich! Der LDAP-Server ist erreichbar und die Bind-Anmeldedaten sind gültig.", + "ldap_test_failed": "Verbindung fehlgeschlagen", + "ldap_save": "LDAP-Konfiguration speichern", + "ldap_saved": "LDAP-Konfiguration erfolgreich gespeichert", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfigurieren Sie Single Sign-On über einen OpenID-Connect-Anbieter (Azure AD, Okta, Google, Keycloak usw.).", + "oidc_enabled": "OIDC-Authentifizierung aktivieren", + "oidc_enabled_hint": "Benutzern erlauben, sich mit einem externen Identitätsanbieter anzumelden", + "oidc_provider": "Identitätsanbieter", + "oidc_display_name": "Anzeigename der Schaltfläche", + "oidc_display_name_hint": "Text auf der Anmeldeschaltfläche (z. B. Azure AD, Okta)", + "oidc_issuer_url": "Aussteller-URL", + "oidc_issuer_url_hint": "Aussteller-URL von OpenID Connect (Discovery erfolgt automatisch)", + "oidc_client_id": "Client-ID", + "oidc_client_secret": "Client-Secret", + "oidc_redirect_url": "Weiterleitungs-URL (Callback)", + "oidc_redirect_url_hint": "Muss exakt mit der Konfiguration in Ihrem IdP übereinstimmen. Üblicherweise: http(s)://ihr-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Scopes", + "oidc_use_pkce": "PKCE verwenden (empfohlen)", + "oidc_auto_discovery": "Automatische Discovery", + "oidc_allow_signup": "Benutzer automatisch erstellen", + "oidc_manual_endpoints": "Manuelle Endpoint-URLs", + "oidc_authorization_url": "Autorisierungs-Endpoint", + "oidc_token_url": "Token-Endpoint", + "oidc_userinfo_url": "UserInfo-Endpoint", + "oidc_claim_mapping": "Claim-Zuordnung", + "oidc_claim_username": "Benutzername-Claim", + "oidc_claim_email": "E-Mail-Claim", + "oidc_claim_name": "Anzeigename-Claim", + "oidc_claim_groups": "Gruppen-Claim", + "oidc_role_mapping": "Rollenzuordnung", + "oidc_default_role": "Standardrolle", + "oidc_group_role_map": "Gruppen → Rollen-Zuordnung", + "oidc_group_role_map_hint": "Eine Zuordnung pro Zeile: gruppenname=rolle (z. B. admins=admin, operators=operator)", + "oidc_test_discovery": "Discovery testen", + "oidc_testing": "Test läuft...", + "oidc_test_success": "Discovery erfolgreich! Endpoints aufgelöst.", + "oidc_test_failed": "Discovery fehlgeschlagen", + "oidc_issuer_required": "Die Aussteller-URL ist für den Discovery-Test erforderlich", + "oidc_save": "OIDC-Konfiguration speichern", + "oidc_saved": "OIDC-Konfiguration erfolgreich gespeichert", + "tab_advanced": "Erweitert", + "connection_mode_title": "Verbindungsstrategie", + "connection_mode_desc": "Steuern, wie RustDesk-Desktop-Clients verbinden: direktes P2P (Hole Punch) wenn möglich oder immer über Relay.", + "connection_mode_label": "Standard-Verbindungsmodus", + "connection_mode_p2p_first": "P2P zuerst (empfohlen) — direkte Verbindung versuchen, auf Relay zurückfallen", + "connection_mode_relay_only": "Nur Relay — alle Sitzungen verwenden den Relay-Server", + "connection_mode_advanced": "Erweiterte Optionen", + "connection_mode_fallback_ms": "P2P-Fallback-Timeout (ms)", + "connection_mode_same_nat_relay": "Relay erzwingen, wenn beide Peers dieselbe öffentliche IP teilen (NAT-Hairpin)", + "connection_mode_network_hint": "P2P erfordert, dass UDP-Port 21116 zwischen Clients erreichbar ist. Signal TCP 21116, Relay TCP 21117, NAT-Test 21115 müssen auf dem Server offen sein. Webbrowser-Clients verwenden immer Relay.", + "connection_mode_save": "Speichern", + "connection_mode_save_restart": "Speichern & Server neu starten", + "connection_mode_saved": "Verbindungsmodus gespeichert", + "connection_mode_restart_started": "Server-Neustart eingeleitet", + "connection_mode_restart_failed": "Server-Neustart fehlgeschlagen", + "connection_mode_not_configurable": "Verbindungsmodus kann auf diesem Deployment nicht geändert werden (keine systemd-Unit oder docker-compose gefunden)", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "connection_mode_source_saved": "Gespeichert in", + "connection_mode_source_defaults": "Server-Standardwerte verwenden (nicht über Panel beschreibbar)", + "connection_mode_runtime": "Aktiver Server", + "advanced_title": "Konfigurationsdateien", + "advanced_desc": "Serverkonfigurationsdateien direkt bearbeiten. Änderungen erfordern möglicherweise einen Dienstneustart. Vor jedem Speichern wird eine Sicherungskopie erstellt.", + "advanced_warning": "Diese Dateien enthalten Geheimnisse (API-Schlüssel, Datenbankpasswörter, Sitzungsgeheimnisse). Nur bearbeiten, wenn Sie wissen, was Sie tun. Falsche Syntax kann verhindern, dass der Server startet.", + "advanced_files_label": "Dateien", + "advanced_select_file": "Eine Datei aus der Liste auswählen, um deren Inhalt anzuzeigen oder zu bearbeiten.", + "advanced_reload": "Neu laden", + "advanced_save": "Datei speichern", + "advanced_apply_restart": "Anwenden (Dienst neu starten)", + "advanced_saved": "Konfigurationsdatei gespeichert", + "advanced_restart_after_save": "Konfiguration gespeichert. Den betroffenen Dienst jetzt neu starten, damit die Änderungen wirksam werden?", + "advanced_restart_confirm": "Die zugehörigen BetterDesk-Dienste neu starten? Aktive Verbindungen können kurz unterbrochen werden.", + "advanced_restart_console_confirm": "Den Webkonsolendienst neu starten? Ihre Browsersitzung wird kurz getrennt und die Seite wird neu geladen, wenn die Konsole wieder verfügbar ist.", + "advanced_restart_started": "Dienstneustart eingeleitet", + "advanced_restart_done": "Konsole neu gestartet — Seite wird neu geladen…", + "advanced_restart_polling": "Warten, bis die Konsole wieder online ist…", + "advanced_restart_timeout": "Neustart wurde gesendet, aber die Konsole hat nicht rechtzeitig geantwortet. Systemd/NSSM-Protokolle prüfen und manuell neu laden.", + "advanced_restart_failed": "Dienstneustart fehlgeschlagen (unzureichende Berechtigungen oder Dienst nicht installiert)", + "advanced_save_confirm": "Änderungen an dieser Datei speichern? Eine Sicherung der vorherigen Version wird erstellt.", + "advanced_unsaved_confirm": "Sie haben ungespeicherte Änderungen. Diese verwerfen?", + "advanced_no_files": "Keine Konfigurationsdateien auf diesem System verfügbar.", + "advanced_readonly": "schreibgeschützt", + "advanced_missing": "fehlend", + "advanced_new_file": "Neue Datei (wird erst beim Speichern erstellt)", + "advanced_new_file_hint": "Neue Datei — Inhalt hinzufügen und speichern", + "advanced_backup_created": "Sicherung erstellt", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Dienst neu starten, damit die Änderungen wirksam werden.", + "advanced_error_unknown": "Unbekannte Konfigurationsdatei", + "advanced_error_not_found": "Datei existiert nicht", + "advanced_error_not_file": "Pfad ist keine reguläre Datei", + "advanced_error_too_large": "Datei überschreitet die maximale bearbeitbare Größe (512 KB)", + "advanced_error_binary": "Binärdateien können nicht im Panel bearbeitet werden", + "advanced_error_invalid": "Ungültiger Dateiinhalt", + "advanced_error_not_writable": "Datei ist nicht vom Konsolenprozess beschreibbar", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (Dienst-Unit)", + "advanced_file_systemd-server": "systemd: betterdesk-server (Dienst-Unit)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (Supervisor-Konfiguration)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (Orchestrierung)", + "advanced_restart_none": "Für diese Datei ist kein Dienstneustart erforderlich.", + "enrollment_title": "Geräteregistrierung (RustDesk)", + "enrollment_desc": "Steuern, wie sich neue RustDesk-Clients registrieren und wie Operatoren sie auf der Seite mit den Registrierungsanfragen genehmigen.", + "enrollment_require_approval": "Genehmigung des Operators erforderlich (Verwalteter Modus)", + "enrollment_require_approval_hint": "Wenn aktiviert, werden unbekannte Clients in die Warteschlange eingereiht, bis ein Operator sie in den Registrierungsanfragen genehmigt.", + "enrollment_rich_approve": "Vollständiges Genehmigungsformular (Name, Ordner, Gruppen, Tags)", + "enrollment_rich_approve_hint": "Zeigt einen detaillierten Dialog bei der Genehmigung von Registrierungs- oder LAN-Registrierungsanfragen an.", + "enrollment_tag_picker": "Tags aus vorhandenen Geräte-Tags auswählen", + "enrollment_tag_picker_hint": "Ermöglicht Operatoren, Tags aus der auf der Geräteseite verwendeten Liste auszuwählen, anstatt nur zu tippen.", + "enrollment_open_requests": "Offene Registrierungsanfragen", + "enrollment_pending_count": "{count} ausstehende Registrierungsanfrage(n)" + }, + "audit": { + "time": "Zeit", + "user": "Benutzer", + "action": "Aktion", + "details": "Gerätedetails", + "action_login": "Login", + "action_login_failed": "Anmeldung fehlgeschlagen", + "action_logout": "Logout", + "action_password_change": "Passwort geändert", + "action_2fa_enable": "2FA aktiviert", + "action_2fa_disable": "2FA deaktiviert", + "action_user_create": "Benutzer erstellt", + "action_user_update": "Benutzer aktualisiert", + "action_user_delete": "Benutzer gelöscht", + "action_settings_update": "Einstellungen aktualisiert", + "action_device_ban": "Gerät gesperrt", + "action_device_unban": "Gerätesperre aufgehoben", + "action_device_delete": "Gerät gelöscht" + }, + "generator": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Frühe Funktion — der Agent-Bundle-Generator befindet sich in aktiver Entwicklung.", + "config_options": "Konfigurationsoptionen", + "server_address": "Serveradresse", + "server_address_hint": "Domain oder IP-Adresse Ihres Servers", + "custom_port": "Benutzerdefinierter Port", + "port_hint": "Leer lassen für Standard (21116)", + "relay_server": "Relay-Server", + "relay_placeholder": "Gleich wie ID-Server, wenn leer", + "relay_hint": "Optional: separate Relay-Serveradresse", + "include_key": "Öffentlichen Schlüssel in Konfiguration aufnehmen", + "generate": "Konfiguration generieren", + "output": "Konfigurationsausgabe", + "usage_title": "Verbindungsdetails", + "generated": "Konfiguration generiert", + "server_required": "Serveradresse ist erforderlich", + "nothing_to_copy": "Generieren Sie zuerst eine Konfiguration", + "bundles_title": "Agent-Pakete", + "new_bundle": "Neues Paket", + "editor_title": "Paket-Editor", + "empty_state": "Wählen Sie links ein Paket aus oder erstellen Sie ein neues, um zu beginnen.", + "loading": "Wird geladen…", + "no_bundles": "Noch keine Pakete. Erstellen Sie Ihr erstes Paket.", + "bundle_name": "Paketname", + "bundle_name_hint": "Nur interne Bezeichnung — wird Endbenutzern nicht angezeigt.", + "short_link": "Kurzer Download-Link", + "short_link_hint": "Wird in der öffentlichen URL (/d/…) verwendet. Nur Kleinbuchstaben, Zahlen und Bindestriche (2–32 Zeichen). Wird automatisch aus dem Paketnamen übernommen — kürzen Sie ihn für einfacheres Teilen (z. B. acme).", + "branding_section": "Branding", + "company_name": "Unternehmens-/Markenname", + "short_text": "Kurzbeschreibung", + "contact_email": "Kontakt-E-Mail", + "contact_phone": "Kontakttelefon", + "contact_url": "Kontaktwebsite", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG oder WebP. Maximal 256 KB.", + "logo_clear": "Logo entfernen", + "primary_color": "Primärfarbe", + "accent_color": "Kopfzeilenfarbe", + "default_lang": "Standardsprache", + "allow_unattended": "Unbeaufsichtigten Zugriff erlauben", + "allow_unattended_hint": "Wenn aktiviert, zeigt der Agent ein dauerhaftes Passwort für den Operatorzugriff an.", + "save": "Paket speichern", + "revoke": "Widerrufen", + "unrevoke": "Wieder aktivieren", + "revoked": "Widerrufen", + "preview_title": "Live-Vorschau", + "preview_hint": "Ungefähres Aussehen des Agentfensters für Endbenutzer.", + "preview_default_name": "BetterDesk-Support", + "preview_status_ready": "Bereit", + "preview_id": "Ihre ID", + "preview_password": "Passwort", + "preview_chat": "Mit Support chatten", + "preview_settings": "Einstellungen (nur Admin)", + "preview_quit": "Beenden (nur Admin)", + "download_link_title": "Download-Link", + "download_link_hint": "Teilen Sie diesen Link mit Endbenutzern. Sie sehen eine gebrandete Download-Seite. Alte Hex-Links funktionieren weiterhin, wenn Sie den kurzen Link ändern.", + "open_portal": "Öffnen", + "created": "Paket erstellt", + "saved": "Paket gespeichert", + "deleted": "Paket gelöscht", + "revoked_ok": "Paket widerrufen", + "unrevoked_ok": "Paket wieder aktiviert", + "link_copied": "Link in die Zwischenablage kopiert", + "copy_failed": "Automatisches Kopieren fehlgeschlagen — bitte manuell kopieren", + "unsaved_confirm": "Nicht gespeicherte Änderungen verwerfen?", + "confirm_revoke": "Dieses Paket widerrufen? Der Download-Link funktioniert danach nicht mehr.", + "confirm_unrevoke": "Dieses Paket wieder aktivieren?", + "confirm_delete": "Dieses Paket dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.", "errors": { - "forbidden_title": "Zugriff verweigert", - "forbidden_message": "Sie haben keine Berechtigung, auf diese Seite zuzugreifen.", - "not_found_title": "Seite nicht gefunden", - "not_found_message": "Die gesuchte Seite existiert nicht oder wurde verschoben.", - "server_error_title": "Serverfehler", - "server_error_message": "Etwas ist schiefgelaufen. Bitte versuchen Sie es später erneut.", - "go_home": "Zur Startseite", - "try_again": "Erneut versuchen", - "load_devices_failed": "Geräte konnten nicht geladen werden", - "load_key_failed": "Schlüssel konnte nicht geladen werden", - "load_qr_failed": "QR-Code konnte nicht geladen werden", - "load_audit_failed": "Audit-Protokoll konnte nicht geladen werden", - "load_users_failed": "Benutzer konnten nicht geladen werden", - "load_folders_failed": "Ordner konnten nicht geladen werden", - "download_failed": "Download fehlgeschlagen", - "logout_failed": "Abmeldung fehlgeschlagen", - "password_change_failed": "Passwortänderung fehlgeschlagen", - "language_change_failed": "Sprachwechsel fehlgeschlagen", - "ban_failed": "Gerät konnte nicht gesperrt werden", - "unban_failed": "Gerät konnte nicht entsperrt werden", - "delete_failed": "Löschen fehlgeschlagen", - "change_id_failed": "Geräte-ID konnte nicht geändert werden", - "bulk_delete_failed": "Geräte konnten nicht gelöscht werden", - "sync_failed": "Synchronisierung fehlgeschlagen", - "error": "Fehler", - "not_found": "Device not found", - "server_error": "Serverfehler", - "load_device_failed": "Gerätedetails konnten nicht geladen werden", - "load_orgs_failed": "Organisationen konnten nicht geladen werden" + "validation_failed": "Validierung fehlgeschlagen", + "name_required": "Paketname ist erforderlich", + "company_name_required": "Unternehmensname ist erforderlich", + "logo_invalid": "Das Logo muss eine gültige Bilddatei sein", + "logo_too_large": "Das Logo darf höchstens 256 KB groß sein", + "logo_read_failed": "Logodatei konnte nicht gelesen werden", + "primary_color_invalid": "Primärfarbe muss ein Hex-Wert sein (z. B. #2563eb)", + "accent_color_invalid": "Kopfzeilenfarbe muss ein Hex-Wert sein (z. B. #1e293b)", + "contact_url_invalid": "Kontaktwebsite muss eine gültige URL sein", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "server_host_required": "Öffentliche Serveradresse ist erforderlich", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "slug_invalid": "Der kurze Link darf nur Kleinbuchstaben, Zahlen und Bindestriche enthalten", + "slug_too_short": "Der kurze Link muss mindestens 2 Zeichen haben", + "slug_too_long": "Der kurze Link darf höchstens 32 Zeichen haben", + "slug_taken": "Dieser kurze Link wird bereits von einem anderen Paket verwendet" }, - "remote": { - "title": "Dashboard", - "connecting": "Verbinde...", - "waiting_password": "Warte auf Passwort", - "authenticating": "Authentifiziere...", - "streaming": "Verbunden", - "disconnected": "Getrennt", - "error": "Fehler", - "status_idle": "Bereit", - "password_required": "Passwort ist erforderlich", - "enter_password_for": "Passwort für Gerät eingeben", - "password_placeholder": "Passwort eingeben", - "connect": "Verbinden", - "reconnect": "Erneut verbinden", - "disconnect": "Trennen", - "back_to_devices": "Zurück zu Geräten", - "fullscreen": "Vollbild", - "toggle_audio": "Audio umschalten", - "send_keys": "Tasten senden", - "scale_mode": "Skalierungsmodus", - "scale_fit": "An Fenster anpassen", - "scale_fill": "Fenster ausfüllen", - "scale_original": "Originalgröße (1:1)", - "scale_stretch": "Strecken", - "actions": "Aktionen", - "lock_screen": "Bildschirm sperren", - "restart_remote": "Remote-Gerät neu starten", - "refresh_screen": "Bildschirm aktualisieren", - "clipboard_paste": "Aus Zwischenablage einfügen", - "block_input": "Eingabe blockieren", - "display_settings": "Anzeigeeinstellungen", - "image_quality": "Bildqualität", - "quality_best": "Beste Qualität", - "quality_balanced": "Ausgewogen", - "quality_low": "Leistung", - "show_cursor": "Remote-Cursor anzeigen", - "lock_after_session": "Nach Sitzung sperren", - "privacy_mode": "Datenschutzmodus", - "disable_clipboard": "Zwischenablage deaktivieren", - "chat": "Chat", - "chat_placeholder": "Nachricht eingeben...", - "record": "Bildschirm aufnehmen", - "view_only": "Nur anzeigen", - "pin_toolbar": "Symbolleiste anheften", - "monitors": "Monitors", - "select_monitor": "Monitor auswählen", - "quality_speed": "Geschwindigkeit", - "quality_quality": "Qualität", - "recording_started": "Aufzeichnung gestartet", - "recording_stopped": "Aufzeichnung gestoppt", - "download_recording": "Aufzeichnung herunterladen", - "e2e_encrypted": "Ende-zu-Ende verschlüsselt", - "e2e_key_exchange": "Schlüsselaustausch läuft...", - "confirm_restart": "Sind Sie sicher, dass Sie das Remote-Gerät neu starten möchten?", - "webcodecs_not_supported": "Ihr Browser unterstützt die WebCodecs-API nicht. Bitte verwenden Sie Chrome 94+ oder Edge 94+.", - "webcodecs_insecure_context": "WebCodecs über HTTP nicht verfügbar. Video verwendet Software-Fallback. Für beste Leistung verwenden Sie HTTPS.", - "webcodecs_fallback_active": "Software-Videodecoder aktiv (eingeschränkte Leistung)", - "click_to_start": "Zum Starten klicken", - "autoplay_blocked": "Der Browser erfordert eine Benutzerinteraktion, um Video und Audio abzuspielen.", - "start_playback": "Wiedergabe starten", - "new_connection": "Neue Verbindung", - "device_id_placeholder": "Geräte-ID eingeben", - "http_warning": "HTTP-Modus: begrenzt auf H.264 Software-Dekodierung (~15 FPS). HTTPS für volle Leistung verwenden (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Dateiübertragung", - "file_upload": "Hochladen", - "file_download": "Herunterladen", - "file_empty": "Dieser Ordner ist leer", - "file_transfers": "Übertragungen", - "file_complete": "Abgeschlossen", - "file_error": "Übertragung fehlgeschlagen", - "file_show_hidden": "Versteckte Dateien anzeigen", - "file_new_folder": "Neuer Ordner", - "file_new_folder_prompt": "Ordnername eingeben:", - "file_parent": "Übergeordneter Ordner", - "file_root": "Stammverzeichnis", - "file_rename": "Umbenennen", - "file_rename_prompt": "Neuen Namen eingeben:", - "file_delete_confirm": "Möchten Sie dieses Element wirklich löschen?", - "file_cancelled": "Übertragung abgebrochen", - "2fa_required": "Zwei-Faktor-Code erforderlich", - "2fa_hint": "Geben Sie den sechsstelligen TOTP-Code ein, um die Sitzung fortzusetzen.", - "2fa_invalid": "Ungültiger 2FA-Code", - "verify": "Verify", - "use_cdap_fallback": "CDAP-Viewer verwenden", - "cdap_fallback_hint": "Öffnet den einfachen JPEG-Polling-Viewer, der bd-signal/CDAP statt des RustDesk-Relays verwendet. Nützlich, wenn der Peer auf dem Relay offline, aber über den Agent-Verwaltungskanal erreichbar ist.", - "clipboard_empty": "Zwischenablage ist leer", - "clipboard_denied": "Zugriff auf die Zwischenablage verweigert. HTTPS erforderlich oder Berechtigung nicht erteilt.", - "file_loading": "Wird geladen...", - "file_timeout": "Das entfernte Gerät hat nicht geantwortet. Dateiübertragung wird möglicherweise nicht unterstützt oder ist auf dem entfernten Computer deaktiviert.", - "codec": "Video-Codec", - "codec_auto": "Automatisch (empfohlen)" + "legacy_title": "Client-Konfigurationsgenerator", + "background_color": "Fensterhintergrund", + "build_error_hint": "Build-Fehler", + "build_status_building": "Wird erstellt", + "build_status_failed": "Fehlgeschlagen", + "build_status_pending": "In Warteschlange", + "build_status_ready": "Bereit", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} fehlgeschlagen", + "builds_title": "Client-Builds", + "connection_section": "Serververbindung", + "enrollment_per_device": "Pro Gerät — in Registrierungen genehmigen", + "enrollment_token": "Geräteregistrierung", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Geräte im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "enrollment_token_pending": "Pro Gerät nach Genehmigung", + "enrollment_token_set": "Pro Gerät — in Registrierungen genehmigen", + "header_text_color": "Kopfzeilentextfarbe", + "rebuild_all": "Alle neu erstellen", + "rebuild_confirm": "Alle Plattform-Installer für dieses Paket neu erstellen? Vorhandene fertige Artefakte werden ersetzt.", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "rebuilding_all": "Neubuilds werden eingereiht…", + "server_host": "Öffentliche Serveradresse", + "server_host_hint": "Domainname oder öffentliche IP-Adresse, unter der Endbenutzer Ihren BetterDesk-Server erreichen. Port wird aus der Konsolenkonfiguration übernommen.", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "status_ready_color": "Farbe des Bereit-Indikators", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "use_https": "HTTPS / WSS verwenden (empfohlen)", + "preview_help": "Hilfe anfordern" + }, + "server": { + "port": "Port", + "api_port": "API-Port", + "id_server": "ID-Server", + "relay_server": "Relay-Server", + "api_key": "API-Schlüssel" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Gesperrt", + "running": "Läuft", + "stopped": "Gestoppt", + "unknown": "Unbekannt", + "checking": "Prüfe...", + "label": "Status", + "no_signal": "Kein Signal" + }, + "actions": { + "refresh": "Aktualisieren", + "copy": "Kopieren", + "connect": "Verbinden", + "connect_desktop": "Über Desktop-Client verbinden", + "remote_viewer": "Remote-Ansicht", + "web_remote": "Web-Remote", + "details": "Gerätedetails", + "edit": "Bearbeiten", + "delete": "Löschen", + "ban": "Sperren", + "unban": "Entsperren", + "save": "Speichern", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "close": "Schließen", + "clear": "Leeren", + "ok": "OK", + "saved": "Gespeichert", + "back": "Zurück", + "create": "Erstellen", + "dismiss": "Verwerfen", + "view_all": "Alle anzeigen", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "gerade eben", + "seconds_ago": "Vor {count} Sekunde(n)", + "minutes_ago": "Vor {count} Minute(n)", + "hours_ago": "Vor {count} Stunde(n)", + "days_ago": "Vor {count} Tag(en)", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "add_user": "Benutzer hinzufügen", + "edit_user": "Benutzer bearbeiten", + "username": "Benutzername", + "username_placeholder": "Benutzername eingeben", + "username_hint": "3-32 Zeichen, nur Buchstaben, Zahlen und Unterstriche", + "password": "Passwort", + "password_placeholder": "Passwort eingeben", + "password_hint": "Mindestens 8 Zeichen mit Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen", + "password_leave_empty": "Leer lassen, um aktuelles beizubehalten", + "role": "Rolle", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Betrachter", + "role_pro": "Pro", + "role_hint": "Betrachter können nur Daten einsehen, Operatoren können Geräte verwalten, Administratoren haben vollen Zugriff", + "created": "Erstellt", + "last_login": "Letzte Anmeldung", + "never": "Nie", + "actions": "Aktionen", + "create": "Erstellen", + "edit": "Bearbeiten", + "reset_password": "Passwort zurücksetzen", + "new_password": "Neues Passwort", + "delete_title": "Gerät löschen", + "delete_confirm": "Sind Sie sicher, dass Sie Benutzer {username} löschen möchten?", + "delete_success": "Gerät erfolgreich gelöscht", + "user_created": "Benutzer erfolgreich erstellt", + "user_updated": "Benutzer erfolgreich aktualisiert", + "password_reset_success": "Passwort erfolgreich zurückgesetzt", + "empty_title": "Keine Geräte gefunden", + "empty_text": "Keine Geräte entsprechen Ihren aktuellen Filtern", + "fill_required": "Bitte füllen Sie alle Pflichtfelder aus", + "invalid_username": "Benutzername muss 3-32 Zeichen lang sein, nur Buchstaben, Zahlen und Unterstriche", + "username_exists": "Benutzername existiert bereits", + "weak_password": "Passwort ist zu schwach", + "password_too_short": "Passwort muss mindestens 8 Zeichen lang sein", + "invalid_role": "Ungültige Rolle", + "cannot_demote_self": "Sie können sich nicht selbst herabstufen", + "cannot_delete_self": "Sie können Ihr eigenes Konto nicht löschen", + "last_admin": "Der letzte Administrator kann nicht gelöscht werden", + "admin_only": "Diese Funktion ist nur für Administratoren verfügbar", + "password_required": "Passwort ist erforderlich", + "not_found": "Device not found", + "strength_weak": "Schwach", + "strength_medium": "Mittel", + "strength_strong": "Stark", + "security_tips_title": "Sicherheitsempfehlungen", + "tip_strong_passwords": "Verwenden Sie starke, einzigartige Passwörter für jeden Benutzer", + "tip_unique_accounts": "Erstellen Sie individuelle Konten für jede Person", + "tip_viewer_role": "Verwenden Sie die Betrachter-Rolle für Benutzer, die nur Lesezugriff benötigen", + "tip_operator_role": "Verwenden Sie die Operator-Rolle für Benutzer, die Geräte verwalten, aber keine Benutzer verwalten müssen", + "tip_audit_logs": "Überprüfen Sie regelmäßig die Audit-Protokolle auf verdächtige Aktivitäten", + "role_super_admin": "Super Admin", + "role_server_admin": "Serveradministrator", + "role_global_admin": "Globaler Administrator", + "organizations": "Organisationen", + "user_organizations": "Organisationen für {username}", + "no_organizations": "Keine Organisationen", + "org_removed": "Benutzer aus Organisation entfernt", + "server_role_label": "Serverrolle", + "server_role_hint": "Legt fest, was der Benutzer in der gesamten Konsole tun kann (Panelzugriff, Serverkonfiguration, Audit usw.).", + "org_membership_section": "Organisationsmitgliedschaft", + "org_membership_hint": "Ein Benutzer kann mehreren Organisationen angehören. Die Organisationsrolle steuert nur Berechtigungen innerhalb dieser Organisation und ist unabhängig von der Serverrolle oben.", + "column_organizations": "Organisationen", + "no_orgs_short": "—", + "org_count_one": "{count} Organisation", + "org_count_many": "{count} Organisationen", + "all_orgs_assigned": "Der Benutzer ist bereits Mitglied jeder Organisation.", + "user_groups": "Benutzergruppen", + "user_groups_hint": "Benutzergruppen können Zugriff auf ausgewählte Gerätegruppen gewähren.", + "loading_user_groups": "Benutzergruppen werden geladen...", + "no_user_groups": "Keine Benutzergruppen verfügbar", + "create_user_group": "Gruppe erstellen", + "edit_user_group": "Benutzergruppe bearbeiten", + "delete_user_group": "Benutzergruppe löschen", + "delete_user_group_confirm": "Benutzergruppe {name} löschen? Mitglieder verlieren den über diese Gruppe gewährten Zugriff.", + "user_group_created": "Benutzergruppe erstellt", + "user_group_updated": "Benutzergruppe aktualisiert", + "user_group_deleted": "Benutzergruppe gelöscht", + "user_group_not_found": "Benutzergruppe nicht gefunden", + "group_name": "Gruppenname", + "group_name_placeholder": "Operatoren", + "group_note": "Note", + "group_note_placeholder": "Optionale Notiz", + "group_name_required": "Gruppenname ist erforderlich", + "group_members_count": "{count} Mitglieder", + "provider": "Anbieter", + "provider_local": "Lokal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Vom Identitätsanbieter verwaltet", + "provider_managed_hint": "Dieses Konto wird von einem externen Identitätsanbieter (LDAP/AD oder SSO) verwaltet. Passwort und Rolle werden vom Anbieter gesteuert und können hier nicht geändert werden." + }, + "folders": { + "title": "Dashboard", + "create": "Erstellen", + "edit": "Bearbeiten", + "delete": "Löschen", + "name": "Folder Name", + "name_placeholder": "Ordnername eingeben", + "name_required": "Name ist erforderlich", + "name_too_long": "Ordnername ist zu lang (max. 50 Zeichen)", + "color": "Farbe", + "icon": "Symbol", + "not_found": "Device not found", + "delete_confirm": "Sind Sie sicher, dass Sie diesen Ordner löschen möchten? Geräte werden daraus entfernt.", + "delete_success": "Gerät erfolgreich gelöscht", + "created": "Erstellt", + "updated": "Ordner erfolgreich aktualisiert", + "no_devices_selected": "Keine Geräte ausgewählt", + "devices_moved": "Geräte erfolgreich verschoben", + "device_assigned": "Gerät dem Ordner zugewiesen", + "unassigned": "Nicht zugewiesen", + "all_devices": "Alle Geräte", + "drag_hint": "Ziehen Sie Geräte in Ordner, um sie zu organisieren", + "move_to": "Verschieben nach", + "toggle_sidebar": "Seitenleiste umschalten" + }, + "errors": { + "forbidden_title": "Zugriff verweigert", + "forbidden_message": "Sie haben keine Berechtigung, auf diese Seite zuzugreifen.", + "not_found_title": "Seite nicht gefunden", + "not_found_message": "Die gesuchte Seite existiert nicht oder wurde verschoben.", + "server_error_title": "Serverfehler", + "server_error_message": "Etwas ist schiefgelaufen. Bitte versuchen Sie es später erneut.", + "go_home": "Zur Startseite", + "try_again": "Erneut versuchen", + "load_devices_failed": "Geräte konnten nicht geladen werden", + "load_key_failed": "Schlüssel konnte nicht geladen werden", + "load_qr_failed": "QR-Code konnte nicht geladen werden", + "load_audit_failed": "Audit-Protokoll konnte nicht geladen werden", + "load_users_failed": "Benutzer konnten nicht geladen werden", + "load_folders_failed": "Ordner konnten nicht geladen werden", + "download_failed": "Download fehlgeschlagen", + "logout_failed": "Abmeldung fehlgeschlagen", + "password_change_failed": "Passwortänderung fehlgeschlagen", + "language_change_failed": "Sprachwechsel fehlgeschlagen", + "ban_failed": "Gerät konnte nicht gesperrt werden", + "unban_failed": "Gerät konnte nicht entsperrt werden", + "delete_failed": "Löschen fehlgeschlagen", + "change_id_failed": "Geräte-ID konnte nicht geändert werden", + "bulk_delete_failed": "Geräte konnten nicht gelöscht werden", + "sync_failed": "Synchronisierung fehlgeschlagen", + "error": "Fehler", + "not_found": "Device not found", + "server_error": "Serverfehler", + "load_device_failed": "Gerätedetails konnten nicht geladen werden", + "load_orgs_failed": "Organisationen konnten nicht geladen werden" + }, + "remote": { + "title": "Dashboard", + "connecting": "Verbinde...", + "waiting_password": "Warte auf Passwort", + "authenticating": "Authentifiziere...", + "streaming": "Verbunden", + "disconnected": "Getrennt", + "error": "Fehler", + "status_idle": "Bereit", + "password_required": "Passwort ist erforderlich", + "enter_password_for": "Passwort für Gerät eingeben", + "password_placeholder": "Passwort eingeben", + "connect": "Verbinden", + "reconnect": "Erneut verbinden", + "disconnect": "Trennen", + "back_to_devices": "Zurück zu Geräten", + "fullscreen": "Vollbild", + "toggle_audio": "Audio umschalten", + "send_keys": "Tasten senden", + "scale_mode": "Skalierungsmodus", + "scale_fit": "An Fenster anpassen", + "scale_fill": "Fenster ausfüllen", + "scale_original": "Originalgröße (1:1)", + "scale_stretch": "Strecken", + "actions": "Aktionen", + "lock_screen": "Bildschirm sperren", + "restart_remote": "Remote-Gerät neu starten", + "refresh_screen": "Bildschirm aktualisieren", + "clipboard_paste": "Aus Zwischenablage einfügen", + "block_input": "Eingabe blockieren", + "display_settings": "Anzeigeeinstellungen", + "image_quality": "Bildqualität", + "quality_best": "Beste Qualität", + "quality_balanced": "Ausgewogen", + "quality_low": "Leistung", + "show_cursor": "Remote-Cursor anzeigen", + "lock_after_session": "Nach Sitzung sperren", + "privacy_mode": "Datenschutzmodus", + "disable_clipboard": "Zwischenablage deaktivieren", + "chat": "Chat", + "chat_placeholder": "Nachricht eingeben...", + "record": "Bildschirm aufnehmen", + "view_only": "Nur anzeigen", + "pin_toolbar": "Symbolleiste anheften", + "monitors": "Monitors", + "select_monitor": "Monitor auswählen", + "quality_speed": "Geschwindigkeit", + "quality_quality": "Qualität", + "recording_started": "Aufzeichnung gestartet", + "recording_stopped": "Aufzeichnung gestoppt", + "download_recording": "Aufzeichnung herunterladen", + "e2e_encrypted": "Ende-zu-Ende verschlüsselt", + "e2e_key_exchange": "Schlüsselaustausch läuft...", + "confirm_restart": "Sind Sie sicher, dass Sie das Remote-Gerät neu starten möchten?", + "webcodecs_not_supported": "Ihr Browser unterstützt die WebCodecs-API nicht. Bitte verwenden Sie Chrome 94+ oder Edge 94+.", + "webcodecs_insecure_context": "WebCodecs über HTTP nicht verfügbar. Video verwendet Software-Fallback. Für beste Leistung verwenden Sie HTTPS.", + "webcodecs_fallback_active": "Software-Videodecoder aktiv (eingeschränkte Leistung)", + "click_to_start": "Zum Starten klicken", + "autoplay_blocked": "Der Browser erfordert eine Benutzerinteraktion, um Video und Audio abzuspielen.", + "start_playback": "Wiedergabe starten", + "new_connection": "Neue Verbindung", + "device_id_placeholder": "Geräte-ID eingeben", + "http_warning": "HTTP-Modus: begrenzt auf H.264 Software-Dekodierung (~15 FPS). HTTPS für volle Leistung verwenden (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Dateiübertragung", + "file_upload": "Hochladen", + "file_download": "Herunterladen", + "file_empty": "Dieser Ordner ist leer", + "file_transfers": "Übertragungen", + "file_complete": "Abgeschlossen", + "file_error": "Übertragung fehlgeschlagen", + "file_show_hidden": "Versteckte Dateien anzeigen", + "file_new_folder": "Neuer Ordner", + "file_new_folder_prompt": "Ordnername eingeben:", + "file_parent": "Übergeordneter Ordner", + "file_root": "Stammverzeichnis", + "file_rename": "Umbenennen", + "file_rename_prompt": "Neuen Namen eingeben:", + "file_delete_confirm": "Möchten Sie dieses Element wirklich löschen?", + "file_cancelled": "Übertragung abgebrochen", + "2fa_required": "Zwei-Faktor-Code erforderlich", + "2fa_hint": "Geben Sie den sechsstelligen TOTP-Code ein, um die Sitzung fortzusetzen.", + "2fa_invalid": "Ungültiger 2FA-Code", + "verify": "Verify", + "use_cdap_fallback": "CDAP-Viewer verwenden", + "cdap_fallback_hint": "Öffnet den einfachen JPEG-Polling-Viewer, der bd-signal/CDAP statt des RustDesk-Relays verwendet. Nützlich, wenn der Peer auf dem Relay offline, aber über den Agent-Verwaltungskanal erreichbar ist.", + "clipboard_empty": "Zwischenablage ist leer", + "clipboard_denied": "Zugriff auf die Zwischenablage verweigert. HTTPS erforderlich oder Berechtigung nicht erteilt.", + "file_loading": "Wird geladen...", + "file_timeout": "Das entfernte Gerät hat nicht geantwortet. Dateiübertragung wird möglicherweise nicht unterstützt oder ist auf dem entfernten Computer deaktiviert.", + "codec": "Video-Codec", + "codec_auto": "Automatisch (empfohlen)" + }, + "branding": { + "identity_title": "Markenidentität", + "identity_desc": "Passen Sie den Anwendungsnamen und die Beschreibung an, die in der Konsole angezeigt werden", + "app_name": "Anwendungsname", + "app_description": "Anwendungsbeschreibung", + "logo_title": "Logo", + "logo_desc": "Wählen Sie, wie Ihr Logo in der Seitenleiste und auf der Anmeldeseite erscheint", + "logo_type_icon": "Material-Symbol", + "logo_type_svg": "SVG-Code", + "logo_type_image": "Bild-URL", + "logo_icon_name": "Symbolname", + "logo_icon_hint": "Geben Sie einen Material Icons-Namen ein (z.B. dns, cloud, security). Siehe fonts.google.com/icons", + "logo_svg_code": "SVG-Code", + "logo_svg_hint": "Fügen Sie Ihr SVG-Markup hier ein. Unterstützt vollständige -Elemente mit Pfaden und Stilen.", + "logo_image_upload": "Bild hochladen", + "logo_image_choose": "Bilddatei auswählen", + "logo_image_hint": "PNG, JPG, GIF, WebP oder SVG. Max. 1,5 MB. Das Bild wird als Base64-Daten gespeichert.", + "logo_image_url": "Bilddaten / URL", + "logo_image_url_hint": "Wird automatisch beim Hochladen ausgefüllt oder manuell als URL eingegeben.", + "logo_image_too_large": "Bild ist zu groß. Maximale Größe beträgt 1,5 MB.", + "logo_image_invalid_type": "Ungültiger Dateityp. Verwenden Sie PNG, JPG, GIF, WebP oder SVG.", + "preview": "Vorschau", + "colors_title": "Farbschema", + "colors_desc": "Passen Sie die Farbpalette an. Leer lassen für Standardwerte.", + "colors_backgrounds": "Hintergründe", + "colors_text": "Text", + "colors_accents": "Akzentfarben", + "colors_borders": "Rahmen", + "import_export_title": "Importieren / Exportieren", + "import_export_desc": "Speichern Sie Ihr Theme als JSON-Datei oder importieren Sie eines von einer anderen Instanz", + "export_theme": "Theme exportieren", + "import_theme": "Theme importieren", + "reset_defaults": "Auf Standardwerte zurücksetzen", + "save_branding": "Branding speichern", + "saved": "Gespeichert", + "exported": "Theme exportiert", + "imported": "Theme erfolgreich importiert. Wird neu geladen...", + "import_error": "Theme konnte nicht importiert werden. Ungültiges Dateiformat.", + "reset_confirm": "Sind Sie sicher, dass Sie das Branding auf die Standardwerte zurücksetzen möchten? Dies kann nicht rückgängig gemacht werden.", + "reset_success": "Branding auf Standardwerte zurückgesetzt. Wird neu geladen...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Primärer Text, der als Markenlogo angezeigt wird", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Sekundärer Text unter dem Logo (z. B. Produktname oder Slogan)", + "logo_upload_success": "Logo erfolgreich hochgeladen.", + "typography_title": "Typography", + "typography_desc": "Wählen Sie Schriftarten für Überschriften und Fließtext. Schriftarten werden zur Selbstbereitstellung auf den Server heruntergeladen.", + "font_heading": "Schriftart für Überschriften", + "font_heading_hint": "Verwendet für Überschriften (H1–H6) und Textlogo", + "font_body": "Body Font", + "font_body_hint": "Verwendet für Fließtext und UI-Elemente", + "font_search_placeholder": "Schriftarten suchen...", + "font_system_default": "Systemstandard", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "Schriftarten auf dem Server heruntergeladen", + "agent_desc": "Das öffentliche Agent-Downloadportal für Endbenutzer anpassen.", + "agent_show_powered": "\"Powered by BetterDesk\" anzeigen", + "agent_show_powered_hint": "Die BetterDesk-Zuschreibung in der Fußzeile des Downloadportals anzeigen.", + "agent_title": "Agent-Downloadseite", + "background_desc": "Ein Konsolen-Hintergrundbild, Farbverlauf oder einfarbigen Hintergrund festlegen. Karten schweben darüber.", + "background_title": "Hintergrund & Erscheinungsbild", + "bg_blur": "Hintergrundunschärfe", + "bg_color": "Hintergrundfarbe", + "bg_gradient": "CSS-Farbverlauf", + "bg_gradient_hint": "Beliebiger gültiger CSS-Farbverlauf, z. B. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_choose": "Bilddatei auswählen", + "bg_image_hint": "PNG, JPG, WebP oder GIF. Maximal 8 MB. Auf dem Server gespeichert.", + "bg_image_invalid_type": "Ungültiger Dateityp. Bitte PNG, JPG, WebP oder GIF verwenden.", + "bg_image_too_large": "Bild ist zu groß. Maximale Größe beträgt 8 MB.", + "bg_image_upload": "Hintergrundbild hochladen", + "bg_image_url": "Bildpfad / URL", + "bg_overlay": "Dunkle Überlagerung", + "bg_overlay_hint": "Verdunkelt den Hintergrund für bessere Lesbarkeit des Textes.", + "bg_size": "Bildgröße", + "bg_size_auto": "Auto (Original)", + "bg_size_contain": "Einpassen (Contain)", + "bg_size_cover": "Abdecken (Bildschirm füllen)", + "bg_type_color": "Einfarbig", + "bg_type_gradient": "Farbverlauf", + "bg_type_image": "Bild", + "bg_type_none": "Keiner", + "bg_upload_success": "Hintergrundbild erfolgreich hochgeladen.", + "custom_css_desc": "Erweitert: Benutzerdefiniertes CSS einfügen, das auf der gesamten Konsole und der Anmeldeseite angewendet wird.", + "custom_css_hint": "Mit Vorsicht verwenden. Ungültige oder unsichere Regeln werden bereinigt. Maximal 20.000 Zeichen.", + "custom_css_title": "Benutzerdefiniertes CSS", + "footer_desc": "Eine benutzerdefinierte Fußzeile hinzufügen, die auf dem Anmeldebildschirm und in der Konsolenseitenleiste angezeigt wird.", + "footer_text": "Fußzeilentext", + "footer_text_hint": "z. B. ein Urheberrechtshinweis oder Firmenname.", + "footer_title": "Fußzeile & Copyright", + "login_bg_inherit": "Wie die Konsole", + "login_desc": "Überschrift, Untertitel und Hintergrund des Anmeldebildschirms anpassen.", + "login_heading": "Anmeldeüberschrift", + "login_heading_placeholder": "Willkommen zurück", + "login_subheading": "Anmeldeuntertitel", + "login_subheading_placeholder": "Bei Ihrem Konto anmelden", + "login_title": "Anmeldeseite", + "powered_by": "Entwickelt von", + "show_powered": "BetterDesk-Zuschreibung anzeigen", + "show_powered_hint": "Den BetterDesk-Namen und die Version in der Anmeldefußzeile und Seitenleiste anzeigen." + }, + "device_detail": { + "tab_overview": "Übersicht", + "tab_tags": "Tags und Notizen", + "tab_actions": "Aktionen", + "section_identity": "Identität", + "section_network": "Netzwerk", + "section_timestamps": "Zeitstempel", + "section_connect": "Verbindung", + "section_manage": "Verwaltung", + "folder": "Ordner", + "status_tier": "Statusstufe", + "device_banned": "Dieses Gerät ist gesperrt", + "no_reason": "Kein Grund angegeben", + "tags": "Tags", + "no_tags": "Keine Tags diesem Gerät zugewiesen", + "tag_placeholder": "Tag-Namen eingeben...", + "add_tag": "Hinzufügen", + "tag_exists": "Dieses Tag existiert bereits", + "notes": "Notizen", + "notes_placeholder": "Notizen zu diesem Gerät hinzufügen...", + "danger_zone": "Gefahrenbereich", + "action_connect_web": "Web-Remote", + "action_connect_web_desc": "Über Browser-Remote-Desktop verbinden", + "action_native_remote": "BetterDesk-Fernzugriff", + "action_native_remote_desc": "Nativer JPEG-Stream — keine Plugins erforderlich", + "action_connect_desktop": "Desktop-Client", + "action_connect_desktop_desc": "In Desktop-Client-App öffnen", + "action_change_id_desc": "Geräte-Registrierungs-ID ändern", + "action_ban_desc": "Dieses Gerät am Verbinden hindern", + "action_unban_desc": "Diesem Gerät wieder erlauben, sich zu verbinden", + "action_delete_desc": "Dieses Gerät dauerhaft entfernen", + "tab_hardware": "Hardware", + "tab_metrics": "Metriken", + "section_system": "System", + "section_cpu": "Prozessor", + "section_memory": "Arbeitsspeicher", + "section_displays": "Bildschirme", + "section_encoding": "Encoding-Fähigkeiten", + "section_live_metrics": "Live-Metriken", + "section_current_usage": "Aktuelle Auslastung", + "section_usage_history": "Auslastungsverlauf", + "os": "Betriebssystem", + "version": "Version", + "cpu_model": "CPU-Modell", + "cpu_cores": "CPU-Kerne", + "cpu_freq": "CPU-Frequenz", + "total_memory": "Gesamtspeicher", + "metric_memory": "Arbeitsspeicher", + "metric_disk": "Festplatte", + "metrics_updated": "Aktualisiert", + "device_groups": "Gruppen", + "no_sysinfo": "Keine Hardwareinformationen verfügbar", + "no_sysinfo_hint": "Systeminfo erscheint, nachdem das Gerät einen Sysinfo-Bericht gesendet hat", + "no_metrics": "Keine Metriken verfügbar", + "no_metrics_hint": "Metriken erscheinen, nachdem das Gerät Heartbeat-Berichte gesendet hat", + "chart_oldest": "← Älteste", + "chart_newest": "Neueste →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Dateien", + "agent_lazy_hint": "Klicken Sie auf diesen Tab, um Live-Daten vom Agenten zu laden", + "agent_offline": "Agent ist offline", + "agent_timeout": "Agent hat nicht rechtzeitig geantwortet", + "agent_error": "Daten vom Agenten konnten nicht geladen werden", + "service_name": "Name", + "service_display": "Anzeigename", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "device_id": "Geräte-ID", + "hostname": "Hostname", + "os": "Betriebssystem", + "cpu": "Processor", + "cpu_cores": "CPU-Kerne", + "cpu_usage": "CPU-Auslastung", + "memory": "Memory", + "memory_total": "Gesamtspeicher", + "memory_used": "Belegter Speicher", + "memory_available": "Verfügbarer Speicher", + "memory_usage": "Speicherauslastung", + "swap": "Swap", + "disks": "Festplatten", + "disk_count": "Festplattenanzahl", + "network": "Network Adapters", + "network_interfaces": "Netzwerkschnittstellen", + "software": "Software", + "software_count": "Installierte Software", + "system": "System", + "kernel": "Kernel", + "architecture": "Architektur", + "uptime": "Uptime", + "frequency": "Frequenz", + "physical_cores": "Physische Kerne", + "logical_cores": "Logische Kerne", + "model": "Modell", + "usage": "Auslastung", + "total": "Gesamt", + "used": "Belegt", + "available": "Verfügbar", + "mount_point": "Einhängepunkt", + "removable": "Wechselbar", + "mac_address": "MAC-Adresse", + "ip_addresses": "IP-Adressen", + "traffic": "Datenverkehr", + "collect_now": "Jetzt erfassen", + "collector_running": "Erfassung läuft", + "collector_stopped": "Erfassung gestoppt", + "last_upload": "Letzter Upload", + "total_uploads": "Gesamt", + "last_seen": "Zuletzt gesehen", + "collected_at": "Erfasst am", + "no_data": "No hardware data available", + "no_devices": "Keine Geräte mit Inventardaten gefunden", + "detail_title": "Geräte-Inventardetails", + "telemetry": "Telemetrie", + "view_detail": "Details anzeigen", + "export": "Exportieren", + "refresh": "Aktualisieren" + }, + "tickets": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "create": "Erstellen", + "edit": "Bearbeiten", + "delete": "Löschen", + "detail": "Ticketdetails", + "ticket_id": "Ticket-ID", + "ticket_title": "Titel", + "description": "Beschreibung", + "status": "Status", + "priority": "Priorität", + "category": "Kategorie", + "assigned_to": "Zugewiesen an", + "created_by": "Erstellt von", + "device": "Gerät", + "sla_due": "SLA-Fälligkeit", + "created_at": "Erstellt", + "updated_at": "Aktualisiert", + "resolved_at": "Gelöst", + "closed_at": "Geschlossen", + "status_open": "Offen", + "status_in_progress": "In Bearbeitung", + "status_resolved": "Gelöst", + "status_closed": "Geschlossen", + "priority_low": "Niedrig", + "priority_medium": "Mittel", + "priority_high": "Hoch", + "priority_critical": "Kritisch", + "category_general": "Allgemein", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Netzwerk", + "category_access": "Zugang", + "category_other": "Sonstiges", + "comments": "Kommentare", + "add_comment": "Kommentar hinzufügen", + "comment_placeholder": "Kommentar schreiben...", + "internal_note": "Interne Notiz (für Endbenutzer nicht sichtbar)", + "attachments": "Anhänge", + "upload_attachment": "Anhang hochladen", + "download": "Schlüssel herunterladen", + "connect_device": "Mit Gerät verbinden", + "no_tickets": "Keine Tickets gefunden", + "no_comments": "Noch keine Kommentare", + "no_attachments": "Keine Anhänge", + "title_required": "Titel ist erforderlich", + "delete_confirm": "Sind Sie sicher, dass Sie Ticket Nr. {id} löschen möchten?", + "delete_success": "Gerät erfolgreich gelöscht", + "created_success": "Ticket erfolgreich erstellt", + "updated_success": "Ticket erfolgreich aktualisiert", + "sla_overdue": "SLA überfällig", + "filter_all": "Alle", + "search_placeholder": "Geräte suchen...", + "assign_to_me": "Mir zuweisen", + "unassign": "Zuweisung aufheben", + "stats_total": "Gesamt", + "stats_open": "Offen", + "stats_in_progress": "In Bearbeitung", + "stats_resolved": "Gelöst", + "stats_closed": "Geschlossen" + }, + "activity": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "device": "Gerät", + "hostname": "Hostname", + "sessions": "Sitzungen", + "idle_time": "Leerlaufzeit", + "active_time": "Aktive Zeit", + "last_report": "Letzter Bericht", + "top_apps": "Top-Anwendungen", + "app_name": "Anwendungsname", + "window_title": "Fenstertitel", + "category": "Kategorie", + "duration": "Dauer", + "started_at": "Gestartet", + "ended_at": "Beendet", + "session_count": "Sitzungsanzahl", + "total_active": "Gesamtaktiv", + "total_idle": "Gesamtleerlauf", + "detail_count": "Detaileinträge", + "no_data": "No hardware data available", + "no_sessions": "Keine Sitzungen aufgezeichnet", + "filter_from": "Von", + "filter_to": "Bis", + "filter_apply": "Filter anwenden", + "hours": "Stunden", + "minutes": "Minuten", + "seconds": "Sekunden", + "category_browser": "Browser", + "category_productivity": "Produktivität", + "category_communication": "Kommunikation", + "category_development": "Entwicklung", + "category_media": "Medien", + "category_gaming": "Spiele", + "category_system": "System", + "category_other": "Sonstiges", + "summary": "Zusammenfassung", + "details": "Gerätedetails", + "refresh": "Aktualisieren", + "search": "Geräte suchen...", + "date_range": "Datumsbereich", + "device_id": "Geräte-ID", + "session_start": "Sitzungsbeginn", + "session_end": "Sitzungsende", + "user": "Benutzer", + "no_activity": "Keine Aktivität aufgezeichnet", + "reported_at": "Reported At", + "detail": "Ticketdetails", + "no_apps": "Keine Anwendungen" + }, + "automation": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "rules": "Alarmregeln", + "rules_subtitle": "Bedingungen definieren, die Benachrichtigungen auslösen", + "alerts": "Alarmverlauf", + "alerts_subtitle": "Ausgelöste Alarme anzeigen und bestätigen", + "commands": "Remote-Befehle", + "commands_subtitle": "Befehle an Remote-Geräte senden", + "smtp": "SMTP-Konfiguration", + "smtp_subtitle": "E-Mail-Benachrichtigungseinstellungen", + "rule_name": "Regelname", + "description": "Beschreibung", + "condition_type": "Bedingungstyp", + "condition_op": "Operator", + "condition_value": "Schwellenwert", + "severity": "Schweregrad", + "scope_device": "Zielgerät", + "scope_all": "Alle Geräte", + "cooldown": "Abklingzeit (Sekunden)", + "notify_emails": "Benachrichtigungs-E-Mails", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "create_rule": "Regel erstellen", + "edit_rule": "Regel bearbeiten", + "delete_rule": "Regel löschen", + "acknowledge": "Bestätigen", + "acknowledged": "Bestätigt", + "unacknowledged": "Unbestätigt", + "triggered_at": "Ausgelöst am", + "severity_info": "Info", + "severity_warning": "Warnung", + "severity_critical": "Kritisch", + "op_gt": "Größer als", + "op_gte": "Größer oder gleich", + "op_lt": "Kleiner als", + "op_lte": "Kleiner oder gleich", + "op_eq": "Gleich", + "op_neq": "Ungleich", + "type_cpu_usage": "CPU-Auslastung (%)", + "type_memory_usage": "Speicherauslastung (%)", + "type_disk_usage": "Festplattenauslastung (%)", + "type_offline_duration": "Offline-Dauer (s)", + "type_idle_duration": "Leerlaufdauer (s)", + "type_custom": "Benutzerdefiniert", + "command_type": "Befehlstyp", + "command_payload": "Befehl / Skript", + "command_result": "Ergebnis", + "command_status": "Status", + "send_command": "Befehl senden", + "status_pending": "Ausstehend", + "status_running": "Läuft", + "status_completed": "Abgeschlossen", + "status_failed": "Fehlgeschlagen", + "smtp_host": "SMTP-Host", + "smtp_port": "Port", + "smtp_secure": "TLS verwenden", + "smtp_user": "Benutzername", + "smtp_pass": "Passwort", + "smtp_from": "Absenderadresse", + "smtp_test": "Verbindung testen", + "smtp_save": "Konfiguration speichern", + "smtp_test_success": "Verbindung erfolgreich", + "smtp_test_failed": "Verbindung fehlgeschlagen", + "no_rules": "Keine Zuweisungsregeln.", + "no_alerts": "Keine Alarme ausgelöst", + "no_commands": "Keine Befehle gesendet", + "id_payload_required": "Geräte-ID und Payload sind erforderlich", + "no_commands_sent": "Noch keine Befehle gesendet" + }, + "file_transfer": { + "title": "Dashboard", + "transfers": "Übertragungen", + "new_transfer": "Neue Übertragung", + "upload": "Hochladen", + "download": "Schlüssel herunterladen", + "direction": "Direction", + "filename": "Dateiname", + "file_size": "Dateigröße", + "mime_type": "MIME-Typ", + "progress": "Fortschritt", + "status": "Status", + "device": "Gerät", + "initiated_by": "Gestartet von", + "created_at": "Erstellt", + "cancel": "Abbrechen", + "cancel_confirm": "Sind Sie sicher, dass Sie diese Übertragung abbrechen möchten?", + "download_file": "Datei herunterladen", + "browse_files": "Dateien durchsuchen", + "select_file": "Datei auswählen", + "select_device": "Gerät auswählen", + "no_transfers": "Keine Dateiübertragungen", + "status_pending": "Ausstehend", + "status_active": "Aktiv", + "status_completed": "Abgeschlossen", + "status_failed": "Fehlgeschlagen", + "status_cancelled": "Abgebrochen", + "bytes_transferred": "Übertragene Bytes", + "chunks": "Blöcke", + "transfer_started": "Übertragung gestartet", + "transfer_completed": "Übertragung abgeschlossen", + "transfer_failed": "Übertragung fehlgeschlagen", + "transfer_cancelled": "Übertragung abgebrochen", + "max_file_size": "Maximale Dateigröße: 4 GB", + "error_too_large": "Datei ist zu groß", + "error_no_device": "Kein Gerät ausgewählt", + "error_no_file": "Keine Datei ausgewählt" + }, + "network": { + "title": "Dashboard", + "targets": "Überwachungsziele", + "add_target": "Ziel hinzufügen", + "edit_target": "Ziel bearbeiten", + "delete_target": "Ziel löschen", + "delete_confirm": "Sind Sie sicher, dass Sie dieses Ziel löschen möchten?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Prüftyp", + "timeout": "Zeitlimit (ms)", + "interval": "Intervall (ms)", + "enabled": "Aktiviert", + "status": "Status", + "last_check": "Letzte Prüfung", + "last_rtt": "Letzte RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Erreichbar", + "status_down": "Nicht erreichbar", + "status_unknown": "Unbekannt", + "check_now": "Jetzt prüfen", + "history": "History", + "stats": "Statistiken", + "total_targets": "Ziele gesamt", + "targets_up": "Erreichbare Ziele", + "targets_down": "Nicht erreichbare Ziele", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP-Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Werkzeuge", + "ping_tool": "Ping-Test", + "tcp_tool": "TCP-Port-Prüfung", + "http_tool": "HTTP-Prüfung", + "dns_tool": "DNS-Auflösung", + "monitor_start": "Überwachung starten", + "monitor_stop": "Überwachung stoppen", + "monitor_running": "Überwachung läuft", + "monitor_stopped": "Überwachung gestoppt", + "no_targets": "Keine Überwachungsziele konfiguriert", + "no_history": "Kein Prüfverlauf verfügbar", + "error_code": "Fehler", + "status_code": "HTTP-Statuscode", + "search_targets": "Ziele suchen...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Prüfverlauf", + "name_host_required": "Name und Host sind erforderlich", + "uptime": "Uptime", + "response_time": "Antwortzeit", + "avg_response": "Durchschnittliche Antwort", + "charts": "Diagramme", + "realtime": "Echtzeit", + "response_time_ms": "Antwortzeit (ms)", + "uptime_percent": "Verfügbarkeit %", + "last_24h": "Letzte 24 Stunden", + "last_7d": "Letzte 7 Tage", + "last_30d": "Letzte 30 Tage" + }, + "dataguard": { + "title": "Dashboard", + "policies": "Richtlinien", + "add_policy": "Richtlinie hinzufügen", + "edit_policy": "Richtlinie bearbeiten", + "delete_policy": "Richtlinie löschen", + "delete_confirm": "Sind Sie sicher, dass Sie diese Richtlinie löschen möchten?", + "policy_name": "Name", + "policy_description": "Beschreibung", + "policy_desc": "Richtlinienbeschreibung", + "status": "Status", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "rules": "Alarmregeln", + "add_rule": "Regel hinzufügen", + "rule_type": "Regeltyp", + "rule_type_usb": "USB-Gerät", + "rule_type_file": "Dateioperation", + "action": "Aktion", + "action_allow": "Erlauben", + "action_block": "Blockieren", + "action_log": "Nur protokollieren", + "filter": "Filter", + "vid": "Hersteller-ID (VID)", + "pid": "Produkt-ID (PID)", + "serial": "Seriennummer", + "device_class": "Geräteklasse", + "drive_type": "Laufwerkstyp", + "file_extensions": "Dateierweiterungen", + "events": "DLP-Ereignisse", + "event_source": "Quelle", + "event_source_usb": "USB", + "event_source_file": "Datei", + "event_type": "Ereignistyp", + "event_details": "Details", + "no_policies": "Keine DLP-Richtlinien konfiguriert", + "no_events": "Keine DLP-Ereignisse aufgezeichnet", + "stats": "Statistiken", + "total_events": "Ereignisse gesamt", + "blocked_events": "Blockiert", + "logged_events": "Protokolliert", + "usb_events": "USB-Ereignisse", + "file_events": "Datei-Ereignisse", + "device_id": "Geräte-ID", + "policy_matched": "Richtlinie übereinstimmend", + "timestamp": "Zeitstempel", + "drive_removable": "Wechselbar", + "drive_fixed": "Fest", + "drive_network": "Netzwerk", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unbekannt", + "total_policies": "Richtlinien gesamt", + "active_policies": "Aktive Richtlinien", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Richtlinien", + "tab_events": "Events", + "search_policies": "Richtlinien suchen...", + "create_policy": "Richtlinie erstellen", + "policy_type": "Richtlinientyp", + "scope": "Scope", + "events_count": "Events", + "search_events": "Ereignisse suchen...", + "event_time": "Event Time", + "device": "Gerät", + "policy": "Richtlinie", + "detail": "Ticketdetails", + "scope_help": "Kommagetrennte Geräte-IDs oder leer lassen für alle", + "scope_all": "Alle Geräte", + "active": "Active", + "type_file_type": "Dateityp", + "type_usb": "USB", + "type_clipboard": "Zwischenablage", + "type_screen_share": "Bildschirmfreigabe", + "type_file_transfer": "Dateiübertragung" + }, + "reports": { + "title": "Dashboard", + "generate": "Konfiguration generieren", + "generate_csv": "CSV exportieren", + "report_type": "Berichtstyp", + "type_devices": "Geräteübersicht", + "type_activity": "Aktivitätsübersicht", + "type_security": "Sicherheitsbericht", + "type_tickets": "Ticketbericht", + "type_network": "Netzwerkbericht", + "type_inventory": "Inventarbericht", + "type_alerts": "Alarmbericht", + "saved": "Gespeichert", + "save_report": "Bericht speichern", + "delete_report": "Bericht löschen", + "delete_confirm": "Sind Sie sicher, dass Sie diesen gespeicherten Bericht löschen möchten?", + "no_saved": "Keine gespeicherten Berichte", + "report_title": "Titel", + "created_by": "Erstellt von", + "created_at": "Erstellt", + "filters": "Filter", + "date_from": "Von", + "date_to": "Bis", + "device_filter": "Geräte-ID", + "generated_at": "Generiert am", + "section": "Datenabschnitt", + "total_devices": "Geräte gesamt", + "online": "Online", + "offline": "Offline", + "banned": "Gesperrt", + "platform_distribution": "Plattformverteilung", + "top_applications": "Top-Anwendungen", + "total_active": "Gesamtaktiv", + "total_idle": "Gesamtleerlauf", + "dlp_stats": "DLP-Statistiken", + "banned_devices": "Gesperrte Geräte", + "audit_logs": "Audit-Protokolle", + "ticket_stats": "Ticketstatistiken", + "category_distribution": "Kategorieverteilung", + "priority_distribution": "Prioritätsverteilung", + "targets_status": "Zielstatus", + "os_distribution": "Betriebssystemverteilung", + "avg_ram": "Durchschnittlicher RAM", + "alert_rules": "Alarmregeln", + "recent_alerts": "Letzte Alarme", + "tab_generate": "Bericht generieren", + "tab_saved": "Gespeicherte Berichte", + "type_devices_desc": "Übersicht aller Geräte, Plattformen und Status", + "type_activity_desc": "Zusammenfassung von Anwendungsnutzung und Leerlaufzeit", + "type_security_desc": "Sperraktionen, DLP-Ereignisse und Audit-Protokolle", + "type_tickets_desc": "Ticketstatistiken und SLA-Leistung", + "type_network_desc": "Netzwerküberwachungsziele und Verfügbarkeitsdaten", + "type_inventory_desc": "Zusammenfassung von Hardware- und Softwareinventar", + "type_alerts_desc": "Alarmregeln und Verlauf ausgelöster Alarme", + "report_name": "Berichtsname", + "format": "Format", + "save": "Speichern", + "preview": "Vorschau", + "download": "Schlüssel herunterladen", + "delete_saved": "Bericht löschen", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Dashboard", + "list": "Mandanten", + "add_tenant": "Mandant hinzufügen", + "edit_tenant": "Mandant bearbeiten", + "delete_tenant": "Mandant löschen", + "delete_confirm": "Sind Sie sicher, dass Sie diesen Mandanten löschen möchten? Alle Geräte- und Benutzerzuweisungen werden entfernt.", + "name": "Name", + "slug": "Slug", + "contact_name": "Kontaktname", + "contact_email": "Kontakt-E-Mail", + "max_devices": "Max. Geräte", + "max_devices_hint": "0 = unbegrenzt", + "notes": "Notizen", + "active": "Active", + "inactive": "Inaktiv", + "devices": "Geräte", + "users": "Benutzer", + "assign_device": "Gerät zuweisen", + "assign_devices": "Geräte zuweisen", + "remove_device": "Gerät entfernen", + "assign_user": "Benutzer zuweisen", + "remove_user": "Benutzer entfernen", + "no_tenants": "Keine Mandanten konfiguriert", + "no_devices": "Keine Geräte mit Inventardaten gefunden", + "no_users": "Keine Benutzer diesem Mandanten zugewiesen", + "stats": "Statistiken", + "total_devices": "Geräte gesamt", + "online_devices": "Online-Geräte", + "total_users": "Benutzer gesamt", + "created_at": "Erstellt", + "updated_at": "Aktualisiert", + "slug_exists": "Mandanten-Slug existiert bereits", + "total_tenants": "Mandanten gesamt", + "active_tenants": "Aktive Mandanten", + "search": "Search devices...", + "create_tenant": "Mandant erstellen", + "detail": "Ticketdetails", + "contact": "Kontakt", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "max": "max", + "info": "Informationen", + "status": "Status" + }, + "registrations": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "search_placeholder": "Geräte suchen...", + "no_registrations": "Keine Registrierungsanfragen", + "col_device_id": "Geräte-ID", + "col_hostname": "Hostname", + "col_platform": "Plattform", + "col_ip": "IP-Adresse", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Angefordert", + "col_actions": "Aktionen", + "status_pending": "Ausstehend", + "status_approved": "Genehmigt", + "status_rejected": "Abgelehnt", + "approve_btn": "Genehmigen", + "approve_confirm": "Sind Sie sicher, dass Sie dieses Gerät genehmigen möchten? Es erhält Server-Anmeldedaten und kann sich automatisch verbinden.", + "approved_success": "Geräteregistrierung erfolgreich genehmigt", + "reject_btn": "Ablehnen", + "reject_title": "Registrierung ablehnen", + "reject_confirm": "Sind Sie sicher, dass Sie diese Registrierungsanfrage ablehnen möchten?", + "reject_reason": "Grund (optional)", + "reject_reason_placeholder": "Ablehnungsgrund eingeben...", + "rejected_success": "Geräteregistrierung abgelehnt", + "delete_confirm": "Sind Sie sicher, dass Sie diesen Registrierungseintrag löschen möchten?", + "deleted_success": "Registrierungseintrag gelöscht", + "enrollment_title": "Geräteregistrierung", + "enrollment_subtitle": "Ausstehende Registrierungsanfragen von BetterDesk-Desktopclients", + "enrollment_empty": "Keine ausstehenden Registrierungsanfragen", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Anzeigename", + "enrollment_display_name_placeholder": "Geben Sie einen Namen für dieses Gerät ein...", + "enrollment_sync_mode": "Synchronisierungsmodus", + "enrollment_sync_silent": "Still — minimale Telemetrie", + "enrollment_sync_standard": "Standard — ausgewogene Synchronisierung", + "enrollment_sync_turbo": "Turbo — aggressive Synchronisierung", + "enrollment_approved_success": "Geräteregistrierung genehmigt", + "enrollment_rejected_success": "Geräteregistrierung abgelehnt", + "approve_title": "Gerät genehmigen", + "banner_locked_mode": "Registrierung ist gesperrt — nur token-gebundene Geräte können sich registrieren. Der verwaltete Modus ist für die Genehmigung unbekannter Clients durch den Operator erforderlich.", + "banner_open_mode": "Registrierung ist offen — neue RustDesk-Clients registrieren sich ohne Genehmigung des Operators. Verwalteten Modus in den Einstellungen festlegen, um diese Warteschlange zu nutzen.", + "enrollment_settings_link": "Registrierungseinstellungen", + "field_folder": "Ordner", + "field_folder_none": "Kein Ordner", + "field_groups": "Gerätegruppen", + "field_name": "Gerätename", + "field_name_placeholder": "Name für dieses Gerät eingeben...", + "field_sync_mode": "Synchronisierungsmodus", + "field_tag_add_btn": "Hinzufügen", + "field_tag_add_placeholder": "Neues Tag hinzufügen...", + "field_tags": "Tags", + "field_tags_existing": "Vorhandene Tags", + "field_tags_placeholder": "Kommagetrennte Tags (z. B. Büro, Laptop)...", + "reject_ban_hint": "Das Gerät wird gesperrt und kann keine neuen Registrierungsanfragen senden.", + "reject_ban_option": "Dieses Gerät sperren", + "sync_silent": "Lautlos — minimale Telemetrie", + "sync_standard": "Standard — ausgewogene Synchronisierung", + "sync_turbo": "Turbo — aggressive Synchronisierung" + }, + "backup": { + "title": "Dashboard", + "desc": "Laden Sie eine vollständige Sicherung Ihrer Konsolenkonfiguration, Benutzer, Gruppen und Einstellungen herunter. Go-Server-Peer-Daten sind enthalten, wenn das BetterDesk-Backend aktiv ist.", + "restore_title": "Wiederherstellen", + "restore_desc": "Laden Sie eine zuvor heruntergeladene Sicherungsdatei hoch, um die Konsolenkonfiguration wiederherzustellen. Wählen Sie unten aus, welche Abschnitte wiederhergestellt werden sollen.", + "stat_users": "Benutzer", + "stat_settings": "Einstellungen", + "stat_folders": "Ordner", + "stat_groups": "Gruppen", + "stat_strategies": "Strategien", + "stat_backend": "Backend", + "download": "Schlüssel herunterladen", + "creating": "Sicherung wird erstellt...", + "download_success": "Schlüsseldatei heruntergeladen", + "upload": "Hochladen", + "restore_confirm": "Sind Sie sicher, dass Sie aus dieser Sicherung wiederherstellen möchten? Ausgewählte Abschnitte werden überschrieben.", + "restore_success": "Sicherung erfolgreich wiederhergestellt. Einige Änderungen erfordern möglicherein Neuladen der Seite.", + "restored": "Wiederhergestellt", + "skipped": "Übersprungen", + "backup_date": "Sicherungsdatum", + "opt_settings": "Konsoleneinstellungen", + "opt_branding": "Branding einschließen", + "opt_folders": "Geräteordner", + "opt_groups": "Benutzer- & Gerätegruppen", + "opt_addressbooks": "Adressbücher", + "opt_users": "Benutzerkonten", + "opt_users_warning": "Destruktiv: Ersetzt ALLE Benutzerkonten durch Sicherungsdaten. Sie werden möglicherweise abgemeldet.", + "no_file": "Keine Sicherungsdatei ausgewählt", + "invalid_json": "Ungültiges JSON-Format", + "invalid_format": "Ungültige Sicherungsdatei: keine BetterDesk-Sicherung", + "opt_database": "Datenbank (alle Tabellen)", + "opt_database_hint": "Importiert alle Konsolendaten erneut. Wird sofort angewendet, kein Neustart erforderlich.", + "opt_env": "Umgebungsdatei (.env)", + "opt_env_warning": "Überschreibt SESSION_SECRET, API-Schlüssel, Datenbank-DSN, Ports und TLS-Einstellungen. Erfordert einen Dienstneustart.", + "opt_godb": "Go-Server-Datenbank", + "opt_godb_warning": "Überschreibt die SQLite-Datenbank des Go-Servers (nur SQLite-Backend). Erfordert einen Dienstneustart.", + "opt_secrets": "Serverschlüssel & Geheimnisse", + "opt_secrets_warning": "Überschreibt die Ed25519-Serveridentität, den API-Schlüssel und das Sitzungsgeheimnis. Erfordert einen Dienstneustart.", + "opt_uploads": "Branding-Dateien", + "opt_uploads_hint": "Logos und hochgeladene Bilder.", + "restart_required": "Einige wiederhergestellte Komponenten (Schlüssel / .env / Go-Datenbank) erfordern einen Dienstneustart, damit die Änderungen wirksam werden.", + "restore_warning": "Das Wiederherstellen von Geheimnissen, der Umgebungsdatei oder der Go-Server-Datenbank überschreibt die Serveridentität und erfordert danach einen Dienstneustart.", + "security_warning": "Dieses Backup enthält Geheimnisse (Serverschlüssel, Umgebungsdatei, Passwort-Hashes und 2FA-Geheimnisse). Sicher aufbewahren und niemals teilen.", + "stat_database": "Datenbank-Engine", + "stat_env": "Umgebungsdatei", + "stat_keys": "Serverschlüssel enthalten", + "stat_uploads": "Branding-Dateien" + }, + "cdap": { + "device_detail": "CDAP-Gerät", + "loading": "Laden...", + "loading_widgets": "Geräte-Widgets werden geladen...", + "load_error": "Gerätedaten konnten nicht geladen werden", + "connected": "Verbunden", + "disconnected": "Getrennt", + "device_offline_msg": "Das Gerät ist derzeit offline. Widget-Werte können veraltet sein.", + "no_widgets": "Keine Widgets verfügbar", + "no_widgets_desc": "Dieses Gerät hat kein CDAP-Manifest mit Widgetdefinitionen registriert.", + "command_log": "Befehlsprotokoll", + "clear_log": "Protokoll löschen", + "confirm_command": "Befehl bestätigen", + "select_option": "Auswählen", + "cdap_status": "CDAP-Status", + "cdap_enabled": "CDAP aktiviert", + "cdap_disabled": "CDAP deaktiviert", + "cdap_devices": "CDAP-Geräte", + "cdap_connections": "Aktive Verbindungen", + "send_command": "Befehl senden", + "command_sent": "Befehl erfolgreich gesendet", + "command_failed": "Befehl konnte nicht gesendet werden", + "devices_title": "CDAP-Geräte", + "devices_subtitle": "Verbundene Geräte über das Custom Device Application Protocol", + "stat_connected": "Verbunden", + "stat_port": "Port", + "search_devices": "Geräte suchen...", + "no_devices": "Keine Geräte mit Inventardaten gefunden", + "no_devices_desc": "Derzeit sind keine CDAP-Geräte verbunden. Geräte erscheinen hier, sobald sie sich mit dem Gateway verbinden.", + "gateway_disabled": "CDAP-Gateway deaktiviert", + "gateway_disabled_desc": "Aktivieren Sie das CDAP-Gateway, indem Sie CDAP_ENABLED=true in der Serverkonfiguration setzen.", + "gateway_active": "Aktiv", + "toggle_enable": "CDAP aktivieren", + "toggle_disable": "CDAP deaktivieren", + "enabled_restart": "CDAP aktiviert. Ein Serverneustart ist erforderlich, um Änderungen anzuwenden.", + "disabled_restart": "CDAP deaktiviert. Ein Serverneustart ist erforderlich, um Änderungen anzuwenden.", + "widgets": "Widgets", + "type_all": "Alle", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-Agent", + "type_network": "Netzwerkbericht", + "type_camera": "Kamera", + "type_custom": "Benutzerdefiniert", + "active_alerts": "Aktive Warnungen", + "alert_fired": "Warnung ausgelöst", + "alert_cleared": "Alarm gelöscht", + "no_alerts": "Keine Alarme ausgelöst", + "connect_terminal": "Terminal verbinden", + "table_search": "Suchen...", + "just_now": "gerade eben", + "terminal_connecting": "Verbindung zum Gerät wird hergestellt...", + "terminal_disconnected": "Getrennt", + "terminal_error": "Terminalverbindung fehlgeschlagen", + "linked_devices": "Verknüpfte Geräte", + "link_device": "Gerät verknüpfen", + "unlink_device": "Verknüpfung aufheben", + "no_linked_devices": "Keine verknüpften Geräte", + "unlink_confirm": "Möchten Sie dieses Gerät wirklich entknüpfen?", + "link_prompt": "Geben Sie die Peer-ID ein, die mit diesem Gerät verknüpft werden soll:", + "connect_desktop": "Über Desktop-Client verbinden", + "connect_video": "Stream verbinden", + "connect_files": "Dateien durchsuchen", + "connect_audio": "Audio verbinden", + "upload_file": "Hochladen", + "desktop_connecting": "Verbindung wird hergestellt...", + "video_connecting": "Verbindung wird hergestellt...", + "files_connecting": "Verbindung wird hergestellt...", + "audio_connecting": "Verbinde...", + "audio_streaming": "Streaming", + "clipboard_in": "Zwischenablage empfangen", + "clipboard_out": "Zwischenablage gesendet", + "monitor_select": "Monitor auswählen", + "keyframe_request": "Keyframe anfordern", + "quality_auto": "Automatische Qualität" + }, + "desktop": { + "switch_mode": "Desktop-Modus", + "console_mode": "Konsolen-Modus", + "loading": "Laden...", + "minimize": "Minimieren", + "maximize": "Maximieren", + "restore": "Wiederherstellen", + "close": "Schließen", + "widgets_mode": "Widget-Modus", + "windows_mode": "Fenster", + "wallpaper": "Hintergrundbild", + "add_widget": "Widget hinzufügen", + "remove_widget": "Widget entfernen", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurieren", + "search_widgets": "Widgets suchen...", + "cat_monitoring": "Überwachung", + "cat_devices": "Geräte", + "cat_tools": "Werkzeuge", + "cat_general": "Allgemein", + "notes_placeholder": "Notizen zu diesem Gerät hinzufügen...", + "search_placeholder": "Geräte suchen...", + "search_pages": "Seiten", + "search_devices": "Geräte suchen...", + "search_no_results": "Keine Ergebnisse", + "exit_desktop": "Desktop beenden", + "refresh": "Aktualisieren", + "fullscreen": "Vollbild", + "help": "Help", + "widget_clock": "Clock", + "widget_device_status": "Gerätestatus", + "widget_server_health": "Serverzustand", + "widget_system_stats": "Systemstatistiken", + "widget_device_list": "Geräteliste", + "widget_quick_actions": "Schnellaktionen", + "widget_recent_activity": "Letzte Aktivitäten", + "widget_notes": "Notes", + "widget_network_monitor": "Netzwerkmonitor", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP-Geräte", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Geräteraster", + "widget_multi_gauge": "Mehrfachanzeige", + "widget_weekly_chart": "Wochenchart", + "widget_quick_controls": "Schnellsteuerung", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Verbindungsstatistik", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Benutzersitzungen", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Keine Geräte", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Öffnen", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "URL festlegen", + "label_server_uptime": "Serverlaufzeit", + "label_merged_info": "Zusammengeführte Informationen", + "label_with_notes": "Mit Notizen", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Geräte gesamt", + "label_throughput": "Throughput", + "label_active_relays": "Aktive Relays", + "label_total_relayed": "Weitergeleitet gesamt", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Geräte filtern", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Keine CDAP-Geräte", + "action_add_widget": "Widget hinzufügen", + "label_merged_server_info": "Zusammengeführte Serverinformationen", + "wp_images": "Bilder", + "wp_colors": "Volltonfarben", + "wp_custom_color": "Eigene Farbe", + "wp_fit_style": "Stil", + "wp_fill": "Ausfüllen", + "wp_fit": "Anpassen", + "wp_stretch": "Strecken", + "wp_center": "Zentrieren", + "wp_unavailable": "Hintergrundbilder nicht verfügbar", + "wp_download_hint": "Laden Sie Hintergrundbilder herunter, um sie hier zu verwenden.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Prozessmonitor", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Datenbankstatistik", + "widget_docker_containers": "Docker-Container", + "widget_shell_command": "Shell-Befehl", + "widget_device_map": "Gerätekarte", + "widget_remote_connect": "Fernverbindung", + "label_no_online": "Keine Online-Geräte", + "label_no_events": "Keine Ereignisse", + "label_event_title": "Ereignistitel", + "label_no_data": "Keine Daten", + "label_download_speed": "Downloadgeschwindigkeit", + "label_latency": "Latency", + "label_server": "Serverinstanz", + "label_run_test": "Run Test", + "label_testing": "Test läuft", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Keine Container", + "label_docker_unavailable": "Docker nicht verfügbar", + "label_no_command": "Kein Befehl", + "label_no_output": "Keine Ausgabe", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Voreinstellung speichern", + "label_load_preset": "Load Preset", + "label_preset_name": "Name der Voreinstellung", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automatisch anordnen", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 Spalten gleich", + "label_2col_wide": "2 Spalten breit", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget-Gruppe", + "ungroup_widgets": "Widgets entgruppieren", + "group_widgets": "Widgets gruppieren", + "snap_layouts": "Andocklayouts", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Oben links andocken", + "snap_top_right": "Oben rechts andocken", + "snap_bottom_left": "Unten links andocken", + "snap_bottom_right": "Unten rechts andocken", + "aero_shake": "Fenster schütteln", + "zone_resize": "Zonengröße ändern", + "zone_borders": "Zonengrenzen", + "app_drawer": "Applications", + "search_apps": "Apps suchen", + "edit_shortcuts": "Verknüpfungen bearbeiten", + "widgets": "Widget-Liste", + "theme": "Theme" + }, + "desktop_login": { + "click_to_sign_in": "Zum Anmelden klicken", + "username_placeholder": "Benutzername eingeben", + "password_placeholder": "Passwort eingeben", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Zwei-Faktor-Authentifizierung", + "totp_subtitle": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", + "back_to_login": "Zurück zur Anmeldung", + "fill_all_fields": "Bitte füllen Sie alle Felder aus", + "invalid_credentials": "Ungültiger Benutzername oder Passwort.", + "invalid_code": "Ungültiger Code", + "enter_6_digits": "Geben Sie 6 Ziffern ein", + "network_error": "Netzwerkfehler", + "session_expired": "Sitzung abgelaufen" + }, + "tokens": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "enrollment_mode": "Registrierungsmodus", + "mode_open": "Offen", + "mode_open_desc": "Jedes Gerät kann sich ohne Token registrieren", + "mode_managed": "Verwaltet", + "mode_managed_desc": "Geräte benötigen einen gültigen Token zur Registrierung", + "mode_locked": "Gesperrt", + "mode_locked_desc": "Keine neuen Geräteregistrierungen erlaubt", + "total": "Gesamt", + "active": "Active", + "used": "Belegt", + "revoked": "Widerrufen", + "search_placeholder": "Geräte suchen...", + "status_pending": "Ausstehend", + "status_active": "Aktiv", + "status_used": "Verwendet", + "status_revoked": "Widerrufen", + "status_expired": "Abgelaufen", + "bulk_generate": "Massengeneration", + "create": "Erstellen", + "edit": "Bearbeiten", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Verwendungen", + "bound_peer": "Gebundener Peer", + "expires": "Läuft ab", + "created": "Erstellt", + "actions": "Aktionen", + "name_placeholder": "Ordnername eingeben", + "max_uses": "Maximale Verwendungen", + "max_uses_hint": "0 = unbegrenzt", + "expires_in": "Läuft ab in", + "no_expiration": "Kein Ablaufdatum", + "expires_1h": "1 Stunde", + "expires_24h": "24 Stunden", + "expires_7d": "7 Tage", + "expires_30d": "30 Tage", + "note": "Notiz", + "note_placeholder": "Notes about this device", + "count": "Anzahl", + "count_range": "Anzahl der zu generierenden Token (1-100)", + "name_prefix": "Namenspräfix", + "generate": "Konfiguration generieren", + "token_created": "Token erstellt", + "tokens_generated": "Token generiert", + "copy_warning": "Kopieren Sie den Token jetzt. Er wird nicht erneut angezeigt.", + "copy_token": "Token kopieren", + "copied": "In die Zwischenablage kopiert", + "revoke": "Widerrufen", + "revoke_confirm": "Möchten Sie diesen Token wirklich widerrufen? Bereits registrierte Geräte sind nicht betroffen.", + "revoked_success": "Token erfolgreich widerrufen", + "no_tokens": "Keine Token gefunden", + "expired": "Abgelaufen", + "never": "Nie", + "save": "Speichern", + "cancel": "Abbrechen", + "unlimited": "Unbegrenzt" + }, + "tutorial": { + "next": "Weiter", + "prev": "Zurück", + "skip": "Überspringen", + "finish": "Fertig", + "close": "Schließen", + "step_of": "{current} von {total}", + "console_sidebar_title": "Navigationsleiste", + "console_sidebar_text": "Zugriff auf alle Module von hier. Klicken Sie auf ein Symbol, um zu diesem Bereich zu navigieren. Die Seitenleiste passt sich Ihrer Bildschirmgröße an.", + "console_expand_title": "Seitenleiste erweitern", + "console_expand_text": "Öffnen Sie die Seitenleiste, um alle Konsolenbereiche und Werkzeuge zu sehen.", + "console_search_title": "Schnellsuche", + "console_search_text": "Nutzen Sie die Suche, um Geräte, Einstellungen und Aktionen schneller zu finden.", + "console_dashboard_title": "Übersicht prüfen", + "console_dashboard_text": "Ihre zentrale Anlaufstelle mit Serverstatus, Online-Geräten und Schnellaktionen. Wichtige Metriken auf einen Blick.", + "console_devices_title": "Geräteverwaltung", + "console_devices_text": "Alle verbundenen Geräte anzeigen, suchen und verwalten. Nach Status filtern, Tags zuweisen und Einstellungen konfigurieren.", + "console_settings_title": "Einstellungen", + "console_settings_text": "Serververhalten, Sicherheitsoptionen, Branding und Benutzerverwaltung konfigurieren. BetterDesk an Ihre Bedürfnisse anpassen.", + "console_desktop_title": "Desktop-Modus", + "console_desktop_text": "Wechseln Sie zum Desktop-Modus für einen Arbeitsbereich mit Fenstern und Widgets. Perfekt für Multitasking und Überwachung.", + "console_complete_title": "Konsole bereit", + "console_complete_text": "Sie kennen jetzt die wichtigsten Bereiche der BetterDesk-Konsole.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Die obere Leiste enthält Fenstersteuerung, Suche und Schnellzugriffe.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Öffnen Sie die Widget-Auswahl, um neue Kacheln auf dem Desktop abzulegen.", + "desktop_widgets_title": "Widget-Dashboard", + "desktop_widgets_text": "Ihr anpassbarer Arbeitsbereich. Widgets zeigen Live-Informationen und bieten schnellen Zugriff auf Funktionen. Ziehen zum Neuanordnen.", + "desktop_add_widget_title": "Widgets hinzufügen", + "desktop_add_widget_text": "Klicken Sie hier, um verfügbare Widgets zu durchsuchen. Wählen Sie aus Überwachungsanzeigen, Gerätelisten, Notizen und mehr.", + "desktop_taskbar_title": "Taskleiste", + "desktop_taskbar_text": "Geöffnete Apps erscheinen hier. Klicken zum Fokussieren oder Minimieren. Die Uhr zeigt die aktuelle Zeit, die Hintergrund-Schaltfläche ändert das Wallpaper.", + "desktop_snap_title": "Layouts andocken", + "desktop_snap_text": "Verwenden Sie Andocklayouts, um Widgets schnell in Zonen anzuordnen.", + "desktop_windows_title": "App-Fenster", + "desktop_windows_text": "Apps öffnen sich in verschiebbaren, größenveränderbaren Fenstern. Minimieren, maximieren oder schließen über die Titelleiste. Fenster liegen über Widgets.", + "desktop_search_title": "Schnellsuche", + "desktop_search_text": "Suchen Sie nach Geräten, Seiten und Einstellungen. Drücken Sie Strg+K, um die Suche sofort zu öffnen.", + "desktop_complete_title": "Desktop bereit", + "desktop_complete_text": "Der Desktop-Modus ist eingerichtet und kann angepasst werden.", + "devices_folders_title": "Ordner und Gruppen", + "devices_folders_text": "Organisieren Sie Geräte in Ordnern oder dynamischen Gruppen.", + "devices_search_title": "Geräte suchen", + "devices_search_text": "Filtern Sie nach ID, Hostname, Plattform, Benutzer oder Tags.", + "devices_table_title": "Gerätetabelle", + "devices_table_text": "Öffnen Sie Aktionen über das Menü jeder Zeile oder doppelklicken Sie für Details.", + "devices_complete_title": "Geräteverwaltung bereit", + "devices_complete_text": "Sie können Geräte jetzt suchen, gruppieren und verwalten.", + "settings_tabs_title": "Einstellungsbereiche", + "settings_tabs_text": "Wechseln Sie zwischen Server-, Sicherheits-, Authentifizierungs- und UI-Einstellungen.", + "settings_content_title": "Konfiguration bearbeiten", + "settings_content_text": "Speichern Sie Änderungen abschnittsweise, damit die Konfiguration nachvollziehbar bleibt.", + "settings_complete_title": "Einstellungen bereit", + "settings_complete_text": "Die wichtigsten Konfigurationsbereiche sind jetzt bekannt.", + "help": "Help", + "tour_console": "Konsolentour", + "tour_desktop": "Desktop-Tour", + "tour_devices": "Gerätetour", + "tour_remote": "Remote-Tour", + "tour_organization": "Organisationstour", + "tour_cdap": "CDAP-Tour", + "tour_chat": "Chat-Tour", + "tour_settings": "Einstellungstour", + "reset_all": "Alle Touren zurücksetzen", + "remote_toolbar_title": "Remote-Werkzeugleiste", + "remote_toolbar_text": "Steuern Sie Qualität, Monitore, Zwischenablage, Aufzeichnung und Sitzungsaktionen.", + "remote_canvas_title": "Remote-Bildschirm", + "remote_canvas_text": "Klicken Sie in den Bildschirmbereich, um Tastatur und Maus an das Gerät zu senden.", + "remote_clipboard_title": "Zwischenablage", + "remote_clipboard_text": "Synchronisieren Sie Text sicher zwischen Browser und entferntem Gerät.", + "remote_complete_title": "Remote-Sitzung bereit", + "remote_complete_text": "Sie können jetzt eine Sitzung steuern und überwachen.", + "org_overview_title": "Organisationsübersicht", + "org_overview_text": "Prüfen Sie Mitglieder, Geräte und Richtlinien der Organisation auf einen Blick.", + "org_create_title": "Organisation erstellen", + "org_create_text": "Legen Sie eine neue Organisation an, um Geräte und Benutzer zu trennen.", + "org_members_title": "Mitglieder verwalten", + "org_members_text": "Weisen Sie Benutzer zu und legen Sie organisationsspezifische Rollen fest.", + "org_devices_title": "Geräte zuweisen", + "org_devices_text": "Ordnen Sie Geräte einer Organisation zu, damit Daten sauber scoped bleiben.", + "org_policies_title": "Richtlinien konfigurieren", + "org_policies_text": "Steuern Sie Zugriffsregeln, Dateiübertragung und Sitzungsgrenzen.", + "org_complete_title": "Organisation bereit", + "org_complete_text": "Die Organisation ist für Benutzer, Geräte und Richtlinien vorbereitet.", + "cdap_devices_title": "CDAP-Geräte", + "cdap_devices_text": "Alle verbundenen CDAP-Geräte anzeigen — IoT-Sensoren, SPSen, Bridges und benutzerdefinierte Agents. Grüne Anzeigen zeigen Live-Verbindungen.", + "cdap_widgets_title": "Widget-Dashboard", + "cdap_widgets_text": "Widgets zeigen Echtzeitdaten von Geräten an. Messanzeigen, Schalter, LEDs, Diagramme — jeder Widget-Typ visualisiert eine andere Art von Daten.", + "cdap_commands_title": "Befehle senden", + "cdap_commands_text": "Mit Geräten durch das Senden von Befehlen interagieren. Einige Befehle erfordern eine Bestätigung. Das Befehlsprotokoll enthält den Verlauf aller gesendeten Befehle.", + "cdap_terminal_title": "Geräteterminal", + "cdap_terminal_text": "Eine Terminalsitzung mit CDAP-Agents für erweiterte Diagnosen oder manuelle Konfiguration öffnen. Befehle direkt eingeben.", + "cdap_complete_title": "CDAP-Übersicht abgeschlossen!", + "cdap_complete_text": "Geräte-Widgets erkunden, Befehle senden und das Terminal oder den Dateibrowser für eine tiefere Verwaltung nutzen. CDAP-Agents melden Metriken automatisch.", + "chat_contacts_title": "Kontakte", + "chat_contacts_text": "Wählen Sie Operatoren, Agenten oder Gruppen für eine Unterhaltung aus.", + "chat_send_title": "Nachrichten senden", + "chat_send_text": "Schreiben Sie Nachrichten, senden Sie Dateien und nutzen Sie Lesebestätigungen.", + "chat_file_title": "Dateien teilen", + "chat_file_text": "Dateien werden verschlüsselt übertragen, wenn Ende-zu-Ende-Verschlüsselung aktiv ist.", + "chat_complete_title": "Chat bereit", + "chat_complete_text": "Sie können jetzt sicher mit Benutzern und Operatoren kommunizieren.", + "disable_tutorials": "Einführungen deaktivieren", + "enable_tutorials": "Einführungen aktivieren" + }, + "help_request": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "new_request": "Neue Hilfeanfrage", + "device": "Gerät", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Keine Hilfeanfragen", + "notification": "Benachrichtigung über Hilfeanfrage", + "stats_total": "Gesamt", + "filter_all": "Alle" + }, + "organizations": { + "title": "Dashboard", + "create": "Erstellen", + "edit": "Bearbeiten", + "detail": "Ticketdetails", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Benutzer", + "devices": "Geräte", + "invitations": "Invitations", + "settings": "Einstellungen", + "add_user": "Benutzer hinzufügen", + "assign_device": "Gerät zuweisen", + "create_invitation": "Einladung erstellen", + "delete_confirm": "Diese Organisation löschen? Alle zugehörigen Benutzer, Geräte und Einstellungen werden entfernt.", + "no_orgs": "Keine Organisationen", + "no_orgs_hint": "Erstellen Sie eine Organisation, um Benutzer und Geräte getrennt zu verwalten.", + "connection_policy": "Verbindungsrichtlinie", + "allow_file_transfer": "Dateiübertragung erlauben", + "allow_clipboard": "Zwischenablage erlauben", + "max_session_duration": "Maximale Sitzungsdauer", + "role_owner": "Owner", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Mitglied", + "username": "Benutzername", + "password": "Passwort", + "display_name": "Anzeigename", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Geräte-ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Zugewiesener Benutzer", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Keine Benutzer", + "no_devices": "Keine Geräte", + "no_invitations": "Keine Einladungen", + "user_added": "User added", + "user_removed": "Benutzer entfernt", + "user_updated": "Benutzer aktualisiert", + "device_assigned": "Gerät zugewiesen", + "device_unassigned": "Gerätezuweisung entfernt", + "invitation_created": "Einladung erstellt", + "settings_saved": "Organisationseinstellungen gespeichert", + "org_deleted": "Organisation gelöscht", + "confirm_remove_user": "Diesen Benutzer aus der Organisation entfernen?", + "confirm_unassign_device": "Dieses Gerät aus der Organisation entfernen?", + "confirm_delete_org": "Diese Organisation dauerhaft löschen?", + "edit_role": "Rolle bearbeiten", + "raw_settings": "Rohdaten der Einstellungen", + "key": "Key", + "value": "Value", + "save": "Speichern", + "policy_unattended": "Unbeaufsichtigter Zugriff", + "policy_attended": "Beaufsichtigter Zugriff", + "policy_ask": "Always ask", + "expires_hours": "Läuft ab nach Stunden", + "loading_failed": "Organisationen konnten nicht geladen werden", + "name_slug_required": "Name und Slug sind erforderlich", + "org_created": "Organisation erstellt", + "org_updated": "Organisation aktualisiert", + "create_new_user": "Neuen Benutzer erstellen", + "add_existing_user": "Vorhandenen Benutzer hinzufügen", + "none_available": "none", + "select_user": "Benutzer auswählen", + "org_role": "Organisationsrolle", + "link_user_hint": "Verknüpfen Sie einen vorhandenen Benutzer mit dieser Organisation.", + "no_available_users": "Keine verfügbaren Benutzer", + "user_linked": "Benutzer verknüpft" + }, + "chat": { + "e2e_enabled": "Ende-zu-Ende verschlüsselt", + "e2e_establishing": "Sicherer Kanal wird aufgebaut...", + "e2e_established": "Sicherer Kanal aufgebaut", + "e2e_unsupported": "E2E-Verschlüsselung wird in diesem Browser nicht unterstützt", + "typing_indicator": "tippt...", + "read_receipt": "Gelesen", + "delivered": "Zugestellt", + "file_share": "Datei", + "file_too_large": "Datei zu groß (max. 50MB)", + "file_encrypted": "Verschlüsselte Dateiübertragung", + "presence_online": "Online", + "presence_away": "Abwesend", + "presence_busy": "Beschäftigt", + "presence_offline": "Offline", + "key_rotation": "Sicherheitsschlüssel erneuert", + "new_message": "Neue Nachricht", + "title": "Dashboard", + "contacts": "Kontakte", + "groups": "Gruppen", + "no_contacts": "Noch keine Kontakte", + "no_groups": "Noch keine Gruppen", + "no_messages": "Noch keine Nachrichten", + "no_results": "Keine Ergebnisse gefunden", + "select_conversation": "Wählen Sie eine Unterhaltung, um zu chatten", + "select_conversation_hint": "Wähle eine Unterhaltung aus, um Nachrichten anzuzeigen", + "type_message": "Nachricht eingeben...", + "send": "Senden", + "attach_file": "Datei anhängen", + "emoji": "Emoji", + "info": "Informationen", + "search_messages": "Nachrichten durchsuchen", + "create_group": "Gruppe erstellen", + "group_name": "Gruppenname", + "group_name_placeholder": "Gruppennamen eingeben", + "group_members": "Mitglieder", + "cancel": "Abbrechen", + "create": "Erstellen", + "members": "Mitglieder", + "today": "Heute", + "yesterday": "Gestern", + "react": "Reagieren", + "my_presence": "Mein Status", + "search_placeholder": "Geräte suchen..." + }, + "toast": { + "device_connected": "Gerät verbunden", + "device_disconnected": "Gerät getrennt", + "session_started": "Sitzung gestartet", + "session_ended": "Sitzung beendet", + "file_upload_complete": "Datei-Upload abgeschlossen", + "settings_saved": "Einstellungen gespeichert", + "error_generic": "Ein Fehler ist aufgetreten", + "connection_lost": "Verbindung verloren", + "reconnecting": "Verbindung wird wiederhergestellt" + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Dashboard" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Konfiguration generieren", + "encode": "Encode", + "decode": "Decode", + "send": "Senden", + "refresh": "Aktualisieren", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Text eingeben...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Go-Server", + "mac_address": "MAC-Adresse", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Erreichbarkeit und Latenz eines Hosts prüfen", + "tcp_title": "TCP-Portprüfung", + "tcp_desc": "Konnektivität eines TCP-Ports testen", + "ssl_title": "SSL-Inspektor", + "ssl_desc": "Details des SSL/TLS-Zertifikats prüfen", + "http_title": "HTTP-Statusprüfung", + "http_desc": "Zustand eines HTTP-Endpunkts prüfen", + "dns_title": "DNS Lookup", + "dns_desc": "Hostname in IP-Adresse auflösen", + "whois_title": "DNS Records", + "whois_desc": "A-, AAAA-, MX-, TXT- und NS-Einträge abfragen", + "speed_title": "Speed Test", + "speed_desc": "Download-Bandbreite messen", + "run_speed_test": "Geschwindigkeitstest starten", + "wol_title": "Wake-on-LAN", + "wol_desc": "Magic Packet senden, um ein Gerät zu wecken", + "wol_sent": "Magic Packet gesendet", + "hash_title": "Hash-Generator", + "hash_desc": "Kryptografische Hashes erzeugen", + "password_title": "Passwortgenerator", + "password_desc": "Aktualisieren Sie Ihr Kontopasswort", + "jwt_title": "JWT Decoder", + "jwt_desc": "JSON Web Tokens dekodieren und prüfen", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64-Daten kodieren oder dekodieren", + "url_title": "URL Encoder", + "url_desc": "URL-Komponenten kodieren oder dekodieren", + "processes_title": "Prozessliste", + "processes_desc": "Laufende Systemprozesse anzeigen", + "disk_title": "Disk Usage", + "disk_desc": "Nutzung von Festplattenpartitionen anzeigen", + "db_title": "Datenbankstatistiken", + "db_desc": "Statistiken der Datenbanktabellen anzeigen", + "docker_title": "Docker-Container", + "docker_desc": "Laufende Docker-Container anzeigen", + "logs_title": "Log Viewer", + "logs_desc": "Aktuelle Protokollausgaben anzeigen", + "ip_address": "IP-Adresse", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Gültig ab", + "valid_to": "Gültig bis", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Abgelaufen", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "No hardware data available", + "no_docker": "Keine Docker-Container gefunden oder Docker ist nicht verfügbar", + "no_logs": "Keine Protokollzeilen verfügbar" + }, + "policies": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "select_org": "Organisation", + "select_org_placeholder": "Organisation auswählen...", + "select_org_first": "Wählen Sie eine Organisation, um das Richtlinien-Audit-Log anzuzeigen.", + "configured": "Konfiguriert", + "connection_title": "Verbindungsrichtlinie", + "connection_desc": "Steuerung der Fernverbindungsaufbau", + "connection_mode": "Verbindungsmodus", + "mode_attended": "Betreut (erfordert Benutzergenehmigung)", + "mode_unattended": "Unbetreut (immer erlauben)", + "mode_ask": "Immer fragen", + "max_session": "Max. Sitzungsdauer (Minuten)", + "idle_lock": "Leerlauf-Sperre (Minuten)", + "wallpaper_policy": "Hintergrund während Sitzung", + "wallpaper_show": "Anzeigen", + "wallpaper_hide_session": "Während Sitzung ausblenden", + "wallpaper_hide_always": "Immer ausblenden", + "features_title": "Funktionsrichtlinie", + "features_desc": "Bestimmte Funktionen für Geräte aktivieren oder deaktivieren", + "allow_file_transfer": "Dateiübertragung erlauben", + "allow_clipboard": "Allow Clipboard", + "allow_audio": "Audio-Streaming erlauben", + "allow_recording": "Sitzungsaufzeichnung erlauben", + "security_title": "Sicherheitsrichtlinie", + "security_desc": "Sicherheitsanforderungen für Organisationsgeräte durchsetzen", + "require_2fa": "2FA für unbeaufsichtigten Zugang erforderlich", + "password_min_length": "Minimale Passwortlänge", + "password_require_special": "Sonderzeichen erforderlich", + "password_max_age": "Max. Passwortalter (Tage, 0=nie)", + "allowed_operators": "Allowed Operators", + "network_title": "Netzwerkrichtlinie", + "network_desc": "Relay-Server und Direktverbindungen steuern", + "block_direct_p2p": "Direktes P2P blockieren (Relay erzwingen)", + "allowed_relays": "Erlaubte Relay-Server (einer pro Zeile)", + "ip_allowlist": "IP-Whitelist (CIDR, einer pro Zeile)", + "update_title": "Update-Richtlinie", + "update_desc": "Automatische Updates und Update-Kanäle steuern", + "auto_update": "Auto-Update aktivieren", + "update_channel": "Update-Kanal", + "audit_title": "Richtlinienänderungen", + "audit_desc": "Aktuelle Konsolenaktivität", + "no_audit": "Keine Richtlinienänderungen aufgezeichnet.", + "save_success": "Richtlinie erfolgreich gespeichert", + "save_failed": "Richtlinie konnte nicht gespeichert werden", + "load_failed": "Richtlinien konnten nicht geladen werden", + "block_direct_p2p_hint": "Gilt für Geräte in dieser Organisation. Der globale Standard wird unter Einstellungen → Verbindungsstrategie festgelegt." + }, + "attestation": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "verified": "Verifiziert", + "pending": "Pending", + "failed": "Fehlgeschlagen", + "device_list": "Attestierungseinträge", + "device_list_desc": "Hardware-Fingerabdrücke und Identitätsverifizierungsstatus", + "col_device": "Geräte-ID", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerabdruck", + "col_status": "Status", + "col_last_check": "Letzte Prüfung", + "col_actions": "Aktionen", + "no_records": "Keine Attestierungseinträge gefunden.", + "verify_success": "Gerät als verifiziert markiert", + "verify_failed": "Gerät konnte nicht verifiziert werden", + "revoke_success": "Geräteattestierung widerrufen", + "revoke_failed": "Attestierung konnte nicht widerrufen werden" + }, + "fleet": { + "title": "Dashboard", + "tab_resources": "Ressourcen", + "tab_tasks": "Aufgaben", + "tab_builder": "Workflow-Builder", + "tab_compliance": "Compliance", + "res_title": "Ressourcenzuordnung", + "res_all_types": "Alle Typen", + "res_type_printer": "Drucker", + "res_type_network_drive": "Netzlaufwerk", + "res_type_dns": "DNS-Server", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Ressource hinzufügen", + "res_name": "Ressourcenname", + "res_type": "Typ", + "res_address": "Adresse / Pfad", + "res_target": "Ziel", + "res_scope": "Bereich", + "res_scope_org": "Organisation", + "res_scope_group": "Gruppe", + "res_scope_device": "Gerät", + "res_scope_value": "Bereichswert", + "res_status": "Status", + "res_active": "Aktiv", + "res_inactive": "Inaktiv", + "res_no_data": "Keine Ressourcen gefunden. Klicken Sie auf 'Hinzufügen'.", + "res_confirm_delete": "Möchten Sie diese Ressource wirklich löschen?", + "task_title": "Aufgabenplaner", + "task_all_status": "Alle Status", + "task_status_pending": "Ausstehend", + "task_status_running": "Läuft", + "task_status_success": "Erfolgreich", + "task_status_failed": "Fehlgeschlagen", + "task_search": "Aufgaben suchen…", + "task_create": "Aufgabe erstellen", + "task_name": "Aufgabenname", + "task_type": "Typ", + "task_type_script": "Skript", + "task_type_install": "Installation", + "task_type_update": "Aktualisierung", + "task_type_restart": "Neustart", + "task_type_deploy": "Bereitstellung", + "task_type_scan": "Scan", + "task_targets": "Ziele", + "task_targets_help": "Geräte-IDs oder Gruppennamen, kommagetrennt", + "task_schedule": "Zeitplan", + "task_schedule_once": "Einmalig", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Intervall", + "task_schedule_value": "Zeitplanwert", + "task_script": "Skript / Befehl", + "task_retries": "Wiederholungen", + "task_timeout": "Timeout (s)", + "task_last_run": "Letzter Lauf", + "task_no_data": "Keine Aufgaben gefunden. Erstellen Sie eine neue Aufgabe.", + "task_confirm_delete": "Möchten Sie diese Aufgabe wirklich löschen?", + "task_output": "Aufgabenausgabe", + "task_retry": "Wiederholen", + "builder_title": "Visueller Workflow-Builder", + "builder_select_workflow": "Workflow auswählen…", + "builder_new": "Neu", + "builder_save": "Speichern", + "builder_export": "Exportieren", + "builder_execute": "Ausführen", + "builder_dry_run": "Testlauf", + "builder_triggers": "Auslöser", + "builder_conditions": "Bedingungen", + "builder_actions": "Aktionen", + "builder_results": "Ergebnisse", + "builder_transforms": "Transformationen", + "builder_properties": "Eigenschaften", + "builder_no_selection": "Wählen Sie einen Knoten, um seine Eigenschaften zu bearbeiten.", + "builder_node_trigger_manual": "Manueller Auslöser", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Ereignisauslöser", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Dienst neu starten", + "builder_node_action_file_deploy": "Datei bereitstellen", + "builder_node_action_message": "Nachricht senden", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Warnung senden", + "builder_node_result_chain": "Workflow verketten", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Workflow-Name:", + "comp_title": "Software-Compliance", + "comp_compliant": "Konform", + "comp_warning": "Warnung", + "comp_critical": "Kritisch", + "comp_score": "Durchschn. Wert", + "comp_device": "Gerät", + "comp_hostname": "Hostname", + "comp_os": "Betriebssystem", + "comp_score_col": "Wert", + "comp_issues": "Probleme", + "comp_last_scan": "Letzter Scan", + "comp_scan": "Scannen", + "comp_scan_all": "Alle scannen", + "comp_remediate": "Beheben", + "comp_remediate_confirm": "Auto-Behebung auf diesem Gerät ausführen?", + "comp_no_data": "Keine Compliance-Daten. Führen Sie einen Scan durch.", + "save": "Speichern", + "cancel": "Abbrechen", + "close": "Schließen", + "edit": "Bearbeiten", + "delete": "Löschen", + "actions": "Aktionen", + "all_orgs": "Alle Organisationen", + "select_org_placeholder": "Organisation auswählen...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Netzlaufwerk", + "type_dns": "DNS-Server", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Ressource hinzufügen", + "edit_resource": "Ressource bearbeiten", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Aktionen", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inaktiv", + "address": "Adresse / Pfad", + "scope_org": "Organisation", + "scope_group": "Gruppe", + "scope_device": "Zielgerät", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Dieses Element wirklich löschen?", + "all_statuses": "Alle Status", + "status_pending": "Ausstehend", + "status_running": "Läuft", + "status_success": "Success", + "status_failed": "Fehlgeschlagen", + "search_tasks": "Aufgaben suchen...", + "create_task": "Aufgabe erstellen", + "edit_task": "Aufgabe bearbeiten", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Dateibereitstellung", + "task_type_registry": "Registry", + "target_devices": "Zielgeräte", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Skript / Befehl", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Laden...", + "no_output": "Keine Ausgabe verfügbar", + "error_loading": "Fehler beim Laden der Daten", + "select_workflow": "Workflow auswählen...", + "new_workflow": "New", + "export": "Exportieren", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manueller Auslöser", + "node_schedule": "Schedule", + "node_event": "Ereignisauslöser", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Dienst neu starten", + "node_file_deploy": "Datei bereitstellen", + "node_send_message": "Nachricht senden", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Warnung senden", + "node_chain": "Workflow verketten", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Alle Organisationen", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Geräte-ID", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Automatische Behebung auf diesem Gerät ausführen?" + }, + "scaling": { + "title": "Dashboard", + "tab_overview": "Übersicht", + "tab_relays": "Relay-Knoten", + "tab_rules": "Zuweisungsregeln", + "tab_capacity": "Kapazitätsplanung", + "arch_title": "Netzwerkarchitektur", + "arch_loading": "Architekturdiagramm wird geladen...", + "stat_relay_nodes": "Relay-Knoten", + "stat_total_devices": "Geräte gesamt", + "stat_active_sessions": "Aktive Sitzungen", + "stat_bandwidth": "Gesamtbandbreite", + "relay_health": "Relay-Zustand", + "no_relays": "Keine Relay-Knoten konfiguriert. Fügen Sie den ersten Relay-Knoten hinzu.", + "relay_search": "Relays suchen...", + "relay_add": "Relay-Knoten hinzufügen", + "relay_edit": "Relay-Knoten bearbeiten", + "col_name": "Name", + "col_address": "Adresse", + "col_location": "Standort", + "col_devices": "Geräte", + "col_sessions": "Sitzungen", + "col_bandwidth": "Bandbreite", + "col_status": "Status", + "col_actions": "Aktionen", + "col_priority": "Priorität", + "col_rule_name": "Regelname", + "col_match": "Übereinstimmung", + "col_target_relay": "Ziel-Relay", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Beeinträchtigt", + "status_offline": "Offline", + "status_enabled": "Aktiviert", + "status_disabled": "Deaktiviert", + "confirm_delete_relay": "Möchten Sie diesen Relay-Knoten wirklich löschen?", + "confirm_delete_rule": "Möchten Sie diese Zuweisungsregel wirklich löschen?", + "rules_hint": "Zuweisungsregeln bestimmen, welcher Relay-Server bestimmte Gerätegruppen bedient. Regeln werden nach Priorität ausgewertet (niedrigste zuerst).", + "no_rules": "Keine Zuweisungsregeln.", + "rule_add": "Regel hinzufügen", + "rule_edit": "Regel bearbeiten", + "rule_match_type": "Übereinstimmungstyp", + "match_subnet": "Subnetz", + "match_group": "Gerätegruppe", + "match_tag": "Geräte-Tag", + "match_location": "Standort", + "rule_match_value": "Übereinstimmungswert", + "fallback_master": "Master-Server", + "fallback_nearest": "Nächster Relay", + "relay_max_sessions": "Max. Sitzungen", + "relay_max_bandwidth": "Max. Bandbreite (Mbps)", + "cap_tiers": "Kapazitätsstufen", + "cap_loading": "Kapazitätsdaten werden geladen...", + "cap_recommendations": "Empfehlungen", + "cap_no_recs": "Keine Empfehlungen verfügbar.", + "cap_planning": "Infrastrukturplanung", + "cap_config": "Konfiguration", + "cap_max_devices": "Max. Geräte", + "cap_max_sessions": "Max. Sitzungen", + "cap_current": "Aktuell", + "cap_utilization": "Auslastung", + "cap_tier_devices": "Gerätekapazität", + "cap_tier_sessions": "Sitzungskapazität", + "cap_tier_bandwidth": "Bandbreitenkapazität", + "cap_single_sqlite": "Einzelserver (SQLite)", + "cap_single_pg": "Einzelserver (PostgreSQL)", + "cap_master_3": "Master + 3 Relay-Knoten", + "cap_master_10": "Master + 10 Relay-Knoten", + "rec_no_relays": "Keine Relay-Knoten konfiguriert. Erwägen Sie das Hinzufügen von Relays für bessere Leistung.", + "rec_devices_high": "Geräteauslastung ist hoch. Erwägen Sie das Hinzufügen weiterer Relay-Knoten.", + "rec_sessions_high": "Sitzungskapazität nähert sich dem Limit. Erwägen Sie ein Infrastruktur-Upgrade.", + "rec_cpu_high": "Einige Relay-Knoten melden hohe CPU-Auslastung. Erwägen Sie Lastverteilung.", + "rec_all_good": "Alle Systeme arbeiten innerhalb normaler Parameter. Keine Aktion erforderlich.", + "save": "Speichern", + "cancel": "Abbrechen", + "edit": "Bearbeiten", + "delete": "Löschen", + "close": "Schließen", + "relays_info_banner": "Diese Liste dient nur zur Information. Die von Clients tatsächlich verwendeten Relay-Server werden über die Umgebungsvariable RELAY_SERVERS auf dem BetterDesk-Server konfiguriert.", + "relay_name_address_required": "Name und Adresse sind erforderlich.", + "relay_save_failed": "Relay-Knoten konnte nicht gespeichert werden.", + "relay_delete_failed": "Relay-Knoten konnte nicht gelöscht werden.", + "relay_saved": "Relay-Knoten gespeichert.", + "relay_deleted": "Relay-Knoten gelöscht.", + "rule_name_value_required": "Regelname und Trefferwert sind erforderlich.", + "rule_save_failed": "Regel konnte nicht gespeichert werden.", + "rule_delete_failed": "Regel konnte nicht gelöscht werden.", + "rule_saved": "Regel gespeichert.", + "rule_deleted": "Regel gelöscht." + }, + "cross_platform": { + "title": "Dashboard", + "tab_matrix": "Kompatibilitätsmatrix", + "tab_distribution": "Verteilung", + "tab_protocols": "Protokolle", + "tab_limitations": "Einschränkungen", + "matrix_hint": "Funktionsunterstützungsmatrix für alle unterstützten Plattformen. Grün = volle Unterstützung, Gelb = teilweise, Grau = nicht verfügbar, Blau = geplant.", + "col_feature": "Funktion", + "legend_full": "Volle Unterstützung", + "legend_partial": "Teilweise Unterstützung", + "legend_none": "Nicht verfügbar", + "legend_planned": "Geplant", + "platform_breakdown": "Plattformverteilung", + "arch_breakdown": "Architekturverteilung", + "version_breakdown": "Versionsverteilung", + "summary": "Zusammenfassung", + "total_devices": "Geräte gesamt", + "unique_platforms": "Plattformen", + "unique_archs": "Architekturen", + "unique_versions": "Client-Versionen", + "no_devices": "Keine Geräte mit Inventardaten gefunden", + "protocols_hint": "Protokoll-Fähigkeitsverhandlung stellt sicher, dass jeder Client nur die unterstützten Funktionen erhält. Der Server passt sein Verhalten basierend auf gemeldeten Fähigkeiten an.", + "capability_negotiation": "Fähigkeitsverhandlung", + "codec_support": "Codec-Unterstützung (Online-Geräte)", + "feature_support": "Funktionsunterstützung (Online-Geräte)", + "no_codec_data": "Keine Codec-Daten von Online-Geräten verfügbar.", + "no_feature_data": "Keine Funktionsdaten von Online-Geräten verfügbar.", + "protobuf_schema": "ClientCapabilities Protobuf-Schema", + "diagram_client": "Client", + "diagram_server": "Serverknoten", + "diagram_peer": "Remote-Peer", + "limitations_hint": "Jede Plattform hat spezifische Einschränkungen, die die verfügbaren Funktionen beeinflussen. Überprüfen Sie diese bei der Planung von Bereitstellungen.", + "feat_desktop_client": "Desktop-Client", + "feat_background_agent": "Hintergrund-Agent", + "feat_remote_target": "Remote-Ziel", + "feat_screen_capture": "Bildschirmaufnahme", + "feat_input_injection": "Eingabeinjektion", + "feat_file_transfer": "Dateiübertragung", + "feat_clipboard_sync": "Zwischenablage-Sync", + "feat_audio_streaming": "Audio-Streaming", + "feat_chat": "Chat", + "feat_h264": "H.264-Codec", + "feat_vp9": "VP9-Codec", + "feat_av1": "AV1-Codec", + "feat_cdap_agent": "CDAP-Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webbrowser", + "platform_chromeos": "ChromeOS", + "status_production": "Produktion", + "status_testing": "Test", + "status_planned": "Geplant", + "status_limited": "Eingeschränkt", + "status_experimental": "Experimentell", + "limit_win_uac": "UAC-Erhöhung für Service-Installation und Eingabeinjektion auf sicheren Desktops erforderlich.", + "limit_win_service": "Läuft als NSSM-Dienst; erfordert Administratorrechte zur Installation.", + "limit_win_firewall": "Windows-Firewallregeln müssen Ports 21115-21119 für Relay-Verbindungen erlauben.", + "limit_linux_wayland": "Wayland-Compositors schränken programmatische Bildschirmaufnahme ein; PipeWire-Portal-API erforderlich.", + "limit_linux_pipewire": "Audioaufnahme erfordert PipeWire; PulseAudio-Fallback verfügbar aber eingeschränkt.", + "limit_linux_arm": "ARM64-Builds verfügbar; einige Codecs verwenden möglicherweise Software-Dekodierung (langsamer).", + "limit_mac_screen": "Screen-Recording-Berechtigung erforderlich in Systemeinstellungen > Datenschutz & Sicherheit.", + "limit_mac_signing": "Agent muss mit Apple Developer ID signiert sein für die Verteilung.", + "limit_mac_notarize": "Notarisierung erforderlich für macOS Gatekeeper (Nicht-App-Store-Verteilung).", + "limit_android_projection": "MediaProjection API erfordert Benutzereinwilligung für jede Bildschirmaufnahme-Sitzung.", + "limit_android_accessibility": "Eingabeinjektion erfordert AccessibilityService; eingeschränkt ab Android 14+.", + "limit_android_battery": "Hintergrunddienst durch Doze-Modus begrenzt; ggf. Batterieoptimierungsausnahme erforderlich.", + "limit_ios_capture": "Apple verbietet Hintergrund-Bildschirmaufnahme; nur Viewer-Modus unterstützt.", + "limit_ios_input": "Keine Eingabeinjektion erlaubt; nur Fernansicht und Chat.", + "limit_ios_appstore": "Verteilung nur über App Store; TestFlight für Beta-Tests.", + "limit_web_https": "WebCodecs API und WebRTC erfordern HTTPS; HTTP fällt auf JMuxer zurück (begrenzte Codecs).", + "limit_web_codec": "Codec-Unterstützung abhängig vom Browser; H.264 breit unterstützt, VP9/AV1 variiert.", + "limit_web_performance": "Leistung durch Browser-Sandbox begrenzt; keine direkte Hardwarebeschleunigung.", + "limit_chrome_crostini": "Volle Agent-Unterstützung nur innerhalb des Crostini-Linux-Containers.", + "limit_chrome_pwa": "PWA-Modus bietet nur Webfunktionen; keine nativen Agent-Fähigkeiten.", + "limit_chrome_input": "Eingabeinjektion außerhalb des Crostini-Containers nicht unterstützt.", + "feat_multi_monitor": "Multi-Monitor", + "feat_session_recording": "Sitzungsaufzeichnung", + "feat_unattended_access": "Unbeaufsichtigter Zugriff", + "limit_linux_unprivileged": "Dienste laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict).", + "limit_win_virtual_account": "Dienste laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden." + }, + "security_audit": { + "title": "Dashboard", + "tab_overview": "Übersicht", + "tab_events": "Events", + "tab_hardening": "Härtung", + "tab_vulnerabilities": "Schwachstellen", + "security_score": "Sicherheitsbewertung", + "failed_logins": "Fehlgeschlagene Anmeldungen (24h)", + "active_bans": "Aktive Sperren", + "api_keys": "API-Schlüssel", + "old_keys": "Alte Schlüssel (>90T)", + "security_checks": "Sicherheitsprüfungen", + "tls_status": "TLS-Status", + "pass": "OK", + "warning": "Warnung", + "fail": "Fehler", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "Sichere WebSockets", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "all_events": "Alle Ereignisse", + "event_login_failed": "Anmeldung fehlgeschlagen", + "event_login_success": "Anmeldung erfolgreich", + "event_peer_banned": "Gerät gesperrt", + "event_ip_banned": "IP gesperrt", + "event_config_changed": "Konfiguration geändert", + "event_key_created": "Schlüssel erstellt", + "refresh": "Aktualisieren", + "col_time": "Zeit", + "col_action": "Aktion", + "col_actor": "Akteur", + "col_target": "Target", + "col_ip": "IP-Adresse", + "col_details": "Details", + "no_events": "Keine DLP-Ereignisse aufgezeichnet", + "hardening_hint": "Sicherheitshärtungsprioriäten für Ihre BetterDesk-Bereitstellung. Nach Schweregrad sortiert.", + "no_hardening": "Keine Härtungselemente verfügbar.", + "vuln_hint": "Ergebnisse des Abhängigkeits-Schwachstellenscans. Führen Sie npm audit regelmäßig aus.", + "no_vulns": "Keine Schwachstellen gefunden. Ihre Abhängigkeiten sind sicher." + }, + "languages": { + "title": "Dashboard", + "total_languages": "Sprachen gesamt", + "fully_translated": "Vollständig übersetzt", + "needs_review": "Prüfung erforderlich", + "reference_keys": "Referenzschlüssel", + "no_languages": "Keine Sprachdateien gefunden.", + "badge_reference": "Reference", + "badge_review": "Prüfen", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "Schlüssel", + "missing": "missing", + "extra": "extra", + "view_missing": "Fehlende Einträge anzeigen", + "fix_missing": "Fix Missing", + "missing_keys_for": "Fehlende Schlüssel für", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "und {n} weitere...", + "all_keys_present": "Alle Schlüssel sind vorhanden!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Fehlende Schlüssel in {code} müssen manuell übersetzt werden.", + "no_fix_needed": "Keine fehlenden Schlüssel zu ergänzen." + }, + "resource_control": { + "title": "Dashboard", + "tab_overview": "Übersicht", + "tab_usb": "USB Control", + "tab_optical": "Optische Laufwerke", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Ressourcenkontingente", + "compliance_by_category": "Konformität nach Kategorie", + "device_compliance": "Gerätekonformität", + "search_devices": "Geräte suchen...", + "col_device": "Geräte-ID", + "col_platform": "Plattform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Aktionen", + "stat_total_devices": "Geräte gesamt", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Konformitätsrate", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurieren", + "no_devices": "Keine Geräte mit Inventardaten gefunden", + "usb_title": "USB-Portsteuerung", + "usb_hint": "Steuern Sie den Zugriff auf USB-Speichergeräte für das ausgewählte Gerät oder die Standardrichtlinie der Organisation.", + "usb_storage_policy": "USB-Speicherrichtlinie", + "usb_whitelist": "Geräte auf der Positivliste (eines pro Zeile)", + "usb_whitelist_hint": "VID:PID (z. B. 0781:5583)", + "usb_audit_log": "Verbindungen von USB-Geräten protokollieren", + "optical_title": "Steuerung optischer Laufwerke", + "optical_hint": "Steuern Sie den Zugriff auf CD/DVD/Blu-ray-Laufwerke für das ausgewählte Gerät.", + "optical_policy": "Richtlinie für optische Laufwerke", + "optical_audit_log": "Zugriff auf optische Laufwerke protokollieren", + "monitors_title": "Monitorverwaltung", + "monitors_hint": "Konfigurieren Sie Monitoreinstellungen, einschließlich maximaler Anzahl, erzwungener Auflösung, Helligkeit und Energiezeitplänen.", + "monitors_max_count": "Maximale Monitoranzahl (0 = unbegrenzt)", + "monitors_max_hint": "0 bedeutet keine Begrenzung", + "monitors_resolution": "Maximale Auflösung", + "monitors_brightness": "Helligkeitsgrenze", + "monitors_power_schedule": "Energiezeitplan", + "monitors_power_hint": "z. B. off:22:00-06:00", + "disks_title": "Datenträgerzugriff steuern", + "disks_hint": "Konfigurieren Sie Datenträgerzugriffsrichtlinien, einschließlich Nur-Lese-Modus, Verschlüsselungspflicht und Partitionssichtbarkeit.", + "disks_readonly": "Nur-Lese-Modus erzwingen", + "disks_encryption": "Verschlüsselung verlangen (BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T.-Überwachung aktivieren", + "disks_hidden": "Ausgeblendete Partitionen", + "disks_hidden_hint": "Laufwerksbuchstaben oder Einhängepunkte, durch Kommas getrennt", + "quotas_title": "Ressourcenkontingente", + "quotas_hint": "Legen Sie CPU-, RAM-, Bandbreiten- und Datenträgerkontingente pro Benutzer für das ausgewählte Gerät fest.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Bandbreitenlimit (Mbit/s)", + "quotas_bandwidth_hint": "0 = unbegrenzt", + "quotas_disk_quota": "Datenträgerkontingent (GB)", + "quotas_disk_hint": "0 = unbegrenzt", + "quotas_process_whitelist": "Prozess-Positivliste (einer pro Zeile)", + "quotas_process_hint": "z. B. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Nur Positivliste", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "Dashboard", + "subtitle": "Übersicht Ihres RustDesk-Servers", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "import_flow": "Import Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Keine Geräte gefunden", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Status", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Laden...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this item?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write" + }, + "updates": { + "tab_title": "Updates", + "title": "Dashboard", + "desc": "Laden Sie eine vollständige Sicherung Ihrer Konsolenkonfiguration, Benutzer, Gruppen und Einstellungen herunter. Go-Server-Peer-Daten sind enthalten, wenn das BetterDesk-Backend aktiv ist.", + "current_version": "Installierte Version", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Jetzt prüfen", + "checking": "Prüfe...", + "up_to_date": "Aktuell", + "update_available": "Update verfügbar", + "changelog": "Release Notes", + "no_changelog": "Keine Versionshinweise verfügbar", + "files_changed": "Geänderte Dateien", + "files": "Dateien", + "changes_unavailable": "Änderungsliste konnte nicht geladen werden. Sie können das Update trotzdem installieren.", + "create_backup": "Vor dem Update eine Sicherung erstellen", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Update wird installiert...", + "creating_backup": "Sicherung wird erstellt...", + "downloading": "Dateien werden heruntergeladen...", + "install_success": "Update erfolgreich installiert. Die Konsole wird neu gestartet...", + "install_failed": "Update-Installation fehlgeschlagen", + "restarting": "Warten auf Neustart der Konsole...", + "restart_complete": "Konsole erfolgreich neu gestartet", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Keine Update-Version ausgewählt. Suchen Sie zuerst nach Updates.", + "backups_title": "Update-Sicherungen", + "backups_desc": "Vorab-Sicherungen, die automatisch vor jedem Update erstellt werden", + "no_backups": "Keine Update-Sicherungen gefunden", + "restore": "Wiederherstellen", + "restore_confirm": "Sind Sie sicher, dass Sie aus dieser Sicherung wiederherstellen möchten? Ausgewählte Abschnitte werden überschrieben.", + "restore_success": "Sicherung erfolgreich wiederhergestellt. Einige Änderungen erfordern möglicherein Neuladen der Seite.", + "baseline_set": "Referenz gesetzt", + "commits_behind": "Commits zurück", + "total_files": "Dateien gesamt", + "applied": "Applied", + "failed": "Fehlgeschlagen", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Go-Server", + "component_agent": "Agent", + "component_scripts": "Skripte und Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Go wird geprüft...", + "go_not_found": "Go ist nicht installiert", + "go_check_failed": "Go-Verfügbarkeit konnte nicht geprüft werden", + "server_building": "Go-Server wird kompiliert... Das kann einige Minuten dauern.", + "server_built": "Server-Binary kompiliert", + "server_build_failed": "Server-Kompilierung fehlgeschlagen", + "server_stale_title": "Server-Binary veraltet", + "server_stale_desc": "Der Quellcode des Go-Servers wurde aktualisiert, aber das laufende Binary wurde nicht neu gebaut. Bauen Sie es jetzt neu, um Sicherheits- und Bibliotheksupdates anzuwenden.", + "rebuild_server": "Server-Binary neu bauen", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Server-Binary neu gebaut und neu gestartet", + "rebuild_server_failed": "Server-Binary konnte nicht neu gebaut werden", + "server_deployed": "Server-Binary bereitgestellt", + "server_deploy_failed": "Serverbereitstellung fehlgeschlagen", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Serverquellcode wird heruntergeladen...", + "delete": "Löschen", + "delete_confirm": "Sicherung {name} dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "delete_success": "Sicherung gelöscht", + "delete_failed": "Sicherung konnte nicht gelöscht werden", + "retention_label": "Die neuesten N Sicherungen behalten", + "retention_hint": "Ältere Sicherungen werden nach jedem Update automatisch gelöscht. Verwenden Sie 0, um alle zu behalten.", + "retention_saved": "Aufbewahrungseinstellung gespeichert", + "retention_invalid": "Aufbewahrung muss eine Ganzzahl zwischen 0 und 1000 sein", + "retention_required_for_prune": "Legen Sie zuerst einen Aufbewahrungswert größer als 0 fest", + "prune_now": "Apply now", + "prune_confirm": "Nur die neuesten {n} Sicherungen behalten und den Rest löschen?", + "prune_done": "{n} Sicherung(en) gelöscht", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Update-Methode", + "strategy_download": "Vorkompiliertes Binary herunterladen", + "strategy_compile": "Aus Quellcode kompilieren", + "both_available": "Herunterladen und kompilieren", + "download_available": "Download verfügbar", + "no_method": "Keine Update-Methode", + "no_release": "No release", + "available": "Verfügbar", + "server_downloading": "Server-Binary wird heruntergeladen...", + "server_downloaded": "Server-Binary heruntergeladen", + "server_download_failed": "Download des Server-Binarys fehlgeschlagen", + "server_download_note": "Ein vorkompiliertes Binary wird aus GitHub Releases heruntergeladen. Das dauert normalerweise weniger als eine Minute.", + "install_go_hint": "Installieren Sie Go von https://go.dev/dl/, um die Kompilierung zu aktivieren, oder veröffentlichen Sie ein Release mit vorkompilierten Binarys", + "strategy_install_go": "Go automatisch installieren und kompilieren", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Automatische Neuerstellung bereit", + "toolchain_ready": "Toolchain installiert", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Go-Toolchain wird heruntergeladen...", + "toolchain_failed": "Installation der Go-Toolchain fehlgeschlagen", + "modal_title": "Update wird installiert", + "modal_done_title": "Update abgeschlossen", + "modal_close": "Schließen", + "modal_reload_now": "Konsole neu laden", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsolendateien", + "phase_server": "Go-Server", + "phase_restart": "Neustart", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Sicherung übersprungen (Benutzerauswahl)", + "server_skipped": "Go-Server übersprungen", + "server_not_selected": "Go server not selected", + "server_processing": "Go-Server-Update wird verarbeitet...", + "no_restart_needed": "Kein Neustart erforderlich", + "complete": "Update angewendet", + "complete_summary": "Das Update wurde erfolgreich angewendet.", + "complete_with_errors": "Das Update ist abgeschlossen, aber einige Schritte sind fehlgeschlagen. Details siehe unten.", + "modal_done_with_errors_title": "Update mit Fehlern abgeschlossen", + "console_will_restart": "Der Konsolenprozess wird jetzt neu gestartet...", + "restart_complete_msg": "Die Konsole hat den Neustart abgeschlossen. Klicken Sie auf Neu laden, um die neue Version zu laden. Die Seite lädt in 8 Sekunden automatisch neu.", + "refresh_recommended": "Statische Ressourcen wurden geändert — laden Sie die Seite neu, um die neue Oberfläche zu sehen.", + "confirm_title": "Update anwenden", + "confirm_with_backup": "Vorab wird automatisch eine Sicherung erstellt.", + "confirm_no_backup": "Es wird keine Sicherung erstellt (Fortfahren auf eigenes Risiko)." + }, + "permissions": { + "title": "Berechtigungen", + "subtitle": "Feingranulare Rollenberechtigungen und Überschreibungen verwalten", + "info_title": "Rollenbasierte Berechtigungen", + "info_desc": "Standardrollen erhalten vordefinierte Berechtigungen. Sie können einzelne Berechtigungen pro Rolle überschreiben, ohne die Basisrolle zu ändern.", + "select_role": "Rolle auswählen", + "select_role_placeholder": "Wählen Sie eine Rolle...", + "reset_overrides": "Überschreibungen zurücksetzen", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Serverebene", + "custom": "Custom", + "default": "Default", + "revert": "Zurücksetzen", + "saved": "Berechtigung gespeichert", + "reverted": "Überschreibung zurückgesetzt", + "all_reverted": "Alle Überschreibungen zurückgesetzt", + "confirm_reset": "Alle Berechtigungsüberschreibungen für diese Rolle zurücksetzen?", + "empty_title": "Wählen Sie eine Rolle aus", + "empty_desc": "Wählen Sie links eine Rolle, um ihre Berechtigungen anzuzeigen.", + "locked_title": "Super Admin", + "locked_desc": "Diese Rolle ist geschützt und kann nur über die Standardzuordnung geändert werden.", + "cat_device": "Geräte", + "cat_user": "Users", + "cat_server": "Serververwaltung", + "cat_org": "Organisationen", + "cat_audit": "Audit", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Geräte anzeigen", + "perm_device_connect": "Mit Geräten verbinden", + "perm_device_edit": "Geräte bearbeiten", + "perm_device_delete": "Geräte löschen", + "perm_device_ban": "Geräte sperren", + "perm_device_change_id": "Geräte-ID ändern", + "perm_user_view": "Benutzer anzeigen", + "perm_user_create": "Benutzer erstellen", + "perm_user_edit": "Benutzer bearbeiten", + "perm_user_delete": "Benutzer löschen", + "perm_server_config": "Server konfigurieren", + "perm_server_keys": "Server-Schlüssel verwalten", + "perm_org_create": "Organisationen erstellen", + "perm_org_edit": "Organisationen bearbeiten", + "perm_org_delete": "Organisationen löschen", + "perm_org_manage_users": "Organisationsbenutzer verwalten", + "perm_org_manage_devices": "Organisationsgeräte verwalten", + "perm_audit_view": "Audit anzeigen", + "perm_metrics_view": "Metriken anzeigen", + "perm_blocklist_edit": "Sperrliste bearbeiten", + "perm_cdap_view": "CDAP anzeigen", + "perm_cdap_command": "CDAP-Befehle ausführen", + "perm_cdap_terminal": "CDAP-Terminal verwenden", + "perm_cdap_files": "CDAP-Dateien verwalten", + "perm_enrollment_manage": "Registrierungen verwalten", + "perm_enrollment_approve": "Registrierungen genehmigen", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Branding bearbeiten", + "perm_server_attestation": "Server-Leistungsattestierung" + }, + "notifications": { + "title": "Benachrichtigungen", + "empty": "Keine neuen Benachrichtigungen", + "mark_all_read": "Alle als gelesen markieren", + "see_all": "Alle Hilfeanfragen anzeigen", + "help_request": "Hilfeanfrage", + "just_now": "just now" + }, + "accessibility": { + "title": "Barrierefreiheit", + "subtitle": "Passen Sie die Konsole an Sehen, Bewegung und Lesen an.", + "close": "Menü Barrierefreiheit schließen", + "profiles": "Schnellprofile", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Größerer Text, hoher Kontrast und sichtbarer Fokus.", + "profile_dyslexia": "Lesekomfort", + "profile_dyslexia_hint": "Lesbare Schrift und größerer Abstand.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reduziert Übergänge und pausiert Animationen.", + "profile_color_assist": "Farbunterstützung", + "profile_color_assist_hint": "Farbfilter, Beschriftungen und hervorgehobene Links.", + "reading": "Lesen", + "font_size": "Schriftgröße", + "line_height": "Zeilenhöhe", + "letter_spacing": "Buchstabenabstand", + "word_spacing": "Wortabstand", + "readable_font": "Lesbare Schrift", + "readable_font_hint": "Verwendet breite, vertraute Buchstabenformen.", + "dyslexia_spacing": "Abstand für Dyslexie", + "dyslexia_spacing_hint": "Fügt längeren Texten zusätzlichen Abstand hinzu.", + "visual": "Visuell", + "contrast": "Kontrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Hoher Kontrast dunkel", + "contrast_high_light": "Hoher Kontrast hell", + "contrast_yellow_black": "Gelb auf Schwarz", + "color_filter": "Farbsehfilter", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Farbsättigung", + "underline_links": "Links unterstreichen", + "underline_links_hint": "Macht Links sichtbar, ohne sich auf Farbe zu verlassen.", + "highlight_links": "Aktionen hervorheben", + "highlight_links_hint": "Zeichnet eine Kontur um Links und Schaltflächen.", + "highlight_headings": "Überschriften hervorheben", + "highlight_headings_hint": "Markiert Abschnittsüberschriften mit einer Farbleiste.", + "hide_media": "Dim media", + "hide_media_hint": "Dimmt Bilder, Videos und Canvas-Flächen.", + "interaction": "Interaktion", + "strong_focus": "Starker Fokus", + "strong_focus_hint": "Zeigt eine breite Tastaturfokus-Kontur.", + "large_cursor": "Großer Cursor", + "large_cursor_hint": "Verwendet einen größeren Zeiger mit hohem Kontrast.", + "reduce_motion": "Bewegung reduzieren", + "reduce_motion_hint": "Verkürzt Übergänge und sanftes Scrollen.", + "pause_animations": "Animationen pausieren", + "pause_animations_hint": "Stoppt wiederholte visuelle Bewegungen.", + "reading_guide": "Lesehilfe", + "reading_guide_hint": "Folgt dem Zeiger mit einer hellen Linie.", + "reading_mask": "Lesemaske", + "reading_mask_hint": "Verdunkelt Inhalte oberhalb und unterhalb des Zeigers.", + "preview": "Vorschau", + "preview_title": "Vorschau des Operator-Arbeitsbereichs", + "preview_text": "Prüfen Sie, ob Text, Links, Steuerelemente und Statusbeschriftungen gut lesbar sind, bevor Sie dieses Menü schließen.", + "preview_link": "Link zu Gerätedetails", + "preview_status": "Online", + "preview_button": "Hauptaktion", + "preview_secondary": "Secondary", + "reset": "Zurücksetzen", + "done": "Fertig" + }, + "server_mgmt": { + "title": "Server-Verwaltung", + "subtitle": "Cockpit-ähnliche Steuerung für den BetterDesk-Konsolen-Host (BETA).", + "beta_tooltip": "Beta-Funktion — in aktiver Entwicklung.", + "notice_title": "Beta-Funktion", + "notice_body": "Diese Werkzeuge laufen auf dem Host, auf dem der BetterDesk-Konsolenprozess ausgeführt wird. Alle Operationen werden auditiert.", + "tab_overview": "Übersicht", + "tab_terminal": "Terminal", + "tab_files": "Dateien", + "tab_services": "Dienste", + "cpu": "CPU", + "memory": "Speicher", + "load": "Last (Durchschnitt)", + "disks": "Festplatten", + "history": "Verlauf (letzte 60 Werte)", + "host_info": "Host-Info", + "cores": "Kerne", + "uptime": "Laufzeit", + "no_disks": "Keine Datenträgerdaten verfügbar", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY verfügbar", + "term_connect": "Verbinden", + "term_disconnect": "Trennen", + "term_clear": "Löschen", + "term_status": "Status", + "term_connecting": "Verbinden…", + "term_connected": "Verbunden", + "term_disconnected": "Getrennt", + "term_error": "Verbindungsfehler", + "term_warning": "Befehle werden als Konsolen-Prozessbenutzer ausgeführt. Sudoers-Regel hinzufügen für Erhöhung.", + "term_hint": "Tipp: Geben Sie `sudo -i` ein, um Root-Rechte zu erhalten (sudoers-Konfiguration erforderlich).", + "term_lib_failed": "Terminalbibliothek konnte nicht geladen werden", + "files_up": "Eine Ebene höher", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Größe", + "files_perms": "Modus", + "files_mtime": "Geändert", + "files_rename": "Umbenennen", + "files_rename_prompt": "New name:", + "files_empty": "Leeres Verzeichnis", + "files_error": "Verzeichnis konnte nicht aufgelistet werden", + "read_failed": "Datei konnte nicht gelesen werden", + "save_failed": "Datei konnte nicht gespeichert werden", + "rename_failed": "Umbenennen fehlgeschlagen", + "delete_failed": "Löschen fehlgeschlagen", + "delete_confirm": "Diesen Eintrag löschen?", + "mkdir_prompt": "Name des neuen Ordners:", + "mkdir_failed": "Ordner konnte nicht erstellt werden", + "file_saved": "Datei gespeichert", + "binary_warn": "Binärdatei — nur Vorschau", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Dienste suchen...", + "svc_name": "Dienst", + "svc_state": "Status", + "svc_description": "Beschreibung", + "svc_empty": "Keine Dienste gefunden", + "svc_load_failed": "Dienste konnten nicht geladen werden", + "svc_action_failed": "Aktion fehlgeschlagen", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stopp", + "svc_restart": "Neustart", + "svc_reload": "Neu laden", + "svc_enable": "Aktivieren", + "svc_disable": "Deaktivieren", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk Agent herunterladen", + "choose_platform": "Plattform auswählen", + "choose_platform_hint": "Wählen Sie den Installer, der zu Ihrem Betriebssystem passt.", + "download": "Herunterladen", + "building": "Wird gebaut…", + "failed": "Build fehlgeschlagen", + "need_help": "Benötigen Sie Hilfe?", + "powered_by": "Bereitgestellt von" + }, + "server_attestation": { + "title": "Server-Attestierung", + "subtitle": "Leistungs-Benchmark zur Bestimmung der gleichzeitigen Fernverbindungskapazität bei einem 80%-CPU-, RAM- und Festplatten-Schwellenwert.", + "warning_title": "Lasttest", + "warning_body": "Der Benchmark simuliert parallele WebSocket-Verbindungen zu den Signal- und Relay-Servern. Außerhalb der Stoßzeiten ausführen — dieser Test belastet die Produktion.", + "run_benchmark": "Benchmark ausführen", + "abort": "Abbrechen", + "download_report": "JSON-Bericht herunterladen", + "last_test": "Letzter Test", + "no_test_yet": "Es wurde noch kein Benchmark ausgeführt", + "max_connections": "Maximale Verbindungen", + "threshold_80": "80%-Schwellenwert — endgültige Metriken", + "disk": "Festplatte", + "ramp_chart": "Last-Rampen-Diagramm", + "connections": "Verbindungen", + "connections_short": "Verb.", + "tier_guide_title": "Was bedeutet jede Stufe?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNBEWERTET", + "tier_bronze_desc": "1–25 gleichzeitige Verbindungen — kleiner VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 Verbindungen — mittlerer Server (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 Verbindungen — Hochleistungsserver (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 Verbindungen — Enterprise-Infrastruktur (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ Verbindungen — Turbo-Klasse: dedizierte Hardware, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Hinweis: In Docker können CPU/RAM-Metriken Containergrenzen anstatt des physischen Hosts widerspiegeln.", + "badge_tooltip": "BetterDesk Server-Attestierung — Server-Leistungszertifizierung", + "confirm_run": "Dieser Benchmark führt einen Lasttest des Servers mit simulierten Verbindungen durch. Fortfahren?", + "starting": "Wird gestartet…", + "complete": "Benchmark abgeschlossen", + "signal_peers": "Signal-Peers", + "relay_sessions": "Relay-Sitzungen", + "page_error": "Fehler beim Laden der Server-Attestierungsseite", + "mode_estimated": "Geschätzt (WebSocket nicht erreichbar)", + "incomplete": "Benchmark abgeschlossen ohne gültige Einstufung" + }, + "commercialization": { + "title": "Kommerzialisierung", + "subtitle": "Support-Pakete, abrechenbare Sitzungen und Arbeitsberichte", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Frühe Funktion — Abrechnung und Pakete befinden sich in aktiver Entwicklung.", + "tabs": { + "overview": "Übersicht", + "packages": "Pakete & Verträge", + "sessions": "Sitzungen", + "reports": "Berichte", + "settings": "Erweiterte Einstellungen" }, - "branding": { - "identity_title": "Markenidentität", - "identity_desc": "Passen Sie den Anwendungsnamen und die Beschreibung an, die in der Konsole angezeigt werden", - "app_name": "Anwendungsname", - "app_description": "Anwendungsbeschreibung", - "logo_title": "Logo", - "logo_desc": "Wählen Sie, wie Ihr Logo in der Seitenleiste und auf der Anmeldeseite erscheint", - "logo_type_icon": "Material-Symbol", - "logo_type_svg": "SVG-Code", - "logo_type_image": "Bild-URL", - "logo_icon_name": "Symbolname", - "logo_icon_hint": "Geben Sie einen Material Icons-Namen ein (z.B. dns, cloud, security). Siehe fonts.google.com/icons", - "logo_svg_code": "SVG-Code", - "logo_svg_hint": "Fügen Sie Ihr SVG-Markup hier ein. Unterstützt vollständige -Elemente mit Pfaden und Stilen.", - "logo_image_upload": "Bild hochladen", - "logo_image_choose": "Bilddatei auswählen", - "logo_image_hint": "PNG, JPG, GIF, WebP oder SVG. Max. 1,5 MB. Das Bild wird als Base64-Daten gespeichert.", - "logo_image_url": "Bilddaten / URL", - "logo_image_url_hint": "Wird automatisch beim Hochladen ausgefüllt oder manuell als URL eingegeben.", - "logo_image_too_large": "Bild ist zu groß. Maximale Größe beträgt 1,5 MB.", - "logo_image_invalid_type": "Ungültiger Dateityp. Verwenden Sie PNG, JPG, GIF, WebP oder SVG.", - "preview": "Vorschau", - "colors_title": "Farbschema", - "colors_desc": "Passen Sie die Farbpalette an. Leer lassen für Standardwerte.", - "colors_backgrounds": "Hintergründe", - "colors_text": "Text", - "colors_accents": "Akzentfarben", - "colors_borders": "Rahmen", - "import_export_title": "Importieren / Exportieren", - "import_export_desc": "Speichern Sie Ihr Theme als JSON-Datei oder importieren Sie eines von einer anderen Instanz", - "export_theme": "Theme exportieren", - "import_theme": "Theme importieren", - "reset_defaults": "Auf Standardwerte zurücksetzen", - "save_branding": "Branding speichern", - "saved": "Gespeichert", - "exported": "Theme exportiert", - "imported": "Theme erfolgreich importiert. Wird neu geladen...", - "import_error": "Theme konnte nicht importiert werden. Ungültiges Dateiformat.", - "reset_confirm": "Sind Sie sicher, dass Sie das Branding auf die Standardwerte zurücksetzen möchten? Dies kann nicht rückgängig gemacht werden.", - "reset_success": "Branding auf Standardwerte zurückgesetzt. Wird neu geladen...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Primärer Text, der als Markenlogo angezeigt wird", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Sekundärer Text unter dem Logo (z. B. Produktname oder Slogan)", - "logo_upload_success": "Logo erfolgreich hochgeladen.", - "typography_title": "Typography", - "typography_desc": "Wählen Sie Schriftarten für Überschriften und Fließtext. Schriftarten werden zur Selbstbereitstellung auf den Server heruntergeladen.", - "font_heading": "Schriftart für Überschriften", - "font_heading_hint": "Verwendet für Überschriften (H1–H6) und Textlogo", - "font_body": "Body Font", - "font_body_hint": "Verwendet für Fließtext und UI-Elemente", - "font_search_placeholder": "Schriftarten suchen...", - "font_system_default": "Systemstandard", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "Schriftarten auf dem Server heruntergeladen", - "agent_desc": "Das öffentliche Agent-Downloadportal für Endbenutzer anpassen.", - "agent_show_powered": "\"Powered by BetterDesk\" anzeigen", - "agent_show_powered_hint": "Die BetterDesk-Zuschreibung in der Fußzeile des Downloadportals anzeigen.", - "agent_title": "Agent-Downloadseite", - "background_desc": "Ein Konsolen-Hintergrundbild, Farbverlauf oder einfarbigen Hintergrund festlegen. Karten schweben darüber.", - "background_title": "Hintergrund & Erscheinungsbild", - "bg_blur": "Hintergrundunschärfe", - "bg_color": "Hintergrundfarbe", - "bg_gradient": "CSS-Farbverlauf", - "bg_gradient_hint": "Beliebiger gültiger CSS-Farbverlauf, z. B. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_choose": "Bilddatei auswählen", - "bg_image_hint": "PNG, JPG, WebP oder GIF. Maximal 8 MB. Auf dem Server gespeichert.", - "bg_image_invalid_type": "Ungültiger Dateityp. Bitte PNG, JPG, WebP oder GIF verwenden.", - "bg_image_too_large": "Bild ist zu groß. Maximale Größe beträgt 8 MB.", - "bg_image_upload": "Hintergrundbild hochladen", - "bg_image_url": "Bildpfad / URL", - "bg_overlay": "Dunkle Überlagerung", - "bg_overlay_hint": "Verdunkelt den Hintergrund für bessere Lesbarkeit des Textes.", - "bg_size": "Bildgröße", - "bg_size_auto": "Auto (Original)", - "bg_size_contain": "Einpassen (Contain)", - "bg_size_cover": "Abdecken (Bildschirm füllen)", - "bg_type_color": "Einfarbig", - "bg_type_gradient": "Farbverlauf", - "bg_type_image": "Bild", - "bg_type_none": "Keiner", - "bg_upload_success": "Hintergrundbild erfolgreich hochgeladen.", - "custom_css_desc": "Erweitert: Benutzerdefiniertes CSS einfügen, das auf der gesamten Konsole und der Anmeldeseite angewendet wird.", - "custom_css_hint": "Mit Vorsicht verwenden. Ungültige oder unsichere Regeln werden bereinigt. Maximal 20.000 Zeichen.", - "custom_css_title": "Benutzerdefiniertes CSS", - "footer_desc": "Eine benutzerdefinierte Fußzeile hinzufügen, die auf dem Anmeldebildschirm und in der Konsolenseitenleiste angezeigt wird.", - "footer_text": "Fußzeilentext", - "footer_text_hint": "z. B. ein Urheberrechtshinweis oder Firmenname.", - "footer_title": "Fußzeile & Copyright", - "login_bg_inherit": "Wie die Konsole", - "login_desc": "Überschrift, Untertitel und Hintergrund des Anmeldebildschirms anpassen.", - "login_heading": "Anmeldeüberschrift", - "login_heading_placeholder": "Willkommen zurück", - "login_subheading": "Anmeldeuntertitel", - "login_subheading_placeholder": "Bei Ihrem Konto anmelden", - "login_title": "Anmeldeseite", - "powered_by": "Entwickelt von", - "show_powered": "BetterDesk-Zuschreibung anzeigen", - "show_powered_hint": "Den BetterDesk-Namen und die Version in der Anmeldefußzeile und Seitenleiste anzeigen." + "clock": { + "title": "Serverzeit (NTP)", + "check_now": "Jetzt prüfen", + "unsynced": "Serveruhr nicht synchronisiert — abrechenbare Sitzungen können blockiert werden" }, - "device_detail": { - "tab_overview": "Übersicht", - "tab_tags": "Tags und Notizen", - "tab_actions": "Aktionen", - "section_identity": "Identität", - "section_network": "Netzwerk", - "section_timestamps": "Zeitstempel", - "section_connect": "Verbindung", - "section_manage": "Verwaltung", - "folder": "Ordner", - "status_tier": "Statusstufe", - "device_banned": "Dieses Gerät ist gesperrt", - "no_reason": "Kein Grund angegeben", - "tags": "Tags", - "no_tags": "Keine Tags diesem Gerät zugewiesen", - "tag_placeholder": "Tag-Namen eingeben...", - "add_tag": "Hinzufügen", - "tag_exists": "Dieses Tag existiert bereits", - "notes": "Notizen", - "notes_placeholder": "Notizen zu diesem Gerät hinzufügen...", - "danger_zone": "Gefahrenbereich", - "action_connect_web": "Web-Remote", - "action_connect_web_desc": "Über Browser-Remote-Desktop verbinden", - "action_native_remote": "BetterDesk-Fernzugriff", - "action_native_remote_desc": "Nativer JPEG-Stream — keine Plugins erforderlich", - "action_connect_desktop": "Desktop-Client", - "action_connect_desktop_desc": "In Desktop-Client-App öffnen", - "action_change_id_desc": "Geräte-Registrierungs-ID ändern", - "action_ban_desc": "Dieses Gerät am Verbinden hindern", - "action_unban_desc": "Diesem Gerät wieder erlauben, sich zu verbinden", - "action_delete_desc": "Dieses Gerät dauerhaft entfernen", - "tab_hardware": "Hardware", - "tab_metrics": "Metriken", - "section_system": "System", - "section_cpu": "Prozessor", - "section_memory": "Arbeitsspeicher", - "section_displays": "Bildschirme", - "section_encoding": "Encoding-Fähigkeiten", - "section_live_metrics": "Live-Metriken", - "section_current_usage": "Aktuelle Auslastung", - "section_usage_history": "Auslastungsverlauf", - "os": "Betriebssystem", - "version": "Version", - "cpu_model": "CPU-Modell", - "cpu_cores": "CPU-Kerne", - "cpu_freq": "CPU-Frequenz", - "total_memory": "Gesamtspeicher", - "metric_memory": "Arbeitsspeicher", - "metric_disk": "Festplatte", - "metrics_updated": "Aktualisiert", - "device_groups": "Gruppen", - "no_sysinfo": "Keine Hardwareinformationen verfügbar", - "no_sysinfo_hint": "Systeminfo erscheint, nachdem das Gerät einen Sysinfo-Bericht gesendet hat", - "no_metrics": "Keine Metriken verfügbar", - "no_metrics_hint": "Metriken erscheinen, nachdem das Gerät Heartbeat-Berichte gesendet hat", - "chart_oldest": "← Älteste", - "chart_newest": "Neueste →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Dateien", - "agent_lazy_hint": "Klicken Sie auf diesen Tab, um Live-Daten vom Agenten zu laden", - "agent_offline": "Agent ist offline", - "agent_timeout": "Agent hat nicht rechtzeitig geantwortet", - "agent_error": "Daten vom Agenten konnten nicht geladen werden", - "service_name": "Name", - "service_display": "Anzeigename", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktive abrechenbare Sitzungen" }, - "inventory": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "device_id": "Geräte-ID", - "hostname": "Hostname", - "os": "Betriebssystem", - "cpu": "Processor", - "cpu_cores": "CPU-Kerne", - "cpu_usage": "CPU-Auslastung", - "memory": "Memory", - "memory_total": "Gesamtspeicher", - "memory_used": "Belegter Speicher", - "memory_available": "Verfügbarer Speicher", - "memory_usage": "Speicherauslastung", - "swap": "Swap", - "disks": "Festplatten", - "disk_count": "Festplattenanzahl", - "network": "Network Adapters", - "network_interfaces": "Netzwerkschnittstellen", - "software": "Software", - "software_count": "Installierte Software", - "system": "System", - "kernel": "Kernel", - "architecture": "Architektur", - "uptime": "Uptime", - "frequency": "Frequenz", - "physical_cores": "Physische Kerne", - "logical_cores": "Logische Kerne", - "model": "Modell", - "usage": "Auslastung", - "total": "Gesamt", - "used": "Belegt", - "available": "Verfügbar", - "mount_point": "Einhängepunkt", - "removable": "Wechselbar", - "mac_address": "MAC-Adresse", - "ip_addresses": "IP-Adressen", - "traffic": "Datenverkehr", - "collect_now": "Jetzt erfassen", - "collector_running": "Erfassung läuft", - "collector_stopped": "Erfassung gestoppt", - "last_upload": "Letzter Upload", - "total_uploads": "Gesamt", - "last_seen": "Zuletzt gesehen", - "collected_at": "Erfasst am", - "no_data": "No hardware data available", - "no_devices": "Keine Geräte mit Inventardaten gefunden", - "detail_title": "Geräte-Inventardetails", - "telemetry": "Telemetrie", - "view_detail": "Details anzeigen", - "export": "Exportieren", - "refresh": "Aktualisieren" + "packages": { + "new": "Neues Paket", + "name": "Name", + "included_minutes": "Enthaltene Minuten", + "overage_rate": "Überziehungssatz / h", + "currency": "Währung", + "heading": "Support-Pakete", + "prompt_name": "Paketname", + "create_title": "Neues Paket für Organisation", + "create_submit": "Paket erstellen", + "select_org": "Organisation", + "select_org_placeholder": "Organisation wählen…" }, - "tickets": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "create": "Erstellen", - "edit": "Bearbeiten", - "delete": "Löschen", - "detail": "Ticketdetails", - "ticket_id": "Ticket-ID", - "ticket_title": "Titel", - "description": "Beschreibung", - "status": "Status", - "priority": "Priorität", - "category": "Kategorie", - "assigned_to": "Zugewiesen an", - "created_by": "Erstellt von", - "device": "Gerät", - "sla_due": "SLA-Fälligkeit", - "created_at": "Erstellt", - "updated_at": "Aktualisiert", - "resolved_at": "Gelöst", - "closed_at": "Geschlossen", - "status_open": "Offen", - "status_in_progress": "In Bearbeitung", - "status_resolved": "Gelöst", - "status_closed": "Geschlossen", - "priority_low": "Niedrig", - "priority_medium": "Mittel", - "priority_high": "Hoch", - "priority_critical": "Kritisch", - "category_general": "Allgemein", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Netzwerk", - "category_access": "Zugang", - "category_other": "Sonstiges", - "comments": "Kommentare", - "add_comment": "Kommentar hinzufügen", - "comment_placeholder": "Kommentar schreiben...", - "internal_note": "Interne Notiz (für Endbenutzer nicht sichtbar)", - "attachments": "Anhänge", - "upload_attachment": "Anhang hochladen", - "download": "Schlüssel herunterladen", - "connect_device": "Mit Gerät verbinden", - "no_tickets": "Keine Tickets gefunden", - "no_comments": "Noch keine Kommentare", - "no_attachments": "Keine Anhänge", - "title_required": "Titel ist erforderlich", - "delete_confirm": "Sind Sie sicher, dass Sie Ticket Nr. {id} löschen möchten?", - "delete_success": "Gerät erfolgreich gelöscht", - "created_success": "Ticket erfolgreich erstellt", - "updated_success": "Ticket erfolgreich aktualisiert", - "sla_overdue": "SLA überfällig", - "filter_all": "Alle", - "search_placeholder": "Geräte suchen...", - "assign_to_me": "Mir zuweisen", - "unassign": "Zuweisung aufheben", - "stats_total": "Gesamt", - "stats_open": "Offen", - "stats_in_progress": "In Bearbeitung", - "stats_resolved": "Gelöst", - "stats_closed": "Geschlossen" - }, - "activity": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "device": "Gerät", - "hostname": "Hostname", - "sessions": "Sitzungen", - "idle_time": "Leerlaufzeit", - "active_time": "Aktive Zeit", - "last_report": "Letzter Bericht", - "top_apps": "Top-Anwendungen", - "app_name": "Anwendungsname", - "window_title": "Fenstertitel", - "category": "Kategorie", - "duration": "Dauer", - "started_at": "Gestartet", - "ended_at": "Beendet", - "session_count": "Sitzungsanzahl", - "total_active": "Gesamtaktiv", - "total_idle": "Gesamtleerlauf", - "detail_count": "Detaileinträge", - "no_data": "No hardware data available", - "no_sessions": "Keine Sitzungen aufgezeichnet", - "filter_from": "Von", - "filter_to": "Bis", - "filter_apply": "Filter anwenden", - "hours": "Stunden", - "minutes": "Minuten", - "seconds": "Sekunden", - "category_browser": "Browser", - "category_productivity": "Produktivität", - "category_communication": "Kommunikation", - "category_development": "Entwicklung", - "category_media": "Medien", - "category_gaming": "Spiele", - "category_system": "System", - "category_other": "Sonstiges", - "summary": "Zusammenfassung", - "details": "Gerätedetails", - "refresh": "Aktualisieren", - "search": "Geräte suchen...", - "date_range": "Datumsbereich", - "device_id": "Geräte-ID", - "session_start": "Sitzungsbeginn", - "session_end": "Sitzungsende", - "user": "Benutzer", - "no_activity": "Keine Aktivität aufgezeichnet", - "reported_at": "Reported At", - "detail": "Ticketdetails", - "no_apps": "Keine Anwendungen" - }, - "automation": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "rules": "Alarmregeln", - "rules_subtitle": "Bedingungen definieren, die Benachrichtigungen auslösen", - "alerts": "Alarmverlauf", - "alerts_subtitle": "Ausgelöste Alarme anzeigen und bestätigen", - "commands": "Remote-Befehle", - "commands_subtitle": "Befehle an Remote-Geräte senden", - "smtp": "SMTP-Konfiguration", - "smtp_subtitle": "E-Mail-Benachrichtigungseinstellungen", - "rule_name": "Regelname", - "description": "Beschreibung", - "condition_type": "Bedingungstyp", - "condition_op": "Operator", - "condition_value": "Schwellenwert", - "severity": "Schweregrad", - "scope_device": "Zielgerät", - "scope_all": "Alle Geräte", - "cooldown": "Abklingzeit (Sekunden)", - "notify_emails": "Benachrichtigungs-E-Mails", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "create_rule": "Regel erstellen", - "edit_rule": "Regel bearbeiten", - "delete_rule": "Regel löschen", - "acknowledge": "Bestätigen", - "acknowledged": "Bestätigt", - "unacknowledged": "Unbestätigt", - "triggered_at": "Ausgelöst am", - "severity_info": "Info", - "severity_warning": "Warnung", - "severity_critical": "Kritisch", - "op_gt": "Größer als", - "op_gte": "Größer oder gleich", - "op_lt": "Kleiner als", - "op_lte": "Kleiner oder gleich", - "op_eq": "Gleich", - "op_neq": "Ungleich", - "type_cpu_usage": "CPU-Auslastung (%)", - "type_memory_usage": "Speicherauslastung (%)", - "type_disk_usage": "Festplattenauslastung (%)", - "type_offline_duration": "Offline-Dauer (s)", - "type_idle_duration": "Leerlaufdauer (s)", - "type_custom": "Benutzerdefiniert", - "command_type": "Befehlstyp", - "command_payload": "Befehl / Skript", - "command_result": "Ergebnis", - "command_status": "Status", - "send_command": "Befehl senden", - "status_pending": "Ausstehend", - "status_running": "Läuft", - "status_completed": "Abgeschlossen", - "status_failed": "Fehlgeschlagen", - "smtp_host": "SMTP-Host", - "smtp_port": "Port", - "smtp_secure": "TLS verwenden", - "smtp_user": "Benutzername", - "smtp_pass": "Passwort", - "smtp_from": "Absenderadresse", - "smtp_test": "Verbindung testen", - "smtp_save": "Konfiguration speichern", - "smtp_test_success": "Verbindung erfolgreich", - "smtp_test_failed": "Verbindung fehlgeschlagen", - "no_rules": "Keine Zuweisungsregeln.", - "no_alerts": "Keine Alarme ausgelöst", - "no_commands": "Keine Befehle gesendet", - "id_payload_required": "Geräte-ID und Payload sind erforderlich", - "no_commands_sent": "Noch keine Befehle gesendet" - }, - "file_transfer": { - "title": "Dashboard", - "transfers": "Übertragungen", - "new_transfer": "Neue Übertragung", - "upload": "Hochladen", - "download": "Schlüssel herunterladen", - "direction": "Direction", - "filename": "Dateiname", - "file_size": "Dateigröße", - "mime_type": "MIME-Typ", - "progress": "Fortschritt", - "status": "Status", - "device": "Gerät", - "initiated_by": "Gestartet von", - "created_at": "Erstellt", - "cancel": "Abbrechen", - "cancel_confirm": "Sind Sie sicher, dass Sie diese Übertragung abbrechen möchten?", - "download_file": "Datei herunterladen", - "browse_files": "Dateien durchsuchen", - "select_file": "Datei auswählen", - "select_device": "Gerät auswählen", - "no_transfers": "Keine Dateiübertragungen", - "status_pending": "Ausstehend", - "status_active": "Aktiv", - "status_completed": "Abgeschlossen", - "status_failed": "Fehlgeschlagen", - "status_cancelled": "Abgebrochen", - "bytes_transferred": "Übertragene Bytes", - "chunks": "Blöcke", - "transfer_started": "Übertragung gestartet", - "transfer_completed": "Übertragung abgeschlossen", - "transfer_failed": "Übertragung fehlgeschlagen", - "transfer_cancelled": "Übertragung abgebrochen", - "max_file_size": "Maximale Dateigröße: 4 GB", - "error_too_large": "Datei ist zu groß", - "error_no_device": "Kein Gerät ausgewählt", - "error_no_file": "Keine Datei ausgewählt" - }, - "network": { - "title": "Dashboard", - "targets": "Überwachungsziele", - "add_target": "Ziel hinzufügen", - "edit_target": "Ziel bearbeiten", - "delete_target": "Ziel löschen", - "delete_confirm": "Sind Sie sicher, dass Sie dieses Ziel löschen möchten?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Prüftyp", - "timeout": "Zeitlimit (ms)", - "interval": "Intervall (ms)", - "enabled": "Aktiviert", - "status": "Status", - "last_check": "Letzte Prüfung", - "last_rtt": "Letzte RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Erreichbar", - "status_down": "Nicht erreichbar", - "status_unknown": "Unbekannt", - "check_now": "Jetzt prüfen", - "history": "History", - "stats": "Statistiken", - "total_targets": "Ziele gesamt", - "targets_up": "Erreichbare Ziele", - "targets_down": "Nicht erreichbare Ziele", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP-Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Werkzeuge", - "ping_tool": "Ping-Test", - "tcp_tool": "TCP-Port-Prüfung", - "http_tool": "HTTP-Prüfung", - "dns_tool": "DNS-Auflösung", - "monitor_start": "Überwachung starten", - "monitor_stop": "Überwachung stoppen", - "monitor_running": "Überwachung läuft", - "monitor_stopped": "Überwachung gestoppt", - "no_targets": "Keine Überwachungsziele konfiguriert", - "no_history": "Kein Prüfverlauf verfügbar", - "error_code": "Fehler", - "status_code": "HTTP-Statuscode", - "search_targets": "Ziele suchen...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Prüfverlauf", - "name_host_required": "Name und Host sind erforderlich", - "uptime": "Uptime", - "response_time": "Antwortzeit", - "avg_response": "Durchschnittliche Antwort", - "charts": "Diagramme", - "realtime": "Echtzeit", - "response_time_ms": "Antwortzeit (ms)", - "uptime_percent": "Verfügbarkeit %", - "last_24h": "Letzte 24 Stunden", - "last_7d": "Letzte 7 Tage", - "last_30d": "Letzte 30 Tage" - }, - "dataguard": { - "title": "Dashboard", - "policies": "Richtlinien", - "add_policy": "Richtlinie hinzufügen", - "edit_policy": "Richtlinie bearbeiten", - "delete_policy": "Richtlinie löschen", - "delete_confirm": "Sind Sie sicher, dass Sie diese Richtlinie löschen möchten?", - "policy_name": "Name", - "policy_description": "Beschreibung", - "policy_desc": "Richtlinienbeschreibung", - "status": "Status", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "rules": "Alarmregeln", - "add_rule": "Regel hinzufügen", - "rule_type": "Regeltyp", - "rule_type_usb": "USB-Gerät", - "rule_type_file": "Dateioperation", - "action": "Aktion", - "action_allow": "Erlauben", - "action_block": "Blockieren", - "action_log": "Nur protokollieren", - "filter": "Filter", - "vid": "Hersteller-ID (VID)", - "pid": "Produkt-ID (PID)", - "serial": "Seriennummer", - "device_class": "Geräteklasse", - "drive_type": "Laufwerkstyp", - "file_extensions": "Dateierweiterungen", - "events": "DLP-Ereignisse", - "event_source": "Quelle", - "event_source_usb": "USB", - "event_source_file": "Datei", - "event_type": "Ereignistyp", - "event_details": "Details", - "no_policies": "Keine DLP-Richtlinien konfiguriert", - "no_events": "Keine DLP-Ereignisse aufgezeichnet", - "stats": "Statistiken", - "total_events": "Ereignisse gesamt", - "blocked_events": "Blockiert", - "logged_events": "Protokolliert", - "usb_events": "USB-Ereignisse", - "file_events": "Datei-Ereignisse", - "device_id": "Geräte-ID", - "policy_matched": "Richtlinie übereinstimmend", - "timestamp": "Zeitstempel", - "drive_removable": "Wechselbar", - "drive_fixed": "Fest", - "drive_network": "Netzwerk", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unbekannt", - "total_policies": "Richtlinien gesamt", - "active_policies": "Aktive Richtlinien", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Richtlinien", - "tab_events": "Events", - "search_policies": "Richtlinien suchen...", - "create_policy": "Richtlinie erstellen", - "policy_type": "Richtlinientyp", - "scope": "Scope", - "events_count": "Events", - "search_events": "Ereignisse suchen...", - "event_time": "Event Time", - "device": "Gerät", - "policy": "Richtlinie", - "detail": "Ticketdetails", - "scope_help": "Kommagetrennte Geräte-IDs oder leer lassen für alle", - "scope_all": "Alle Geräte", - "active": "Active", - "type_file_type": "Dateityp", - "type_usb": "USB", - "type_clipboard": "Zwischenablage", - "type_screen_share": "Bildschirmfreigabe", - "type_file_transfer": "Dateiübertragung" + "sessions": { + "device": "Gerät", + "operator": "Operator", + "duration": "Dauer", + "phase": "Phase", + "amount": "Betrag" }, "reports": { - "title": "Dashboard", - "generate": "Konfiguration generieren", - "generate_csv": "CSV exportieren", - "report_type": "Berichtstyp", - "type_devices": "Geräteübersicht", - "type_activity": "Aktivitätsübersicht", - "type_security": "Sicherheitsbericht", - "type_tickets": "Ticketbericht", - "type_network": "Netzwerkbericht", - "type_inventory": "Inventarbericht", - "type_alerts": "Alarmbericht", - "saved": "Gespeichert", - "save_report": "Bericht speichern", - "delete_report": "Bericht löschen", - "delete_confirm": "Sind Sie sicher, dass Sie diesen gespeicherten Bericht löschen möchten?", - "no_saved": "Keine gespeicherten Berichte", - "report_title": "Titel", - "created_by": "Erstellt von", - "created_at": "Erstellt", - "filters": "Filter", - "date_from": "Von", - "date_to": "Bis", - "device_filter": "Geräte-ID", - "generated_at": "Generiert am", - "section": "Datenabschnitt", - "total_devices": "Geräte gesamt", - "online": "Online", - "offline": "Offline", - "banned": "Gesperrt", - "platform_distribution": "Plattformverteilung", - "top_applications": "Top-Anwendungen", - "total_active": "Gesamtaktiv", - "total_idle": "Gesamtleerlauf", - "dlp_stats": "DLP-Statistiken", - "banned_devices": "Gesperrte Geräte", - "audit_logs": "Audit-Protokolle", - "ticket_stats": "Ticketstatistiken", - "category_distribution": "Kategorieverteilung", - "priority_distribution": "Prioritätsverteilung", - "targets_status": "Zielstatus", - "os_distribution": "Betriebssystemverteilung", - "avg_ram": "Durchschnittlicher RAM", - "alert_rules": "Alarmregeln", - "recent_alerts": "Letzte Alarme", - "tab_generate": "Bericht generieren", - "tab_saved": "Gespeicherte Berichte", - "type_devices_desc": "Übersicht aller Geräte, Plattformen und Status", - "type_activity_desc": "Zusammenfassung von Anwendungsnutzung und Leerlaufzeit", - "type_security_desc": "Sperraktionen, DLP-Ereignisse und Audit-Protokolle", - "type_tickets_desc": "Ticketstatistiken und SLA-Leistung", - "type_network_desc": "Netzwerküberwachungsziele und Verfügbarkeitsdaten", - "type_inventory_desc": "Zusammenfassung von Hardware- und Softwareinventar", - "type_alerts_desc": "Alarmregeln und Verlauf ausgelöster Alarme", - "report_name": "Berichtsname", - "format": "Format", - "save": "Speichern", - "preview": "Vorschau", - "download": "Schlüssel herunterladen", - "delete_saved": "Bericht löschen", - "raw_json": "Raw JSON" + "session": "Sitzung", + "summary": "Zusammenfassung", + "date": "Datum" }, - "tenants": { - "title": "Dashboard", - "list": "Mandanten", - "add_tenant": "Mandant hinzufügen", - "edit_tenant": "Mandant bearbeiten", - "delete_tenant": "Mandant löschen", - "delete_confirm": "Sind Sie sicher, dass Sie diesen Mandanten löschen möchten? Alle Geräte- und Benutzerzuweisungen werden entfernt.", - "name": "Name", - "slug": "Slug", - "contact_name": "Kontaktname", - "contact_email": "Kontakt-E-Mail", - "max_devices": "Max. Geräte", - "max_devices_hint": "0 = unbegrenzt", - "notes": "Notizen", - "active": "Active", - "inactive": "Inaktiv", - "devices": "Geräte", - "users": "Benutzer", - "assign_device": "Gerät zuweisen", - "assign_devices": "Geräte zuweisen", - "remove_device": "Gerät entfernen", - "assign_user": "Benutzer zuweisen", - "remove_user": "Benutzer entfernen", - "no_tenants": "Keine Mandanten konfiguriert", - "no_devices": "Keine Geräte mit Inventardaten gefunden", - "no_users": "Keine Benutzer diesem Mandanten zugewiesen", - "stats": "Statistiken", - "total_devices": "Geräte gesamt", - "online_devices": "Online-Geräte", - "total_users": "Benutzer gesamt", - "created_at": "Erstellt", - "updated_at": "Aktualisiert", - "slug_exists": "Mandanten-Slug existiert bereits", - "total_tenants": "Mandanten gesamt", - "active_tenants": "Aktive Mandanten", - "search": "Search devices...", - "create_tenant": "Mandant erstellen", - "detail": "Ticketdetails", - "contact": "Kontakt", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "max": "max", - "info": "Informationen", - "status": "Status" + "contracts": { + "title": "Organisationsverträge", + "new": "Paket zuweisen", + "org": "Organisation", + "package": "Paket", + "remaining": "Verbleibende Minuten", + "status": "Status", + "actions": "Aktionen", + "suspend": "Aussetzen", + "activate": "Aktivieren", + "select_org": "Organisation wählen", + "select_package": "Paket wählen", + "no_orgs": "Keine Organisationen gefunden", + "no_packages": "Erstellen Sie zuerst ein Paket" }, - "registrations": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "search_placeholder": "Geräte suchen...", - "no_registrations": "Keine Registrierungsanfragen", - "col_device_id": "Geräte-ID", - "col_hostname": "Hostname", - "col_platform": "Plattform", - "col_ip": "IP-Adresse", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Angefordert", - "col_actions": "Aktionen", - "status_pending": "Ausstehend", - "status_approved": "Genehmigt", - "status_rejected": "Abgelehnt", - "approve_btn": "Genehmigen", - "approve_confirm": "Sind Sie sicher, dass Sie dieses Gerät genehmigen möchten? Es erhält Server-Anmeldedaten und kann sich automatisch verbinden.", - "approved_success": "Geräteregistrierung erfolgreich genehmigt", - "reject_btn": "Ablehnen", - "reject_title": "Registrierung ablehnen", - "reject_confirm": "Sind Sie sicher, dass Sie diese Registrierungsanfrage ablehnen möchten?", - "reject_reason": "Grund (optional)", - "reject_reason_placeholder": "Ablehnungsgrund eingeben...", - "rejected_success": "Geräteregistrierung abgelehnt", - "delete_confirm": "Sind Sie sicher, dass Sie diesen Registrierungseintrag löschen möchten?", - "deleted_success": "Registrierungseintrag gelöscht", - "enrollment_title": "Geräteregistrierung", - "enrollment_subtitle": "Ausstehende Registrierungsanfragen von BetterDesk-Desktopclients", - "enrollment_empty": "Keine ausstehenden Registrierungsanfragen", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Anzeigename", - "enrollment_display_name_placeholder": "Geben Sie einen Namen für dieses Gerät ein...", - "enrollment_sync_mode": "Synchronisierungsmodus", - "enrollment_sync_silent": "Still — minimale Telemetrie", - "enrollment_sync_standard": "Standard — ausgewogene Synchronisierung", - "enrollment_sync_turbo": "Turbo — aggressive Synchronisierung", - "enrollment_approved_success": "Geräteregistrierung genehmigt", - "enrollment_rejected_success": "Geräteregistrierung abgelehnt", - "approve_title": "Gerät genehmigen", - "banner_locked_mode": "Registrierung ist gesperrt — nur token-gebundene Geräte können sich registrieren. Der verwaltete Modus ist für die Genehmigung unbekannter Clients durch den Operator erforderlich.", - "banner_open_mode": "Registrierung ist offen — neue RustDesk-Clients registrieren sich ohne Genehmigung des Operators. Verwalteten Modus in den Einstellungen festlegen, um diese Warteschlange zu nutzen.", - "enrollment_settings_link": "Registrierungseinstellungen", - "field_folder": "Ordner", - "field_folder_none": "Kein Ordner", - "field_groups": "Gerätegruppen", - "field_name": "Gerätename", - "field_name_placeholder": "Name für dieses Gerät eingeben...", - "field_sync_mode": "Synchronisierungsmodus", - "field_tag_add_btn": "Hinzufügen", - "field_tag_add_placeholder": "Neues Tag hinzufügen...", - "field_tags": "Tags", - "field_tags_existing": "Vorhandene Tags", - "field_tags_placeholder": "Kommagetrennte Tags (z. B. Büro, Laptop)...", - "reject_ban_hint": "Das Gerät wird gesperrt und kann keine neuen Registrierungsanfragen senden.", - "reject_ban_option": "Dieses Gerät sperren", - "sync_silent": "Lautlos — minimale Telemetrie", - "sync_standard": "Standard — ausgewogene Synchronisierung", - "sync_turbo": "Turbo — aggressive Synchronisierung" + "export": { + "csv": "CSV exportieren", + "pdf": "PDF exportieren", + "sessions_csv": "Sitzungen als CSV exportieren" }, - "backup": { - "title": "Dashboard", - "desc": "Laden Sie eine vollständige Sicherung Ihrer Konsolenkonfiguration, Benutzer, Gruppen und Einstellungen herunter. Go-Server-Peer-Daten sind enthalten, wenn das BetterDesk-Backend aktiv ist.", - "restore_title": "Wiederherstellen", - "restore_desc": "Laden Sie eine zuvor heruntergeladene Sicherungsdatei hoch, um die Konsolenkonfiguration wiederherzustellen. Wählen Sie unten aus, welche Abschnitte wiederhergestellt werden sollen.", - "stat_users": "Benutzer", - "stat_settings": "Einstellungen", - "stat_folders": "Ordner", - "stat_groups": "Gruppen", - "stat_strategies": "Strategien", - "stat_backend": "Backend", - "download": "Schlüssel herunterladen", - "creating": "Sicherung wird erstellt...", - "download_success": "Schlüsseldatei heruntergeladen", - "upload": "Hochladen", - "restore_confirm": "Sind Sie sicher, dass Sie aus dieser Sicherung wiederherstellen möchten? Ausgewählte Abschnitte werden überschrieben.", - "restore_success": "Sicherung erfolgreich wiederhergestellt. Einige Änderungen erfordern möglicherein Neuladen der Seite.", - "restored": "Wiederhergestellt", - "skipped": "Übersprungen", - "backup_date": "Sicherungsdatum", - "opt_settings": "Konsoleneinstellungen", - "opt_branding": "Branding einschließen", - "opt_folders": "Geräteordner", - "opt_groups": "Benutzer- & Gerätegruppen", - "opt_addressbooks": "Adressbücher", - "opt_users": "Benutzerkonten", - "opt_users_warning": "Destruktiv: Ersetzt ALLE Benutzerkonten durch Sicherungsdaten. Sie werden möglicherweise abgemeldet.", - "no_file": "Keine Sicherungsdatei ausgewählt", - "invalid_json": "Ungültiges JSON-Format", - "invalid_format": "Ungültige Sicherungsdatei: keine BetterDesk-Sicherung", - "opt_database": "Datenbank (alle Tabellen)", - "opt_database_hint": "Importiert alle Konsolendaten erneut. Wird sofort angewendet, kein Neustart erforderlich.", - "opt_env": "Umgebungsdatei (.env)", - "opt_env_warning": "Überschreibt SESSION_SECRET, API-Schlüssel, Datenbank-DSN, Ports und TLS-Einstellungen. Erfordert einen Dienstneustart.", - "opt_godb": "Go-Server-Datenbank", - "opt_godb_warning": "Überschreibt die SQLite-Datenbank des Go-Servers (nur SQLite-Backend). Erfordert einen Dienstneustart.", - "opt_secrets": "Serverschlüssel & Geheimnisse", - "opt_secrets_warning": "Überschreibt die Ed25519-Serveridentität, den API-Schlüssel und das Sitzungsgeheimnis. Erfordert einen Dienstneustart.", - "opt_uploads": "Branding-Dateien", - "opt_uploads_hint": "Logos und hochgeladene Bilder.", - "restart_required": "Einige wiederhergestellte Komponenten (Schlüssel / .env / Go-Datenbank) erfordern einen Dienstneustart, damit die Änderungen wirksam werden.", - "restore_warning": "Das Wiederherstellen von Geheimnissen, der Umgebungsdatei oder der Go-Server-Datenbank überschreibt die Serveridentität und erfordert danach einen Dienstneustart.", - "security_warning": "Dieses Backup enthält Geheimnisse (Serverschlüssel, Umgebungsdatei, Passwort-Hashes und 2FA-Geheimnisse). Sicher aufbewahren und niemals teilen.", - "stat_database": "Datenbank-Engine", - "stat_env": "Umgebungsdatei", - "stat_keys": "Serverschlüssel enthalten", - "stat_uploads": "Branding-Dateien" + "report": { + "title": "Arbeitsbericht", + "subtitle": "Beschreiben Sie die während dieser Fernsitzung durchgeführte Arbeit.", + "category": "Kategorie", + "ticket_ref": "Ticket-Referenz", + "summary": "Durchgeführte Arbeit", + "skip": "Vorerst überspringen", + "submit": "Bericht senden", + "summary_required": "Zusammenfassung ist erforderlich", + "saved": "Arbeitsbericht gespeichert" }, - "cdap": { - "device_detail": "CDAP-Gerät", - "loading": "Laden...", - "loading_widgets": "Geräte-Widgets werden geladen...", - "load_error": "Gerätedaten konnten nicht geladen werden", - "connected": "Verbunden", - "disconnected": "Getrennt", - "device_offline_msg": "Das Gerät ist derzeit offline. Widget-Werte können veraltet sein.", - "no_widgets": "Keine Widgets verfügbar", - "no_widgets_desc": "Dieses Gerät hat kein CDAP-Manifest mit Widgetdefinitionen registriert.", - "command_log": "Befehlsprotokoll", - "clear_log": "Protokoll löschen", - "confirm_command": "Befehl bestätigen", - "select_option": "Auswählen", - "cdap_status": "CDAP-Status", - "cdap_enabled": "CDAP aktiviert", - "cdap_disabled": "CDAP deaktiviert", - "cdap_devices": "CDAP-Geräte", - "cdap_connections": "Aktive Verbindungen", - "send_command": "Befehl senden", - "command_sent": "Befehl erfolgreich gesendet", - "command_failed": "Befehl konnte nicht gesendet werden", - "devices_title": "CDAP-Geräte", - "devices_subtitle": "Verbundene Geräte über das Custom Device Application Protocol", - "stat_connected": "Verbunden", - "stat_port": "Port", - "search_devices": "Geräte suchen...", - "no_devices": "Keine Geräte mit Inventardaten gefunden", - "no_devices_desc": "Derzeit sind keine CDAP-Geräte verbunden. Geräte erscheinen hier, sobald sie sich mit dem Gateway verbinden.", - "gateway_disabled": "CDAP-Gateway deaktiviert", - "gateway_disabled_desc": "Aktivieren Sie das CDAP-Gateway, indem Sie CDAP_ENABLED=true in der Serverkonfiguration setzen.", - "gateway_active": "Aktiv", - "toggle_enable": "CDAP aktivieren", - "toggle_disable": "CDAP deaktivieren", - "enabled_restart": "CDAP aktiviert. Ein Serverneustart ist erforderlich, um Änderungen anzuwenden.", - "disabled_restart": "CDAP deaktiviert. Ein Serverneustart ist erforderlich, um Änderungen anzuwenden.", - "widgets": "Widgets", - "type_all": "Alle", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-Agent", - "type_network": "Netzwerkbericht", - "type_camera": "Kamera", - "type_custom": "Benutzerdefiniert", - "active_alerts": "Aktive Warnungen", - "alert_fired": "Warnung ausgelöst", - "alert_cleared": "Alarm gelöscht", - "no_alerts": "Keine Alarme ausgelöst", - "connect_terminal": "Terminal verbinden", - "table_search": "Suchen...", - "just_now": "gerade eben", - "terminal_connecting": "Verbindung zum Gerät wird hergestellt...", - "terminal_disconnected": "Getrennt", - "terminal_error": "Terminalverbindung fehlgeschlagen", - "linked_devices": "Verknüpfte Geräte", - "link_device": "Gerät verknüpfen", - "unlink_device": "Verknüpfung aufheben", - "no_linked_devices": "Keine verknüpften Geräte", - "unlink_confirm": "Möchten Sie dieses Gerät wirklich entknüpfen?", - "link_prompt": "Geben Sie die Peer-ID ein, die mit diesem Gerät verknüpft werden soll:", - "connect_desktop": "Über Desktop-Client verbinden", - "connect_video": "Stream verbinden", - "connect_files": "Dateien durchsuchen", - "connect_audio": "Audio verbinden", - "upload_file": "Hochladen", - "desktop_connecting": "Verbindung wird hergestellt...", - "video_connecting": "Verbindung wird hergestellt...", - "files_connecting": "Verbindung wird hergestellt...", - "audio_connecting": "Verbinde...", - "audio_streaming": "Streaming", - "clipboard_in": "Zwischenablage empfangen", - "clipboard_out": "Zwischenablage gesendet", - "monitor_select": "Monitor auswählen", - "keyframe_request": "Keyframe anfordern", - "quality_auto": "Automatische Qualität" + "empty": { + "packages": "Noch keine Pakete. Erstellen Sie eines mit der Schaltfläche oben.", + "contracts": "Noch keine Organisationsverträge. Weisen Sie einer Organisation ein Paket zu.", + "sessions": "Noch keine abrechenbaren Sitzungen erfasst.", + "reports": "Noch keine Arbeitsberichte eingereicht." }, - "desktop": { - "switch_mode": "Desktop-Modus", - "console_mode": "Konsolen-Modus", - "loading": "Laden...", - "minimize": "Minimieren", - "maximize": "Maximieren", - "restore": "Wiederherstellen", - "close": "Schließen", - "widgets_mode": "Widget-Modus", - "windows_mode": "Fenster", - "wallpaper": "Hintergrundbild", - "add_widget": "Widget hinzufügen", - "remove_widget": "Widget entfernen", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurieren", - "search_widgets": "Widgets suchen...", - "cat_monitoring": "Überwachung", - "cat_devices": "Geräte", - "cat_tools": "Werkzeuge", - "cat_general": "Allgemein", - "notes_placeholder": "Notizen zu diesem Gerät hinzufügen...", - "search_placeholder": "Geräte suchen...", - "search_pages": "Seiten", - "search_devices": "Geräte suchen...", - "search_no_results": "Keine Ergebnisse", - "exit_desktop": "Desktop beenden", - "refresh": "Aktualisieren", - "fullscreen": "Vollbild", - "help": "Help", - "widget_clock": "Clock", - "widget_device_status": "Gerätestatus", - "widget_server_health": "Serverzustand", - "widget_system_stats": "Systemstatistiken", - "widget_device_list": "Geräteliste", - "widget_quick_actions": "Schnellaktionen", - "widget_recent_activity": "Letzte Aktivitäten", - "widget_notes": "Notes", - "widget_network_monitor": "Netzwerkmonitor", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP-Geräte", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Geräteraster", - "widget_multi_gauge": "Mehrfachanzeige", - "widget_weekly_chart": "Wochenchart", - "widget_quick_controls": "Schnellsteuerung", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Verbindungsstatistik", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Benutzersitzungen", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Keine Geräte", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Öffnen", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "URL festlegen", - "label_server_uptime": "Serverlaufzeit", - "label_merged_info": "Zusammengeführte Informationen", - "label_with_notes": "Mit Notizen", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Geräte gesamt", - "label_throughput": "Throughput", - "label_active_relays": "Aktive Relays", - "label_total_relayed": "Weitergeleitet gesamt", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Geräte filtern", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Keine CDAP-Geräte", - "action_add_widget": "Widget hinzufügen", - "label_merged_server_info": "Zusammengeführte Serverinformationen", - "wp_images": "Bilder", - "wp_colors": "Volltonfarben", - "wp_custom_color": "Eigene Farbe", - "wp_fit_style": "Stil", - "wp_fill": "Ausfüllen", - "wp_fit": "Anpassen", - "wp_stretch": "Strecken", - "wp_center": "Zentrieren", - "wp_unavailable": "Hintergrundbilder nicht verfügbar", - "wp_download_hint": "Laden Sie Hintergrundbilder herunter, um sie hier zu verwenden.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Prozessmonitor", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Datenbankstatistik", - "widget_docker_containers": "Docker-Container", - "widget_shell_command": "Shell-Befehl", - "widget_device_map": "Gerätekarte", - "widget_remote_connect": "Fernverbindung", - "label_no_online": "Keine Online-Geräte", - "label_no_events": "Keine Ereignisse", - "label_event_title": "Ereignistitel", - "label_no_data": "Keine Daten", - "label_download_speed": "Downloadgeschwindigkeit", - "label_latency": "Latency", - "label_server": "Serverinstanz", - "label_run_test": "Run Test", - "label_testing": "Test läuft", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Keine Container", - "label_docker_unavailable": "Docker nicht verfügbar", - "label_no_command": "Kein Befehl", - "label_no_output": "Keine Ausgabe", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Voreinstellung speichern", - "label_load_preset": "Load Preset", - "label_preset_name": "Name der Voreinstellung", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automatisch anordnen", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 Spalten gleich", - "label_2col_wide": "2 Spalten breit", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget-Gruppe", - "ungroup_widgets": "Widgets entgruppieren", - "group_widgets": "Widgets gruppieren", - "snap_layouts": "Andocklayouts", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Oben links andocken", - "snap_top_right": "Oben rechts andocken", - "snap_bottom_left": "Unten links andocken", - "snap_bottom_right": "Unten rechts andocken", - "aero_shake": "Fenster schütteln", - "zone_resize": "Zonengröße ändern", - "zone_borders": "Zonengrenzen", - "app_drawer": "Applications", - "search_apps": "Apps suchen", - "edit_shortcuts": "Verknüpfungen bearbeiten", - "widgets": "Widget-Liste", - "theme": "Theme" + "assign": { + "title": "Vorhandenes Paket zuweisen", + "submit": "Zuweisen" }, - "desktop_login": { - "click_to_sign_in": "Zum Anmelden klicken", - "username_placeholder": "Benutzername eingeben", - "password_placeholder": "Passwort eingeben", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Zwei-Faktor-Authentifizierung", - "totp_subtitle": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", - "back_to_login": "Zurück zur Anmeldung", - "fill_all_fields": "Bitte füllen Sie alle Felder aus", - "invalid_credentials": "Ungültiger Benutzername oder Passwort.", - "invalid_code": "Ungültiger Code", - "enter_6_digits": "Geben Sie 6 Ziffern ein", - "network_error": "Netzwerkfehler", - "session_expired": "Sitzung abgelaufen" - }, - "tokens": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "enrollment_mode": "Registrierungsmodus", - "mode_open": "Offen", - "mode_open_desc": "Jedes Gerät kann sich ohne Token registrieren", - "mode_managed": "Verwaltet", - "mode_managed_desc": "Geräte benötigen einen gültigen Token zur Registrierung", - "mode_locked": "Gesperrt", - "mode_locked_desc": "Keine neuen Geräteregistrierungen erlaubt", - "total": "Gesamt", - "active": "Active", - "used": "Belegt", - "revoked": "Widerrufen", - "search_placeholder": "Geräte suchen...", - "status_pending": "Ausstehend", - "status_active": "Aktiv", - "status_used": "Verwendet", - "status_revoked": "Widerrufen", - "status_expired": "Abgelaufen", - "bulk_generate": "Massengeneration", - "create": "Erstellen", - "edit": "Bearbeiten", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Verwendungen", - "bound_peer": "Gebundener Peer", - "expires": "Läuft ab", - "created": "Erstellt", - "actions": "Aktionen", - "name_placeholder": "Ordnername eingeben", - "max_uses": "Maximale Verwendungen", - "max_uses_hint": "0 = unbegrenzt", - "expires_in": "Läuft ab in", - "no_expiration": "Kein Ablaufdatum", - "expires_1h": "1 Stunde", - "expires_24h": "24 Stunden", - "expires_7d": "7 Tage", - "expires_30d": "30 Tage", - "note": "Notiz", - "note_placeholder": "Notes about this device", - "count": "Anzahl", - "count_range": "Anzahl der zu generierenden Token (1-100)", - "name_prefix": "Namenspräfix", - "generate": "Konfiguration generieren", - "token_created": "Token erstellt", - "tokens_generated": "Token generiert", - "copy_warning": "Kopieren Sie den Token jetzt. Er wird nicht erneut angezeigt.", - "copy_token": "Token kopieren", - "copied": "In die Zwischenablage kopiert", - "revoke": "Widerrufen", - "revoke_confirm": "Möchten Sie diesen Token wirklich widerrufen? Bereits registrierte Geräte sind nicht betroffen.", - "revoked_success": "Token erfolgreich widerrufen", - "no_tokens": "Keine Token gefunden", - "expired": "Abgelaufen", - "never": "Nie", - "save": "Speichern", - "cancel": "Abbrechen", - "unlimited": "Unbegrenzt" - }, - "tutorial": { - "next": "Weiter", - "prev": "Zurück", - "skip": "Überspringen", - "finish": "Fertig", - "close": "Schließen", - "step_of": "{current} von {total}", - "console_sidebar_title": "Navigationsleiste", - "console_sidebar_text": "Zugriff auf alle Module von hier. Klicken Sie auf ein Symbol, um zu diesem Bereich zu navigieren. Die Seitenleiste passt sich Ihrer Bildschirmgröße an.", - "console_expand_title": "Seitenleiste erweitern", - "console_expand_text": "Öffnen Sie die Seitenleiste, um alle Konsolenbereiche und Werkzeuge zu sehen.", - "console_search_title": "Schnellsuche", - "console_search_text": "Nutzen Sie die Suche, um Geräte, Einstellungen und Aktionen schneller zu finden.", - "console_dashboard_title": "Übersicht prüfen", - "console_dashboard_text": "Ihre zentrale Anlaufstelle mit Serverstatus, Online-Geräten und Schnellaktionen. Wichtige Metriken auf einen Blick.", - "console_devices_title": "Geräteverwaltung", - "console_devices_text": "Alle verbundenen Geräte anzeigen, suchen und verwalten. Nach Status filtern, Tags zuweisen und Einstellungen konfigurieren.", - "console_settings_title": "Einstellungen", - "console_settings_text": "Serververhalten, Sicherheitsoptionen, Branding und Benutzerverwaltung konfigurieren. BetterDesk an Ihre Bedürfnisse anpassen.", - "console_desktop_title": "Desktop-Modus", - "console_desktop_text": "Wechseln Sie zum Desktop-Modus für einen Arbeitsbereich mit Fenstern und Widgets. Perfekt für Multitasking und Überwachung.", - "console_complete_title": "Konsole bereit", - "console_complete_text": "Sie kennen jetzt die wichtigsten Bereiche der BetterDesk-Konsole.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Die obere Leiste enthält Fenstersteuerung, Suche und Schnellzugriffe.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Öffnen Sie die Widget-Auswahl, um neue Kacheln auf dem Desktop abzulegen.", - "desktop_widgets_title": "Widget-Dashboard", - "desktop_widgets_text": "Ihr anpassbarer Arbeitsbereich. Widgets zeigen Live-Informationen und bieten schnellen Zugriff auf Funktionen. Ziehen zum Neuanordnen.", - "desktop_add_widget_title": "Widgets hinzufügen", - "desktop_add_widget_text": "Klicken Sie hier, um verfügbare Widgets zu durchsuchen. Wählen Sie aus Überwachungsanzeigen, Gerätelisten, Notizen und mehr.", - "desktop_taskbar_title": "Taskleiste", - "desktop_taskbar_text": "Geöffnete Apps erscheinen hier. Klicken zum Fokussieren oder Minimieren. Die Uhr zeigt die aktuelle Zeit, die Hintergrund-Schaltfläche ändert das Wallpaper.", - "desktop_snap_title": "Layouts andocken", - "desktop_snap_text": "Verwenden Sie Andocklayouts, um Widgets schnell in Zonen anzuordnen.", - "desktop_windows_title": "App-Fenster", - "desktop_windows_text": "Apps öffnen sich in verschiebbaren, größenveränderbaren Fenstern. Minimieren, maximieren oder schließen über die Titelleiste. Fenster liegen über Widgets.", - "desktop_search_title": "Schnellsuche", - "desktop_search_text": "Suchen Sie nach Geräten, Seiten und Einstellungen. Drücken Sie Strg+K, um die Suche sofort zu öffnen.", - "desktop_complete_title": "Desktop bereit", - "desktop_complete_text": "Der Desktop-Modus ist eingerichtet und kann angepasst werden.", - "devices_folders_title": "Ordner und Gruppen", - "devices_folders_text": "Organisieren Sie Geräte in Ordnern oder dynamischen Gruppen.", - "devices_search_title": "Geräte suchen", - "devices_search_text": "Filtern Sie nach ID, Hostname, Plattform, Benutzer oder Tags.", - "devices_table_title": "Gerätetabelle", - "devices_table_text": "Öffnen Sie Aktionen über das Menü jeder Zeile oder doppelklicken Sie für Details.", - "devices_complete_title": "Geräteverwaltung bereit", - "devices_complete_text": "Sie können Geräte jetzt suchen, gruppieren und verwalten.", - "settings_tabs_title": "Einstellungsbereiche", - "settings_tabs_text": "Wechseln Sie zwischen Server-, Sicherheits-, Authentifizierungs- und UI-Einstellungen.", - "settings_content_title": "Konfiguration bearbeiten", - "settings_content_text": "Speichern Sie Änderungen abschnittsweise, damit die Konfiguration nachvollziehbar bleibt.", - "settings_complete_title": "Einstellungen bereit", - "settings_complete_text": "Die wichtigsten Konfigurationsbereiche sind jetzt bekannt.", - "help": "Help", - "tour_console": "Konsolentour", - "tour_desktop": "Desktop-Tour", - "tour_devices": "Gerätetour", - "tour_remote": "Remote-Tour", - "tour_organization": "Organisationstour", - "tour_cdap": "CDAP-Tour", - "tour_chat": "Chat-Tour", - "tour_settings": "Einstellungstour", - "reset_all": "Alle Touren zurücksetzen", - "remote_toolbar_title": "Remote-Werkzeugleiste", - "remote_toolbar_text": "Steuern Sie Qualität, Monitore, Zwischenablage, Aufzeichnung und Sitzungsaktionen.", - "remote_canvas_title": "Remote-Bildschirm", - "remote_canvas_text": "Klicken Sie in den Bildschirmbereich, um Tastatur und Maus an das Gerät zu senden.", - "remote_clipboard_title": "Zwischenablage", - "remote_clipboard_text": "Synchronisieren Sie Text sicher zwischen Browser und entferntem Gerät.", - "remote_complete_title": "Remote-Sitzung bereit", - "remote_complete_text": "Sie können jetzt eine Sitzung steuern und überwachen.", - "org_overview_title": "Organisationsübersicht", - "org_overview_text": "Prüfen Sie Mitglieder, Geräte und Richtlinien der Organisation auf einen Blick.", - "org_create_title": "Organisation erstellen", - "org_create_text": "Legen Sie eine neue Organisation an, um Geräte und Benutzer zu trennen.", - "org_members_title": "Mitglieder verwalten", - "org_members_text": "Weisen Sie Benutzer zu und legen Sie organisationsspezifische Rollen fest.", - "org_devices_title": "Geräte zuweisen", - "org_devices_text": "Ordnen Sie Geräte einer Organisation zu, damit Daten sauber scoped bleiben.", - "org_policies_title": "Richtlinien konfigurieren", - "org_policies_text": "Steuern Sie Zugriffsregeln, Dateiübertragung und Sitzungsgrenzen.", - "org_complete_title": "Organisation bereit", - "org_complete_text": "Die Organisation ist für Benutzer, Geräte und Richtlinien vorbereitet.", - "cdap_devices_title": "CDAP-Geräte", - "cdap_devices_text": "Alle verbundenen CDAP-Geräte anzeigen — IoT-Sensoren, SPSen, Bridges und benutzerdefinierte Agents. Grüne Anzeigen zeigen Live-Verbindungen.", - "cdap_widgets_title": "Widget-Dashboard", - "cdap_widgets_text": "Widgets zeigen Echtzeitdaten von Geräten an. Messanzeigen, Schalter, LEDs, Diagramme — jeder Widget-Typ visualisiert eine andere Art von Daten.", - "cdap_commands_title": "Befehle senden", - "cdap_commands_text": "Mit Geräten durch das Senden von Befehlen interagieren. Einige Befehle erfordern eine Bestätigung. Das Befehlsprotokoll enthält den Verlauf aller gesendeten Befehle.", - "cdap_terminal_title": "Geräteterminal", - "cdap_terminal_text": "Eine Terminalsitzung mit CDAP-Agents für erweiterte Diagnosen oder manuelle Konfiguration öffnen. Befehle direkt eingeben.", - "cdap_complete_title": "CDAP-Übersicht abgeschlossen!", - "cdap_complete_text": "Geräte-Widgets erkunden, Befehle senden und das Terminal oder den Dateibrowser für eine tiefere Verwaltung nutzen. CDAP-Agents melden Metriken automatisch.", - "chat_contacts_title": "Kontakte", - "chat_contacts_text": "Wählen Sie Operatoren, Agenten oder Gruppen für eine Unterhaltung aus.", - "chat_send_title": "Nachrichten senden", - "chat_send_text": "Schreiben Sie Nachrichten, senden Sie Dateien und nutzen Sie Lesebestätigungen.", - "chat_file_title": "Dateien teilen", - "chat_file_text": "Dateien werden verschlüsselt übertragen, wenn Ende-zu-Ende-Verschlüsselung aktiv ist.", - "chat_complete_title": "Chat bereit", - "chat_complete_text": "Sie können jetzt sicher mit Benutzern und Operatoren kommunizieren.", - "disable_tutorials": "Einführungen deaktivieren", - "enable_tutorials": "Einführungen aktivieren" - }, - "help_request": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "new_request": "Neue Hilfeanfrage", - "device": "Gerät", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Keine Hilfeanfragen", - "notification": "Benachrichtigung über Hilfeanfrage", - "stats_total": "Gesamt", - "filter_all": "Alle" - }, - "organizations": { - "title": "Dashboard", - "create": "Erstellen", - "edit": "Bearbeiten", - "detail": "Ticketdetails", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Benutzer", - "devices": "Geräte", - "invitations": "Invitations", - "settings": "Einstellungen", - "add_user": "Benutzer hinzufügen", - "assign_device": "Gerät zuweisen", - "create_invitation": "Einladung erstellen", - "delete_confirm": "Diese Organisation löschen? Alle zugehörigen Benutzer, Geräte und Einstellungen werden entfernt.", - "no_orgs": "Keine Organisationen", - "no_orgs_hint": "Erstellen Sie eine Organisation, um Benutzer und Geräte getrennt zu verwalten.", - "connection_policy": "Verbindungsrichtlinie", - "allow_file_transfer": "Dateiübertragung erlauben", - "allow_clipboard": "Zwischenablage erlauben", - "max_session_duration": "Maximale Sitzungsdauer", - "role_owner": "Owner", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Mitglied", - "username": "Benutzername", - "password": "Passwort", - "display_name": "Anzeigename", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Geräte-ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Zugewiesener Benutzer", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Keine Benutzer", - "no_devices": "Keine Geräte", - "no_invitations": "Keine Einladungen", - "user_added": "User added", - "user_removed": "Benutzer entfernt", - "user_updated": "Benutzer aktualisiert", - "device_assigned": "Gerät zugewiesen", - "device_unassigned": "Gerätezuweisung entfernt", - "invitation_created": "Einladung erstellt", - "settings_saved": "Organisationseinstellungen gespeichert", - "org_deleted": "Organisation gelöscht", - "confirm_remove_user": "Diesen Benutzer aus der Organisation entfernen?", - "confirm_unassign_device": "Dieses Gerät aus der Organisation entfernen?", - "confirm_delete_org": "Diese Organisation dauerhaft löschen?", - "edit_role": "Rolle bearbeiten", - "raw_settings": "Rohdaten der Einstellungen", - "key": "Key", - "value": "Value", - "save": "Speichern", - "policy_unattended": "Unbeaufsichtigter Zugriff", - "policy_attended": "Beaufsichtigter Zugriff", - "policy_ask": "Always ask", - "expires_hours": "Läuft ab nach Stunden", - "loading_failed": "Organisationen konnten nicht geladen werden", - "name_slug_required": "Name und Slug sind erforderlich", - "org_created": "Organisation erstellt", - "org_updated": "Organisation aktualisiert", - "create_new_user": "Neuen Benutzer erstellen", - "add_existing_user": "Vorhandenen Benutzer hinzufügen", - "none_available": "none", - "select_user": "Benutzer auswählen", - "org_role": "Organisationsrolle", - "link_user_hint": "Verknüpfen Sie einen vorhandenen Benutzer mit dieser Organisation.", - "no_available_users": "Keine verfügbaren Benutzer", - "user_linked": "Benutzer verknüpft" - }, - "chat": { - "e2e_enabled": "Ende-zu-Ende verschlüsselt", - "e2e_establishing": "Sicherer Kanal wird aufgebaut...", - "e2e_established": "Sicherer Kanal aufgebaut", - "e2e_unsupported": "E2E-Verschlüsselung wird in diesem Browser nicht unterstützt", - "typing_indicator": "tippt...", - "read_receipt": "Gelesen", - "delivered": "Zugestellt", - "file_share": "Datei", - "file_too_large": "Datei zu groß (max. 50MB)", - "file_encrypted": "Verschlüsselte Dateiübertragung", - "presence_online": "Online", - "presence_away": "Abwesend", - "presence_busy": "Beschäftigt", - "presence_offline": "Offline", - "key_rotation": "Sicherheitsschlüssel erneuert", - "new_message": "Neue Nachricht", - "title": "Dashboard", - "contacts": "Kontakte", - "groups": "Gruppen", - "no_contacts": "Noch keine Kontakte", - "no_groups": "Noch keine Gruppen", - "no_messages": "Noch keine Nachrichten", - "no_results": "Keine Ergebnisse gefunden", - "select_conversation": "Wählen Sie eine Unterhaltung, um zu chatten", - "select_conversation_hint": "Wähle eine Unterhaltung aus, um Nachrichten anzuzeigen", - "type_message": "Nachricht eingeben...", - "send": "Senden", - "attach_file": "Datei anhängen", - "emoji": "Emoji", - "info": "Informationen", - "search_messages": "Nachrichten durchsuchen", - "create_group": "Gruppe erstellen", - "group_name": "Gruppenname", - "group_name_placeholder": "Gruppennamen eingeben", - "group_members": "Mitglieder", - "cancel": "Abbrechen", - "create": "Erstellen", - "members": "Mitglieder", - "today": "Heute", - "yesterday": "Gestern", - "react": "Reagieren", - "my_presence": "Mein Status", - "search_placeholder": "Geräte suchen..." - }, - "toast": { - "device_connected": "Gerät verbunden", - "device_disconnected": "Gerät getrennt", - "session_started": "Sitzung gestartet", - "session_ended": "Sitzung beendet", - "file_upload_complete": "Datei-Upload abgeschlossen", - "settings_saved": "Einstellungen gespeichert", - "error_generic": "Ein Fehler ist aufgetreten", - "connection_lost": "Verbindung verloren", - "reconnecting": "Verbindung wird wiederhergestellt" - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Dashboard" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Konfiguration generieren", - "encode": "Encode", - "decode": "Decode", - "send": "Senden", - "refresh": "Aktualisieren", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Text eingeben...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Go-Server", - "mac_address": "MAC-Adresse", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Erreichbarkeit und Latenz eines Hosts prüfen", - "tcp_title": "TCP-Portprüfung", - "tcp_desc": "Konnektivität eines TCP-Ports testen", - "ssl_title": "SSL-Inspektor", - "ssl_desc": "Details des SSL/TLS-Zertifikats prüfen", - "http_title": "HTTP-Statusprüfung", - "http_desc": "Zustand eines HTTP-Endpunkts prüfen", - "dns_title": "DNS Lookup", - "dns_desc": "Hostname in IP-Adresse auflösen", - "whois_title": "DNS Records", - "whois_desc": "A-, AAAA-, MX-, TXT- und NS-Einträge abfragen", - "speed_title": "Speed Test", - "speed_desc": "Download-Bandbreite messen", - "run_speed_test": "Geschwindigkeitstest starten", - "wol_title": "Wake-on-LAN", - "wol_desc": "Magic Packet senden, um ein Gerät zu wecken", - "wol_sent": "Magic Packet gesendet", - "hash_title": "Hash-Generator", - "hash_desc": "Kryptografische Hashes erzeugen", - "password_title": "Passwortgenerator", - "password_desc": "Aktualisieren Sie Ihr Kontopasswort", - "jwt_title": "JWT Decoder", - "jwt_desc": "JSON Web Tokens dekodieren und prüfen", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64-Daten kodieren oder dekodieren", - "url_title": "URL Encoder", - "url_desc": "URL-Komponenten kodieren oder dekodieren", - "processes_title": "Prozessliste", - "processes_desc": "Laufende Systemprozesse anzeigen", - "disk_title": "Disk Usage", - "disk_desc": "Nutzung von Festplattenpartitionen anzeigen", - "db_title": "Datenbankstatistiken", - "db_desc": "Statistiken der Datenbanktabellen anzeigen", - "docker_title": "Docker-Container", - "docker_desc": "Laufende Docker-Container anzeigen", - "logs_title": "Log Viewer", - "logs_desc": "Aktuelle Protokollausgaben anzeigen", - "ip_address": "IP-Adresse", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Gültig ab", - "valid_to": "Gültig bis", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Abgelaufen", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "No hardware data available", - "no_docker": "Keine Docker-Container gefunden oder Docker ist nicht verfügbar", - "no_logs": "Keine Protokollzeilen verfügbar" - }, - "policies": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "select_org": "Organisation", - "select_org_placeholder": "Organisation auswählen...", - "select_org_first": "Wählen Sie eine Organisation, um das Richtlinien-Audit-Log anzuzeigen.", - "configured": "Konfiguriert", - "connection_title": "Verbindungsrichtlinie", - "connection_desc": "Steuerung der Fernverbindungsaufbau", - "connection_mode": "Verbindungsmodus", - "mode_attended": "Betreut (erfordert Benutzergenehmigung)", - "mode_unattended": "Unbetreut (immer erlauben)", - "mode_ask": "Immer fragen", - "max_session": "Max. Sitzungsdauer (Minuten)", - "idle_lock": "Leerlauf-Sperre (Minuten)", - "wallpaper_policy": "Hintergrund während Sitzung", - "wallpaper_show": "Anzeigen", - "wallpaper_hide_session": "Während Sitzung ausblenden", - "wallpaper_hide_always": "Immer ausblenden", - "features_title": "Funktionsrichtlinie", - "features_desc": "Bestimmte Funktionen für Geräte aktivieren oder deaktivieren", - "allow_file_transfer": "Dateiübertragung erlauben", - "allow_clipboard": "Allow Clipboard", - "allow_audio": "Audio-Streaming erlauben", - "allow_recording": "Sitzungsaufzeichnung erlauben", - "security_title": "Sicherheitsrichtlinie", - "security_desc": "Sicherheitsanforderungen für Organisationsgeräte durchsetzen", - "require_2fa": "2FA für unbeaufsichtigten Zugang erforderlich", - "password_min_length": "Minimale Passwortlänge", - "password_require_special": "Sonderzeichen erforderlich", - "password_max_age": "Max. Passwortalter (Tage, 0=nie)", - "allowed_operators": "Allowed Operators", - "network_title": "Netzwerkrichtlinie", - "network_desc": "Relay-Server und Direktverbindungen steuern", - "block_direct_p2p": "Direktes P2P blockieren (Relay erzwingen)", - "allowed_relays": "Erlaubte Relay-Server (einer pro Zeile)", - "ip_allowlist": "IP-Whitelist (CIDR, einer pro Zeile)", - "update_title": "Update-Richtlinie", - "update_desc": "Automatische Updates und Update-Kanäle steuern", - "auto_update": "Auto-Update aktivieren", - "update_channel": "Update-Kanal", - "audit_title": "Richtlinienänderungen", - "audit_desc": "Aktuelle Konsolenaktivität", - "no_audit": "Keine Richtlinienänderungen aufgezeichnet.", - "save_success": "Richtlinie erfolgreich gespeichert", - "save_failed": "Richtlinie konnte nicht gespeichert werden", - "load_failed": "Richtlinien konnten nicht geladen werden", - "block_direct_p2p_hint": "Gilt für Geräte in dieser Organisation. Der globale Standard wird unter Einstellungen → Verbindungsstrategie festgelegt." - }, - "attestation": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "verified": "Verifiziert", - "pending": "Pending", - "failed": "Fehlgeschlagen", - "device_list": "Attestierungseinträge", - "device_list_desc": "Hardware-Fingerabdrücke und Identitätsverifizierungsstatus", - "col_device": "Geräte-ID", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerabdruck", - "col_status": "Status", - "col_last_check": "Letzte Prüfung", - "col_actions": "Aktionen", - "no_records": "Keine Attestierungseinträge gefunden.", - "verify_success": "Gerät als verifiziert markiert", - "verify_failed": "Gerät konnte nicht verifiziert werden", - "revoke_success": "Geräteattestierung widerrufen", - "revoke_failed": "Attestierung konnte nicht widerrufen werden" - }, - "fleet": { - "title": "Dashboard", - "tab_resources": "Ressourcen", - "tab_tasks": "Aufgaben", - "tab_builder": "Workflow-Builder", - "tab_compliance": "Compliance", - "res_title": "Ressourcenzuordnung", - "res_all_types": "Alle Typen", - "res_type_printer": "Drucker", - "res_type_network_drive": "Netzlaufwerk", - "res_type_dns": "DNS-Server", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Ressource hinzufügen", - "res_name": "Ressourcenname", - "res_type": "Typ", - "res_address": "Adresse / Pfad", - "res_target": "Ziel", - "res_scope": "Bereich", - "res_scope_org": "Organisation", - "res_scope_group": "Gruppe", - "res_scope_device": "Gerät", - "res_scope_value": "Bereichswert", - "res_status": "Status", - "res_active": "Aktiv", - "res_inactive": "Inaktiv", - "res_no_data": "Keine Ressourcen gefunden. Klicken Sie auf 'Hinzufügen'.", - "res_confirm_delete": "Möchten Sie diese Ressource wirklich löschen?", - "task_title": "Aufgabenplaner", - "task_all_status": "Alle Status", - "task_status_pending": "Ausstehend", - "task_status_running": "Läuft", - "task_status_success": "Erfolgreich", - "task_status_failed": "Fehlgeschlagen", - "task_search": "Aufgaben suchen…", - "task_create": "Aufgabe erstellen", - "task_name": "Aufgabenname", - "task_type": "Typ", - "task_type_script": "Skript", - "task_type_install": "Installation", - "task_type_update": "Aktualisierung", - "task_type_restart": "Neustart", - "task_type_deploy": "Bereitstellung", - "task_type_scan": "Scan", - "task_targets": "Ziele", - "task_targets_help": "Geräte-IDs oder Gruppennamen, kommagetrennt", - "task_schedule": "Zeitplan", - "task_schedule_once": "Einmalig", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Intervall", - "task_schedule_value": "Zeitplanwert", - "task_script": "Skript / Befehl", - "task_retries": "Wiederholungen", - "task_timeout": "Timeout (s)", - "task_last_run": "Letzter Lauf", - "task_no_data": "Keine Aufgaben gefunden. Erstellen Sie eine neue Aufgabe.", - "task_confirm_delete": "Möchten Sie diese Aufgabe wirklich löschen?", - "task_output": "Aufgabenausgabe", - "task_retry": "Wiederholen", - "builder_title": "Visueller Workflow-Builder", - "builder_select_workflow": "Workflow auswählen…", - "builder_new": "Neu", - "builder_save": "Speichern", - "builder_export": "Exportieren", - "builder_execute": "Ausführen", - "builder_dry_run": "Testlauf", - "builder_triggers": "Auslöser", - "builder_conditions": "Bedingungen", - "builder_actions": "Aktionen", - "builder_results": "Ergebnisse", - "builder_transforms": "Transformationen", - "builder_properties": "Eigenschaften", - "builder_no_selection": "Wählen Sie einen Knoten, um seine Eigenschaften zu bearbeiten.", - "builder_node_trigger_manual": "Manueller Auslöser", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Ereignisauslöser", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Dienst neu starten", - "builder_node_action_file_deploy": "Datei bereitstellen", - "builder_node_action_message": "Nachricht senden", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Warnung senden", - "builder_node_result_chain": "Workflow verketten", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Workflow-Name:", - "comp_title": "Software-Compliance", - "comp_compliant": "Konform", - "comp_warning": "Warnung", - "comp_critical": "Kritisch", - "comp_score": "Durchschn. Wert", - "comp_device": "Gerät", - "comp_hostname": "Hostname", - "comp_os": "Betriebssystem", - "comp_score_col": "Wert", - "comp_issues": "Probleme", - "comp_last_scan": "Letzter Scan", - "comp_scan": "Scannen", - "comp_scan_all": "Alle scannen", - "comp_remediate": "Beheben", - "comp_remediate_confirm": "Auto-Behebung auf diesem Gerät ausführen?", - "comp_no_data": "Keine Compliance-Daten. Führen Sie einen Scan durch.", - "save": "Speichern", - "cancel": "Abbrechen", - "close": "Schließen", - "edit": "Bearbeiten", - "delete": "Löschen", - "actions": "Aktionen", - "all_orgs": "Alle Organisationen", - "select_org_placeholder": "Organisation auswählen...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Netzlaufwerk", - "type_dns": "DNS-Server", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Ressource hinzufügen", - "edit_resource": "Ressource bearbeiten", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Aktionen", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inaktiv", - "address": "Adresse / Pfad", - "scope_org": "Organisation", - "scope_group": "Gruppe", - "scope_device": "Zielgerät", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Dieses Element wirklich löschen?", - "all_statuses": "Alle Status", - "status_pending": "Ausstehend", - "status_running": "Läuft", - "status_success": "Success", - "status_failed": "Fehlgeschlagen", - "search_tasks": "Aufgaben suchen...", - "create_task": "Aufgabe erstellen", - "edit_task": "Aufgabe bearbeiten", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Dateibereitstellung", - "task_type_registry": "Registry", - "target_devices": "Zielgeräte", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Skript / Befehl", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Laden...", - "no_output": "Keine Ausgabe verfügbar", - "error_loading": "Fehler beim Laden der Daten", - "select_workflow": "Workflow auswählen...", - "new_workflow": "New", - "export": "Exportieren", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manueller Auslöser", - "node_schedule": "Schedule", - "node_event": "Ereignisauslöser", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Dienst neu starten", - "node_file_deploy": "Datei bereitstellen", - "node_send_message": "Nachricht senden", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Warnung senden", - "node_chain": "Workflow verketten", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Alle Organisationen", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Geräte-ID", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Automatische Behebung auf diesem Gerät ausführen?" - }, - "scaling": { - "title": "Dashboard", - "tab_overview": "Übersicht", - "tab_relays": "Relay-Knoten", - "tab_rules": "Zuweisungsregeln", - "tab_capacity": "Kapazitätsplanung", - "arch_title": "Netzwerkarchitektur", - "arch_loading": "Architekturdiagramm wird geladen...", - "stat_relay_nodes": "Relay-Knoten", - "stat_total_devices": "Geräte gesamt", - "stat_active_sessions": "Aktive Sitzungen", - "stat_bandwidth": "Gesamtbandbreite", - "relay_health": "Relay-Zustand", - "no_relays": "Keine Relay-Knoten konfiguriert. Fügen Sie den ersten Relay-Knoten hinzu.", - "relay_search": "Relays suchen...", - "relay_add": "Relay-Knoten hinzufügen", - "relay_edit": "Relay-Knoten bearbeiten", - "col_name": "Name", - "col_address": "Adresse", - "col_location": "Standort", - "col_devices": "Geräte", - "col_sessions": "Sitzungen", - "col_bandwidth": "Bandbreite", - "col_status": "Status", - "col_actions": "Aktionen", - "col_priority": "Priorität", - "col_rule_name": "Regelname", - "col_match": "Übereinstimmung", - "col_target_relay": "Ziel-Relay", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Beeinträchtigt", - "status_offline": "Offline", - "status_enabled": "Aktiviert", - "status_disabled": "Deaktiviert", - "confirm_delete_relay": "Möchten Sie diesen Relay-Knoten wirklich löschen?", - "confirm_delete_rule": "Möchten Sie diese Zuweisungsregel wirklich löschen?", - "rules_hint": "Zuweisungsregeln bestimmen, welcher Relay-Server bestimmte Gerätegruppen bedient. Regeln werden nach Priorität ausgewertet (niedrigste zuerst).", - "no_rules": "Keine Zuweisungsregeln.", - "rule_add": "Regel hinzufügen", - "rule_edit": "Regel bearbeiten", - "rule_match_type": "Übereinstimmungstyp", - "match_subnet": "Subnetz", - "match_group": "Gerätegruppe", - "match_tag": "Geräte-Tag", - "match_location": "Standort", - "rule_match_value": "Übereinstimmungswert", - "fallback_master": "Master-Server", - "fallback_nearest": "Nächster Relay", - "relay_max_sessions": "Max. Sitzungen", - "relay_max_bandwidth": "Max. Bandbreite (Mbps)", - "cap_tiers": "Kapazitätsstufen", - "cap_loading": "Kapazitätsdaten werden geladen...", - "cap_recommendations": "Empfehlungen", - "cap_no_recs": "Keine Empfehlungen verfügbar.", - "cap_planning": "Infrastrukturplanung", - "cap_config": "Konfiguration", - "cap_max_devices": "Max. Geräte", - "cap_max_sessions": "Max. Sitzungen", - "cap_current": "Aktuell", - "cap_utilization": "Auslastung", - "cap_tier_devices": "Gerätekapazität", - "cap_tier_sessions": "Sitzungskapazität", - "cap_tier_bandwidth": "Bandbreitenkapazität", - "cap_single_sqlite": "Einzelserver (SQLite)", - "cap_single_pg": "Einzelserver (PostgreSQL)", - "cap_master_3": "Master + 3 Relay-Knoten", - "cap_master_10": "Master + 10 Relay-Knoten", - "rec_no_relays": "Keine Relay-Knoten konfiguriert. Erwägen Sie das Hinzufügen von Relays für bessere Leistung.", - "rec_devices_high": "Geräteauslastung ist hoch. Erwägen Sie das Hinzufügen weiterer Relay-Knoten.", - "rec_sessions_high": "Sitzungskapazität nähert sich dem Limit. Erwägen Sie ein Infrastruktur-Upgrade.", - "rec_cpu_high": "Einige Relay-Knoten melden hohe CPU-Auslastung. Erwägen Sie Lastverteilung.", - "rec_all_good": "Alle Systeme arbeiten innerhalb normaler Parameter. Keine Aktion erforderlich.", - "save": "Speichern", - "cancel": "Abbrechen", - "edit": "Bearbeiten", - "delete": "Löschen", - "close": "Schließen", - "relays_info_banner": "Diese Liste dient nur zur Information. Die von Clients tatsächlich verwendeten Relay-Server werden über die Umgebungsvariable RELAY_SERVERS auf dem BetterDesk-Server konfiguriert.", - "relay_name_address_required": "Name und Adresse sind erforderlich.", - "relay_save_failed": "Relay-Knoten konnte nicht gespeichert werden.", - "relay_delete_failed": "Relay-Knoten konnte nicht gelöscht werden.", - "relay_saved": "Relay-Knoten gespeichert.", - "relay_deleted": "Relay-Knoten gelöscht.", - "rule_name_value_required": "Regelname und Trefferwert sind erforderlich.", - "rule_save_failed": "Regel konnte nicht gespeichert werden.", - "rule_delete_failed": "Regel konnte nicht gelöscht werden.", - "rule_saved": "Regel gespeichert.", - "rule_deleted": "Regel gelöscht." - }, - "cross_platform": { - "title": "Dashboard", - "tab_matrix": "Kompatibilitätsmatrix", - "tab_distribution": "Verteilung", - "tab_protocols": "Protokolle", - "tab_limitations": "Einschränkungen", - "matrix_hint": "Funktionsunterstützungsmatrix für alle unterstützten Plattformen. Grün = volle Unterstützung, Gelb = teilweise, Grau = nicht verfügbar, Blau = geplant.", - "col_feature": "Funktion", - "legend_full": "Volle Unterstützung", - "legend_partial": "Teilweise Unterstützung", - "legend_none": "Nicht verfügbar", - "legend_planned": "Geplant", - "platform_breakdown": "Plattformverteilung", - "arch_breakdown": "Architekturverteilung", - "version_breakdown": "Versionsverteilung", - "summary": "Zusammenfassung", - "total_devices": "Geräte gesamt", - "unique_platforms": "Plattformen", - "unique_archs": "Architekturen", - "unique_versions": "Client-Versionen", - "no_devices": "Keine Geräte mit Inventardaten gefunden", - "protocols_hint": "Protokoll-Fähigkeitsverhandlung stellt sicher, dass jeder Client nur die unterstützten Funktionen erhält. Der Server passt sein Verhalten basierend auf gemeldeten Fähigkeiten an.", - "capability_negotiation": "Fähigkeitsverhandlung", - "codec_support": "Codec-Unterstützung (Online-Geräte)", - "feature_support": "Funktionsunterstützung (Online-Geräte)", - "no_codec_data": "Keine Codec-Daten von Online-Geräten verfügbar.", - "no_feature_data": "Keine Funktionsdaten von Online-Geräten verfügbar.", - "protobuf_schema": "ClientCapabilities Protobuf-Schema", - "diagram_client": "Client", - "diagram_server": "Serverknoten", - "diagram_peer": "Remote-Peer", - "limitations_hint": "Jede Plattform hat spezifische Einschränkungen, die die verfügbaren Funktionen beeinflussen. Überprüfen Sie diese bei der Planung von Bereitstellungen.", - "feat_desktop_client": "Desktop-Client", - "feat_background_agent": "Hintergrund-Agent", - "feat_remote_target": "Remote-Ziel", - "feat_screen_capture": "Bildschirmaufnahme", - "feat_input_injection": "Eingabeinjektion", - "feat_file_transfer": "Dateiübertragung", - "feat_clipboard_sync": "Zwischenablage-Sync", - "feat_audio_streaming": "Audio-Streaming", - "feat_chat": "Chat", - "feat_h264": "H.264-Codec", - "feat_vp9": "VP9-Codec", - "feat_av1": "AV1-Codec", - "feat_cdap_agent": "CDAP-Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webbrowser", - "platform_chromeos": "ChromeOS", - "status_production": "Produktion", - "status_testing": "Test", - "status_planned": "Geplant", - "status_limited": "Eingeschränkt", - "status_experimental": "Experimentell", - "limit_win_uac": "UAC-Erhöhung für Service-Installation und Eingabeinjektion auf sicheren Desktops erforderlich.", - "limit_win_service": "Läuft als NSSM-Dienst; erfordert Administratorrechte zur Installation.", - "limit_win_firewall": "Windows-Firewallregeln müssen Ports 21115-21119 für Relay-Verbindungen erlauben.", - "limit_linux_wayland": "Wayland-Compositors schränken programmatische Bildschirmaufnahme ein; PipeWire-Portal-API erforderlich.", - "limit_linux_pipewire": "Audioaufnahme erfordert PipeWire; PulseAudio-Fallback verfügbar aber eingeschränkt.", - "limit_linux_arm": "ARM64-Builds verfügbar; einige Codecs verwenden möglicherweise Software-Dekodierung (langsamer).", - "limit_mac_screen": "Screen-Recording-Berechtigung erforderlich in Systemeinstellungen > Datenschutz & Sicherheit.", - "limit_mac_signing": "Agent muss mit Apple Developer ID signiert sein für die Verteilung.", - "limit_mac_notarize": "Notarisierung erforderlich für macOS Gatekeeper (Nicht-App-Store-Verteilung).", - "limit_android_projection": "MediaProjection API erfordert Benutzereinwilligung für jede Bildschirmaufnahme-Sitzung.", - "limit_android_accessibility": "Eingabeinjektion erfordert AccessibilityService; eingeschränkt ab Android 14+.", - "limit_android_battery": "Hintergrunddienst durch Doze-Modus begrenzt; ggf. Batterieoptimierungsausnahme erforderlich.", - "limit_ios_capture": "Apple verbietet Hintergrund-Bildschirmaufnahme; nur Viewer-Modus unterstützt.", - "limit_ios_input": "Keine Eingabeinjektion erlaubt; nur Fernansicht und Chat.", - "limit_ios_appstore": "Verteilung nur über App Store; TestFlight für Beta-Tests.", - "limit_web_https": "WebCodecs API und WebRTC erfordern HTTPS; HTTP fällt auf JMuxer zurück (begrenzte Codecs).", - "limit_web_codec": "Codec-Unterstützung abhängig vom Browser; H.264 breit unterstützt, VP9/AV1 variiert.", - "limit_web_performance": "Leistung durch Browser-Sandbox begrenzt; keine direkte Hardwarebeschleunigung.", - "limit_chrome_crostini": "Volle Agent-Unterstützung nur innerhalb des Crostini-Linux-Containers.", - "limit_chrome_pwa": "PWA-Modus bietet nur Webfunktionen; keine nativen Agent-Fähigkeiten.", - "limit_chrome_input": "Eingabeinjektion außerhalb des Crostini-Containers nicht unterstützt.", - "feat_multi_monitor": "Multi-Monitor", - "feat_session_recording": "Sitzungsaufzeichnung", - "feat_unattended_access": "Unbeaufsichtigter Zugriff", - "limit_linux_unprivileged": "Dienste laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict).", - "limit_win_virtual_account": "Dienste laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden." - }, - "security_audit": { - "title": "Dashboard", - "tab_overview": "Übersicht", - "tab_events": "Events", - "tab_hardening": "Härtung", - "tab_vulnerabilities": "Schwachstellen", - "security_score": "Sicherheitsbewertung", - "failed_logins": "Fehlgeschlagene Anmeldungen (24h)", - "active_bans": "Aktive Sperren", - "api_keys": "API-Schlüssel", - "old_keys": "Alte Schlüssel (>90T)", - "security_checks": "Sicherheitsprüfungen", - "tls_status": "TLS-Status", - "pass": "OK", - "warning": "Warnung", - "fail": "Fehler", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "Sichere WebSockets", - "enabled": "Aktiviert", - "disabled": "Deaktiviert", - "all_events": "Alle Ereignisse", - "event_login_failed": "Anmeldung fehlgeschlagen", - "event_login_success": "Anmeldung erfolgreich", - "event_peer_banned": "Gerät gesperrt", - "event_ip_banned": "IP gesperrt", - "event_config_changed": "Konfiguration geändert", - "event_key_created": "Schlüssel erstellt", - "refresh": "Aktualisieren", - "col_time": "Zeit", - "col_action": "Aktion", - "col_actor": "Akteur", - "col_target": "Target", - "col_ip": "IP-Adresse", - "col_details": "Details", - "no_events": "Keine DLP-Ereignisse aufgezeichnet", - "hardening_hint": "Sicherheitshärtungsprioriäten für Ihre BetterDesk-Bereitstellung. Nach Schweregrad sortiert.", - "no_hardening": "Keine Härtungselemente verfügbar.", - "vuln_hint": "Ergebnisse des Abhängigkeits-Schwachstellenscans. Führen Sie npm audit regelmäßig aus.", - "no_vulns": "Keine Schwachstellen gefunden. Ihre Abhängigkeiten sind sicher." - }, - "languages": { - "title": "Dashboard", - "total_languages": "Sprachen gesamt", - "fully_translated": "Vollständig übersetzt", - "needs_review": "Prüfung erforderlich", - "reference_keys": "Referenzschlüssel", - "no_languages": "Keine Sprachdateien gefunden.", - "badge_reference": "Reference", - "badge_review": "Prüfen", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "Schlüssel", - "missing": "missing", - "extra": "extra", - "view_missing": "Fehlende Einträge anzeigen", - "fix_missing": "Fix Missing", - "missing_keys_for": "Fehlende Schlüssel für", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "und {n} weitere...", - "all_keys_present": "Alle Schlüssel sind vorhanden!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Fehlende Schlüssel in {code} müssen manuell übersetzt werden.", - "no_fix_needed": "Keine fehlenden Schlüssel zu ergänzen." - }, - "resource_control": { - "title": "Dashboard", - "tab_overview": "Übersicht", - "tab_usb": "USB Control", - "tab_optical": "Optische Laufwerke", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Ressourcenkontingente", - "compliance_by_category": "Konformität nach Kategorie", - "device_compliance": "Gerätekonformität", - "search_devices": "Geräte suchen...", - "col_device": "Geräte-ID", - "col_platform": "Plattform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Aktionen", - "stat_total_devices": "Geräte gesamt", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Konformitätsrate", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurieren", - "no_devices": "Keine Geräte mit Inventardaten gefunden", - "usb_title": "USB-Portsteuerung", - "usb_hint": "Steuern Sie den Zugriff auf USB-Speichergeräte für das ausgewählte Gerät oder die Standardrichtlinie der Organisation.", - "usb_storage_policy": "USB-Speicherrichtlinie", - "usb_whitelist": "Geräte auf der Positivliste (eines pro Zeile)", - "usb_whitelist_hint": "VID:PID (z. B. 0781:5583)", - "usb_audit_log": "Verbindungen von USB-Geräten protokollieren", - "optical_title": "Steuerung optischer Laufwerke", - "optical_hint": "Steuern Sie den Zugriff auf CD/DVD/Blu-ray-Laufwerke für das ausgewählte Gerät.", - "optical_policy": "Richtlinie für optische Laufwerke", - "optical_audit_log": "Zugriff auf optische Laufwerke protokollieren", - "monitors_title": "Monitorverwaltung", - "monitors_hint": "Konfigurieren Sie Monitoreinstellungen, einschließlich maximaler Anzahl, erzwungener Auflösung, Helligkeit und Energiezeitplänen.", - "monitors_max_count": "Maximale Monitoranzahl (0 = unbegrenzt)", - "monitors_max_hint": "0 bedeutet keine Begrenzung", - "monitors_resolution": "Maximale Auflösung", - "monitors_brightness": "Helligkeitsgrenze", - "monitors_power_schedule": "Energiezeitplan", - "monitors_power_hint": "z. B. off:22:00-06:00", - "disks_title": "Datenträgerzugriff steuern", - "disks_hint": "Konfigurieren Sie Datenträgerzugriffsrichtlinien, einschließlich Nur-Lese-Modus, Verschlüsselungspflicht und Partitionssichtbarkeit.", - "disks_readonly": "Nur-Lese-Modus erzwingen", - "disks_encryption": "Verschlüsselung verlangen (BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T.-Überwachung aktivieren", - "disks_hidden": "Ausgeblendete Partitionen", - "disks_hidden_hint": "Laufwerksbuchstaben oder Einhängepunkte, durch Kommas getrennt", - "quotas_title": "Ressourcenkontingente", - "quotas_hint": "Legen Sie CPU-, RAM-, Bandbreiten- und Datenträgerkontingente pro Benutzer für das ausgewählte Gerät fest.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Bandbreitenlimit (Mbit/s)", - "quotas_bandwidth_hint": "0 = unbegrenzt", - "quotas_disk_quota": "Datenträgerkontingent (GB)", - "quotas_disk_hint": "0 = unbegrenzt", - "quotas_process_whitelist": "Prozess-Positivliste (einer pro Zeile)", - "quotas_process_hint": "z. B. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Nur Positivliste", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "Dashboard", - "subtitle": "Übersicht Ihres RustDesk-Servers", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "import_flow": "Import Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Keine Geräte gefunden", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Status", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Laden...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this item?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write" - }, - "updates": { - "tab_title": "Updates", - "title": "Dashboard", - "desc": "Laden Sie eine vollständige Sicherung Ihrer Konsolenkonfiguration, Benutzer, Gruppen und Einstellungen herunter. Go-Server-Peer-Daten sind enthalten, wenn das BetterDesk-Backend aktiv ist.", - "current_version": "Installierte Version", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Jetzt prüfen", - "checking": "Prüfe...", - "up_to_date": "Aktuell", - "update_available": "Update verfügbar", - "changelog": "Release Notes", - "no_changelog": "Keine Versionshinweise verfügbar", - "files_changed": "Geänderte Dateien", - "files": "Dateien", - "changes_unavailable": "Änderungsliste konnte nicht geladen werden. Sie können das Update trotzdem installieren.", - "create_backup": "Vor dem Update eine Sicherung erstellen", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Update wird installiert...", - "creating_backup": "Sicherung wird erstellt...", - "downloading": "Dateien werden heruntergeladen...", - "install_success": "Update erfolgreich installiert. Die Konsole wird neu gestartet...", - "install_failed": "Update-Installation fehlgeschlagen", - "restarting": "Warten auf Neustart der Konsole...", - "restart_complete": "Konsole erfolgreich neu gestartet", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Keine Update-Version ausgewählt. Suchen Sie zuerst nach Updates.", - "backups_title": "Update-Sicherungen", - "backups_desc": "Vorab-Sicherungen, die automatisch vor jedem Update erstellt werden", - "no_backups": "Keine Update-Sicherungen gefunden", - "restore": "Wiederherstellen", - "restore_confirm": "Sind Sie sicher, dass Sie aus dieser Sicherung wiederherstellen möchten? Ausgewählte Abschnitte werden überschrieben.", - "restore_success": "Sicherung erfolgreich wiederhergestellt. Einige Änderungen erfordern möglicherein Neuladen der Seite.", - "baseline_set": "Referenz gesetzt", - "commits_behind": "Commits zurück", - "total_files": "Dateien gesamt", - "applied": "Applied", - "failed": "Fehlgeschlagen", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Go-Server", - "component_agent": "Agent", - "component_scripts": "Skripte und Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Go wird geprüft...", - "go_not_found": "Go ist nicht installiert", - "go_check_failed": "Go-Verfügbarkeit konnte nicht geprüft werden", - "server_building": "Go-Server wird kompiliert... Das kann einige Minuten dauern.", - "server_built": "Server-Binary kompiliert", - "server_build_failed": "Server-Kompilierung fehlgeschlagen", - "server_stale_title": "Server-Binary veraltet", - "server_stale_desc": "Der Quellcode des Go-Servers wurde aktualisiert, aber das laufende Binary wurde nicht neu gebaut. Bauen Sie es jetzt neu, um Sicherheits- und Bibliotheksupdates anzuwenden.", - "rebuild_server": "Server-Binary neu bauen", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Server-Binary neu gebaut und neu gestartet", - "rebuild_server_failed": "Server-Binary konnte nicht neu gebaut werden", - "server_deployed": "Server-Binary bereitgestellt", - "server_deploy_failed": "Serverbereitstellung fehlgeschlagen", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Serverquellcode wird heruntergeladen...", - "delete": "Löschen", - "delete_confirm": "Sicherung {name} dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "delete_success": "Sicherung gelöscht", - "delete_failed": "Sicherung konnte nicht gelöscht werden", - "retention_label": "Die neuesten N Sicherungen behalten", - "retention_hint": "Ältere Sicherungen werden nach jedem Update automatisch gelöscht. Verwenden Sie 0, um alle zu behalten.", - "retention_saved": "Aufbewahrungseinstellung gespeichert", - "retention_invalid": "Aufbewahrung muss eine Ganzzahl zwischen 0 und 1000 sein", - "retention_required_for_prune": "Legen Sie zuerst einen Aufbewahrungswert größer als 0 fest", - "prune_now": "Apply now", - "prune_confirm": "Nur die neuesten {n} Sicherungen behalten und den Rest löschen?", - "prune_done": "{n} Sicherung(en) gelöscht", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Update-Methode", - "strategy_download": "Vorkompiliertes Binary herunterladen", - "strategy_compile": "Aus Quellcode kompilieren", - "both_available": "Herunterladen und kompilieren", - "download_available": "Download verfügbar", - "no_method": "Keine Update-Methode", - "no_release": "No release", - "available": "Verfügbar", - "server_downloading": "Server-Binary wird heruntergeladen...", - "server_downloaded": "Server-Binary heruntergeladen", - "server_download_failed": "Download des Server-Binarys fehlgeschlagen", - "server_download_note": "Ein vorkompiliertes Binary wird aus GitHub Releases heruntergeladen. Das dauert normalerweise weniger als eine Minute.", - "install_go_hint": "Installieren Sie Go von https://go.dev/dl/, um die Kompilierung zu aktivieren, oder veröffentlichen Sie ein Release mit vorkompilierten Binarys", - "strategy_install_go": "Go automatisch installieren und kompilieren", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Automatische Neuerstellung bereit", - "toolchain_ready": "Toolchain installiert", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Go-Toolchain wird heruntergeladen...", - "toolchain_failed": "Installation der Go-Toolchain fehlgeschlagen", - "modal_title": "Update wird installiert", - "modal_done_title": "Update abgeschlossen", - "modal_close": "Schließen", - "modal_reload_now": "Konsole neu laden", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsolendateien", - "phase_server": "Go-Server", - "phase_restart": "Neustart", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Sicherung übersprungen (Benutzerauswahl)", - "server_skipped": "Go-Server übersprungen", - "server_not_selected": "Go server not selected", - "server_processing": "Go-Server-Update wird verarbeitet...", - "no_restart_needed": "Kein Neustart erforderlich", - "complete": "Update angewendet", - "complete_summary": "Das Update wurde erfolgreich angewendet.", - "complete_with_errors": "Das Update ist abgeschlossen, aber einige Schritte sind fehlgeschlagen. Details siehe unten.", - "modal_done_with_errors_title": "Update mit Fehlern abgeschlossen", - "console_will_restart": "Der Konsolenprozess wird jetzt neu gestartet...", - "restart_complete_msg": "Die Konsole hat den Neustart abgeschlossen. Klicken Sie auf Neu laden, um die neue Version zu laden. Die Seite lädt in 8 Sekunden automatisch neu.", - "refresh_recommended": "Statische Ressourcen wurden geändert — laden Sie die Seite neu, um die neue Oberfläche zu sehen.", - "confirm_title": "Update anwenden", - "confirm_with_backup": "Vorab wird automatisch eine Sicherung erstellt.", - "confirm_no_backup": "Es wird keine Sicherung erstellt (Fortfahren auf eigenes Risiko)." - }, - "permissions": { - "title": "Berechtigungen", - "subtitle": "Feingranulare Rollenberechtigungen und Überschreibungen verwalten", - "info_title": "Rollenbasierte Berechtigungen", - "info_desc": "Standardrollen erhalten vordefinierte Berechtigungen. Sie können einzelne Berechtigungen pro Rolle überschreiben, ohne die Basisrolle zu ändern.", - "select_role": "Rolle auswählen", - "select_role_placeholder": "Wählen Sie eine Rolle...", - "reset_overrides": "Überschreibungen zurücksetzen", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Serverebene", - "custom": "Custom", - "default": "Default", - "revert": "Zurücksetzen", - "saved": "Berechtigung gespeichert", - "reverted": "Überschreibung zurückgesetzt", - "all_reverted": "Alle Überschreibungen zurückgesetzt", - "confirm_reset": "Alle Berechtigungsüberschreibungen für diese Rolle zurücksetzen?", - "empty_title": "Wählen Sie eine Rolle aus", - "empty_desc": "Wählen Sie links eine Rolle, um ihre Berechtigungen anzuzeigen.", - "locked_title": "Super Admin", - "locked_desc": "Diese Rolle ist geschützt und kann nur über die Standardzuordnung geändert werden.", - "cat_device": "Geräte", - "cat_user": "Users", - "cat_server": "Serververwaltung", - "cat_org": "Organisationen", - "cat_audit": "Audit", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Geräte anzeigen", - "perm_device_connect": "Mit Geräten verbinden", - "perm_device_edit": "Geräte bearbeiten", - "perm_device_delete": "Geräte löschen", - "perm_device_ban": "Geräte sperren", - "perm_device_change_id": "Geräte-ID ändern", - "perm_user_view": "Benutzer anzeigen", - "perm_user_create": "Benutzer erstellen", - "perm_user_edit": "Benutzer bearbeiten", - "perm_user_delete": "Benutzer löschen", - "perm_server_config": "Server konfigurieren", - "perm_server_keys": "Server-Schlüssel verwalten", - "perm_org_create": "Organisationen erstellen", - "perm_org_edit": "Organisationen bearbeiten", - "perm_org_delete": "Organisationen löschen", - "perm_org_manage_users": "Organisationsbenutzer verwalten", - "perm_org_manage_devices": "Organisationsgeräte verwalten", - "perm_audit_view": "Audit anzeigen", - "perm_metrics_view": "Metriken anzeigen", - "perm_blocklist_edit": "Sperrliste bearbeiten", - "perm_cdap_view": "CDAP anzeigen", - "perm_cdap_command": "CDAP-Befehle ausführen", - "perm_cdap_terminal": "CDAP-Terminal verwenden", - "perm_cdap_files": "CDAP-Dateien verwalten", - "perm_enrollment_manage": "Registrierungen verwalten", - "perm_enrollment_approve": "Registrierungen genehmigen", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Branding bearbeiten", - "perm_server_attestation": "Server-Leistungsattestierung" - }, - "notifications": { - "title": "Benachrichtigungen", - "empty": "Keine neuen Benachrichtigungen", - "mark_all_read": "Alle als gelesen markieren", - "see_all": "Alle Hilfeanfragen anzeigen", - "help_request": "Hilfeanfrage", - "just_now": "just now" - }, - "accessibility": { - "title": "Barrierefreiheit", - "subtitle": "Passen Sie die Konsole an Sehen, Bewegung und Lesen an.", - "close": "Menü Barrierefreiheit schließen", - "profiles": "Schnellprofile", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Größerer Text, hoher Kontrast und sichtbarer Fokus.", - "profile_dyslexia": "Lesekomfort", - "profile_dyslexia_hint": "Lesbare Schrift und größerer Abstand.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reduziert Übergänge und pausiert Animationen.", - "profile_color_assist": "Farbunterstützung", - "profile_color_assist_hint": "Farbfilter, Beschriftungen und hervorgehobene Links.", - "reading": "Lesen", - "font_size": "Schriftgröße", - "line_height": "Zeilenhöhe", - "letter_spacing": "Buchstabenabstand", - "word_spacing": "Wortabstand", - "readable_font": "Lesbare Schrift", - "readable_font_hint": "Verwendet breite, vertraute Buchstabenformen.", - "dyslexia_spacing": "Abstand für Dyslexie", - "dyslexia_spacing_hint": "Fügt längeren Texten zusätzlichen Abstand hinzu.", - "visual": "Visuell", - "contrast": "Kontrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Hoher Kontrast dunkel", - "contrast_high_light": "Hoher Kontrast hell", - "contrast_yellow_black": "Gelb auf Schwarz", - "color_filter": "Farbsehfilter", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Farbsättigung", - "underline_links": "Links unterstreichen", - "underline_links_hint": "Macht Links sichtbar, ohne sich auf Farbe zu verlassen.", - "highlight_links": "Aktionen hervorheben", - "highlight_links_hint": "Zeichnet eine Kontur um Links und Schaltflächen.", - "highlight_headings": "Überschriften hervorheben", - "highlight_headings_hint": "Markiert Abschnittsüberschriften mit einer Farbleiste.", - "hide_media": "Dim media", - "hide_media_hint": "Dimmt Bilder, Videos und Canvas-Flächen.", - "interaction": "Interaktion", - "strong_focus": "Starker Fokus", - "strong_focus_hint": "Zeigt eine breite Tastaturfokus-Kontur.", - "large_cursor": "Großer Cursor", - "large_cursor_hint": "Verwendet einen größeren Zeiger mit hohem Kontrast.", - "reduce_motion": "Bewegung reduzieren", - "reduce_motion_hint": "Verkürzt Übergänge und sanftes Scrollen.", - "pause_animations": "Animationen pausieren", - "pause_animations_hint": "Stoppt wiederholte visuelle Bewegungen.", - "reading_guide": "Lesehilfe", - "reading_guide_hint": "Folgt dem Zeiger mit einer hellen Linie.", - "reading_mask": "Lesemaske", - "reading_mask_hint": "Verdunkelt Inhalte oberhalb und unterhalb des Zeigers.", - "preview": "Vorschau", - "preview_title": "Vorschau des Operator-Arbeitsbereichs", - "preview_text": "Prüfen Sie, ob Text, Links, Steuerelemente und Statusbeschriftungen gut lesbar sind, bevor Sie dieses Menü schließen.", - "preview_link": "Link zu Gerätedetails", - "preview_status": "Online", - "preview_button": "Hauptaktion", - "preview_secondary": "Secondary", - "reset": "Zurücksetzen", - "done": "Fertig" - }, - "server_mgmt": { - "title": "Server-Verwaltung", - "subtitle": "Cockpit-ähnliche Steuerung für den BetterDesk-Konsolen-Host (BETA).", - "beta_tooltip": "Beta-Funktion — in aktiver Entwicklung.", - "notice_title": "Beta-Funktion", - "notice_body": "Diese Werkzeuge laufen auf dem Host, auf dem der BetterDesk-Konsolenprozess ausgeführt wird. Alle Operationen werden auditiert.", - "tab_overview": "Übersicht", - "tab_terminal": "Terminal", - "tab_files": "Dateien", - "tab_services": "Dienste", - "cpu": "CPU", - "memory": "Speicher", - "load": "Last (Durchschnitt)", - "disks": "Festplatten", - "history": "Verlauf (letzte 60 Werte)", - "host_info": "Host-Info", - "cores": "Kerne", - "uptime": "Laufzeit", - "no_disks": "Keine Datenträgerdaten verfügbar", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY verfügbar", - "term_connect": "Verbinden", - "term_disconnect": "Trennen", - "term_clear": "Löschen", - "term_status": "Status", - "term_connecting": "Verbinden…", - "term_connected": "Verbunden", - "term_disconnected": "Getrennt", - "term_error": "Verbindungsfehler", - "term_warning": "Befehle werden als Konsolen-Prozessbenutzer ausgeführt. Sudoers-Regel hinzufügen für Erhöhung.", - "term_hint": "Tipp: Geben Sie `sudo -i` ein, um Root-Rechte zu erhalten (sudoers-Konfiguration erforderlich).", - "term_lib_failed": "Terminalbibliothek konnte nicht geladen werden", - "files_up": "Eine Ebene höher", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Größe", - "files_perms": "Modus", - "files_mtime": "Geändert", - "files_rename": "Umbenennen", - "files_rename_prompt": "New name:", - "files_empty": "Leeres Verzeichnis", - "files_error": "Verzeichnis konnte nicht aufgelistet werden", - "read_failed": "Datei konnte nicht gelesen werden", - "save_failed": "Datei konnte nicht gespeichert werden", - "rename_failed": "Umbenennen fehlgeschlagen", - "delete_failed": "Löschen fehlgeschlagen", - "delete_confirm": "Diesen Eintrag löschen?", - "mkdir_prompt": "Name des neuen Ordners:", - "mkdir_failed": "Ordner konnte nicht erstellt werden", - "file_saved": "Datei gespeichert", - "binary_warn": "Binärdatei — nur Vorschau", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Dienste suchen...", - "svc_name": "Dienst", - "svc_state": "Status", - "svc_description": "Beschreibung", - "svc_empty": "Keine Dienste gefunden", - "svc_load_failed": "Dienste konnten nicht geladen werden", - "svc_action_failed": "Aktion fehlgeschlagen", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stopp", - "svc_restart": "Neustart", - "svc_reload": "Neu laden", - "svc_enable": "Aktivieren", - "svc_disable": "Deaktivieren", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk Agent herunterladen", - "choose_platform": "Plattform auswählen", - "choose_platform_hint": "Wählen Sie den Installer, der zu Ihrem Betriebssystem passt.", - "download": "Herunterladen", - "building": "Wird gebaut…", - "failed": "Build fehlgeschlagen", - "need_help": "Benötigen Sie Hilfe?", - "powered_by": "Bereitgestellt von" - }, - "server_attestation": { - "title": "Server-Attestierung", - "subtitle": "Leistungs-Benchmark zur Bestimmung der gleichzeitigen Fernverbindungskapazität bei einem 80%-CPU-, RAM- und Festplatten-Schwellenwert.", - "warning_title": "Lasttest", - "warning_body": "Der Benchmark simuliert parallele WebSocket-Verbindungen zu den Signal- und Relay-Servern. Außerhalb der Stoßzeiten ausführen — dieser Test belastet die Produktion.", - "run_benchmark": "Benchmark ausführen", - "abort": "Abbrechen", - "download_report": "JSON-Bericht herunterladen", - "last_test": "Letzter Test", - "no_test_yet": "Es wurde noch kein Benchmark ausgeführt", - "max_connections": "Maximale Verbindungen", - "threshold_80": "80%-Schwellenwert — endgültige Metriken", - "disk": "Festplatte", - "ramp_chart": "Last-Rampen-Diagramm", - "connections": "Verbindungen", - "connections_short": "Verb.", - "tier_guide_title": "Was bedeutet jede Stufe?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNBEWERTET", - "tier_bronze_desc": "1–25 gleichzeitige Verbindungen — kleiner VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 Verbindungen — mittlerer Server (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 Verbindungen — Hochleistungsserver (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 Verbindungen — Enterprise-Infrastruktur (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ Verbindungen — Turbo-Klasse: dedizierte Hardware, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Hinweis: In Docker können CPU/RAM-Metriken Containergrenzen anstatt des physischen Hosts widerspiegeln.", - "badge_tooltip": "BetterDesk Server-Attestierung — Server-Leistungszertifizierung", - "confirm_run": "Dieser Benchmark führt einen Lasttest des Servers mit simulierten Verbindungen durch. Fortfahren?", - "starting": "Wird gestartet…", - "complete": "Benchmark abgeschlossen", - "signal_peers": "Signal-Peers", - "relay_sessions": "Relay-Sitzungen", - "page_error": "Fehler beim Laden der Server-Attestierungsseite", - "mode_estimated": "Geschätzt (WebSocket nicht erreichbar)", - "incomplete": "Benchmark abgeschlossen ohne gültige Einstufung" + "form": { + "cancel": "Abbrechen" } + } } diff --git a/web-nodejs/lang/en.json b/web-nodejs/lang/en.json index 8550931f..9830e4bb 100644 --- a/web-nodejs/lang/en.json +++ b/web-nodejs/lang/en.json @@ -77,7 +77,8 @@ "expand_sidebar": "Expand sidebar", "login": "Login", "server_management": "Server Management", - "server_attestation": "Server Attestation" + "server_attestation": "Server Attestation", + "commercialization": "Commercialization" }, "auth": { "login": "Login", @@ -598,6 +599,8 @@ "generator": { "title": "Agent Generator", "subtitle": "Build branded BetterDesk Agent installers for your end users", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Early feature — agent bundle generator is under active development.", "bundles_title": "Agent bundles", "new_bundle": "New bundle", "editor_title": "Bundle editor", @@ -3573,5 +3576,95 @@ "page_error": "Failed to load the Server Attestation page", "mode_estimated": "Estimated (WebSocket unreachable)", "incomplete": "Benchmark finished without a valid tier" + }, + "commercialization": { + "title": "Commercialization", + "subtitle": "Support packages, billable sessions, and work reports", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Early feature — billing and packages are under active development.", + "tabs": { + "overview": "Overview", + "packages": "Packages & contracts", + "sessions": "Sessions", + "reports": "Reports", + "settings": "Advanced settings" + }, + "clock": { + "title": "Server time (NTP)", + "check_now": "Check now", + "unsynced": "Server clock is not synchronized — billable sessions may be blocked" + }, + "stats": { + "active_sessions": "Active billable sessions" + }, + "packages": { + "new": "New package", + "name": "Name", + "included_minutes": "Included minutes", + "overage_rate": "Overage rate / h", + "currency": "Currency", + "heading": "Support packages", + "prompt_name": "Package name", + "create_title": "New package for organization", + "create_submit": "Create package", + "select_org": "Organization", + "select_org_placeholder": "Select organization…" + }, + "sessions": { + "device": "Device", + "operator": "Operator", + "duration": "Duration", + "phase": "Phase", + "amount": "Amount" + }, + "reports": { + "session": "Session", + "summary": "Summary", + "date": "Date" + }, + "contracts": { + "title": "Organization contracts", + "new": "Assign package", + "org": "Organization", + "package": "Package", + "remaining": "Remaining minutes", + "status": "Status", + "actions": "Actions", + "suspend": "Suspend", + "activate": "Activate", + "select_org": "Select organization", + "select_package": "Select package", + "no_orgs": "No organizations found", + "no_packages": "Create a package first" + }, + "assign": { + "title": "Assign existing package", + "submit": "Assign" + }, + "form": { + "cancel": "Cancel" + }, + "export": { + "csv": "Export CSV", + "pdf": "Export PDF", + "sessions_csv": "Export sessions CSV" + }, + "empty": { + "packages": "No packages yet. Create one with the button above.", + "contracts": "No organization contracts yet. Assign a package to an organization.", + "sessions": "No billable sessions recorded yet.", + "reports": "No work reports submitted yet." + }, + "report": { + "title": "Work report", + "subtitle": "Describe the work performed during this remote session.", + "category": "Category", + "ticket_ref": "Ticket reference", + "summary": "Work performed", + "skip": "Skip for now", + "submit": "Submit report", + "summary_required": "Summary is required", + "saved": "Work report saved" + } } } diff --git a/web-nodejs/lang/es.json b/web-nodejs/lang/es.json index 252f017a..5a993d9f 100644 --- a/web-nodejs/lang/es.json +++ b/web-nodejs/lang/es.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "es", - "name": "Spanish", - "native_name": "Español", - "direction": "ltr" + "meta": { + "lang": "es", + "name": "Spanish", + "native_name": "Español", + "direction": "ltr" + }, + "common": { + "loading": "Cargando...", + "confirm": "Confirmar", + "alert": "Alerta", + "prompt": "Pregunta", + "copied": "Copied!", + "save": "Guardar", + "saved": "Guardado", + "error": "Error", + "success": "Éxito", + "warning": "Advertencia", + "info": "Información", + "all": "All", + "cancel": "Cancelar", + "delete": "Eliminar", + "actions": "Acciones", + "close": "Cerrar", + "required": "Requerido", + "name_required": "El nombre de la carpeta es obligatorio", + "active": "Activo", + "inactive": "Inactivo", + "invalid_json": "JSON no válido", + "field_required": "El campo {field} es obligatorio", + "back": "Volver", + "edit": "Editar", + "yes": "Sí", + "no": "No" + }, + "nav": { + "main": "Principal", + "tools": "Herramientas de red", + "system": "Sistema", + "dashboard": "Panel principal", + "devices": "Dispositivos", + "keys": "keys", + "generator": "Generator", + "settings": "Configuración", + "users": "Usuarios", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Solicitudes de ayuda", + "activity": "Actividad", + "automation": "Automatización", + "file_transfer": "Transferencia de archivos", + "network": "Red", + "dataguard": "DataGuard", + "reports": "Informes", + "tenants": "Tenants", + "registrations": "Registros", + "management": "Administración", + "toggle_sidebar": "Alternar barra lateral", + "toggle_theme": "Cambiar tema", + "cdap": "CDAP", + "fleet": "Flota", + "scaling": "Escalado", + "cross_platform": "Multiplataforma", + "tokens": "Tokens de acceso", + "organizations": "Organizaciones", + "policies": "Políticas", + "attestation": "Atestación", + "remote": "Acceso remoto", + "toolkit": "Toolkit", + "security_audit": "Auditoría de Seguridad", + "languages": "Idiomas", + "resource_control": "Control de recursos", + "sdk_studio": "SDK Studio", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "Expandir barra lateral", + "login": "Iniciar sesión", + "permissions": "Permisos", + "server_management": "Gestión del servidor", + "server_attestation": "Certificación del servidor", + "commercialization": "Comercialización" + }, + "auth": { + "login": "Iniciar sesión", + "logout": "Cerrar sesión", + "login_title": "Iniciar sesión", + "login_subtitle": "Inicie sesión en la consola BetterDesk", + "username": "Nombre de usuario", + "username_placeholder": "Introduzca el nombre de usuario", + "password": "Contraseña", + "password_placeholder": "Introduzca la contraseña", + "remember_me": "Recordarme", + "login_failed": "Error de inicio de sesión. Verifique sus credenciales.", + "invalid_credentials": "Nombre de usuario o contraseña inválidos.", + "username_collision": "Ya existe una cuenta local con este nombre de usuario. Inicie sesión con su contraseña local o pida a un administrador que renombre o elimine la cuenta en conflicto.", + "pro_only_account": "Esta cuenta es solo para el cliente de escritorio RustDesk. Use la aplicación RustDesk para iniciar sesión.", + "fill_all_fields": "Por favor, rellene todos los campos", + "logout_confirm": "¿Está seguro de que desea cerrar sesión?", + "change_password": "Cambiar contraseña", + "password_required": "La contraseña es obligatoria", + "totp_title": "Autenticación de dos factores", + "totp_subtitle": "Introduzca el código de 6 dígitos de su aplicación de autenticación", + "totp_code": "Código de verificación", + "totp_verify": "Verificar", + "totp_use_recovery": "Usar un código de recuperación en su lugar", + "totp_use_code": "Usar el código de autenticación en su lugar", + "totp_recovery_code": "Código de recuperación", + "totp_back_to_login": "Volver al inicio de sesión", + "totp_invalid_code": "Código de verificación no válido. Inténtelo de nuevo.", + "totp_enter_code": "Introduzca un código de 6 dígitos", + "totp_enter_recovery": "Introduzca un código de recuperación", + "totp_session_expired": "Sesión expirada. Inicie sesión de nuevo.", + "totp_already_enabled": "La autenticación de dos factores ya está activada", + "passwords_mismatch": "Las contraseñas no coinciden", + "or": "o", + "login_sso": "Iniciar sesión con SSO", + "login_sso_with": "Iniciar sesión con {{provider}}", + "oidc_denied": "El proveedor de identidad denegó el acceso.", + "oidc_invalid": "Callback OIDC no válido. Inténtalo de nuevo.", + "oidc_failed": "La autenticación OIDC falló. Inténtalo de nuevo.", + "oidc_error": "Se produjo un error durante el inicio de sesión SSO.", + "oidc_no_account": "No se encontró tu cuenta y el registro automático está deshabilitado.", + "totp_rate_limited": "Demasiados intentos. Inténtalo de nuevo más tarde.", + "emergency_mode_banner": "Servidor Go no disponible — funcionando en modo de emergencia (solo administrador, funcionalidad limitada)" + }, + "dashboard": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "total_devices": "Total de dispositivos", + "online_now": "En línea ahora", + "banned": "Bloqueados", + "active_connections": "Conexiones activas", + "offline_devices": "Sin conexión", + "server_status": "Estado del servidor", + "quick_actions": "Acciones rápidas", + "manage_devices": "Gestionar dispositivos conectados", + "view_keys": "Ver claves del servidor", + "generate_config": "Generar configuración de cliente", + "server_settings": "Configurar ajustes", + "greeting_morning": "Buenos días, {name}", + "greeting_afternoon": "Buenas tardes, {name}", + "greeting_evening": "Buenas noches, {name}", + "greeting_night": "Buenas noches, {name}", + "health_overview": "Resumen de estado", + "devices_online": "Dispositivos en línea", + "active_alerts": "Alertas activas", + "recent_connections": "Dispositivos totales", + "server_uptime": "Tiempo de actividad del servidor", + "activity_feed": "Actividad reciente", + "no_recent_activity": "No hay actividad reciente", + "just_now": "ahora mismo", + "ago": "hace", + "tip_desktop_mode": "Pruebe el modo escritorio para un espacio de trabajo multiventana con widgets de monitorización.", + "tip_keyboard_shortcuts": "Pulse Ctrl+K en cualquier lugar para abrir la paleta de comandos de búsqueda rápida.", + "tip_address_book": "Sincronice su libreta de direcciones entre dispositivos iniciando sesión desde el cliente RustDesk.", + "tip_2fa": "Active la autenticación de dos factores en Ajustes para reforzar la seguridad de la cuenta.", + "tip_bulk_actions": "Seleccione varios dispositivos y use acciones masivas para gestionarlos a la vez.", + "tip_theme": "Cambie entre los temas oscuro y claro en los ajustes de la barra lateral.", + "tip_cdap": "Conecte dispositivos IoT y sensores industriales mediante la pasarela CDAP.", + "tip_tutorials": "Haga clic en el botón de ayuda de la esquina inferior derecha para ver tutoriales interactivos." + }, + "devices": { + "title": "Panel", + "id": "ID", + "hostname": "Nombre de host", + "username": "Nombre de usuario", + "platform": "Plataforma", + "version": "Versión", + "ip_address": "Dirección IP", + "note": "Nota", + "last_seen": "Visto por última vez", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Creado", + "status": "Estado", + "ban_reason": "Motivo del bloqueo", + "actions": "Acciones", + "search_placeholder": "Buscar dispositivos...", + "filter_all": "Todos", + "filter_online": "En línea", + "filter_offline": "Sin conexión", + "filter_banned": "Bloqueados", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Estado de sincronización", + "sync_success": "Estado sincronizado correctamente", + "empty_title": "No se encontraron dispositivos", + "empty_text": "Ningún dispositivo coincide con sus filtros actuales", + "edit_title": "Detalles del dispositivo", + "delete_title": "Eliminar usuario", + "delete_confirm": "¿Está seguro de que desea eliminar el dispositivo {id}?", + "delete_warning": "Esta acción elimina el dispositivo de la consola.", + "delete_permanent": "Esta acción no se puede deshacer. Todos los datos asociados a este dispositivo se eliminarán permanentemente de la base de datos.", + "delete_success": "Dispositivo eliminado correctamente", + "revoke_option": "Revocar dispositivo", + "revoke_hint": "Bloquear dispositivo y desconectar conexiones activas", + "revoke_success": "Dispositivo revocado correctamente", + "details": "Detalles del dispositivo", + "ban_title": "Bloquear dispositivo", + "ban_confirm": "¿Seguro que quieres bloquear el dispositivo {id}?", + "ban_success": "Dispositivo bloqueado correctamente", + "unban_title": "Desbloquear dispositivo", + "unban_confirm": "¿Está seguro de que desea desbloquear el dispositivo {id}?", + "unban_success": "Dispositivo desbloqueado correctamente", + "change_id": "Cambiar ID", + "change_id_title": "Cambiar ID del dispositivo", + "new_id": "Nuevo ID", + "change_id_hint": "6-16 caracteres, solo letras, números, guiones y guiones bajos", + "change_id_success": "ID del dispositivo cambiado correctamente", + "id_length_error": "El ID debe tener entre 6 y 16 caracteres", + "id_format_error": "El ID solo puede contener letras, números, guiones y guiones bajos", + "bulk_delete_title": "Eliminar múltiples dispositivos", + "bulk_delete_confirm": "¿Está seguro de que desea eliminar {count} dispositivos?", + "bulk_delete_success": "{count} dispositivos eliminados correctamente", + "columns": "Columnas", + "toggle_columns": "Alternar columnas visibles", + "not_found": "No encontrado", + "delete_failed": "No se pudo eliminar el dispositivo", + "change_id_failed": "No se pudo cambiar el ID del dispositivo", + "invalid_id": "ID de dispositivo no válido", + "invalid_id_format": "Formato de ID no válido", + "id_exists": "Este ID de dispositivo ya existe", + "no_selection": "No hay dispositivos seleccionados", + "device_type": "Tipo de dispositivo", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP conectado", + "revoke": "Revocar", + "access_policy": "Política de acceso", + "unattended_access": "Acceso no supervisado", + "enable_unattended": "Habilitar acceso no supervisado", + "access_password": "Contraseña de acceso", + "password_configured": "Contraseña configurada", + "no_password": "Sin contraseña configurada", + "new_password": "Nueva contraseña", + "clear_password": "Borrar contraseña", + "access_schedule": "Horario de acceso", + "enable_schedule": "Habilitar horario", + "allowed_days": "Días permitidos", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Operadores permitidos", + "all_operators": "Todos los operadores", + "operators_hint": "Déjalo vacío para permitir acceso a todos los operadores.", + "last_updated_by": "Última actualización por", + "access_policy_saved": "Política de acceso guardada", + "display_name": "Nombre visible", + "display_name_placeholder": "Introduce un nombre visible...", + "note_placeholder": "Introduce una nota...", + "tabs": { + "overview": "Resumen", + "hardware": "Hardware", + "metrics": "Métricas", + "connections": "Conexiones", + "audit": "Audit", + "info": "Información", + "history": "Historial" }, - "common": { - "loading": "Cargando...", - "confirm": "Confirmar", - "alert": "Alerta", - "prompt": "Pregunta", - "copied": "Copied!", - "save": "Guardar", - "saved": "Guardado", - "error": "Error", - "success": "Éxito", - "warning": "Advertencia", - "info": "Información", - "all": "All", - "cancel": "Cancelar", - "delete": "Eliminar", - "actions": "Acciones", - "close": "Cerrar", - "required": "Requerido", - "name_required": "El nombre de la carpeta es obligatorio", - "active": "Activo", - "inactive": "Inactivo", - "invalid_json": "JSON no válido", - "field_required": "El campo {field} es obligatorio", - "back": "Volver", - "edit": "Editar", - "yes": "Sí", - "no": "No" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Nombre de host", + "uptime": "Uptime", + "load_avg": "Carga media", + "network": "Red", + "no_data": "No hay datos de hardware disponibles", + "title": "Panel", + "gpu": "Graphics Card" }, - "nav": { - "main": "Principal", - "tools": "Herramientas de red", - "system": "Sistema", - "dashboard": "Panel principal", - "devices": "Dispositivos", - "keys": "keys", - "generator": "Generator", - "settings": "Configuración", - "users": "Usuarios", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Solicitudes de ayuda", - "activity": "Actividad", - "automation": "Automatización", - "file_transfer": "Transferencia de archivos", - "network": "Red", - "dataguard": "DataGuard", - "reports": "Informes", - "tenants": "Tenants", - "registrations": "Registros", - "management": "Administración", - "toggle_sidebar": "Alternar barra lateral", - "toggle_theme": "Cambiar tema", - "cdap": "CDAP", - "fleet": "Flota", - "scaling": "Escalado", - "cross_platform": "Multiplataforma", - "tokens": "Tokens de acceso", - "organizations": "Organizaciones", - "policies": "Políticas", - "attestation": "Atestación", - "remote": "Acceso remoto", - "toolkit": "Toolkit", - "security_audit": "Auditoría de Seguridad", - "languages": "Idiomas", - "resource_control": "Control de recursos", - "sdk_studio": "SDK Studio", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "Expandir barra lateral", - "login": "Iniciar sesión", - "permissions": "Permisos", - "server_management": "Gestión del servidor", - "server_attestation": "Certificación del servidor" - }, - "auth": { - "login": "Iniciar sesión", - "logout": "Cerrar sesión", - "login_title": "Iniciar sesión", - "login_subtitle": "Inicie sesión en la consola BetterDesk", - "username": "Nombre de usuario", - "username_placeholder": "Introduzca el nombre de usuario", - "password": "Contraseña", - "password_placeholder": "Introduzca la contraseña", - "remember_me": "Recordarme", - "login_failed": "Error de inicio de sesión. Verifique sus credenciales.", - "invalid_credentials": "Nombre de usuario o contraseña inválidos.", - "username_collision": "Ya existe una cuenta local con este nombre de usuario. Inicie sesión con su contraseña local o pida a un administrador que renombre o elimine la cuenta en conflicto.", - "pro_only_account": "Esta cuenta es solo para el cliente de escritorio RustDesk. Use la aplicación RustDesk para iniciar sesión.", - "fill_all_fields": "Por favor, rellene todos los campos", - "logout_confirm": "¿Está seguro de que desea cerrar sesión?", - "change_password": "Cambiar contraseña", - "password_required": "La contraseña es obligatoria", - "totp_title": "Autenticación de dos factores", - "totp_subtitle": "Introduzca el código de 6 dígitos de su aplicación de autenticación", - "totp_code": "Código de verificación", - "totp_verify": "Verificar", - "totp_use_recovery": "Usar un código de recuperación en su lugar", - "totp_use_code": "Usar el código de autenticación en su lugar", - "totp_recovery_code": "Código de recuperación", - "totp_back_to_login": "Volver al inicio de sesión", - "totp_invalid_code": "Código de verificación no válido. Inténtelo de nuevo.", - "totp_enter_code": "Introduzca un código de 6 dígitos", - "totp_enter_recovery": "Introduzca un código de recuperación", - "totp_session_expired": "Sesión expirada. Inicie sesión de nuevo.", - "totp_already_enabled": "La autenticación de dos factores ya está activada", - "passwords_mismatch": "Las contraseñas no coinciden", - "or": "o", - "login_sso": "Iniciar sesión con SSO", - "login_sso_with": "Iniciar sesión con {{provider}}", - "oidc_denied": "El proveedor de identidad denegó el acceso.", - "oidc_invalid": "Callback OIDC no válido. Inténtalo de nuevo.", - "oidc_failed": "La autenticación OIDC falló. Inténtalo de nuevo.", - "oidc_error": "Se produjo un error durante el inicio de sesión SSO.", - "oidc_no_account": "No se encontró tu cuenta y el registro automático está deshabilitado.", - "totp_rate_limited": "Demasiados intentos. Inténtalo de nuevo más tarde.", - "emergency_mode_banner": "Servidor Go no disponible — funcionando en modo de emergencia (solo administrador, funcionalidad limitada)" - }, - "dashboard": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "total_devices": "Total de dispositivos", - "online_now": "En línea ahora", - "banned": "Bloqueados", - "active_connections": "Conexiones activas", - "offline_devices": "Sin conexión", - "server_status": "Estado del servidor", - "quick_actions": "Acciones rápidas", - "manage_devices": "Gestionar dispositivos conectados", - "view_keys": "Ver claves del servidor", - "generate_config": "Generar configuración de cliente", - "server_settings": "Configurar ajustes", - "greeting_morning": "Buenos días, {name}", - "greeting_afternoon": "Buenas tardes, {name}", - "greeting_evening": "Buenas noches, {name}", - "greeting_night": "Buenas noches, {name}", - "health_overview": "Resumen de estado", - "devices_online": "Dispositivos en línea", - "active_alerts": "Alertas activas", - "recent_connections": "Dispositivos totales", - "server_uptime": "Tiempo de actividad del servidor", - "activity_feed": "Actividad reciente", - "no_recent_activity": "No hay actividad reciente", - "just_now": "ahora mismo", - "ago": "hace", - "tip_desktop_mode": "Pruebe el modo escritorio para un espacio de trabajo multiventana con widgets de monitorización.", - "tip_keyboard_shortcuts": "Pulse Ctrl+K en cualquier lugar para abrir la paleta de comandos de búsqueda rápida.", - "tip_address_book": "Sincronice su libreta de direcciones entre dispositivos iniciando sesión desde el cliente RustDesk.", - "tip_2fa": "Active la autenticación de dos factores en Ajustes para reforzar la seguridad de la cuenta.", - "tip_bulk_actions": "Seleccione varios dispositivos y use acciones masivas para gestionarlos a la vez.", - "tip_theme": "Cambie entre los temas oscuro y claro en los ajustes de la barra lateral.", - "tip_cdap": "Conecte dispositivos IoT y sensores industriales mediante la pasarela CDAP.", - "tip_tutorials": "Haga clic en el botón de ayuda de la esquina inferior derecha para ver tutoriales interactivos." - }, - "devices": { - "title": "Panel", - "id": "ID", - "hostname": "Nombre de host", - "username": "Nombre de usuario", - "platform": "Plataforma", - "version": "Versión", - "ip_address": "Dirección IP", - "note": "Nota", - "last_seen": "Visto por última vez", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Creado", - "status": "Estado", - "ban_reason": "Motivo del bloqueo", - "actions": "Acciones", - "search_placeholder": "Buscar dispositivos...", - "filter_all": "Todos", - "filter_online": "En línea", - "filter_offline": "Sin conexión", - "filter_banned": "Bloqueados", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Estado de sincronización", - "sync_success": "Estado sincronizado correctamente", - "empty_title": "No se encontraron dispositivos", - "empty_text": "Ningún dispositivo coincide con sus filtros actuales", - "edit_title": "Detalles del dispositivo", - "delete_title": "Eliminar usuario", - "delete_confirm": "¿Está seguro de que desea eliminar el dispositivo {id}?", - "delete_warning": "Esta acción elimina el dispositivo de la consola.", - "delete_permanent": "Esta acción no se puede deshacer. Todos los datos asociados a este dispositivo se eliminarán permanentemente de la base de datos.", - "delete_success": "Dispositivo eliminado correctamente", - "revoke_option": "Revocar dispositivo", - "revoke_hint": "Bloquear dispositivo y desconectar conexiones activas", - "revoke_success": "Dispositivo revocado correctamente", - "details": "Detalles del dispositivo", - "ban_title": "Bloquear dispositivo", - "ban_confirm": "¿Seguro que quieres bloquear el dispositivo {id}?", - "ban_success": "Dispositivo bloqueado correctamente", - "unban_title": "Desbloquear dispositivo", - "unban_confirm": "¿Está seguro de que desea desbloquear el dispositivo {id}?", - "unban_success": "Dispositivo desbloqueado correctamente", - "change_id": "Cambiar ID", - "change_id_title": "Cambiar ID del dispositivo", - "new_id": "Nuevo ID", - "change_id_hint": "6-16 caracteres, solo letras, números, guiones y guiones bajos", - "change_id_success": "ID del dispositivo cambiado correctamente", - "id_length_error": "El ID debe tener entre 6 y 16 caracteres", - "id_format_error": "El ID solo puede contener letras, números, guiones y guiones bajos", - "bulk_delete_title": "Eliminar múltiples dispositivos", - "bulk_delete_confirm": "¿Está seguro de que desea eliminar {count} dispositivos?", - "bulk_delete_success": "{count} dispositivos eliminados correctamente", - "columns": "Columnas", - "toggle_columns": "Alternar columnas visibles", - "not_found": "No encontrado", - "delete_failed": "No se pudo eliminar el dispositivo", - "change_id_failed": "No se pudo cambiar el ID del dispositivo", - "invalid_id": "ID de dispositivo no válido", - "invalid_id_format": "Formato de ID no válido", - "id_exists": "Este ID de dispositivo ya existe", - "no_selection": "No hay dispositivos seleccionados", - "device_type": "Tipo de dispositivo", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP conectado", - "revoke": "Revocar", - "access_policy": "Política de acceso", - "unattended_access": "Acceso no supervisado", - "enable_unattended": "Habilitar acceso no supervisado", - "access_password": "Contraseña de acceso", - "password_configured": "Contraseña configurada", - "no_password": "Sin contraseña configurada", - "new_password": "Nueva contraseña", - "clear_password": "Borrar contraseña", - "access_schedule": "Horario de acceso", - "enable_schedule": "Habilitar horario", - "allowed_days": "Días permitidos", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Operadores permitidos", - "all_operators": "Todos los operadores", - "operators_hint": "Déjalo vacío para permitir acceso a todos los operadores.", - "last_updated_by": "Última actualización por", - "access_policy_saved": "Política de acceso guardada", - "display_name": "Nombre visible", - "display_name_placeholder": "Introduce un nombre visible...", - "note_placeholder": "Introduce una nota...", - "tabs": { - "overview": "Resumen", - "hardware": "Hardware", - "metrics": "Métricas", - "connections": "Conexiones", - "audit": "Audit", - "info": "Información", - "history": "Historial" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Nombre de host", - "uptime": "Uptime", - "load_avg": "Carga media", - "network": "Red", - "no_data": "No hay datos de hardware disponibles", - "title": "Panel", - "gpu": "Graphics Card" - }, - "tags": "Tags", - "filter_by_tags": "Filtrar por etiquetas", - "no_tags": "No tags", - "all_groups": "Todos los grupos", - "create_group": "Crear grupo", - "manage_groups": "Administrar grupos", - "group_name": "Nombre del grupo", - "group_name_placeholder": "p. ej. equipos multimedia", - "dynamic_group": "Grupo dinámico por etiqueta", - "dynamic_group_hint": "Los dispositivos con esta etiqueta se unirán automáticamente.", - "tag_filter": "Tag filter", - "group_allowed_users": "Usuarios permitidos", - "group_allowed_users_hint": "Déjalo vacío para que el grupo siga visible para todos los usuarios con permisos de dispositivo.", - "group_tag_required": "El filtro de etiqueta es obligatorio para grupos dinámicos", - "group_invalid": "Identificador de grupo no válido", - "group_not_found": "Grupo no encontrado", - "group_saved": "Grupo de dispositivos guardado", - "groups_saved": "Grupos de dispositivos guardados", + "tags": "Tags", + "filter_by_tags": "Filtrar por etiquetas", + "no_tags": "No tags", + "all_groups": "Todos los grupos", + "create_group": "Crear grupo", + "manage_groups": "Administrar grupos", + "group_name": "Nombre del grupo", + "group_name_placeholder": "p. ej. equipos multimedia", + "dynamic_group": "Grupo dinámico por etiqueta", + "dynamic_group_hint": "Los dispositivos con esta etiqueta se unirán automáticamente.", + "tag_filter": "Tag filter", + "group_allowed_users": "Usuarios permitidos", + "group_allowed_users_hint": "Déjalo vacío para que el grupo siga visible para todos los usuarios con permisos de dispositivo.", + "group_tag_required": "El filtro de etiqueta es obligatorio para grupos dinámicos", + "group_invalid": "Identificador de grupo no válido", + "group_not_found": "Grupo no encontrado", + "group_saved": "Grupo de dispositivos guardado", + "groups_saved": "Grupos de dispositivos guardados", "group_membership_added": "Añadido al grupo", "group_membership_removed": "Eliminado del grupo", - "no_groups": "Aún no hay grupos", - "manual_groups": "Grupos manuales", - "dynamic_memberships": "Membresías dinámicas", - "group_allowed_user_groups": "Grupos de usuarios permitidos", - "group_allowed_user_groups_hint": "Los usuarios de los grupos seleccionados podrán acceder a este grupo de dispositivos.", - "no_user_groups": "Sin grupos de usuarios", - "edit_group": "Editar grupo", - "delete_group": "Eliminar grupo", - "delete_group_confirm": "¿Eliminar el grupo de dispositivos {name}?", - "group_deleted": "Grupo de dispositivos eliminado", - "folder_group_readonly": "Los grupos basados en carpetas se administran desde Carpetas.", - "manage_user_groups": "Administrar grupos de usuarios", - "restore_failed": "Error al restaurar el dispositivo", - "no_signal_tooltip": "El cliente contactó la API recientemente, pero no está registrado en el servidor de señal (UDP :21116). Reinicie el cliente tras la migración del servidor.", - "per_page": "Por página" - }, - "keys": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "public_key": "Clave pública", - "qr_code": "Código QR", - "server_info": "Información del servidor", - "download": "Descargar clave", - "show_qr": "Mostrar QR", - "qr_hint": "Escanee este código QR con la aplicación móvil RustDesk", - "no_key": "No se encontró clave pública", - "no_key_to_copy": "No hay clave para copiar", - "no_qr": "Código QR no disponible", - "download_success": "Archivo de clave descargado", - "not_found": "No encontrado", - "api_not_found": "Clave API no encontrada" - }, - "settings": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "tab_general": "General", - "tab_server": "Servidor", - "tab_branding": "Marca", - "tab_backup": "Copia de seguridad", - "language": "Idioma", - "change_password": "Cambiar contraseña", - "password_desc": "Actualizar la contraseña de su cuenta", - "current_password": "Contraseña actual", - "new_password": "New password (leave empty to keep current)", - "confirm_password": "Confirmar contraseña", - "save_password": "Actualizar contraseña", - "password_changed": "Contraseña cambiada correctamente", - "fill_all_fields": "Por favor, rellene todos los campos", - "passwords_not_match": "Las contraseñas no coinciden", - "password_requirements": "Requisitos de contraseña", - "password_requirements_not_met": "La contraseña no cumple los requisitos", - "req_length": "Al menos 8 caracteres", - "req_uppercase": "Al menos una letra mayúscula", - "req_lowercase": "Al menos una letra minúscula", - "req_number": "Al menos un número", - "server_info": "Información del servidor", - "version": "Versión", - "database": "Base de datos", - "uptime": "Uptime", - "audit_log": "Registro de auditoría", - "audit_desc": "Actividad reciente de la consola", - "no_audit_logs": "No se encontraron registros de auditoría", - "backend_title": "Backend del servidor", - "backend_desc": "Elija el backend del servidor para la gestión de dispositivos y servicios de señal/relay.", - "backend_original": "Original", - "backend_enhanced": "Mejorado", - "backend_rustdesk_desc": "Servidores de señal y relay estándar de RustDesk (hbbs + hbbr). API HTTP básica con endpoints limitados.", - "backend_betterdesk_desc": "Servidor mejorado basado en Go con API REST completa, autenticación JWT, lista de bloqueo, etiquetas, eventos WebSocket en tiempo real y registro de auditoría.", - "backend_feature_signal": "Servidor de señal (registro de ID)", - "backend_feature_relay": "Servidor relay (retransmisión de conexiones)", - "backend_feature_basic_api": "API REST básica", - "backend_feature_full_api": "API REST completa (34+ endpoints)", - "backend_feature_jwt": "Autenticación JWT y TOTP 2FA", - "backend_feature_blocklist": "Gestión de lista de bloqueo IP/ID", - "backend_feature_tags": "Etiquetas y agrupación de dispositivos", - "backend_feature_audit": "Registro de eventos de auditoría", - "backend_feature_websocket": "Eventos WebSocket en tiempo real", - "backend_connection": "Conexión", - "backend_api_url": "URL de la API", - "backend_test": "Probar conexión", - "backend_testing": "Probando...", - "backend_save": "Aplicar backend", - "backend_saved": "Backend del servidor cambiado correctamente. Los datos de dispositivos serán gestionados por el nuevo backend.", - "backend_save_failed": "Error al cambiar el backend del servidor", - "backend_test_success": "¡Conexión exitosa! El servidor es accesible.", - "backend_test_failed": "Error de conexión. El servidor no es accesible.", - "backend_confirm_switch": "¿Está seguro de que desea cambiar el backend del servidor? Esto cambiará la gestión de dispositivos.", - "backend_unreachable": "No se puede cambiar: el servidor de destino no es accesible. Inicie el servidor primero.", - "invalid_backend": "Selección de backend no válida. Elija 'rustdesk' o 'betterdesk'.", - "backend_status_running": "Conectado", - "backend_status_unreachable": "No accesible", - "backend_status_error": "Error", - "backend_status_unknown": "Desconocido", - "totp_title": "Autenticación de dos factores", - "totp_desc": "Añada una capa adicional de seguridad con aplicaciones de autenticación TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", - "totp_enabled": "2FA activado", - "totp_enabled_desc": "Su cuenta está protegida con autenticación de dos factores.", - "totp_disabled": "2FA no activado", - "totp_disabled_desc": "Active la autenticación de dos factores para mayor seguridad de la cuenta.", - "totp_setup": "Activar 2FA", - "totp_disable": "Desactivar 2FA", - "totp_step1": "Instale una aplicación de autenticación en su teléfono", - "totp_step2": "Escanee el código QR a continuación", - "totp_step3": "Introduzca el código de 6 dígitos para verificar", - "totp_manual_key": "Clave manual", - "totp_enter_code": "Introduzca un código de 6 dígitos", - "totp_verify_enable": "Verificar y activar", - "totp_enabled_success": "¡Autenticación de dos factores activada!", - "totp_recovery_warning": "Guarde estos códigos de recuperación en un lugar seguro. Cada código solo se puede usar una vez. Si pierde el acceso a su aplicación de autenticación, puede usar estos códigos para iniciar sesión.", - "totp_done": "Listo", - "totp_disable_warning": "Desactivar la autenticación de dos factores hará que su cuenta sea menos segura. Introduzca su contraseña para confirmar.", - "totp_disabled_success": "La autenticación de dos factores ha sido desactivada.", - "tutorials_title": "Tutoriales interactivos", - "tutorials_desc": "Muestra indicaciones guiadas breves para áreas nuevas o modificadas de la consola.", - "tutorials_enabled": "Habilitar tutoriales", - "tutorials_enabled_hint": "Cuando está habilitado, los tutoriales se muestran automáticamente para áreas que aún no completaste.", - "tutorials_reset_hint": "Borra todo el progreso guardado para que los tutoriales vuelvan a mostrarse.", - "tutorials_enabled_toast": "Tutoriales habilitados", - "tutorials_disabled_toast": "Tutoriales deshabilitados", - "tutorials_reset_toast": "Progreso de tutoriales restablecido", - "tab_auth": "Autenticación", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Configura la autenticación externa mediante LDAP o Active Directory. Los usuarios podrán iniciar sesión con sus credenciales de dominio.", - "ldap_enabled": "Habilitar autenticación LDAP", - "ldap_enabled_hint": "Cuando está habilitado, los usuarios pueden iniciar sesión con credenciales LDAP/AD. Las cuentas locales siguen funcionando como respaldo.", - "ldap_connection": "Conexión del servidor", - "ldap_host": "Servidor", - "ldap_port": "Puerto", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Omitir verificación TLS", - "ldap_timeout": "Tiempo de espera de conexión (s)", - "ldap_timeout_hint": "Segundos de espera para la respuesta del servidor LDAP", - "ldap_bind_mode": "Modo de enlace", - "ldap_direct_bind": "Enlace directo", - "ldap_direct_bind_hint": "Enlazar directamente con una plantilla DN en lugar de usar una cuenta de servicio para buscar.", - "ldap_bind_dn": "DN de enlace (cuenta de servicio)", - "ldap_bind_dn_hint": "Nombre distinguido de una cuenta de servicio de solo lectura usada para buscar usuarios.", - "ldap_bind_password": "Contraseña de enlace", - "ldap_base_dn": "DN base", - "ldap_base_dn_hint": "Base de búsqueda para encontrar usuarios, p. ej. dc=example,dc=com", - "ldap_user_filter": "Filtro de usuario", - "ldap_user_filter_hint": "Filtro LDAP para encontrar usuarios. Usa {{username}} como marcador. Predeterminado: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Plantilla DN para enlace directo", - "ldap_direct_bind_dn_hint": "Plantilla DN para enlace directo. Usa {{username}} como marcador, p. ej. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Atributos de usuario", - "ldap_attr_id": "Atributo de nombre de usuario", - "ldap_attr_email": "Atributo de correo electrónico", - "ldap_attr_name": "Atributo de nombre visible", - "ldap_group_mapping": "Asignación grupo → rol", - "ldap_group_base_dn": "DN base de grupos", - "ldap_group_base_dn_hint": "Déjalo vacío para usar el DN base principal", - "ldap_group_filter": "Filtro de grupos", - "ldap_group_attr_name": "Atributo de nombre de grupo", - "ldap_default_role": "Rol predeterminado", - "ldap_default_role_hint": "Rol asignado a usuarios cuyos grupos LDAP no coinciden con ninguna asignación", - "ldap_role_viewer": "Visualizador", - "ldap_role_operator": "Operador", - "ldap_role_admin": "Administrador", - "ldap_group_role_map": "Mapa grupo → rol", - "ldap_group_role_map_hint": "Asigna grupos LDAP a roles de BetterDesk. Formato: GroupDN=rol separado por | (pipe). Ejemplo: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Probar conexión", - "ldap_testing": "Probando...", - "ldap_test_success": "¡Conexión correcta! El servidor LDAP es accesible y las credenciales de enlace son válidas.", - "ldap_test_failed": "La conexión falló", - "ldap_save": "Guardar configuración LDAP", - "ldap_saved": "Configuración LDAP guardada correctamente", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Configura el inicio de sesión único mediante un proveedor OpenID Connect (Azure AD, Okta, Google, Keycloak, etc.).", - "oidc_enabled": "Habilitar autenticación OIDC", - "oidc_enabled_hint": "Permitir que los usuarios inicien sesión con un proveedor de identidad externo", - "oidc_provider": "Proveedor de identidad", - "oidc_display_name": "Nombre visible del botón", - "oidc_display_name_hint": "Texto mostrado en el botón de inicio de sesión (p. ej. Azure AD, Okta)", - "oidc_issuer_url": "URL del emisor", - "oidc_issuer_url_hint": "URL del emisor OpenID Connect (la detección se realiza automáticamente)", - "oidc_client_id": "ID de cliente", - "oidc_client_secret": "Secreto de cliente", - "oidc_redirect_url": "URL de redirección (callback)", - "oidc_redirect_url_hint": "Debe coincidir exactamente con la configuración de tu IdP. Normalmente: http(s)://tu-servidor:21114/api/auth/oidc/callback", - "oidc_scopes": "Ámbitos", - "oidc_use_pkce": "Usar PKCE (recomendado)", - "oidc_auto_discovery": "Detección automática", - "oidc_allow_signup": "Crear usuarios automáticamente", - "oidc_manual_endpoints": "URLs de endpoints manuales", - "oidc_authorization_url": "Endpoint de autorización", - "oidc_token_url": "Endpoint de token", - "oidc_userinfo_url": "Endpoint UserInfo", - "oidc_claim_mapping": "Asignación de claims", - "oidc_claim_username": "Claim de nombre de usuario", - "oidc_claim_email": "Claim de correo electrónico", - "oidc_claim_name": "Claim de nombre visible", - "oidc_claim_groups": "Claim de grupos", - "oidc_role_mapping": "Asignación de roles", - "oidc_default_role": "Rol predeterminado", - "oidc_group_role_map": "Asignación grupo → rol", - "oidc_group_role_map_hint": "Una asignación por línea: nombre_grupo=rol (p. ej. admins=admin, operators=operator)", - "oidc_test_discovery": "Probar detección", - "oidc_testing": "Probando...", - "oidc_test_success": "¡Detección correcta! Endpoints resueltos.", - "oidc_test_failed": "La detección falló", - "oidc_issuer_required": "La URL del emisor es obligatoria para probar la detección", - "oidc_save": "Guardar configuración OIDC", - "oidc_saved": "Configuración OIDC guardada correctamente", - "tab_advanced": "Avanzado", - "connection_mode_title": "Estrategia de conexión", - "connection_mode_desc": "Controla cómo se conectan los clientes de escritorio RustDesk: P2P directo (hole punch) cuando sea posible, o siempre a través de retransmisión.", - "connection_mode_label": "Modo de conexión predeterminado", - "connection_mode_p2p_first": "P2P primero (recomendado) — intentar conexión directa, usar retransmisión como alternativa", - "connection_mode_relay_only": "Solo retransmisión — todas las sesiones usan el servidor de retransmisión", - "connection_mode_advanced": "Opciones avanzadas", - "connection_mode_fallback_ms": "Tiempo de espera de fallback P2P (ms)", - "connection_mode_same_nat_relay": "Forzar retransmisión cuando ambos pares comparten la misma IP pública (NAT hairpin)", - "connection_mode_network_hint": "P2P requiere que el puerto UDP 21116 sea accesible entre los clientes. Signal TCP 21116, relay TCP 21117, NAT test 21115 deben estar abiertos en el servidor. Los clientes de navegador web siempre usan retransmisión.", - "connection_mode_save": "Guardar", - "connection_mode_save_restart": "Guardar y reiniciar servidor", - "connection_mode_saved": "Modo de conexión guardado", - "connection_mode_restart_started": "Reinicio del servidor iniciado", - "connection_mode_restart_failed": "Error al reiniciar el servidor", - "connection_mode_not_configurable": "El modo de conexión no se puede cambiar en este despliegue (no se encontró unidad systemd ni docker-compose)", - "connection_mode_compose_error": "No se pudo encontrar la sección de entorno del servidor en docker-compose.yml", - "connection_mode_source_saved": "Guardado en", - "connection_mode_source_defaults": "Usando valores predeterminados del servidor (no modificables desde el panel)", - "connection_mode_runtime": "Servidor activo", - "advanced_title": "Archivos de configuración", - "advanced_desc": "Edita los archivos de configuración del servidor directamente. Los cambios pueden requerir reiniciar los servicios. Se crea una copia de seguridad antes de cada guardado.", - "advanced_warning": "Estos archivos contienen secretos (claves API, contraseñas de base de datos, secretos de sesión). Edita solo si sabes lo que estás haciendo. Una sintaxis incorrecta puede impedir que el servidor arranque.", - "advanced_files_label": "Archivos", - "advanced_select_file": "Selecciona un archivo de la lista para ver o editar su contenido.", - "advanced_reload": "Recargar", - "advanced_save": "Guardar archivo", - "advanced_apply_restart": "Aplicar (reiniciar servicio)", - "advanced_saved": "Archivo de configuración guardado", - "advanced_restart_after_save": "Configuración guardada. ¿Reiniciar el servicio afectado ahora para que los cambios surtan efecto?", - "advanced_restart_confirm": "¿Reiniciar el(los) servicio(s) BetterDesk relacionado(s)? Las conexiones activas pueden interrumpirse brevemente.", - "advanced_restart_console_confirm": "¿Reiniciar el servicio de consola web? La sesión del navegador se desconectará brevemente y la página se recargará cuando la consola vuelva.", - "advanced_restart_started": "Reinicio del servicio iniciado", - "advanced_restart_done": "Consola reiniciada — recargando página…", - "advanced_restart_polling": "Esperando que la consola vuelva a estar en línea…", - "advanced_restart_timeout": "Se envió el reinicio pero la consola no respondió a tiempo. Revisa los registros de systemd/NSSM y recarga manualmente.", - "advanced_restart_failed": "Error al reiniciar el servicio (privilegios insuficientes o servicio no instalado)", - "advanced_save_confirm": "¿Guardar cambios en este archivo? Se creará una copia de seguridad de la versión anterior.", - "advanced_unsaved_confirm": "Tienes cambios sin guardar. ¿Descartarlos?", - "advanced_no_files": "No hay archivos de configuración disponibles en este sistema.", - "advanced_readonly": "solo lectura", - "advanced_missing": "faltante", - "advanced_new_file": "Nuevo archivo (no se crea hasta que guardes)", - "advanced_new_file_hint": "Nuevo archivo — agrega contenido y guarda", - "advanced_backup_created": "copia de seguridad creada", - "advanced_restart_console": "Reinicia el servicio de consola web (p. ej. systemctl restart betterdesk-console) para que los cambios en .env surtan efecto.", - "advanced_restart_goserver": "Reinicia el servidor Go de BetterDesk para que se carguen los cambios en la lista de bloqueo.", - "advanced_restart_systemd": "Después de editar las unidades de systemd, ejecuta: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Reinicia el servicio afectado para que los cambios surtan efecto.", - "advanced_error_unknown": "Archivo de configuración desconocido", - "advanced_error_not_found": "El archivo no existe", - "advanced_error_not_file": "La ruta no es un archivo regular", - "advanced_error_too_large": "El archivo excede el tamaño máximo editable (512 KB)", - "advanced_error_binary": "Los archivos binarios no se pueden editar en el panel", - "advanced_error_invalid": "Contenido de archivo no válido", - "advanced_error_not_writable": "El archivo no es escribible por el proceso de consola", - "advanced_file_console-env": "Entorno de la consola (.env)", - "advanced_file_console-env-local": "Anulaciones de la consola (.env.local)", - "advanced_file_go-blocklist": "Lista de bloqueo del servidor Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unidad de servicio)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unidad de servicio)", - "advanced_file_console-session-secret": "Secreto de sesión de la consola (.session_secret)", - "advanced_file_go-audit-log": "Registro de auditoría del servidor Go (audit.jsonl)", - "advanced_file_build-env": "Entorno de compilación del agente (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuración del supervisor)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orquestación)", - "advanced_restart_none": "No se requiere reinicio del servicio para este archivo.", - "enrollment_title": "Inscripción de dispositivo (RustDesk)", - "enrollment_desc": "Controla cómo se registran los nuevos clientes RustDesk y cómo los operadores los aprueban en la página de solicitudes de inscripción.", - "enrollment_require_approval": "Requiere aprobación del operador (modo administrado)", - "enrollment_require_approval_hint": "Cuando está habilitado, los clientes desconocidos se ponen en cola hasta que un operador los aprueba en Solicitudes de inscripción.", - "enrollment_rich_approve": "Formulario de aprobación completo (nombre, carpeta, grupos, etiquetas)", - "enrollment_rich_approve_hint": "Muestra un diálogo detallado al aprobar solicitudes de inscripción o registro LAN.", - "enrollment_tag_picker": "Elegir etiquetas de las etiquetas de dispositivos existentes", - "enrollment_tag_picker_hint": "Permite a los operadores seleccionar etiquetas de la lista usada en la página de Dispositivos en lugar de solo escribirlas.", - "enrollment_open_requests": "Solicitudes de inscripción abiertas", - "enrollment_pending_count": "{count} solicitud(es) de inscripción pendiente(s)" - }, - "audit": { - "time": "Hora", - "user": "Usuario", - "action": "Acción", - "details": "Detalles del dispositivo", - "action_login": "Login", - "action_login_failed": "Inicio de sesión fallido", - "action_logout": "Logout", - "action_password_change": "Contraseña cambiada", - "action_2fa_enable": "2FA habilitado", - "action_2fa_disable": "2FA deshabilitado", - "action_user_create": "Usuario creado", - "action_user_update": "Usuario actualizado", - "action_user_delete": "Usuario eliminado", - "action_settings_update": "Configuración actualizada", - "action_device_ban": "Dispositivo bloqueado", - "action_device_unban": "Bloqueo de dispositivo eliminado", - "action_device_delete": "Dispositivo eliminado" - }, - "generator": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "config_options": "Opciones de configuración", - "server_address": "Dirección del servidor", - "server_address_hint": "Dominio o dirección IP de su servidor", - "custom_port": "Puerto personalizado", - "port_hint": "Dejar vacío para el predeterminado (21116)", - "relay_server": "Servidor relay", - "relay_placeholder": "Igual que el servidor ID si está vacío", - "relay_hint": "Opcional: dirección de servidor relay separada", - "include_key": "Incluir clave pública en la configuración", - "generate": "Generar configuración", - "output": "Resultado de configuración", - "usage_title": "Detalles de conexión", - "generated": "Configuración generada", - "server_required": "La dirección del servidor es obligatoria", - "nothing_to_copy": "Genere primero una configuración", - "bundles_title": "Paquetes del agente", - "new_bundle": "Nuevo paquete", - "editor_title": "Editor de paquetes", - "empty_state": "Selecciona un paquete a la izquierda o crea uno nuevo para empezar.", - "loading": "Cargando…", - "no_bundles": "Aún no hay paquetes. Crea tu primer paquete.", - "bundle_name": "Nombre del paquete", - "bundle_name_hint": "Solo una etiqueta interna; no se muestra a los usuarios finales.", - "short_link": "Enlace de descarga corto", - "short_link_hint": "Se usa en la URL pública (/d/…). Solo letras minúsculas, números y guiones (2–32 caracteres). Se rellena automáticamente desde el nombre del paquete — acórtelo para compartirlo más fácilmente (p. ej. acme).", - "branding_section": "Marca", - "company_name": "Nombre de empresa/marca", - "short_text": "Descripción corta", - "contact_email": "Correo de contacto", - "contact_phone": "Teléfono de contacto", - "contact_url": "Sitio web de contacto", - "logo": "Logotipo", - "logo_hint": "PNG, JPEG, SVG o WebP. Máximo 256 KB.", - "logo_clear": "Quitar logotipo", - "primary_color": "Color principal", - "accent_color": "Color de cabecera", - "default_lang": "Idioma predeterminado", - "allow_unattended": "Permitir acceso no supervisado", - "allow_unattended_hint": "Cuando está habilitado, el agente muestra una contraseña persistente para acceso de operadores.", - "save": "Guardar paquete", - "revoke": "Revocar", - "unrevoke": "Reactivar", - "revoked": "Revocado", - "preview_title": "Vista previa en vivo", - "preview_hint": "Aspecto aproximado de la ventana del agente para usuarios finales.", - "preview_default_name": "Soporte BetterDesk", - "preview_status_ready": "Listo", - "preview_id": "Tu ID", - "preview_password": "Contraseña", - "preview_chat": "Chatear con soporte", - "preview_settings": "Configuración (solo admin)", - "preview_quit": "Salir (solo admin)", - "download_link_title": "Enlace de descarga", - "download_link_hint": "Comparte este enlace con usuarios finales. Verán una página de descarga con tu marca. Los enlaces hex antiguos siguen funcionando después de cambiar el enlace corto.", - "open_portal": "Abrir", - "created": "Paquete creado", - "saved": "Paquete guardado", - "deleted": "Paquete eliminado", - "revoked_ok": "Paquete revocado", - "unrevoked_ok": "Paquete reactivado", - "link_copied": "Enlace copiado al portapapeles", - "copy_failed": "La copia automática falló; cópialo manualmente", - "unsaved_confirm": "¿Descartar los cambios no guardados?", - "confirm_revoke": "¿Revocar este paquete? El enlace de descarga dejará de funcionar.", - "confirm_unrevoke": "¿Reactivar este paquete?", - "confirm_delete": "¿Eliminar este paquete de forma permanente? Esta acción no se puede deshacer.", - "errors": { - "validation_failed": "La validación falló", - "name_required": "El nombre del paquete es obligatorio", - "company_name_required": "El nombre de la empresa es obligatorio", - "logo_invalid": "El logotipo debe ser un archivo de imagen válido", - "logo_too_large": "El logotipo puede tener como máximo 256 KB", - "logo_read_failed": "No se pudo leer el archivo del logotipo", - "primary_color_invalid": "El color principal debe ser un valor hexadecimal (p. ej. #2563eb)", - "accent_color_invalid": "El color de cabecera debe ser un valor hexadecimal (p. ej. #1e293b)", - "contact_url_invalid": "El sitio web de contacto debe ser una URL válida", - "rebuild_revoked": "No se puede reconstruir un paquete revocado — vuelva a habilitarlo primero", - "server_host_invalid": "Ingrese un nombre de dominio o dirección IPv4 válido", - "server_host_required": "La dirección pública del servidor es obligatoria", - "token_failed": "No se pudo generar el token de inscripción — compruebe la conectividad del servidor", - "slug_invalid": "El enlace corto solo puede contener letras minúsculas, números y guiones", - "slug_too_short": "El enlace corto debe tener al menos 2 caracteres", - "slug_too_long": "El enlace corto debe tener como máximo 32 caracteres", - "slug_taken": "Este enlace corto ya lo usa otro paquete" - }, - "legacy_title": "Generador de configuración del cliente", - "background_color": "Fondo de ventana", - "build_error_hint": "Error de compilación", - "build_status_building": "Compilando", - "build_status_failed": "Fallido", - "build_status_pending": "En cola", - "build_status_ready": "Listo", - "builds_empty": "Aún no hay compilaciones en cola — guarda el paquete o haz clic en Reconstruir todo.", - "builds_hint": "Instaladores compilados en este servidor para cada plataforma. Reconstruir después de corregir errores de la cadena de herramientas o actualizar el código fuente del agente.", - "builds_loading": "Cargando estado de compilación…", - "builds_summary": "{{ready}} listo · {{pending}} en cola · {{building}} compilando · {{failed}} fallido", - "builds_title": "Compilaciones de cliente", - "connection_section": "Conexión al servidor", - "enrollment_per_device": "Por dispositivo — aprobar en Registros", - "enrollment_token": "Registro de dispositivo", - "enrollment_token_hint": "Cada instalación se registra por sí sola. Aprueba nuevos dispositivos en el panel de Registros; el servidor emite entonces una clave de acceso única por ordenador.", - "enrollment_token_pending": "Por dispositivo tras aprobación", - "enrollment_token_set": "Por dispositivo — aprobar en Registros", - "header_text_color": "Color del texto de encabezado", - "rebuild_all": "Reconstruir todo", - "rebuild_confirm": "¿Reconstruir todos los instaladores de plataforma para este paquete? Los artefactos listos existentes serán reemplazados.", - "rebuild_queued": "Todas las compilaciones de plataforma en cola", - "rebuilding_all": "Poniendo en cola las reconstrucciones…", - "server_host": "Dirección pública del servidor", - "server_host_hint": "Nombre de dominio o IP pública donde los usuarios finales acceden a su servidor BetterDesk. El puerto se toma de la configuración de la consola.", - "server_host_placeholder": "support.example.com o 203.0.113.10", - "status_ready_color": "Color del indicador de listo", - "surface_color": "Fondo de tarjeta", - "text_color": "Color del texto", - "text_muted_color": "Color de texto atenuado", - "use_https": "Usar HTTPS / WSS (recomendado)", - "preview_help": "Solicitar ayuda" - }, - "server": { - "port": "Puerto", - "api_port": "Puerto API", - "id_server": "Servidor ID", - "relay_server": "Servidor relay", - "api_key": "Clave API" - }, - "status": { - "online": "En línea", - "offline": "Sin conexión", - "banned": "Bloqueados", - "running": "En ejecución", - "stopped": "Detenido", - "unknown": "Desconocido", - "checking": "Verificando...", - "label": "Status", - "no_signal": "Sin señal" - }, - "actions": { - "refresh": "Actualizar", - "copy": "Copiar", - "connect": "Conectar", - "connect_desktop": "Conectar vía cliente de escritorio", - "remote_viewer": "Visor remoto", - "web_remote": "Escritorio remoto web", - "details": "Detalles del dispositivo", - "edit": "Editar", - "delete": "Eliminar", - "ban": "Bloquear", - "unban": "Desbloquear", - "save": "Guardar", - "cancel": "Cancelar", - "confirm": "Confirmar", - "close": "Cerrar", - "clear": "Limpiar", - "ok": "OK", - "saved": "Guardado", - "back": "Volver", - "create": "Crear", - "dismiss": "Descartar", - "view_all": "Ver todo", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "ahora mismo", - "seconds_ago": "Hace {count} segundo(s)", - "minutes_ago": "Hace {count} minuto(s)", - "hours_ago": "Hace {count} hora(s)", - "days_ago": "Hace {count} día(s)", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "add_user": "Añadir usuario", - "edit_user": "Editar usuario", - "username": "Nombre de usuario", - "username_placeholder": "Introduzca el nombre de usuario", - "username_hint": "3-32 caracteres, solo letras, números y guiones bajos", - "password": "Contraseña", - "password_placeholder": "Introduzca la contraseña", - "password_hint": "Mínimo 8 caracteres con mayúsculas, minúsculas, números y símbolos", - "password_leave_empty": "Dejar vacío para mantener la actual", - "role": "Rol", - "role_admin": "Administrador", - "role_operator": "Operador", - "role_viewer": "Observador", - "role_pro": "Profesional", - "role_hint": "Los observadores solo pueden ver datos, los operadores pueden gestionar dispositivos, los administradores tienen acceso completo", - "created": "Creado", - "last_login": "Último inicio de sesión", - "never": "Nunca", - "actions": "Acciones", - "create": "Crear", - "edit": "Editar", - "reset_password": "Restablecer contraseña", - "new_password": "New password (leave empty to keep current)", - "delete_title": "Eliminar usuario", - "delete_confirm": "¿Está seguro de que desea eliminar el usuario {username}?", - "delete_success": "Dispositivo eliminado correctamente", - "user_created": "Usuario creado correctamente", - "user_updated": "Usuario actualizado correctamente", - "password_reset_success": "Contraseña restablecida correctamente", - "empty_title": "No se encontraron dispositivos", - "empty_text": "Ningún dispositivo coincide con sus filtros actuales", - "fill_required": "Por favor, rellene todos los campos obligatorios", - "invalid_username": "El nombre de usuario debe tener 3-32 caracteres, solo letras, números y guiones bajos", - "username_exists": "El nombre de usuario ya existe", - "weak_password": "La contraseña es demasiado débil", - "password_too_short": "La contraseña debe tener al menos 8 caracteres", - "invalid_role": "Rol no válido", - "cannot_demote_self": "No puede degradarse a sí mismo", - "cannot_delete_self": "No puede eliminar su propia cuenta", - "last_admin": "No se puede eliminar el último administrador", - "admin_only": "Esta función solo está disponible para administradores", - "password_required": "La contraseña es obligatoria", - "not_found": "No encontrado", - "strength_weak": "Débil", - "strength_medium": "Media", - "strength_strong": "Fuerte", - "security_tips_title": "Buenas prácticas de seguridad", - "tip_strong_passwords": "Use contraseñas fuertes y únicas para cada usuario", - "tip_unique_accounts": "Cree cuentas individuales para cada persona", - "tip_viewer_role": "Use el rol de observador para usuarios que solo necesitan acceso de lectura", - "tip_operator_role": "Use el rol de operador para usuarios que necesitan gestionar dispositivos pero no usuarios", - "tip_audit_logs": "Revise regularmente los registros de auditoría en busca de actividad sospechosa", - "role_super_admin": "Super Admin", - "role_server_admin": "Administrador del servidor", - "role_global_admin": "Administrador global", - "organizations": "Organizaciones", - "user_organizations": "Organizaciones de {username}", - "no_organizations": "Sin organizaciones", - "org_removed": "Usuario eliminado de la organización", - "server_role_label": "Rol del servidor", - "server_role_hint": "Define qué puede hacer el usuario en toda la consola (acceso al panel, configuración del servidor, auditoría, etc.).", - "org_membership_section": "Membresía de organización", - "org_membership_hint": "Un usuario puede pertenecer a varias organizaciones. El rol de organización controla solo los permisos dentro de esa organización y es independiente del rol del servidor anterior.", - "column_organizations": "Organizaciones", - "no_orgs_short": "—", - "org_count_one": "{count} organización", - "org_count_many": "{count} organizaciones", - "all_orgs_assigned": "El usuario ya pertenece a todas las organizaciones.", - "user_groups": "Grupos de usuarios", - "user_groups_hint": "Los grupos de usuarios pueden conceder acceso a grupos de dispositivos seleccionados.", - "loading_user_groups": "Cargando grupos de usuarios...", - "no_user_groups": "No hay grupos de usuarios disponibles", - "create_user_group": "Crear grupo", - "edit_user_group": "Editar grupo de usuarios", - "delete_user_group": "Eliminar grupo de usuarios", - "delete_user_group_confirm": "¿Eliminar el grupo de usuarios {name}? Los miembros perderán el acceso concedido por este grupo.", - "user_group_created": "Grupo de usuarios creado", - "user_group_updated": "Grupo de usuarios actualizado", - "user_group_deleted": "Grupo de usuarios eliminado", - "user_group_not_found": "Grupo de usuarios no encontrado", - "group_name": "Nombre del grupo", - "group_name_placeholder": "Operadores", - "group_note": "Note", - "group_note_placeholder": "Nota opcional", - "group_name_required": "El nombre del grupo es obligatorio", - "group_members_count": "{count} miembros", - "provider": "Proveedor", - "provider_local": "Local", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Gestionado por el proveedor de identidad", - "provider_managed_hint": "Esta cuenta está gestionada por un proveedor de identidad externo (LDAP/AD o SSO). La contraseña y el rol son controlados por el proveedor y no se pueden cambiar aquí." - }, - "folders": { - "title": "Panel", - "create": "Crear", - "edit": "Editar", - "delete": "Eliminar", - "name": "Folder Name", - "name_placeholder": "Introduzca el nombre de la carpeta", - "name_required": "El nombre de la carpeta es obligatorio", - "name_too_long": "El nombre de la carpeta es demasiado largo (máx. 50 caracteres)", - "color": "Color", - "icon": "Icono", - "not_found": "No encontrado", - "delete_confirm": "¿Está seguro de que desea eliminar esta carpeta? Los dispositivos dejarán de estar asignados.", - "delete_success": "Dispositivo eliminado correctamente", - "created": "Creado", - "updated": "Carpeta actualizada correctamente", - "no_devices_selected": "No hay dispositivos seleccionados", - "devices_moved": "Dispositivos movidos correctamente", - "device_assigned": "Dispositivo asignado a la carpeta", - "unassigned": "Sin asignar", - "all_devices": "Todos los dispositivos", - "drag_hint": "Arrastre dispositivos a las carpetas para organizarlos", - "move_to": "Mover a", - "toggle_sidebar": "Alternar barra lateral" - }, + "no_groups": "Aún no hay grupos", + "manual_groups": "Grupos manuales", + "dynamic_memberships": "Membresías dinámicas", + "group_allowed_user_groups": "Grupos de usuarios permitidos", + "group_allowed_user_groups_hint": "Los usuarios de los grupos seleccionados podrán acceder a este grupo de dispositivos.", + "no_user_groups": "Sin grupos de usuarios", + "edit_group": "Editar grupo", + "delete_group": "Eliminar grupo", + "delete_group_confirm": "¿Eliminar el grupo de dispositivos {name}?", + "group_deleted": "Grupo de dispositivos eliminado", + "folder_group_readonly": "Los grupos basados en carpetas se administran desde Carpetas.", + "manage_user_groups": "Administrar grupos de usuarios", + "restore_failed": "Error al restaurar el dispositivo", + "no_signal_tooltip": "El cliente contactó la API recientemente, pero no está registrado en el servidor de señal (UDP :21116). Reinicie el cliente tras la migración del servidor.", + "per_page": "Por página" + }, + "keys": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "public_key": "Clave pública", + "qr_code": "Código QR", + "server_info": "Información del servidor", + "download": "Descargar clave", + "show_qr": "Mostrar QR", + "qr_hint": "Escanee este código QR con la aplicación móvil RustDesk", + "no_key": "No se encontró clave pública", + "no_key_to_copy": "No hay clave para copiar", + "no_qr": "Código QR no disponible", + "download_success": "Archivo de clave descargado", + "not_found": "No encontrado", + "api_not_found": "Clave API no encontrada" + }, + "settings": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "tab_general": "General", + "tab_server": "Servidor", + "tab_branding": "Marca", + "tab_backup": "Copia de seguridad", + "language": "Idioma", + "change_password": "Cambiar contraseña", + "password_desc": "Actualizar la contraseña de su cuenta", + "current_password": "Contraseña actual", + "new_password": "New password (leave empty to keep current)", + "confirm_password": "Confirmar contraseña", + "save_password": "Actualizar contraseña", + "password_changed": "Contraseña cambiada correctamente", + "fill_all_fields": "Por favor, rellene todos los campos", + "passwords_not_match": "Las contraseñas no coinciden", + "password_requirements": "Requisitos de contraseña", + "password_requirements_not_met": "La contraseña no cumple los requisitos", + "req_length": "Al menos 8 caracteres", + "req_uppercase": "Al menos una letra mayúscula", + "req_lowercase": "Al menos una letra minúscula", + "req_number": "Al menos un número", + "server_info": "Información del servidor", + "version": "Versión", + "database": "Base de datos", + "uptime": "Uptime", + "audit_log": "Registro de auditoría", + "audit_desc": "Actividad reciente de la consola", + "no_audit_logs": "No se encontraron registros de auditoría", + "backend_title": "Backend del servidor", + "backend_desc": "Elija el backend del servidor para la gestión de dispositivos y servicios de señal/relay.", + "backend_original": "Original", + "backend_enhanced": "Mejorado", + "backend_rustdesk_desc": "Servidores de señal y relay estándar de RustDesk (hbbs + hbbr). API HTTP básica con endpoints limitados.", + "backend_betterdesk_desc": "Servidor mejorado basado en Go con API REST completa, autenticación JWT, lista de bloqueo, etiquetas, eventos WebSocket en tiempo real y registro de auditoría.", + "backend_feature_signal": "Servidor de señal (registro de ID)", + "backend_feature_relay": "Servidor relay (retransmisión de conexiones)", + "backend_feature_basic_api": "API REST básica", + "backend_feature_full_api": "API REST completa (34+ endpoints)", + "backend_feature_jwt": "Autenticación JWT y TOTP 2FA", + "backend_feature_blocklist": "Gestión de lista de bloqueo IP/ID", + "backend_feature_tags": "Etiquetas y agrupación de dispositivos", + "backend_feature_audit": "Registro de eventos de auditoría", + "backend_feature_websocket": "Eventos WebSocket en tiempo real", + "backend_connection": "Conexión", + "backend_api_url": "URL de la API", + "backend_test": "Probar conexión", + "backend_testing": "Probando...", + "backend_save": "Aplicar backend", + "backend_saved": "Backend del servidor cambiado correctamente. Los datos de dispositivos serán gestionados por el nuevo backend.", + "backend_save_failed": "Error al cambiar el backend del servidor", + "backend_test_success": "¡Conexión exitosa! El servidor es accesible.", + "backend_test_failed": "Error de conexión. El servidor no es accesible.", + "backend_confirm_switch": "¿Está seguro de que desea cambiar el backend del servidor? Esto cambiará la gestión de dispositivos.", + "backend_unreachable": "No se puede cambiar: el servidor de destino no es accesible. Inicie el servidor primero.", + "invalid_backend": "Selección de backend no válida. Elija 'rustdesk' o 'betterdesk'.", + "backend_status_running": "Conectado", + "backend_status_unreachable": "No accesible", + "backend_status_error": "Error", + "backend_status_unknown": "Desconocido", + "totp_title": "Autenticación de dos factores", + "totp_desc": "Añada una capa adicional de seguridad con aplicaciones de autenticación TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", + "totp_enabled": "2FA activado", + "totp_enabled_desc": "Su cuenta está protegida con autenticación de dos factores.", + "totp_disabled": "2FA no activado", + "totp_disabled_desc": "Active la autenticación de dos factores para mayor seguridad de la cuenta.", + "totp_setup": "Activar 2FA", + "totp_disable": "Desactivar 2FA", + "totp_step1": "Instale una aplicación de autenticación en su teléfono", + "totp_step2": "Escanee el código QR a continuación", + "totp_step3": "Introduzca el código de 6 dígitos para verificar", + "totp_manual_key": "Clave manual", + "totp_enter_code": "Introduzca un código de 6 dígitos", + "totp_verify_enable": "Verificar y activar", + "totp_enabled_success": "¡Autenticación de dos factores activada!", + "totp_recovery_warning": "Guarde estos códigos de recuperación en un lugar seguro. Cada código solo se puede usar una vez. Si pierde el acceso a su aplicación de autenticación, puede usar estos códigos para iniciar sesión.", + "totp_done": "Listo", + "totp_disable_warning": "Desactivar la autenticación de dos factores hará que su cuenta sea menos segura. Introduzca su contraseña para confirmar.", + "totp_disabled_success": "La autenticación de dos factores ha sido desactivada.", + "tutorials_title": "Tutoriales interactivos", + "tutorials_desc": "Muestra indicaciones guiadas breves para áreas nuevas o modificadas de la consola.", + "tutorials_enabled": "Habilitar tutoriales", + "tutorials_enabled_hint": "Cuando está habilitado, los tutoriales se muestran automáticamente para áreas que aún no completaste.", + "tutorials_reset_hint": "Borra todo el progreso guardado para que los tutoriales vuelvan a mostrarse.", + "tutorials_enabled_toast": "Tutoriales habilitados", + "tutorials_disabled_toast": "Tutoriales deshabilitados", + "tutorials_reset_toast": "Progreso de tutoriales restablecido", + "tab_auth": "Autenticación", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Configura la autenticación externa mediante LDAP o Active Directory. Los usuarios podrán iniciar sesión con sus credenciales de dominio.", + "ldap_enabled": "Habilitar autenticación LDAP", + "ldap_enabled_hint": "Cuando está habilitado, los usuarios pueden iniciar sesión con credenciales LDAP/AD. Las cuentas locales siguen funcionando como respaldo.", + "ldap_connection": "Conexión del servidor", + "ldap_host": "Servidor", + "ldap_port": "Puerto", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Omitir verificación TLS", + "ldap_timeout": "Tiempo de espera de conexión (s)", + "ldap_timeout_hint": "Segundos de espera para la respuesta del servidor LDAP", + "ldap_bind_mode": "Modo de enlace", + "ldap_direct_bind": "Enlace directo", + "ldap_direct_bind_hint": "Enlazar directamente con una plantilla DN en lugar de usar una cuenta de servicio para buscar.", + "ldap_bind_dn": "DN de enlace (cuenta de servicio)", + "ldap_bind_dn_hint": "Nombre distinguido de una cuenta de servicio de solo lectura usada para buscar usuarios.", + "ldap_bind_password": "Contraseña de enlace", + "ldap_base_dn": "DN base", + "ldap_base_dn_hint": "Base de búsqueda para encontrar usuarios, p. ej. dc=example,dc=com", + "ldap_user_filter": "Filtro de usuario", + "ldap_user_filter_hint": "Filtro LDAP para encontrar usuarios. Usa {{username}} como marcador. Predeterminado: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Plantilla DN para enlace directo", + "ldap_direct_bind_dn_hint": "Plantilla DN para enlace directo. Usa {{username}} como marcador, p. ej. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Atributos de usuario", + "ldap_attr_id": "Atributo de nombre de usuario", + "ldap_attr_email": "Atributo de correo electrónico", + "ldap_attr_name": "Atributo de nombre visible", + "ldap_group_mapping": "Asignación grupo → rol", + "ldap_group_base_dn": "DN base de grupos", + "ldap_group_base_dn_hint": "Déjalo vacío para usar el DN base principal", + "ldap_group_filter": "Filtro de grupos", + "ldap_group_attr_name": "Atributo de nombre de grupo", + "ldap_default_role": "Rol predeterminado", + "ldap_default_role_hint": "Rol asignado a usuarios cuyos grupos LDAP no coinciden con ninguna asignación", + "ldap_role_viewer": "Visualizador", + "ldap_role_operator": "Operador", + "ldap_role_admin": "Administrador", + "ldap_group_role_map": "Mapa grupo → rol", + "ldap_group_role_map_hint": "Asigna grupos LDAP a roles de BetterDesk. Formato: GroupDN=rol separado por | (pipe). Ejemplo: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Probar conexión", + "ldap_testing": "Probando...", + "ldap_test_success": "¡Conexión correcta! El servidor LDAP es accesible y las credenciales de enlace son válidas.", + "ldap_test_failed": "La conexión falló", + "ldap_save": "Guardar configuración LDAP", + "ldap_saved": "Configuración LDAP guardada correctamente", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Configura el inicio de sesión único mediante un proveedor OpenID Connect (Azure AD, Okta, Google, Keycloak, etc.).", + "oidc_enabled": "Habilitar autenticación OIDC", + "oidc_enabled_hint": "Permitir que los usuarios inicien sesión con un proveedor de identidad externo", + "oidc_provider": "Proveedor de identidad", + "oidc_display_name": "Nombre visible del botón", + "oidc_display_name_hint": "Texto mostrado en el botón de inicio de sesión (p. ej. Azure AD, Okta)", + "oidc_issuer_url": "URL del emisor", + "oidc_issuer_url_hint": "URL del emisor OpenID Connect (la detección se realiza automáticamente)", + "oidc_client_id": "ID de cliente", + "oidc_client_secret": "Secreto de cliente", + "oidc_redirect_url": "URL de redirección (callback)", + "oidc_redirect_url_hint": "Debe coincidir exactamente con la configuración de tu IdP. Normalmente: http(s)://tu-servidor:21114/api/auth/oidc/callback", + "oidc_scopes": "Ámbitos", + "oidc_use_pkce": "Usar PKCE (recomendado)", + "oidc_auto_discovery": "Detección automática", + "oidc_allow_signup": "Crear usuarios automáticamente", + "oidc_manual_endpoints": "URLs de endpoints manuales", + "oidc_authorization_url": "Endpoint de autorización", + "oidc_token_url": "Endpoint de token", + "oidc_userinfo_url": "Endpoint UserInfo", + "oidc_claim_mapping": "Asignación de claims", + "oidc_claim_username": "Claim de nombre de usuario", + "oidc_claim_email": "Claim de correo electrónico", + "oidc_claim_name": "Claim de nombre visible", + "oidc_claim_groups": "Claim de grupos", + "oidc_role_mapping": "Asignación de roles", + "oidc_default_role": "Rol predeterminado", + "oidc_group_role_map": "Asignación grupo → rol", + "oidc_group_role_map_hint": "Una asignación por línea: nombre_grupo=rol (p. ej. admins=admin, operators=operator)", + "oidc_test_discovery": "Probar detección", + "oidc_testing": "Probando...", + "oidc_test_success": "¡Detección correcta! Endpoints resueltos.", + "oidc_test_failed": "La detección falló", + "oidc_issuer_required": "La URL del emisor es obligatoria para probar la detección", + "oidc_save": "Guardar configuración OIDC", + "oidc_saved": "Configuración OIDC guardada correctamente", + "tab_advanced": "Avanzado", + "connection_mode_title": "Estrategia de conexión", + "connection_mode_desc": "Controla cómo se conectan los clientes de escritorio RustDesk: P2P directo (hole punch) cuando sea posible, o siempre a través de retransmisión.", + "connection_mode_label": "Modo de conexión predeterminado", + "connection_mode_p2p_first": "P2P primero (recomendado) — intentar conexión directa, usar retransmisión como alternativa", + "connection_mode_relay_only": "Solo retransmisión — todas las sesiones usan el servidor de retransmisión", + "connection_mode_advanced": "Opciones avanzadas", + "connection_mode_fallback_ms": "Tiempo de espera de fallback P2P (ms)", + "connection_mode_same_nat_relay": "Forzar retransmisión cuando ambos pares comparten la misma IP pública (NAT hairpin)", + "connection_mode_network_hint": "P2P requiere que el puerto UDP 21116 sea accesible entre los clientes. Signal TCP 21116, relay TCP 21117, NAT test 21115 deben estar abiertos en el servidor. Los clientes de navegador web siempre usan retransmisión.", + "connection_mode_save": "Guardar", + "connection_mode_save_restart": "Guardar y reiniciar servidor", + "connection_mode_saved": "Modo de conexión guardado", + "connection_mode_restart_started": "Reinicio del servidor iniciado", + "connection_mode_restart_failed": "Error al reiniciar el servidor", + "connection_mode_not_configurable": "El modo de conexión no se puede cambiar en este despliegue (no se encontró unidad systemd ni docker-compose)", + "connection_mode_compose_error": "No se pudo encontrar la sección de entorno del servidor en docker-compose.yml", + "connection_mode_source_saved": "Guardado en", + "connection_mode_source_defaults": "Usando valores predeterminados del servidor (no modificables desde el panel)", + "connection_mode_runtime": "Servidor activo", + "advanced_title": "Archivos de configuración", + "advanced_desc": "Edita los archivos de configuración del servidor directamente. Los cambios pueden requerir reiniciar los servicios. Se crea una copia de seguridad antes de cada guardado.", + "advanced_warning": "Estos archivos contienen secretos (claves API, contraseñas de base de datos, secretos de sesión). Edita solo si sabes lo que estás haciendo. Una sintaxis incorrecta puede impedir que el servidor arranque.", + "advanced_files_label": "Archivos", + "advanced_select_file": "Selecciona un archivo de la lista para ver o editar su contenido.", + "advanced_reload": "Recargar", + "advanced_save": "Guardar archivo", + "advanced_apply_restart": "Aplicar (reiniciar servicio)", + "advanced_saved": "Archivo de configuración guardado", + "advanced_restart_after_save": "Configuración guardada. ¿Reiniciar el servicio afectado ahora para que los cambios surtan efecto?", + "advanced_restart_confirm": "¿Reiniciar el(los) servicio(s) BetterDesk relacionado(s)? Las conexiones activas pueden interrumpirse brevemente.", + "advanced_restart_console_confirm": "¿Reiniciar el servicio de consola web? La sesión del navegador se desconectará brevemente y la página se recargará cuando la consola vuelva.", + "advanced_restart_started": "Reinicio del servicio iniciado", + "advanced_restart_done": "Consola reiniciada — recargando página…", + "advanced_restart_polling": "Esperando que la consola vuelva a estar en línea…", + "advanced_restart_timeout": "Se envió el reinicio pero la consola no respondió a tiempo. Revisa los registros de systemd/NSSM y recarga manualmente.", + "advanced_restart_failed": "Error al reiniciar el servicio (privilegios insuficientes o servicio no instalado)", + "advanced_save_confirm": "¿Guardar cambios en este archivo? Se creará una copia de seguridad de la versión anterior.", + "advanced_unsaved_confirm": "Tienes cambios sin guardar. ¿Descartarlos?", + "advanced_no_files": "No hay archivos de configuración disponibles en este sistema.", + "advanced_readonly": "solo lectura", + "advanced_missing": "faltante", + "advanced_new_file": "Nuevo archivo (no se crea hasta que guardes)", + "advanced_new_file_hint": "Nuevo archivo — agrega contenido y guarda", + "advanced_backup_created": "copia de seguridad creada", + "advanced_restart_console": "Reinicia el servicio de consola web (p. ej. systemctl restart betterdesk-console) para que los cambios en .env surtan efecto.", + "advanced_restart_goserver": "Reinicia el servidor Go de BetterDesk para que se carguen los cambios en la lista de bloqueo.", + "advanced_restart_systemd": "Después de editar las unidades de systemd, ejecuta: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Reinicia el servicio afectado para que los cambios surtan efecto.", + "advanced_error_unknown": "Archivo de configuración desconocido", + "advanced_error_not_found": "El archivo no existe", + "advanced_error_not_file": "La ruta no es un archivo regular", + "advanced_error_too_large": "El archivo excede el tamaño máximo editable (512 KB)", + "advanced_error_binary": "Los archivos binarios no se pueden editar en el panel", + "advanced_error_invalid": "Contenido de archivo no válido", + "advanced_error_not_writable": "El archivo no es escribible por el proceso de consola", + "advanced_file_console-env": "Entorno de la consola (.env)", + "advanced_file_console-env-local": "Anulaciones de la consola (.env.local)", + "advanced_file_go-blocklist": "Lista de bloqueo del servidor Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unidad de servicio)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unidad de servicio)", + "advanced_file_console-session-secret": "Secreto de sesión de la consola (.session_secret)", + "advanced_file_go-audit-log": "Registro de auditoría del servidor Go (audit.jsonl)", + "advanced_file_build-env": "Entorno de compilación del agente (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuración del supervisor)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orquestación)", + "advanced_restart_none": "No se requiere reinicio del servicio para este archivo.", + "enrollment_title": "Inscripción de dispositivo (RustDesk)", + "enrollment_desc": "Controla cómo se registran los nuevos clientes RustDesk y cómo los operadores los aprueban en la página de solicitudes de inscripción.", + "enrollment_require_approval": "Requiere aprobación del operador (modo administrado)", + "enrollment_require_approval_hint": "Cuando está habilitado, los clientes desconocidos se ponen en cola hasta que un operador los aprueba en Solicitudes de inscripción.", + "enrollment_rich_approve": "Formulario de aprobación completo (nombre, carpeta, grupos, etiquetas)", + "enrollment_rich_approve_hint": "Muestra un diálogo detallado al aprobar solicitudes de inscripción o registro LAN.", + "enrollment_tag_picker": "Elegir etiquetas de las etiquetas de dispositivos existentes", + "enrollment_tag_picker_hint": "Permite a los operadores seleccionar etiquetas de la lista usada en la página de Dispositivos en lugar de solo escribirlas.", + "enrollment_open_requests": "Solicitudes de inscripción abiertas", + "enrollment_pending_count": "{count} solicitud(es) de inscripción pendiente(s)" + }, + "audit": { + "time": "Hora", + "user": "Usuario", + "action": "Acción", + "details": "Detalles del dispositivo", + "action_login": "Login", + "action_login_failed": "Inicio de sesión fallido", + "action_logout": "Logout", + "action_password_change": "Contraseña cambiada", + "action_2fa_enable": "2FA habilitado", + "action_2fa_disable": "2FA deshabilitado", + "action_user_create": "Usuario creado", + "action_user_update": "Usuario actualizado", + "action_user_delete": "Usuario eliminado", + "action_settings_update": "Configuración actualizada", + "action_device_ban": "Dispositivo bloqueado", + "action_device_unban": "Bloqueo de dispositivo eliminado", + "action_device_delete": "Dispositivo eliminado" + }, + "generator": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Función temprana — el generador de paquetes de agente está en desarrollo activo.", + "config_options": "Opciones de configuración", + "server_address": "Dirección del servidor", + "server_address_hint": "Dominio o dirección IP de su servidor", + "custom_port": "Puerto personalizado", + "port_hint": "Dejar vacío para el predeterminado (21116)", + "relay_server": "Servidor relay", + "relay_placeholder": "Igual que el servidor ID si está vacío", + "relay_hint": "Opcional: dirección de servidor relay separada", + "include_key": "Incluir clave pública en la configuración", + "generate": "Generar configuración", + "output": "Resultado de configuración", + "usage_title": "Detalles de conexión", + "generated": "Configuración generada", + "server_required": "La dirección del servidor es obligatoria", + "nothing_to_copy": "Genere primero una configuración", + "bundles_title": "Paquetes del agente", + "new_bundle": "Nuevo paquete", + "editor_title": "Editor de paquetes", + "empty_state": "Selecciona un paquete a la izquierda o crea uno nuevo para empezar.", + "loading": "Cargando…", + "no_bundles": "Aún no hay paquetes. Crea tu primer paquete.", + "bundle_name": "Nombre del paquete", + "bundle_name_hint": "Solo una etiqueta interna; no se muestra a los usuarios finales.", + "short_link": "Enlace de descarga corto", + "short_link_hint": "Se usa en la URL pública (/d/…). Solo letras minúsculas, números y guiones (2–32 caracteres). Se rellena automáticamente desde el nombre del paquete — acórtelo para compartirlo más fácilmente (p. ej. acme).", + "branding_section": "Marca", + "company_name": "Nombre de empresa/marca", + "short_text": "Descripción corta", + "contact_email": "Correo de contacto", + "contact_phone": "Teléfono de contacto", + "contact_url": "Sitio web de contacto", + "logo": "Logotipo", + "logo_hint": "PNG, JPEG, SVG o WebP. Máximo 256 KB.", + "logo_clear": "Quitar logotipo", + "primary_color": "Color principal", + "accent_color": "Color de cabecera", + "default_lang": "Idioma predeterminado", + "allow_unattended": "Permitir acceso no supervisado", + "allow_unattended_hint": "Cuando está habilitado, el agente muestra una contraseña persistente para acceso de operadores.", + "save": "Guardar paquete", + "revoke": "Revocar", + "unrevoke": "Reactivar", + "revoked": "Revocado", + "preview_title": "Vista previa en vivo", + "preview_hint": "Aspecto aproximado de la ventana del agente para usuarios finales.", + "preview_default_name": "Soporte BetterDesk", + "preview_status_ready": "Listo", + "preview_id": "Tu ID", + "preview_password": "Contraseña", + "preview_chat": "Chatear con soporte", + "preview_settings": "Configuración (solo admin)", + "preview_quit": "Salir (solo admin)", + "download_link_title": "Enlace de descarga", + "download_link_hint": "Comparte este enlace con usuarios finales. Verán una página de descarga con tu marca. Los enlaces hex antiguos siguen funcionando después de cambiar el enlace corto.", + "open_portal": "Abrir", + "created": "Paquete creado", + "saved": "Paquete guardado", + "deleted": "Paquete eliminado", + "revoked_ok": "Paquete revocado", + "unrevoked_ok": "Paquete reactivado", + "link_copied": "Enlace copiado al portapapeles", + "copy_failed": "La copia automática falló; cópialo manualmente", + "unsaved_confirm": "¿Descartar los cambios no guardados?", + "confirm_revoke": "¿Revocar este paquete? El enlace de descarga dejará de funcionar.", + "confirm_unrevoke": "¿Reactivar este paquete?", + "confirm_delete": "¿Eliminar este paquete de forma permanente? Esta acción no se puede deshacer.", "errors": { - "forbidden_title": "Acceso denegado", - "forbidden_message": "No tiene permiso para acceder a esta página.", - "not_found_title": "Página no encontrada", - "not_found_message": "La página que busca no existe o ha sido movida.", - "server_error_title": "Error del servidor", - "server_error_message": "Algo salió mal. Inténtelo de nuevo más tarde.", - "go_home": "Ir al inicio", - "try_again": "Reintentar", - "load_devices_failed": "Error al cargar dispositivos", - "load_key_failed": "Error al cargar la clave", - "load_qr_failed": "Error al cargar el QR", - "load_audit_failed": "Error al cargar el registro de auditoría", - "load_users_failed": "Error al cargar usuarios", - "load_folders_failed": "Error al cargar carpetas", - "download_failed": "Error en la descarga", - "logout_failed": "Error al cerrar sesión", - "password_change_failed": "Error al cambiar la contraseña", - "language_change_failed": "Error al cambiar el idioma", - "ban_failed": "Error al bloquear el dispositivo", - "unban_failed": "Error al desbloquear el dispositivo", - "delete_failed": "Error al eliminar", - "change_id_failed": "Error al cambiar el ID", - "bulk_delete_failed": "Error al eliminar dispositivos", - "sync_failed": "Error de sincronización", - "error": "Error", - "not_found": "No encontrado", - "server_error": "Error del servidor", - "load_device_failed": "No se pudieron cargar los detalles del dispositivo", - "load_orgs_failed": "No se pudieron cargar las organizaciones" + "validation_failed": "La validación falló", + "name_required": "El nombre del paquete es obligatorio", + "company_name_required": "El nombre de la empresa es obligatorio", + "logo_invalid": "El logotipo debe ser un archivo de imagen válido", + "logo_too_large": "El logotipo puede tener como máximo 256 KB", + "logo_read_failed": "No se pudo leer el archivo del logotipo", + "primary_color_invalid": "El color principal debe ser un valor hexadecimal (p. ej. #2563eb)", + "accent_color_invalid": "El color de cabecera debe ser un valor hexadecimal (p. ej. #1e293b)", + "contact_url_invalid": "El sitio web de contacto debe ser una URL válida", + "rebuild_revoked": "No se puede reconstruir un paquete revocado — vuelva a habilitarlo primero", + "server_host_invalid": "Ingrese un nombre de dominio o dirección IPv4 válido", + "server_host_required": "La dirección pública del servidor es obligatoria", + "token_failed": "No se pudo generar el token de inscripción — compruebe la conectividad del servidor", + "slug_invalid": "El enlace corto solo puede contener letras minúsculas, números y guiones", + "slug_too_short": "El enlace corto debe tener al menos 2 caracteres", + "slug_too_long": "El enlace corto debe tener como máximo 32 caracteres", + "slug_taken": "Este enlace corto ya lo usa otro paquete" }, - "remote": { - "title": "Panel", - "connecting": "Conectando...", - "waiting_password": "Esperando contraseña", - "authenticating": "Autenticando...", - "streaming": "Conectado", - "disconnected": "Desconectado", - "error": "Error", - "status_idle": "Inactivo", - "password_required": "La contraseña es obligatoria", - "enter_password_for": "Introduzca la contraseña del dispositivo", - "password_placeholder": "Introduzca la contraseña", - "connect": "Conectar", - "reconnect": "Reconectar", - "disconnect": "Desconectar", - "back_to_devices": "Volver a dispositivos", - "fullscreen": "Pantalla completa", - "toggle_audio": "Alternar audio", - "send_keys": "Enviar teclas", - "scale_mode": "Modo de escala", - "scale_fit": "Ajustar a ventana", - "scale_fill": "Llenar ventana", - "scale_original": "Tamaño original (1:1)", - "scale_stretch": "Estirar", - "actions": "Acciones", - "lock_screen": "Bloquear pantalla", - "restart_remote": "Reiniciar dispositivo remoto", - "refresh_screen": "Actualizar pantalla", - "clipboard_paste": "Pegar desde portapapeles", - "block_input": "Bloquear entrada", - "display_settings": "Ajustes de pantalla", - "image_quality": "Calidad de imagen", - "quality_best": "Mejor calidad", - "quality_balanced": "Equilibrada", - "quality_low": "Rendimiento", - "show_cursor": "Mostrar cursor remoto", - "lock_after_session": "Bloquear después de la sesión", - "privacy_mode": "Modo privacidad", - "disable_clipboard": "Desactivar portapapeles", - "chat": "Chat", - "chat_placeholder": "Escriba un mensaje...", - "record": "Grabar pantalla", - "view_only": "Solo visualización", - "pin_toolbar": "Fijar barra de herramientas", - "monitors": "Monitors", - "select_monitor": "Seleccionar monitor", - "quality_speed": "Velocidad", - "quality_quality": "Calidad", - "recording_started": "Grabación iniciada", - "recording_stopped": "Grabación detenida", - "download_recording": "Descargar grabación", - "e2e_encrypted": "Cifrado de extremo a extremo", - "e2e_key_exchange": "Intercambio de claves en curso...", - "confirm_restart": "¿Está seguro de que desea reiniciar el dispositivo remoto?", - "webcodecs_not_supported": "Su navegador no soporta la API WebCodecs. Utilice Chrome 94+ o Edge 94+.", - "webcodecs_insecure_context": "WebCodecs no disponible por HTTP. El vídeo usa decodificación por software. Para mejor rendimiento, use HTTPS.", - "webcodecs_fallback_active": "Decodificador de vídeo por software activo (rendimiento limitado)", - "click_to_start": "Haga clic para iniciar", - "autoplay_blocked": "El navegador requiere interacción del usuario para iniciar vídeo y audio.", - "start_playback": "Iniciar reproducción", - "new_connection": "Nueva conexión", - "device_id_placeholder": "Introduzca ID de dispositivo", - "http_warning": "Modo HTTP: limitado a decodificación H.264 por software (~15 FPS). Use HTTPS para máximo rendimiento (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Transferencia de archivos", - "file_upload": "Subir", - "file_download": "Descargar", - "file_empty": "Esta carpeta está vacía", - "file_transfers": "Transferencias", - "file_complete": "Completado", - "file_error": "Transferencia fallida", - "file_show_hidden": "Mostrar archivos ocultos", - "file_new_folder": "Nueva carpeta", - "file_new_folder_prompt": "Ingrese nombre de carpeta:", - "file_parent": "Carpeta superior", - "file_root": "Raíz", - "file_rename": "Renombrar", - "file_rename_prompt": "Ingrese nuevo nombre:", - "file_delete_confirm": "¿Está seguro de que desea eliminar este elemento?", - "file_cancelled": "Transferencia cancelada", - "2fa_required": "Código de dos factores requerido", - "2fa_hint": "Introduce el código TOTP de seis dígitos para continuar la sesión.", - "2fa_invalid": "Código 2FA no válido", - "verify": "Verify", - "use_cdap_fallback": "Usar visor CDAP", - "cdap_fallback_hint": "Abre el visor JPEG ligero que usa bd-signal/CDAP en lugar del relay de RustDesk. Útil cuando el par está desconectado del relay pero es accesible a través del canal de gestión del agente.", - "clipboard_empty": "El portapapeles está vacío", - "clipboard_denied": "Acceso al portapapeles denegado. Se requiere HTTPS o no se concedió el permiso.", - "file_loading": "Cargando...", - "file_timeout": "El dispositivo remoto no respondió. Es posible que la transferencia de archivos no sea compatible o esté deshabilitada en el equipo remoto.", - "codec": "Códec de vídeo", - "codec_auto": "Automático (recomendado)" + "legacy_title": "Generador de configuración del cliente", + "background_color": "Fondo de ventana", + "build_error_hint": "Error de compilación", + "build_status_building": "Compilando", + "build_status_failed": "Fallido", + "build_status_pending": "En cola", + "build_status_ready": "Listo", + "builds_empty": "Aún no hay compilaciones en cola — guarda el paquete o haz clic en Reconstruir todo.", + "builds_hint": "Instaladores compilados en este servidor para cada plataforma. Reconstruir después de corregir errores de la cadena de herramientas o actualizar el código fuente del agente.", + "builds_loading": "Cargando estado de compilación…", + "builds_summary": "{{ready}} listo · {{pending}} en cola · {{building}} compilando · {{failed}} fallido", + "builds_title": "Compilaciones de cliente", + "connection_section": "Conexión al servidor", + "enrollment_per_device": "Por dispositivo — aprobar en Registros", + "enrollment_token": "Registro de dispositivo", + "enrollment_token_hint": "Cada instalación se registra por sí sola. Aprueba nuevos dispositivos en el panel de Registros; el servidor emite entonces una clave de acceso única por ordenador.", + "enrollment_token_pending": "Por dispositivo tras aprobación", + "enrollment_token_set": "Por dispositivo — aprobar en Registros", + "header_text_color": "Color del texto de encabezado", + "rebuild_all": "Reconstruir todo", + "rebuild_confirm": "¿Reconstruir todos los instaladores de plataforma para este paquete? Los artefactos listos existentes serán reemplazados.", + "rebuild_queued": "Todas las compilaciones de plataforma en cola", + "rebuilding_all": "Poniendo en cola las reconstrucciones…", + "server_host": "Dirección pública del servidor", + "server_host_hint": "Nombre de dominio o IP pública donde los usuarios finales acceden a su servidor BetterDesk. El puerto se toma de la configuración de la consola.", + "server_host_placeholder": "support.example.com o 203.0.113.10", + "status_ready_color": "Color del indicador de listo", + "surface_color": "Fondo de tarjeta", + "text_color": "Color del texto", + "text_muted_color": "Color de texto atenuado", + "use_https": "Usar HTTPS / WSS (recomendado)", + "preview_help": "Solicitar ayuda" + }, + "server": { + "port": "Puerto", + "api_port": "Puerto API", + "id_server": "Servidor ID", + "relay_server": "Servidor relay", + "api_key": "Clave API" + }, + "status": { + "online": "En línea", + "offline": "Sin conexión", + "banned": "Bloqueados", + "running": "En ejecución", + "stopped": "Detenido", + "unknown": "Desconocido", + "checking": "Verificando...", + "label": "Status", + "no_signal": "Sin señal" + }, + "actions": { + "refresh": "Actualizar", + "copy": "Copiar", + "connect": "Conectar", + "connect_desktop": "Conectar vía cliente de escritorio", + "remote_viewer": "Visor remoto", + "web_remote": "Escritorio remoto web", + "details": "Detalles del dispositivo", + "edit": "Editar", + "delete": "Eliminar", + "ban": "Bloquear", + "unban": "Desbloquear", + "save": "Guardar", + "cancel": "Cancelar", + "confirm": "Confirmar", + "close": "Cerrar", + "clear": "Limpiar", + "ok": "OK", + "saved": "Guardado", + "back": "Volver", + "create": "Crear", + "dismiss": "Descartar", + "view_all": "Ver todo", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "ahora mismo", + "seconds_ago": "Hace {count} segundo(s)", + "minutes_ago": "Hace {count} minuto(s)", + "hours_ago": "Hace {count} hora(s)", + "days_ago": "Hace {count} día(s)", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "add_user": "Añadir usuario", + "edit_user": "Editar usuario", + "username": "Nombre de usuario", + "username_placeholder": "Introduzca el nombre de usuario", + "username_hint": "3-32 caracteres, solo letras, números y guiones bajos", + "password": "Contraseña", + "password_placeholder": "Introduzca la contraseña", + "password_hint": "Mínimo 8 caracteres con mayúsculas, minúsculas, números y símbolos", + "password_leave_empty": "Dejar vacío para mantener la actual", + "role": "Rol", + "role_admin": "Administrador", + "role_operator": "Operador", + "role_viewer": "Observador", + "role_pro": "Profesional", + "role_hint": "Los observadores solo pueden ver datos, los operadores pueden gestionar dispositivos, los administradores tienen acceso completo", + "created": "Creado", + "last_login": "Último inicio de sesión", + "never": "Nunca", + "actions": "Acciones", + "create": "Crear", + "edit": "Editar", + "reset_password": "Restablecer contraseña", + "new_password": "New password (leave empty to keep current)", + "delete_title": "Eliminar usuario", + "delete_confirm": "¿Está seguro de que desea eliminar el usuario {username}?", + "delete_success": "Dispositivo eliminado correctamente", + "user_created": "Usuario creado correctamente", + "user_updated": "Usuario actualizado correctamente", + "password_reset_success": "Contraseña restablecida correctamente", + "empty_title": "No se encontraron dispositivos", + "empty_text": "Ningún dispositivo coincide con sus filtros actuales", + "fill_required": "Por favor, rellene todos los campos obligatorios", + "invalid_username": "El nombre de usuario debe tener 3-32 caracteres, solo letras, números y guiones bajos", + "username_exists": "El nombre de usuario ya existe", + "weak_password": "La contraseña es demasiado débil", + "password_too_short": "La contraseña debe tener al menos 8 caracteres", + "invalid_role": "Rol no válido", + "cannot_demote_self": "No puede degradarse a sí mismo", + "cannot_delete_self": "No puede eliminar su propia cuenta", + "last_admin": "No se puede eliminar el último administrador", + "admin_only": "Esta función solo está disponible para administradores", + "password_required": "La contraseña es obligatoria", + "not_found": "No encontrado", + "strength_weak": "Débil", + "strength_medium": "Media", + "strength_strong": "Fuerte", + "security_tips_title": "Buenas prácticas de seguridad", + "tip_strong_passwords": "Use contraseñas fuertes y únicas para cada usuario", + "tip_unique_accounts": "Cree cuentas individuales para cada persona", + "tip_viewer_role": "Use el rol de observador para usuarios que solo necesitan acceso de lectura", + "tip_operator_role": "Use el rol de operador para usuarios que necesitan gestionar dispositivos pero no usuarios", + "tip_audit_logs": "Revise regularmente los registros de auditoría en busca de actividad sospechosa", + "role_super_admin": "Super Admin", + "role_server_admin": "Administrador del servidor", + "role_global_admin": "Administrador global", + "organizations": "Organizaciones", + "user_organizations": "Organizaciones de {username}", + "no_organizations": "Sin organizaciones", + "org_removed": "Usuario eliminado de la organización", + "server_role_label": "Rol del servidor", + "server_role_hint": "Define qué puede hacer el usuario en toda la consola (acceso al panel, configuración del servidor, auditoría, etc.).", + "org_membership_section": "Membresía de organización", + "org_membership_hint": "Un usuario puede pertenecer a varias organizaciones. El rol de organización controla solo los permisos dentro de esa organización y es independiente del rol del servidor anterior.", + "column_organizations": "Organizaciones", + "no_orgs_short": "—", + "org_count_one": "{count} organización", + "org_count_many": "{count} organizaciones", + "all_orgs_assigned": "El usuario ya pertenece a todas las organizaciones.", + "user_groups": "Grupos de usuarios", + "user_groups_hint": "Los grupos de usuarios pueden conceder acceso a grupos de dispositivos seleccionados.", + "loading_user_groups": "Cargando grupos de usuarios...", + "no_user_groups": "No hay grupos de usuarios disponibles", + "create_user_group": "Crear grupo", + "edit_user_group": "Editar grupo de usuarios", + "delete_user_group": "Eliminar grupo de usuarios", + "delete_user_group_confirm": "¿Eliminar el grupo de usuarios {name}? Los miembros perderán el acceso concedido por este grupo.", + "user_group_created": "Grupo de usuarios creado", + "user_group_updated": "Grupo de usuarios actualizado", + "user_group_deleted": "Grupo de usuarios eliminado", + "user_group_not_found": "Grupo de usuarios no encontrado", + "group_name": "Nombre del grupo", + "group_name_placeholder": "Operadores", + "group_note": "Note", + "group_note_placeholder": "Nota opcional", + "group_name_required": "El nombre del grupo es obligatorio", + "group_members_count": "{count} miembros", + "provider": "Proveedor", + "provider_local": "Local", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Gestionado por el proveedor de identidad", + "provider_managed_hint": "Esta cuenta está gestionada por un proveedor de identidad externo (LDAP/AD o SSO). La contraseña y el rol son controlados por el proveedor y no se pueden cambiar aquí." + }, + "folders": { + "title": "Panel", + "create": "Crear", + "edit": "Editar", + "delete": "Eliminar", + "name": "Folder Name", + "name_placeholder": "Introduzca el nombre de la carpeta", + "name_required": "El nombre de la carpeta es obligatorio", + "name_too_long": "El nombre de la carpeta es demasiado largo (máx. 50 caracteres)", + "color": "Color", + "icon": "Icono", + "not_found": "No encontrado", + "delete_confirm": "¿Está seguro de que desea eliminar esta carpeta? Los dispositivos dejarán de estar asignados.", + "delete_success": "Dispositivo eliminado correctamente", + "created": "Creado", + "updated": "Carpeta actualizada correctamente", + "no_devices_selected": "No hay dispositivos seleccionados", + "devices_moved": "Dispositivos movidos correctamente", + "device_assigned": "Dispositivo asignado a la carpeta", + "unassigned": "Sin asignar", + "all_devices": "Todos los dispositivos", + "drag_hint": "Arrastre dispositivos a las carpetas para organizarlos", + "move_to": "Mover a", + "toggle_sidebar": "Alternar barra lateral" + }, + "errors": { + "forbidden_title": "Acceso denegado", + "forbidden_message": "No tiene permiso para acceder a esta página.", + "not_found_title": "Página no encontrada", + "not_found_message": "La página que busca no existe o ha sido movida.", + "server_error_title": "Error del servidor", + "server_error_message": "Algo salió mal. Inténtelo de nuevo más tarde.", + "go_home": "Ir al inicio", + "try_again": "Reintentar", + "load_devices_failed": "Error al cargar dispositivos", + "load_key_failed": "Error al cargar la clave", + "load_qr_failed": "Error al cargar el QR", + "load_audit_failed": "Error al cargar el registro de auditoría", + "load_users_failed": "Error al cargar usuarios", + "load_folders_failed": "Error al cargar carpetas", + "download_failed": "Error en la descarga", + "logout_failed": "Error al cerrar sesión", + "password_change_failed": "Error al cambiar la contraseña", + "language_change_failed": "Error al cambiar el idioma", + "ban_failed": "Error al bloquear el dispositivo", + "unban_failed": "Error al desbloquear el dispositivo", + "delete_failed": "Error al eliminar", + "change_id_failed": "Error al cambiar el ID", + "bulk_delete_failed": "Error al eliminar dispositivos", + "sync_failed": "Error de sincronización", + "error": "Error", + "not_found": "No encontrado", + "server_error": "Error del servidor", + "load_device_failed": "No se pudieron cargar los detalles del dispositivo", + "load_orgs_failed": "No se pudieron cargar las organizaciones" + }, + "remote": { + "title": "Panel", + "connecting": "Conectando...", + "waiting_password": "Esperando contraseña", + "authenticating": "Autenticando...", + "streaming": "Conectado", + "disconnected": "Desconectado", + "error": "Error", + "status_idle": "Inactivo", + "password_required": "La contraseña es obligatoria", + "enter_password_for": "Introduzca la contraseña del dispositivo", + "password_placeholder": "Introduzca la contraseña", + "connect": "Conectar", + "reconnect": "Reconectar", + "disconnect": "Desconectar", + "back_to_devices": "Volver a dispositivos", + "fullscreen": "Pantalla completa", + "toggle_audio": "Alternar audio", + "send_keys": "Enviar teclas", + "scale_mode": "Modo de escala", + "scale_fit": "Ajustar a ventana", + "scale_fill": "Llenar ventana", + "scale_original": "Tamaño original (1:1)", + "scale_stretch": "Estirar", + "actions": "Acciones", + "lock_screen": "Bloquear pantalla", + "restart_remote": "Reiniciar dispositivo remoto", + "refresh_screen": "Actualizar pantalla", + "clipboard_paste": "Pegar desde portapapeles", + "block_input": "Bloquear entrada", + "display_settings": "Ajustes de pantalla", + "image_quality": "Calidad de imagen", + "quality_best": "Mejor calidad", + "quality_balanced": "Equilibrada", + "quality_low": "Rendimiento", + "show_cursor": "Mostrar cursor remoto", + "lock_after_session": "Bloquear después de la sesión", + "privacy_mode": "Modo privacidad", + "disable_clipboard": "Desactivar portapapeles", + "chat": "Chat", + "chat_placeholder": "Escriba un mensaje...", + "record": "Grabar pantalla", + "view_only": "Solo visualización", + "pin_toolbar": "Fijar barra de herramientas", + "monitors": "Monitors", + "select_monitor": "Seleccionar monitor", + "quality_speed": "Velocidad", + "quality_quality": "Calidad", + "recording_started": "Grabación iniciada", + "recording_stopped": "Grabación detenida", + "download_recording": "Descargar grabación", + "e2e_encrypted": "Cifrado de extremo a extremo", + "e2e_key_exchange": "Intercambio de claves en curso...", + "confirm_restart": "¿Está seguro de que desea reiniciar el dispositivo remoto?", + "webcodecs_not_supported": "Su navegador no soporta la API WebCodecs. Utilice Chrome 94+ o Edge 94+.", + "webcodecs_insecure_context": "WebCodecs no disponible por HTTP. El vídeo usa decodificación por software. Para mejor rendimiento, use HTTPS.", + "webcodecs_fallback_active": "Decodificador de vídeo por software activo (rendimiento limitado)", + "click_to_start": "Haga clic para iniciar", + "autoplay_blocked": "El navegador requiere interacción del usuario para iniciar vídeo y audio.", + "start_playback": "Iniciar reproducción", + "new_connection": "Nueva conexión", + "device_id_placeholder": "Introduzca ID de dispositivo", + "http_warning": "Modo HTTP: limitado a decodificación H.264 por software (~15 FPS). Use HTTPS para máximo rendimiento (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Transferencia de archivos", + "file_upload": "Subir", + "file_download": "Descargar", + "file_empty": "Esta carpeta está vacía", + "file_transfers": "Transferencias", + "file_complete": "Completado", + "file_error": "Transferencia fallida", + "file_show_hidden": "Mostrar archivos ocultos", + "file_new_folder": "Nueva carpeta", + "file_new_folder_prompt": "Ingrese nombre de carpeta:", + "file_parent": "Carpeta superior", + "file_root": "Raíz", + "file_rename": "Renombrar", + "file_rename_prompt": "Ingrese nuevo nombre:", + "file_delete_confirm": "¿Está seguro de que desea eliminar este elemento?", + "file_cancelled": "Transferencia cancelada", + "2fa_required": "Código de dos factores requerido", + "2fa_hint": "Introduce el código TOTP de seis dígitos para continuar la sesión.", + "2fa_invalid": "Código 2FA no válido", + "verify": "Verify", + "use_cdap_fallback": "Usar visor CDAP", + "cdap_fallback_hint": "Abre el visor JPEG ligero que usa bd-signal/CDAP en lugar del relay de RustDesk. Útil cuando el par está desconectado del relay pero es accesible a través del canal de gestión del agente.", + "clipboard_empty": "El portapapeles está vacío", + "clipboard_denied": "Acceso al portapapeles denegado. Se requiere HTTPS o no se concedió el permiso.", + "file_loading": "Cargando...", + "file_timeout": "El dispositivo remoto no respondió. Es posible que la transferencia de archivos no sea compatible o esté deshabilitada en el equipo remoto.", + "codec": "Códec de vídeo", + "codec_auto": "Automático (recomendado)" + }, + "branding": { + "identity_title": "Identidad de marca", + "identity_desc": "Personalice el nombre y la descripción de la aplicación que se muestran en la consola", + "app_name": "Nombre de la aplicación", + "app_description": "Descripción de la aplicación", + "logo_title": "Logotipo", + "logo_desc": "Elija cómo aparece su logotipo en la barra lateral y la página de inicio de sesión", + "logo_type_icon": "Icono Material", + "logo_type_svg": "Código SVG", + "logo_type_image": "URL de imagen", + "logo_icon_name": "Nombre del icono", + "logo_icon_hint": "Introduzca un nombre de Material Icons (ej: dns, cloud, security). Ver fonts.google.com/icons", + "logo_svg_code": "Código SVG", + "logo_svg_hint": "Pegue su marcado SVG aquí. Soporta elementos completos con rutas y estilos.", + "logo_image_upload": "Subir imagen", + "logo_image_choose": "Elegir archivo de imagen", + "logo_image_hint": "PNG, JPG, GIF, WebP o SVG. Máx. 1,5 MB. La imagen se almacena como datos base64.", + "logo_image_url": "Datos / URL de imagen", + "logo_image_url_hint": "Se rellena automáticamente al subir o pegue una URL manualmente.", + "logo_image_too_large": "La imagen es demasiado grande. Tamaño máximo: 1,5 MB.", + "logo_image_invalid_type": "Tipo de archivo no válido. Use PNG, JPG, GIF, WebP o SVG.", + "preview": "Vista previa", + "colors_title": "Esquema de colores", + "colors_desc": "Personalice la paleta de colores. Deje vacío para los valores predeterminados.", + "colors_backgrounds": "Fondos", + "colors_text": "Texto", + "colors_accents": "Colores de acento", + "colors_borders": "Bordes", + "import_export_title": "Importar / exportar", + "import_export_desc": "Guarde su tema como archivo JSON o importe uno de otra instancia", + "export_theme": "Exportar tema", + "import_theme": "Importar tema", + "reset_defaults": "Restablecer valores predeterminados", + "save_branding": "Guardar marca", + "saved": "Guardado", + "exported": "Tema exportado", + "imported": "Tema importado correctamente. Recargando...", + "import_error": "Error al importar el tema. Formato de archivo no válido.", + "reset_confirm": "¿Está seguro de que desea restablecer la marca a los valores predeterminados? Esta acción no se puede deshacer.", + "reset_success": "Marca restablecida a valores predeterminados. Recargando...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Texto principal mostrado como logotipo de la marca", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Texto secundario bajo el logotipo (por ejemplo, nombre del producto o lema)", + "logo_upload_success": "Logotipo subido correctamente.", + "typography_title": "Typography", + "typography_desc": "Elige fuentes para encabezados y texto. Las fuentes se descargarán al servidor para alojamiento propio.", + "font_heading": "Fuente de encabezados", + "font_heading_hint": "Usada para encabezados (H1-H6) y logotipo de texto", + "font_body": "Body Font", + "font_body_hint": "Usada para texto del cuerpo y elementos de interfaz", + "font_search_placeholder": "Buscar fuentes...", + "font_system_default": "Predeterminada del sistema", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "Fuentes descargadas en el servidor", + "agent_desc": "Personaliza el portal de descarga de agentes público que se muestra a los usuarios finales.", + "agent_show_powered": "Mostrar «Desarrollado por BetterDesk»", + "agent_show_powered_hint": "Mostrar la atribución de BetterDesk en el pie de página del portal de descargas.", + "agent_title": "Página de descarga del agente", + "background_desc": "Establece un fondo de pantalla, degradado o color sólido para la consola. Las tarjetas flotan sobre él.", + "background_title": "Fondo y apariencia", + "bg_blur": "Desenfoque de fondo", + "bg_color": "Color de fondo", + "bg_gradient": "Degradado CSS", + "bg_gradient_hint": "Cualquier degradado CSS válido, p. ej. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_choose": "Elegir archivo de imagen", + "bg_image_hint": "PNG, JPG, WebP o GIF. Máx. 8 MB. Almacenado en el servidor.", + "bg_image_invalid_type": "Tipo de archivo no válido. Use PNG, JPG, WebP o GIF.", + "bg_image_too_large": "La imagen es demasiado grande. El tamaño máximo es 8 MB.", + "bg_image_upload": "Subir imagen de fondo", + "bg_image_url": "Ruta de imagen / URL", + "bg_overlay": "Superposición oscura", + "bg_overlay_hint": "Oscurece el fondo para mejorar la legibilidad del texto.", + "bg_size": "Tamaño de imagen", + "bg_size_auto": "Automático (original)", + "bg_size_contain": "Contener (ajustar)", + "bg_size_cover": "Cubrir (llenar pantalla)", + "bg_type_color": "Color sólido", + "bg_type_gradient": "Degradado", + "bg_type_image": "Imagen", + "bg_type_none": "Ninguno", + "bg_upload_success": "Imagen de fondo subida correctamente.", + "custom_css_desc": "Avanzado: inserta CSS personalizado aplicado en toda la consola y la página de inicio de sesión.", + "custom_css_hint": "Úsalo con cuidado. Las reglas inválidas o no seguras se eliminan. Máximo 20.000 caracteres.", + "custom_css_title": "CSS personalizado", + "footer_desc": "Agrega una línea de pie de página personalizada que se muestra en la pantalla de inicio de sesión y en la barra lateral de la consola.", + "footer_text": "Texto del pie de página", + "footer_text_hint": "p. ej. un aviso de copyright o el nombre de la empresa.", + "footer_title": "Pie de página y derechos de autor", + "login_bg_inherit": "Igual que la consola", + "login_desc": "Personaliza el título, subtítulo y fondo de la pantalla de inicio de sesión.", + "login_heading": "Encabezado de inicio de sesión", + "login_heading_placeholder": "Bienvenido de nuevo", + "login_subheading": "Subtítulo de inicio de sesión", + "login_subheading_placeholder": "Iniciar sesión en su cuenta", + "login_title": "Página de inicio de sesión", + "powered_by": "Desarrollado por", + "show_powered": "Mostrar atribución «BetterDesk»", + "show_powered_hint": "Mostrar el nombre y la versión de BetterDesk en el pie de página de inicio de sesión y en la barra lateral." + }, + "device_detail": { + "tab_overview": "Resumen", + "tab_tags": "Etiquetas y notas", + "tab_actions": "Acciones", + "section_identity": "Identidad", + "section_network": "Red", + "section_timestamps": "Marcas de tiempo", + "section_connect": "Conexión", + "section_manage": "Gestión", + "folder": "Carpeta", + "status_tier": "Nivel de estado", + "device_banned": "Este dispositivo está bloqueado", + "no_reason": "Sin motivo proporcionado", + "tags": "Etiquetas", + "no_tags": "No hay etiquetas asignadas a este dispositivo", + "tag_placeholder": "Introduzca un nombre de etiqueta...", + "add_tag": "Añadir", + "tag_exists": "Esta etiqueta ya existe", + "notes": "Notas", + "notes_placeholder": "Añada notas sobre este dispositivo...", + "danger_zone": "Zona de peligro", + "action_connect_web": "Remoto web", + "action_connect_web_desc": "Conectar vía escritorio remoto del navegador", + "action_native_remote": "Remote BetterDesk", + "action_native_remote_desc": "Transmisión JPEG nativa — sin plugins necesarios", + "action_connect_desktop": "Cliente de escritorio", + "action_connect_desktop_desc": "Abrir en la aplicación de escritorio", + "action_change_id_desc": "Cambiar el ID de registro del dispositivo", + "action_ban_desc": "Impedir que este dispositivo se conecte", + "action_unban_desc": "Permitir que este dispositivo se conecte de nuevo", + "action_delete_desc": "Eliminar permanentemente este dispositivo", + "tab_hardware": "Hardware", + "tab_metrics": "Métricas", + "section_system": "Sistema", + "section_cpu": "Procesador", + "section_memory": "Memoria", + "section_displays": "Pantallas", + "section_encoding": "Capacidades de codificación", + "section_live_metrics": "Métricas en vivo", + "section_current_usage": "Uso actual", + "section_usage_history": "Historial de uso", + "os": "Sistema operativo", + "version": "Versión", + "cpu_model": "Modelo de CPU", + "cpu_cores": "Núcleos de CPU", + "cpu_freq": "Frecuencia de CPU", + "total_memory": "Memoria total", + "metric_memory": "Memoria", + "metric_disk": "Disco", + "metrics_updated": "Actualizado", + "device_groups": "Grupos", + "no_sysinfo": "No hay información de hardware disponible", + "no_sysinfo_hint": "La información del sistema aparecerá después de que el dispositivo envíe un informe de sysinfo", + "no_metrics": "No hay métricas disponibles", + "no_metrics_hint": "Las métricas aparecerán después de que el dispositivo envíe informes de latido", + "chart_oldest": "← Más antiguo", + "chart_newest": "Más reciente →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Archivos", + "agent_lazy_hint": "Haz clic en esta pestaña para cargar datos en vivo del agente", + "agent_offline": "El agente está sin conexión", + "agent_timeout": "El agente no respondió a tiempo", + "agent_error": "No se pudieron cargar datos del agente", + "service_name": "Name", + "service_display": "Nombre visible", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "device_id": "ID del dispositivo", + "hostname": "Nombre de host", + "os": "Sistema operativo", + "cpu": "Processor", + "cpu_cores": "Núcleos de CPU", + "cpu_usage": "Uso de CPU", + "memory": "Memory", + "memory_total": "Memoria total", + "memory_used": "Memoria usada", + "memory_available": "Memoria disponible", + "memory_usage": "Uso de memoria", + "swap": "Swap", + "disks": "Discos", + "disk_count": "Cantidad de discos", + "network": "Red", + "network_interfaces": "Interfaces de red", + "software": "Software", + "software_count": "Software instalado", + "system": "Sistema", + "kernel": "Kernel", + "architecture": "Arquitectura", + "uptime": "Uptime", + "frequency": "Frecuencia", + "physical_cores": "Núcleos físicos", + "logical_cores": "Núcleos lógicos", + "model": "Modelo", + "usage": "Uso", + "total": "Total", + "used": "Usado", + "available": "Disponible", + "mount_point": "Punto de montaje", + "removable": "Extraíble", + "mac_address": "Dirección MAC", + "ip_addresses": "Direcciones IP", + "traffic": "Tráfico", + "collect_now": "Recopilar ahora", + "collector_running": "Recopilación en curso", + "collector_stopped": "Recopilación detenida", + "last_upload": "Última subida", + "total_uploads": "Total", + "last_seen": "Visto por última vez", + "collected_at": "Recopilado el", + "no_data": "No hardware data available", + "no_devices": "No se encontraron dispositivos con datos de inventario", + "detail_title": "Detalle del inventario del dispositivo", + "telemetry": "Telemetría", + "view_detail": "Ver detalle", + "export": "Exportar", + "refresh": "Actualizar" + }, + "tickets": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "create": "Crear", + "edit": "Editar", + "delete": "Eliminar", + "detail": "Detalle del ticket", + "ticket_id": "ID del ticket", + "ticket_title": "Título", + "description": "Descripción", + "status": "Estado", + "priority": "Prioridad", + "category": "Categoría", + "assigned_to": "Asignado a", + "created_by": "Creado por", + "device": "Dispositivo", + "sla_due": "Vencimiento SLA", + "created_at": "Creado", + "updated_at": "Actualizado", + "resolved_at": "Resuelto", + "closed_at": "Cerrado", + "status_open": "Abierto", + "status_in_progress": "En progreso", + "status_resolved": "Resuelto", + "status_closed": "Cerrado", + "priority_low": "Baja", + "priority_medium": "Media", + "priority_high": "Alta", + "priority_critical": "Crítica", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Red", + "category_access": "Acceso", + "category_other": "Otro", + "comments": "Comentarios", + "add_comment": "Añadir comentario", + "comment_placeholder": "Escriba un comentario...", + "internal_note": "Nota interna (no visible para usuarios finales)", + "attachments": "Adjuntos", + "upload_attachment": "Subir adjunto", + "download": "Descargar clave", + "connect_device": "Conectar al dispositivo", + "no_tickets": "No se encontraron tickets", + "no_comments": "Sin comentarios aún", + "no_attachments": "Sin adjuntos", + "title_required": "El título es obligatorio", + "delete_confirm": "¿Está seguro de que desea eliminar el ticket #{id}?", + "delete_success": "Dispositivo eliminado correctamente", + "created_success": "Ticket creado correctamente", + "updated_success": "Ticket actualizado correctamente", + "sla_overdue": "SLA vencido", + "filter_all": "Todos", + "search_placeholder": "Buscar dispositivos...", + "assign_to_me": "Asignarme", + "unassign": "Desasignar", + "stats_total": "Total", + "stats_open": "Abiertos", + "stats_in_progress": "En progreso", + "stats_resolved": "Resueltos", + "stats_closed": "Cerrados" + }, + "activity": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "device": "Dispositivo", + "hostname": "Nombre de host", + "sessions": "Sesiones", + "idle_time": "Tiempo inactivo", + "active_time": "Tiempo activo", + "last_report": "Último informe", + "top_apps": "Aplicaciones principales", + "app_name": "Nombre de la aplicación", + "window_title": "Título de ventana", + "category": "Categoría", + "duration": "Duración", + "started_at": "Iniciado", + "ended_at": "Finalizado", + "session_count": "Cantidad de sesiones", + "total_active": "Total activo", + "total_idle": "Total inactivo", + "detail_count": "Registros detallados", + "no_data": "No hardware data available", + "no_sessions": "No hay sesiones registradas", + "filter_from": "Desde", + "filter_to": "Hasta", + "filter_apply": "Aplicar filtro", + "hours": "horas", + "minutes": "minutos", + "seconds": "segundos", + "category_browser": "Navegador", + "category_productivity": "Productividad", + "category_communication": "Comunicación", + "category_development": "Desarrollo", + "category_media": "Multimedia", + "category_gaming": "Juegos", + "category_system": "Sistema", + "category_other": "Otro", + "summary": "Resumen", + "details": "Detalles del dispositivo", + "refresh": "Actualizar", + "search": "Buscar dispositivos...", + "date_range": "Rango de fechas", + "device_id": "ID del dispositivo", + "session_start": "Inicio de sesión", + "session_end": "Fin de sesión", + "user": "Usuario", + "no_activity": "No hay actividad registrada", + "reported_at": "Reported At", + "detail": "Detalle del ticket", + "no_apps": "No hay aplicaciones" + }, + "automation": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "rules": "Reglas de alerta", + "rules_subtitle": "Definir condiciones que activan notificaciones", + "alerts": "Historial de alertas", + "alerts_subtitle": "Ver y confirmar alertas activadas", + "commands": "Comandos remotos", + "commands_subtitle": "Enviar comandos a dispositivos remotos", + "smtp": "Configuración SMTP", + "smtp_subtitle": "Ajustes de notificación por correo electrónico", + "rule_name": "Nombre de la regla", + "description": "Descripción", + "condition_type": "Tipo de condición", + "condition_op": "Operador", + "condition_value": "Umbral", + "severity": "Severidad", + "scope_device": "Dispositivo objetivo", + "scope_all": "Todos los dispositivos", + "cooldown": "Tiempo de enfriamiento (segundos)", + "notify_emails": "Correos de notificación", + "enabled": "Activado", + "disabled": "Desactivado", + "create_rule": "Crear regla", + "edit_rule": "Editar regla", + "delete_rule": "Eliminar regla", + "acknowledge": "Confirmar", + "acknowledged": "Confirmado", + "unacknowledged": "Sin confirmar", + "triggered_at": "Activado el", + "severity_info": "Información", + "severity_warning": "Advertencia", + "severity_critical": "Crítico", + "op_gt": "Mayor que", + "op_gte": "Mayor o igual", + "op_lt": "Menor que", + "op_lte": "Menor o igual", + "op_eq": "Igual a", + "op_neq": "Diferente de", + "type_cpu_usage": "Uso de CPU (%)", + "type_memory_usage": "Uso de memoria (%)", + "type_disk_usage": "Uso de disco (%)", + "type_offline_duration": "Duración sin conexión (s)", + "type_idle_duration": "Duración inactivo (s)", + "type_custom": "Personalizado", + "command_type": "Tipo de comando", + "command_payload": "Comando / Script", + "command_result": "Resultado", + "command_status": "Estado", + "send_command": "Enviar comando", + "status_pending": "Pendiente", + "status_running": "En ejecución", + "status_completed": "Completado", + "status_failed": "Fallido", + "smtp_host": "Host SMTP", + "smtp_port": "Puerto", + "smtp_secure": "Usar TLS", + "smtp_user": "Nombre de usuario", + "smtp_pass": "Contraseña", + "smtp_from": "Dirección de remitente", + "smtp_test": "Probar conexión", + "smtp_save": "Guardar configuración", + "smtp_test_success": "Conexión exitosa", + "smtp_test_failed": "Error de conexión", + "no_rules": "No hay reglas de asignación.", + "no_alerts": "No se han activado alertas", + "no_commands": "No se han enviado comandos", + "id_payload_required": "Se requieren ID de dispositivo y payload", + "no_commands_sent": "Aún no se han enviado comandos" + }, + "file_transfer": { + "title": "Panel", + "transfers": "Transferencias", + "new_transfer": "Nueva transferencia", + "upload": "Subir", + "download": "Descargar clave", + "direction": "Direction", + "filename": "Nombre del archivo", + "file_size": "Tamaño del archivo", + "mime_type": "Tipo MIME", + "progress": "Progreso", + "status": "Estado", + "device": "Dispositivo", + "initiated_by": "Iniciado por", + "created_at": "Creado", + "cancel": "Cancelar", + "cancel_confirm": "¿Está seguro de que desea cancelar esta transferencia?", + "download_file": "Descargar archivo", + "browse_files": "Explorar archivos", + "select_file": "Seleccionar archivo", + "select_device": "Seleccionar dispositivo", + "no_transfers": "No hay transferencias de archivos", + "status_pending": "Pendiente", + "status_active": "Activa", + "status_completed": "Completado", + "status_failed": "Fallido", + "status_cancelled": "Cancelada", + "bytes_transferred": "Bytes transferidos", + "chunks": "Bloques", + "transfer_started": "Transferencia iniciada", + "transfer_completed": "Transferencia completada", + "transfer_failed": "Transferencia fallida", + "transfer_cancelled": "Transferencia cancelada", + "max_file_size": "Tamaño máximo de archivo: 4 GB", + "error_too_large": "El archivo es demasiado grande", + "error_no_device": "No hay dispositivo seleccionado", + "error_no_file": "No hay archivo seleccionado" + }, + "network": { + "title": "Panel", + "targets": "Objetivos de monitoreo", + "add_target": "Añadir objetivo", + "edit_target": "Editar objetivo", + "delete_target": "Eliminar objetivo", + "delete_confirm": "¿Está seguro de que desea eliminar este objetivo?", + "target_name": "Nombre", + "host": "Host", + "port": "Puerto", + "url": "URL", + "check_type": "Tipo de verificación", + "timeout": "Tiempo de espera (ms)", + "interval": "Intervalo (ms)", + "enabled": "Activado", + "status": "Estado", + "last_check": "Última verificación", + "last_rtt": "Último RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Accesible", + "status_down": "No accesible", + "status_unknown": "Desconocido", + "check_now": "Verificar ahora", + "history": "History", + "stats": "Estadísticas", + "total_targets": "Total de objetivos", + "targets_up": "Objetivos accesibles", + "targets_down": "Objetivos no accesibles", + "type_ping": "Ping (ICMP)", + "type_tcp": "Puerto TCP", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Herramientas de red", + "ping_tool": "Prueba de ping", + "tcp_tool": "Verificación de puerto TCP", + "http_tool": "Verificación HTTP", + "dns_tool": "Resolución DNS", + "monitor_start": "Iniciar monitoreo", + "monitor_stop": "Detener monitoreo", + "monitor_running": "Monitoreo en curso", + "monitor_stopped": "Monitoreo detenido", + "no_targets": "No hay objetivos de monitoreo configurados", + "no_history": "No hay historial de verificaciones disponible", + "error_code": "Error", + "status_code": "Código de estado HTTP", + "search_targets": "Buscar objetivos...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Historial de comprobaciones", + "name_host_required": "Nombre y host son obligatorios", + "uptime": "Uptime", + "response_time": "Tiempo de respuesta", + "avg_response": "Respuesta media", + "charts": "Gráficos", + "realtime": "Tiempo real", + "response_time_ms": "Tiempo de respuesta (ms)", + "uptime_percent": "Tiempo de actividad %", + "last_24h": "Últimas 24 horas", + "last_7d": "Últimos 7 días", + "last_30d": "Últimos 30 días" + }, + "dataguard": { + "title": "Panel", + "policies": "Políticas", + "add_policy": "Añadir política", + "edit_policy": "Editar política", + "delete_policy": "Eliminar política", + "delete_confirm": "¿Está seguro de que desea eliminar esta política?", + "policy_name": "Nombre", + "policy_description": "Descripción", + "policy_desc": "Descripción de la política", + "status": "Estado", + "enabled": "Activado", + "disabled": "Desactivado", + "rules": "Reglas de alerta", + "add_rule": "Añadir regla", + "rule_type": "Tipo de regla", + "rule_type_usb": "Dispositivo USB", + "rule_type_file": "Operación de archivo", + "action": "Acción", + "action_allow": "Permitir", + "action_block": "Bloquear", + "action_log": "Solo registrar", + "filter": "Filtro", + "vid": "ID de fabricante (VID)", + "pid": "ID de producto (PID)", + "serial": "Número de serie", + "device_class": "Clase de dispositivo", + "drive_type": "Tipo de unidad", + "file_extensions": "Extensiones de archivo", + "events": "Eventos DLP", + "event_source": "Fuente", + "event_source_usb": "USB", + "event_source_file": "Archivo", + "event_type": "Tipo de evento", + "event_details": "Detalles", + "no_policies": "No hay políticas DLP configuradas", + "no_events": "No se registraron eventos DLP", + "stats": "Estadísticas", + "total_events": "Total de eventos", + "blocked_events": "Bloqueados", + "logged_events": "Registrados", + "usb_events": "Eventos USB", + "file_events": "Eventos de archivo", + "device_id": "ID del dispositivo", + "policy_matched": "Política coincidente", + "timestamp": "Marca de tiempo", + "drive_removable": "Extraíble", + "drive_fixed": "Fijo", + "drive_network": "Red", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Desconocido", + "total_policies": "Políticas totales", + "active_policies": "Políticas activas", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Políticas", + "tab_events": "Events", + "search_policies": "Buscar políticas...", + "create_policy": "Crear política", + "policy_type": "Tipo de política", + "scope": "Scope", + "events_count": "Events", + "search_events": "Buscar eventos...", + "event_time": "Event Time", + "device": "Dispositivo", + "policy": "Política", + "detail": "Detalle del ticket", + "scope_help": "IDs de dispositivos separados por comas o vacío para todos", + "scope_all": "Todos los dispositivos", + "active": "Activo", + "type_file_type": "Tipo de archivo", + "type_usb": "USB", + "type_clipboard": "Portapapeles", + "type_screen_share": "Compartir pantalla", + "type_file_transfer": "Transferencia de archivos" + }, + "reports": { + "title": "Panel", + "generate": "Generar configuración", + "generate_csv": "Exportar CSV", + "report_type": "Tipo de informe", + "type_devices": "Resumen de dispositivos", + "type_activity": "Resumen de actividad", + "type_security": "Informe de seguridad", + "type_tickets": "Informe de tickets", + "type_network": "Informe de red", + "type_inventory": "Informe de inventario", + "type_alerts": "Informe de alertas", + "saved": "Guardado", + "save_report": "Guardar informe", + "delete_report": "Eliminar informe", + "delete_confirm": "¿Está seguro de que desea eliminar este informe guardado?", + "no_saved": "No hay informes guardados", + "report_title": "Título", + "created_by": "Creado por", + "created_at": "Creado", + "filters": "Filtros", + "date_from": "Desde", + "date_to": "Hasta", + "device_filter": "ID del dispositivo", + "generated_at": "Generado el", + "section": "Sección de datos", + "total_devices": "Total de dispositivos", + "online": "En línea", + "offline": "Sin conexión", + "banned": "Bloqueados", + "platform_distribution": "Distribución por plataforma", + "top_applications": "Aplicaciones principales", + "total_active": "Total activo", + "total_idle": "Total inactivo", + "dlp_stats": "Estadísticas DLP", + "banned_devices": "Dispositivos bloqueados", + "audit_logs": "Registros de auditoría", + "ticket_stats": "Estadísticas de tickets", + "category_distribution": "Distribución por categoría", + "priority_distribution": "Distribución por prioridad", + "targets_status": "Estado de los objetivos", + "os_distribution": "Distribución de SO", + "avg_ram": "RAM promedio", + "alert_rules": "Reglas de alerta", + "recent_alerts": "Alertas recientes", + "tab_generate": "Generar informe", + "tab_saved": "Informes guardados", + "type_devices_desc": "Vista general de todos los dispositivos, plataformas y estados", + "type_activity_desc": "Resumen de uso de aplicaciones y tiempo inactivo", + "type_security_desc": "Acciones de bloqueo, eventos DLP y registros de auditoría", + "type_tickets_desc": "Estadísticas de tickets y rendimiento SLA", + "type_network_desc": "Objetivos de monitoreo de red y datos de disponibilidad", + "type_inventory_desc": "Resumen de inventario de hardware y software", + "type_alerts_desc": "Reglas de alerta e historial de alertas activadas", + "report_name": "Nombre del informe", + "format": "Formato", + "save": "Guardar", + "preview": "Vista previa", + "download": "Descargar clave", + "delete_saved": "Eliminar informe", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Panel", + "list": "Inquilinos", + "add_tenant": "Añadir inquilino", + "edit_tenant": "Editar inquilino", + "delete_tenant": "Eliminar inquilino", + "delete_confirm": "¿Está seguro de que desea eliminar este tenant? Se eliminarán todas las asignaciones de dispositivos y usuarios.", + "name": "Name", + "slug": "Slug", + "contact_name": "Nombre de contacto", + "contact_email": "Correo de contacto", + "max_devices": "Máx. dispositivos", + "max_devices_hint": "0 = ilimitado", + "notes": "Notas", + "active": "Activo", + "inactive": "Inactivo", + "devices": "Dispositivos", + "users": "Usuarios", + "assign_device": "Asignar dispositivo", + "assign_devices": "Asignar dispositivos", + "remove_device": "Quitar dispositivo", + "assign_user": "Asignar usuario", + "remove_user": "Quitar usuario", + "no_tenants": "No hay inquilinos configurados", + "no_devices": "No se encontraron dispositivos con datos de inventario", + "no_users": "No hay usuarios asignados a este inquilino", + "stats": "Estadísticas", + "total_devices": "Total de dispositivos", + "online_devices": "Dispositivos en línea", + "total_users": "Total de usuarios", + "created_at": "Creado", + "updated_at": "Actualizado", + "slug_exists": "El slug del inquilino ya existe", + "total_tenants": "Total de inquilinos", + "active_tenants": "Inquilinos activos", + "search": "Search devices...", + "create_tenant": "Crear inquilino", + "detail": "Detalle del ticket", + "contact": "Contacto", + "enabled": "Activado", + "disabled": "Desactivado", + "max": "máx", + "info": "Información", + "status": "Estado" + }, + "registrations": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "search_placeholder": "Buscar dispositivos...", + "no_registrations": "No hay solicitudes de registro", + "col_device_id": "ID del dispositivo", + "col_hostname": "Nombre de host", + "col_platform": "Plataforma", + "col_ip": "Dirección IP", + "col_version": "Versión", + "col_status": "Estado", + "col_requested": "Solicitado", + "col_actions": "Acciones", + "status_pending": "Pendiente", + "status_approved": "Aprobado", + "status_rejected": "Rechazado", + "approve_btn": "Aprobar", + "approve_confirm": "¿Está seguro de que desea aprobar este dispositivo? Recibirá las credenciales del servidor y podrá conectarse automáticamente.", + "approved_success": "Registro de dispositivo aprobado correctamente", + "reject_btn": "Rechazar", + "reject_title": "Rechazar registro", + "reject_confirm": "¿Está seguro de que desea rechazar esta solicitud de registro?", + "reject_reason": "Motivo (opcional)", + "reject_reason_placeholder": "Introduzca el motivo del rechazo...", + "rejected_success": "Registro de dispositivo rechazado", + "delete_confirm": "¿Está seguro de que desea eliminar este registro de inscripción?", + "deleted_success": "Registro eliminado", + "enrollment_title": "Registro de dispositivos", + "enrollment_subtitle": "Solicitudes de registro pendientes de clientes de escritorio BetterDesk", + "enrollment_empty": "No hay solicitudes de registro pendientes", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Nombre visible", + "enrollment_display_name_placeholder": "Introduce un nombre para este dispositivo...", + "enrollment_sync_mode": "Modo de sincronización", + "enrollment_sync_silent": "Silencioso — telemetría mínima", + "enrollment_sync_standard": "Estándar — sincronización equilibrada", + "enrollment_sync_turbo": "Turbo — sincronización agresiva", + "enrollment_approved_success": "Registro de dispositivo aprobado", + "enrollment_rejected_success": "Registro de dispositivo rechazado", + "approve_title": "Aprobar dispositivo", + "banner_locked_mode": "La inscripción está bloqueada — solo los dispositivos vinculados a un token pueden registrarse. El modo administrado es necesario para que el operador apruebe clientes desconocidos.", + "banner_open_mode": "La inscripción está abierta — los nuevos clientes RustDesk se registran sin aprobación del operador. Establece el modo administrado en Configuración para usar esta cola.", + "enrollment_settings_link": "Configuración de inscripción", + "field_folder": "Carpeta", + "field_folder_none": "Sin carpeta", + "field_groups": "Grupos de dispositivos", + "field_name": "Nombre del dispositivo", + "field_name_placeholder": "Ingresa un nombre para este dispositivo...", + "field_sync_mode": "Modo de sincronización", + "field_tag_add_btn": "Agregar", + "field_tag_add_placeholder": "Agregar nueva etiqueta...", + "field_tags": "Etiquetas", + "field_tags_existing": "Etiquetas existentes", + "field_tags_placeholder": "Etiquetas separadas por comas (p. ej. oficina, portátil)...", + "reject_ban_hint": "El dispositivo será bloqueado y no podrá enviar nuevas solicitudes de registro.", + "reject_ban_option": "Prohibir este dispositivo", + "sync_silent": "Silencioso — telemetría mínima", + "sync_standard": "Estándar — sincronización equilibrada", + "sync_turbo": "Turbo — sincronización agresiva" + }, + "backup": { + "title": "Panel", + "desc": "Descargue una copia de seguridad completa de la configuración de su consola, usuarios, grupos y ajustes. Los datos de peers del servidor Go se incluyen cuando el backend BetterDesk está activo.", + "restore_title": "Restaurar", + "restore_desc": "Suba un archivo de copia de seguridad descargado previamente para restaurar la configuración de la consola. Seleccione qué secciones restaurar a continuación.", + "stat_users": "Usuarios", + "stat_settings": "Configuración", + "stat_folders": "Carpetas", + "stat_groups": "Grupos", + "stat_strategies": "Estrategias", + "stat_backend": "Backend", + "download": "Descargar clave", + "creating": "Creando copia de seguridad...", + "download_success": "Archivo de clave descargado", + "upload": "Subir", + "restore_confirm": "¿Está seguro de que desea restaurar desde esta copia de seguridad? Las secciones seleccionadas serán sobrescritas.", + "restore_success": "Copia de seguridad restaurada correctamente. Algunos cambios pueden requerir recargar la página.", + "restored": "Restaurado", + "skipped": "Omitido", + "backup_date": "Fecha de la copia", + "opt_settings": "Configuración de la consola", + "opt_branding": "Marca / Tema", + "opt_folders": "Carpetas de dispositivos", + "opt_groups": "Grupos de usuarios y dispositivos", + "opt_addressbooks": "Libretas de direcciones", + "opt_users": "Cuentas de usuario", + "opt_users_warning": "Destructivo: reemplaza TODAS las cuentas de usuario con los datos de la copia. Puede que se cierre su sesión.", + "no_file": "No se seleccionó archivo de copia de seguridad", + "invalid_json": "Formato JSON inválido", + "invalid_format": "Archivo de copia de seguridad no válido: no es una copia de BetterDesk", + "opt_database": "Base de datos (todas las tablas)", + "opt_database_hint": "Reimporta todos los datos de la consola. Se aplica en vivo, no se requiere reinicio.", + "opt_env": "Archivo de entorno (.env)", + "opt_env_warning": "Sobreescribe SESSION_SECRET, clave API, DSN de la base de datos, puertos y configuración TLS. Requiere reinicio del servicio.", + "opt_godb": "Base de datos del servidor Go", + "opt_godb_warning": "Sobreescribe la base de datos SQLite del servidor Go (solo backend SQLite). Requiere reinicio del servicio.", + "opt_secrets": "Claves y secretos del servidor", + "opt_secrets_warning": "Sobreescribe la identidad del servidor Ed25519, la clave API y el secreto de sesión. Requiere reinicio del servicio.", + "opt_uploads": "Archivos de marca", + "opt_uploads_hint": "Logos e imágenes subidas.", + "restart_required": "Algunos componentes restaurados (claves / .env / base de datos Go) requieren un reinicio del servicio para tomar efecto.", + "restore_warning": "Restaurar los secretos, el archivo de entorno o la base de datos del servidor Go sobrescribe la identidad del servidor y requiere un reinicio del servicio después.", + "security_warning": "Esta copia de seguridad contiene secretos (claves del servidor, archivo de entorno, hashes de contraseñas y secretos 2FA). Guárdela de forma segura y nunca la comparta.", + "stat_database": "Motor de base de datos", + "stat_env": "Archivo de entorno", + "stat_keys": "Claves del servidor incluidas", + "stat_uploads": "Archivos de marca" + }, + "cdap": { + "device_detail": "Detalle del dispositivo", + "loading": "Cargando...", + "loading_widgets": "Cargando widgets del dispositivo...", + "load_error": "No se pudieron cargar los datos del dispositivo", + "connected": "Conectado", + "disconnected": "Desconectado", + "device_offline_msg": "El dispositivo está actualmente sin conexión. Los valores de los widgets pueden estar desactualizados.", + "no_widgets": "Este dispositivo no reporta widgets.", + "no_widgets_desc": "Este dispositivo no registró un manifiesto CDAP con definiciones de widgets.", + "command_log": "Registro de comandos", + "clear_log": "Limpiar registro", + "confirm_command": "¿Ejecutar este comando?", + "select_option": "Seleccionar", + "cdap_status": "Estado CDAP", + "cdap_enabled": "CDAP habilitado", + "cdap_disabled": "CDAP deshabilitado", + "cdap_devices": "Dispositivos CDAP", + "cdap_connections": "Conexiones activas", + "send_command": "Enviar comando", + "command_sent": "Comando enviado", + "command_failed": "Error al enviar comando", + "devices_title": "Dispositivos CDAP", + "devices_subtitle": "Dispositivos conectados mediante Custom Device Application Protocol", + "stat_connected": "Conectado", + "stat_port": "Puerto", + "search_devices": "Buscar dispositivos...", + "no_devices": "No se encontraron dispositivos con datos de inventario", + "no_devices_desc": "No hay dispositivos CDAP conectados actualmente. Los dispositivos aparecerán aquí cuando se conecten al gateway.", + "gateway_disabled": "Gateway CDAP deshabilitado", + "gateway_disabled_desc": "Habilita el gateway CDAP estableciendo CDAP_ENABLED=true en la configuración del servidor.", + "gateway_active": "Activa", + "toggle_enable": "Habilitar CDAP", + "toggle_disable": "Deshabilitar CDAP", + "enabled_restart": "CDAP habilitado. Se requiere reiniciar el servidor para aplicar los cambios.", + "disabled_restart": "CDAP deshabilitado. Se requiere reiniciar el servidor para aplicar los cambios.", + "widgets": "Widgets de control", + "type_all": "Todos", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agente de SO", + "type_network": "Informe de red", + "type_camera": "Cámara", + "type_custom": "Personalizado", + "active_alerts": "Alertas activas", + "alert_fired": "Alerta activada", + "alert_cleared": "Alerta cerrada", + "no_alerts": "No se han activado alertas", + "connect_terminal": "Conectar terminal", + "table_search": "Buscar...", + "just_now": "ahora mismo", + "terminal_connecting": "Conectando con el dispositivo...", + "terminal_disconnected": "Desconectado", + "terminal_error": "La conexión del terminal falló", + "linked_devices": "Dispositivos vinculados", + "link_device": "Vincular dispositivo", + "unlink_device": "Desvincular", + "no_linked_devices": "No hay dispositivos vinculados", + "unlink_confirm": "¿Seguro que quieres desvincular este dispositivo?", + "link_prompt": "Introduce el ID del peer para vincularlo con este dispositivo:", + "connect_desktop": "Conectar vía cliente de escritorio", + "connect_video": "Conectar transmisión", + "connect_files": "Explorar archivos", + "connect_audio": "Conectar audio", + "upload_file": "Upload", + "desktop_connecting": "Conectando...", + "video_connecting": "Conectando...", + "files_connecting": "Conectando...", + "audio_connecting": "Conectando audio...", + "audio_streaming": "Audio transmitiendo", + "clipboard_in": "Portapapeles del dispositivo → navegador", + "clipboard_out": "Portapapeles del navegador → dispositivo", + "monitor_select": "Seleccionar monitor", + "keyframe_request": "Solicitar fotograma clave", + "quality_auto": "Calidad automática" + }, + "desktop": { + "switch_mode": "Cambiar modo", + "console_mode": "Modo consola", + "loading": "Cargando...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Cerrar", + "widgets_mode": "Modo de widgets", + "windows_mode": "Windows", + "wallpaper": "Fondo de pantalla", + "add_widget": "Agregar widget", + "remove_widget": "Quitar widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Configurar", + "search_widgets": "Buscar widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Dispositivos", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Añada notas sobre este dispositivo...", + "search_placeholder": "Buscar dispositivos...", + "search_pages": "Pages", + "search_devices": "Search devices...", + "search_no_results": "No results", + "exit_desktop": "Salir del escritorio", + "refresh": "Actualizar", + "fullscreen": "Pantalla completa", + "help": "Help", + "widget_clock": "Clock", + "widget_device_status": "Estado de dispositivos", + "widget_server_health": "Salud del servidor", + "widget_system_stats": "Estadísticas del sistema", + "widget_device_list": "Lista de dispositivos", + "widget_quick_actions": "Acciones rápidas", + "widget_recent_activity": "Actividad reciente", + "widget_notes": "Notes", + "widget_network_monitor": "Monitor de red", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Dispositivos CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Cuadrícula de dispositivos", + "widget_multi_gauge": "Indicador múltiple", + "widget_weekly_chart": "Gráfico semanal", + "widget_quick_controls": "Controles rápidos", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Estadísticas de conexión", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sesiones de usuario", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Sin dispositivos", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Abrir", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Establecer URL", + "label_server_uptime": "Tiempo activo del servidor", + "label_merged_info": "Información combinada", + "label_with_notes": "Con notas", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Dispositivos totales", + "label_throughput": "Throughput", + "label_active_relays": "Relays activos", + "label_total_relayed": "Retransmitidos totales", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrar dispositivos", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Sin dispositivos CDAP", + "action_add_widget": "Agregar widget", + "label_merged_server_info": "Información combinada del servidor", + "wp_images": "Imágenes", + "wp_colors": "Colores sólidos", + "wp_custom_color": "Color personalizado", + "wp_fit_style": "Estilo", + "wp_fill": "Rellenar", + "wp_fit": "Ajustar", + "wp_stretch": "Estirar", + "wp_center": "Centrar", + "wp_unavailable": "Fondos no disponibles", + "wp_download_hint": "Descarga fondos para usarlos aquí.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Monitor de procesos", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Estadísticas de base de datos", + "widget_docker_containers": "Contenedores Docker", + "widget_shell_command": "Comando de shell", + "widget_device_map": "Mapa de dispositivos", + "widget_remote_connect": "Conexión remota", + "label_no_online": "No hay dispositivos en línea", + "label_no_events": "Sin eventos", + "label_event_title": "Título del evento", + "label_no_data": "Sin datos", + "label_download_speed": "Velocidad de descarga", + "label_latency": "Latency", + "label_server": "Instancia del servidor", + "label_run_test": "Run Test", + "label_testing": "Probando", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Sin contenedores", + "label_docker_unavailable": "Docker no disponible", + "label_no_command": "Sin comando", + "label_no_output": "Sin salida", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Guardar preajuste", + "label_load_preset": "Load Preset", + "label_preset_name": "Nombre del preajuste", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Ordenar automáticamente", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 columnas iguales", + "label_2col_wide": "2 columnas ancho", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Grupo de widgets", + "ungroup_widgets": "Desagrupar widgets", + "group_widgets": "Agrupar widgets", + "snap_layouts": "Diseños de ajuste", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Ajustar arriba izquierda", + "snap_top_right": "Ajustar arriba derecha", + "snap_bottom_left": "Ajustar abajo izquierda", + "snap_bottom_right": "Ajustar abajo derecha", + "aero_shake": "Sacudir ventana", + "zone_resize": "Cambiar tamaño de zona", + "zone_borders": "Bordes de zona", + "app_drawer": "Applications", + "search_apps": "Buscar apps", + "edit_shortcuts": "Editar accesos directos", + "widgets": "widgets", + "theme": "Theme" + }, + "desktop_login": { + "click_to_sign_in": "Haz clic para iniciar sesión", + "username_placeholder": "Introduzca el nombre de usuario", + "password_placeholder": "Introduzca la contraseña", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Autenticación de dos factores", + "totp_subtitle": "Introduzca el código de 6 dígitos de su aplicación de autenticación", + "back_to_login": "Volver al inicio de sesión", + "fill_all_fields": "Por favor, rellene todos los campos", + "invalid_credentials": "Nombre de usuario o contraseña inválidos.", + "invalid_code": "Código no válido", + "enter_6_digits": "Introduce 6 dígitos", + "network_error": "Error de red", + "session_expired": "Sesión caducada" + }, + "tokens": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "enrollment_mode": "Modo de registro", + "mode_open": "Abierto", + "mode_open_desc": "Cualquier cliente válido puede solicitar registro.", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Total", + "active": "Activo", + "used": "Usado", + "revoked": "Token revocado", + "search_placeholder": "Buscar dispositivos...", + "status_pending": "Pendiente", + "status_active": "Activa", + "status_used": "Used", + "status_revoked": "Revocado", + "status_expired": "Expirado", + "bulk_generate": "Generar en lote", + "create": "Crear", + "edit": "Editar", + "token": "Token", + "name": "Name", + "status": "Estado", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Fecha de expiración", + "created": "Creado", + "actions": "Acciones", + "name_placeholder": "Introduzca el nombre de la carpeta", + "max_uses": "Max Uses", + "max_uses_hint": "Número máximo de usos permitidos para este token.", + "expires_in": "Expires In", + "no_expiration": "Sin caducidad", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 días", + "note": "Nota", + "note_placeholder": "Notes about this device", + "count": "Count", + "count_range": "La cantidad debe estar entre 1 y 100", + "name_prefix": "Name Prefix", + "generate": "Generar configuración", + "token_created": "Token creado correctamente", + "tokens_generated": "Tokens generados", + "copy_warning": "Copia estos tokens ahora. No se volverán a mostrar.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revocar", + "revoke_confirm": "¿Está seguro de que desea revocar este token? Esto invalidará inmediatamente todas las peticiones de API que lo utilicen.", + "revoked_success": "Token revocado correctamente", + "no_tokens": "No hay tokens de API creados", + "expired": "Expired", + "never": "Nunca", + "save": "Guardar", + "cancel": "Cancelar", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Siguiente", + "prev": "Anterior", + "skip": "Saltar tutorial", + "finish": "Finalizar", + "close": "Cerrar", + "step_of": "Paso {current} de {total}", + "console_sidebar_title": "Navegación de la consola", + "console_sidebar_text": "Usa la barra lateral para moverte entre dispositivos, usuarios, ajustes y herramientas.", + "console_expand_title": "Expandir barra lateral", + "console_expand_text": "Abre la barra lateral para ver todas las secciones y herramientas de la consola.", + "console_search_title": "Búsqueda rápida", + "console_search_text": "Usa la búsqueda para encontrar dispositivos, ajustes y acciones más rápido.", + "console_dashboard_title": "Revisar el panel", + "console_dashboard_text": "El panel resume el estado del servidor, dispositivos y actividad reciente.", + "console_devices_title": "Lista de dispositivos", + "console_devices_text": "Aquí puedes buscar, filtrar y administrar todos los dispositivos registrados.", + "console_settings_title": "Configuración", + "console_settings_text": "Gestiona seguridad, autenticación, actualizaciones e integraciones.", + "console_desktop_title": "Modo escritorio", + "console_desktop_text": "Cambia al escritorio de widgets para crear una vista operativa personalizada.", + "console_complete_title": "Consola lista", + "console_complete_text": "Ya conoces las áreas principales de la consola BetterDesk.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "La barra superior contiene controles de ventana, búsqueda y accesos rápidos.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Abre el selector de widgets para colocar nuevas tarjetas en el escritorio.", + "desktop_widgets_title": "Widgets", + "desktop_widgets_text": "Los widgets muestran datos operativos en vivo y accesos rápidos.", + "desktop_add_widget_title": "Agregar widgets", + "desktop_add_widget_text": "Elige un widget y colócalo donde lo necesites.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "Diseños de ajuste", + "desktop_snap_text": "Usa diseños de ajuste para organizar widgets rápidamente en zonas.", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Mueve, agrupa y redimensiona ventanas como en un escritorio moderno.", + "desktop_search_title": "Buscar apps", + "desktop_search_text": "Busca widgets y herramientas disponibles desde el lanzador.", + "desktop_complete_title": "Escritorio listo", + "desktop_complete_text": "El modo escritorio está configurado y listo para personalizarse.", + "devices_folders_title": "Carpetas y grupos", + "devices_folders_text": "Organiza dispositivos en carpetas o grupos dinámicos.", + "devices_search_title": "Buscar dispositivos", + "devices_search_text": "Filtra por ID, hostname, plataforma, usuario o etiquetas.", + "devices_table_title": "Tabla de dispositivos", + "devices_table_text": "Abre acciones desde el menú de cada fila o haz doble clic para ver detalles.", + "devices_complete_title": "Gestión de dispositivos lista", + "devices_complete_text": "Ahora puedes buscar, agrupar y administrar dispositivos.", + "settings_tabs_title": "Secciones de configuración", + "settings_tabs_text": "Cambia entre configuración del servidor, seguridad, autenticación e interfaz.", + "settings_content_title": "Editar configuración", + "settings_content_text": "Guarda los cambios por sección para mantener la configuración clara.", + "settings_complete_title": "Configuración lista", + "settings_complete_text": "Ya conoces las áreas principales de configuración.", + "help": "Help", + "tour_console": "Tour de la consola", + "tour_desktop": "Tour del escritorio", + "tour_devices": "Tour de dispositivos", + "tour_remote": "Tour remoto", + "tour_organization": "Tour de organización", + "tour_cdap": "Tour CDAP", + "tour_chat": "Tour del chat", + "tour_settings": "Tour de configuración", + "reset_all": "Restablecer todos los tours", + "remote_toolbar_title": "Barra remota", + "remote_toolbar_text": "Controla calidad, monitores, portapapeles, grabación y acciones de sesión.", + "remote_canvas_title": "Pantalla remota", + "remote_canvas_text": "Haz clic en el área de pantalla para enviar teclado y ratón al dispositivo.", + "remote_clipboard_title": "Portapapeles", + "remote_clipboard_text": "Sincroniza texto de forma segura entre el navegador y el dispositivo remoto.", + "remote_complete_title": "Sesión remota lista", + "remote_complete_text": "Ya puedes controlar y supervisar una sesión.", + "org_overview_title": "Resumen de organización", + "org_overview_text": "Revisa miembros, dispositivos y políticas de la organización de un vistazo.", + "org_create_title": "Crear organización", + "org_create_text": "Crea una organización nueva para separar dispositivos y usuarios.", + "org_members_title": "Administrar miembros", + "org_members_text": "Asigna usuarios y establece roles específicos de la organización.", + "org_devices_title": "Asignar dispositivos", + "org_devices_text": "Asigna dispositivos a una organización para mantener los datos dentro de su alcance.", + "org_policies_title": "Configurar políticas", + "org_policies_text": "Controla reglas de acceso, transferencia de archivos y límites de sesión.", + "org_complete_title": "Organización lista", + "org_complete_text": "La organización está preparada para usuarios, dispositivos y políticas.", + "cdap_devices_title": "Dispositivos CDAP", + "cdap_devices_text": "Ver todos los dispositivos CDAP conectados — sensores IoT, PLCs, puentes y agentes personalizados. Los indicadores verdes muestran conexiones en vivo.", + "cdap_widgets_title": "Panel de widgets", + "cdap_widgets_text": "Los widgets muestran datos en tiempo real de los dispositivos. Medidores, interruptores, LEDs, gráficos — cada tipo de widget visualiza un tipo de dato diferente.", + "cdap_commands_title": "Enviar comandos", + "cdap_commands_text": "Interactúa con los dispositivos enviando comandos. Algunos comandos requieren confirmación. El registro de comandos guarda el historial de todos los comandos enviados.", + "cdap_terminal_title": "Terminal del dispositivo", + "cdap_terminal_text": "Abre una sesión de terminal hacia los agentes CDAP para diagnósticos avanzados o configuración manual. Escribe los comandos directamente.", + "cdap_complete_title": "¡Resumen de CDAP completado!", + "cdap_complete_text": "Explora los widgets de dispositivos, envía comandos y usa el terminal o el explorador de archivos para una gestión más profunda. Los agentes CDAP reportan métricas automáticamente.", + "chat_contacts_title": "Contactos", + "chat_contacts_text": "Selecciona operadores, agentes o grupos para una conversación.", + "chat_send_title": "Enviar mensajes", + "chat_send_text": "Escribe mensajes, envía archivos y usa confirmaciones de lectura.", + "chat_file_title": "Compartir archivos", + "chat_file_text": "Los archivos se transfieren cifrados cuando el cifrado de extremo a extremo está activo.", + "chat_complete_title": "Chat listo", + "chat_complete_text": "Ya puedes comunicarte de forma segura con usuarios y operadores.", + "disable_tutorials": "Deshabilitar tutoriales", + "enable_tutorials": "Habilitar tutoriales" + }, + "help_request": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "new_request": "Nueva solicitud de ayuda", + "device": "Dispositivo", + "hostname": "Nombre de host", + "message": "Message", + "status": "Estado", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Sin solicitudes de ayuda", + "notification": "Notificación de solicitud de ayuda", + "stats_total": "Total", + "filter_all": "Todos" + }, + "organizations": { + "title": "Panel", + "create": "Crear", + "edit": "Editar", + "detail": "Detalle del ticket", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Usuarios", + "devices": "Dispositivos", + "invitations": "Invitations", + "settings": "Configuración", + "add_user": "Añadir usuario", + "assign_device": "Asignar dispositivo", + "create_invitation": "Crear invitación", + "delete_confirm": "¿Eliminar esta organización? Se eliminarán todos los usuarios, dispositivos y ajustes asociados.", + "no_orgs": "Sin organizaciones", + "no_orgs_hint": "Crea una organización para administrar usuarios y dispositivos por separado.", + "connection_policy": "Política de conexión", + "allow_file_transfer": "Permitir transferencia de archivos", + "allow_clipboard": "Permitir portapapeles", + "max_session_duration": "Duración máxima de sesión", + "role_owner": "Owner", + "role_admin": "Administrador", + "role_operator": "Operador", + "role_user": "Miembro", + "username": "Nombre de usuario", + "password": "Contraseña", + "display_name": "Nombre visible", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID del dispositivo", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Usuario asignado", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Sin usuarios", + "no_devices": "Sin dispositivos", + "no_invitations": "Sin invitaciones", + "user_added": "User added", + "user_removed": "Usuario eliminado", + "user_updated": "Usuario actualizado", + "device_assigned": "Dispositivo asignado", + "device_unassigned": "Dispositivo desasignado", + "invitation_created": "Invitación creada", + "settings_saved": "Configuración de organización guardada", + "org_deleted": "Organización eliminada", + "confirm_remove_user": "¿Quitar este usuario de la organización?", + "confirm_unassign_device": "¿Quitar este dispositivo de la organización?", + "confirm_delete_org": "¿Eliminar esta organización de forma permanente?", + "edit_role": "Editar rol", + "raw_settings": "Configuración sin procesar", + "key": "Key", + "value": "Value", + "save": "Guardar", + "policy_unattended": "Acceso no supervisado", + "policy_attended": "Acceso supervisado", + "policy_ask": "Always ask", + "expires_hours": "Caduca en horas", + "loading_failed": "No se pudieron cargar las organizaciones", + "name_slug_required": "Nombre y slug son obligatorios", + "org_created": "Organización creada", + "org_updated": "Organización actualizada", + "create_new_user": "Crear usuario nuevo", + "add_existing_user": "Agregar usuario existente", + "none_available": "none", + "select_user": "Seleccionar usuario", + "org_role": "Rol de organización", + "link_user_hint": "Vincula un usuario existente con esta organización.", + "no_available_users": "No hay usuarios disponibles", + "user_linked": "Usuario vinculado" + }, + "chat": { + "e2e_enabled": "Cifrado de extremo a extremo", + "e2e_establishing": "Estableciendo canal seguro...", + "e2e_established": "Canal seguro establecido", + "e2e_unsupported": "Cifrado E2E no compatible con este navegador", + "typing_indicator": "escribiendo...", + "read_receipt": "Leído", + "delivered": "Entregado", + "file_share": "Archivo", + "file_too_large": "Archivo demasiado grande (máx. 50MB)", + "file_encrypted": "Transferencia de archivo cifrada", + "presence_online": "En línea", + "presence_away": "Ausente", + "presence_busy": "Ocupado", + "presence_offline": "Desconectado", + "key_rotation": "Claves de seguridad renovadas", + "new_message": "Nuevo mensaje", + "title": "Panel", + "contacts": "Contactos", + "groups": "Grupos", + "no_contacts": "Aún no hay contactos", + "no_groups": "Aún no hay grupos", + "no_messages": "Aún no hay mensajes", + "no_results": "No se encontraron resultados", + "select_conversation": "Seleccione una conversación para comenzar a chatear", + "select_conversation_hint": "Selecciona una conversación para ver los mensajes", + "type_message": "Escriba un mensaje...", + "send": "Enviar", + "attach_file": "Adjuntar archivo", + "emoji": "Emoji", + "info": "Información", + "search_messages": "Buscar mensajes", + "create_group": "Crear grupo", + "group_name": "Nombre del grupo", + "group_name_placeholder": "Introduce el nombre del grupo", + "group_members": "Miembros", + "cancel": "Cancelar", + "create": "Crear", + "members": "miembros", + "today": "Hoy", + "yesterday": "Ayer", + "react": "Reaccionar", + "my_presence": "Mi estado", + "search_placeholder": "Buscar dispositivos..." + }, + "toast": { + "device_connected": "Dispositivo conectado", + "device_disconnected": "Dispositivo desconectado", + "session_started": "Sesión iniciada", + "session_ended": "Sesión finalizada", + "file_upload_complete": "Carga de archivo completada", + "settings_saved": "Configuración guardada", + "error_generic": "Se produjo un error", + "connection_lost": "Conexión perdida", + "reconnecting": "Reconectando" + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Panel" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Puerto", + "domain": "Domain", + "run": "Run", + "generate": "Generar configuración", + "encode": "Encode", + "decode": "Decode", + "send": "Enviar", + "refresh": "Actualizar", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Introduce texto...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Servidor Go", + "mac_address": "Dirección MAC", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Comprobar disponibilidad y latencia de un host", + "tcp_title": "Comprobación de puerto TCP", + "tcp_desc": "Probar conectividad de un puerto TCP", + "ssl_title": "Inspector SSL", + "ssl_desc": "Inspeccionar detalles del certificado SSL/TLS", + "http_title": "Comprobación de estado HTTP", + "http_desc": "Comprobar el estado de un endpoint HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Resolver un hostname a dirección IP", + "whois_title": "DNS Records", + "whois_desc": "Consultar registros A, AAAA, MX, TXT y NS", + "speed_title": "Speed Test", + "speed_desc": "Medir el ancho de banda de descarga", + "run_speed_test": "Ejecutar prueba de velocidad", + "wol_title": "Wake-on-LAN", + "wol_desc": "Enviar un paquete mágico para despertar un dispositivo", + "wol_sent": "Paquete mágico enviado", + "hash_title": "Generador de hashes", + "hash_desc": "Generar hashes criptográficos", + "password_title": "Generador de contraseñas", + "password_desc": "Actualizar la contraseña de su cuenta", + "jwt_title": "JWT Decoder", + "jwt_desc": "Decodificar e inspeccionar JSON Web Tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Codificar o decodificar datos Base64", + "url_title": "URL Encoder", + "url_desc": "Codificar o decodificar componentes de URL", + "processes_title": "Lista de procesos", + "processes_desc": "Mostrar procesos del sistema en ejecución", + "disk_title": "Disk Usage", + "disk_desc": "Mostrar uso de particiones de disco", + "db_title": "Estadísticas de base de datos", + "db_desc": "Mostrar estadísticas de tablas de la base de datos", + "docker_title": "Contenedores Docker", + "docker_desc": "Mostrar contenedores Docker en ejecución", + "logs_title": "Log Viewer", + "logs_desc": "Mostrar salidas recientes del registro", + "ip_address": "Dirección IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Estado", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Válido desde", + "valid_to": "Válido hasta", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "No hardware data available", + "no_docker": "No se encontraron contenedores Docker o Docker no está disponible", + "no_logs": "No hay líneas de registro disponibles" + }, + "policies": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "select_org": "Organización", + "select_org_placeholder": "Seleccionar organización...", + "select_org_first": "Seleccione una organización para ver el registro de auditoría de políticas.", + "configured": "Configurado", + "connection_title": "Política de conexión", + "connection_desc": "Controlar cómo se establecen las sesiones remotas", + "connection_mode": "Modo de conexión", + "mode_attended": "Asistido (requiere aprobación del usuario)", + "mode_unattended": "No asistido (permitir siempre)", + "mode_ask": "Preguntar siempre", + "max_session": "Duración máx. de sesión (minutos)", + "idle_lock": "Bloqueo por inactividad (minutos)", + "wallpaper_policy": "Fondo durante la sesión", + "wallpaper_show": "Mostrar", + "wallpaper_hide_session": "Ocultar durante sesión", + "wallpaper_hide_always": "Ocultar siempre", + "features_title": "Política de funciones", + "features_desc": "Habilitar o deshabilitar funciones específicas para dispositivos", + "allow_file_transfer": "Permitir transferencia de archivos", + "allow_clipboard": "Allow Clipboard", + "allow_audio": "Permitir transmisión de audio", + "allow_recording": "Permitir grabación de sesión", + "security_title": "Política de seguridad", + "security_desc": "Aplicar requisitos de seguridad para dispositivos de la organización", + "require_2fa": "Requerir 2FA para acceso no asistido", + "password_min_length": "Longitud mínima de contraseña", + "password_require_special": "Requerir caracteres especiales", + "password_max_age": "Edad máx. de contraseña (días, 0=nunca)", + "allowed_operators": "Allowed Operators", + "network_title": "Política de red", + "network_desc": "Controlar servidores relay y conexiones directas", + "block_direct_p2p": "Bloquear P2P directo (forzar relay)", + "allowed_relays": "Servidores relay permitidos (uno por línea)", + "ip_allowlist": "Lista blanca IP (CIDR, uno por línea)", + "update_title": "Política de actualización", + "update_desc": "Controlar actualizaciones automáticas y canales de actualización", + "auto_update": "Habilitar actualización automática", + "update_channel": "Canal de actualización", + "audit_title": "Cambios de políticas", + "audit_desc": "Actividad reciente de la consola", + "no_audit": "No se registraron cambios de políticas.", + "save_success": "Política guardada correctamente", + "save_failed": "No se pudo guardar la política", + "load_failed": "No se pudieron cargar las políticas", + "block_direct_p2p_hint": "Se aplica a los dispositivos de esta organización. El valor predeterminado global está en Configuración → Estrategia de conexión." + }, + "attestation": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "verified": "Verificado", + "pending": "Pending", + "failed": "Fallido", + "device_list": "Registros de atestación", + "device_list_desc": "Huellas de hardware y estado de verificación de identidad", + "col_device": "ID de dispositivo", + "col_hostname": "Nombre de host", + "col_fingerprint": "Huella", + "col_status": "Estado", + "col_last_check": "Última verificación", + "col_actions": "Acciones", + "no_records": "No se encontraron registros de atestación.", + "verify_success": "Dispositivo marcado como verificado", + "verify_failed": "No se pudo verificar el dispositivo", + "revoke_success": "Atestación del dispositivo revocada", + "revoke_failed": "No se pudo revocar la atestación" + }, + "fleet": { + "title": "Panel", + "tab_resources": "Recursos", + "tab_tasks": "Tareas", + "tab_builder": "Constructor", + "tab_compliance": "Cumplimiento", + "res_title": "Mapeo de recursos", + "res_all_types": "Todos los tipos", + "res_type_printer": "Impresora", + "res_type_network_drive": "Unidad de red", + "res_type_dns": "Servidor DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Añadir recurso", + "res_name": "Nombre del recurso", + "res_type": "Tipo", + "res_address": "Dirección / Ruta", + "res_target": "Destino", + "res_scope": "Alcance", + "res_scope_org": "Organización", + "res_scope_group": "Grupo", + "res_scope_device": "Dispositivo", + "res_scope_value": "Valor del alcance", + "res_status": "Estado", + "res_active": "Activo", + "res_inactive": "Inactivo", + "res_no_data": "No se encontraron recursos. Haga clic en 'Añadir recurso'.", + "res_confirm_delete": "¿Está seguro de que desea eliminar este recurso?", + "task_title": "Programador de tareas", + "task_all_status": "Todos los estados", + "task_status_pending": "Pendiente", + "task_status_running": "En ejecución", + "task_status_success": "Éxito", + "task_status_failed": "Fallido", + "task_search": "Buscar tareas…", + "task_create": "Crear tarea", + "task_name": "Nombre de la tarea", + "task_type": "Tipo", + "task_type_script": "Script", + "task_type_install": "Instalación", + "task_type_update": "Actualización", + "task_type_restart": "Reinicio", + "task_type_deploy": "Despliegue", + "task_type_scan": "Escaneo", + "task_targets": "Destinos", + "task_targets_help": "IDs de dispositivos o nombres de grupos, separados por comas", + "task_schedule": "Programación", + "task_schedule_once": "Una vez", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Intervalo", + "task_schedule_value": "Valor de programación", + "task_script": "Script / Comando", + "task_retries": "Reintentos", + "task_timeout": "Tiempo límite (s)", + "task_last_run": "Última ejecución", + "task_no_data": "No se encontraron tareas. Cree una nueva tarea.", + "task_confirm_delete": "¿Está seguro de que desea eliminar esta tarea?", + "task_output": "Salida de la tarea", + "task_retry": "Reintentar", + "builder_title": "Constructor de flujos de trabajo", + "builder_select_workflow": "Seleccionar flujo…", + "builder_new": "Nuevo", + "builder_save": "Guardar", + "builder_export": "Exportar", + "builder_execute": "Ejecutar", + "builder_dry_run": "Simulación", + "builder_triggers": "Disparadores", + "builder_conditions": "Condiciones", + "builder_actions": "Acciones", + "builder_results": "Resultados", + "builder_transforms": "Transformaciones", + "builder_properties": "Propiedades", + "builder_no_selection": "Seleccione un nodo para editar sus propiedades.", + "builder_node_trigger_manual": "Disparador manual", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Disparador por evento", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Reiniciar servicio", + "builder_node_action_file_deploy": "Desplegar archivo", + "builder_node_action_message": "Enviar mensaje", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Enviar alerta", + "builder_node_result_chain": "Encadenar flujo", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Nombre del flujo:", + "comp_title": "Cumplimiento de software", + "comp_compliant": "Conforme", + "comp_warning": "Advertencia", + "comp_critical": "Crítico", + "comp_score": "Puntuación media", + "comp_device": "Dispositivo", + "comp_hostname": "Nombre de host", + "comp_os": "SO", + "comp_score_col": "Puntuación", + "comp_issues": "Problemas", + "comp_last_scan": "Último escaneo", + "comp_scan": "Escanear", + "comp_scan_all": "Escanear todo", + "comp_remediate": "Remediar", + "comp_remediate_confirm": "¿Ejecutar auto-remediación en este dispositivo?", + "comp_no_data": "Sin datos de cumplimiento. Ejecute un escaneo.", + "save": "Guardar", + "cancel": "Cancelar", + "close": "Cerrar", + "edit": "Editar", + "delete": "Eliminar", + "actions": "Acciones", + "all_orgs": "Todas las organizaciones", + "select_org_placeholder": "Seleccionar organización...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Unidad de red", + "type_dns": "Servidor DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Agregar recurso", + "edit_resource": "Editar recurso", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Estado", + "col_actions": "Acciones", + "no_resources": "No resources found.", + "active": "Activo", + "inactive": "Inactivo", + "address": "Dirección / ruta", + "scope_org": "Organización", + "scope_group": "Grupo", + "scope_device": "Dispositivo objetivo", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "¿Seguro que quieres eliminar este elemento?", + "all_statuses": "Todos los estados", + "status_pending": "Pendiente", + "status_running": "En ejecución", + "status_success": "Success", + "status_failed": "Fallido", + "search_tasks": "Buscar tareas...", + "create_task": "Crear tarea", + "edit_task": "Editar tarea", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Despliegue de archivo", + "task_type_registry": "Registry", + "target_devices": "Dispositivos objetivo", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / comando", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Cargando...", + "no_output": "No hay salida disponible", + "error_loading": "Error al cargar datos", + "select_workflow": "Seleccionar flujo...", + "new_workflow": "New", + "export": "Exportar", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Disparador manual", + "node_schedule": "Schedule", + "node_event": "Disparador por evento", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Reiniciar servicio", + "node_file_deploy": "Desplegar archivo", + "node_send_message": "Enviar mensaje", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Enviar alerta", + "node_chain": "Encadenar flujo", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Todas las organizaciones", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "ID de dispositivo", + "col_hostname": "Nombre de host", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "¿Ejecutar remediación automática en este dispositivo?" + }, + "scaling": { + "title": "Panel", + "tab_overview": "Resumen", + "tab_relays": "Nodos de relé", + "tab_rules": "Reglas de asignación", + "tab_capacity": "Planificación de capacidad", + "arch_title": "Arquitectura de red", + "arch_loading": "Cargando diagrama de arquitectura...", + "stat_relay_nodes": "Nodos de relé", + "stat_total_devices": "Dispositivos totales", + "stat_active_sessions": "Sesiones activas", + "stat_bandwidth": "Ancho de banda total", + "relay_health": "Estado de relés", + "no_relays": "No hay nodos de relé configurados. Agregue su primer nodo para distribuir la carga.", + "relay_search": "Buscar relés...", + "relay_add": "Agregar nodo de relé", + "relay_edit": "Editar nodo de relé", + "col_name": "Name", + "col_address": "Dirección", + "col_location": "Ubicación", + "col_devices": "Dispositivos", + "col_sessions": "Sesiones", + "col_bandwidth": "Ancho de banda", + "col_status": "Estado", + "col_actions": "Acciones", + "col_priority": "Prioridad", + "col_rule_name": "Nombre de regla", + "col_match": "Coincidencia", + "col_target_relay": "Relé destino", + "col_fallback": "Respaldo", + "status_online": "En línea", + "status_degraded": "Degradado", + "status_offline": "Fuera de línea", + "status_enabled": "Habilitado", + "status_disabled": "Deshabilitado", + "confirm_delete_relay": "¿Está seguro de que desea eliminar este nodo de relé?", + "confirm_delete_rule": "¿Está seguro de que desea eliminar esta regla de asignación?", + "rules_hint": "Las reglas de asignación determinan qué servidor de relé maneja grupos de dispositivos específicos. Las reglas se evalúan por prioridad (la más baja primero).", + "no_rules": "No hay reglas de asignación.", + "rule_add": "Agregar regla", + "rule_edit": "Editar regla", + "rule_match_type": "Tipo de coincidencia", + "match_subnet": "Subred", + "match_group": "Grupo de dispositivos", + "match_tag": "Etiqueta de dispositivo", + "match_location": "Ubicación", + "rule_match_value": "Valor de coincidencia", + "fallback_master": "Servidor maestro", + "fallback_nearest": "Relé más cercano", + "relay_max_sessions": "Máx. sesiones", + "relay_max_bandwidth": "Máx. ancho de banda (Mbps)", + "cap_tiers": "Niveles de capacidad", + "cap_loading": "Cargando datos de capacidad...", + "cap_recommendations": "Recomendaciones", + "cap_no_recs": "No hay recomendaciones disponibles.", + "cap_planning": "Planificación de infraestructura", + "cap_config": "Configuración", + "cap_max_devices": "Máx. dispositivos", + "cap_max_sessions": "Máx. sesiones", + "cap_current": "Actual", + "cap_utilization": "Utilización", + "cap_tier_devices": "Capacidad de dispositivos", + "cap_tier_sessions": "Capacidad de sesiones", + "cap_tier_bandwidth": "Capacidad de ancho de banda", + "cap_single_sqlite": "Servidor único (SQLite)", + "cap_single_pg": "Servidor único (PostgreSQL)", + "cap_master_3": "Maestro + 3 relés", + "cap_master_10": "Maestro + 10 relés", + "rec_no_relays": "No hay nodos configurados. Considere agregar relés para mejor rendimiento y redundancia.", + "rec_devices_high": "La utilización de dispositivos es alta. Considere agregar más nodos de relé.", + "rec_sessions_high": "La capacidad de sesiones se acerca al límite. Considere actualizar la infraestructura.", + "rec_cpu_high": "Algunos nodos reportan alto uso de CPU. Considere balanceo de carga.", + "rec_all_good": "Todos los sistemas operan dentro de parámetros normales. No se requiere acción.", + "save": "Guardar", + "cancel": "Cancelar", + "edit": "Editar", + "delete": "Eliminar", + "close": "Cerrar", + "relays_info_banner": "Esta lista es informativa. Los servidores relay usados realmente por los clientes se configuran mediante la variable de entorno RELAY_SERVERS en el servidor BetterDesk.", + "relay_name_address_required": "El nombre y la dirección son obligatorios.", + "relay_save_failed": "No se pudo guardar el nodo relay.", + "relay_delete_failed": "No se pudo eliminar el nodo relay.", + "relay_saved": "Nodo relay guardado.", + "relay_deleted": "Nodo relay eliminado.", + "rule_name_value_required": "El nombre de la regla y el valor de coincidencia son obligatorios.", + "rule_save_failed": "No se pudo guardar la regla.", + "rule_delete_failed": "No se pudo eliminar la regla.", + "rule_saved": "Regla guardada.", + "rule_deleted": "Regla eliminada." + }, + "cross_platform": { + "title": "Panel", + "tab_matrix": "Matriz de compatibilidad", + "tab_distribution": "Distribución", + "tab_protocols": "Protocolos", + "tab_limitations": "Limitaciones", + "matrix_hint": "Matriz de soporte de funciones para todas las plataformas compatibles. Verde = soporte completo, Amarillo = parcial, Gris = no disponible, Azul = planificado.", + "col_feature": "Función", + "legend_full": "Soporte completo", + "legend_partial": "Soporte parcial", + "legend_none": "No disponible", + "legend_planned": "Planificado", + "platform_breakdown": "Distribución por plataforma", + "arch_breakdown": "Distribución por arquitectura", + "version_breakdown": "Distribución por versión", + "summary": "Resumen", + "total_devices": "Total de dispositivos", + "unique_platforms": "Plataformas", + "unique_archs": "Arquitecturas", + "unique_versions": "Versiones de cliente", + "no_devices": "No se encontraron dispositivos con datos de inventario", + "protocols_hint": "La negociación de capacidades del protocolo asegura que cada cliente reciba solo las funciones que soporta. El servidor adapta su comportamiento basándose en las capacidades reportadas.", + "capability_negotiation": "Negociación de capacidades", + "codec_support": "Soporte de códecs (dispositivos en línea)", + "feature_support": "Soporte de funciones (dispositivos en línea)", + "no_codec_data": "No hay datos de códecs de dispositivos en línea.", + "no_feature_data": "No hay datos de funciones de dispositivos en línea.", + "protobuf_schema": "Esquema Protobuf ClientCapabilities", + "diagram_client": "Cliente", + "diagram_server": "Servidor BetterDesk", + "diagram_peer": "Peer remoto", + "limitations_hint": "Cada plataforma tiene limitaciones específicas que afectan las funciones disponibles. Revíselas al planificar implementaciones.", + "feat_desktop_client": "Cliente de escritorio", + "feat_background_agent": "Agente en segundo plano", + "feat_remote_target": "Objetivo remoto", + "feat_screen_capture": "Captura de pantalla", + "feat_input_injection": "Inyección de entrada", + "feat_file_transfer": "Transferencia de archivos", + "feat_clipboard_sync": "Sincronización de portapapeles", + "feat_audio_streaming": "Transmisión de audio", + "feat_chat": "Chat", + "feat_h264": "Códec H.264", + "feat_vp9": "Códec VP9", + "feat_av1": "Códec AV1", + "feat_cdap_agent": "Agente CDAP", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Navegador web", + "platform_chromeos": "ChromeOS", + "status_production": "Producción", + "status_testing": "Pruebas", + "status_planned": "Planificado", + "status_limited": "Limitado", + "status_experimental": "Experimental", + "limit_win_uac": "Se requiere elevación UAC para instalación de servicio e inyección de entrada en escritorios seguros.", + "limit_win_service": "Se ejecuta como servicio NSSM; requiere derechos de administrador para instalar.", + "limit_win_firewall": "Las reglas del Firewall de Windows deben permitir los puertos 21115-21119 para conexiones relay.", + "limit_linux_wayland": "Los compositores Wayland restringen la captura programática de pantalla; se requiere API de portal PipeWire.", + "limit_linux_pipewire": "La captura de audio requiere PipeWire; alternativa PulseAudio disponible pero limitada.", + "limit_linux_arm": "Compilaciones ARM64 disponibles; algunos códecs pueden usar decodificación por software (más lento).", + "limit_mac_screen": "Se requiere permiso de grabación de pantalla en Configuración del Sistema > Privacidad y Seguridad.", + "limit_mac_signing": "El agente debe estar firmado con Apple Developer ID para distribución.", + "limit_mac_notarize": "Se requiere notarización para macOS Gatekeeper (distribución fuera de App Store).", + "limit_android_projection": "La API MediaProjection requiere consentimiento del usuario para cada sesión de captura de pantalla.", + "limit_android_accessibility": "La inyección de entrada requiere AccessibilityService; restringido desde Android 14+.", + "limit_android_battery": "Servicio en segundo plano limitado por modo Doze; puede necesitar exención de optimización de batería.", + "limit_ios_capture": "Apple prohíbe la captura de pantalla en segundo plano; solo modo visor soportado.", + "limit_ios_input": "No se permite inyección de entrada; solo vista remota y chat.", + "limit_ios_appstore": "Distribución solo a través de App Store; TestFlight para pruebas beta.", + "limit_web_https": "La API WebCodecs y WebRTC requieren HTTPS; HTTP recurre a JMuxer (códecs limitados).", + "limit_web_codec": "Soporte de códecs depende del navegador; H.264 ampliamente soportado, VP9/AV1 varía.", + "limit_web_performance": "Rendimiento limitado por sandbox del navegador; sin aceleración de hardware directa.", + "limit_chrome_crostini": "Soporte completo de agente solo dentro del contenedor Linux Crostini.", + "limit_chrome_pwa": "El modo PWA proporciona solo capacidades web; sin funciones nativas de agente.", + "limit_chrome_input": "Inyección de entrada fuera del contenedor Crostini no soportada.", + "feat_multi_monitor": "Múltiples monitores", + "feat_session_recording": "Grabación de sesión", + "feat_unattended_access": "Acceso desatendido", + "limit_linux_unprivileged": "Los servicios se ejecutan bajo la cuenta sin privilegios dedicada «betterdesk» con endurecimiento de systemd (NoNewPrivileges, ProtectSystem=strict).", + "limit_win_virtual_account": "Los servicios se ejecutan bajo cuentas virtuales aisladas en lugar de LocalSystem; las rutas de registro personalizadas pueden necesitar ajuste de ACL." + }, + "security_audit": { + "title": "Panel", + "tab_overview": "Resumen", + "tab_events": "Events", + "tab_hardening": "Endurecimiento", + "tab_vulnerabilities": "Vulnerabilidades", + "security_score": "Puntuación de seguridad", + "failed_logins": "Inicios de sesión fallidos (24h)", + "active_bans": "Bloqueos activos", + "api_keys": "Claves API", + "old_keys": "Claves antiguas (>90d)", + "security_checks": "Verificaciones de seguridad", + "tls_status": "Estado TLS", + "pass": "OK", + "warning": "Advertencia", + "fail": "Fallo", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSockets seguros", + "enabled": "Activado", + "disabled": "Desactivado", + "all_events": "Todos los eventos", + "event_login_failed": "Inicio de sesión fallido", + "event_login_success": "Inicio de sesión exitoso", + "event_peer_banned": "Dispositivo bloqueado", + "event_ip_banned": "IP bloqueada", + "event_config_changed": "Configuración cambiada", + "event_key_created": "Clave creada", + "refresh": "Actualizar", + "col_time": "Hora", + "col_action": "Acción", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "Dirección IP", + "col_details": "Detalles", + "no_events": "No se registraron eventos DLP", + "hardening_hint": "Prioridades de endurecimiento de seguridad para su implementación BetterDesk. Ordenados por gravedad.", + "no_hardening": "No hay elementos de endurecimiento disponibles.", + "vuln_hint": "Resultados del escaneo de vulnerabilidades de dependencias. Ejecute npm audit regularmente.", + "no_vulns": "No se encontraron vulnerabilidades. Sus dependencias son seguras." + }, + "languages": { + "title": "Panel", + "total_languages": "Idiomas totales", + "fully_translated": "Completamente traducido", + "needs_review": "Requiere revisión", + "reference_keys": "Claves de referencia", + "no_languages": "No se encontraron archivos de idioma.", + "badge_reference": "Reference", + "badge_review": "Revisar", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Ver elementos faltantes", + "fix_missing": "Fix Missing", + "missing_keys_for": "Claves faltantes para", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "y {n} más...", + "all_keys_present": "¡Todas las claves están presentes!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Las claves faltantes en {code} deben traducirse manualmente.", + "no_fix_needed": "No hay claves faltantes que completar." + }, + "resource_control": { + "title": "Panel", + "tab_overview": "Resumen", + "tab_usb": "USB Control", + "tab_optical": "Unidades ópticas", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Cuotas de recursos", + "compliance_by_category": "Cumplimiento por categoría", + "device_compliance": "Cumplimiento de dispositivos", + "search_devices": "Buscar dispositivos...", + "col_device": "ID de dispositivo", + "col_platform": "Plataforma", + "col_status": "Estado", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Acciones", + "stat_total_devices": "Dispositivos totales", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Tasa de cumplimiento", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configurar", + "no_devices": "No se encontraron dispositivos con datos de inventario", + "usb_title": "Control de puertos USB", + "usb_hint": "Controla el acceso a dispositivos de almacenamiento USB para el dispositivo seleccionado o la política predeterminada de la organización.", + "usb_storage_policy": "Política de almacenamiento USB", + "usb_whitelist": "Dispositivos permitidos (uno por línea)", + "usb_whitelist_hint": "VID:PID (p. ej. 0781:5583)", + "usb_audit_log": "Registrar conexiones de dispositivos USB", + "optical_title": "Control de unidades ópticas", + "optical_hint": "Controla el acceso a unidades CD/DVD/Blu-ray para el dispositivo seleccionado.", + "optical_policy": "Política de unidades ópticas", + "optical_audit_log": "Registrar acceso a unidades ópticas", + "monitors_title": "Gestión de monitores", + "monitors_hint": "Configura ajustes de monitores, incluida la cantidad máxima, resolución aplicada, brillo y horarios de energía.", + "monitors_max_count": "Cantidad máxima de monitores (0 = ilimitado)", + "monitors_max_hint": "0 significa sin límite", + "monitors_resolution": "Resolución máxima", + "monitors_brightness": "Límite de brillo", + "monitors_power_schedule": "Horario de energía", + "monitors_power_hint": "p. ej. off:22:00-06:00", + "disks_title": "Control de acceso a discos", + "disks_hint": "Configura políticas de acceso a discos, incluido modo solo lectura, requisito de cifrado y visibilidad de particiones.", + "disks_readonly": "Forzar modo solo lectura", + "disks_encryption": "Requerir cifrado (BitLocker/LUKS)", + "disks_smart": "Habilitar supervisión S.M.A.R.T.", + "disks_hidden": "Particiones ocultas", + "disks_hidden_hint": "Letras de unidad o puntos de montaje separados por comas", + "quotas_title": "Cuotas de recursos", + "quotas_hint": "Define cuotas de CPU, RAM, ancho de banda y disco por usuario para el dispositivo seleccionado.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Límite de ancho de banda (Mbps)", + "quotas_bandwidth_hint": "0 = ilimitado", + "quotas_disk_quota": "Cuota de disco (GB)", + "quotas_disk_hint": "0 = ilimitado", + "quotas_process_whitelist": "Lista de procesos permitidos (uno por línea)", + "quotas_process_hint": "p. ej. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Solo lista permitida", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "Panel", + "subtitle": "Resumen de su servidor RustDesk", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "import_flow": "Import Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "No se encontraron dispositivos", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Status", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Cargando...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this item?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write" + }, + "updates": { + "tab_title": "Updates", + "title": "Panel", + "desc": "Descargue una copia de seguridad completa de la configuración de su consola, usuarios, grupos y ajustes. Los datos de peers del servidor Go se incluyen cuando el backend BetterDesk está activo.", + "current_version": "Versión instalada", + "latest_version": "Latest version", + "status": "Estado", + "check_now": "Verificar ahora", + "checking": "Verificando...", + "up_to_date": "Actualizado", + "update_available": "Actualización disponible", + "changelog": "Release Notes", + "no_changelog": "No hay notas de versión disponibles", + "files_changed": "Archivos modificados", + "files": "Archivos", + "changes_unavailable": "No se pudo cargar la lista de cambios. Aun así puedes instalar la actualización.", + "create_backup": "Crear copia de seguridad antes de actualizar", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Instalando actualización...", + "creating_backup": "Creando copia de seguridad...", + "downloading": "Descargando archivos...", + "install_success": "Actualización instalada correctamente. La consola se reiniciará...", + "install_failed": "La instalación de la actualización falló", + "restarting": "Esperando el reinicio de la consola...", + "restart_complete": "Consola reiniciada correctamente", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "No se seleccionó versión de actualización. Busca actualizaciones primero.", + "backups_title": "Copias de seguridad de actualización", + "backups_desc": "Copias previas creadas automáticamente antes de cada actualización", + "no_backups": "No se encontraron copias de seguridad de actualización", + "restore": "Restore", + "restore_confirm": "¿Está seguro de que desea restaurar desde esta copia de seguridad? Las secciones seleccionadas serán sobrescritas.", + "restore_success": "Copia de seguridad restaurada correctamente. Algunos cambios pueden requerir recargar la página.", + "baseline_set": "Referencia establecida", + "commits_behind": "commits por detrás", + "total_files": "Archivos totales", + "applied": "Applied", + "failed": "Fallido", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Servidor Go", + "component_agent": "Agent", + "component_scripts": "Scripts y Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Comprobando Go...", + "go_not_found": "Go no está instalado", + "go_check_failed": "No se pudo comprobar la disponibilidad de Go", + "server_building": "Compilando servidor Go... Esto puede tardar unos minutos.", + "server_built": "Binario del servidor compilado", + "server_build_failed": "Compilación del servidor fallida", + "server_stale_title": "Binario del servidor obsoleto", + "server_stale_desc": "El código fuente del servidor Go se actualizó, pero el binario en ejecución no se reconstruyó. Reconstrúyelo ahora para aplicar actualizaciones de seguridad y bibliotecas.", + "rebuild_server": "Reconstruir binario del servidor", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Binario del servidor reconstruido y reiniciado", + "rebuild_server_failed": "No se pudo reconstruir el binario del servidor", + "server_deployed": "Binario del servidor desplegado", + "server_deploy_failed": "Despliegue del servidor fallido", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Descargando código fuente del servidor...", + "delete": "Eliminar", + "delete_confirm": "¿Eliminar permanentemente la copia {name}? Esta acción no se puede deshacer.", + "delete_success": "Copia de seguridad eliminada", + "delete_failed": "No se pudo eliminar la copia de seguridad", + "retention_label": "Conservar las N copias más recientes", + "retention_hint": "Las copias antiguas se eliminan automáticamente después de cada actualización. Usa 0 para conservarlas todas.", + "retention_saved": "Configuración de retención guardada", + "retention_invalid": "La retención debe ser un entero entre 0 y 1000", + "retention_required_for_prune": "Primero establece un valor de retención mayor que 0", + "prune_now": "Apply now", + "prune_confirm": "¿Conservar solo las {n} copias más recientes y eliminar el resto?", + "prune_done": "{n} copia(s) eliminada(s)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Método de actualización", + "strategy_download": "Descargar binario precompilado", + "strategy_compile": "Compilar desde fuentes", + "both_available": "Descargar y compilar", + "download_available": "Descarga disponible", + "no_method": "Sin método de actualización", + "no_release": "No release", + "available": "Disponible", + "server_downloading": "Descargando binario del servidor...", + "server_downloaded": "Binario del servidor descargado", + "server_download_failed": "Descarga del binario del servidor fallida", + "server_download_note": "Se descargará un binario precompilado desde GitHub Releases. Normalmente tarda menos de un minuto.", + "install_go_hint": "Instala Go desde https://go.dev/dl/ para habilitar la compilación, o publica una release con binarios precompilados", + "strategy_install_go": "Instalar Go automáticamente y compilar", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Reconstrucción automática lista", + "toolchain_ready": "Toolchain instalada", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Descargando toolchain de Go...", + "toolchain_failed": "Instalación de la toolchain de Go fallida", + "modal_title": "Instalando actualización", + "modal_done_title": "Actualización completada", + "modal_close": "Cerrar", + "modal_reload_now": "Recargar consola", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Archivos de consola", + "phase_server": "Servidor Go", + "phase_restart": "Reinicio", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Copia de seguridad omitida (elección del usuario)", + "server_skipped": "Servidor Go omitido", + "server_not_selected": "Go server not selected", + "server_processing": "Procesando actualización del servidor Go...", + "no_restart_needed": "No se requiere reinicio", + "complete": "Actualización aplicada", + "complete_summary": "La actualización se aplicó correctamente.", + "complete_with_errors": "La actualización terminó, pero algunos pasos fallaron. Consulta los detalles abajo.", + "modal_done_with_errors_title": "Actualización terminada con errores", + "console_will_restart": "El proceso de consola se reiniciará ahora...", + "restart_complete_msg": "La consola terminó de reiniciarse. Haz clic en Recargar para cargar la nueva versión. La página se recargará automáticamente en 8 segundos.", + "refresh_recommended": "Los recursos estáticos cambiaron — recarga la página para ver la nueva interfaz.", + "confirm_title": "Aplicar actualización", + "confirm_with_backup": "Se creará automáticamente una copia de seguridad previa.", + "confirm_no_backup": "No se creará copia de seguridad (continúa bajo tu propio riesgo)." + }, + "permissions": { + "title": "Permisos", + "subtitle": "Administrar permisos granulares de roles y anulaciones", + "info_title": "Permisos basados en roles", + "info_desc": "Los roles predeterminados reciben permisos predefinidos. Puedes anular permisos individuales por rol sin cambiar el rol base.", + "select_role": "Seleccionar rol", + "select_role_placeholder": "Elige un rol...", + "reset_overrides": "Restablecer anulaciones", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Nivel de servidor", + "custom": "Custom", + "default": "Default", + "revert": "Revertir", + "saved": "Permiso guardado", + "reverted": "Anulación revertida", + "all_reverted": "Todas las anulaciones revertidas", + "confirm_reset": "¿Restablecer todas las anulaciones de permisos para este rol?", + "empty_title": "Selecciona un rol", + "empty_desc": "Elige un rol a la izquierda para ver sus permisos.", + "locked_title": "Super Admin", + "locked_desc": "Este rol está protegido y solo puede cambiarse mediante la asignación predeterminada.", + "cat_device": "Dispositivos", + "cat_user": "Users", + "cat_server": "Administración del servidor", + "cat_org": "Organizaciones", + "cat_audit": "Auditoría", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Ver dispositivos", + "perm_device_connect": "Conectar con dispositivos", + "perm_device_edit": "Editar dispositivos", + "perm_device_delete": "Eliminar dispositivos", + "perm_device_ban": "Bloquear dispositivos", + "perm_device_change_id": "Cambiar ID de dispositivo", + "perm_user_view": "Ver usuarios", + "perm_user_create": "Crear usuarios", + "perm_user_edit": "Editar usuarios", + "perm_user_delete": "Eliminar usuarios", + "perm_server_config": "Configurar servidor", + "perm_server_keys": "Administrar claves del servidor", + "perm_org_create": "Crear organizaciones", + "perm_org_edit": "Editar organizaciones", + "perm_org_delete": "Eliminar organizaciones", + "perm_org_manage_users": "Administrar usuarios de organización", + "perm_org_manage_devices": "Administrar dispositivos de organización", + "perm_audit_view": "Ver auditoría", + "perm_metrics_view": "Ver métricas", + "perm_blocklist_edit": "Editar lista de bloqueo", + "perm_cdap_view": "Ver CDAP", + "perm_cdap_command": "Ejecutar comandos CDAP", + "perm_cdap_terminal": "Usar terminal CDAP", + "perm_cdap_files": "Administrar archivos CDAP", + "perm_enrollment_manage": "Administrar registros", + "perm_enrollment_approve": "Aprobar registros", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Editar marca", + "perm_server_attestation": "Certificación de rendimiento del servidor" + }, + "notifications": { + "title": "Notificaciones", + "empty": "No hay notificaciones nuevas", + "mark_all_read": "Marcar todo como leído", + "see_all": "Ver todas las solicitudes de ayuda", + "help_request": "Solicitud de ayuda", + "just_now": "just now" + }, + "accessibility": { + "title": "Accesibilidad", + "subtitle": "Ajusta la consola a tu visión, movimiento y lectura.", + "close": "Cerrar menú de accesibilidad", + "profiles": "Perfiles rápidos", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Texto más grande, alto contraste y foco visible.", + "profile_dyslexia": "Comodidad de lectura", + "profile_dyslexia_hint": "Fuente legible y espaciado más amplio.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reduce transiciones y pausa animaciones.", + "profile_color_assist": "Ayuda de color", + "profile_color_assist_hint": "Filtro de color, etiquetas y enlaces resaltados.", + "reading": "Lectura", + "font_size": "Tamaño del texto", + "line_height": "Altura de línea", + "letter_spacing": "Espaciado de letras", + "word_spacing": "Espaciado de palabras", + "readable_font": "Fuente legible", + "readable_font_hint": "Usa formas de letras amplias y familiares.", + "dyslexia_spacing": "Espaciado para dislexia", + "dyslexia_spacing_hint": "Agrega espaciado adicional para textos largos.", + "visual": "Visual", + "contrast": "Contraste", + "contrast_normal": "Normal", + "contrast_high_dark": "Alto contraste oscuro", + "contrast_high_light": "Alto contraste claro", + "contrast_yellow_black": "Amarillo sobre negro", + "color_filter": "Filtro de visión de color", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturación de color", + "underline_links": "Subrayar enlaces", + "underline_links_hint": "Hace visibles los enlaces sin depender del color.", + "highlight_links": "Resaltar acciones", + "highlight_links_hint": "Dibuja un contorno alrededor de enlaces y botones.", + "highlight_headings": "Resaltar encabezados", + "highlight_headings_hint": "Marca los encabezados de sección con una barra de color.", + "hide_media": "Dim media", + "hide_media_hint": "Atenúa imágenes, vídeos y áreas de canvas.", + "interaction": "Interacción", + "strong_focus": "Foco reforzado", + "strong_focus_hint": "Muestra un contorno amplio para el foco del teclado.", + "large_cursor": "Cursor grande", + "large_cursor_hint": "Usa un puntero más grande con alto contraste.", + "reduce_motion": "Reducir movimiento", + "reduce_motion_hint": "Acorta transiciones y desplazamiento suave.", + "pause_animations": "Pausar animaciones", + "pause_animations_hint": "Detiene movimientos visuales repetitivos.", + "reading_guide": "Guía de lectura", + "reading_guide_hint": "Sigue el puntero con una línea luminosa.", + "reading_mask": "Máscara de lectura", + "reading_mask_hint": "Oscurece el contenido por encima y por debajo del puntero.", + "preview": "Vista previa", + "preview_title": "Vista previa del espacio del operador", + "preview_text": "Comprueba si el texto, enlaces, controles y etiquetas de estado son cómodos de leer antes de cerrar este menú.", + "preview_link": "Enlace a detalles del dispositivo", + "preview_status": "Online", + "preview_button": "Acción principal", + "preview_secondary": "Secondary", + "reset": "Restablecer", + "done": "Listo" + }, + "server_mgmt": { + "title": "Gestión del servidor", + "subtitle": "Panel tipo Cockpit para el host de la consola BetterDesk (BETA).", + "beta_tooltip": "Función beta — en desarrollo activo.", + "notice_title": "Función beta", + "notice_body": "Estas herramientas se ejecutan en el host donde corre el proceso de la consola BetterDesk. Todas las operaciones son auditadas.", + "tab_overview": "Resumen", + "tab_terminal": "Terminal", + "tab_files": "Archivos", + "tab_services": "Servicios", + "cpu": "CPU", + "memory": "Memoria", + "load": "Carga promedio", + "disks": "Discos", + "history": "Historial (últimas 60 muestras)", + "host_info": "Info del host", + "cores": "núcleos", + "uptime": "Tiempo activo", + "no_disks": "No hay datos de disco disponibles", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY disponible", + "term_connect": "Conectar", + "term_disconnect": "Desconectar", + "term_clear": "Limpiar", + "term_status": "Status", + "term_connecting": "Conectando…", + "term_connected": "Conectado", + "term_disconnected": "Desconectado", + "term_error": "Error de conexión", + "term_warning": "Los comandos se ejecutan como el usuario propietario del proceso de consola. Agrega una regla sudoers para permitir elevación.", + "term_hint": "Consejo: escribe `sudo -i` para obtener privilegios root (requiere configuración sudoers).", + "term_lib_failed": "No se pudo cargar la biblioteca de terminal", + "files_up": "Subir un nivel", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Nombre", + "files_size": "Tamaño", + "files_perms": "Mode", + "files_mtime": "Modificado", + "files_rename": "Renombrar", + "files_rename_prompt": "New name:", + "files_empty": "Directorio vacío", + "files_error": "No se pudo listar el directorio", + "read_failed": "No se pudo leer el archivo", + "save_failed": "No se pudo guardar el archivo", + "rename_failed": "Error al renombrar", + "delete_failed": "Error al eliminar", + "delete_confirm": "¿Eliminar esta entrada?", + "mkdir_prompt": "Nombre de la nueva carpeta:", + "mkdir_failed": "No se pudo crear la carpeta", + "file_saved": "Archivo guardado", + "binary_warn": "Archivo binario — solo vista previa", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Buscar servicios...", + "svc_name": "Servicio", + "svc_state": "Estado", + "svc_description": "Descripción", + "svc_empty": "No se encontraron servicios", + "svc_load_failed": "No se pudieron cargar los servicios", + "svc_action_failed": "Acción fallida", + "svc_confirm": "Run", + "svc_start": "Iniciar", + "svc_stop": "Detener", + "svc_restart": "Reiniciar", + "svc_reload": "Recargar", + "svc_enable": "Habilitar", + "svc_disable": "Deshabilitar", + "svc_status": "Status" + }, + "download": { + "title": "Descargar BetterDesk Agent", + "choose_platform": "Elegir plataforma", + "choose_platform_hint": "Selecciona el instalador correspondiente a tu sistema operativo.", + "download": "Descargar", + "building": "Compilando…", + "failed": "Compilación fallida", + "need_help": "¿Necesitas ayuda?", + "powered_by": "Desarrollado por" + }, + "server_attestation": { + "title": "Certificación del servidor", + "subtitle": "Benchmark de rendimiento que determina la capacidad de conexiones remotas simultáneas en un umbral del 80% de CPU, RAM y disco.", + "warning_title": "Prueba de carga", + "warning_body": "El benchmark simula conexiones WebSocket paralelas a los servidores de señal y retransmisión. Ejecutar en horas de baja actividad — esta prueba carga producción.", + "run_benchmark": "Ejecutar benchmark", + "abort": "Cancelar", + "download_report": "Descargar informe JSON", + "last_test": "Última prueba", + "no_test_yet": "Aún no se ha ejecutado ningún benchmark", + "max_connections": "Conexiones máximas", + "threshold_80": "Umbral del 80% — métricas finales", + "disk": "Disco", + "ramp_chart": "Gráfico de rampa de carga", + "connections": "Conexiones", + "connections_short": "con.", + "tier_guide_title": "¿Qué significa cada nivel?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "SIN CALIFICAR", + "tier_bronze_desc": "1–25 conexiones simultáneas — VPS pequeño (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 conexiones — servidor de gama media (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 conexiones — servidor de alto rendimiento (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 conexiones — infraestructura empresarial (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ conexiones — clase turbo: hardware dedicado, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Nota: en Docker, las métricas de CPU/RAM pueden reflejar los límites del contenedor en lugar del host físico.", + "badge_tooltip": "Certificación del servidor BetterDesk — certificación de rendimiento del servidor", + "confirm_run": "Este benchmark realizará una prueba de carga del servidor con conexiones simuladas. ¿Continuar?", + "starting": "Iniciando…", + "complete": "Benchmark completado", + "signal_peers": "Pares de señal", + "relay_sessions": "Sesiones de retransmisión", + "page_error": "Error al cargar la página de certificación del servidor", + "mode_estimated": "Estimado (WebSocket inaccesible)", + "incomplete": "Benchmark completado sin nivel válido" + }, + "commercialization": { + "title": "Comercialización", + "subtitle": "Paquetes de soporte, sesiones facturables e informes", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Función temprana — facturación y paquetes en desarrollo activo.", + "tabs": { + "overview": "Resumen", + "packages": "Paquetes y contratos", + "sessions": "Sesiones", + "reports": "Informes", + "settings": "Configuración avanzada" }, - "branding": { - "identity_title": "Identidad de marca", - "identity_desc": "Personalice el nombre y la descripción de la aplicación que se muestran en la consola", - "app_name": "Nombre de la aplicación", - "app_description": "Descripción de la aplicación", - "logo_title": "Logotipo", - "logo_desc": "Elija cómo aparece su logotipo en la barra lateral y la página de inicio de sesión", - "logo_type_icon": "Icono Material", - "logo_type_svg": "Código SVG", - "logo_type_image": "URL de imagen", - "logo_icon_name": "Nombre del icono", - "logo_icon_hint": "Introduzca un nombre de Material Icons (ej: dns, cloud, security). Ver fonts.google.com/icons", - "logo_svg_code": "Código SVG", - "logo_svg_hint": "Pegue su marcado SVG aquí. Soporta elementos completos con rutas y estilos.", - "logo_image_upload": "Subir imagen", - "logo_image_choose": "Elegir archivo de imagen", - "logo_image_hint": "PNG, JPG, GIF, WebP o SVG. Máx. 1,5 MB. La imagen se almacena como datos base64.", - "logo_image_url": "Datos / URL de imagen", - "logo_image_url_hint": "Se rellena automáticamente al subir o pegue una URL manualmente.", - "logo_image_too_large": "La imagen es demasiado grande. Tamaño máximo: 1,5 MB.", - "logo_image_invalid_type": "Tipo de archivo no válido. Use PNG, JPG, GIF, WebP o SVG.", - "preview": "Vista previa", - "colors_title": "Esquema de colores", - "colors_desc": "Personalice la paleta de colores. Deje vacío para los valores predeterminados.", - "colors_backgrounds": "Fondos", - "colors_text": "Texto", - "colors_accents": "Colores de acento", - "colors_borders": "Bordes", - "import_export_title": "Importar / exportar", - "import_export_desc": "Guarde su tema como archivo JSON o importe uno de otra instancia", - "export_theme": "Exportar tema", - "import_theme": "Importar tema", - "reset_defaults": "Restablecer valores predeterminados", - "save_branding": "Guardar marca", - "saved": "Guardado", - "exported": "Tema exportado", - "imported": "Tema importado correctamente. Recargando...", - "import_error": "Error al importar el tema. Formato de archivo no válido.", - "reset_confirm": "¿Está seguro de que desea restablecer la marca a los valores predeterminados? Esta acción no se puede deshacer.", - "reset_success": "Marca restablecida a valores predeterminados. Recargando...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Texto principal mostrado como logotipo de la marca", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Texto secundario bajo el logotipo (por ejemplo, nombre del producto o lema)", - "logo_upload_success": "Logotipo subido correctamente.", - "typography_title": "Typography", - "typography_desc": "Elige fuentes para encabezados y texto. Las fuentes se descargarán al servidor para alojamiento propio.", - "font_heading": "Fuente de encabezados", - "font_heading_hint": "Usada para encabezados (H1-H6) y logotipo de texto", - "font_body": "Body Font", - "font_body_hint": "Usada para texto del cuerpo y elementos de interfaz", - "font_search_placeholder": "Buscar fuentes...", - "font_system_default": "Predeterminada del sistema", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "Fuentes descargadas en el servidor", - "agent_desc": "Personaliza el portal de descarga de agentes público que se muestra a los usuarios finales.", - "agent_show_powered": "Mostrar «Desarrollado por BetterDesk»", - "agent_show_powered_hint": "Mostrar la atribución de BetterDesk en el pie de página del portal de descargas.", - "agent_title": "Página de descarga del agente", - "background_desc": "Establece un fondo de pantalla, degradado o color sólido para la consola. Las tarjetas flotan sobre él.", - "background_title": "Fondo y apariencia", - "bg_blur": "Desenfoque de fondo", - "bg_color": "Color de fondo", - "bg_gradient": "Degradado CSS", - "bg_gradient_hint": "Cualquier degradado CSS válido, p. ej. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_choose": "Elegir archivo de imagen", - "bg_image_hint": "PNG, JPG, WebP o GIF. Máx. 8 MB. Almacenado en el servidor.", - "bg_image_invalid_type": "Tipo de archivo no válido. Use PNG, JPG, WebP o GIF.", - "bg_image_too_large": "La imagen es demasiado grande. El tamaño máximo es 8 MB.", - "bg_image_upload": "Subir imagen de fondo", - "bg_image_url": "Ruta de imagen / URL", - "bg_overlay": "Superposición oscura", - "bg_overlay_hint": "Oscurece el fondo para mejorar la legibilidad del texto.", - "bg_size": "Tamaño de imagen", - "bg_size_auto": "Automático (original)", - "bg_size_contain": "Contener (ajustar)", - "bg_size_cover": "Cubrir (llenar pantalla)", - "bg_type_color": "Color sólido", - "bg_type_gradient": "Degradado", - "bg_type_image": "Imagen", - "bg_type_none": "Ninguno", - "bg_upload_success": "Imagen de fondo subida correctamente.", - "custom_css_desc": "Avanzado: inserta CSS personalizado aplicado en toda la consola y la página de inicio de sesión.", - "custom_css_hint": "Úsalo con cuidado. Las reglas inválidas o no seguras se eliminan. Máximo 20.000 caracteres.", - "custom_css_title": "CSS personalizado", - "footer_desc": "Agrega una línea de pie de página personalizada que se muestra en la pantalla de inicio de sesión y en la barra lateral de la consola.", - "footer_text": "Texto del pie de página", - "footer_text_hint": "p. ej. un aviso de copyright o el nombre de la empresa.", - "footer_title": "Pie de página y derechos de autor", - "login_bg_inherit": "Igual que la consola", - "login_desc": "Personaliza el título, subtítulo y fondo de la pantalla de inicio de sesión.", - "login_heading": "Encabezado de inicio de sesión", - "login_heading_placeholder": "Bienvenido de nuevo", - "login_subheading": "Subtítulo de inicio de sesión", - "login_subheading_placeholder": "Iniciar sesión en su cuenta", - "login_title": "Página de inicio de sesión", - "powered_by": "Desarrollado por", - "show_powered": "Mostrar atribución «BetterDesk»", - "show_powered_hint": "Mostrar el nombre y la versión de BetterDesk en el pie de página de inicio de sesión y en la barra lateral." + "clock": { + "title": "Hora del servidor (NTP)", + "check_now": "Comprobar ahora", + "unsynced": "El reloj del servidor no está sincronizado — las sesiones facturables pueden bloquearse" }, - "device_detail": { - "tab_overview": "Resumen", - "tab_tags": "Etiquetas y notas", - "tab_actions": "Acciones", - "section_identity": "Identidad", - "section_network": "Red", - "section_timestamps": "Marcas de tiempo", - "section_connect": "Conexión", - "section_manage": "Gestión", - "folder": "Carpeta", - "status_tier": "Nivel de estado", - "device_banned": "Este dispositivo está bloqueado", - "no_reason": "Sin motivo proporcionado", - "tags": "Etiquetas", - "no_tags": "No hay etiquetas asignadas a este dispositivo", - "tag_placeholder": "Introduzca un nombre de etiqueta...", - "add_tag": "Añadir", - "tag_exists": "Esta etiqueta ya existe", - "notes": "Notas", - "notes_placeholder": "Añada notas sobre este dispositivo...", - "danger_zone": "Zona de peligro", - "action_connect_web": "Remoto web", - "action_connect_web_desc": "Conectar vía escritorio remoto del navegador", - "action_native_remote": "Remote BetterDesk", - "action_native_remote_desc": "Transmisión JPEG nativa — sin plugins necesarios", - "action_connect_desktop": "Cliente de escritorio", - "action_connect_desktop_desc": "Abrir en la aplicación de escritorio", - "action_change_id_desc": "Cambiar el ID de registro del dispositivo", - "action_ban_desc": "Impedir que este dispositivo se conecte", - "action_unban_desc": "Permitir que este dispositivo se conecte de nuevo", - "action_delete_desc": "Eliminar permanentemente este dispositivo", - "tab_hardware": "Hardware", - "tab_metrics": "Métricas", - "section_system": "Sistema", - "section_cpu": "Procesador", - "section_memory": "Memoria", - "section_displays": "Pantallas", - "section_encoding": "Capacidades de codificación", - "section_live_metrics": "Métricas en vivo", - "section_current_usage": "Uso actual", - "section_usage_history": "Historial de uso", - "os": "Sistema operativo", - "version": "Versión", - "cpu_model": "Modelo de CPU", - "cpu_cores": "Núcleos de CPU", - "cpu_freq": "Frecuencia de CPU", - "total_memory": "Memoria total", - "metric_memory": "Memoria", - "metric_disk": "Disco", - "metrics_updated": "Actualizado", - "device_groups": "Grupos", - "no_sysinfo": "No hay información de hardware disponible", - "no_sysinfo_hint": "La información del sistema aparecerá después de que el dispositivo envíe un informe de sysinfo", - "no_metrics": "No hay métricas disponibles", - "no_metrics_hint": "Las métricas aparecerán después de que el dispositivo envíe informes de latido", - "chart_oldest": "← Más antiguo", - "chart_newest": "Más reciente →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Archivos", - "agent_lazy_hint": "Haz clic en esta pestaña para cargar datos en vivo del agente", - "agent_offline": "El agente está sin conexión", - "agent_timeout": "El agente no respondió a tiempo", - "agent_error": "No se pudieron cargar datos del agente", - "service_name": "Name", - "service_display": "Nombre visible", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Sesiones facturables activas" }, - "inventory": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "device_id": "ID del dispositivo", - "hostname": "Nombre de host", - "os": "Sistema operativo", - "cpu": "Processor", - "cpu_cores": "Núcleos de CPU", - "cpu_usage": "Uso de CPU", - "memory": "Memory", - "memory_total": "Memoria total", - "memory_used": "Memoria usada", - "memory_available": "Memoria disponible", - "memory_usage": "Uso de memoria", - "swap": "Swap", - "disks": "Discos", - "disk_count": "Cantidad de discos", - "network": "Red", - "network_interfaces": "Interfaces de red", - "software": "Software", - "software_count": "Software instalado", - "system": "Sistema", - "kernel": "Kernel", - "architecture": "Arquitectura", - "uptime": "Uptime", - "frequency": "Frecuencia", - "physical_cores": "Núcleos físicos", - "logical_cores": "Núcleos lógicos", - "model": "Modelo", - "usage": "Uso", - "total": "Total", - "used": "Usado", - "available": "Disponible", - "mount_point": "Punto de montaje", - "removable": "Extraíble", - "mac_address": "Dirección MAC", - "ip_addresses": "Direcciones IP", - "traffic": "Tráfico", - "collect_now": "Recopilar ahora", - "collector_running": "Recopilación en curso", - "collector_stopped": "Recopilación detenida", - "last_upload": "Última subida", - "total_uploads": "Total", - "last_seen": "Visto por última vez", - "collected_at": "Recopilado el", - "no_data": "No hardware data available", - "no_devices": "No se encontraron dispositivos con datos de inventario", - "detail_title": "Detalle del inventario del dispositivo", - "telemetry": "Telemetría", - "view_detail": "Ver detalle", - "export": "Exportar", - "refresh": "Actualizar" + "packages": { + "new": "Nuevo paquete", + "name": "Nombre", + "included_minutes": "Minutos incluidos", + "overage_rate": "Tarifa de exceso / h", + "currency": "Moneda", + "heading": "Paquetes de soporte", + "prompt_name": "Nombre del paquete", + "create_title": "Nuevo paquete para organización", + "create_submit": "Crear paquete", + "select_org": "Organización", + "select_org_placeholder": "Seleccionar organización…" }, - "tickets": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "create": "Crear", - "edit": "Editar", - "delete": "Eliminar", - "detail": "Detalle del ticket", - "ticket_id": "ID del ticket", - "ticket_title": "Título", - "description": "Descripción", - "status": "Estado", - "priority": "Prioridad", - "category": "Categoría", - "assigned_to": "Asignado a", - "created_by": "Creado por", - "device": "Dispositivo", - "sla_due": "Vencimiento SLA", - "created_at": "Creado", - "updated_at": "Actualizado", - "resolved_at": "Resuelto", - "closed_at": "Cerrado", - "status_open": "Abierto", - "status_in_progress": "En progreso", - "status_resolved": "Resuelto", - "status_closed": "Cerrado", - "priority_low": "Baja", - "priority_medium": "Media", - "priority_high": "Alta", - "priority_critical": "Crítica", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Red", - "category_access": "Acceso", - "category_other": "Otro", - "comments": "Comentarios", - "add_comment": "Añadir comentario", - "comment_placeholder": "Escriba un comentario...", - "internal_note": "Nota interna (no visible para usuarios finales)", - "attachments": "Adjuntos", - "upload_attachment": "Subir adjunto", - "download": "Descargar clave", - "connect_device": "Conectar al dispositivo", - "no_tickets": "No se encontraron tickets", - "no_comments": "Sin comentarios aún", - "no_attachments": "Sin adjuntos", - "title_required": "El título es obligatorio", - "delete_confirm": "¿Está seguro de que desea eliminar el ticket #{id}?", - "delete_success": "Dispositivo eliminado correctamente", - "created_success": "Ticket creado correctamente", - "updated_success": "Ticket actualizado correctamente", - "sla_overdue": "SLA vencido", - "filter_all": "Todos", - "search_placeholder": "Buscar dispositivos...", - "assign_to_me": "Asignarme", - "unassign": "Desasignar", - "stats_total": "Total", - "stats_open": "Abiertos", - "stats_in_progress": "En progreso", - "stats_resolved": "Resueltos", - "stats_closed": "Cerrados" - }, - "activity": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "device": "Dispositivo", - "hostname": "Nombre de host", - "sessions": "Sesiones", - "idle_time": "Tiempo inactivo", - "active_time": "Tiempo activo", - "last_report": "Último informe", - "top_apps": "Aplicaciones principales", - "app_name": "Nombre de la aplicación", - "window_title": "Título de ventana", - "category": "Categoría", - "duration": "Duración", - "started_at": "Iniciado", - "ended_at": "Finalizado", - "session_count": "Cantidad de sesiones", - "total_active": "Total activo", - "total_idle": "Total inactivo", - "detail_count": "Registros detallados", - "no_data": "No hardware data available", - "no_sessions": "No hay sesiones registradas", - "filter_from": "Desde", - "filter_to": "Hasta", - "filter_apply": "Aplicar filtro", - "hours": "horas", - "minutes": "minutos", - "seconds": "segundos", - "category_browser": "Navegador", - "category_productivity": "Productividad", - "category_communication": "Comunicación", - "category_development": "Desarrollo", - "category_media": "Multimedia", - "category_gaming": "Juegos", - "category_system": "Sistema", - "category_other": "Otro", - "summary": "Resumen", - "details": "Detalles del dispositivo", - "refresh": "Actualizar", - "search": "Buscar dispositivos...", - "date_range": "Rango de fechas", - "device_id": "ID del dispositivo", - "session_start": "Inicio de sesión", - "session_end": "Fin de sesión", - "user": "Usuario", - "no_activity": "No hay actividad registrada", - "reported_at": "Reported At", - "detail": "Detalle del ticket", - "no_apps": "No hay aplicaciones" - }, - "automation": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "rules": "Reglas de alerta", - "rules_subtitle": "Definir condiciones que activan notificaciones", - "alerts": "Historial de alertas", - "alerts_subtitle": "Ver y confirmar alertas activadas", - "commands": "Comandos remotos", - "commands_subtitle": "Enviar comandos a dispositivos remotos", - "smtp": "Configuración SMTP", - "smtp_subtitle": "Ajustes de notificación por correo electrónico", - "rule_name": "Nombre de la regla", - "description": "Descripción", - "condition_type": "Tipo de condición", - "condition_op": "Operador", - "condition_value": "Umbral", - "severity": "Severidad", - "scope_device": "Dispositivo objetivo", - "scope_all": "Todos los dispositivos", - "cooldown": "Tiempo de enfriamiento (segundos)", - "notify_emails": "Correos de notificación", - "enabled": "Activado", - "disabled": "Desactivado", - "create_rule": "Crear regla", - "edit_rule": "Editar regla", - "delete_rule": "Eliminar regla", - "acknowledge": "Confirmar", - "acknowledged": "Confirmado", - "unacknowledged": "Sin confirmar", - "triggered_at": "Activado el", - "severity_info": "Información", - "severity_warning": "Advertencia", - "severity_critical": "Crítico", - "op_gt": "Mayor que", - "op_gte": "Mayor o igual", - "op_lt": "Menor que", - "op_lte": "Menor o igual", - "op_eq": "Igual a", - "op_neq": "Diferente de", - "type_cpu_usage": "Uso de CPU (%)", - "type_memory_usage": "Uso de memoria (%)", - "type_disk_usage": "Uso de disco (%)", - "type_offline_duration": "Duración sin conexión (s)", - "type_idle_duration": "Duración inactivo (s)", - "type_custom": "Personalizado", - "command_type": "Tipo de comando", - "command_payload": "Comando / Script", - "command_result": "Resultado", - "command_status": "Estado", - "send_command": "Enviar comando", - "status_pending": "Pendiente", - "status_running": "En ejecución", - "status_completed": "Completado", - "status_failed": "Fallido", - "smtp_host": "Host SMTP", - "smtp_port": "Puerto", - "smtp_secure": "Usar TLS", - "smtp_user": "Nombre de usuario", - "smtp_pass": "Contraseña", - "smtp_from": "Dirección de remitente", - "smtp_test": "Probar conexión", - "smtp_save": "Guardar configuración", - "smtp_test_success": "Conexión exitosa", - "smtp_test_failed": "Error de conexión", - "no_rules": "No hay reglas de asignación.", - "no_alerts": "No se han activado alertas", - "no_commands": "No se han enviado comandos", - "id_payload_required": "Se requieren ID de dispositivo y payload", - "no_commands_sent": "Aún no se han enviado comandos" - }, - "file_transfer": { - "title": "Panel", - "transfers": "Transferencias", - "new_transfer": "Nueva transferencia", - "upload": "Subir", - "download": "Descargar clave", - "direction": "Direction", - "filename": "Nombre del archivo", - "file_size": "Tamaño del archivo", - "mime_type": "Tipo MIME", - "progress": "Progreso", - "status": "Estado", - "device": "Dispositivo", - "initiated_by": "Iniciado por", - "created_at": "Creado", - "cancel": "Cancelar", - "cancel_confirm": "¿Está seguro de que desea cancelar esta transferencia?", - "download_file": "Descargar archivo", - "browse_files": "Explorar archivos", - "select_file": "Seleccionar archivo", - "select_device": "Seleccionar dispositivo", - "no_transfers": "No hay transferencias de archivos", - "status_pending": "Pendiente", - "status_active": "Activa", - "status_completed": "Completado", - "status_failed": "Fallido", - "status_cancelled": "Cancelada", - "bytes_transferred": "Bytes transferidos", - "chunks": "Bloques", - "transfer_started": "Transferencia iniciada", - "transfer_completed": "Transferencia completada", - "transfer_failed": "Transferencia fallida", - "transfer_cancelled": "Transferencia cancelada", - "max_file_size": "Tamaño máximo de archivo: 4 GB", - "error_too_large": "El archivo es demasiado grande", - "error_no_device": "No hay dispositivo seleccionado", - "error_no_file": "No hay archivo seleccionado" - }, - "network": { - "title": "Panel", - "targets": "Objetivos de monitoreo", - "add_target": "Añadir objetivo", - "edit_target": "Editar objetivo", - "delete_target": "Eliminar objetivo", - "delete_confirm": "¿Está seguro de que desea eliminar este objetivo?", - "target_name": "Nombre", - "host": "Host", - "port": "Puerto", - "url": "URL", - "check_type": "Tipo de verificación", - "timeout": "Tiempo de espera (ms)", - "interval": "Intervalo (ms)", - "enabled": "Activado", - "status": "Estado", - "last_check": "Última verificación", - "last_rtt": "Último RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Accesible", - "status_down": "No accesible", - "status_unknown": "Desconocido", - "check_now": "Verificar ahora", - "history": "History", - "stats": "Estadísticas", - "total_targets": "Total de objetivos", - "targets_up": "Objetivos accesibles", - "targets_down": "Objetivos no accesibles", - "type_ping": "Ping (ICMP)", - "type_tcp": "Puerto TCP", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Herramientas de red", - "ping_tool": "Prueba de ping", - "tcp_tool": "Verificación de puerto TCP", - "http_tool": "Verificación HTTP", - "dns_tool": "Resolución DNS", - "monitor_start": "Iniciar monitoreo", - "monitor_stop": "Detener monitoreo", - "monitor_running": "Monitoreo en curso", - "monitor_stopped": "Monitoreo detenido", - "no_targets": "No hay objetivos de monitoreo configurados", - "no_history": "No hay historial de verificaciones disponible", - "error_code": "Error", - "status_code": "Código de estado HTTP", - "search_targets": "Buscar objetivos...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Historial de comprobaciones", - "name_host_required": "Nombre y host son obligatorios", - "uptime": "Uptime", - "response_time": "Tiempo de respuesta", - "avg_response": "Respuesta media", - "charts": "Gráficos", - "realtime": "Tiempo real", - "response_time_ms": "Tiempo de respuesta (ms)", - "uptime_percent": "Tiempo de actividad %", - "last_24h": "Últimas 24 horas", - "last_7d": "Últimos 7 días", - "last_30d": "Últimos 30 días" - }, - "dataguard": { - "title": "Panel", - "policies": "Políticas", - "add_policy": "Añadir política", - "edit_policy": "Editar política", - "delete_policy": "Eliminar política", - "delete_confirm": "¿Está seguro de que desea eliminar esta política?", - "policy_name": "Nombre", - "policy_description": "Descripción", - "policy_desc": "Descripción de la política", - "status": "Estado", - "enabled": "Activado", - "disabled": "Desactivado", - "rules": "Reglas de alerta", - "add_rule": "Añadir regla", - "rule_type": "Tipo de regla", - "rule_type_usb": "Dispositivo USB", - "rule_type_file": "Operación de archivo", - "action": "Acción", - "action_allow": "Permitir", - "action_block": "Bloquear", - "action_log": "Solo registrar", - "filter": "Filtro", - "vid": "ID de fabricante (VID)", - "pid": "ID de producto (PID)", - "serial": "Número de serie", - "device_class": "Clase de dispositivo", - "drive_type": "Tipo de unidad", - "file_extensions": "Extensiones de archivo", - "events": "Eventos DLP", - "event_source": "Fuente", - "event_source_usb": "USB", - "event_source_file": "Archivo", - "event_type": "Tipo de evento", - "event_details": "Detalles", - "no_policies": "No hay políticas DLP configuradas", - "no_events": "No se registraron eventos DLP", - "stats": "Estadísticas", - "total_events": "Total de eventos", - "blocked_events": "Bloqueados", - "logged_events": "Registrados", - "usb_events": "Eventos USB", - "file_events": "Eventos de archivo", - "device_id": "ID del dispositivo", - "policy_matched": "Política coincidente", - "timestamp": "Marca de tiempo", - "drive_removable": "Extraíble", - "drive_fixed": "Fijo", - "drive_network": "Red", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Desconocido", - "total_policies": "Políticas totales", - "active_policies": "Políticas activas", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Políticas", - "tab_events": "Events", - "search_policies": "Buscar políticas...", - "create_policy": "Crear política", - "policy_type": "Tipo de política", - "scope": "Scope", - "events_count": "Events", - "search_events": "Buscar eventos...", - "event_time": "Event Time", - "device": "Dispositivo", - "policy": "Política", - "detail": "Detalle del ticket", - "scope_help": "IDs de dispositivos separados por comas o vacío para todos", - "scope_all": "Todos los dispositivos", - "active": "Activo", - "type_file_type": "Tipo de archivo", - "type_usb": "USB", - "type_clipboard": "Portapapeles", - "type_screen_share": "Compartir pantalla", - "type_file_transfer": "Transferencia de archivos" + "sessions": { + "device": "Dispositivo", + "operator": "Operador", + "duration": "Duración", + "phase": "Fase", + "amount": "Importe" }, "reports": { - "title": "Panel", - "generate": "Generar configuración", - "generate_csv": "Exportar CSV", - "report_type": "Tipo de informe", - "type_devices": "Resumen de dispositivos", - "type_activity": "Resumen de actividad", - "type_security": "Informe de seguridad", - "type_tickets": "Informe de tickets", - "type_network": "Informe de red", - "type_inventory": "Informe de inventario", - "type_alerts": "Informe de alertas", - "saved": "Guardado", - "save_report": "Guardar informe", - "delete_report": "Eliminar informe", - "delete_confirm": "¿Está seguro de que desea eliminar este informe guardado?", - "no_saved": "No hay informes guardados", - "report_title": "Título", - "created_by": "Creado por", - "created_at": "Creado", - "filters": "Filtros", - "date_from": "Desde", - "date_to": "Hasta", - "device_filter": "ID del dispositivo", - "generated_at": "Generado el", - "section": "Sección de datos", - "total_devices": "Total de dispositivos", - "online": "En línea", - "offline": "Sin conexión", - "banned": "Bloqueados", - "platform_distribution": "Distribución por plataforma", - "top_applications": "Aplicaciones principales", - "total_active": "Total activo", - "total_idle": "Total inactivo", - "dlp_stats": "Estadísticas DLP", - "banned_devices": "Dispositivos bloqueados", - "audit_logs": "Registros de auditoría", - "ticket_stats": "Estadísticas de tickets", - "category_distribution": "Distribución por categoría", - "priority_distribution": "Distribución por prioridad", - "targets_status": "Estado de los objetivos", - "os_distribution": "Distribución de SO", - "avg_ram": "RAM promedio", - "alert_rules": "Reglas de alerta", - "recent_alerts": "Alertas recientes", - "tab_generate": "Generar informe", - "tab_saved": "Informes guardados", - "type_devices_desc": "Vista general de todos los dispositivos, plataformas y estados", - "type_activity_desc": "Resumen de uso de aplicaciones y tiempo inactivo", - "type_security_desc": "Acciones de bloqueo, eventos DLP y registros de auditoría", - "type_tickets_desc": "Estadísticas de tickets y rendimiento SLA", - "type_network_desc": "Objetivos de monitoreo de red y datos de disponibilidad", - "type_inventory_desc": "Resumen de inventario de hardware y software", - "type_alerts_desc": "Reglas de alerta e historial de alertas activadas", - "report_name": "Nombre del informe", - "format": "Formato", - "save": "Guardar", - "preview": "Vista previa", - "download": "Descargar clave", - "delete_saved": "Eliminar informe", - "raw_json": "Raw JSON" + "session": "Sesión", + "summary": "Resumen", + "date": "Fecha" }, - "tenants": { - "title": "Panel", - "list": "Inquilinos", - "add_tenant": "Añadir inquilino", - "edit_tenant": "Editar inquilino", - "delete_tenant": "Eliminar inquilino", - "delete_confirm": "¿Está seguro de que desea eliminar este tenant? Se eliminarán todas las asignaciones de dispositivos y usuarios.", - "name": "Name", - "slug": "Slug", - "contact_name": "Nombre de contacto", - "contact_email": "Correo de contacto", - "max_devices": "Máx. dispositivos", - "max_devices_hint": "0 = ilimitado", - "notes": "Notas", - "active": "Activo", - "inactive": "Inactivo", - "devices": "Dispositivos", - "users": "Usuarios", - "assign_device": "Asignar dispositivo", - "assign_devices": "Asignar dispositivos", - "remove_device": "Quitar dispositivo", - "assign_user": "Asignar usuario", - "remove_user": "Quitar usuario", - "no_tenants": "No hay inquilinos configurados", - "no_devices": "No se encontraron dispositivos con datos de inventario", - "no_users": "No hay usuarios asignados a este inquilino", - "stats": "Estadísticas", - "total_devices": "Total de dispositivos", - "online_devices": "Dispositivos en línea", - "total_users": "Total de usuarios", - "created_at": "Creado", - "updated_at": "Actualizado", - "slug_exists": "El slug del inquilino ya existe", - "total_tenants": "Total de inquilinos", - "active_tenants": "Inquilinos activos", - "search": "Search devices...", - "create_tenant": "Crear inquilino", - "detail": "Detalle del ticket", - "contact": "Contacto", - "enabled": "Activado", - "disabled": "Desactivado", - "max": "máx", - "info": "Información", - "status": "Estado" + "contracts": { + "title": "Contratos de organización", + "new": "Asignar paquete", + "org": "Organización", + "package": "Paquete", + "remaining": "Minutos restantes", + "status": "Estado", + "actions": "Acciones", + "suspend": "Suspender", + "activate": "Activar", + "select_org": "Seleccionar organización", + "select_package": "Seleccionar paquete", + "no_orgs": "No se encontraron organizaciones", + "no_packages": "Cree un paquete primero" }, - "registrations": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "search_placeholder": "Buscar dispositivos...", - "no_registrations": "No hay solicitudes de registro", - "col_device_id": "ID del dispositivo", - "col_hostname": "Nombre de host", - "col_platform": "Plataforma", - "col_ip": "Dirección IP", - "col_version": "Versión", - "col_status": "Estado", - "col_requested": "Solicitado", - "col_actions": "Acciones", - "status_pending": "Pendiente", - "status_approved": "Aprobado", - "status_rejected": "Rechazado", - "approve_btn": "Aprobar", - "approve_confirm": "¿Está seguro de que desea aprobar este dispositivo? Recibirá las credenciales del servidor y podrá conectarse automáticamente.", - "approved_success": "Registro de dispositivo aprobado correctamente", - "reject_btn": "Rechazar", - "reject_title": "Rechazar registro", - "reject_confirm": "¿Está seguro de que desea rechazar esta solicitud de registro?", - "reject_reason": "Motivo (opcional)", - "reject_reason_placeholder": "Introduzca el motivo del rechazo...", - "rejected_success": "Registro de dispositivo rechazado", - "delete_confirm": "¿Está seguro de que desea eliminar este registro de inscripción?", - "deleted_success": "Registro eliminado", - "enrollment_title": "Registro de dispositivos", - "enrollment_subtitle": "Solicitudes de registro pendientes de clientes de escritorio BetterDesk", - "enrollment_empty": "No hay solicitudes de registro pendientes", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Nombre visible", - "enrollment_display_name_placeholder": "Introduce un nombre para este dispositivo...", - "enrollment_sync_mode": "Modo de sincronización", - "enrollment_sync_silent": "Silencioso — telemetría mínima", - "enrollment_sync_standard": "Estándar — sincronización equilibrada", - "enrollment_sync_turbo": "Turbo — sincronización agresiva", - "enrollment_approved_success": "Registro de dispositivo aprobado", - "enrollment_rejected_success": "Registro de dispositivo rechazado", - "approve_title": "Aprobar dispositivo", - "banner_locked_mode": "La inscripción está bloqueada — solo los dispositivos vinculados a un token pueden registrarse. El modo administrado es necesario para que el operador apruebe clientes desconocidos.", - "banner_open_mode": "La inscripción está abierta — los nuevos clientes RustDesk se registran sin aprobación del operador. Establece el modo administrado en Configuración para usar esta cola.", - "enrollment_settings_link": "Configuración de inscripción", - "field_folder": "Carpeta", - "field_folder_none": "Sin carpeta", - "field_groups": "Grupos de dispositivos", - "field_name": "Nombre del dispositivo", - "field_name_placeholder": "Ingresa un nombre para este dispositivo...", - "field_sync_mode": "Modo de sincronización", - "field_tag_add_btn": "Agregar", - "field_tag_add_placeholder": "Agregar nueva etiqueta...", - "field_tags": "Etiquetas", - "field_tags_existing": "Etiquetas existentes", - "field_tags_placeholder": "Etiquetas separadas por comas (p. ej. oficina, portátil)...", - "reject_ban_hint": "El dispositivo será bloqueado y no podrá enviar nuevas solicitudes de registro.", - "reject_ban_option": "Prohibir este dispositivo", - "sync_silent": "Silencioso — telemetría mínima", - "sync_standard": "Estándar — sincronización equilibrada", - "sync_turbo": "Turbo — sincronización agresiva" + "export": { + "csv": "Exportar CSV", + "pdf": "Exportar PDF", + "sessions_csv": "Exportar sesiones CSV" }, - "backup": { - "title": "Panel", - "desc": "Descargue una copia de seguridad completa de la configuración de su consola, usuarios, grupos y ajustes. Los datos de peers del servidor Go se incluyen cuando el backend BetterDesk está activo.", - "restore_title": "Restaurar", - "restore_desc": "Suba un archivo de copia de seguridad descargado previamente para restaurar la configuración de la consola. Seleccione qué secciones restaurar a continuación.", - "stat_users": "Usuarios", - "stat_settings": "Configuración", - "stat_folders": "Carpetas", - "stat_groups": "Grupos", - "stat_strategies": "Estrategias", - "stat_backend": "Backend", - "download": "Descargar clave", - "creating": "Creando copia de seguridad...", - "download_success": "Archivo de clave descargado", - "upload": "Subir", - "restore_confirm": "¿Está seguro de que desea restaurar desde esta copia de seguridad? Las secciones seleccionadas serán sobrescritas.", - "restore_success": "Copia de seguridad restaurada correctamente. Algunos cambios pueden requerir recargar la página.", - "restored": "Restaurado", - "skipped": "Omitido", - "backup_date": "Fecha de la copia", - "opt_settings": "Configuración de la consola", - "opt_branding": "Marca / Tema", - "opt_folders": "Carpetas de dispositivos", - "opt_groups": "Grupos de usuarios y dispositivos", - "opt_addressbooks": "Libretas de direcciones", - "opt_users": "Cuentas de usuario", - "opt_users_warning": "Destructivo: reemplaza TODAS las cuentas de usuario con los datos de la copia. Puede que se cierre su sesión.", - "no_file": "No se seleccionó archivo de copia de seguridad", - "invalid_json": "Formato JSON inválido", - "invalid_format": "Archivo de copia de seguridad no válido: no es una copia de BetterDesk", - "opt_database": "Base de datos (todas las tablas)", - "opt_database_hint": "Reimporta todos los datos de la consola. Se aplica en vivo, no se requiere reinicio.", - "opt_env": "Archivo de entorno (.env)", - "opt_env_warning": "Sobreescribe SESSION_SECRET, clave API, DSN de la base de datos, puertos y configuración TLS. Requiere reinicio del servicio.", - "opt_godb": "Base de datos del servidor Go", - "opt_godb_warning": "Sobreescribe la base de datos SQLite del servidor Go (solo backend SQLite). Requiere reinicio del servicio.", - "opt_secrets": "Claves y secretos del servidor", - "opt_secrets_warning": "Sobreescribe la identidad del servidor Ed25519, la clave API y el secreto de sesión. Requiere reinicio del servicio.", - "opt_uploads": "Archivos de marca", - "opt_uploads_hint": "Logos e imágenes subidas.", - "restart_required": "Algunos componentes restaurados (claves / .env / base de datos Go) requieren un reinicio del servicio para tomar efecto.", - "restore_warning": "Restaurar los secretos, el archivo de entorno o la base de datos del servidor Go sobrescribe la identidad del servidor y requiere un reinicio del servicio después.", - "security_warning": "Esta copia de seguridad contiene secretos (claves del servidor, archivo de entorno, hashes de contraseñas y secretos 2FA). Guárdela de forma segura y nunca la comparta.", - "stat_database": "Motor de base de datos", - "stat_env": "Archivo de entorno", - "stat_keys": "Claves del servidor incluidas", - "stat_uploads": "Archivos de marca" + "report": { + "title": "Informe de trabajo", + "subtitle": "Describa el trabajo realizado durante esta sesión remota.", + "category": "Categoría", + "ticket_ref": "Referencia de ticket", + "summary": "Trabajo realizado", + "skip": "Omitir por ahora", + "submit": "Enviar informe", + "summary_required": "El resumen es obligatorio", + "saved": "Informe de trabajo guardado" }, - "cdap": { - "device_detail": "Detalle del dispositivo", - "loading": "Cargando...", - "loading_widgets": "Cargando widgets del dispositivo...", - "load_error": "No se pudieron cargar los datos del dispositivo", - "connected": "Conectado", - "disconnected": "Desconectado", - "device_offline_msg": "El dispositivo está actualmente sin conexión. Los valores de los widgets pueden estar desactualizados.", - "no_widgets": "Este dispositivo no reporta widgets.", - "no_widgets_desc": "Este dispositivo no registró un manifiesto CDAP con definiciones de widgets.", - "command_log": "Registro de comandos", - "clear_log": "Limpiar registro", - "confirm_command": "¿Ejecutar este comando?", - "select_option": "Seleccionar", - "cdap_status": "Estado CDAP", - "cdap_enabled": "CDAP habilitado", - "cdap_disabled": "CDAP deshabilitado", - "cdap_devices": "Dispositivos CDAP", - "cdap_connections": "Conexiones activas", - "send_command": "Enviar comando", - "command_sent": "Comando enviado", - "command_failed": "Error al enviar comando", - "devices_title": "Dispositivos CDAP", - "devices_subtitle": "Dispositivos conectados mediante Custom Device Application Protocol", - "stat_connected": "Conectado", - "stat_port": "Puerto", - "search_devices": "Buscar dispositivos...", - "no_devices": "No se encontraron dispositivos con datos de inventario", - "no_devices_desc": "No hay dispositivos CDAP conectados actualmente. Los dispositivos aparecerán aquí cuando se conecten al gateway.", - "gateway_disabled": "Gateway CDAP deshabilitado", - "gateway_disabled_desc": "Habilita el gateway CDAP estableciendo CDAP_ENABLED=true en la configuración del servidor.", - "gateway_active": "Activa", - "toggle_enable": "Habilitar CDAP", - "toggle_disable": "Deshabilitar CDAP", - "enabled_restart": "CDAP habilitado. Se requiere reiniciar el servidor para aplicar los cambios.", - "disabled_restart": "CDAP deshabilitado. Se requiere reiniciar el servidor para aplicar los cambios.", - "widgets": "Widgets de control", - "type_all": "Todos", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agente de SO", - "type_network": "Informe de red", - "type_camera": "Cámara", - "type_custom": "Personalizado", - "active_alerts": "Alertas activas", - "alert_fired": "Alerta activada", - "alert_cleared": "Alerta cerrada", - "no_alerts": "No se han activado alertas", - "connect_terminal": "Conectar terminal", - "table_search": "Buscar...", - "just_now": "ahora mismo", - "terminal_connecting": "Conectando con el dispositivo...", - "terminal_disconnected": "Desconectado", - "terminal_error": "La conexión del terminal falló", - "linked_devices": "Dispositivos vinculados", - "link_device": "Vincular dispositivo", - "unlink_device": "Desvincular", - "no_linked_devices": "No hay dispositivos vinculados", - "unlink_confirm": "¿Seguro que quieres desvincular este dispositivo?", - "link_prompt": "Introduce el ID del peer para vincularlo con este dispositivo:", - "connect_desktop": "Conectar vía cliente de escritorio", - "connect_video": "Conectar transmisión", - "connect_files": "Explorar archivos", - "connect_audio": "Conectar audio", - "upload_file": "Upload", - "desktop_connecting": "Conectando...", - "video_connecting": "Conectando...", - "files_connecting": "Conectando...", - "audio_connecting": "Conectando audio...", - "audio_streaming": "Audio transmitiendo", - "clipboard_in": "Portapapeles del dispositivo → navegador", - "clipboard_out": "Portapapeles del navegador → dispositivo", - "monitor_select": "Seleccionar monitor", - "keyframe_request": "Solicitar fotograma clave", - "quality_auto": "Calidad automática" + "empty": { + "packages": "Aún no hay paquetes. Cree uno con el botón de arriba.", + "contracts": "Aún no hay contratos de organización. Asigne un paquete a una organización.", + "sessions": "Aún no hay sesiones facturables registradas.", + "reports": "Aún no se han enviado informes de trabajo." }, - "desktop": { - "switch_mode": "Cambiar modo", - "console_mode": "Modo consola", - "loading": "Cargando...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Cerrar", - "widgets_mode": "Modo de widgets", - "windows_mode": "Windows", - "wallpaper": "Fondo de pantalla", - "add_widget": "Agregar widget", - "remove_widget": "Quitar widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Configurar", - "search_widgets": "Buscar widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Dispositivos", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Añada notas sobre este dispositivo...", - "search_placeholder": "Buscar dispositivos...", - "search_pages": "Pages", - "search_devices": "Search devices...", - "search_no_results": "No results", - "exit_desktop": "Salir del escritorio", - "refresh": "Actualizar", - "fullscreen": "Pantalla completa", - "help": "Help", - "widget_clock": "Clock", - "widget_device_status": "Estado de dispositivos", - "widget_server_health": "Salud del servidor", - "widget_system_stats": "Estadísticas del sistema", - "widget_device_list": "Lista de dispositivos", - "widget_quick_actions": "Acciones rápidas", - "widget_recent_activity": "Actividad reciente", - "widget_notes": "Notes", - "widget_network_monitor": "Monitor de red", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Dispositivos CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Cuadrícula de dispositivos", - "widget_multi_gauge": "Indicador múltiple", - "widget_weekly_chart": "Gráfico semanal", - "widget_quick_controls": "Controles rápidos", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Estadísticas de conexión", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sesiones de usuario", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Sin dispositivos", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Abrir", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Establecer URL", - "label_server_uptime": "Tiempo activo del servidor", - "label_merged_info": "Información combinada", - "label_with_notes": "Con notas", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Dispositivos totales", - "label_throughput": "Throughput", - "label_active_relays": "Relays activos", - "label_total_relayed": "Retransmitidos totales", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrar dispositivos", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Sin dispositivos CDAP", - "action_add_widget": "Agregar widget", - "label_merged_server_info": "Información combinada del servidor", - "wp_images": "Imágenes", - "wp_colors": "Colores sólidos", - "wp_custom_color": "Color personalizado", - "wp_fit_style": "Estilo", - "wp_fill": "Rellenar", - "wp_fit": "Ajustar", - "wp_stretch": "Estirar", - "wp_center": "Centrar", - "wp_unavailable": "Fondos no disponibles", - "wp_download_hint": "Descarga fondos para usarlos aquí.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Monitor de procesos", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Estadísticas de base de datos", - "widget_docker_containers": "Contenedores Docker", - "widget_shell_command": "Comando de shell", - "widget_device_map": "Mapa de dispositivos", - "widget_remote_connect": "Conexión remota", - "label_no_online": "No hay dispositivos en línea", - "label_no_events": "Sin eventos", - "label_event_title": "Título del evento", - "label_no_data": "Sin datos", - "label_download_speed": "Velocidad de descarga", - "label_latency": "Latency", - "label_server": "Instancia del servidor", - "label_run_test": "Run Test", - "label_testing": "Probando", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Sin contenedores", - "label_docker_unavailable": "Docker no disponible", - "label_no_command": "Sin comando", - "label_no_output": "Sin salida", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Guardar preajuste", - "label_load_preset": "Load Preset", - "label_preset_name": "Nombre del preajuste", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Ordenar automáticamente", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 columnas iguales", - "label_2col_wide": "2 columnas ancho", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Grupo de widgets", - "ungroup_widgets": "Desagrupar widgets", - "group_widgets": "Agrupar widgets", - "snap_layouts": "Diseños de ajuste", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Ajustar arriba izquierda", - "snap_top_right": "Ajustar arriba derecha", - "snap_bottom_left": "Ajustar abajo izquierda", - "snap_bottom_right": "Ajustar abajo derecha", - "aero_shake": "Sacudir ventana", - "zone_resize": "Cambiar tamaño de zona", - "zone_borders": "Bordes de zona", - "app_drawer": "Applications", - "search_apps": "Buscar apps", - "edit_shortcuts": "Editar accesos directos", - "widgets": "widgets", - "theme": "Theme" + "assign": { + "title": "Asignar paquete existente", + "submit": "Asignar" }, - "desktop_login": { - "click_to_sign_in": "Haz clic para iniciar sesión", - "username_placeholder": "Introduzca el nombre de usuario", - "password_placeholder": "Introduzca la contraseña", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Autenticación de dos factores", - "totp_subtitle": "Introduzca el código de 6 dígitos de su aplicación de autenticación", - "back_to_login": "Volver al inicio de sesión", - "fill_all_fields": "Por favor, rellene todos los campos", - "invalid_credentials": "Nombre de usuario o contraseña inválidos.", - "invalid_code": "Código no válido", - "enter_6_digits": "Introduce 6 dígitos", - "network_error": "Error de red", - "session_expired": "Sesión caducada" - }, - "tokens": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "enrollment_mode": "Modo de registro", - "mode_open": "Abierto", - "mode_open_desc": "Cualquier cliente válido puede solicitar registro.", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Total", - "active": "Activo", - "used": "Usado", - "revoked": "Token revocado", - "search_placeholder": "Buscar dispositivos...", - "status_pending": "Pendiente", - "status_active": "Activa", - "status_used": "Used", - "status_revoked": "Revocado", - "status_expired": "Expirado", - "bulk_generate": "Generar en lote", - "create": "Crear", - "edit": "Editar", - "token": "Token", - "name": "Name", - "status": "Estado", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Fecha de expiración", - "created": "Creado", - "actions": "Acciones", - "name_placeholder": "Introduzca el nombre de la carpeta", - "max_uses": "Max Uses", - "max_uses_hint": "Número máximo de usos permitidos para este token.", - "expires_in": "Expires In", - "no_expiration": "Sin caducidad", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 días", - "note": "Nota", - "note_placeholder": "Notes about this device", - "count": "Count", - "count_range": "La cantidad debe estar entre 1 y 100", - "name_prefix": "Name Prefix", - "generate": "Generar configuración", - "token_created": "Token creado correctamente", - "tokens_generated": "Tokens generados", - "copy_warning": "Copia estos tokens ahora. No se volverán a mostrar.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revocar", - "revoke_confirm": "¿Está seguro de que desea revocar este token? Esto invalidará inmediatamente todas las peticiones de API que lo utilicen.", - "revoked_success": "Token revocado correctamente", - "no_tokens": "No hay tokens de API creados", - "expired": "Expired", - "never": "Nunca", - "save": "Guardar", - "cancel": "Cancelar", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Siguiente", - "prev": "Anterior", - "skip": "Saltar tutorial", - "finish": "Finalizar", - "close": "Cerrar", - "step_of": "Paso {current} de {total}", - "console_sidebar_title": "Navegación de la consola", - "console_sidebar_text": "Usa la barra lateral para moverte entre dispositivos, usuarios, ajustes y herramientas.", - "console_expand_title": "Expandir barra lateral", - "console_expand_text": "Abre la barra lateral para ver todas las secciones y herramientas de la consola.", - "console_search_title": "Búsqueda rápida", - "console_search_text": "Usa la búsqueda para encontrar dispositivos, ajustes y acciones más rápido.", - "console_dashboard_title": "Revisar el panel", - "console_dashboard_text": "El panel resume el estado del servidor, dispositivos y actividad reciente.", - "console_devices_title": "Lista de dispositivos", - "console_devices_text": "Aquí puedes buscar, filtrar y administrar todos los dispositivos registrados.", - "console_settings_title": "Configuración", - "console_settings_text": "Gestiona seguridad, autenticación, actualizaciones e integraciones.", - "console_desktop_title": "Modo escritorio", - "console_desktop_text": "Cambia al escritorio de widgets para crear una vista operativa personalizada.", - "console_complete_title": "Consola lista", - "console_complete_text": "Ya conoces las áreas principales de la consola BetterDesk.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "La barra superior contiene controles de ventana, búsqueda y accesos rápidos.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Abre el selector de widgets para colocar nuevas tarjetas en el escritorio.", - "desktop_widgets_title": "Widgets", - "desktop_widgets_text": "Los widgets muestran datos operativos en vivo y accesos rápidos.", - "desktop_add_widget_title": "Agregar widgets", - "desktop_add_widget_text": "Elige un widget y colócalo donde lo necesites.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "Diseños de ajuste", - "desktop_snap_text": "Usa diseños de ajuste para organizar widgets rápidamente en zonas.", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Mueve, agrupa y redimensiona ventanas como en un escritorio moderno.", - "desktop_search_title": "Buscar apps", - "desktop_search_text": "Busca widgets y herramientas disponibles desde el lanzador.", - "desktop_complete_title": "Escritorio listo", - "desktop_complete_text": "El modo escritorio está configurado y listo para personalizarse.", - "devices_folders_title": "Carpetas y grupos", - "devices_folders_text": "Organiza dispositivos en carpetas o grupos dinámicos.", - "devices_search_title": "Buscar dispositivos", - "devices_search_text": "Filtra por ID, hostname, plataforma, usuario o etiquetas.", - "devices_table_title": "Tabla de dispositivos", - "devices_table_text": "Abre acciones desde el menú de cada fila o haz doble clic para ver detalles.", - "devices_complete_title": "Gestión de dispositivos lista", - "devices_complete_text": "Ahora puedes buscar, agrupar y administrar dispositivos.", - "settings_tabs_title": "Secciones de configuración", - "settings_tabs_text": "Cambia entre configuración del servidor, seguridad, autenticación e interfaz.", - "settings_content_title": "Editar configuración", - "settings_content_text": "Guarda los cambios por sección para mantener la configuración clara.", - "settings_complete_title": "Configuración lista", - "settings_complete_text": "Ya conoces las áreas principales de configuración.", - "help": "Help", - "tour_console": "Tour de la consola", - "tour_desktop": "Tour del escritorio", - "tour_devices": "Tour de dispositivos", - "tour_remote": "Tour remoto", - "tour_organization": "Tour de organización", - "tour_cdap": "Tour CDAP", - "tour_chat": "Tour del chat", - "tour_settings": "Tour de configuración", - "reset_all": "Restablecer todos los tours", - "remote_toolbar_title": "Barra remota", - "remote_toolbar_text": "Controla calidad, monitores, portapapeles, grabación y acciones de sesión.", - "remote_canvas_title": "Pantalla remota", - "remote_canvas_text": "Haz clic en el área de pantalla para enviar teclado y ratón al dispositivo.", - "remote_clipboard_title": "Portapapeles", - "remote_clipboard_text": "Sincroniza texto de forma segura entre el navegador y el dispositivo remoto.", - "remote_complete_title": "Sesión remota lista", - "remote_complete_text": "Ya puedes controlar y supervisar una sesión.", - "org_overview_title": "Resumen de organización", - "org_overview_text": "Revisa miembros, dispositivos y políticas de la organización de un vistazo.", - "org_create_title": "Crear organización", - "org_create_text": "Crea una organización nueva para separar dispositivos y usuarios.", - "org_members_title": "Administrar miembros", - "org_members_text": "Asigna usuarios y establece roles específicos de la organización.", - "org_devices_title": "Asignar dispositivos", - "org_devices_text": "Asigna dispositivos a una organización para mantener los datos dentro de su alcance.", - "org_policies_title": "Configurar políticas", - "org_policies_text": "Controla reglas de acceso, transferencia de archivos y límites de sesión.", - "org_complete_title": "Organización lista", - "org_complete_text": "La organización está preparada para usuarios, dispositivos y políticas.", - "cdap_devices_title": "Dispositivos CDAP", - "cdap_devices_text": "Ver todos los dispositivos CDAP conectados — sensores IoT, PLCs, puentes y agentes personalizados. Los indicadores verdes muestran conexiones en vivo.", - "cdap_widgets_title": "Panel de widgets", - "cdap_widgets_text": "Los widgets muestran datos en tiempo real de los dispositivos. Medidores, interruptores, LEDs, gráficos — cada tipo de widget visualiza un tipo de dato diferente.", - "cdap_commands_title": "Enviar comandos", - "cdap_commands_text": "Interactúa con los dispositivos enviando comandos. Algunos comandos requieren confirmación. El registro de comandos guarda el historial de todos los comandos enviados.", - "cdap_terminal_title": "Terminal del dispositivo", - "cdap_terminal_text": "Abre una sesión de terminal hacia los agentes CDAP para diagnósticos avanzados o configuración manual. Escribe los comandos directamente.", - "cdap_complete_title": "¡Resumen de CDAP completado!", - "cdap_complete_text": "Explora los widgets de dispositivos, envía comandos y usa el terminal o el explorador de archivos para una gestión más profunda. Los agentes CDAP reportan métricas automáticamente.", - "chat_contacts_title": "Contactos", - "chat_contacts_text": "Selecciona operadores, agentes o grupos para una conversación.", - "chat_send_title": "Enviar mensajes", - "chat_send_text": "Escribe mensajes, envía archivos y usa confirmaciones de lectura.", - "chat_file_title": "Compartir archivos", - "chat_file_text": "Los archivos se transfieren cifrados cuando el cifrado de extremo a extremo está activo.", - "chat_complete_title": "Chat listo", - "chat_complete_text": "Ya puedes comunicarte de forma segura con usuarios y operadores.", - "disable_tutorials": "Deshabilitar tutoriales", - "enable_tutorials": "Habilitar tutoriales" - }, - "help_request": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "new_request": "Nueva solicitud de ayuda", - "device": "Dispositivo", - "hostname": "Nombre de host", - "message": "Message", - "status": "Estado", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Sin solicitudes de ayuda", - "notification": "Notificación de solicitud de ayuda", - "stats_total": "Total", - "filter_all": "Todos" - }, - "organizations": { - "title": "Panel", - "create": "Crear", - "edit": "Editar", - "detail": "Detalle del ticket", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Usuarios", - "devices": "Dispositivos", - "invitations": "Invitations", - "settings": "Configuración", - "add_user": "Añadir usuario", - "assign_device": "Asignar dispositivo", - "create_invitation": "Crear invitación", - "delete_confirm": "¿Eliminar esta organización? Se eliminarán todos los usuarios, dispositivos y ajustes asociados.", - "no_orgs": "Sin organizaciones", - "no_orgs_hint": "Crea una organización para administrar usuarios y dispositivos por separado.", - "connection_policy": "Política de conexión", - "allow_file_transfer": "Permitir transferencia de archivos", - "allow_clipboard": "Permitir portapapeles", - "max_session_duration": "Duración máxima de sesión", - "role_owner": "Owner", - "role_admin": "Administrador", - "role_operator": "Operador", - "role_user": "Miembro", - "username": "Nombre de usuario", - "password": "Contraseña", - "display_name": "Nombre visible", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID del dispositivo", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Usuario asignado", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Sin usuarios", - "no_devices": "Sin dispositivos", - "no_invitations": "Sin invitaciones", - "user_added": "User added", - "user_removed": "Usuario eliminado", - "user_updated": "Usuario actualizado", - "device_assigned": "Dispositivo asignado", - "device_unassigned": "Dispositivo desasignado", - "invitation_created": "Invitación creada", - "settings_saved": "Configuración de organización guardada", - "org_deleted": "Organización eliminada", - "confirm_remove_user": "¿Quitar este usuario de la organización?", - "confirm_unassign_device": "¿Quitar este dispositivo de la organización?", - "confirm_delete_org": "¿Eliminar esta organización de forma permanente?", - "edit_role": "Editar rol", - "raw_settings": "Configuración sin procesar", - "key": "Key", - "value": "Value", - "save": "Guardar", - "policy_unattended": "Acceso no supervisado", - "policy_attended": "Acceso supervisado", - "policy_ask": "Always ask", - "expires_hours": "Caduca en horas", - "loading_failed": "No se pudieron cargar las organizaciones", - "name_slug_required": "Nombre y slug son obligatorios", - "org_created": "Organización creada", - "org_updated": "Organización actualizada", - "create_new_user": "Crear usuario nuevo", - "add_existing_user": "Agregar usuario existente", - "none_available": "none", - "select_user": "Seleccionar usuario", - "org_role": "Rol de organización", - "link_user_hint": "Vincula un usuario existente con esta organización.", - "no_available_users": "No hay usuarios disponibles", - "user_linked": "Usuario vinculado" - }, - "chat": { - "e2e_enabled": "Cifrado de extremo a extremo", - "e2e_establishing": "Estableciendo canal seguro...", - "e2e_established": "Canal seguro establecido", - "e2e_unsupported": "Cifrado E2E no compatible con este navegador", - "typing_indicator": "escribiendo...", - "read_receipt": "Leído", - "delivered": "Entregado", - "file_share": "Archivo", - "file_too_large": "Archivo demasiado grande (máx. 50MB)", - "file_encrypted": "Transferencia de archivo cifrada", - "presence_online": "En línea", - "presence_away": "Ausente", - "presence_busy": "Ocupado", - "presence_offline": "Desconectado", - "key_rotation": "Claves de seguridad renovadas", - "new_message": "Nuevo mensaje", - "title": "Panel", - "contacts": "Contactos", - "groups": "Grupos", - "no_contacts": "Aún no hay contactos", - "no_groups": "Aún no hay grupos", - "no_messages": "Aún no hay mensajes", - "no_results": "No se encontraron resultados", - "select_conversation": "Seleccione una conversación para comenzar a chatear", - "select_conversation_hint": "Selecciona una conversación para ver los mensajes", - "type_message": "Escriba un mensaje...", - "send": "Enviar", - "attach_file": "Adjuntar archivo", - "emoji": "Emoji", - "info": "Información", - "search_messages": "Buscar mensajes", - "create_group": "Crear grupo", - "group_name": "Nombre del grupo", - "group_name_placeholder": "Introduce el nombre del grupo", - "group_members": "Miembros", - "cancel": "Cancelar", - "create": "Crear", - "members": "miembros", - "today": "Hoy", - "yesterday": "Ayer", - "react": "Reaccionar", - "my_presence": "Mi estado", - "search_placeholder": "Buscar dispositivos..." - }, - "toast": { - "device_connected": "Dispositivo conectado", - "device_disconnected": "Dispositivo desconectado", - "session_started": "Sesión iniciada", - "session_ended": "Sesión finalizada", - "file_upload_complete": "Carga de archivo completada", - "settings_saved": "Configuración guardada", - "error_generic": "Se produjo un error", - "connection_lost": "Conexión perdida", - "reconnecting": "Reconectando" - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Panel" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Puerto", - "domain": "Domain", - "run": "Run", - "generate": "Generar configuración", - "encode": "Encode", - "decode": "Decode", - "send": "Enviar", - "refresh": "Actualizar", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Introduce texto...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Servidor Go", - "mac_address": "Dirección MAC", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Comprobar disponibilidad y latencia de un host", - "tcp_title": "Comprobación de puerto TCP", - "tcp_desc": "Probar conectividad de un puerto TCP", - "ssl_title": "Inspector SSL", - "ssl_desc": "Inspeccionar detalles del certificado SSL/TLS", - "http_title": "Comprobación de estado HTTP", - "http_desc": "Comprobar el estado de un endpoint HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Resolver un hostname a dirección IP", - "whois_title": "DNS Records", - "whois_desc": "Consultar registros A, AAAA, MX, TXT y NS", - "speed_title": "Speed Test", - "speed_desc": "Medir el ancho de banda de descarga", - "run_speed_test": "Ejecutar prueba de velocidad", - "wol_title": "Wake-on-LAN", - "wol_desc": "Enviar un paquete mágico para despertar un dispositivo", - "wol_sent": "Paquete mágico enviado", - "hash_title": "Generador de hashes", - "hash_desc": "Generar hashes criptográficos", - "password_title": "Generador de contraseñas", - "password_desc": "Actualizar la contraseña de su cuenta", - "jwt_title": "JWT Decoder", - "jwt_desc": "Decodificar e inspeccionar JSON Web Tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Codificar o decodificar datos Base64", - "url_title": "URL Encoder", - "url_desc": "Codificar o decodificar componentes de URL", - "processes_title": "Lista de procesos", - "processes_desc": "Mostrar procesos del sistema en ejecución", - "disk_title": "Disk Usage", - "disk_desc": "Mostrar uso de particiones de disco", - "db_title": "Estadísticas de base de datos", - "db_desc": "Mostrar estadísticas de tablas de la base de datos", - "docker_title": "Contenedores Docker", - "docker_desc": "Mostrar contenedores Docker en ejecución", - "logs_title": "Log Viewer", - "logs_desc": "Mostrar salidas recientes del registro", - "ip_address": "Dirección IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Estado", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Válido desde", - "valid_to": "Válido hasta", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "No hardware data available", - "no_docker": "No se encontraron contenedores Docker o Docker no está disponible", - "no_logs": "No hay líneas de registro disponibles" - }, - "policies": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "select_org": "Organización", - "select_org_placeholder": "Seleccionar organización...", - "select_org_first": "Seleccione una organización para ver el registro de auditoría de políticas.", - "configured": "Configurado", - "connection_title": "Política de conexión", - "connection_desc": "Controlar cómo se establecen las sesiones remotas", - "connection_mode": "Modo de conexión", - "mode_attended": "Asistido (requiere aprobación del usuario)", - "mode_unattended": "No asistido (permitir siempre)", - "mode_ask": "Preguntar siempre", - "max_session": "Duración máx. de sesión (minutos)", - "idle_lock": "Bloqueo por inactividad (minutos)", - "wallpaper_policy": "Fondo durante la sesión", - "wallpaper_show": "Mostrar", - "wallpaper_hide_session": "Ocultar durante sesión", - "wallpaper_hide_always": "Ocultar siempre", - "features_title": "Política de funciones", - "features_desc": "Habilitar o deshabilitar funciones específicas para dispositivos", - "allow_file_transfer": "Permitir transferencia de archivos", - "allow_clipboard": "Allow Clipboard", - "allow_audio": "Permitir transmisión de audio", - "allow_recording": "Permitir grabación de sesión", - "security_title": "Política de seguridad", - "security_desc": "Aplicar requisitos de seguridad para dispositivos de la organización", - "require_2fa": "Requerir 2FA para acceso no asistido", - "password_min_length": "Longitud mínima de contraseña", - "password_require_special": "Requerir caracteres especiales", - "password_max_age": "Edad máx. de contraseña (días, 0=nunca)", - "allowed_operators": "Allowed Operators", - "network_title": "Política de red", - "network_desc": "Controlar servidores relay y conexiones directas", - "block_direct_p2p": "Bloquear P2P directo (forzar relay)", - "allowed_relays": "Servidores relay permitidos (uno por línea)", - "ip_allowlist": "Lista blanca IP (CIDR, uno por línea)", - "update_title": "Política de actualización", - "update_desc": "Controlar actualizaciones automáticas y canales de actualización", - "auto_update": "Habilitar actualización automática", - "update_channel": "Canal de actualización", - "audit_title": "Cambios de políticas", - "audit_desc": "Actividad reciente de la consola", - "no_audit": "No se registraron cambios de políticas.", - "save_success": "Política guardada correctamente", - "save_failed": "No se pudo guardar la política", - "load_failed": "No se pudieron cargar las políticas", - "block_direct_p2p_hint": "Se aplica a los dispositivos de esta organización. El valor predeterminado global está en Configuración → Estrategia de conexión." - }, - "attestation": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "verified": "Verificado", - "pending": "Pending", - "failed": "Fallido", - "device_list": "Registros de atestación", - "device_list_desc": "Huellas de hardware y estado de verificación de identidad", - "col_device": "ID de dispositivo", - "col_hostname": "Nombre de host", - "col_fingerprint": "Huella", - "col_status": "Estado", - "col_last_check": "Última verificación", - "col_actions": "Acciones", - "no_records": "No se encontraron registros de atestación.", - "verify_success": "Dispositivo marcado como verificado", - "verify_failed": "No se pudo verificar el dispositivo", - "revoke_success": "Atestación del dispositivo revocada", - "revoke_failed": "No se pudo revocar la atestación" - }, - "fleet": { - "title": "Panel", - "tab_resources": "Recursos", - "tab_tasks": "Tareas", - "tab_builder": "Constructor", - "tab_compliance": "Cumplimiento", - "res_title": "Mapeo de recursos", - "res_all_types": "Todos los tipos", - "res_type_printer": "Impresora", - "res_type_network_drive": "Unidad de red", - "res_type_dns": "Servidor DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Añadir recurso", - "res_name": "Nombre del recurso", - "res_type": "Tipo", - "res_address": "Dirección / Ruta", - "res_target": "Destino", - "res_scope": "Alcance", - "res_scope_org": "Organización", - "res_scope_group": "Grupo", - "res_scope_device": "Dispositivo", - "res_scope_value": "Valor del alcance", - "res_status": "Estado", - "res_active": "Activo", - "res_inactive": "Inactivo", - "res_no_data": "No se encontraron recursos. Haga clic en 'Añadir recurso'.", - "res_confirm_delete": "¿Está seguro de que desea eliminar este recurso?", - "task_title": "Programador de tareas", - "task_all_status": "Todos los estados", - "task_status_pending": "Pendiente", - "task_status_running": "En ejecución", - "task_status_success": "Éxito", - "task_status_failed": "Fallido", - "task_search": "Buscar tareas…", - "task_create": "Crear tarea", - "task_name": "Nombre de la tarea", - "task_type": "Tipo", - "task_type_script": "Script", - "task_type_install": "Instalación", - "task_type_update": "Actualización", - "task_type_restart": "Reinicio", - "task_type_deploy": "Despliegue", - "task_type_scan": "Escaneo", - "task_targets": "Destinos", - "task_targets_help": "IDs de dispositivos o nombres de grupos, separados por comas", - "task_schedule": "Programación", - "task_schedule_once": "Una vez", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Intervalo", - "task_schedule_value": "Valor de programación", - "task_script": "Script / Comando", - "task_retries": "Reintentos", - "task_timeout": "Tiempo límite (s)", - "task_last_run": "Última ejecución", - "task_no_data": "No se encontraron tareas. Cree una nueva tarea.", - "task_confirm_delete": "¿Está seguro de que desea eliminar esta tarea?", - "task_output": "Salida de la tarea", - "task_retry": "Reintentar", - "builder_title": "Constructor de flujos de trabajo", - "builder_select_workflow": "Seleccionar flujo…", - "builder_new": "Nuevo", - "builder_save": "Guardar", - "builder_export": "Exportar", - "builder_execute": "Ejecutar", - "builder_dry_run": "Simulación", - "builder_triggers": "Disparadores", - "builder_conditions": "Condiciones", - "builder_actions": "Acciones", - "builder_results": "Resultados", - "builder_transforms": "Transformaciones", - "builder_properties": "Propiedades", - "builder_no_selection": "Seleccione un nodo para editar sus propiedades.", - "builder_node_trigger_manual": "Disparador manual", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Disparador por evento", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Reiniciar servicio", - "builder_node_action_file_deploy": "Desplegar archivo", - "builder_node_action_message": "Enviar mensaje", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Enviar alerta", - "builder_node_result_chain": "Encadenar flujo", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Nombre del flujo:", - "comp_title": "Cumplimiento de software", - "comp_compliant": "Conforme", - "comp_warning": "Advertencia", - "comp_critical": "Crítico", - "comp_score": "Puntuación media", - "comp_device": "Dispositivo", - "comp_hostname": "Nombre de host", - "comp_os": "SO", - "comp_score_col": "Puntuación", - "comp_issues": "Problemas", - "comp_last_scan": "Último escaneo", - "comp_scan": "Escanear", - "comp_scan_all": "Escanear todo", - "comp_remediate": "Remediar", - "comp_remediate_confirm": "¿Ejecutar auto-remediación en este dispositivo?", - "comp_no_data": "Sin datos de cumplimiento. Ejecute un escaneo.", - "save": "Guardar", - "cancel": "Cancelar", - "close": "Cerrar", - "edit": "Editar", - "delete": "Eliminar", - "actions": "Acciones", - "all_orgs": "Todas las organizaciones", - "select_org_placeholder": "Seleccionar organización...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Unidad de red", - "type_dns": "Servidor DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Agregar recurso", - "edit_resource": "Editar recurso", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Estado", - "col_actions": "Acciones", - "no_resources": "No resources found.", - "active": "Activo", - "inactive": "Inactivo", - "address": "Dirección / ruta", - "scope_org": "Organización", - "scope_group": "Grupo", - "scope_device": "Dispositivo objetivo", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "¿Seguro que quieres eliminar este elemento?", - "all_statuses": "Todos los estados", - "status_pending": "Pendiente", - "status_running": "En ejecución", - "status_success": "Success", - "status_failed": "Fallido", - "search_tasks": "Buscar tareas...", - "create_task": "Crear tarea", - "edit_task": "Editar tarea", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Despliegue de archivo", - "task_type_registry": "Registry", - "target_devices": "Dispositivos objetivo", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / comando", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Cargando...", - "no_output": "No hay salida disponible", - "error_loading": "Error al cargar datos", - "select_workflow": "Seleccionar flujo...", - "new_workflow": "New", - "export": "Exportar", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Disparador manual", - "node_schedule": "Schedule", - "node_event": "Disparador por evento", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Reiniciar servicio", - "node_file_deploy": "Desplegar archivo", - "node_send_message": "Enviar mensaje", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Enviar alerta", - "node_chain": "Encadenar flujo", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Todas las organizaciones", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "ID de dispositivo", - "col_hostname": "Nombre de host", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "¿Ejecutar remediación automática en este dispositivo?" - }, - "scaling": { - "title": "Panel", - "tab_overview": "Resumen", - "tab_relays": "Nodos de relé", - "tab_rules": "Reglas de asignación", - "tab_capacity": "Planificación de capacidad", - "arch_title": "Arquitectura de red", - "arch_loading": "Cargando diagrama de arquitectura...", - "stat_relay_nodes": "Nodos de relé", - "stat_total_devices": "Dispositivos totales", - "stat_active_sessions": "Sesiones activas", - "stat_bandwidth": "Ancho de banda total", - "relay_health": "Estado de relés", - "no_relays": "No hay nodos de relé configurados. Agregue su primer nodo para distribuir la carga.", - "relay_search": "Buscar relés...", - "relay_add": "Agregar nodo de relé", - "relay_edit": "Editar nodo de relé", - "col_name": "Name", - "col_address": "Dirección", - "col_location": "Ubicación", - "col_devices": "Dispositivos", - "col_sessions": "Sesiones", - "col_bandwidth": "Ancho de banda", - "col_status": "Estado", - "col_actions": "Acciones", - "col_priority": "Prioridad", - "col_rule_name": "Nombre de regla", - "col_match": "Coincidencia", - "col_target_relay": "Relé destino", - "col_fallback": "Respaldo", - "status_online": "En línea", - "status_degraded": "Degradado", - "status_offline": "Fuera de línea", - "status_enabled": "Habilitado", - "status_disabled": "Deshabilitado", - "confirm_delete_relay": "¿Está seguro de que desea eliminar este nodo de relé?", - "confirm_delete_rule": "¿Está seguro de que desea eliminar esta regla de asignación?", - "rules_hint": "Las reglas de asignación determinan qué servidor de relé maneja grupos de dispositivos específicos. Las reglas se evalúan por prioridad (la más baja primero).", - "no_rules": "No hay reglas de asignación.", - "rule_add": "Agregar regla", - "rule_edit": "Editar regla", - "rule_match_type": "Tipo de coincidencia", - "match_subnet": "Subred", - "match_group": "Grupo de dispositivos", - "match_tag": "Etiqueta de dispositivo", - "match_location": "Ubicación", - "rule_match_value": "Valor de coincidencia", - "fallback_master": "Servidor maestro", - "fallback_nearest": "Relé más cercano", - "relay_max_sessions": "Máx. sesiones", - "relay_max_bandwidth": "Máx. ancho de banda (Mbps)", - "cap_tiers": "Niveles de capacidad", - "cap_loading": "Cargando datos de capacidad...", - "cap_recommendations": "Recomendaciones", - "cap_no_recs": "No hay recomendaciones disponibles.", - "cap_planning": "Planificación de infraestructura", - "cap_config": "Configuración", - "cap_max_devices": "Máx. dispositivos", - "cap_max_sessions": "Máx. sesiones", - "cap_current": "Actual", - "cap_utilization": "Utilización", - "cap_tier_devices": "Capacidad de dispositivos", - "cap_tier_sessions": "Capacidad de sesiones", - "cap_tier_bandwidth": "Capacidad de ancho de banda", - "cap_single_sqlite": "Servidor único (SQLite)", - "cap_single_pg": "Servidor único (PostgreSQL)", - "cap_master_3": "Maestro + 3 relés", - "cap_master_10": "Maestro + 10 relés", - "rec_no_relays": "No hay nodos configurados. Considere agregar relés para mejor rendimiento y redundancia.", - "rec_devices_high": "La utilización de dispositivos es alta. Considere agregar más nodos de relé.", - "rec_sessions_high": "La capacidad de sesiones se acerca al límite. Considere actualizar la infraestructura.", - "rec_cpu_high": "Algunos nodos reportan alto uso de CPU. Considere balanceo de carga.", - "rec_all_good": "Todos los sistemas operan dentro de parámetros normales. No se requiere acción.", - "save": "Guardar", - "cancel": "Cancelar", - "edit": "Editar", - "delete": "Eliminar", - "close": "Cerrar", - "relays_info_banner": "Esta lista es informativa. Los servidores relay usados realmente por los clientes se configuran mediante la variable de entorno RELAY_SERVERS en el servidor BetterDesk.", - "relay_name_address_required": "El nombre y la dirección son obligatorios.", - "relay_save_failed": "No se pudo guardar el nodo relay.", - "relay_delete_failed": "No se pudo eliminar el nodo relay.", - "relay_saved": "Nodo relay guardado.", - "relay_deleted": "Nodo relay eliminado.", - "rule_name_value_required": "El nombre de la regla y el valor de coincidencia son obligatorios.", - "rule_save_failed": "No se pudo guardar la regla.", - "rule_delete_failed": "No se pudo eliminar la regla.", - "rule_saved": "Regla guardada.", - "rule_deleted": "Regla eliminada." - }, - "cross_platform": { - "title": "Panel", - "tab_matrix": "Matriz de compatibilidad", - "tab_distribution": "Distribución", - "tab_protocols": "Protocolos", - "tab_limitations": "Limitaciones", - "matrix_hint": "Matriz de soporte de funciones para todas las plataformas compatibles. Verde = soporte completo, Amarillo = parcial, Gris = no disponible, Azul = planificado.", - "col_feature": "Función", - "legend_full": "Soporte completo", - "legend_partial": "Soporte parcial", - "legend_none": "No disponible", - "legend_planned": "Planificado", - "platform_breakdown": "Distribución por plataforma", - "arch_breakdown": "Distribución por arquitectura", - "version_breakdown": "Distribución por versión", - "summary": "Resumen", - "total_devices": "Total de dispositivos", - "unique_platforms": "Plataformas", - "unique_archs": "Arquitecturas", - "unique_versions": "Versiones de cliente", - "no_devices": "No se encontraron dispositivos con datos de inventario", - "protocols_hint": "La negociación de capacidades del protocolo asegura que cada cliente reciba solo las funciones que soporta. El servidor adapta su comportamiento basándose en las capacidades reportadas.", - "capability_negotiation": "Negociación de capacidades", - "codec_support": "Soporte de códecs (dispositivos en línea)", - "feature_support": "Soporte de funciones (dispositivos en línea)", - "no_codec_data": "No hay datos de códecs de dispositivos en línea.", - "no_feature_data": "No hay datos de funciones de dispositivos en línea.", - "protobuf_schema": "Esquema Protobuf ClientCapabilities", - "diagram_client": "Cliente", - "diagram_server": "Servidor BetterDesk", - "diagram_peer": "Peer remoto", - "limitations_hint": "Cada plataforma tiene limitaciones específicas que afectan las funciones disponibles. Revíselas al planificar implementaciones.", - "feat_desktop_client": "Cliente de escritorio", - "feat_background_agent": "Agente en segundo plano", - "feat_remote_target": "Objetivo remoto", - "feat_screen_capture": "Captura de pantalla", - "feat_input_injection": "Inyección de entrada", - "feat_file_transfer": "Transferencia de archivos", - "feat_clipboard_sync": "Sincronización de portapapeles", - "feat_audio_streaming": "Transmisión de audio", - "feat_chat": "Chat", - "feat_h264": "Códec H.264", - "feat_vp9": "Códec VP9", - "feat_av1": "Códec AV1", - "feat_cdap_agent": "Agente CDAP", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Navegador web", - "platform_chromeos": "ChromeOS", - "status_production": "Producción", - "status_testing": "Pruebas", - "status_planned": "Planificado", - "status_limited": "Limitado", - "status_experimental": "Experimental", - "limit_win_uac": "Se requiere elevación UAC para instalación de servicio e inyección de entrada en escritorios seguros.", - "limit_win_service": "Se ejecuta como servicio NSSM; requiere derechos de administrador para instalar.", - "limit_win_firewall": "Las reglas del Firewall de Windows deben permitir los puertos 21115-21119 para conexiones relay.", - "limit_linux_wayland": "Los compositores Wayland restringen la captura programática de pantalla; se requiere API de portal PipeWire.", - "limit_linux_pipewire": "La captura de audio requiere PipeWire; alternativa PulseAudio disponible pero limitada.", - "limit_linux_arm": "Compilaciones ARM64 disponibles; algunos códecs pueden usar decodificación por software (más lento).", - "limit_mac_screen": "Se requiere permiso de grabación de pantalla en Configuración del Sistema > Privacidad y Seguridad.", - "limit_mac_signing": "El agente debe estar firmado con Apple Developer ID para distribución.", - "limit_mac_notarize": "Se requiere notarización para macOS Gatekeeper (distribución fuera de App Store).", - "limit_android_projection": "La API MediaProjection requiere consentimiento del usuario para cada sesión de captura de pantalla.", - "limit_android_accessibility": "La inyección de entrada requiere AccessibilityService; restringido desde Android 14+.", - "limit_android_battery": "Servicio en segundo plano limitado por modo Doze; puede necesitar exención de optimización de batería.", - "limit_ios_capture": "Apple prohíbe la captura de pantalla en segundo plano; solo modo visor soportado.", - "limit_ios_input": "No se permite inyección de entrada; solo vista remota y chat.", - "limit_ios_appstore": "Distribución solo a través de App Store; TestFlight para pruebas beta.", - "limit_web_https": "La API WebCodecs y WebRTC requieren HTTPS; HTTP recurre a JMuxer (códecs limitados).", - "limit_web_codec": "Soporte de códecs depende del navegador; H.264 ampliamente soportado, VP9/AV1 varía.", - "limit_web_performance": "Rendimiento limitado por sandbox del navegador; sin aceleración de hardware directa.", - "limit_chrome_crostini": "Soporte completo de agente solo dentro del contenedor Linux Crostini.", - "limit_chrome_pwa": "El modo PWA proporciona solo capacidades web; sin funciones nativas de agente.", - "limit_chrome_input": "Inyección de entrada fuera del contenedor Crostini no soportada.", - "feat_multi_monitor": "Múltiples monitores", - "feat_session_recording": "Grabación de sesión", - "feat_unattended_access": "Acceso desatendido", - "limit_linux_unprivileged": "Los servicios se ejecutan bajo la cuenta sin privilegios dedicada «betterdesk» con endurecimiento de systemd (NoNewPrivileges, ProtectSystem=strict).", - "limit_win_virtual_account": "Los servicios se ejecutan bajo cuentas virtuales aisladas en lugar de LocalSystem; las rutas de registro personalizadas pueden necesitar ajuste de ACL." - }, - "security_audit": { - "title": "Panel", - "tab_overview": "Resumen", - "tab_events": "Events", - "tab_hardening": "Endurecimiento", - "tab_vulnerabilities": "Vulnerabilidades", - "security_score": "Puntuación de seguridad", - "failed_logins": "Inicios de sesión fallidos (24h)", - "active_bans": "Bloqueos activos", - "api_keys": "Claves API", - "old_keys": "Claves antiguas (>90d)", - "security_checks": "Verificaciones de seguridad", - "tls_status": "Estado TLS", - "pass": "OK", - "warning": "Advertencia", - "fail": "Fallo", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSockets seguros", - "enabled": "Activado", - "disabled": "Desactivado", - "all_events": "Todos los eventos", - "event_login_failed": "Inicio de sesión fallido", - "event_login_success": "Inicio de sesión exitoso", - "event_peer_banned": "Dispositivo bloqueado", - "event_ip_banned": "IP bloqueada", - "event_config_changed": "Configuración cambiada", - "event_key_created": "Clave creada", - "refresh": "Actualizar", - "col_time": "Hora", - "col_action": "Acción", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "Dirección IP", - "col_details": "Detalles", - "no_events": "No se registraron eventos DLP", - "hardening_hint": "Prioridades de endurecimiento de seguridad para su implementación BetterDesk. Ordenados por gravedad.", - "no_hardening": "No hay elementos de endurecimiento disponibles.", - "vuln_hint": "Resultados del escaneo de vulnerabilidades de dependencias. Ejecute npm audit regularmente.", - "no_vulns": "No se encontraron vulnerabilidades. Sus dependencias son seguras." - }, - "languages": { - "title": "Panel", - "total_languages": "Idiomas totales", - "fully_translated": "Completamente traducido", - "needs_review": "Requiere revisión", - "reference_keys": "Claves de referencia", - "no_languages": "No se encontraron archivos de idioma.", - "badge_reference": "Reference", - "badge_review": "Revisar", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Ver elementos faltantes", - "fix_missing": "Fix Missing", - "missing_keys_for": "Claves faltantes para", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "y {n} más...", - "all_keys_present": "¡Todas las claves están presentes!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Las claves faltantes en {code} deben traducirse manualmente.", - "no_fix_needed": "No hay claves faltantes que completar." - }, - "resource_control": { - "title": "Panel", - "tab_overview": "Resumen", - "tab_usb": "USB Control", - "tab_optical": "Unidades ópticas", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Cuotas de recursos", - "compliance_by_category": "Cumplimiento por categoría", - "device_compliance": "Cumplimiento de dispositivos", - "search_devices": "Buscar dispositivos...", - "col_device": "ID de dispositivo", - "col_platform": "Plataforma", - "col_status": "Estado", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Acciones", - "stat_total_devices": "Dispositivos totales", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Tasa de cumplimiento", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configurar", - "no_devices": "No se encontraron dispositivos con datos de inventario", - "usb_title": "Control de puertos USB", - "usb_hint": "Controla el acceso a dispositivos de almacenamiento USB para el dispositivo seleccionado o la política predeterminada de la organización.", - "usb_storage_policy": "Política de almacenamiento USB", - "usb_whitelist": "Dispositivos permitidos (uno por línea)", - "usb_whitelist_hint": "VID:PID (p. ej. 0781:5583)", - "usb_audit_log": "Registrar conexiones de dispositivos USB", - "optical_title": "Control de unidades ópticas", - "optical_hint": "Controla el acceso a unidades CD/DVD/Blu-ray para el dispositivo seleccionado.", - "optical_policy": "Política de unidades ópticas", - "optical_audit_log": "Registrar acceso a unidades ópticas", - "monitors_title": "Gestión de monitores", - "monitors_hint": "Configura ajustes de monitores, incluida la cantidad máxima, resolución aplicada, brillo y horarios de energía.", - "monitors_max_count": "Cantidad máxima de monitores (0 = ilimitado)", - "monitors_max_hint": "0 significa sin límite", - "monitors_resolution": "Resolución máxima", - "monitors_brightness": "Límite de brillo", - "monitors_power_schedule": "Horario de energía", - "monitors_power_hint": "p. ej. off:22:00-06:00", - "disks_title": "Control de acceso a discos", - "disks_hint": "Configura políticas de acceso a discos, incluido modo solo lectura, requisito de cifrado y visibilidad de particiones.", - "disks_readonly": "Forzar modo solo lectura", - "disks_encryption": "Requerir cifrado (BitLocker/LUKS)", - "disks_smart": "Habilitar supervisión S.M.A.R.T.", - "disks_hidden": "Particiones ocultas", - "disks_hidden_hint": "Letras de unidad o puntos de montaje separados por comas", - "quotas_title": "Cuotas de recursos", - "quotas_hint": "Define cuotas de CPU, RAM, ancho de banda y disco por usuario para el dispositivo seleccionado.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Límite de ancho de banda (Mbps)", - "quotas_bandwidth_hint": "0 = ilimitado", - "quotas_disk_quota": "Cuota de disco (GB)", - "quotas_disk_hint": "0 = ilimitado", - "quotas_process_whitelist": "Lista de procesos permitidos (uno por línea)", - "quotas_process_hint": "p. ej. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Solo lista permitida", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "Panel", - "subtitle": "Resumen de su servidor RustDesk", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "import_flow": "Import Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "No se encontraron dispositivos", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Status", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Cargando...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this item?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write" - }, - "updates": { - "tab_title": "Updates", - "title": "Panel", - "desc": "Descargue una copia de seguridad completa de la configuración de su consola, usuarios, grupos y ajustes. Los datos de peers del servidor Go se incluyen cuando el backend BetterDesk está activo.", - "current_version": "Versión instalada", - "latest_version": "Latest version", - "status": "Estado", - "check_now": "Verificar ahora", - "checking": "Verificando...", - "up_to_date": "Actualizado", - "update_available": "Actualización disponible", - "changelog": "Release Notes", - "no_changelog": "No hay notas de versión disponibles", - "files_changed": "Archivos modificados", - "files": "Archivos", - "changes_unavailable": "No se pudo cargar la lista de cambios. Aun así puedes instalar la actualización.", - "create_backup": "Crear copia de seguridad antes de actualizar", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Instalando actualización...", - "creating_backup": "Creando copia de seguridad...", - "downloading": "Descargando archivos...", - "install_success": "Actualización instalada correctamente. La consola se reiniciará...", - "install_failed": "La instalación de la actualización falló", - "restarting": "Esperando el reinicio de la consola...", - "restart_complete": "Consola reiniciada correctamente", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "No se seleccionó versión de actualización. Busca actualizaciones primero.", - "backups_title": "Copias de seguridad de actualización", - "backups_desc": "Copias previas creadas automáticamente antes de cada actualización", - "no_backups": "No se encontraron copias de seguridad de actualización", - "restore": "Restore", - "restore_confirm": "¿Está seguro de que desea restaurar desde esta copia de seguridad? Las secciones seleccionadas serán sobrescritas.", - "restore_success": "Copia de seguridad restaurada correctamente. Algunos cambios pueden requerir recargar la página.", - "baseline_set": "Referencia establecida", - "commits_behind": "commits por detrás", - "total_files": "Archivos totales", - "applied": "Applied", - "failed": "Fallido", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Servidor Go", - "component_agent": "Agent", - "component_scripts": "Scripts y Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Comprobando Go...", - "go_not_found": "Go no está instalado", - "go_check_failed": "No se pudo comprobar la disponibilidad de Go", - "server_building": "Compilando servidor Go... Esto puede tardar unos minutos.", - "server_built": "Binario del servidor compilado", - "server_build_failed": "Compilación del servidor fallida", - "server_stale_title": "Binario del servidor obsoleto", - "server_stale_desc": "El código fuente del servidor Go se actualizó, pero el binario en ejecución no se reconstruyó. Reconstrúyelo ahora para aplicar actualizaciones de seguridad y bibliotecas.", - "rebuild_server": "Reconstruir binario del servidor", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Binario del servidor reconstruido y reiniciado", - "rebuild_server_failed": "No se pudo reconstruir el binario del servidor", - "server_deployed": "Binario del servidor desplegado", - "server_deploy_failed": "Despliegue del servidor fallido", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Descargando código fuente del servidor...", - "delete": "Eliminar", - "delete_confirm": "¿Eliminar permanentemente la copia {name}? Esta acción no se puede deshacer.", - "delete_success": "Copia de seguridad eliminada", - "delete_failed": "No se pudo eliminar la copia de seguridad", - "retention_label": "Conservar las N copias más recientes", - "retention_hint": "Las copias antiguas se eliminan automáticamente después de cada actualización. Usa 0 para conservarlas todas.", - "retention_saved": "Configuración de retención guardada", - "retention_invalid": "La retención debe ser un entero entre 0 y 1000", - "retention_required_for_prune": "Primero establece un valor de retención mayor que 0", - "prune_now": "Apply now", - "prune_confirm": "¿Conservar solo las {n} copias más recientes y eliminar el resto?", - "prune_done": "{n} copia(s) eliminada(s)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Método de actualización", - "strategy_download": "Descargar binario precompilado", - "strategy_compile": "Compilar desde fuentes", - "both_available": "Descargar y compilar", - "download_available": "Descarga disponible", - "no_method": "Sin método de actualización", - "no_release": "No release", - "available": "Disponible", - "server_downloading": "Descargando binario del servidor...", - "server_downloaded": "Binario del servidor descargado", - "server_download_failed": "Descarga del binario del servidor fallida", - "server_download_note": "Se descargará un binario precompilado desde GitHub Releases. Normalmente tarda menos de un minuto.", - "install_go_hint": "Instala Go desde https://go.dev/dl/ para habilitar la compilación, o publica una release con binarios precompilados", - "strategy_install_go": "Instalar Go automáticamente y compilar", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Reconstrucción automática lista", - "toolchain_ready": "Toolchain instalada", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Descargando toolchain de Go...", - "toolchain_failed": "Instalación de la toolchain de Go fallida", - "modal_title": "Instalando actualización", - "modal_done_title": "Actualización completada", - "modal_close": "Cerrar", - "modal_reload_now": "Recargar consola", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Archivos de consola", - "phase_server": "Servidor Go", - "phase_restart": "Reinicio", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Copia de seguridad omitida (elección del usuario)", - "server_skipped": "Servidor Go omitido", - "server_not_selected": "Go server not selected", - "server_processing": "Procesando actualización del servidor Go...", - "no_restart_needed": "No se requiere reinicio", - "complete": "Actualización aplicada", - "complete_summary": "La actualización se aplicó correctamente.", - "complete_with_errors": "La actualización terminó, pero algunos pasos fallaron. Consulta los detalles abajo.", - "modal_done_with_errors_title": "Actualización terminada con errores", - "console_will_restart": "El proceso de consola se reiniciará ahora...", - "restart_complete_msg": "La consola terminó de reiniciarse. Haz clic en Recargar para cargar la nueva versión. La página se recargará automáticamente en 8 segundos.", - "refresh_recommended": "Los recursos estáticos cambiaron — recarga la página para ver la nueva interfaz.", - "confirm_title": "Aplicar actualización", - "confirm_with_backup": "Se creará automáticamente una copia de seguridad previa.", - "confirm_no_backup": "No se creará copia de seguridad (continúa bajo tu propio riesgo)." - }, - "permissions": { - "title": "Permisos", - "subtitle": "Administrar permisos granulares de roles y anulaciones", - "info_title": "Permisos basados en roles", - "info_desc": "Los roles predeterminados reciben permisos predefinidos. Puedes anular permisos individuales por rol sin cambiar el rol base.", - "select_role": "Seleccionar rol", - "select_role_placeholder": "Elige un rol...", - "reset_overrides": "Restablecer anulaciones", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Nivel de servidor", - "custom": "Custom", - "default": "Default", - "revert": "Revertir", - "saved": "Permiso guardado", - "reverted": "Anulación revertida", - "all_reverted": "Todas las anulaciones revertidas", - "confirm_reset": "¿Restablecer todas las anulaciones de permisos para este rol?", - "empty_title": "Selecciona un rol", - "empty_desc": "Elige un rol a la izquierda para ver sus permisos.", - "locked_title": "Super Admin", - "locked_desc": "Este rol está protegido y solo puede cambiarse mediante la asignación predeterminada.", - "cat_device": "Dispositivos", - "cat_user": "Users", - "cat_server": "Administración del servidor", - "cat_org": "Organizaciones", - "cat_audit": "Auditoría", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Ver dispositivos", - "perm_device_connect": "Conectar con dispositivos", - "perm_device_edit": "Editar dispositivos", - "perm_device_delete": "Eliminar dispositivos", - "perm_device_ban": "Bloquear dispositivos", - "perm_device_change_id": "Cambiar ID de dispositivo", - "perm_user_view": "Ver usuarios", - "perm_user_create": "Crear usuarios", - "perm_user_edit": "Editar usuarios", - "perm_user_delete": "Eliminar usuarios", - "perm_server_config": "Configurar servidor", - "perm_server_keys": "Administrar claves del servidor", - "perm_org_create": "Crear organizaciones", - "perm_org_edit": "Editar organizaciones", - "perm_org_delete": "Eliminar organizaciones", - "perm_org_manage_users": "Administrar usuarios de organización", - "perm_org_manage_devices": "Administrar dispositivos de organización", - "perm_audit_view": "Ver auditoría", - "perm_metrics_view": "Ver métricas", - "perm_blocklist_edit": "Editar lista de bloqueo", - "perm_cdap_view": "Ver CDAP", - "perm_cdap_command": "Ejecutar comandos CDAP", - "perm_cdap_terminal": "Usar terminal CDAP", - "perm_cdap_files": "Administrar archivos CDAP", - "perm_enrollment_manage": "Administrar registros", - "perm_enrollment_approve": "Aprobar registros", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Editar marca", - "perm_server_attestation": "Certificación de rendimiento del servidor" - }, - "notifications": { - "title": "Notificaciones", - "empty": "No hay notificaciones nuevas", - "mark_all_read": "Marcar todo como leído", - "see_all": "Ver todas las solicitudes de ayuda", - "help_request": "Solicitud de ayuda", - "just_now": "just now" - }, - "accessibility": { - "title": "Accesibilidad", - "subtitle": "Ajusta la consola a tu visión, movimiento y lectura.", - "close": "Cerrar menú de accesibilidad", - "profiles": "Perfiles rápidos", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Texto más grande, alto contraste y foco visible.", - "profile_dyslexia": "Comodidad de lectura", - "profile_dyslexia_hint": "Fuente legible y espaciado más amplio.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reduce transiciones y pausa animaciones.", - "profile_color_assist": "Ayuda de color", - "profile_color_assist_hint": "Filtro de color, etiquetas y enlaces resaltados.", - "reading": "Lectura", - "font_size": "Tamaño del texto", - "line_height": "Altura de línea", - "letter_spacing": "Espaciado de letras", - "word_spacing": "Espaciado de palabras", - "readable_font": "Fuente legible", - "readable_font_hint": "Usa formas de letras amplias y familiares.", - "dyslexia_spacing": "Espaciado para dislexia", - "dyslexia_spacing_hint": "Agrega espaciado adicional para textos largos.", - "visual": "Visual", - "contrast": "Contraste", - "contrast_normal": "Normal", - "contrast_high_dark": "Alto contraste oscuro", - "contrast_high_light": "Alto contraste claro", - "contrast_yellow_black": "Amarillo sobre negro", - "color_filter": "Filtro de visión de color", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturación de color", - "underline_links": "Subrayar enlaces", - "underline_links_hint": "Hace visibles los enlaces sin depender del color.", - "highlight_links": "Resaltar acciones", - "highlight_links_hint": "Dibuja un contorno alrededor de enlaces y botones.", - "highlight_headings": "Resaltar encabezados", - "highlight_headings_hint": "Marca los encabezados de sección con una barra de color.", - "hide_media": "Dim media", - "hide_media_hint": "Atenúa imágenes, vídeos y áreas de canvas.", - "interaction": "Interacción", - "strong_focus": "Foco reforzado", - "strong_focus_hint": "Muestra un contorno amplio para el foco del teclado.", - "large_cursor": "Cursor grande", - "large_cursor_hint": "Usa un puntero más grande con alto contraste.", - "reduce_motion": "Reducir movimiento", - "reduce_motion_hint": "Acorta transiciones y desplazamiento suave.", - "pause_animations": "Pausar animaciones", - "pause_animations_hint": "Detiene movimientos visuales repetitivos.", - "reading_guide": "Guía de lectura", - "reading_guide_hint": "Sigue el puntero con una línea luminosa.", - "reading_mask": "Máscara de lectura", - "reading_mask_hint": "Oscurece el contenido por encima y por debajo del puntero.", - "preview": "Vista previa", - "preview_title": "Vista previa del espacio del operador", - "preview_text": "Comprueba si el texto, enlaces, controles y etiquetas de estado son cómodos de leer antes de cerrar este menú.", - "preview_link": "Enlace a detalles del dispositivo", - "preview_status": "Online", - "preview_button": "Acción principal", - "preview_secondary": "Secondary", - "reset": "Restablecer", - "done": "Listo" - }, - "server_mgmt": { - "title": "Gestión del servidor", - "subtitle": "Panel tipo Cockpit para el host de la consola BetterDesk (BETA).", - "beta_tooltip": "Función beta — en desarrollo activo.", - "notice_title": "Función beta", - "notice_body": "Estas herramientas se ejecutan en el host donde corre el proceso de la consola BetterDesk. Todas las operaciones son auditadas.", - "tab_overview": "Resumen", - "tab_terminal": "Terminal", - "tab_files": "Archivos", - "tab_services": "Servicios", - "cpu": "CPU", - "memory": "Memoria", - "load": "Carga promedio", - "disks": "Discos", - "history": "Historial (últimas 60 muestras)", - "host_info": "Info del host", - "cores": "núcleos", - "uptime": "Tiempo activo", - "no_disks": "No hay datos de disco disponibles", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY disponible", - "term_connect": "Conectar", - "term_disconnect": "Desconectar", - "term_clear": "Limpiar", - "term_status": "Status", - "term_connecting": "Conectando…", - "term_connected": "Conectado", - "term_disconnected": "Desconectado", - "term_error": "Error de conexión", - "term_warning": "Los comandos se ejecutan como el usuario propietario del proceso de consola. Agrega una regla sudoers para permitir elevación.", - "term_hint": "Consejo: escribe `sudo -i` para obtener privilegios root (requiere configuración sudoers).", - "term_lib_failed": "No se pudo cargar la biblioteca de terminal", - "files_up": "Subir un nivel", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Nombre", - "files_size": "Tamaño", - "files_perms": "Mode", - "files_mtime": "Modificado", - "files_rename": "Renombrar", - "files_rename_prompt": "New name:", - "files_empty": "Directorio vacío", - "files_error": "No se pudo listar el directorio", - "read_failed": "No se pudo leer el archivo", - "save_failed": "No se pudo guardar el archivo", - "rename_failed": "Error al renombrar", - "delete_failed": "Error al eliminar", - "delete_confirm": "¿Eliminar esta entrada?", - "mkdir_prompt": "Nombre de la nueva carpeta:", - "mkdir_failed": "No se pudo crear la carpeta", - "file_saved": "Archivo guardado", - "binary_warn": "Archivo binario — solo vista previa", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Buscar servicios...", - "svc_name": "Servicio", - "svc_state": "Estado", - "svc_description": "Descripción", - "svc_empty": "No se encontraron servicios", - "svc_load_failed": "No se pudieron cargar los servicios", - "svc_action_failed": "Acción fallida", - "svc_confirm": "Run", - "svc_start": "Iniciar", - "svc_stop": "Detener", - "svc_restart": "Reiniciar", - "svc_reload": "Recargar", - "svc_enable": "Habilitar", - "svc_disable": "Deshabilitar", - "svc_status": "Status" - }, - "download": { - "title": "Descargar BetterDesk Agent", - "choose_platform": "Elegir plataforma", - "choose_platform_hint": "Selecciona el instalador correspondiente a tu sistema operativo.", - "download": "Descargar", - "building": "Compilando…", - "failed": "Compilación fallida", - "need_help": "¿Necesitas ayuda?", - "powered_by": "Desarrollado por" - }, - "server_attestation": { - "title": "Certificación del servidor", - "subtitle": "Benchmark de rendimiento que determina la capacidad de conexiones remotas simultáneas en un umbral del 80% de CPU, RAM y disco.", - "warning_title": "Prueba de carga", - "warning_body": "El benchmark simula conexiones WebSocket paralelas a los servidores de señal y retransmisión. Ejecutar en horas de baja actividad — esta prueba carga producción.", - "run_benchmark": "Ejecutar benchmark", - "abort": "Cancelar", - "download_report": "Descargar informe JSON", - "last_test": "Última prueba", - "no_test_yet": "Aún no se ha ejecutado ningún benchmark", - "max_connections": "Conexiones máximas", - "threshold_80": "Umbral del 80% — métricas finales", - "disk": "Disco", - "ramp_chart": "Gráfico de rampa de carga", - "connections": "Conexiones", - "connections_short": "con.", - "tier_guide_title": "¿Qué significa cada nivel?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "SIN CALIFICAR", - "tier_bronze_desc": "1–25 conexiones simultáneas — VPS pequeño (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 conexiones — servidor de gama media (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 conexiones — servidor de alto rendimiento (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 conexiones — infraestructura empresarial (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ conexiones — clase turbo: hardware dedicado, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Nota: en Docker, las métricas de CPU/RAM pueden reflejar los límites del contenedor en lugar del host físico.", - "badge_tooltip": "Certificación del servidor BetterDesk — certificación de rendimiento del servidor", - "confirm_run": "Este benchmark realizará una prueba de carga del servidor con conexiones simuladas. ¿Continuar?", - "starting": "Iniciando…", - "complete": "Benchmark completado", - "signal_peers": "Pares de señal", - "relay_sessions": "Sesiones de retransmisión", - "page_error": "Error al cargar la página de certificación del servidor", - "mode_estimated": "Estimado (WebSocket inaccesible)", - "incomplete": "Benchmark completado sin nivel válido" + "form": { + "cancel": "Cancelar" } + } } diff --git a/web-nodejs/lang/fi.json b/web-nodejs/lang/fi.json index e4e85a6e..f3ea0ff1 100644 --- a/web-nodejs/lang/fi.json +++ b/web-nodejs/lang/fi.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Finnish", - "native_name": "Suomi", - "flag": "🇫🇮", - "needs_review": true + "_meta": { + "name": "Finnish", + "native_name": "Suomi", + "flag": "🇫🇮", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Ladataan...", + "confirm": "Vahvista", + "alert": "Hälytys", + "prompt": "Syötä arvo", + "copied": "Kopioitu leikepöydälle", + "save": "Tallenna", + "saved": "Tallennettu", + "error": "Virhe", + "success": "Onnistui", + "warning": "Varoitus", + "info": "Tietoja", + "all": "Kaikki", + "cancel": "Peruuta", + "delete": "Poista", + "actions": "Toiminnot", + "close": "Sulje", + "required": "vaaditaan", + "name_required": "Nimi vaaditaan", + "active": "Aktiivinen", + "inactive": "Ei aktiivinen", + "invalid_json": "Virheellinen JSON", + "field_required": "{field} vaaditaan", + "back": "Takaisin", + "edit": "Muokkaa", + "yes": "Kyllä", + "no": "Ei" + }, + "nav": { + "main": "Pää", + "tools": "Työkalut", + "system": "Järjestelmä", + "dashboard": "Kojelauta", + "devices": "Laitteet", + "keys": "Avaimet", + "generator": "Generaattori", + "settings": "Asetukset", + "users": "Käyttäjät", + "inventory": "Inventaario", + "tickets": "Tiketit", + "help_requests": "Apupyynnöt", + "activity": "Toiminta", + "automation": "Automaatio", + "file_transfer": "Tiedoston siirto", + "network": "Verkko", + "dataguard": "DataGuard", + "reports": "Raportit", + "tenants": "Vuokralaiset", + "registrations": "Registrations", + "management": "Hallinto", + "toggle_sidebar": "Vaihda sivupalkki", + "cdap": "CDAP -laitteet", + "fleet": "Kalusto", + "scaling": "Skaalaus", + "cross_platform": "Monialustainen", + "tokens": "Laitteen tunnukset", + "organizations": "Organisaatiot", + "policies": "Käytännöt", + "attestation": "Todentaminen", + "remote": "Etätyöpöytä", + "toolkit": "Työkalupakki", + "security_audit": "Turvallisuustarkastus", + "languages": "Kielet", + "resource_control": "Resurssien hallinta", + "chat": "Chat", + "help": "Ohje", + "expand_sidebar": "Laajenna sivupalkki", + "toggle_theme": "Vaihda teema", + "sdk_studio": "SDK Studio", + "login": "Kirjaudu", + "permissions": "Käyttöoikeudet", + "server_management": "Palvelimen hallinta", + "server_attestation": "Palvelintodistus", + "commercialization": "Kaupallistaminen" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Kirjaudu sisään BetterDesk-konsoliin", + "username": "Käyttäjätunnus", + "username_placeholder": "Anna käyttäjänimi", + "password": "Salasana", + "password_placeholder": "Anna salasana", + "remember_me": "Remember me", + "login_failed": "Kirjautuminen epäonnistui. Tarkista kirjautumistietosi.", + "invalid_credentials": "Virheellinen käyttäjätunnus tai salasana.", + "username_collision": "Paikallinen tili tällä käyttäjätunnuksella on jo olemassa. Kirjaudu paikallisella salasanallasi tai pyydä järjestelmänvalvojaa nimeämään ristiriitainen tili uudelleen tai poistamaan se.", + "fill_all_fields": "Täytä kaikki kentät", + "logout_confirm": "Haluatko varmasti kirjautua ulos?", + "change_password": "Vaihda salasana", + "password_required": "Salasana vaaditaan", + "totp_title": "Kaksitekijäinen todennus", + "totp_subtitle": "Syötä 6-numeroinen koodi todennussovelluksesta", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Käytä sen sijaan palautuskoodia", + "totp_use_code": "Käytä sen sijaan todennuskoodia", + "totp_recovery_code": "Palautuskoodi", + "totp_back_to_login": "Takaisin kirjautumiseen", + "totp_invalid_code": "Virheellinen vahvistuskoodi. Yritä uudelleen.", + "totp_enter_code": "Anna 6-numeroinen koodi", + "totp_enter_recovery": "Anna palautuskoodi", + "totp_session_expired": "Istunto vanhentunut. Kirjaudu uudelleen sisään.", + "totp_already_enabled": "Kaksivaiheinen todennus on jo käytössä", + "pro_only_account": "Tämä tili on tarkoitettu vain RustDesk-työpöytäasiakkaalle. Käytä RustDesk-sovellusta kirjautuaksesi sisään.", + "passwords_mismatch": "Salasanat eivät täsmää", + "or": "tai", + "login_sso": "Kirjaudu sisään koodilla SSO", + "login_sso_with": "Kirjaudu sisään koodilla {{provider}}", + "oidc_denied": "Tunnistetietojen tarjoaja esti pääsyn.", + "oidc_invalid": "Virheellinen OIDC takaisinsoitto. Yritä uudelleen.", + "oidc_failed": "OIDC-todennus epäonnistui. Yritä uudelleen.", + "oidc_error": "SSO-kirjautumisen aikana tapahtui virhe.", + "oidc_no_account": "Tiliäsi ei löytynyt, ja automaattinen rekisteröinti on poistettu käytöstä.", + "totp_rate_limited": "Liikaa yrityksiä. Yritä myöhemmin uudelleen.", + "emergency_mode_banner": "Go server ei tavoitettavissa – toimii hätätilassa (vain järjestelmänvalvoja, rajoitettu toiminnallisuus)" + }, + "dashboard": { + "title": "Kojelauta", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Laitteita yhteensä", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktiiviset yhteydet", + "offline_devices": "Offline", + "server_status": "Palvelimen tila", + "quick_actions": "Nopeat toiminnot", + "manage_devices": "Hallitse yhdistettyjä laitteita", + "view_keys": "Näytä palvelimen avaimet", + "generate_config": "Luo asiakasasetukset", + "server_settings": "Määritä asetukset", + "greeting_morning": "Hyvää huomenta, {name}", + "greeting_afternoon": "Hyvää iltapäivää, {name}", + "greeting_evening": "Hyvää iltaa, {name}", + "greeting_night": "Hyvää yötä, {name}", + "health_overview": "Terveyskatsaus", + "devices_online": "Laitteet verkossa", + "active_alerts": "Aktiiviset hälytykset", + "recent_connections": "Laitteita yhteensä", + "server_uptime": "Palvelimen käyttöaika", + "activity_feed": "Viimeaikainen toiminta", + "no_recent_activity": "Ei viimeaikaista toimintaa", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Kokeile työpöytätilaa moni-ikkunaisessa työtilassa, jossa on valvontawidgetit.", + "tip_keyboard_shortcuts": "Paina Ctrl+K missä tahansa avataksesi pikahaun komentopaletin.", + "tip_address_book": "Synkronoi osoitekirjasi eri laitteiden välillä kirjautumalla sisään RustDesk-asiakassovelluksesta.", + "tip_2fa": "Ota kaksivaiheinen todennus käyttöön asetuksissa parantaaksesi tilin turvallisuutta.", + "tip_bulk_actions": "Valitse useita laitteita ja hallitse niitä kerralla joukkotoimintojen avulla.", + "tip_theme": "Vaihda tumman ja vaalean teeman välillä sivupalkin asetuksista.", + "tip_cdap": "Yhdistä IoT-laitteet ja teollisuusanturit CDAP-yhdyskäytävän kautta.", + "tip_tutorials": "Napsauta oikeassa alakulmassa olevaa ohjepainiketta nähdäksesi interaktiiviset opetusohjelmat." + }, + "devices": { + "title": "Laitteet", + "id": "ID", + "hostname": "Hostname", + "username": "Käyttäjätunnus", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Luotu", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Hae laitteita...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Synkronoinnin tila", + "sync_success": "Tila synkronoitu onnistuneesti", + "empty_title": "Laitteita ei löytynyt", + "empty_text": "Yksikään laite ei vastaa nykyisiä suodattimiasi", + "edit_title": "Laitteen tiedot", + "delete_title": "Poista laite", + "delete_confirm": "Haluatko varmasti poistaa laitteen {id}?", + "delete_warning": "Olet poistamassa tämän laitteen pysyvästi:", + "delete_permanent": "Tätä toimintoa ei voi kumota. Kaikki tähän laitteeseen liittyvät tiedot poistetaan pysyvästi tietokannasta.", + "delete_success": "Laitteen poistaminen onnistui", + "revoke_option": "Peruuta laite", + "revoke_hint": "Estä laitetunnus ja katkaise aktiiviset yhteydet", + "revoke_success": "Laite peruutettu onnistuneesti", + "details": "Laitteen tiedot", + "ban_title": "Estä laite", + "ban_confirm": "Haluatko varmasti estää laitteen {id}?", + "ban_success": "Laite estetty onnistuneesti", + "unban_title": "Poista laitteen esto", + "unban_confirm": "Haluatko varmasti poistaa laitteen {id} porttikiellon?", + "unban_success": "Laitteen eston poistaminen onnistui", + "change_id": "Change ID", + "change_id_title": "Vaihda laitetunnus", + "new_id": "New ID", + "change_id_hint": "Vain 6-16 merkkiä, kirjaimia, numeroita, väliviivoja ja alaviivoja", + "change_id_success": "Laitetunnus vaihdettiin onnistuneesti", + "id_length_error": "ID:n tulee olla 6-16 merkkiä pitkä", + "id_format_error": "Tunnus voi sisältää vain kirjaimia, numeroita, väliviivoja ja alaviivoja", + "bulk_delete_title": "Poista useita laitteita", + "bulk_delete_confirm": "Haluatko varmasti poistaa {count}-laitteet?", + "bulk_delete_success": "{count}-laitteiden poistaminen onnistui", + "columns": "Columns", + "toggle_columns": "Vaihda näkyviä sarakkeita", + "not_found": "Laitetta ei löydy", + "delete_failed": "Laitteen poistaminen epäonnistui", + "change_id_failed": "Laitetunnuksen muuttaminen epäonnistui", + "invalid_id": "Virheellinen laitetunnus (6–16 merkkiä vaaditaan)", + "invalid_id_format": "Virheellinen tunnusmuoto (vain kirjaimet, numerot, väliviivat, alaviivat)", + "id_exists": "Laitetunnus on jo olemassa", + "no_selection": "Ei valittuja laitteita", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP yhdistetty", + "revoke": "Peruuta", + "access_policy": "Käyttöoikeuskäytäntö", + "unattended_access": "Valvomaton pääsy", + "enable_unattended": "Salli valvomaton pääsy", + "access_password": "Pääsyn salasana", + "password_configured": "Salasana asetettu", + "no_password": "Ei salasanaa", + "new_password": "Uusi salasana (jätä tyhjäksi pysyäksesi ajan tasalla)", + "clear_password": "Tyhjennä salasana", + "access_schedule": "Pääsyaikataulu", + "enable_schedule": "Ota käyttöön aikaperusteinen käyttö", + "allowed_days": "Sallitut päivät", + "start_time": "Aloitusaika", + "end_time": "Lopetusaika", + "timezone": "Aikavyöhyke", + "allowed_operators": "Sallitut operaattorit", + "all_operators": "Kaikki operaattorit (jätä tyhjäksi)", + "operators_hint": "Pilkuilla erotetut käyttäjänimet. Jätä tyhjäksi salliaksesi kaikki operaattorit.", + "last_updated_by": "Viimeksi päivittänyt", + "access_policy_saved": "Käyttöoikeuskäytäntö tallennettu", + "tabs": { + "overview": "Yleiskatsaus", + "hardware": "Hardware", + "metrics": "Mittarit", + "connections": "Liitännät", + "audit": "Audit", + "info": "Info", + "history": "Historia" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Prosessori", + "memory": "Muisti", + "disk": "Levy", + "os": "Käyttöjärjestelmä", + "hostname": "Isäntänimi", + "uptime": "Käyttöaika", + "load_avg": "Keskimääräinen kuormitus", + "network": "Verkkosovittimet", + "no_data": "Laitteistotietoja ei ole saatavilla", + "title": "Laitteiston tiedot", + "gpu": "Näytönohjain" }, - "common": { - "loading": "Ladataan...", - "confirm": "Vahvista", - "alert": "Hälytys", - "prompt": "Syötä arvo", - "copied": "Kopioitu leikepöydälle", - "save": "Tallenna", - "saved": "Tallennettu", - "error": "Virhe", - "success": "Onnistui", - "warning": "Varoitus", - "info": "Tietoja", - "all": "Kaikki", - "cancel": "Peruuta", - "delete": "Poista", - "actions": "Toiminnot", - "close": "Sulje", - "required": "vaaditaan", - "name_required": "Nimi vaaditaan", - "active": "Aktiivinen", - "inactive": "Ei aktiivinen", - "invalid_json": "Virheellinen JSON", - "field_required": "{field} vaaditaan", - "back": "Takaisin", - "edit": "Muokkaa", - "yes": "Kyllä", - "no": "Ei" - }, - "nav": { - "main": "Pää", - "tools": "Työkalut", - "system": "Järjestelmä", - "dashboard": "Kojelauta", - "devices": "Laitteet", - "keys": "Avaimet", - "generator": "Generaattori", - "settings": "Asetukset", - "users": "Käyttäjät", - "inventory": "Inventaario", - "tickets": "Tiketit", - "help_requests": "Apupyynnöt", - "activity": "Toiminta", - "automation": "Automaatio", - "file_transfer": "Tiedoston siirto", - "network": "Verkko", - "dataguard": "DataGuard", - "reports": "Raportit", - "tenants": "Vuokralaiset", - "registrations": "Registrations", - "management": "Hallinto", - "toggle_sidebar": "Vaihda sivupalkki", - "cdap": "CDAP -laitteet", - "fleet": "Kalusto", - "scaling": "Skaalaus", - "cross_platform": "Monialustainen", - "tokens": "Laitteen tunnukset", - "organizations": "Organisaatiot", - "policies": "Käytännöt", - "attestation": "Todentaminen", - "remote": "Etätyöpöytä", - "toolkit": "Työkalupakki", - "security_audit": "Turvallisuustarkastus", - "languages": "Kielet", - "resource_control": "Resurssien hallinta", - "chat": "Chat", - "help": "Ohje", - "expand_sidebar": "Laajenna sivupalkki", - "toggle_theme": "Vaihda teema", - "sdk_studio": "SDK Studio", - "login": "Kirjaudu", - "permissions": "Käyttöoikeudet", - "server_management": "Palvelimen hallinta", - "server_attestation": "Palvelintodistus" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Kirjaudu sisään BetterDesk-konsoliin", - "username": "Käyttäjätunnus", - "username_placeholder": "Anna käyttäjänimi", - "password": "Salasana", - "password_placeholder": "Anna salasana", - "remember_me": "Remember me", - "login_failed": "Kirjautuminen epäonnistui. Tarkista kirjautumistietosi.", - "invalid_credentials": "Virheellinen käyttäjätunnus tai salasana.", - "username_collision": "Paikallinen tili tällä käyttäjätunnuksella on jo olemassa. Kirjaudu paikallisella salasanallasi tai pyydä järjestelmänvalvojaa nimeämään ristiriitainen tili uudelleen tai poistamaan se.", - "fill_all_fields": "Täytä kaikki kentät", - "logout_confirm": "Haluatko varmasti kirjautua ulos?", - "change_password": "Vaihda salasana", - "password_required": "Salasana vaaditaan", - "totp_title": "Kaksitekijäinen todennus", - "totp_subtitle": "Syötä 6-numeroinen koodi todennussovelluksesta", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Käytä sen sijaan palautuskoodia", - "totp_use_code": "Käytä sen sijaan todennuskoodia", - "totp_recovery_code": "Palautuskoodi", - "totp_back_to_login": "Takaisin kirjautumiseen", - "totp_invalid_code": "Virheellinen vahvistuskoodi. Yritä uudelleen.", - "totp_enter_code": "Anna 6-numeroinen koodi", - "totp_enter_recovery": "Anna palautuskoodi", - "totp_session_expired": "Istunto vanhentunut. Kirjaudu uudelleen sisään.", - "totp_already_enabled": "Kaksivaiheinen todennus on jo käytössä", - "pro_only_account": "Tämä tili on tarkoitettu vain RustDesk-työpöytäasiakkaalle. Käytä RustDesk-sovellusta kirjautuaksesi sisään.", - "passwords_mismatch": "Salasanat eivät täsmää", - "or": "tai", - "login_sso": "Kirjaudu sisään koodilla SSO", - "login_sso_with": "Kirjaudu sisään koodilla {{provider}}", - "oidc_denied": "Tunnistetietojen tarjoaja esti pääsyn.", - "oidc_invalid": "Virheellinen OIDC takaisinsoitto. Yritä uudelleen.", - "oidc_failed": "OIDC-todennus epäonnistui. Yritä uudelleen.", - "oidc_error": "SSO-kirjautumisen aikana tapahtui virhe.", - "oidc_no_account": "Tiliäsi ei löytynyt, ja automaattinen rekisteröinti on poistettu käytöstä.", - "totp_rate_limited": "Liikaa yrityksiä. Yritä myöhemmin uudelleen.", - "emergency_mode_banner": "Go server ei tavoitettavissa – toimii hätätilassa (vain järjestelmänvalvoja, rajoitettu toiminnallisuus)" - }, - "dashboard": { - "title": "Kojelauta", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Laitteita yhteensä", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktiiviset yhteydet", - "offline_devices": "Offline", - "server_status": "Palvelimen tila", - "quick_actions": "Nopeat toiminnot", - "manage_devices": "Hallitse yhdistettyjä laitteita", - "view_keys": "Näytä palvelimen avaimet", - "generate_config": "Luo asiakasasetukset", - "server_settings": "Määritä asetukset", - "greeting_morning": "Hyvää huomenta, {name}", - "greeting_afternoon": "Hyvää iltapäivää, {name}", - "greeting_evening": "Hyvää iltaa, {name}", - "greeting_night": "Hyvää yötä, {name}", - "health_overview": "Terveyskatsaus", - "devices_online": "Laitteet verkossa", - "active_alerts": "Aktiiviset hälytykset", - "recent_connections": "Laitteita yhteensä", - "server_uptime": "Palvelimen käyttöaika", - "activity_feed": "Viimeaikainen toiminta", - "no_recent_activity": "Ei viimeaikaista toimintaa", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Kokeile työpöytätilaa moni-ikkunaisessa työtilassa, jossa on valvontawidgetit.", - "tip_keyboard_shortcuts": "Paina Ctrl+K missä tahansa avataksesi pikahaun komentopaletin.", - "tip_address_book": "Synkronoi osoitekirjasi eri laitteiden välillä kirjautumalla sisään RustDesk-asiakassovelluksesta.", - "tip_2fa": "Ota kaksivaiheinen todennus käyttöön asetuksissa parantaaksesi tilin turvallisuutta.", - "tip_bulk_actions": "Valitse useita laitteita ja hallitse niitä kerralla joukkotoimintojen avulla.", - "tip_theme": "Vaihda tumman ja vaalean teeman välillä sivupalkin asetuksista.", - "tip_cdap": "Yhdistä IoT-laitteet ja teollisuusanturit CDAP-yhdyskäytävän kautta.", - "tip_tutorials": "Napsauta oikeassa alakulmassa olevaa ohjepainiketta nähdäksesi interaktiiviset opetusohjelmat." - }, - "devices": { - "title": "Laitteet", - "id": "ID", - "hostname": "Hostname", - "username": "Käyttäjätunnus", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Luotu", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Hae laitteita...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Synkronoinnin tila", - "sync_success": "Tila synkronoitu onnistuneesti", - "empty_title": "Laitteita ei löytynyt", - "empty_text": "Yksikään laite ei vastaa nykyisiä suodattimiasi", - "edit_title": "Laitteen tiedot", - "delete_title": "Poista laite", - "delete_confirm": "Haluatko varmasti poistaa laitteen {id}?", - "delete_warning": "Olet poistamassa tämän laitteen pysyvästi:", - "delete_permanent": "Tätä toimintoa ei voi kumota. Kaikki tähän laitteeseen liittyvät tiedot poistetaan pysyvästi tietokannasta.", - "delete_success": "Laitteen poistaminen onnistui", - "revoke_option": "Peruuta laite", - "revoke_hint": "Estä laitetunnus ja katkaise aktiiviset yhteydet", - "revoke_success": "Laite peruutettu onnistuneesti", - "details": "Laitteen tiedot", - "ban_title": "Estä laite", - "ban_confirm": "Haluatko varmasti estää laitteen {id}?", - "ban_success": "Laite estetty onnistuneesti", - "unban_title": "Poista laitteen esto", - "unban_confirm": "Haluatko varmasti poistaa laitteen {id} porttikiellon?", - "unban_success": "Laitteen eston poistaminen onnistui", - "change_id": "Change ID", - "change_id_title": "Vaihda laitetunnus", - "new_id": "New ID", - "change_id_hint": "Vain 6-16 merkkiä, kirjaimia, numeroita, väliviivoja ja alaviivoja", - "change_id_success": "Laitetunnus vaihdettiin onnistuneesti", - "id_length_error": "ID:n tulee olla 6-16 merkkiä pitkä", - "id_format_error": "Tunnus voi sisältää vain kirjaimia, numeroita, väliviivoja ja alaviivoja", - "bulk_delete_title": "Poista useita laitteita", - "bulk_delete_confirm": "Haluatko varmasti poistaa {count}-laitteet?", - "bulk_delete_success": "{count}-laitteiden poistaminen onnistui", - "columns": "Columns", - "toggle_columns": "Vaihda näkyviä sarakkeita", - "not_found": "Laitetta ei löydy", - "delete_failed": "Laitteen poistaminen epäonnistui", - "change_id_failed": "Laitetunnuksen muuttaminen epäonnistui", - "invalid_id": "Virheellinen laitetunnus (6–16 merkkiä vaaditaan)", - "invalid_id_format": "Virheellinen tunnusmuoto (vain kirjaimet, numerot, väliviivat, alaviivat)", - "id_exists": "Laitetunnus on jo olemassa", - "no_selection": "Ei valittuja laitteita", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP yhdistetty", - "revoke": "Peruuta", - "access_policy": "Käyttöoikeuskäytäntö", - "unattended_access": "Valvomaton pääsy", - "enable_unattended": "Salli valvomaton pääsy", - "access_password": "Pääsyn salasana", - "password_configured": "Salasana asetettu", - "no_password": "Ei salasanaa", - "new_password": "Uusi salasana (jätä tyhjäksi pysyäksesi ajan tasalla)", - "clear_password": "Tyhjennä salasana", - "access_schedule": "Pääsyaikataulu", - "enable_schedule": "Ota käyttöön aikaperusteinen käyttö", - "allowed_days": "Sallitut päivät", - "start_time": "Aloitusaika", - "end_time": "Lopetusaika", - "timezone": "Aikavyöhyke", - "allowed_operators": "Sallitut operaattorit", - "all_operators": "Kaikki operaattorit (jätä tyhjäksi)", - "operators_hint": "Pilkuilla erotetut käyttäjänimet. Jätä tyhjäksi salliaksesi kaikki operaattorit.", - "last_updated_by": "Viimeksi päivittänyt", - "access_policy_saved": "Käyttöoikeuskäytäntö tallennettu", - "tabs": { - "overview": "Yleiskatsaus", - "hardware": "Hardware", - "metrics": "Mittarit", - "connections": "Liitännät", - "audit": "Audit", - "info": "Info", - "history": "Historia" - }, - "hardware": { - "cpu": "Prosessori", - "memory": "Muisti", - "disk": "Levy", - "os": "Käyttöjärjestelmä", - "hostname": "Isäntänimi", - "uptime": "Käyttöaika", - "load_avg": "Keskimääräinen kuormitus", - "network": "Verkkosovittimet", - "no_data": "Laitteistotietoja ei ole saatavilla", - "title": "Laitteiston tiedot", - "gpu": "Näytönohjain" - }, - "display_name": "Näyttönimi", - "display_name_placeholder": "Muokattu nimi (ohittaa isäntänimen)", - "note_placeholder": "Huomautuksia tästä laitteesta", - "tags": "Tags", - "filter_by_tags": "Suodata tunnisteiden mukaan", - "no_tags": "Ei tunnisteita", - "all_groups": "Kaikki ryhmät", - "create_group": "Luo ryhmä", - "manage_groups": "Hallinnoi ryhmiä", - "group_name": "Ryhmän nimi", - "group_name_placeholder": "esim. Media PC:t", - "dynamic_group": "Dynaaminen ryhmä tagista", - "dynamic_group_hint": "Tällä tunnisteella varustetut laitteet liittyvät automaattisesti.", - "tag_filter": "Tunnisteen suodatin", - "group_allowed_users": "Sallitut käyttäjät", - "group_allowed_users_hint": "Jätä tyhjäksi, jotta ryhmä näkyy kaikille, joilla on laitteen käyttöoikeudet.", - "group_tag_required": "Tunnistesuodatin vaaditaan dynaamisille ryhmille", - "group_invalid": "Virheellinen ryhmän tunniste", - "group_not_found": "Ryhmää ei löydy", - "group_saved": "Laiteryhmä tallennettu", - "groups_saved": "Laiteryhmät tallennettu", + "display_name": "Näyttönimi", + "display_name_placeholder": "Muokattu nimi (ohittaa isäntänimen)", + "note_placeholder": "Huomautuksia tästä laitteesta", + "tags": "Tags", + "filter_by_tags": "Suodata tunnisteiden mukaan", + "no_tags": "Ei tunnisteita", + "all_groups": "Kaikki ryhmät", + "create_group": "Luo ryhmä", + "manage_groups": "Hallinnoi ryhmiä", + "group_name": "Ryhmän nimi", + "group_name_placeholder": "esim. Media PC:t", + "dynamic_group": "Dynaaminen ryhmä tagista", + "dynamic_group_hint": "Tällä tunnisteella varustetut laitteet liittyvät automaattisesti.", + "tag_filter": "Tunnisteen suodatin", + "group_allowed_users": "Sallitut käyttäjät", + "group_allowed_users_hint": "Jätä tyhjäksi, jotta ryhmä näkyy kaikille, joilla on laitteen käyttöoikeudet.", + "group_tag_required": "Tunnistesuodatin vaaditaan dynaamisille ryhmille", + "group_invalid": "Virheellinen ryhmän tunniste", + "group_not_found": "Ryhmää ei löydy", + "group_saved": "Laiteryhmä tallennettu", + "groups_saved": "Laiteryhmät tallennettu", "group_membership_added": "Lisätty ryhmään", "group_membership_removed": "Poistettu ryhmästä", - "no_groups": "Ei vielä ryhmiä", - "manual_groups": "Manuaaliset ryhmät", - "dynamic_memberships": "Dynaamiset jäsenyydet", - "group_allowed_user_groups": "Sallitut käyttäjäryhmät", - "group_allowed_user_groups_hint": "Valittujen käyttäjäryhmien käyttäjät voivat käyttää tätä laiteryhmää.", - "no_user_groups": "Ei käyttäjäryhmiä", - "edit_group": "Muokkaa ryhmää", - "delete_group": "Poista ryhmä", - "delete_group_confirm": "Poistetaanko laiteryhmä {name}?", - "group_deleted": "Laiteryhmä poistettu", - "folder_group_readonly": "Kansiota tukevia ryhmiä hallitaan kansioista.", - "manage_user_groups": "Hallinnoi käyttäjäryhmiä", - "restore_failed": "Laite konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Asiakas otti hiljattain yhteyttä API:in, mutta ei ole rekisteröitynyt signal-palvelimeen (UDP :21116). Käynnistä asiakas uudelleen palvelinsiirron jälkeen.", - "per_page": "Per sivu" - }, - "keys": { - "title": "Palvelimen avaimet", - "subtitle": "Julkinen avain ja määritykset RustDesk-asiakkaille", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Palvelimen tiedot", - "download": "Lataa avain", - "show_qr": "Show QR", - "qr_hint": "Skannaa tämä QR-koodi RustDesk-mobiilisovelluksella", - "no_key": "Julkista avainta ei löytynyt", - "no_key_to_copy": "Ei avainta kopioitavaksi", - "no_qr": "QR-koodi ei ole saatavilla", - "download_success": "Avaintiedosto ladattu", - "not_found": "Avainta ei löydy", - "api_not_found": "API-avainta ei löydy" - }, - "settings": { - "title": "Asetukset", - "subtitle": "Konsolin määritykset ja tiliasetukset", - "tab_general": "General", - "tab_server": "Palvelin", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Kieli", - "change_password": "Vaihda salasana", - "password_desc": "Päivitä tilisi salasana", - "current_password": "Nykyinen salasana", - "new_password": "Uusi salasana", - "confirm_password": "Vahvista salasana", - "save_password": "Päivitä salasana", - "password_changed": "Salasanan vaihto onnistui", - "fill_all_fields": "Täytä kaikki kentät", - "passwords_not_match": "Salasanat eivät täsmää", - "password_requirements": "Salasanavaatimukset", - "password_requirements_not_met": "Salasana ei täytä vaatimuksia", - "req_length": "Vähintään 8 merkkiä", - "req_uppercase": "Vähintään yksi iso kirjain", - "req_lowercase": "Vähintään yksi pieni kirjain", - "req_number": "Ainakin yksi numero", - "server_info": "Palvelimen tiedot", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Viimeaikainen konsolitoiminta", - "no_audit_logs": "Tarkastuslokeja ei löytynyt", - "backend_title": "Palvelimen taustaohjelma", - "backend_desc": "Valitse, mitä palvelintaustaa käytetään laitehallintaan ja signaali-/välityspalveluihin.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Standardi RustDesk signaali- ja välityspalvelimet (hbbs + hbbr). Perus-HTTP API rajoitetuilla päätepisteillä.", - "backend_betterdesk_desc": "Parannettu Go-pohjainen palvelin, jossa on täydellinen REST API-, JWT-todennus, estoluettelo, tunnisteet, reaaliaikaiset WebSocket-tapahtumat ja tarkastusloki.", - "backend_feature_signal": "Signaalipalvelin (ID-rekisteröinti)", - "backend_feature_relay": "Välityspalvelin (yhteysvälitys)", - "backend_feature_basic_api": "Perus-API-rajapinta", - "backend_feature_full_api": "Full REST API (34+ päätepistettä)", - "backend_feature_jwt": "JWT-todennus ja TOTP 2FA", - "backend_feature_blocklist": "IP/ID estolistan hallinta", - "backend_feature_tags": "Laitteen tunnisteet ja ryhmittely", - "backend_feature_audit": "Tarkastustapahtumaloki", - "backend_feature_websocket": "Reaaliaikaiset WebSocket-tapahtumat", - "backend_connection": "Yhteys", - "backend_api_url": "API URL", - "backend_test": "Testaa yhteys", - "backend_testing": "Testataan...", - "backend_save": "Käytä taustaohjelmaa", - "backend_saved": "Palvelimen taustaohjelman vaihto onnistui. Laitetietoja hallinnoi nyt uusi taustajärjestelmä.", - "backend_save_failed": "Palvelimen taustajärjestelmän vaihtaminen epäonnistui", - "backend_test_success": "Yhteys onnistui! Palvelin on tavoitettavissa.", - "backend_test_failed": "Yhteys epäonnistui. Palvelimeen ei saada yhteyttä.", - "backend_confirm_switch": "Haluatko varmasti vaihtaa palvelimen taustaa? Tämä muuttaa laitteiden hallintaa.", - "backend_unreachable": "Ei voi vaihtaa: kohdepalvelin ei ole tavoitettavissa. Käynnistä palvelin ensin.", - "invalid_backend": "Virheellinen taustaohjelman valinta. Valitse \"rustdesk\" tai \"betterdesk\".", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Kaksitekijäinen todennus", - "totp_desc": "Lisää ylimääräinen suojaustaso TOTP-todennussovelluksilla (Google Authenticator, Microsoft Authenticator, Authy jne.)", - "totp_enabled": "2FA käytössä", - "totp_enabled_desc": "Tilisi on suojattu kaksivaiheisella todennuksella.", - "totp_disabled": "2FA Ei käytössä", - "totp_disabled_desc": "Ota kaksivaiheinen todennus käyttöön tilin turvallisuuden lisäämiseksi.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Asenna todennussovellus puhelimeesi", - "totp_step2": "Skannaa alla oleva QR-koodi", - "totp_step3": "Syötä 6-numeroinen koodi vahvistaaksesi", - "totp_manual_key": "Manual key", - "totp_enter_code": "Anna vahvistuskoodi", - "totp_verify_enable": "Vahvista ja ota käyttöön", - "totp_enabled_success": "Kaksivaiheinen todennus käytössä!", - "totp_recovery_warning": "Tallenna nämä palautuskoodit turvalliseen paikkaan. Jokaista koodia voi käyttää vain kerran. Jos menetät käyttöoikeuden todennussovellukseesi, voit kirjautua sisään näiden koodien avulla.", - "totp_done": "Done", - "totp_disable_warning": "Kaksivaiheisen todennuksen poistaminen käytöstä heikentää tilisi turvallisuutta. Vahvista antamalla salasanasi.", - "totp_disabled_success": "Kaksivaiheinen todennus on poistettu käytöstä.", - "tutorials_title": "Oppaat ja oppaat", - "tutorials_desc": "Ohjaa opastettuja kierroksia ja ohjepeittokuvia, jotka näkyvät koko konsolissa", - "tutorials_enabled": "Ota opetusohjelmat käyttöön", - "tutorials_enabled_hint": "Kun se on poistettu käytöstä, opetusohjelmat eivät ala automaattisesti ja ohjepainike piilotetaan", - "tutorials_reset_hint": "Merkitse kaikki opetusohjelmat näkymättömiksi, jotta ne voidaan näyttää uudelleen", - "tutorials_enabled_toast": "Opetusohjelmat käytössä", - "tutorials_disabled_toast": "Opetusohjelmat poistettu käytöstä", - "tutorials_reset_toast": "Kaikki opetusohjelmat on nollattu", - "tab_auth": "Todennus", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Määritä ulkoinen todennus LDAP:n tai Active Directory:n avulla. Käyttäjät voivat kirjautua sisään verkkotunnuksensa tunnistetiedoilla.", - "ldap_enabled": "Ota LDAP-todennus käyttöön", - "ldap_enabled_hint": "Kun tämä on käytössä, käyttäjät voivat kirjautua sisään LDAP/AD-tunnistetiedoilla. Paikalliset tilit toimivat edelleen varatilinä.", - "ldap_connection": "Palvelinyhteys", - "ldap_host": "Isäntä", - "ldap_port": "Portti", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Ohita TLS-vahvistus", - "ldap_timeout": "Yhteyden aikakatkaisu(t)", - "ldap_timeout_hint": "Sekuntia odottaa LDAP-palvelimen vastausta", - "ldap_bind_mode": "Sidontatila", - "ldap_direct_bind": "Suora sidos", - "ldap_direct_bind_hint": "Sido suoraan DN-mallilla sen sijaan, että käyttäisit hakua palvelutilin avulla.", - "ldap_bind_dn": "Sido DN (palvelutili)", - "ldap_bind_dn_hint": "Käyttäjien etsimiseen käytetyn vain luku -palvelutilin erottuva nimi.", - "ldap_bind_password": "Sidonta salasana", - "ldap_base_dn": "Perus DN", - "ldap_base_dn_hint": "Hakupohja käyttäjien löytämiseen, esim. dc=esimerkki,dc=fi", - "ldap_user_filter": "Käyttäjän suodatin", - "ldap_user_filter_hint": "LDAP-suodatin käyttäjien löytämiseksi. Käytä {{username}} paikkamerkkinä. Oletus: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Direct Bind DN -malli", - "ldap_direct_bind_dn_hint": "DN-malli suoraa sidontaa varten. Käytä {{username}} paikkamerkkinä, esim. uid={{username}},ou=käyttäjät,dc=esimerkki,dc=com", - "ldap_user_attrs": "Käyttäjän attribuutit", - "ldap_attr_id": "Käyttäjänimi Attribuutti", - "ldap_attr_email": "Sähköpostin attribuutti", - "ldap_attr_name": "Näyttönimi-attribuutti", - "ldap_group_mapping": "Ryhmä → Roolikartoitus", - "ldap_group_base_dn": "Ryhmän tukikohta DN", - "ldap_group_base_dn_hint": "Jätä tyhjäksi, jos haluat käyttää Base DN:ää", - "ldap_group_filter": "Ryhmäsuodatin", - "ldap_group_attr_name": "Ryhmän nimen attribuutti", - "ldap_default_role": "Oletusrooli", - "ldap_default_role_hint": "Rooli on määritetty käyttäjille, joiden LDAP-ryhmät eivät vastaa mitään kartoitusta", - "ldap_role_viewer": "Katsoja", - "ldap_role_operator": "Operaattori", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Ryhmä → Roolikartta", - "ldap_group_role_map_hint": "Yhdistä LDAP-ryhmät BetterDesk-rooleihin. Muoto: GroupDN=rooli erotettuna | (putki). Esimerkki: CN=Järjestelmänvalvojat,DC=esimerkki,DC=com=admin|CN=Ops,DC=esimerkki,DC=com=operaattori", - "ldap_test_connection": "Testaa yhteys", - "ldap_testing": "Testataan...", - "ldap_test_success": "Yhteys onnistui! LDAP-palvelin on tavoitettavissa ja sidosvaltuudet ovat voimassa.", - "ldap_test_failed": "Yhteys epäonnistui", - "ldap_save": "Tallenna LDAP-kokoonpano", - "ldap_saved": "LDAP-määritykset tallennettu onnistuneesti", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Määritä kertakirjautuminen OpenID Connect -palveluntarjoajan kautta (Azure AD, Okta, Google, Keycloak jne.).", - "oidc_enabled": "Ota OIDC-todennus käyttöön", - "oidc_enabled_hint": "Salli käyttäjien kirjautua sisään ulkoisen identiteetin tarjoajan avulla", - "oidc_provider": "Henkilöllisyyden tarjoaja", - "oidc_display_name": "Painikkeen näyttönimi", - "oidc_display_name_hint": "Kirjautumispainikkeessa näkyvä teksti (esim. Azure AD, Okta)", - "oidc_issuer_url": "Liikkeeseenlaskija URL", - "oidc_issuer_url_hint": "OpenID Connect -myöntäjä URL (löytö tapahtuu automaattisesti)", - "oidc_client_id": "Asiakastunnus", - "oidc_client_secret": "Asiakkaan salaisuus", - "oidc_redirect_url": "Uudelleenohjaus URL (takaisinsoitto)", - "oidc_redirect_url_hint": "Sen on vastattava täsmälleen sitä, mitä IDP:ssäsi on määritetty. Yleensä: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Soveltamisalat", - "oidc_use_pkce": "Käytä PKCE (suositus)", - "oidc_auto_discovery": "Automaattinen löytäminen", - "oidc_allow_signup": "Luo käyttäjiä automaattisesti", - "oidc_manual_endpoints": "Manuaaliset päätepisteiden URL-osoitteet", - "oidc_authorization_url": "Valtuutuksen päätepiste", - "oidc_token_url": "Tokenin päätepiste", - "oidc_userinfo_url": "Käyttäjätiedot Päätepiste", - "oidc_claim_mapping": "Vaatimusten kartoitus", - "oidc_claim_username": "Käyttäjätunnusvaatimus", - "oidc_claim_email": "Sähköpostivaatimus", - "oidc_claim_name": "Näyttönimivaatimus", - "oidc_claim_groups": "Ryhmät väittävät", - "oidc_role_mapping": "Roolikartoitus", - "oidc_default_role": "Oletusrooli", - "oidc_group_role_map": "Ryhmä → Roolikartoitus", - "oidc_group_role_map_hint": "Yksi kartoitus riviä kohden: ryhmän_nimi=role (esim. admins=admin, operators=operator)", - "oidc_test_discovery": "Testaa löytöä", - "oidc_testing": "Testataan...", - "oidc_test_success": "Löytö onnistui! Päätepisteet ratkaistu.", - "oidc_test_failed": "Löytö epäonnistui", - "oidc_issuer_required": "Myöntäjä URL vaaditaan löytämisen testaamiseen", - "oidc_save": "Tallenna OIDC-kokoonpano", - "oidc_saved": "OIDC-määritykset tallennettu onnistuneesti", - "connection_mode_title": "Yhteysstrategia", - "connection_mode_desc": "Hallitse, miten RustDesk-työpöytäasiakkaat yhdistävät.", - "connection_mode_label": "Oletusyhteystila", - "connection_mode_p2p_first": "P2P ensin (suositeltu) — yritä suoraa yhteyttä, siirry releheen", - "connection_mode_relay_only": "Vain relé — kaikki istunnot käyttävät relépalvelinta", - "connection_mode_advanced": "Lisäasetukset", - "connection_mode_fallback_ms": "P2P-varauksen aikakatkaisuraja (ms)", - "connection_mode_same_nat_relay": "Pakota relé, kun molemmat vertaistahot jakavat saman julkisen IP-osoitteen (NAT hairpin)", - "connection_mode_network_hint": "P2P vaatii UDP-portin 21116 olevan saavutettavissa asiakkaiden välillä.", - "connection_mode_save": "Tallenna", - "connection_mode_save_restart": "Tallenna ja käynnistä palvelin uudelleen", - "connection_mode_saved": "Yhteystila tallennettu", - "connection_mode_restart_started": "Palvelimen uudelleenkäynnistys aloitettu", - "connection_mode_restart_failed": "Palvelimen uudelleenkäynnistys epäonnistui", - "connection_mode_not_configurable": "Yhteystilaa ei voi muuttaa tässä asennuksessa", - "connection_mode_source_saved": "Tallennettu kohteeseen", - "connection_mode_source_defaults": "Käyttää palvelimen oletusarvoja (ei kirjoitettavissa paneelista)", - "connection_mode_runtime": "Aktiivinen palvelin", - "advanced_title": "Asetustiedostot", - "advanced_desc": "Muokkaa palvelimen asetustiedostoja suoraan. Muutokset saattavat vaatia palveluiden uudelleenkäynnistyksen.", - "advanced_warning": "Nämä tiedostot sisältävät salaisuuksia. Muokkaa vain, jos tiedät mitä teet.", - "advanced_files_label": "Tiedostot", - "advanced_select_file": "Valitse tiedosto listasta sen sisällön tarkastelemiseksi tai muokkaamiseksi.", - "advanced_reload": "Lataa uudelleen", - "advanced_save": "Tallenna tiedosto", - "advanced_apply_restart": "Käytä (käynnistä palvelu uudelleen)", - "advanced_saved": "Asetustiedosto tallennettu", - "advanced_restart_after_save": "Asetukset tallennettu. Käynnistetäänkö kyseinen palvelu uudelleen nyt?", - "advanced_restart_confirm": "Käynnistetäänkö liittyvät BetterDesk-palvelut uudelleen? Aktiiviset yhteydet saattavat katketa lyhyesti.", - "advanced_restart_console_confirm": "Käynnistetäänkö verkkokonsolin palvelu uudelleen? Selainistuntosi katkeaa lyhyesti.", - "advanced_restart_started": "Palvelun uudelleenkäynnistys aloitettu", - "advanced_restart_done": "Konsoli käynnistetty uudelleen — ladataan sivu uudelleen…", - "advanced_restart_polling": "Odotetaan konsolin palaamista verkkoon…", - "advanced_restart_timeout": "Uudelleenkäynnistys lähetettiin, mutta konsoli ei vastannut ajoissa. Tarkista lokit ja lataa manuaalisesti.", - "advanced_restart_failed": "Palvelun uudelleenkäynnistys epäonnistui", - "advanced_save_confirm": "Tallennetaanko muutokset tähän tiedostoon? Edellisestä versiosta luodaan varmuuskopio.", - "advanced_unsaved_confirm": "Sinulla on tallentamattomia muutoksia. Hylätäänkö ne?", - "advanced_no_files": "Ei asetustiedostoja saatavilla tässä järjestelmässä.", - "advanced_readonly": "vain luku", - "advanced_missing": "puuttuu", - "advanced_new_file": "Uusi tiedosto (ei luoda ennen tallentamista)", - "advanced_new_file_hint": "Uusi tiedosto — lisää sisältö ja tallenna", - "advanced_backup_created": "varmuuskopio luotu", - "advanced_error_unknown": "Tuntematon asetustiedosto", - "advanced_error_not_found": "Tiedostoa ei ole olemassa", - "advanced_error_too_large": "Tiedosto ylittää maksimikoon (512 Kt)", - "advanced_error_binary": "Binaaritiedostoja ei voi muokata paneelissa", - "advanced_error_invalid": "Virheellinen tiedoston sisältö", - "advanced_error_not_writable": "Tiedosto ei ole konsoliprosessin kirjoitettavissa", - "enrollment_title": "Laitteen rekisteröinti (RustDesk)", - "enrollment_desc": "Hallitse, miten uudet RustDesk-asiakkaat rekisteröityvät.", - "enrollment_require_approval": "Vaadi operaattorin hyväksyntä (hallittu tila)", - "enrollment_require_approval_hint": "Kun käytössä, tuntemattomat asiakkaat asetetaan jonoon, kunnes operaattori hyväksyy ne.", - "enrollment_rich_approve": "Täydellinen hyväksyntälomake (nimi, kansio, ryhmät, tunnisteet)", - "enrollment_rich_approve_hint": "Näyttää yksityiskohtaisen valintaikkunan rekisteröintipyyntöjä hyväksyttäessä.", - "enrollment_tag_picker": "Valitse tunnisteet olemassa olevista laitetunnisteista", - "enrollment_tag_picker_hint": "Antaa operaattoreille mahdollisuuden valita tunnisteet Laitteet-sivun listasta.", - "enrollment_open_requests": "Avoimet rekisteröintipyynnöt", - "enrollment_pending_count": "{count} odottava rekisteröintipyyntö", - "tab_advanced": "Lisäasetukset", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Palvelu neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Tiedosto", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (palveluyksikkö)", - "advanced_file_systemd-server": "systemd: betterdesk-server (palveluyksikkö)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-asetukset)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrointi)", - "advanced_restart_none": "Für diese Tiedosto ist kein Palveluneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Kirjautuminen epäonnistui", - "action_logout": "Logout", - "action_password_change": "Salasana vaihdettu", - "action_2fa_enable": "2FA käytössä", - "action_2fa_disable": "2FA pois käytöstä", - "action_user_create": "Käyttäjän luoma", - "action_user_update": "Käyttäjä päivitetty", - "action_user_delete": "Käyttäjä poistettu", - "action_settings_update": "Asetukset päivitetty", - "action_device_ban": "Laite estetty", - "action_device_unban": "Laitteen esto poistettu", - "action_device_delete": "Laite poistettu" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Kokoonpanoasetukset", - "server_address": "Palvelimen osoite", - "server_address_hint": "Palvelimesi verkkotunnus tai IP-osoite", - "custom_port": "Custom Port", - "port_hint": "Jätä tyhjäksi oletuksena (21116)", - "relay_server": "Välityspalvelin", - "relay_placeholder": "Sama kuin ID-palvelin, jos se on tyhjä", - "relay_hint": "Valinnainen: erillinen välityspalvelimen osoite", - "include_key": "Sisällytä julkinen avain asetuksiin", - "generate": "Luo kokoonpano", - "output": "Konfigurointilähtö", - "usage_title": "Yhteyden tiedot", - "generated": "Kokoonpano luotu", - "server_required": "Palvelimen osoite vaaditaan", - "nothing_to_copy": "Luo ensin kokoonpano", - "bundles_title": "Agenttipaketit", - "new_bundle": "Uusi nippu", - "editor_title": "Bundle-editori", - "empty_state": "Valitse nippu vasemmalta tai luo uusi aloittaaksesi.", - "loading": "Ladataan…", - "no_bundles": "Ei vielä paketteja. Luo ensimmäinen.", - "bundle_name": "Paketin nimi", - "bundle_name_hint": "Vain sisäinen tarra – ei näytetä loppukäyttäjille.", - "short_link": "Lyhyt latauslinkki", - "short_link_hint": "Käytetään julkisessa URL-osoitteessa (/d/…). Vain pienet kirjaimet, numerot ja yhdysmerkit (2–32 merkkiä). Täytetään automaattisesti paketin nimestä — lyhennä helpompaa jakamista varten (esim. acme).", - "branding_section": "Brändäys", - "company_name": "Yrityksen/tuotemerkki", - "short_text": "Lyhyt kuvaus", - "contact_email": "Yhteydenotto sähköposti", - "contact_phone": "Yhteydenotto puhelin", - "contact_url": "Ota yhteyttä sivustoon", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG tai WebP. Enintään 256 kt.", - "logo_clear": "Poista logo", - "primary_color": "Pääväri", - "accent_color": "Otsikon väri", - "default_lang": "Oletuskieli", - "allow_unattended": "Salli valvomaton pääsy", - "allow_unattended_hint": "Kun tämä on käytössä, agentti näyttää pysyvän salasanan käyttäjän pääsyä varten.", - "save": "Tallenna paketti", - "revoke": "Peruuta", - "unrevoke": "Ota uudelleen käyttöön", - "revoked": "Peruutettu", - "preview_title": "Live-esikatselu", - "preview_hint": "Loppukäyttäjäagentin ikkunan likimääräinen ulkoasu.", - "preview_default_name": "BetterDesk Tuki", - "preview_status_ready": "Valmis", - "preview_id": "Sinun henkilöllisyystodistus", - "preview_password": "Salasana", - "preview_chat": "Keskustele tuen kanssa", - "preview_settings": "Asetukset (vain järjestelmänvalvoja)", - "preview_quit": "Lopeta (vain järjestelmänvalvoja)", - "download_link_title": "Lataa linkki", - "download_link_hint": "Jaa tämä linkki loppukäyttäjille. He näkevät tuotemerkin lataussivun. Vanhat hex-linkit toimivat edelleen lyhyen linkin vaihtamisen jälkeen.", - "open_portal": "Avaa", - "created": "Paketti luotu", - "saved": "Paketti tallennettu", - "deleted": "Paketti poistettu", - "revoked_ok": "Paketti peruutettu", - "unrevoked_ok": "Paketti otettu uudelleen käyttöön", - "link_copied": "Linkki kopioitu leikepöydälle", - "copy_failed": "Ei voitu kopioida automaattisesti – kopioi manuaalisesti", - "unsaved_confirm": "Hylätäänkö tallentamattomat muutokset?", - "confirm_revoke": "Perutaanko tämä paketti? Latauslinkki lakkaa toimimasta.", - "confirm_unrevoke": "Otetaanko tämä paketti uudelleen käyttöön?", - "confirm_delete": "Poistetaanko tämä paketti pysyvästi? Tätä ei voi kumota.", - "errors": { - "validation_failed": "Vahvistus epäonnistui", - "name_required": "Paketin nimi vaaditaan", - "company_name_required": "Yrityksen nimi vaaditaan", - "logo_invalid": "Logon on oltava kelvollinen kuvatiedosto", - "logo_too_large": "Logon on oltava kooltaan 256 kt tai pienempi", - "logo_read_failed": "Logotiedoston lukeminen epäonnistui", - "primary_color_invalid": "Ensisijaisen värin on oltava heksadesimaaliluku (esim. #2563eb)", - "accent_color_invalid": "Otsikon värin on oltava heksadesimaaliluku (esim. #1e293b)", - "contact_url_invalid": "Yhteydenottosivuston on oltava kelvollinen URL", - "server_host_required": "Julkinen palvelinosoite on pakollinen", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Lyhyt linkki saa sisältää vain pieniä kirjaimia, numeroita ja yhdysmerkkejä", - "slug_too_short": "Lyhyen linkin on oltava vähintään 2 merkkiä", - "slug_too_long": "Lyhyt linkki saa olla enintään 32 merkkiä", - "slug_taken": "Tämä lyhyt linkki on jo toisen paketin käytössä" - }, - "legacy_title": "Asiakasmääritysten luontityökalu", - "connection_section": "Palvelinyhteys", - "server_host": "Julkinen palvelinosoite", - "server_host_hint": "Toimialue tai julkinen IP, jolla loppukäyttäjät tavoittavat BetterDesk-palvelimesi.", - "use_https": "Käytä HTTPS / WSS (suositeltu)", - "enrollment_per_device": "Per laite — hyväksy Rekisteröinneissä", - "builds_title": "Asiakasohjelman koonnokset", - "rebuild_all": "Kokoa kaikki uudelleen", - "rebuild_confirm": "Kokoa kaikki alustan asennusohjelmat uudelleen tälle paketille?", - "build_status_ready": "Valmis", - "build_status_pending": "Jonossa", - "build_status_building": "Kootaan", - "build_status_failed": "Epäonnistui", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Laiteeregistrierung", - "enrollment_token_pending": "Pro Laite nach Genehmigung", - "enrollment_token_set": "Pro Laite — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Laitee im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Valmis-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} epäonnistui", - "build_error_hint": "Koonnosvirhe", - "preview_help": "Pyydä apua" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID-palvelin", - "relay_server": "Välityspalvelin", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Tarkistetaan...", - "label": "Status", - "no_signal": "Ei signaalia" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Yhdistä Desktop Client -sovelluksen kautta", - "remote_viewer": "Etäkatselin", - "web_remote": "Verkkoetäyhteys", - "details": "Details", - "edit": "Muokkaa", - "delete": "Poista", - "ban": "Ban", - "unban": "Unban", - "save": "Tallenna", - "cancel": "Peruuta", - "confirm": "Vahvista", - "close": "Sulje", - "clear": "Clear", - "ok": "OK", - "saved": "Tallennettu onnistuneesti", - "back": "Takaisin", - "create": "Luo", - "dismiss": "Dismiss", - "view_all": "Näytä kaikki", - "cdap_viewer": "CDAP Snapshot -katseluohjelma", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s sitten", - "minutes_ago": "{count}m sitten", - "hours_ago": "{count}h sitten", - "days_ago": "{count}d sitten", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Käyttäjien hallinta", - "subtitle": "Hallinnoi konsolin käyttäjiä ja käyttöoikeuksia", - "add_user": "Add User", - "edit_user": "Muokkaa käyttäjää", - "username": "Käyttäjätunnus", - "username_placeholder": "Anna käyttäjänimi", - "username_hint": "Vain 3-32 merkkiä, kirjaimia, numeroita ja alaviivoja", - "password": "Salasana", - "password_placeholder": "Anna salasana", - "password_hint": "Vähintään 8 merkkiä sekakokoisina isoilla kirjaimilla, numeroilla ja symboleilla", - "password_leave_empty": "Jätä tyhjäksi pitääksesi ajan tasalla", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Luotu", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Luo käyttäjä", - "edit": "Muokkaa", - "reset_password": "Palauta salasana", - "new_password": "Uusi salasana", - "delete_title": "Poista käyttäjä", - "delete_confirm": "Haluatko varmasti poistaa käyttäjän {username}?", - "delete_success": "Käyttäjän poistaminen onnistui", - "user_created": "Käyttäjän luominen onnistui", - "user_updated": "Käyttäjän päivitys onnistui", - "password_reset_success": "Salasanan palautus onnistui", - "empty_title": "Käyttäjiä ei löytynyt", - "empty_text": "Lisää käyttäjiä hallitaksesi konsolin käyttöoikeuksia", - "fill_required": "Täytä kaikki pakolliset kentät", - "invalid_username": "Käyttäjätunnuksessa saa olla vain 3-32 merkkiä, kirjaimia, numeroita ja alaviivoja", - "username_exists": "Käyttäjätunnus on jo olemassa", - "weak_password": "Salasana on liian heikko", - "password_too_short": "Salasanassa on oltava vähintään 8 merkkiä", - "invalid_role": "Virheellinen rooli", - "cannot_demote_self": "Et voi alentaa itseäsi", - "cannot_delete_self": "Et voi poistaa omaa tiliäsi", - "last_admin": "Viimeistä järjestelmänvalvojaa ei voi poistaa", - "admin_only": "Tämä ominaisuus on vain järjestelmänvalvojien käytettävissä", - "password_required": "Salasana vaaditaan", - "not_found": "Käyttäjää ei löydy", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Turvallisuuden parhaat käytännöt", - "tip_strong_passwords": "Käytä vahvoja, ainutlaatuisia salasanoja jokaiselle käyttäjälle", - "tip_unique_accounts": "Luo henkilökohtainen tili jokaiselle henkilölle", - "tip_viewer_role": "Käytä katsojan roolia käyttäjille, jotka tarvitsevat vain lukuoikeuden", - "tip_operator_role": "Käytä operaattoriroolia käyttäjille, joiden on hallittava laitteita, mutta ei käyttäjiä", - "tip_audit_logs": "Tarkista tarkastuslokit säännöllisesti epäilyttävän toiminnan varalta", - "role_pro": "Pro (vain API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Palvelimen järjestelmänvalvoja", - "role_global_admin": "Maailmanlaajuinen järjestelmänvalvoja", - "organizations": "Organisaatiot", - "user_organizations": "Organisaatiot kohteelle {username}", - "no_organizations": "Käyttäjää ei ole määritetty mihinkään organisaatioon", - "org_removed": "Organisaatiotehtävä poistettu", - "server_role_label": "Palvelimen rooli", - "server_role_hint": "Määrittää, mitä käyttäjä voi tehdä koko konsolissa (paneelin käyttö, palvelimen kokoonpano, tarkastus jne.).", - "org_membership_section": "Organisaation jäsenyys", - "org_membership_hint": "Käyttäjä voi kuulua useisiin organisaatioihin. Organisaatiorooli hallitsee vain organisaation sisäisiä käyttöoikeuksia ja on riippumaton yllä olevasta palvelinroolista.", - "column_organizations": "Organisaatiot", - "no_orgs_short": "—", - "org_count_one": "{count} organisaatio", - "org_count_many": "{count} organisaatiot", - "all_orgs_assigned": "Käyttäjä on jo jokaisen organisaation jäsen.", - "user_groups": "Käyttäjäryhmät", - "user_groups_hint": "Käyttäjäryhmien avulla voidaan myöntää pääsy valituille laiteryhmille.", - "loading_user_groups": "Ladataan käyttäjäryhmiä...", - "no_user_groups": "Käyttäjäryhmiä ei ole saatavilla", - "create_user_group": "Luo ryhmä", - "edit_user_group": "Muokkaa käyttäjäryhmää", - "delete_user_group": "Poista käyttäjäryhmä", - "delete_user_group_confirm": "Poistetaanko käyttäjäryhmä {name}? Jäsenet menettävät tämän ryhmän kautta myönnetyn käyttöoikeuden.", - "user_group_created": "Käyttäjäryhmä luotu", - "user_group_updated": "Käyttäjäryhmä päivitetty", - "user_group_deleted": "Käyttäjäryhmä poistettu", - "user_group_not_found": "Käyttäjäryhmää ei löydy", - "group_name": "Ryhmän nimi", - "group_name_placeholder": "Operaattorit", - "group_note": "Note", - "group_note_placeholder": "Valinnainen huomautus", - "group_name_required": "Ryhmän nimi vaaditaan", - "group_members_count": "{count} jäseniä", - "provider": "Palveluntarjoaja", - "provider_local": "Paikallinen", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Identiteettitarjoajan hallitsema", - "provider_managed_hint": "Tätä tiliä hallitsee ulkoinen identiteettitarjoaja (LDAP/AD tai SSO). Salasana ja rooli ovat tarjoajan hallinnassa." - }, - "folders": { - "title": "Folders", - "create": "Luo kansio", - "edit": "Muokkaa kansiota", - "delete": "Poista kansio", - "name": "Folder Name", - "name_placeholder": "Anna kansion nimi", - "name_required": "Kansion nimi vaaditaan", - "name_too_long": "Kansion nimi on liian pitkä (enintään 50 merkkiä)", - "color": "Color", - "icon": "Icon", - "not_found": "Kansiota ei löydy", - "delete_confirm": "Haluatko varmasti poistaa tämän kansion? Laitteet poistetaan.", - "delete_success": "Kansion poistaminen onnistui", - "created": "Kansion luominen onnistui", - "updated": "Kansion päivitys onnistui", - "no_devices_selected": "Ei valittuja laitteita", - "devices_moved": "Laitteet siirrettiin onnistuneesti", - "device_assigned": "Laite määritetty kansioon", - "unassigned": "Unassigned", - "all_devices": "Kaikki laitteet", - "drag_hint": "Järjestä ne vetämällä laitteet kansioihin", - "move_to": "Siirrä kohteeseen", - "toggle_sidebar": "Vaihda sivupalkki" - }, + "no_groups": "Ei vielä ryhmiä", + "manual_groups": "Manuaaliset ryhmät", + "dynamic_memberships": "Dynaamiset jäsenyydet", + "group_allowed_user_groups": "Sallitut käyttäjäryhmät", + "group_allowed_user_groups_hint": "Valittujen käyttäjäryhmien käyttäjät voivat käyttää tätä laiteryhmää.", + "no_user_groups": "Ei käyttäjäryhmiä", + "edit_group": "Muokkaa ryhmää", + "delete_group": "Poista ryhmä", + "delete_group_confirm": "Poistetaanko laiteryhmä {name}?", + "group_deleted": "Laiteryhmä poistettu", + "folder_group_readonly": "Kansiota tukevia ryhmiä hallitaan kansioista.", + "manage_user_groups": "Hallinnoi käyttäjäryhmiä", + "restore_failed": "Laite konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Asiakas otti hiljattain yhteyttä API:in, mutta ei ole rekisteröitynyt signal-palvelimeen (UDP :21116). Käynnistä asiakas uudelleen palvelinsiirron jälkeen.", + "per_page": "Per sivu" + }, + "keys": { + "title": "Palvelimen avaimet", + "subtitle": "Julkinen avain ja määritykset RustDesk-asiakkaille", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Palvelimen tiedot", + "download": "Lataa avain", + "show_qr": "Show QR", + "qr_hint": "Skannaa tämä QR-koodi RustDesk-mobiilisovelluksella", + "no_key": "Julkista avainta ei löytynyt", + "no_key_to_copy": "Ei avainta kopioitavaksi", + "no_qr": "QR-koodi ei ole saatavilla", + "download_success": "Avaintiedosto ladattu", + "not_found": "Avainta ei löydy", + "api_not_found": "API-avainta ei löydy" + }, + "settings": { + "title": "Asetukset", + "subtitle": "Konsolin määritykset ja tiliasetukset", + "tab_general": "General", + "tab_server": "Palvelin", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Kieli", + "change_password": "Vaihda salasana", + "password_desc": "Päivitä tilisi salasana", + "current_password": "Nykyinen salasana", + "new_password": "Uusi salasana", + "confirm_password": "Vahvista salasana", + "save_password": "Päivitä salasana", + "password_changed": "Salasanan vaihto onnistui", + "fill_all_fields": "Täytä kaikki kentät", + "passwords_not_match": "Salasanat eivät täsmää", + "password_requirements": "Salasanavaatimukset", + "password_requirements_not_met": "Salasana ei täytä vaatimuksia", + "req_length": "Vähintään 8 merkkiä", + "req_uppercase": "Vähintään yksi iso kirjain", + "req_lowercase": "Vähintään yksi pieni kirjain", + "req_number": "Ainakin yksi numero", + "server_info": "Palvelimen tiedot", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Viimeaikainen konsolitoiminta", + "no_audit_logs": "Tarkastuslokeja ei löytynyt", + "backend_title": "Palvelimen taustaohjelma", + "backend_desc": "Valitse, mitä palvelintaustaa käytetään laitehallintaan ja signaali-/välityspalveluihin.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Standardi RustDesk signaali- ja välityspalvelimet (hbbs + hbbr). Perus-HTTP API rajoitetuilla päätepisteillä.", + "backend_betterdesk_desc": "Parannettu Go-pohjainen palvelin, jossa on täydellinen REST API-, JWT-todennus, estoluettelo, tunnisteet, reaaliaikaiset WebSocket-tapahtumat ja tarkastusloki.", + "backend_feature_signal": "Signaalipalvelin (ID-rekisteröinti)", + "backend_feature_relay": "Välityspalvelin (yhteysvälitys)", + "backend_feature_basic_api": "Perus-API-rajapinta", + "backend_feature_full_api": "Full REST API (34+ päätepistettä)", + "backend_feature_jwt": "JWT-todennus ja TOTP 2FA", + "backend_feature_blocklist": "IP/ID estolistan hallinta", + "backend_feature_tags": "Laitteen tunnisteet ja ryhmittely", + "backend_feature_audit": "Tarkastustapahtumaloki", + "backend_feature_websocket": "Reaaliaikaiset WebSocket-tapahtumat", + "backend_connection": "Yhteys", + "backend_api_url": "API URL", + "backend_test": "Testaa yhteys", + "backend_testing": "Testataan...", + "backend_save": "Käytä taustaohjelmaa", + "backend_saved": "Palvelimen taustaohjelman vaihto onnistui. Laitetietoja hallinnoi nyt uusi taustajärjestelmä.", + "backend_save_failed": "Palvelimen taustajärjestelmän vaihtaminen epäonnistui", + "backend_test_success": "Yhteys onnistui! Palvelin on tavoitettavissa.", + "backend_test_failed": "Yhteys epäonnistui. Palvelimeen ei saada yhteyttä.", + "backend_confirm_switch": "Haluatko varmasti vaihtaa palvelimen taustaa? Tämä muuttaa laitteiden hallintaa.", + "backend_unreachable": "Ei voi vaihtaa: kohdepalvelin ei ole tavoitettavissa. Käynnistä palvelin ensin.", + "invalid_backend": "Virheellinen taustaohjelman valinta. Valitse \"rustdesk\" tai \"betterdesk\".", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Kaksitekijäinen todennus", + "totp_desc": "Lisää ylimääräinen suojaustaso TOTP-todennussovelluksilla (Google Authenticator, Microsoft Authenticator, Authy jne.)", + "totp_enabled": "2FA käytössä", + "totp_enabled_desc": "Tilisi on suojattu kaksivaiheisella todennuksella.", + "totp_disabled": "2FA Ei käytössä", + "totp_disabled_desc": "Ota kaksivaiheinen todennus käyttöön tilin turvallisuuden lisäämiseksi.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Asenna todennussovellus puhelimeesi", + "totp_step2": "Skannaa alla oleva QR-koodi", + "totp_step3": "Syötä 6-numeroinen koodi vahvistaaksesi", + "totp_manual_key": "Manual key", + "totp_enter_code": "Anna vahvistuskoodi", + "totp_verify_enable": "Vahvista ja ota käyttöön", + "totp_enabled_success": "Kaksivaiheinen todennus käytössä!", + "totp_recovery_warning": "Tallenna nämä palautuskoodit turvalliseen paikkaan. Jokaista koodia voi käyttää vain kerran. Jos menetät käyttöoikeuden todennussovellukseesi, voit kirjautua sisään näiden koodien avulla.", + "totp_done": "Done", + "totp_disable_warning": "Kaksivaiheisen todennuksen poistaminen käytöstä heikentää tilisi turvallisuutta. Vahvista antamalla salasanasi.", + "totp_disabled_success": "Kaksivaiheinen todennus on poistettu käytöstä.", + "tutorials_title": "Oppaat ja oppaat", + "tutorials_desc": "Ohjaa opastettuja kierroksia ja ohjepeittokuvia, jotka näkyvät koko konsolissa", + "tutorials_enabled": "Ota opetusohjelmat käyttöön", + "tutorials_enabled_hint": "Kun se on poistettu käytöstä, opetusohjelmat eivät ala automaattisesti ja ohjepainike piilotetaan", + "tutorials_reset_hint": "Merkitse kaikki opetusohjelmat näkymättömiksi, jotta ne voidaan näyttää uudelleen", + "tutorials_enabled_toast": "Opetusohjelmat käytössä", + "tutorials_disabled_toast": "Opetusohjelmat poistettu käytöstä", + "tutorials_reset_toast": "Kaikki opetusohjelmat on nollattu", + "tab_auth": "Todennus", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Määritä ulkoinen todennus LDAP:n tai Active Directory:n avulla. Käyttäjät voivat kirjautua sisään verkkotunnuksensa tunnistetiedoilla.", + "ldap_enabled": "Ota LDAP-todennus käyttöön", + "ldap_enabled_hint": "Kun tämä on käytössä, käyttäjät voivat kirjautua sisään LDAP/AD-tunnistetiedoilla. Paikalliset tilit toimivat edelleen varatilinä.", + "ldap_connection": "Palvelinyhteys", + "ldap_host": "Isäntä", + "ldap_port": "Portti", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Ohita TLS-vahvistus", + "ldap_timeout": "Yhteyden aikakatkaisu(t)", + "ldap_timeout_hint": "Sekuntia odottaa LDAP-palvelimen vastausta", + "ldap_bind_mode": "Sidontatila", + "ldap_direct_bind": "Suora sidos", + "ldap_direct_bind_hint": "Sido suoraan DN-mallilla sen sijaan, että käyttäisit hakua palvelutilin avulla.", + "ldap_bind_dn": "Sido DN (palvelutili)", + "ldap_bind_dn_hint": "Käyttäjien etsimiseen käytetyn vain luku -palvelutilin erottuva nimi.", + "ldap_bind_password": "Sidonta salasana", + "ldap_base_dn": "Perus DN", + "ldap_base_dn_hint": "Hakupohja käyttäjien löytämiseen, esim. dc=esimerkki,dc=fi", + "ldap_user_filter": "Käyttäjän suodatin", + "ldap_user_filter_hint": "LDAP-suodatin käyttäjien löytämiseksi. Käytä {{username}} paikkamerkkinä. Oletus: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Direct Bind DN -malli", + "ldap_direct_bind_dn_hint": "DN-malli suoraa sidontaa varten. Käytä {{username}} paikkamerkkinä, esim. uid={{username}},ou=käyttäjät,dc=esimerkki,dc=com", + "ldap_user_attrs": "Käyttäjän attribuutit", + "ldap_attr_id": "Käyttäjänimi Attribuutti", + "ldap_attr_email": "Sähköpostin attribuutti", + "ldap_attr_name": "Näyttönimi-attribuutti", + "ldap_group_mapping": "Ryhmä → Roolikartoitus", + "ldap_group_base_dn": "Ryhmän tukikohta DN", + "ldap_group_base_dn_hint": "Jätä tyhjäksi, jos haluat käyttää Base DN:ää", + "ldap_group_filter": "Ryhmäsuodatin", + "ldap_group_attr_name": "Ryhmän nimen attribuutti", + "ldap_default_role": "Oletusrooli", + "ldap_default_role_hint": "Rooli on määritetty käyttäjille, joiden LDAP-ryhmät eivät vastaa mitään kartoitusta", + "ldap_role_viewer": "Katsoja", + "ldap_role_operator": "Operaattori", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Ryhmä → Roolikartta", + "ldap_group_role_map_hint": "Yhdistä LDAP-ryhmät BetterDesk-rooleihin. Muoto: GroupDN=rooli erotettuna | (putki). Esimerkki: CN=Järjestelmänvalvojat,DC=esimerkki,DC=com=admin|CN=Ops,DC=esimerkki,DC=com=operaattori", + "ldap_test_connection": "Testaa yhteys", + "ldap_testing": "Testataan...", + "ldap_test_success": "Yhteys onnistui! LDAP-palvelin on tavoitettavissa ja sidosvaltuudet ovat voimassa.", + "ldap_test_failed": "Yhteys epäonnistui", + "ldap_save": "Tallenna LDAP-kokoonpano", + "ldap_saved": "LDAP-määritykset tallennettu onnistuneesti", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Määritä kertakirjautuminen OpenID Connect -palveluntarjoajan kautta (Azure AD, Okta, Google, Keycloak jne.).", + "oidc_enabled": "Ota OIDC-todennus käyttöön", + "oidc_enabled_hint": "Salli käyttäjien kirjautua sisään ulkoisen identiteetin tarjoajan avulla", + "oidc_provider": "Henkilöllisyyden tarjoaja", + "oidc_display_name": "Painikkeen näyttönimi", + "oidc_display_name_hint": "Kirjautumispainikkeessa näkyvä teksti (esim. Azure AD, Okta)", + "oidc_issuer_url": "Liikkeeseenlaskija URL", + "oidc_issuer_url_hint": "OpenID Connect -myöntäjä URL (löytö tapahtuu automaattisesti)", + "oidc_client_id": "Asiakastunnus", + "oidc_client_secret": "Asiakkaan salaisuus", + "oidc_redirect_url": "Uudelleenohjaus URL (takaisinsoitto)", + "oidc_redirect_url_hint": "Sen on vastattava täsmälleen sitä, mitä IDP:ssäsi on määritetty. Yleensä: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Soveltamisalat", + "oidc_use_pkce": "Käytä PKCE (suositus)", + "oidc_auto_discovery": "Automaattinen löytäminen", + "oidc_allow_signup": "Luo käyttäjiä automaattisesti", + "oidc_manual_endpoints": "Manuaaliset päätepisteiden URL-osoitteet", + "oidc_authorization_url": "Valtuutuksen päätepiste", + "oidc_token_url": "Tokenin päätepiste", + "oidc_userinfo_url": "Käyttäjätiedot Päätepiste", + "oidc_claim_mapping": "Vaatimusten kartoitus", + "oidc_claim_username": "Käyttäjätunnusvaatimus", + "oidc_claim_email": "Sähköpostivaatimus", + "oidc_claim_name": "Näyttönimivaatimus", + "oidc_claim_groups": "Ryhmät väittävät", + "oidc_role_mapping": "Roolikartoitus", + "oidc_default_role": "Oletusrooli", + "oidc_group_role_map": "Ryhmä → Roolikartoitus", + "oidc_group_role_map_hint": "Yksi kartoitus riviä kohden: ryhmän_nimi=role (esim. admins=admin, operators=operator)", + "oidc_test_discovery": "Testaa löytöä", + "oidc_testing": "Testataan...", + "oidc_test_success": "Löytö onnistui! Päätepisteet ratkaistu.", + "oidc_test_failed": "Löytö epäonnistui", + "oidc_issuer_required": "Myöntäjä URL vaaditaan löytämisen testaamiseen", + "oidc_save": "Tallenna OIDC-kokoonpano", + "oidc_saved": "OIDC-määritykset tallennettu onnistuneesti", + "connection_mode_title": "Yhteysstrategia", + "connection_mode_desc": "Hallitse, miten RustDesk-työpöytäasiakkaat yhdistävät.", + "connection_mode_label": "Oletusyhteystila", + "connection_mode_p2p_first": "P2P ensin (suositeltu) — yritä suoraa yhteyttä, siirry releheen", + "connection_mode_relay_only": "Vain relé — kaikki istunnot käyttävät relépalvelinta", + "connection_mode_advanced": "Lisäasetukset", + "connection_mode_fallback_ms": "P2P-varauksen aikakatkaisuraja (ms)", + "connection_mode_same_nat_relay": "Pakota relé, kun molemmat vertaistahot jakavat saman julkisen IP-osoitteen (NAT hairpin)", + "connection_mode_network_hint": "P2P vaatii UDP-portin 21116 olevan saavutettavissa asiakkaiden välillä.", + "connection_mode_save": "Tallenna", + "connection_mode_save_restart": "Tallenna ja käynnistä palvelin uudelleen", + "connection_mode_saved": "Yhteystila tallennettu", + "connection_mode_restart_started": "Palvelimen uudelleenkäynnistys aloitettu", + "connection_mode_restart_failed": "Palvelimen uudelleenkäynnistys epäonnistui", + "connection_mode_not_configurable": "Yhteystilaa ei voi muuttaa tässä asennuksessa", + "connection_mode_source_saved": "Tallennettu kohteeseen", + "connection_mode_source_defaults": "Käyttää palvelimen oletusarvoja (ei kirjoitettavissa paneelista)", + "connection_mode_runtime": "Aktiivinen palvelin", + "advanced_title": "Asetustiedostot", + "advanced_desc": "Muokkaa palvelimen asetustiedostoja suoraan. Muutokset saattavat vaatia palveluiden uudelleenkäynnistyksen.", + "advanced_warning": "Nämä tiedostot sisältävät salaisuuksia. Muokkaa vain, jos tiedät mitä teet.", + "advanced_files_label": "Tiedostot", + "advanced_select_file": "Valitse tiedosto listasta sen sisällön tarkastelemiseksi tai muokkaamiseksi.", + "advanced_reload": "Lataa uudelleen", + "advanced_save": "Tallenna tiedosto", + "advanced_apply_restart": "Käytä (käynnistä palvelu uudelleen)", + "advanced_saved": "Asetustiedosto tallennettu", + "advanced_restart_after_save": "Asetukset tallennettu. Käynnistetäänkö kyseinen palvelu uudelleen nyt?", + "advanced_restart_confirm": "Käynnistetäänkö liittyvät BetterDesk-palvelut uudelleen? Aktiiviset yhteydet saattavat katketa lyhyesti.", + "advanced_restart_console_confirm": "Käynnistetäänkö verkkokonsolin palvelu uudelleen? Selainistuntosi katkeaa lyhyesti.", + "advanced_restart_started": "Palvelun uudelleenkäynnistys aloitettu", + "advanced_restart_done": "Konsoli käynnistetty uudelleen — ladataan sivu uudelleen…", + "advanced_restart_polling": "Odotetaan konsolin palaamista verkkoon…", + "advanced_restart_timeout": "Uudelleenkäynnistys lähetettiin, mutta konsoli ei vastannut ajoissa. Tarkista lokit ja lataa manuaalisesti.", + "advanced_restart_failed": "Palvelun uudelleenkäynnistys epäonnistui", + "advanced_save_confirm": "Tallennetaanko muutokset tähän tiedostoon? Edellisestä versiosta luodaan varmuuskopio.", + "advanced_unsaved_confirm": "Sinulla on tallentamattomia muutoksia. Hylätäänkö ne?", + "advanced_no_files": "Ei asetustiedostoja saatavilla tässä järjestelmässä.", + "advanced_readonly": "vain luku", + "advanced_missing": "puuttuu", + "advanced_new_file": "Uusi tiedosto (ei luoda ennen tallentamista)", + "advanced_new_file_hint": "Uusi tiedosto — lisää sisältö ja tallenna", + "advanced_backup_created": "varmuuskopio luotu", + "advanced_error_unknown": "Tuntematon asetustiedosto", + "advanced_error_not_found": "Tiedostoa ei ole olemassa", + "advanced_error_too_large": "Tiedosto ylittää maksimikoon (512 Kt)", + "advanced_error_binary": "Binaaritiedostoja ei voi muokata paneelissa", + "advanced_error_invalid": "Virheellinen tiedoston sisältö", + "advanced_error_not_writable": "Tiedosto ei ole konsoliprosessin kirjoitettavissa", + "enrollment_title": "Laitteen rekisteröinti (RustDesk)", + "enrollment_desc": "Hallitse, miten uudet RustDesk-asiakkaat rekisteröityvät.", + "enrollment_require_approval": "Vaadi operaattorin hyväksyntä (hallittu tila)", + "enrollment_require_approval_hint": "Kun käytössä, tuntemattomat asiakkaat asetetaan jonoon, kunnes operaattori hyväksyy ne.", + "enrollment_rich_approve": "Täydellinen hyväksyntälomake (nimi, kansio, ryhmät, tunnisteet)", + "enrollment_rich_approve_hint": "Näyttää yksityiskohtaisen valintaikkunan rekisteröintipyyntöjä hyväksyttäessä.", + "enrollment_tag_picker": "Valitse tunnisteet olemassa olevista laitetunnisteista", + "enrollment_tag_picker_hint": "Antaa operaattoreille mahdollisuuden valita tunnisteet Laitteet-sivun listasta.", + "enrollment_open_requests": "Avoimet rekisteröintipyynnöt", + "enrollment_pending_count": "{count} odottava rekisteröintipyyntö", + "tab_advanced": "Lisäasetukset", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Palvelu neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Tiedosto", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (palveluyksikkö)", + "advanced_file_systemd-server": "systemd: betterdesk-server (palveluyksikkö)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-asetukset)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrointi)", + "advanced_restart_none": "Für diese Tiedosto ist kein Palveluneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Kirjautuminen epäonnistui", + "action_logout": "Logout", + "action_password_change": "Salasana vaihdettu", + "action_2fa_enable": "2FA käytössä", + "action_2fa_disable": "2FA pois käytöstä", + "action_user_create": "Käyttäjän luoma", + "action_user_update": "Käyttäjä päivitetty", + "action_user_delete": "Käyttäjä poistettu", + "action_settings_update": "Asetukset päivitetty", + "action_device_ban": "Laite estetty", + "action_device_unban": "Laitteen esto poistettu", + "action_device_delete": "Laite poistettu" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Varhainen ominaisuus — agenttipakettigeneraattori on aktiivisessa kehityksessä.", + "config_options": "Kokoonpanoasetukset", + "server_address": "Palvelimen osoite", + "server_address_hint": "Palvelimesi verkkotunnus tai IP-osoite", + "custom_port": "Custom Port", + "port_hint": "Jätä tyhjäksi oletuksena (21116)", + "relay_server": "Välityspalvelin", + "relay_placeholder": "Sama kuin ID-palvelin, jos se on tyhjä", + "relay_hint": "Valinnainen: erillinen välityspalvelimen osoite", + "include_key": "Sisällytä julkinen avain asetuksiin", + "generate": "Luo kokoonpano", + "output": "Konfigurointilähtö", + "usage_title": "Yhteyden tiedot", + "generated": "Kokoonpano luotu", + "server_required": "Palvelimen osoite vaaditaan", + "nothing_to_copy": "Luo ensin kokoonpano", + "bundles_title": "Agenttipaketit", + "new_bundle": "Uusi nippu", + "editor_title": "Bundle-editori", + "empty_state": "Valitse nippu vasemmalta tai luo uusi aloittaaksesi.", + "loading": "Ladataan…", + "no_bundles": "Ei vielä paketteja. Luo ensimmäinen.", + "bundle_name": "Paketin nimi", + "bundle_name_hint": "Vain sisäinen tarra – ei näytetä loppukäyttäjille.", + "short_link": "Lyhyt latauslinkki", + "short_link_hint": "Käytetään julkisessa URL-osoitteessa (/d/…). Vain pienet kirjaimet, numerot ja yhdysmerkit (2–32 merkkiä). Täytetään automaattisesti paketin nimestä — lyhennä helpompaa jakamista varten (esim. acme).", + "branding_section": "Brändäys", + "company_name": "Yrityksen/tuotemerkki", + "short_text": "Lyhyt kuvaus", + "contact_email": "Yhteydenotto sähköposti", + "contact_phone": "Yhteydenotto puhelin", + "contact_url": "Ota yhteyttä sivustoon", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG tai WebP. Enintään 256 kt.", + "logo_clear": "Poista logo", + "primary_color": "Pääväri", + "accent_color": "Otsikon väri", + "default_lang": "Oletuskieli", + "allow_unattended": "Salli valvomaton pääsy", + "allow_unattended_hint": "Kun tämä on käytössä, agentti näyttää pysyvän salasanan käyttäjän pääsyä varten.", + "save": "Tallenna paketti", + "revoke": "Peruuta", + "unrevoke": "Ota uudelleen käyttöön", + "revoked": "Peruutettu", + "preview_title": "Live-esikatselu", + "preview_hint": "Loppukäyttäjäagentin ikkunan likimääräinen ulkoasu.", + "preview_default_name": "BetterDesk Tuki", + "preview_status_ready": "Valmis", + "preview_id": "Sinun henkilöllisyystodistus", + "preview_password": "Salasana", + "preview_chat": "Keskustele tuen kanssa", + "preview_settings": "Asetukset (vain järjestelmänvalvoja)", + "preview_quit": "Lopeta (vain järjestelmänvalvoja)", + "download_link_title": "Lataa linkki", + "download_link_hint": "Jaa tämä linkki loppukäyttäjille. He näkevät tuotemerkin lataussivun. Vanhat hex-linkit toimivat edelleen lyhyen linkin vaihtamisen jälkeen.", + "open_portal": "Avaa", + "created": "Paketti luotu", + "saved": "Paketti tallennettu", + "deleted": "Paketti poistettu", + "revoked_ok": "Paketti peruutettu", + "unrevoked_ok": "Paketti otettu uudelleen käyttöön", + "link_copied": "Linkki kopioitu leikepöydälle", + "copy_failed": "Ei voitu kopioida automaattisesti – kopioi manuaalisesti", + "unsaved_confirm": "Hylätäänkö tallentamattomat muutokset?", + "confirm_revoke": "Perutaanko tämä paketti? Latauslinkki lakkaa toimimasta.", + "confirm_unrevoke": "Otetaanko tämä paketti uudelleen käyttöön?", + "confirm_delete": "Poistetaanko tämä paketti pysyvästi? Tätä ei voi kumota.", "errors": { - "forbidden_title": "Pääsy kielletty", - "forbidden_message": "Sinulla ei ole lupaa käyttää tätä resurssia.", - "not_found_title": "Sivua ei löydy", - "not_found_message": "Etsimääsi sivua ei ole olemassa tai se on siirretty.", - "server_error_title": "Palvelinvirhe", - "server_error_message": "Jotain meni pieleen. Yritä myöhemmin uudelleen.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Laitteiden lataaminen epäonnistui", - "load_key_failed": "Avaimen lataaminen epäonnistui", - "load_qr_failed": "QR-koodin lataaminen epäonnistui", - "load_audit_failed": "Tarkastuslokin lataaminen epäonnistui", - "load_users_failed": "Käyttäjien lataaminen epäonnistui", - "load_folders_failed": "Kansioiden lataaminen epäonnistui", - "download_failed": "Lataus epäonnistui", - "logout_failed": "Uloskirjautuminen epäonnistui", - "password_change_failed": "Salasanan vaihto epäonnistui", - "language_change_failed": "Kielen vaihtaminen epäonnistui", - "ban_failed": "Laitteen estäminen epäonnistui", - "unban_failed": "Laitteen eston poistaminen epäonnistui", - "delete_failed": "Laitteen poistaminen epäonnistui", - "change_id_failed": "Laitetunnuksen muuttaminen epäonnistui", - "bulk_delete_failed": "Laitteiden poistaminen epäonnistui", - "sync_failed": "Tilan synkronointi epäonnistui", - "error": "Error", - "not_found": "Not found", - "server_error": "Palvelinvirhe", - "load_device_failed": "Laitteen lataaminen epäonnistui", - "load_orgs_failed": "Organisaatioiden lataaminen epäonnistui" + "validation_failed": "Vahvistus epäonnistui", + "name_required": "Paketin nimi vaaditaan", + "company_name_required": "Yrityksen nimi vaaditaan", + "logo_invalid": "Logon on oltava kelvollinen kuvatiedosto", + "logo_too_large": "Logon on oltava kooltaan 256 kt tai pienempi", + "logo_read_failed": "Logotiedoston lukeminen epäonnistui", + "primary_color_invalid": "Ensisijaisen värin on oltava heksadesimaaliluku (esim. #2563eb)", + "accent_color_invalid": "Otsikon värin on oltava heksadesimaaliluku (esim. #1e293b)", + "contact_url_invalid": "Yhteydenottosivuston on oltava kelvollinen URL", + "server_host_required": "Julkinen palvelinosoite on pakollinen", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Lyhyt linkki saa sisältää vain pieniä kirjaimia, numeroita ja yhdysmerkkejä", + "slug_too_short": "Lyhyen linkin on oltava vähintään 2 merkkiä", + "slug_too_long": "Lyhyt linkki saa olla enintään 32 merkkiä", + "slug_taken": "Tämä lyhyt linkki on jo toisen paketin käytössä" }, - "remote": { - "title": "Etätyöpöytä", - "connecting": "Yhdistetään...", - "waiting_password": "Salasanaa odotellessa", - "authenticating": "Todennetaan...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Salasana vaaditaan", - "enter_password_for": "Anna laitteen salasana", - "password_placeholder": "Laitteen salasana", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Takaisin Laitteisiin", - "fullscreen": "Fullscreen", - "toggle_audio": "Ääni päälle/pois", - "send_keys": "Lähetä avaimet", - "scale_mode": "Scale Mode", - "scale_fit": "Sovita ikkunaan", - "scale_fill": "Fill Window", - "scale_original": "Alkuperäinen koko (1:1)", - "scale_stretch": "Venytä täyteen", - "actions": "Actions", - "lock_screen": "Lukitusnäyttö", - "restart_remote": "Käynnistä etälaite uudelleen", - "refresh_screen": "Päivitä näyttö", - "clipboard_paste": "Liitä leikepöydältä", - "block_input": "Block Input", - "display_settings": "Näyttöasetukset", - "image_quality": "Kuvan laatu", - "quality_best": "Paras (täysi laatu, 60 fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Näytä etäkohdistin", - "lock_after_session": "Lukitse istunnon jälkeen", - "privacy_mode": "Yksityisyystila", - "disable_clipboard": "Poista leikepöytä käytöstä", - "chat": "Chat", - "chat_placeholder": "Kirjoita viesti...", - "record": "Tallennusnäyttö", - "view_only": "Näytä vain", - "pin_toolbar": "Kiinnitä työkalupalkki", - "monitors": "Monitors", - "select_monitor": "Valitse Näyttö", - "quality_speed": "Nopeus (heikko laatu, 60 fps)", - "quality_quality": "Laatu (paras, 30 fps)", - "recording_started": "Nauhoitus alkoi", - "recording_stopped": "Tallennus lopetettiin", - "download_recording": "Lataa tallennus", - "e2e_encrypted": "Päästä päähän -salattu", - "e2e_key_exchange": "Luodaan suojattua kanavaa...", - "confirm_restart": "Haluatko varmasti käynnistää etälaitteen uudelleen?", - "webcodecs_not_supported": "Selaimesi ei tue WebCodecs API. Käytä Chrome 94+ tai Edge 94+.", - "webcodecs_insecure_context": "WebCodecs ei ole käytettävissä HTTP:n kautta. Video käyttää varaohjelmistoa. Parhaan suorituskyvyn saavuttamiseksi käytä HTTPS:tä.", - "webcodecs_fallback_active": "Ohjelmistovideodekooderi aktiivinen (rajoitettu suorituskyky)", - "click_to_start": "Napsauta aloittaaksesi", - "autoplay_blocked": "Selain vaatii käyttäjän toimia videon ja äänen toiston aloittamiseksi.", - "start_playback": "Aloita toisto", - "new_connection": "Uusi yhteys", - "device_id_placeholder": "Anna laitteen tunnus", - "http_warning": "HTTP-tila: rajoitettu H.264-ohjelmiston dekoodaukseen (~15 FPS). Käytä HTTPS:tä täyden suorituskyvyn saavuttamiseksi (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Tiedoston siirto", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Tämä kansio on tyhjä", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Siirto epäonnistui", - "file_show_hidden": "Näytä piilotetut tiedostot", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Anna kansion nimi:", - "file_parent": "Pääkansio", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Kirjoita uusi nimi:", - "file_delete_confirm": "Haluatko varmasti poistaa tämän kohteen?", - "file_cancelled": "Siirto peruttu", - "2fa_required": "2FA-vahvistus vaaditaan", - "2fa_hint": "Syötä 6-numeroinen koodi todennussovelluksesta", - "2fa_invalid": "Anna kelvollinen 6-numeroinen koodi", - "verify": "Verify", - "use_cdap_fallback": "Käytä CDAP-katseluohjelmaa", - "cdap_fallback_hint": "Avaa kevyt JPEG-pollauskatseluohjelma, joka käyttää bd-signal/CDAP:ia RustDesk-reléen sijaan. Hyödyllinen, kun vertaistaho on offline reléssä mutta saavutettavissa agentinhallintakanavan kautta.", - "clipboard_empty": "Leikepöytä on tyhjä", - "clipboard_denied": "Leikepöydän käyttö estetty. HTTPS vaaditaan tai lupaa ei myönnetty.", - "file_loading": "Ladataan...", - "file_timeout": "Etälaite ei vastannut. Tiedostonsiirtoa ei ehkä tueta tai se on poistettu käytöstä etäkoneessa.", - "codec": "Video Codec", - "codec_auto": "Automaattinen (suositus)" + "legacy_title": "Asiakasmääritysten luontityökalu", + "connection_section": "Palvelinyhteys", + "server_host": "Julkinen palvelinosoite", + "server_host_hint": "Toimialue tai julkinen IP, jolla loppukäyttäjät tavoittavat BetterDesk-palvelimesi.", + "use_https": "Käytä HTTPS / WSS (suositeltu)", + "enrollment_per_device": "Per laite — hyväksy Rekisteröinneissä", + "builds_title": "Asiakasohjelman koonnokset", + "rebuild_all": "Kokoa kaikki uudelleen", + "rebuild_confirm": "Kokoa kaikki alustan asennusohjelmat uudelleen tälle paketille?", + "build_status_ready": "Valmis", + "build_status_pending": "Jonossa", + "build_status_building": "Kootaan", + "build_status_failed": "Epäonnistui", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Laiteeregistrierung", + "enrollment_token_pending": "Pro Laite nach Genehmigung", + "enrollment_token_set": "Pro Laite — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Laitee im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Valmis-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} epäonnistui", + "build_error_hint": "Koonnosvirhe", + "preview_help": "Pyydä apua" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID-palvelin", + "relay_server": "Välityspalvelin", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Tarkistetaan...", + "label": "Status", + "no_signal": "Ei signaalia" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Yhdistä Desktop Client -sovelluksen kautta", + "remote_viewer": "Etäkatselin", + "web_remote": "Verkkoetäyhteys", + "details": "Details", + "edit": "Muokkaa", + "delete": "Poista", + "ban": "Ban", + "unban": "Unban", + "save": "Tallenna", + "cancel": "Peruuta", + "confirm": "Vahvista", + "close": "Sulje", + "clear": "Clear", + "ok": "OK", + "saved": "Tallennettu onnistuneesti", + "back": "Takaisin", + "create": "Luo", + "dismiss": "Dismiss", + "view_all": "Näytä kaikki", + "cdap_viewer": "CDAP Snapshot -katseluohjelma", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s sitten", + "minutes_ago": "{count}m sitten", + "hours_ago": "{count}h sitten", + "days_ago": "{count}d sitten", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Käyttäjien hallinta", + "subtitle": "Hallinnoi konsolin käyttäjiä ja käyttöoikeuksia", + "add_user": "Add User", + "edit_user": "Muokkaa käyttäjää", + "username": "Käyttäjätunnus", + "username_placeholder": "Anna käyttäjänimi", + "username_hint": "Vain 3-32 merkkiä, kirjaimia, numeroita ja alaviivoja", + "password": "Salasana", + "password_placeholder": "Anna salasana", + "password_hint": "Vähintään 8 merkkiä sekakokoisina isoilla kirjaimilla, numeroilla ja symboleilla", + "password_leave_empty": "Jätä tyhjäksi pitääksesi ajan tasalla", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Luotu", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Luo käyttäjä", + "edit": "Muokkaa", + "reset_password": "Palauta salasana", + "new_password": "Uusi salasana", + "delete_title": "Poista käyttäjä", + "delete_confirm": "Haluatko varmasti poistaa käyttäjän {username}?", + "delete_success": "Käyttäjän poistaminen onnistui", + "user_created": "Käyttäjän luominen onnistui", + "user_updated": "Käyttäjän päivitys onnistui", + "password_reset_success": "Salasanan palautus onnistui", + "empty_title": "Käyttäjiä ei löytynyt", + "empty_text": "Lisää käyttäjiä hallitaksesi konsolin käyttöoikeuksia", + "fill_required": "Täytä kaikki pakolliset kentät", + "invalid_username": "Käyttäjätunnuksessa saa olla vain 3-32 merkkiä, kirjaimia, numeroita ja alaviivoja", + "username_exists": "Käyttäjätunnus on jo olemassa", + "weak_password": "Salasana on liian heikko", + "password_too_short": "Salasanassa on oltava vähintään 8 merkkiä", + "invalid_role": "Virheellinen rooli", + "cannot_demote_self": "Et voi alentaa itseäsi", + "cannot_delete_self": "Et voi poistaa omaa tiliäsi", + "last_admin": "Viimeistä järjestelmänvalvojaa ei voi poistaa", + "admin_only": "Tämä ominaisuus on vain järjestelmänvalvojien käytettävissä", + "password_required": "Salasana vaaditaan", + "not_found": "Käyttäjää ei löydy", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Turvallisuuden parhaat käytännöt", + "tip_strong_passwords": "Käytä vahvoja, ainutlaatuisia salasanoja jokaiselle käyttäjälle", + "tip_unique_accounts": "Luo henkilökohtainen tili jokaiselle henkilölle", + "tip_viewer_role": "Käytä katsojan roolia käyttäjille, jotka tarvitsevat vain lukuoikeuden", + "tip_operator_role": "Käytä operaattoriroolia käyttäjille, joiden on hallittava laitteita, mutta ei käyttäjiä", + "tip_audit_logs": "Tarkista tarkastuslokit säännöllisesti epäilyttävän toiminnan varalta", + "role_pro": "Pro (vain API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Palvelimen järjestelmänvalvoja", + "role_global_admin": "Maailmanlaajuinen järjestelmänvalvoja", + "organizations": "Organisaatiot", + "user_organizations": "Organisaatiot kohteelle {username}", + "no_organizations": "Käyttäjää ei ole määritetty mihinkään organisaatioon", + "org_removed": "Organisaatiotehtävä poistettu", + "server_role_label": "Palvelimen rooli", + "server_role_hint": "Määrittää, mitä käyttäjä voi tehdä koko konsolissa (paneelin käyttö, palvelimen kokoonpano, tarkastus jne.).", + "org_membership_section": "Organisaation jäsenyys", + "org_membership_hint": "Käyttäjä voi kuulua useisiin organisaatioihin. Organisaatiorooli hallitsee vain organisaation sisäisiä käyttöoikeuksia ja on riippumaton yllä olevasta palvelinroolista.", + "column_organizations": "Organisaatiot", + "no_orgs_short": "—", + "org_count_one": "{count} organisaatio", + "org_count_many": "{count} organisaatiot", + "all_orgs_assigned": "Käyttäjä on jo jokaisen organisaation jäsen.", + "user_groups": "Käyttäjäryhmät", + "user_groups_hint": "Käyttäjäryhmien avulla voidaan myöntää pääsy valituille laiteryhmille.", + "loading_user_groups": "Ladataan käyttäjäryhmiä...", + "no_user_groups": "Käyttäjäryhmiä ei ole saatavilla", + "create_user_group": "Luo ryhmä", + "edit_user_group": "Muokkaa käyttäjäryhmää", + "delete_user_group": "Poista käyttäjäryhmä", + "delete_user_group_confirm": "Poistetaanko käyttäjäryhmä {name}? Jäsenet menettävät tämän ryhmän kautta myönnetyn käyttöoikeuden.", + "user_group_created": "Käyttäjäryhmä luotu", + "user_group_updated": "Käyttäjäryhmä päivitetty", + "user_group_deleted": "Käyttäjäryhmä poistettu", + "user_group_not_found": "Käyttäjäryhmää ei löydy", + "group_name": "Ryhmän nimi", + "group_name_placeholder": "Operaattorit", + "group_note": "Note", + "group_note_placeholder": "Valinnainen huomautus", + "group_name_required": "Ryhmän nimi vaaditaan", + "group_members_count": "{count} jäseniä", + "provider": "Palveluntarjoaja", + "provider_local": "Paikallinen", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Identiteettitarjoajan hallitsema", + "provider_managed_hint": "Tätä tiliä hallitsee ulkoinen identiteettitarjoaja (LDAP/AD tai SSO). Salasana ja rooli ovat tarjoajan hallinnassa." + }, + "folders": { + "title": "Folders", + "create": "Luo kansio", + "edit": "Muokkaa kansiota", + "delete": "Poista kansio", + "name": "Folder Name", + "name_placeholder": "Anna kansion nimi", + "name_required": "Kansion nimi vaaditaan", + "name_too_long": "Kansion nimi on liian pitkä (enintään 50 merkkiä)", + "color": "Color", + "icon": "Icon", + "not_found": "Kansiota ei löydy", + "delete_confirm": "Haluatko varmasti poistaa tämän kansion? Laitteet poistetaan.", + "delete_success": "Kansion poistaminen onnistui", + "created": "Kansion luominen onnistui", + "updated": "Kansion päivitys onnistui", + "no_devices_selected": "Ei valittuja laitteita", + "devices_moved": "Laitteet siirrettiin onnistuneesti", + "device_assigned": "Laite määritetty kansioon", + "unassigned": "Unassigned", + "all_devices": "Kaikki laitteet", + "drag_hint": "Järjestä ne vetämällä laitteet kansioihin", + "move_to": "Siirrä kohteeseen", + "toggle_sidebar": "Vaihda sivupalkki" + }, + "errors": { + "forbidden_title": "Pääsy kielletty", + "forbidden_message": "Sinulla ei ole lupaa käyttää tätä resurssia.", + "not_found_title": "Sivua ei löydy", + "not_found_message": "Etsimääsi sivua ei ole olemassa tai se on siirretty.", + "server_error_title": "Palvelinvirhe", + "server_error_message": "Jotain meni pieleen. Yritä myöhemmin uudelleen.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Laitteiden lataaminen epäonnistui", + "load_key_failed": "Avaimen lataaminen epäonnistui", + "load_qr_failed": "QR-koodin lataaminen epäonnistui", + "load_audit_failed": "Tarkastuslokin lataaminen epäonnistui", + "load_users_failed": "Käyttäjien lataaminen epäonnistui", + "load_folders_failed": "Kansioiden lataaminen epäonnistui", + "download_failed": "Lataus epäonnistui", + "logout_failed": "Uloskirjautuminen epäonnistui", + "password_change_failed": "Salasanan vaihto epäonnistui", + "language_change_failed": "Kielen vaihtaminen epäonnistui", + "ban_failed": "Laitteen estäminen epäonnistui", + "unban_failed": "Laitteen eston poistaminen epäonnistui", + "delete_failed": "Laitteen poistaminen epäonnistui", + "change_id_failed": "Laitetunnuksen muuttaminen epäonnistui", + "bulk_delete_failed": "Laitteiden poistaminen epäonnistui", + "sync_failed": "Tilan synkronointi epäonnistui", + "error": "Error", + "not_found": "Not found", + "server_error": "Palvelinvirhe", + "load_device_failed": "Laitteen lataaminen epäonnistui", + "load_orgs_failed": "Organisaatioiden lataaminen epäonnistui" + }, + "remote": { + "title": "Etätyöpöytä", + "connecting": "Yhdistetään...", + "waiting_password": "Salasanaa odotellessa", + "authenticating": "Todennetaan...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Salasana vaaditaan", + "enter_password_for": "Anna laitteen salasana", + "password_placeholder": "Laitteen salasana", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Takaisin Laitteisiin", + "fullscreen": "Fullscreen", + "toggle_audio": "Ääni päälle/pois", + "send_keys": "Lähetä avaimet", + "scale_mode": "Scale Mode", + "scale_fit": "Sovita ikkunaan", + "scale_fill": "Fill Window", + "scale_original": "Alkuperäinen koko (1:1)", + "scale_stretch": "Venytä täyteen", + "actions": "Actions", + "lock_screen": "Lukitusnäyttö", + "restart_remote": "Käynnistä etälaite uudelleen", + "refresh_screen": "Päivitä näyttö", + "clipboard_paste": "Liitä leikepöydältä", + "block_input": "Block Input", + "display_settings": "Näyttöasetukset", + "image_quality": "Kuvan laatu", + "quality_best": "Paras (täysi laatu, 60 fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Näytä etäkohdistin", + "lock_after_session": "Lukitse istunnon jälkeen", + "privacy_mode": "Yksityisyystila", + "disable_clipboard": "Poista leikepöytä käytöstä", + "chat": "Chat", + "chat_placeholder": "Kirjoita viesti...", + "record": "Tallennusnäyttö", + "view_only": "Näytä vain", + "pin_toolbar": "Kiinnitä työkalupalkki", + "monitors": "Monitors", + "select_monitor": "Valitse Näyttö", + "quality_speed": "Nopeus (heikko laatu, 60 fps)", + "quality_quality": "Laatu (paras, 30 fps)", + "recording_started": "Nauhoitus alkoi", + "recording_stopped": "Tallennus lopetettiin", + "download_recording": "Lataa tallennus", + "e2e_encrypted": "Päästä päähän -salattu", + "e2e_key_exchange": "Luodaan suojattua kanavaa...", + "confirm_restart": "Haluatko varmasti käynnistää etälaitteen uudelleen?", + "webcodecs_not_supported": "Selaimesi ei tue WebCodecs API. Käytä Chrome 94+ tai Edge 94+.", + "webcodecs_insecure_context": "WebCodecs ei ole käytettävissä HTTP:n kautta. Video käyttää varaohjelmistoa. Parhaan suorituskyvyn saavuttamiseksi käytä HTTPS:tä.", + "webcodecs_fallback_active": "Ohjelmistovideodekooderi aktiivinen (rajoitettu suorituskyky)", + "click_to_start": "Napsauta aloittaaksesi", + "autoplay_blocked": "Selain vaatii käyttäjän toimia videon ja äänen toiston aloittamiseksi.", + "start_playback": "Aloita toisto", + "new_connection": "Uusi yhteys", + "device_id_placeholder": "Anna laitteen tunnus", + "http_warning": "HTTP-tila: rajoitettu H.264-ohjelmiston dekoodaukseen (~15 FPS). Käytä HTTPS:tä täyden suorituskyvyn saavuttamiseksi (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Tiedoston siirto", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Tämä kansio on tyhjä", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Siirto epäonnistui", + "file_show_hidden": "Näytä piilotetut tiedostot", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Anna kansion nimi:", + "file_parent": "Pääkansio", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Kirjoita uusi nimi:", + "file_delete_confirm": "Haluatko varmasti poistaa tämän kohteen?", + "file_cancelled": "Siirto peruttu", + "2fa_required": "2FA-vahvistus vaaditaan", + "2fa_hint": "Syötä 6-numeroinen koodi todennussovelluksesta", + "2fa_invalid": "Anna kelvollinen 6-numeroinen koodi", + "verify": "Verify", + "use_cdap_fallback": "Käytä CDAP-katseluohjelmaa", + "cdap_fallback_hint": "Avaa kevyt JPEG-pollauskatseluohjelma, joka käyttää bd-signal/CDAP:ia RustDesk-reléen sijaan. Hyödyllinen, kun vertaistaho on offline reléssä mutta saavutettavissa agentinhallintakanavan kautta.", + "clipboard_empty": "Leikepöytä on tyhjä", + "clipboard_denied": "Leikepöydän käyttö estetty. HTTPS vaaditaan tai lupaa ei myönnetty.", + "file_loading": "Ladataan...", + "file_timeout": "Etälaite ei vastannut. Tiedostonsiirtoa ei ehkä tueta tai se on poistettu käytöstä etäkoneessa.", + "codec": "Video Codec", + "codec_auto": "Automaattinen (suositus)" + }, + "branding": { + "identity_title": "Brändin identiteetti", + "identity_desc": "Mukauta konsolissa näkyvää sovelluksen nimeä ja kuvausta", + "app_name": "Sovelluksen nimi", + "app_description": "Sovelluksen kuvaus", + "logo_title": "Logo", + "logo_desc": "Valitse, miten logosi näkyy sivupalkissa ja kirjautumissivulla", + "logo_type_icon": "Materiaalin kuvake", + "logo_type_svg": "SVG-koodi", + "logo_type_image": "Kuva-URL", + "logo_icon_name": "Kuvakkeen nimi", + "logo_icon_hint": "Anna materiaalikuvakkeiden nimi (esim. dns, pilvi, tietoturva). Katso fonts.google.com/icons", + "logo_svg_code": "SVG-koodi", + "logo_svg_hint": "Liitä SVG-merkintäsi tähän. Tukee kaikkia -elementtejä poluilla ja tyyleillä.", + "logo_image_upload": "Lataa kuva", + "logo_image_choose": "Valitse kuvatiedosto", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Virheellinen tiedostotyyppi. Käytä PNG, JPG, GIF, WebP tai SVG.", + "preview": "Esikatselu", + "colors_title": "Värimalli", + "colors_desc": "Mukauta väripalettia. Jätä tyhjäksi, jos haluat käyttää oletusasetuksia.", + "colors_backgrounds": "Taustat", + "colors_text": "Teksti", + "colors_accents": "Korostusvärit", + "colors_borders": "Reunat", + "import_export_title": "Tuo / Vie", + "import_export_desc": "Tallenna teemasi JSON-tiedostona tai tuo se toisesta esiintymästä", + "export_theme": "Vie teema", + "import_theme": "Tuo teema", + "reset_defaults": "Palauta oletusarvoihin", + "save_branding": "Tallenna brändäys", + "saved": "Brändäyksen tallennus onnistui. Ladataan uudelleen...", + "exported": "Teema viety", + "imported": "Teeman tuonti onnistui. Ladataan uudelleen...", + "import_error": "Teeman tuonti epäonnistui. Virheellinen tiedostomuoto.", + "reset_confirm": "Haluatko varmasti palauttaa brändäyksen oletusasetuksiin? Tätä ei voi kumota.", + "reset_success": "Brändi palautettu oletusasetuksiin. Ladataan uudelleen...", + "logo_type_text": "Tekstilogo", + "logo_text": "Logoteksti", + "logo_text_hint": "Ensisijainen teksti näkyy brändisi logona", + "logo_text_accent": "Korostusteksti", + "logo_text_accent_hint": "Logon alla oleva toissijainen teksti (esim. tuotteen nimi tai tunnuslause)", + "logo_upload_success": "Logo lähetetty onnistuneesti.", + "typography_title": "Typografia", + "typography_desc": "Valitse fontit otsikoille ja leipätekstille. Fontit ladataan palvelimelle itseisännöintiä varten.", + "font_heading": "Otsikon fontti", + "font_heading_hint": "Käytetään otsikoissa (H1–H6) ja tekstilogossa", + "font_body": "Leipätekstifontti", + "font_body_hint": "Käytetään leipätekstissä ja käyttöliittymäelementeissä", + "font_search_placeholder": "Hae fontteja...", + "font_system_default": "Järjestelmän oletus", + "font_clear": "Tyhjennä", + "font_cat_all": "Kaikki", + "font_downloaded_count": "palvelimelle ladatut fontit", + "powered_by": "Powered by", + "background_title": "Tausta ja ulkoasu", + "background_desc": "Aseta konsolin tausta, liukuväri tai tasainen tausta.", + "bg_type_none": "Ei mitään", + "bg_type_color": "Tasainen väri", + "bg_type_gradient": "Liukuväri", + "bg_type_image": "Kuva", + "bg_color": "Taustaväri", + "bg_gradient": "CSS-liukuväri", + "bg_gradient_hint": "Mikä tahansa kelvollinen CSS-liukuväri, esim. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Lataa taustakuva", + "bg_image_choose": "Valitse kuvatiedosto", + "bg_image_hint": "PNG, JPG, WebP tai GIF. Enintään 8 Mt.", + "bg_image_url": "Kuvan polku / URL", + "bg_size": "Kuvan koko", + "bg_size_cover": "Peitä (täytä näyttö)", + "bg_size_contain": "Sovita (fit)", + "bg_size_auto": "Auto (alkuperäinen)", + "bg_blur": "Taustan sumennus", + "bg_overlay": "Tumma peite", + "bg_overlay_hint": "Tummentaa taustaa paremman tekstin luettavuuden vuoksi.", + "bg_image_too_large": "Kuva on liian suuri. Enimmäiskoko on 8 Mt.", + "bg_image_invalid_type": "Virheellinen tiedostotyyppi. Käytä PNG, JPG, WebP tai GIF.", + "bg_upload_success": "Taustakuva ladattu.", + "login_title": "Kirjautumissivu", + "login_desc": "Mukauta kirjautumisruudun otsikko, alaotsikko ja tausta.", + "login_heading": "Kirjautumisotsikko", + "login_heading_placeholder": "Tervetuloa takaisin", + "login_subheading": "Kirjautumisen alaotsikko", + "login_subheading_placeholder": "Kirjaudu tilillesi", + "login_bg_inherit": "Sama kuin konsoli", + "agent_title": "Agentin lataussivu", + "agent_desc": "Mukauta loppukäyttäjille näytettävä julkinen agentin latausportaali.", + "agent_show_powered": "Näytä \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Näytä BetterDesk-merkintä latausportaalin alatunnisteessa.", + "footer_title": "Alatunniste ja tekijänoikeus", + "footer_desc": "Lisää mukautettu alatunnisterivi kirjautumisruutuun ja konsolin sivupalkkiin.", + "footer_text": "Alatunnistedteksti", + "footer_text_hint": "esim. tekijänoikeusilmoitus tai yrityksen nimi.", + "show_powered": "Näytä \"BetterDesk\"-merkintä", + "show_powered_hint": "Näytä BetterDesk-nimi ja versio kirjautumisen alatunnisteessa ja sivupalkissa.", + "custom_css_title": "Mukautettu CSS", + "custom_css_desc": "Edistynyt: lisää mukautettu CSS konsoliin ja kirjautumissivulle.", + "custom_css_hint": "Käytä varoen. Enintään 20 000 merkkiä." + }, + "device_detail": { + "tab_overview": "Yleiskatsaus", + "tab_tags": "Tunnisteet ja muistiinpanot", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Yhteys", + "section_manage": "Hallinto", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Tämä laite on kielletty", + "no_reason": "Ei annettu syytä", + "tags": "Tags", + "no_tags": "Tälle laitteelle ei ole määritetty tunnisteita", + "tag_placeholder": "Anna tunnisteen nimi...", + "add_tag": "Add", + "tag_exists": "Tämä tunniste on jo olemassa", + "notes": "Notes", + "notes_placeholder": "Lisää muistiinpanoja tästä laitteesta...", + "danger_zone": "Danger Zone", + "action_connect_web": "Yhdistä selaimella", + "action_connect_web_desc": "Yhdistä selaimen etätyöpöydän kautta", + "action_native_remote": "BetterDesk Kaukosäädin", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Yhdistä työpöytäsovelluksella", + "action_connect_desktop_desc": "Avaa työpöytäasiakassovelluksessa", + "action_change_id_desc": "Vaihda laitteen rekisteröintitunnus", + "action_ban_desc": "Estä tätä laitetta muodostamasta yhteyttä", + "action_unban_desc": "Anna tämän laitteen muodostaa yhteys uudelleen", + "action_delete_desc": "Poista tämä laite pysyvästi", + "tab_hardware": "Hardware", + "tab_metrics": "Mittarit", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Koodausominaisuudet", + "section_live_metrics": "Live-mittarit", + "section_current_usage": "Nykyinen käyttö", + "section_usage_history": "Käyttöhistoria", + "os": "Käyttöjärjestelmä", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU-taajuus", + "total_memory": "Kokonaismuisti", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Päivitetty", + "device_groups": "ryhmät", + "no_sysinfo": "Laitteistotietoja ei ole saatavilla", + "no_sysinfo_hint": "Järjestelmätiedot tulevat näkyviin, kun laite lähettää sysinfo-raportin", + "no_metrics": "Mittatietoja ei ole saatavilla", + "no_metrics_hint": "Mittarit tulevat näkyviin, kun laite lähettää sykeraportteja", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Tiedostot", + "agent_lazy_hint": "Napsauta tätä välilehteä ladataksesi reaaliaikaiset tiedot agentista", + "agent_offline": "Agentti on offline-tilassa", + "agent_timeout": "Agentti ei vastannut ajoissa", + "agent_error": "Tietojen lataaminen agentilta epäonnistui", + "service_name": "Name", + "service_display": "Näyttönimi", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Hallittujen laitteiden laitteisto- ja ohjelmistoluettelo", + "device_id": "Laitteen tunnus", + "hostname": "Hostname", + "os": "Käyttöjärjestelmä", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Kokonaismuisti", + "memory_used": "Used Memory", + "memory_available": "Käytettävissä oleva muisti", + "memory_usage": "Muistin käyttö", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Verkkoliitännät", + "software": "Software", + "software_count": "Asennettu ohjelmisto", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fyysiset ytimet", + "logical_cores": "Loogiset ytimet", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Saatavilla", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-osoitteet", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Keräilijä Juoksemassa", + "collector_stopped": "Keräilijä pysähtynyt", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Kerätty klo", + "no_data": "Varastotietoja ei ole vielä saatavilla. Napsauta \"Kerää nyt\" kerätäksesi järjestelmätiedot.", + "no_devices": "Varastotietoja sisältäviä laitteita ei löytynyt", + "detail_title": "Laitevaraston tiedot", + "telemetry": "Telemetry", + "view_detail": "Näytä tiedot", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Tuki lippuja ja ongelmien seurantaa", + "create": "New Ticket", + "edit": "Muokkaa lippua", + "delete": "Poista lippu", + "detail": "Lippujen tiedot", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Määrätty vastaanottajalle", + "created_by": "Luonut", + "device": "Laite", + "sla_due": "SLA Due", + "created_at": "Luotu", + "updated_at": "Päivitetty", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Avaa", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Kirjoita kommentti...", + "internal_note": "Sisäinen huomautus (ei näy loppukäyttäjille)", + "attachments": "Attachments", + "upload_attachment": "Lataa liite", + "download": "Download", + "connect_device": "Yhdistä laitteeseen", + "no_tickets": "Lippuja ei löytynyt", + "no_comments": "Ei vielä kommentteja", + "no_attachments": "Ei liitteitä", + "title_required": "Otsikko vaaditaan", + "delete_confirm": "Haluatko varmasti poistaa lipun #{id}?", + "delete_success": "Lippu poistettu onnistuneesti", + "created_success": "Lipun luominen onnistui", + "updated_success": "Lippu päivitetty onnistuneesti", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Hae liput...", + "assign_to_me": "Määrää minulle", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Avaa", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Toiminnan seuranta", + "subtitle": "Sovelluksen käytön ja tyhjäkäynnin seuranta", + "device": "Laite", + "hostname": "Hostname", + "sessions": "Istunnot", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Suosituimmat sovellukset", + "app_name": "Application", + "window_title": "Ikkunan otsikko", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Istuntojen määrä", + "total_active": "Aktiivinen yhteensä", + "total_idle": "Total Idle", + "detail_count": "Yksityiskohdat Records", + "no_data": "Toimintatietoja ei ole saatavilla", + "no_sessions": "Ei istuntoja", + "filter_from": "Alkaen", + "filter_to": "Vastaanottaja", + "filter_apply": "Käytä suodatinta", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Hae laitteita...", + "date_range": "Date Range", + "device_id": "Laitteen tunnus", + "session_start": "Istunnon aloitus", + "session_end": "Istunnon loppu", + "user": "User", + "no_activity": "Ei tallennettua toimintaa", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Ei sovelluksia" + }, + "automation": { + "title": "Automaatio ja hälytykset", + "subtitle": "Varoitussäännöt, etäkomennot ja SMTP-määritykset", + "rules": "Alert Rules", + "rules_subtitle": "Määritä ehdot, jotka käynnistävät ilmoitukset", + "alerts": "Varoitushistoria", + "alerts_subtitle": "Tarkastele ja kuitata käynnistettyjä hälytyksiä", + "commands": "Etäkomennot", + "commands_subtitle": "Lähetä komentoja etälaitteisiin", + "smtp": "SMTP-asetukset", + "smtp_subtitle": "Sähköposti-ilmoitusasetukset", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Kuntotyyppi", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Kohdelaite", + "scope_all": "Kaikki laitteet", + "cooldown": "Jäähdytys (sekuntia)", + "notify_emails": "Ilmoitussähköpostit", + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "create_rule": "Luo sääntö", + "edit_rule": "Muokkaa sääntöä", + "delete_rule": "Poista sääntö", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Laukaistiin klo", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Suurempi kuin", + "op_gte": "Suurempi tai yhtä suuri", + "op_lt": "Less than", + "op_lte": "Vähemmän tai yhtä suuret", + "op_eq": "Yhtä", + "op_neq": "Ei yhtä suuri kuin", + "type_cpu_usage": "Prosessorin käyttö (%)", + "type_memory_usage": "Muistin käyttö (%)", + "type_disk_usage": "Levyn käyttö (%)", + "type_offline_duration": "Offline-kesto (s)", + "type_idle_duration": "Joutokäynnin kesto (s)", + "type_custom": "Custom", + "command_type": "Komentotyyppi", + "command_payload": "Komento / komentosarja", + "command_result": "Result", + "command_status": "Status", + "send_command": "Lähetä komento", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Epäonnistui", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Käyttäjätunnus", + "smtp_pass": "Salasana", + "smtp_from": "Osoitteesta", + "smtp_test": "Testaa yhteys", + "smtp_save": "Tallenna asetukset", + "smtp_test_success": "Yhteys onnistui", + "smtp_test_failed": "Yhteys epäonnistui", + "no_rules": "Varoitussääntöjä ei ole määritetty", + "no_alerts": "Hälytyksiä ei laukaistu", + "no_commands": "Ei lähetetty komentoja", + "id_payload_required": "Laitetunnus ja hyötykuorma vaaditaan", + "no_commands_sent": "Mitään komentoja ei ole vielä lähetetty" + }, + "file_transfer": { + "title": "Tiedoston siirto", + "transfers": "Transfers", + "new_transfer": "Uusi siirto", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Tiedoston koko", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Laite", + "initiated_by": "Aloittaja", + "created_at": "Luotu klo", + "cancel": "Peruuta", + "cancel_confirm": "Haluatko varmasti peruuttaa tämän siirron?", + "download_file": "Lataa tiedosto", + "browse_files": "Selaa tiedostoja", + "select_file": "Valitse Tiedosto", + "select_device": "Valitse Laite", + "no_transfers": "Ei tiedostojen siirtoja", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Epäonnistui", + "status_cancelled": "Cancelled", + "bytes_transferred": "Tavut siirretty", + "chunks": "Chunks", + "transfer_started": "Siirto aloitettu", + "transfer_completed": "Siirto suoritettu", + "transfer_failed": "Siirto epäonnistui", + "transfer_cancelled": "Siirto peruttu", + "max_file_size": "Tiedoston enimmäiskoko: 4 Gt", + "error_too_large": "Tiedosto on liian suuri", + "error_no_device": "Laitetta ei ole valittu", + "error_no_file": "Tiedostoa ei ole valittu" + }, + "network": { + "title": "Verkon valvonta", + "targets": "Seurantatavoitteet", + "add_target": "Add Target", + "edit_target": "Muokkaa kohdetta", + "delete_target": "Poista kohde", + "delete_confirm": "Haluatko varmasti poistaa tämän kohteen?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Aikakatkaisu (ms)", + "interval": "Aikaväli (ms)", + "enabled": "Käytössä", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Tarkista historia", + "stats": "Statistics", + "total_targets": "Tavoitteet yhteensä", + "targets_up": "Targets Up", + "targets_down": "Kohteet alas", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Verkkotyökalut", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Portin tarkistus", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Käynnistä näyttö", + "monitor_stop": "Pysäytysnäyttö", + "monitor_running": "Monitori on käynnissä", + "monitor_stopped": "Monitori pysähtyy", + "no_targets": "Valvontakohteita ei ole määritetty", + "no_history": "Tarkistushistoriaa ei ole saatavilla", + "error_code": "Error", + "status_code": "HTTP Tilakoodi", + "search_targets": "Hakukohteet...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Tarkista historia", + "name_host_required": "Nimi ja isäntä vaaditaan", + "uptime": "Uptime", + "response_time": "Vastausaika", + "avg_response": "Keskimääräinen vastaus", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Vastausaika (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Viimeiset 24 tuntia", + "last_7d": "Last 7 days", + "last_30d": "Viimeiset 30 päivää" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP-käytännöt", + "add_policy": "Lisää käytäntö", + "edit_policy": "Muokkaa käytäntöä", + "delete_policy": "Poista käytäntö", + "delete_confirm": "Haluatko varmasti poistaa tämän käytännön?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB Laite", + "rule_type_file": "Tiedoston käyttö", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Toimittajatunnus (VID)", + "pid": "Tuotetunnus (PID)", + "serial": "Sarjanumero", + "device_class": "Laiteluokka", + "drive_type": "Drive Type", + "file_extensions": "Tiedoston laajennukset", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Tiedosto", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "DLP-käytäntöjä ei ole määritetty", + "no_events": "Ei tallennettuja DLP-tapahtumia", + "stats": "Statistics", + "total_events": "Tapahtumat yhteensä", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Tiedosto Tapahtumat", + "device_id": "Laitteen tunnus", + "policy_matched": "Käytäntö sovitettu", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Yhteensä käytännöt", + "active_policies": "Aktiiviset käytännöt", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Käytännöt", + "tab_events": "Events", + "search_policies": "Hakukäytännöt...", + "create_policy": "Luo käytäntö", + "policy_type": "Käytännön tyyppi", + "scope": "Scope", + "events_count": "Events", + "search_events": "Hae tapahtumia...", + "event_time": "Event Time", + "device": "Laite", + "policy": "politiikka", + "detail": "Detail", + "scope_help": "Pilkuilla eroteltu laitetunnukset tai jätä tyhjäksi kaikille", + "scope_all": "Kaikki laitteet", + "active": "Active", + "type_file_type": "Tiedostotyyppi", + "type_clipboard": "Leikepöytä", + "type_screen_share": "Näytön jako", + "type_file_transfer": "Tiedoston siirto", + "policy_desc": "Käytännön kuvaus", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Luo raportti", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Laitteen yhteenveto", + "type_activity": "Toiminnan yhteenveto", + "type_security": "Turvallisuusraportti", + "type_tickets": "Lippuraportti", + "type_network": "Verkkoraportti", + "type_inventory": "Varastoraportti", + "type_alerts": "Varoitusraportti", + "saved": "Tallennetut raportit", + "save_report": "Tallenna raportti", + "delete_report": "Poista raportti", + "delete_confirm": "Haluatko varmasti poistaa tämän tallennetun raportin?", + "no_saved": "Ei tallennettuja raportteja", + "report_title": "Title", + "created_by": "Luonut", + "created_at": "Luotu klo", + "filters": "Filters", + "date_from": "Alkupäivä", + "date_to": "Vastaanottaja", + "device_filter": "Laitteen tunnus", + "generated_at": "Luotu klo", + "section": "Tietoosio", + "total_devices": "Laitteita yhteensä", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Alustan jakelu", + "top_applications": "Suosituimmat sovellukset", + "total_active": "Aktiivinen aika yhteensä", + "total_idle": "Tyhjäkäyntiaika yhteensä", + "dlp_stats": "DLP-tilastot", + "banned_devices": "Kielletyt laitteet", + "audit_logs": "Audit Logs", + "ticket_stats": "Lippujen tilastot", + "category_distribution": "Luokka Jakelu", + "priority_distribution": "Ensisijainen jakelu", + "targets_status": "Kohteiden tila", + "os_distribution": "Käyttöjärjestelmän jakelu", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Viimeaikaiset hälytykset", + "tab_generate": "Luo raportti", + "tab_saved": "Tallennetut raportit", + "type_devices_desc": "Yleiskatsaus kaikista laitteista, alustoista ja tiloista", + "type_activity_desc": "Yhteenveto sovelluksen käytöstä ja lepotilasta", + "type_security_desc": "Estä toiminnot, DLP-tapahtumat ja tarkastuslokit", + "type_tickets_desc": "Lipputilastot ja SLA:n suorituskyky", + "type_network_desc": "Verkon seurantatavoitteet ja käyttöaikatiedot", + "type_inventory_desc": "Yhteenveto laitteisto- ja ohjelmistoluettelosta", + "type_alerts_desc": "Varoitussäännöt ja laukaistu hälytyshistoria", + "report_name": "Report Name", + "format": "Format", + "save": "Tallenna raportti", + "preview": "Preview", + "download": "Download", + "delete_saved": "Poista raportti", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Muokkaa vuokralaista", + "delete_tenant": "Poista vuokralainen", + "delete_confirm": "Haluatko varmasti poistaa tämän vuokralaisen? Kaikki laite- ja käyttäjämääritykset poistetaan.", + "name": "Name", + "slug": "Slug", + "contact_name": "Yhteyshenkilön nimi", + "contact_email": "Yhteydenotto Sähköposti", + "max_devices": "Max laitteet", + "max_devices_hint": "0 = rajoittamaton", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Laitteet", + "users": "Users", + "assign_device": "Määritä laite", + "assign_devices": "Määritä laitteet", + "remove_device": "Poista laite", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Vuokralaisia ei ole määritetty", + "no_devices": "Tälle vuokraajalle ei ole määritetty laitteita", + "no_users": "Tälle vuokraajalle ei ole määritetty käyttäjiä", + "stats": "Vuokralaisten tilastot", + "total_devices": "Laitteita yhteensä", + "online_devices": "Online-laitteet", + "total_users": "Total Users", + "created_at": "Luotu klo", + "updated_at": "Päivitetty klo", + "slug_exists": "Vuokralaisen etana on jo olemassa", + "total_tenants": "Vuokralaisia yhteensä", + "active_tenants": "Aktiiviset vuokralaiset", + "search": "Etsi vuokralaisia...", + "create_tenant": "Luo vuokralainen", + "detail": "Vuokralaisen tiedot", + "contact": "Contact", + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Hae laitetunnuksen, isäntänimen tai IP-osoitteen perusteella...", + "no_registrations": "No registration requests", + "col_device_id": "Laitteen tunnus", + "col_hostname": "Isäntänimi", + "col_platform": "Alusta", + "col_ip": "IP-osoite", + "col_version": "Versio", + "col_status": "Tila", + "col_requested": "Pyydetty", + "col_actions": "Toiminnot", + "status_pending": "Odottaa", + "status_approved": "Hyväksytty", + "status_rejected": "Hylätty", + "approve_btn": "Hyväksy", + "approve_confirm": "Haluatko varmasti hyväksyä tämän laitteen? Se vastaanottaa palvelimen tunnistetiedot ja voi muodostaa yhteyden automaattisesti.", + "approved_success": "Laitteen rekisteröinti hyväksytty", + "reject_btn": "Hylkää", + "reject_title": "Hylkää rekisteröinti", + "reject_confirm": "Haluatko varmasti hylätä tämän rekisteröintipyynnön?", + "reject_reason": "Syy (valinnainen)", + "reject_reason_placeholder": "Anna hylkäämisen syy...", + "rejected_success": "Laitteen rekisteröinti hylätty", + "delete_confirm": "Haluatko varmasti poistaa tämän rekisteröintitietueen?", + "deleted_success": "Rekisteröintitietue poistettu", + "enrollment_title": "Laitteen rekisteröinti", + "enrollment_subtitle": "Odottavat rekisteröintipyynnöt BetterDesk-työpöytäasiakkailta", + "enrollment_empty": "Ei vireillä olevia ilmoittautumispyyntöjä", + "enrollment_approve": "Hyväksy", + "enrollment_reject": "Hylkää", + "enrollment_display_name": "Näyttönimi", + "enrollment_display_name_placeholder": "Anna nimi tälle laitteelle...", + "enrollment_sync_mode": "Synkronointitila", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Laitteen rekisteröinti hyväksytty", + "enrollment_rejected_success": "Laitteen rekisteröinti hylätty", + "approve_title": "Hyväksy laite", + "field_name": "Laitteen nimi", + "field_name_placeholder": "Anna nimi tälle laitteelle...", + "field_sync_mode": "Synkronointitila", + "sync_standard": "Vakio — tasapainoinen synkronointi", + "sync_silent": "Hiljainen — minimaalinen telemetria", + "sync_turbo": "Turbo — aggressiivinen synkronointi", + "field_tags": "Tunnisteet", + "field_tags_placeholder": "Pilkulla erotetut tunnisteet (esim. toimisto, kannettava)...", + "field_tags_existing": "Olemassa olevat tunnisteet", + "field_tag_add_placeholder": "Lisää uusi tunniste...", + "field_tag_add_btn": "Lisää", + "field_groups": "Laiteryhmät", + "field_folder": "Kansio", + "field_folder_none": "Ei kansiota", + "reject_ban_option": "Estä tämä laite", + "reject_ban_hint": "Laite estetään eikä se voi lähettää uusia rekisteröintipyyntöjä.", + "banner_open_mode": "Rekisteröinti on avoinna — uudet RustDesk-asiakkaat rekisteröityvät ilman operaattorin hyväksyntää.", + "banner_locked_mode": "Rekisteröinti on lukittu — vain tunnisteeseen sidotut laitteet voivat rekisteröityä.", + "enrollment_settings_link": "Rekisteröintiasetukset" + }, + "backup": { + "title": "Varmuuskopio", + "desc": "Lataa täydellinen varmuuskopio konsolikokoonpanosta, käyttäjistä, ryhmistä ja asetuksista. Go server-vertaisdata sisällytetään, kun BetterDesk-taustaosa on aktiivinen.", + "restore_title": "Palauta", + "restore_desc": "Lataa aiemmin ladattu varmuuskopiotiedosto konsolin kokoonpanon palauttamiseksi. Valitse alta palautettavat osiot.", + "stat_users": "Käyttäjät", + "stat_settings": "Asetukset", + "stat_folders": "Kansiot", + "stat_groups": "ryhmät", + "stat_strategies": "Strategiat", + "stat_backend": "Tausta", + "download": "Lataa varmuuskopio", + "creating": "Luodaan varmuuskopiota...", + "download_success": "Varmuuskopion lataus onnistui", + "upload": "Lataa varmuuskopio", + "restore_confirm": "Haluatko varmasti palauttaa tämän varmuuskopion? Valitut osat korvataan.", + "restore_success": "Varmuuskopion palautus onnistui. Jotkut muutokset saattavat edellyttää sivun uudelleenlataamista.", + "restored": "Palautettu", + "skipped": "Ohitettu", + "backup_date": "Varmuuskopiopäivä", + "opt_settings": "Konsolin asetukset", + "opt_branding": "Brändäys / teema", + "opt_folders": "Laitteen kansiot", + "opt_groups": "Käyttäjä- ja laiteryhmät", + "opt_addressbooks": "Osoitekirjat", + "opt_users": "Käyttäjätilit", + "opt_users_warning": "Tuhoava: korvaa KAIKKI käyttäjätilit varmuuskopiotiedoilla. Saatat olla kirjautunut ulos.", + "no_file": "Varmuuskopiotiedostoa ei ole valittu", + "invalid_json": "Virheellinen varmuuskopiotiedosto: ei kelpaa JSON", + "invalid_format": "Virheellinen varmuuskopiotiedosto: ei BetterDesk-varmuuskopio", + "stat_database": "Tietokantamoottori", + "stat_keys": "Palvelinavaimet mukana", + "stat_env": "Ympäristötiedosto", + "stat_uploads": "Bränditiedostot", + "restart_required": "Jotkin palautetut komponentit (avaimet / .env / Go-tietokanta) vaativat palvelun uudelleenkäynnistyksen.", + "security_warning": "Tämä varmuuskopio sisältää salaisuuksia. Säilytä se turvallisesti äläkä koskaan jaa sitä.", + "restore_warning": "Salaisuuksien tai Go-palvelintietokannan palauttaminen ylikirjoittaa palvelimen identiteetin ja vaatii palvelun uudelleenkäynnistyksen.", + "opt_database": "Tietokanta (kaikki taulut)", + "opt_database_hint": "Tuo kaikki konsolidata uudelleen. Ei uudelleenkäynnistystä tarvita.", + "opt_uploads": "Bränditiedostot", + "opt_uploads_hint": "Logot ja ladatut kuvat.", + "opt_secrets": "Palvelinavaimet ja salaisuudet", + "opt_secrets_warning": "Ylikirjoittaa Ed25519-palvelinidentiteetin, API-avaimen ja istuntosalaisuuden. Vaatii palvelun uudelleenkäynnistyksen.", + "opt_env": "Ympäristötiedosto (.env)", + "opt_env_warning": "Ylikirjoittaa SESSION_SECRET, API-avaimen, tietokannan DSN:n, portit ja TLS-asetukset. Vaatii palvelun uudelleenkäynnistyksen.", + "opt_godb": "Go-palvelintietokanta", + "opt_godb_warning": "Ylikirjoittaa Go-palvelimen SQLite-tietokannan (vain SQLite-tausta). Vaatii palvelun uudelleenkäynnistyksen." + }, + "cdap": { + "device_detail": "CDAP Laite", + "loading": "Ladataan...", + "loading_widgets": "Ladataan laitteen widgetejä...", + "load_error": "Laitteen tietojen lataaminen epäonnistui", + "connected": "Yhdistetty", + "disconnected": "Yhteys katkaistu", + "device_offline_msg": "Laite on tällä hetkellä offline-tilassa. Widgetien arvot voivat olla vanhentuneita.", + "no_widgets": "Ei widgetejä saatavilla", + "no_widgets_desc": "Tämä laite ei ole rekisteröinyt CDAP-luetteloa widget-määrittelyillä.", + "command_log": "Komentoloki", + "clear_log": "Tyhjennä loki", + "confirm_command": "Vahvista komento", + "select_option": "Valitse", + "cdap_status": "CDAP-tila", + "cdap_enabled": "CDAP käytössä", + "cdap_disabled": "CDAP ei käytössä", + "cdap_devices": "CDAP-laitteet", + "cdap_connections": "Aktiiviset yhteydet", + "send_command": "Lähetä komento", + "command_sent": "Komento lähetetty onnistuneesti", + "command_failed": "Komennon lähettäminen epäonnistui", + "devices_title": "CDAP -laitteet", + "devices_subtitle": "Yhdistetyt laitteet mukautetun laitteen sovellusprotokollan kautta", + "stat_connected": "Yhdistetty", + "stat_port": "Portti", + "search_devices": "Hae laitteita...", + "no_devices": "Ei kytkettyjä laitteita", + "no_devices_desc": "CDAP-laitteita ei ole tällä hetkellä yhdistetty. Laitteet näkyvät täällä, kun ne muodostavat yhteyden yhdyskäytävään.", + "gateway_disabled": "CDAP Gateway ei käytössä", + "gateway_disabled_desc": "Ota CDAP-yhdyskäytävä käyttöön asettamalla palvelimen asetuksissa CDAP_ENABLED=true.", + "gateway_active": "Aktiivinen", + "toggle_enable": "Ota CDAP käyttöön", + "toggle_disable": "Poista CDAP käytöstä", + "enabled_restart": "CDAP käytössä. Palvelimen uudelleenkäynnistys vaaditaan muutosten soveltamiseksi.", + "disabled_restart": "CDAP poistettu käytöstä. Palvelimen uudelleenkäynnistys vaaditaan muutosten soveltamiseksi.", + "widgets": "widgetit", + "type_all": "Kaikki", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-ohjelma", + "type_network": "Verkko", + "type_camera": "Kamera", + "type_custom": "Mukautettu", + "active_alerts": "Aktiiviset hälytykset", + "alert_fired": "Hälytys laukaistu", + "alert_cleared": "Hälytys tyhjennetty", + "no_alerts": "Ei aktiivisia hälytyksiä", + "connect_terminal": "Yhdistä pääte", + "table_search": "Hae...", + "just_now": "Juuri nyt", + "terminal_connecting": "Yhdistetään laitteeseen...", + "terminal_disconnected": "Yhteys katkaistu", + "terminal_error": "Pääteliitäntä epäonnistui", + "linked_devices": "Linkitetyt laitteet", + "link_device": "Linkitä laite", + "unlink_device": "Poista linkitys", + "no_linked_devices": "Ei linkitettyjä laitteita", + "unlink_confirm": "Haluatko varmasti poistaa tämän laitteen linkityksen?", + "link_prompt": "Anna vertaistunnus linkittääksesi tähän laitteeseen:", + "connect_desktop": "Yhdistä työpöytä", + "connect_video": "Yhdistä Stream", + "connect_files": "Selaa tiedostoja", + "connect_audio": "Liitä ääni", + "upload_file": "Lataa", + "desktop_connecting": "Yhdistetään...", + "video_connecting": "Yhdistetään...", + "files_connecting": "Yhdistetään...", + "audio_connecting": "Yhdistetään...", + "audio_streaming": "Suoratoisto", + "clipboard_in": "Leikepöytä vastaanotettu", + "clipboard_out": "Leikepöytä lähetetty", + "monitor_select": "Valitse Näyttö", + "keyframe_request": "Pyydä avainkehystä", + "quality_auto": "Auto Laatu" + }, + "desktop": { + "switch_mode": "Työpöytätila", + "console_mode": "Konsolitila", + "loading": "Ladataan...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Sulje", + "widgets_mode": "Widgetit", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Lisää widget", + "remove_widget": "Poista widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Määritä", + "search_widgets": "Hae widgetejä...", + "cat_monitoring": "Monitoring", + "cat_devices": "Laitteet", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Kirjoita muistiinpanoja tähän...", + "search_placeholder": "Hae laitteita, sivuja, asetuksia...", + "search_pages": "Pages", + "search_devices": "Laitteet", + "search_no_results": "No results", + "exit_desktop": "Poistu työpöytätilasta", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Laitteen tila", + "widget_server_health": "Palvelimen tiedot", + "widget_system_stats": "Laitteen mittarit", + "widget_device_list": "Laiteluettelo", + "widget_quick_actions": "Nopeat toiminnot", + "widget_recent_activity": "Viimeaikainen toiminta", + "widget_notes": "Notes", + "widget_network_monitor": "Verkkomonitori", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP -laitteet", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Laitteen verkko", + "widget_multi_gauge": "Palvelimen mittarit", + "widget_weekly_chart": "Viikkotoiminta", + "widget_quick_controls": "Pikaohjaimet", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Yhteystilastot", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Käyttäjäistunnot", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Ei laitteita", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Avaa", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Aseta URL konfiguraatiossa", + "label_server_uptime": "Palvelimen käyttöaika", + "label_merged_info": "Yhdistetty Server Info -widgetiin", + "label_with_notes": "Muistiinpanojen kanssa", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Laitteita yhteensä", + "label_throughput": "Throughput", + "label_active_relays": "Aktiiviset releet", + "label_total_relayed": "Välitetty yhteensä", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Suodata laitteita...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Ei CDAP-laitteita", + "action_add_widget": "Lisää widget", + "label_merged_server_info": "Yhdistetty Server Info -widgetiin", + "wp_images": "Images", + "wp_colors": "Kiinteät värit", + "wp_custom_color": "Mukautettu väri", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Taustakuvia ei ole asennettu tälle palvelimelle.", + "wp_download_hint": "Aseta PNG-kuvat julkiseen/taustakuvat/hakemistoon mahdollistaaksesi taustakuvan valinnan.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Prosessin monitori", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Tietokannan tilastot", + "widget_docker_containers": "Docker Säiliöt", + "widget_shell_command": "Shell-komento", + "widget_device_map": "Laitekartta", + "widget_remote_connect": "Etäyhteys", + "label_no_online": "Ei online-laitteita", + "label_no_events": "Ei tapahtumia tänään", + "label_event_title": "Tapahtuman otsikko:", + "label_no_data": "Tietoja ei ole saatavilla", + "label_download_speed": "Latausnopeus", + "label_latency": "Latency", + "label_server": "Palvelin", + "label_run_test": "Run Test", + "label_testing": "Testataan...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Ei kontteja", + "label_docker_unavailable": "Docker ei saatavilla", + "label_no_command": "Mitään komentoa ei ole määritetty", + "label_no_output": "Ei vielä lähtöä", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Tallenna esiasetus", + "label_load_preset": "Load Preset", + "label_preset_name": "Esiasetettu nimi:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automaattinen järjestys", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 saraketta (yhtä)", + "label_2col_wide": "2 saraketta (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget-ryhmä", + "ungroup_widgets": "Pura widgetit", + "group_widgets": "Ryhmittele valitut widgetit", + "snap_layouts": "Kiinnitysasettelut", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Napsauta ylhäältä vasemmalle", + "snap_top_right": "Napsauta ylhäältä oikealle", + "snap_bottom_left": "Napsauta alhaalta vasemmalle", + "snap_bottom_right": "Napsauta alhaalta oikealle", + "aero_shake": "Ravista muiden minimoimiseksi", + "zone_resize": "Muuta vyöhykkeiden kokoa vetämällä reunusta", + "zone_borders": "Vedettävät vyöhykkeen reunat", + "app_drawer": "Applications", + "search_apps": "Hae sovelluksia...", + "edit_shortcuts": "Muokkaa pikakuvakkeita", + "widgets": "Widgetit", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Napsauta mitä tahansa tai kirjaudu sisään painamalla näppäintä", + "username_placeholder": "Käyttäjätunnus", + "password_placeholder": "Salasana", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Kaksitekijäinen todennus", + "totp_subtitle": "Syötä 6-numeroinen koodi todennussovelluksesta", + "back_to_login": "Takaisin kirjautumiseen", + "fill_all_fields": "Täytä kaikki kentät", + "invalid_credentials": "Virheellinen käyttäjätunnus tai salasana", + "invalid_code": "Virheellinen vahvistuskoodi", + "enter_6_digits": "Syötä kaikki 6 numeroa", + "network_error": "Network error — check your connection", + "session_expired": "Istunto vanhentunut. Kirjaudu uudelleen sisään." + }, + "tokens": { + "title": "Laitteen tunnukset", + "subtitle": "Hallinnoi automaattisen laitteiden hallinnan rekisteröintitunnuksia", + "enrollment_mode": "Ilmoittautumistila", + "mode_open": "Avaa", + "mode_open_desc": "Mikä tahansa laite voi rekisteröityä ilman token-tunnusta", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Tokeneja yhteensä", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Hae tunnuksia...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Luo joukko", + "create": "Luo tunnus", + "edit": "Muokkaa Tokeni��", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Luotu", + "actions": "Actions", + "name_placeholder": "esim. Office PC erä", + "max_uses": "Max Uses", + "max_uses_hint": "0 = rajoittamaton", + "expires_in": "Expires In", + "no_expiration": "Ei vanhenemista", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Valinnainen huomautus tästä tunnuksesta...", + "count": "Count", + "count_range": "Luotavien tunnuksien määrä (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token luotu", + "tokens_generated": "Tokenit luotu", + "copy_warning": "Kopioi tunnus nyt. Sitä ei näytetä uudelleen.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Haluatko varmasti peruuttaa tämän tunnuksen? Tämä ei vaikuta siihen jo rekisteröityihin laitteisiin.", + "revoked_success": "Tunnus peruutettu onnistuneesti", + "no_tokens": "Tunnuksia ei löytynyt", + "expired": "Expired", + "never": "Never", + "save": "Tallenna", + "cancel": "Peruuta", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Seuraavaksi", + "prev": "Previous", + "skip": "Skip", + "finish": "Valmis", + "close": "Sulje", + "step_of": "{current} / {total}", + "console_sidebar_title": "Navigoinnin sivupalkki", + "console_sidebar_text": "Pääset kaikkiin moduuleihin täältä. Napsauta mitä tahansa kuvaketta navigoidaksesi kyseiseen osioon. Sivupalkki mukautuu näytön kokoon.", + "console_expand_title": "Laajenna sivupalkki", + "console_expand_text": "Napsauta tätä laajentaaksesi sivupalkkia ja nähdäksesi kaikkien navigointikohteiden täydelliset tunnisteet. Tiivistä napsauttamalla uudelleen.", + "console_search_title": "Pikahaku", + "console_search_text": "Hae laitteita, asetuksia tai toimintoja nopeasti. Paina Ctrl+K saadaksesi pikanäppäimen.", + "console_dashboard_title": "Kojelauta", + "console_dashboard_text": "Keskittimesi näyttää palvelimen tilan, online-laitteet ja nopeat toiminnot. Pidä silmällä tärkeitä mittareita yhdellä silmäyksellä.", + "console_devices_title": "Laitehallinta", + "console_devices_text": "Tarkastele, etsi ja hallinnoi kaikkia yhdistettyjä laitteita. Suodata tilan mukaan, määritä tunnisteita ja määritä yksittäisiä laiteasetuksia.", + "console_settings_title": "Asetukset", + "console_settings_text": "Määritä palvelimen toiminta, suojausasetukset, brändäys ja käyttäjien hallinta. Mukauta BetterDesk tarpeidesi mukaan.", + "console_desktop_title": "Työpöytätila", + "console_desktop_text": "Vaihda työpöytätilaan, jos haluat käyttää ikkunoitua työtilaa widgeteillä. Täydellinen monen tehtävän suorittamiseen ja kojetaulujen valvontaan.", + "console_complete_title": "Olet valmis!", + "console_complete_text": "Tutustu sivupalkin luokkiin löytääksesi kaikki ominaisuudet. Napsauta Ohje-kuvaketta milloin tahansa käynnistääksesi tämän oppaan uudelleen.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Yläpalkissa näkyy kello, pikasäätimet ja pääsy sovelluslaatikkoon. Napsauta ruudukkokuvaketta selataksesi kaikkia sovelluksia.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Avaa sovelluslaatikko etsiäksesi ja käynnistääksesi minkä tahansa konsolitoiminnon kelluvana ikkunana. Sovellukset on järjestetty luokittain.", + "desktop_widgets_title": "Widget-hallintapaneeli", + "desktop_widgets_text": "Muokattava työtilasi. Widgetit näyttävät reaaliaikaista tietoa ja tarjoavat nopean pääsyn ominaisuuksiin. Järjestä uudelleen vetämällä.", + "desktop_add_widget_title": "Lisää widgetejä", + "desktop_add_widget_text": "Napsauta tätä selataksesi saatavilla olevia widgetejä. Valitse valvontanäytöistä, laiteluetteloista, muistiinpanoista ja muista.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Avoimet sovellukset näkyvät täällä. Tarkenna tai pienennä ikkunoita napsauttamalla. Näet sovellusten tunnisteet viemällä hiiren osoitinta kuvakkeisiin.", + "desktop_snap_title": "Kiinnitysasettelut", + "desktop_snap_text": "Vedä ikkunoita näytön reunoille napsauttaaksesi ne paikoilleen, tai vie hiiren osoittimella suurenna-painiketta asettelun esiasetuksia varten. Kokeile Aero Shakea!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Sovellukset avautuvat vedettävissä ikkunoissa, joiden kokoa voi muuttaa. Pienennä, suurenna tai sulje otsikkopalkista. Windows-taso widgetien yläpuolella.", + "desktop_search_title": "Pikahaku", + "desktop_search_text": "Hae eri laitteista, sivuilta ja asetuksista. Avaa haku välittömästi painamalla Ctrl+K missä tahansa.", + "desktop_complete_title": "Työpöytätila valmis!", + "desktop_complete_text": "Kokeile avata sovelluksia laatikosta ja järjestää ikkunat vierekkäin. Käytä widgetien esiasetuksia nopeaan kojelautaasetteluun.", + "devices_folders_title": "Laitteen kansiot", + "devices_folders_text": "Järjestä laitteet kansioihin. Suodata luettelo napsauttamalla kansiota. Napsauta hiiren kakkospainikkeella nimetäksesi uudelleen tai poistaaksesi.", + "devices_search_title": "Haku ja suodatin", + "devices_search_text": "Hae tunnuksen, isäntänimen tai alustan perusteella. K��ytä tilapillereitä näyttääksesi vain online-tilassa, offline-tilassa tai kaikilla laitteilla.", + "devices_table_title": "Laiteluettelo", + "devices_table_text": "Napsauta mitä tahansa laiteriviä saadaksesi lisätietoja. Käytä oikealla olevaa kebab-valikkoa pikatoimintoihin, kuten yhdistämiseen, tunnisteiden muokkaamiseen tai poistamiseen.", + "devices_complete_title": "Laitehallinta valmiina!", + "devices_complete_text": "Järjestä ne vetämällä laitteita kansioiden välillä. Kaksoisnapsauta laitetta avataksesi sen tietopaneelin.", + "settings_tabs_title": "Asetukset Luokat", + "settings_tabs_text": "Siirry Yleiset-, Turvallisuus-, Ulkoasu- ja muiden määritysosien välillä.", + "settings_content_title": "Kokoonpano", + "settings_content_text": "Jokainen osio sisältää tietyt palvelin- ja konsoliasetukset. Muutokset tallennetaan, kun napsautat Tallenna.", + "settings_complete_title": "Asetusten yleiskatsaus", + "settings_complete_text": "Tarkista 2FA-, API-avaimien suojausasetukset ja käyttäjien hallinta. Vieraile Ulkoasussa muokataksesi konsolin ulkoasua.", + "help": "Ohjeet ja opetusohjelmat", + "tour_console": "Konsolikierros", + "tour_desktop": "Työpöytätilan esittely", + "tour_devices": "Laitteet Tour", + "tour_settings": "Asetukset Tour", + "reset_all": "Nollaa kaikki opetusohjelmat", + "tour_remote": "Etäistunnon kierros", + "tour_organization": "Organisaation asetukset", + "tour_cdap": "CDAP Yleiskatsaus", + "tour_chat": "Chatin perusteet", + "remote_toolbar_title": "Etätyökalupalkki", + "remote_toolbar_text": "Käytä näytön ohjaimia, leikepöydän synkronointia, erikoisnäppäimiä ja laatuasetuksia työkalupalkista. Vaihda koko näyttö päälle F11-näppäimellä.", + "remote_canvas_title": "Etänäyttö", + "remote_canvas_text": "Tämä on kaukosäätimen näyttö. Napsauta sisällä aloittaaksesi etälaitteen ohjauksen. Hiiren ja näppäimistön syöttö välitetään automaattisesti.", + "remote_clipboard_title": "Leikepöydän synkronointi", + "remote_clipboard_text": "Kopioi ja liitä tekstiä tietokoneen ja etälaitteen välillä. Käytä näppäinyhdistelmää Ctrl+C / Ctrl+V normaalisti, kun keskität etänäytön.", + "remote_complete_title": "Etäistunto valmis!", + "remote_complete_text": "Käytä työkalupalkin painikkeita erikoisnäppäimille (Ctrl+Alt+Del, PrintScreen) ja näytön vaihtamiseen. Lopeta istunto painamalla Esc-näppäintä tai napsauttamalla Katkaise yhteys.", + "org_overview_title": "Organisaatiot", + "org_overview_text": "Organisaatioiden avulla voit ryhmitellä käyttäjiä, laitteita ja käytäntöjä. Jokaisella organisaatiolla on oma järjestelmänvalvojansa, operaattorinsa ja asetuksesi.", + "org_create_title": "Luo organisaatio", + "org_create_text": "Napsauta tätä luodaksesi uuden organisaation. Anna nimi, etana ja valinnainen kuvaus. Sinusta tulee uuden organisaation omistaja.", + "org_members_title": "Hallitse jäseniä", + "org_members_text": "Kutsu käyttäjiä sähköpostitse, määritä rooleja (järjestelmänvalvoja, operaattori, käyttäjä) ja hallitse käyttöoikeuksia. Jäsenet voivat nähdä organisaatiolleen määritetyt laitteet.", + "org_devices_title": "Määritä laitteet", + "org_devices_text": "Lisää laitteita organisaatioon. Tässä määritetyt laitteet perivät organisaation käytännöt ja näkyvät sen jäsenille.", + "org_policies_title": "Organisaatiokäytännöt", + "org_policies_text": "Aseta organisaatiolle suojauskäytännöt, kuten salasanavaatimukset, istunnon aikakatkaisut, 2FA-valvonta ja laitteiden rekisteröintisäännöt.", + "org_complete_title": "Organisaation asetukset valmis!", + "org_complete_text": "Kutsu tiimisi ja määritä laitteet aloittamaan organisaation kattavan hallinnan käyttö. Käytännöt koskevat automaattisesti kaikkia jäseniä.", + "cdap_devices_title": "CDAP-laitteet", + "cdap_devices_text": "Näytä kaikki yhdistetyt CDAP-laitteet — IoT-anturit, logiikkaohjaimet, sillat ja mukautetut ohjelmat. Vihreät indikaattorit näyttävät live-yhteydet.", + "cdap_widgets_title": "Vimpainkojelauta", + "cdap_widgets_text": "Vimpaimet näyttävät reaaliaikaisia tietoja laitteista. Mittarit, kytkimet, LEDit, kaaviot — jokainen vimpaintyyppi visualisoi erilaisen datan.", + "cdap_commands_title": "Lähetä komentoja", + "cdap_commands_text": "Tee yhteistyötä laitteiden kanssa lähettämällä komentoja. Komentoloki tallentaa historian.", + "cdap_terminal_title": "Laitteterminaali", + "cdap_terminal_text": "Avaa terminaali-istunto CDAP-ohjelmille edistynyttä diagnostiikkaa tai manuaalista konfiguraatiota varten.", + "cdap_complete_title": "CDAP-yleiskatsaus valmis!", + "cdap_complete_text": "Tutustu laitevimpaimiin, lähetä komentoja ja käytä terminaalia tai tiedostoselailuohjelmaa syvempään hallintaan.", + "chat_contacts_title": "Yhteystiedot & Ryhmät", + "chat_contacts_text": "Katso yhteystietosi ja chat-ryhmäsi. Napsauta mitä tahansa kontaktia avataksesi keskustelun. Vihreät pisteet osoittavat online-käyttäjiä.", + "chat_send_title": "Lähetä viestejä", + "chat_send_text": "Kirjoita viestisi ja lähetä painamalla Enter. Viestit ovat päästä päähän -salattuja, kun molemmat osapuolet tukevat E2E:tä.", + "chat_file_title": "Jaa tiedostoja", + "chat_file_text": "Jaa tiedostoja napsauttamalla liitekuvaketta. Tiedostot ovat salattuja ja niiden koko voi olla enintään 50 megatavua.", + "chat_complete_title": "Chat valmis!", + "chat_complete_text": "Keskustele operaattoreiden ja loppukäyttäjien kanssa reaaliajassa. Luo ryhmiä tiimiviestintää varten. Kaikki viestit tukevat lukukuittauksia.", + "disable_tutorials": "Poista opetusohjelmat käytöstä", + "enable_tutorials": "Ota opetusohjelmat käyttöön" + }, + "help_request": { + "title": "Apupyynnöt", + "subtitle": "Hallinnoi saapuvia ohjepyyntöjä pöytätietokoneiden asiakkailta", + "new_request": "Uusi apupyyntö", + "device": "Laite", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Ei avunpyyntöjä", + "notification": "Apupyyntö vastaanotettu osoitteesta", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisaatiot", + "create": "Luo organisaatio", + "edit": "Muokkaa organisaatiota", + "detail": "Organisaation tiedot", + "name": "Name", + "slug": "Slug (URL-turvallinen)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Laitteet", + "invitations": "Invitations", + "settings": "Asetukset", + "add_user": "Add User", + "assign_device": "Määritä laite", + "create_invitation": "Luo kutsu", + "delete_confirm": "Poistetaanko tämä organisaatio? Tämä poistaa kaikki liittyvät käyttäjät, laitteet ja asetukset.", + "no_orgs": "Ei vielä organisaatioita", + "no_orgs_hint": "Luo ensimmäinen organisaatiosi ja aloita laitteiden ja käyttäjien hallinta.", + "connection_policy": "Yhteyskäytäntö", + "allow_file_transfer": "Salli tiedostonsiirto", + "allow_clipboard": "Salli leikepöytä", + "max_session_duration": "Istunnon enimmäiskesto (min)", + "role_owner": "Owner", + "role_admin": "Järjestelmänvalvoja", + "role_operator": "Operator", + "role_user": "Jäsen", + "username": "Käyttäjätunnus", + "password": "Salasana", + "display_name": "Näyttönimi", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Laitteen tunnus", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Määrätty käyttäjä", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Ei käyttäjiä tässä organisaatiossa.", + "no_devices": "Tälle organisaatiolle ei ole määritetty laitteita.", + "no_invitations": "Ei kutsuja.", + "user_added": "User added", + "user_removed": "Käyttäjä poistettu", + "user_updated": "Käyttäjärooli päivitetty", + "device_assigned": "Laite määritetty", + "device_unassigned": "Laite on poistettu", + "invitation_created": "Kutsu luotu", + "settings_saved": "Asetukset tallennettu", + "org_deleted": "Organisaatio poistettu", + "confirm_remove_user": "Poistetaanko tämä käyttäjä organisaatiosta?", + "confirm_unassign_device": "Poistetaanko tämän laitteen määritys organisaatiosta?", + "confirm_delete_org": "Poistetaanko tämä organisaatio ja kaikki siihen liittyvät tiedot?", + "edit_role": "Muokkaa roolia", + "raw_settings": "Raaka-asetukset", + "key": "Key", + "value": "Value", + "save": "Tallenna asetukset", + "policy_unattended": "Valvomaton (välitön)", + "policy_attended": "Osallistunut (vahvistuksella)", + "policy_ask": "Always ask", + "expires_hours": "Vanheneminen (tuntia)", + "loading_failed": "Organisaation tietojen lataaminen epäonnistui", + "name_slug_required": "Nimi ja etana vaaditaan", + "org_created": "Organisaatio luotu", + "org_updated": "Organisaatio päivitetty", + "create_new_user": "Luo uusi", + "add_existing_user": "Lisää olemassa oleva", + "none_available": "none", + "select_user": "Valitse käyttäjä", + "org_role": "Organisaation rooli", + "link_user_hint": "Valittu käyttäjä linkitetään tähän organisaatioon hänen palvelintilinsä tunnistetiedoilla.", + "no_available_users": "Kaikki palvelimen käyttäjät on jo linkitetty tähän organisaatioon.", + "user_linked": "Käyttäjä linkitetty organisaatioon" + }, + "chat": { + "e2e_enabled": "Päästä päähän salattu", + "e2e_establishing": "Luodaan suojattua kanavaa...", + "e2e_established": "Suojattu kanava perustettu", + "e2e_unsupported": "E2E-salausta ei tueta tässä selaimessa", + "typing_indicator": "kirjoittaa...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Tiedosto", + "file_too_large": "Tiedosto liian suuri (enintään 50 Mt)", + "file_encrypted": "Salattu tiedostonsiirto", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Suojausavaimia kierretty", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "ryhmät", + "no_contacts": "Ei vielä yhteystietoja", + "no_groups": "Ei vielä ryhmiä", + "no_messages": "Ei viestejä vielä", + "no_results": "Tuloksia ei löytynyt", + "select_conversation": "Aloita chattailu valitsemalla keskustelu", + "type_message": "Kirjoita viesti...", + "send": "Lähetä", + "attach_file": "Liitä tiedosto", + "emoji": "Emoji", + "search_messages": "Hae viestejä", + "create_group": "Luo ryhmä", + "group_name": "Ryhmän nimi", + "group_members": "jäsenet", + "cancel": "Peruuta", + "create": "Luo", + "members": "jäseniä", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Hae yhteystietoja ja viestejä", + "select_conversation_hint": "Valitse keskustelu nähdäksesi viestit", + "info": "Info", + "group_name_placeholder": "Anna ryhmän nimi" + }, + "toast": { + "device_connected": "Laite yhdistetty", + "device_disconnected": "Laitteen yhteys katkaistu", + "session_started": "Etäistunto aloitettu", + "session_ended": "Etäistunto päättyi", + "file_upload_complete": "Tiedoston lataus valmis", + "settings_saved": "Asetukset tallennettu", + "error_generic": "Tapahtui virhe", + "connection_lost": "Yhteys katkesi", + "reconnecting": "Yhdistetään uudelleen..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Järjestelmänvalvojan apuohjelmat ja diagnostiikkatyökalut", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Lähetä", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Kirjoita tekstiä...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Siirry palvelimeen", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Tarkista isännän tavoitettavuus ja latenssi", + "tcp_title": "TCP Portin tarkistus", + "tcp_desc": "Testaa TCP-portin liitäntä", + "ssl_title": "SSL-tarkastaja", + "ssl_desc": "Tarkista SSL/TLS-varmenteen tiedot", + "http_title": "HTTP Terveystarkastus", + "http_desc": "Tarkista HTTP-päätepisteen tila", + "dns_title": "DNS Lookup", + "dns_desc": "Ratkaise isäntänimi IP-osoitteeksi", + "whois_title": "DNS Records", + "whois_desc": "Kysely A-, AAAA-, MX-, TXT-, NS-tietueita", + "speed_title": "Speed Test", + "speed_desc": "Mittaa latauskaistanleveyttä", + "run_speed_test": "Suorita nopeustesti", + "wol_title": "Wake-on-LAN", + "wol_desc": "Lähetä taikapaketti laitteen herättämiseksi", + "wol_sent": "Taikapaketti lähetetty", + "hash_title": "Hash-generaattori", + "hash_desc": "Luo salaustiivisteitä", + "password_title": "Salasanageneraattori", + "password_desc": "Luo turvallinen satunnainen salasana", + "jwt_title": "JWT Decoder", + "jwt_desc": "Dekoodaa ja tarkasta JSON-verkkotunnukset", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Koodaa tai purkaa Base64-tiedot", + "url_title": "URL Encoder", + "url_desc": "Koodaa tai purkaa URL-komponentit", + "processes_title": "Prosessiluettelo", + "processes_desc": "Tarkastele käynnissä olevia järjestelmäprosesseja", + "disk_title": "Disk Usage", + "disk_desc": "Näytä levyosion käyttö", + "db_title": "Tietokannan tilastot", + "db_desc": "Näytä tietokantataulukon tilastot", + "docker_title": "Docker Säiliöt", + "docker_desc": "Näytä käynnissä olevat Docker-säilöt", + "logs_title": "Log Viewer", + "logs_desc": "Näytä viimeisimmät lokitulosteet", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Voimassa alkaen", + "valid_to": "Voimassa", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Tietoja ei ole saatavilla", + "no_docker": "Docker-säiliöitä ei löytynyt tai Docker ei ole saatavilla", + "no_logs": "Ei lokirivejä saatavilla" + }, + "policies": { + "title": "Organisaatiokäytännöt", + "subtitle": "Hallinnoi organisaatioidesi suojaus-, yhteys- ja ominaisuuskäytäntöjä", + "select_org": "Organisaatio", + "select_org_placeholder": "Valitse organisaatio...", + "select_org_first": "Valitse organisaatio nähdäksesi käytännön tarkastuslokin.", + "configured": "Määritetty", + "connection_title": "Yhteyskäytäntö", + "connection_desc": "Hallitse kuinka etäistunnot muodostetaan", + "connection_mode": "Yhteystila", + "mode_attended": "Osallistunut (vaatii käyttäjän hyväksynnän)", + "mode_unattended": "Vartioimaton (salli aina)", + "mode_ask": "Kysy aina", + "max_session": "Istunnon enimmäiskesto (minuuttia)", + "idle_lock": "Tyhjäkäyntilukon aikakatkaisu (minuuttia)", + "wallpaper_policy": "Taustakuva istunnon aikana", + "wallpaper_show": "Näytä", + "wallpaper_hide_session": "Piilota istunnon aikana", + "wallpaper_hide_always": "Piilota aina", + "features_title": "Ominaisuuskäytäntö", + "features_desc": "Ota käyttöön tai poista käytöstä tiettyjä ominaisuuksia laitteille", + "allow_file_transfer": "Salli tiedostonsiirto", + "allow_clipboard": "Salli leikepöydän synkronointi", + "allow_audio": "Salli äänen suoratoisto", + "allow_recording": "Salli istunnon tallennus", + "security_title": "Turvallisuuspolitiikka", + "security_desc": "Täytä organisaation laitteiden suojausvaatimukset", + "require_2fa": "Vaatii 2FA:n valvomattomaan käyttöön", + "password_min_length": "Salasanan vähimmäispituus", + "password_require_special": "Vaadi erikoismerkkejä", + "password_max_age": "Salasanan enimmäisikä (päivää, 0 = ei koskaan)", + "allowed_operators": "Sallitut operaattoriroolit (pilkuilla erotettu)", + "network_title": "Verkkokäytäntö", + "network_desc": "Ohjaa välityspalvelimia ja suoria yhteyksiä", + "block_direct_p2p": "Estä suora P2P (force relay)", + "allowed_relays": "Sallitut välityspalvelimet (yksi per rivi)", + "ip_allowlist": "IP-salliluettelo (CIDR, yksi riviä kohden)", + "update_title": "Päivitä käytäntö", + "update_desc": "Hallitse automaattisia päivityksiä ja päivitä kanavia", + "auto_update": "Ota automaattinen päivitys käyttöön", + "update_channel": "Päivitä kanava", + "audit_title": "Käytännön muutokset", + "audit_desc": "Viimeaikainen käytäntömuutoshistoria", + "no_audit": "Sääntömuutoksia ei ole tallennettu.", + "save_success": "Käytännön tallennus onnistui", + "save_failed": "Käytännön tallentaminen epäonnistui", + "load_failed": "Käytäntöjen lataaminen epäonnistui", + "block_direct_p2p_hint": "Koskee tämän organisaation laitteita." + }, + "attestation": { + "title": "Laitteen todistus", + "subtitle": "Tarkkaile laitteen henkilöllisyyden vahvistusta ja laitteiston sormenjälkiä", + "verified": "Verified", + "pending": "Pending", + "failed": "Epäonnistui", + "device_list": "Laitteen todistustiedot", + "device_list_desc": "Laitteiston sormenjäljet ja henkilöllisyyden vahvistuksen tila", + "col_device": "Laitteen tunnus", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Todistustietoja ei löytynyt.", + "verify_success": "Laite merkitty vahvistetuksi", + "verify_failed": "Laitteen vahvistaminen epäonnistui", + "revoke_success": "Laitteen todistus peruttu", + "revoke_failed": "Todistuksen peruuttaminen epäonnistui" + }, + "fleet": { + "title": "Laivaston hallinta", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Työnkulun rakentaja", + "tab_compliance": "Compliance", + "res_title": "Resurssien kartoitus", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Verkkoasema", + "res_type_dns": "DNS-palvelin", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Lisää resurssi", + "res_name": "Resurssin nimi", + "res_type": "Type", + "res_address": "Osoite / Polku", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organisaatio", + "res_scope_group": "ryhmä", + "res_scope_device": "Laite", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Resursseja ei löytynyt. Luo resurssi napsauttamalla Lisää resurssi.", + "res_confirm_delete": "Haluatko varmasti poistaa tämän resurssin?", + "task_title": "Tehtävien ajoitus", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Epäonnistui", + "task_search": "Search tasks…", + "task_create": "Luo tehtävä", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Päivitä", + "task_type_restart": "Käynnistä uudelleen", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Laitetunnukset tai ryhmien nimet pilkuilla erotettuina", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Aikataulun arvo", + "task_script": "Käsikirjoitus / komento", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Tehtäviä ei löytynyt. Aloita napsauttamalla Luo tehtävä.", + "task_confirm_delete": "Haluatko varmasti poistaa tämän tehtävän?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Työnkulun rakentaja", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Tallenna", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Valitse solmu muokataksesi sen ominaisuuksia.", + "builder_node_trigger_manual": "Manuaalinen laukaisu", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Tapahtuman laukaisin", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Käynnistä Svc uudelleen", + "builder_node_action_file_deploy": "Ota käyttöön tiedosto", + "builder_node_action_message": "Lähetä Viesti", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Lähetä hälytys", + "builder_node_result_chain": "Ketjun työnkulku", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Työnkulun nimi:", + "comp_title": "Ohjelmiston yhteensopivuus", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Laite", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Suoritetaanko automaattinen korjaus tällä laitteella?", + "comp_no_data": "Vaatimustenmukaisuustietoja ei ole saatavilla. Aloita suorittamalla skannaus.", + "save": "Tallenna", + "cancel": "Peruuta", + "close": "Sulje", + "edit": "Muokkaa", + "delete": "Poista", + "actions": "Actions", + "all_orgs": "Kaikki organisaatiot", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Verkkoasema", + "type_dns": "DNS-palvelin", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Lisää resurssi", + "edit_resource": "Muokkaa resurssia", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Osoite / Polku", + "scope_org": "Organisaatio", + "scope_group": "ryhmä", + "scope_device": "Laite", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Haluatko varmasti poistaa tämän kohteen?", + "all_statuses": "Kaikki tilat", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Epäonnistui", + "search_tasks": "Search tasks�", + "create_task": "Luo tehtävä", + "edit_task": "Muokkaa tehtävää", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Tiedoston käyttöönotto", + "task_type_registry": "Registry", + "target_devices": "Kohdelaitteet", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Käsikirjoitus / komento", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Ladataan", + "no_output": "Tulostetta ei ole saatavilla", + "error_loading": "Virhe ladattaessa tietoja", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuaalinen laukaisu", + "node_schedule": "Schedule", + "node_event": "Tapahtuman laukaisin", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Käynnistä Svc uudelleen", + "node_file_deploy": "Ota käyttöön tiedosto", + "node_send_message": "Lähetä Viesti", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Lähetä hälytys", + "node_chain": "Ketjun työnkulku", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Kaikki organisaatiot", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Laite", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Suoritetaanko automaattinen korjaus tällä laitteella?" + }, + "scaling": { + "title": "Skaalaus ja releen hallinta", + "tab_overview": "Yleiskatsaus", + "tab_relays": "Relay Nodes", + "tab_rules": "Toimeksiannon säännöt", + "tab_capacity": "Kapasiteetin suunnittelu", + "arch_title": "Verkkoarkkitehtuuri", + "arch_loading": "Ladataan arkkitehtuurikaaviota...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Laitteita yhteensä", + "stat_active_sessions": "Aktiiviset istunnot", + "stat_bandwidth": "Kaistanleveys yhteensä", + "relay_health": "Välityspalvelimen tila", + "no_relays": "Relesolmuja ei ole määritetty. Lisää ensimmäinen välityssolmu kuorman jakamiseksi.", + "relay_search": "Etsi releitä...", + "relay_add": "Lisää välityssolmu", + "relay_edit": "Muokkaa välityssolmua", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Laitteet", + "col_sessions": "Istunnot", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Tavoiteviesti", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Käytössä", + "status_disabled": "Ei käytössä", + "confirm_delete_relay": "Haluatko varmasti poistaa tämän välityssolmun?", + "confirm_delete_rule": "Haluatko varmasti poistaa tämän tehtävän säännön?", + "rules_hint": "Osoitussäännöt määrittävät, mikä välityspalvelin käsittelee tiettyjä laiteryhmiä. Säännöt arvioidaan prioriteetin mukaan (pienin ensin).", + "rule_add": "Add Rule", + "rule_edit": "Muokkaa sääntöä", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Laiteryhmä", + "match_tag": "Laitteen tunniste", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Pääpalvelin", + "fallback_nearest": "Lähin rele", + "relay_max_sessions": "Max istuntoja", + "relay_max_bandwidth": "Suurin kaistanleveys (Mbps)", + "cap_tiers": "Kapasiteettitasot", + "cap_loading": "Ladataan kapasiteettitietoja...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Suosituksia ei ole saatavilla.", + "cap_planning": "Infrastruktuurin suunnittelu", + "cap_config": "Kokoonpano", + "cap_max_devices": "Max laitteet", + "cap_max_sessions": "Max istuntoja", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Laitteen kapasiteetti", + "cap_tier_sessions": "Istuntokapasiteetti", + "cap_tier_bandwidth": "Kaistanleveyskapasiteetti", + "cap_single_sqlite": "Yksi palvelin (SQLite)", + "cap_single_pg": "Yksi palvelin (PostgreSQL)", + "cap_master_3": "Master + 3 relettä", + "cap_master_10": "Master + 10 relettä", + "rec_no_relays": "Relesolmuja ei ole määritetty. Harkitse välityssolmujen lisäämistä suorituskyvyn ja redundanssin parantamiseksi.", + "rec_devices_high": "Laitteiden käyttöaste on korkea. Harkitse välityssolmujen lisäämistä kuorman jakamiseksi.", + "rec_sessions_high": "Istuntokapasiteetti lähestyy rajaansa. Harkitse välitysinfrastruktuurin päivittämistä.", + "rec_cpu_high": "Jotkut relesolmut ilmoittavat korkean suorittimen käytön. Harkitse kuormituksen tasapainottamista tai kapasiteetin lisäyksiä.", + "rec_all_good": "Kaikki järjestelmät toimivat normaaleilla parametreilla. Toimia ei vaadita.", + "save": "Tallenna", + "cancel": "Peruuta", + "edit": "Muokkaa", + "delete": "Poista", + "close": "Sulje", + "no_rules": "Ei luovutussääntöjä.", + "relays_info_banner": "Tämä luettelo on informatiivinen. Asiakkaiden tosiasiallisesti käyttämät välityspalvelimet määritetään RELAY_SERVERS-ympäristömuuttujan kautta BetterDesk-palvelimessa.", + "relay_name_address_required": "Nimi ja osoite vaaditaan.", + "relay_save_failed": "Välityssolmun tallennus epäonnistui.", + "relay_delete_failed": "Välityssolmun poistaminen epäonnistui.", + "relay_saved": "Välityssolmu tallennettu.", + "relay_deleted": "Välityssolmu poistettu.", + "rule_name_value_required": "Säännön nimi ja vastaavuusarvo ovat pakollisia.", + "rule_save_failed": "Säännön tallentaminen epäonnistui.", + "rule_delete_failed": "Säännön poistaminen epäonnistui.", + "rule_saved": "Sääntö tallennettu.", + "rule_deleted": "Sääntö poistettu." + }, + "cross_platform": { + "title": "Eri alustojen yhteensopivuus", + "tab_matrix": "Yhteensopivuusmatriisi", + "tab_distribution": "Jakelu", + "tab_protocols": "Protokollat", + "tab_limitations": "Rajoitukset", + "matrix_hint": "Ominaisuustukimatriisi kaikilla tuetuilla alustoilla. Vihreä = täysi tuki, keltainen = osittainen, harmaa = ei saatavilla, sininen = suunniteltu.", + "col_feature": "Ominaisuus", + "legend_full": "Täysi tuki", + "legend_partial": "Osittainen tuki", + "legend_none": "Ei saatavilla", + "legend_planned": "Suunniteltu", + "platform_breakdown": "Alustan erittely", + "arch_breakdown": "Arkkitehtuurin erittely", + "version_breakdown": "Version erittely", + "summary": "Yhteenveto", + "total_devices": "Laitteita yhteensä", + "unique_platforms": "Alustat", + "unique_archs": "Arkkitehtuurit", + "unique_versions": "Asiakasversiot", + "no_devices": "Ei vielä rekisteröityjä laitteita.", + "protocols_hint": "Protokollavalmiuksien neuvottelu varmistaa, että jokainen asiakas saa vain ne ominaisuudet, joita se tukee. Palvelin mukauttaa käyttäytymistä raportoitujen ominaisuuksien perusteella.", + "capability_negotiation": "Kykyneuvottelut", + "codec_support": "Codec-tuki (online-laitteet)", + "feature_support": "Ominaisuustuki (online-laitteet)", + "no_codec_data": "Online-laitteilta ei ole saatavilla koodekkitietoja.", + "no_feature_data": "Verkkolaitteista ei ole saatavilla ominaisuustietoja.", + "protobuf_schema": "Protobuf-kaavio", + "diagram_client": "Asiakas", + "diagram_server": "BetterDesk-palvelin", + "diagram_peer": "Vertaislaite", + "limitations_hint": "Jokaisella alustalla on erityisiä rajoituksia, jotka vaikuttavat käytettävissä oleviin ominaisuuksiin. Tarkista nämä rajoitukset, kun suunnittelet käyttöönottoja.", + "feat_desktop_client": "Työpöytäasiakas", + "feat_background_agent": "Taustaagentti", + "feat_remote_target": "Kaukokohde", + "feat_screen_capture": "Näytön kaappaus", + "feat_input_injection": "Syötteen välitys", + "feat_file_transfer": "Tiedoston siirto", + "feat_clipboard_sync": "Leikepöydän synkronointi", + "feat_audio_streaming": "Äänen suoratoisto", + "feat_chat": "Chat", + "feat_h264": "H.264-koodekki", + "feat_vp9": "VP9-koodekki", + "feat_av1": "AV1-koodekki", + "feat_cdap_agent": "CDAP-ohjelma", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Verkkoselain", + "platform_chromeos": "ChromeOS", + "status_production": "Tuotanto", + "status_testing": "Testaus", + "status_planned": "Suunniteltu", + "status_limited": "Rajoitettu", + "status_experimental": "Kokeellinen", + "limit_win_uac": "UAC-korkeus vaaditaan palvelun asennusta ja syötteiden lisäämistä varten suojatuille pöytäkoneille.", + "limit_win_service": "Toimii NSSM-palveluna; vaatii järjestelmänvalvojan oikeudet asennukseen.", + "limit_win_firewall": "Windows Palomuurisääntöjen on sallittava portit 21115-21119 releyhteyksiä varten.", + "limit_linux_wayland": "Wayland-säveltäjät rajoittavat ohjelmallista kuvakaappausta; PipeWire-portaali API vaaditaan.", + "limit_linux_pipewire": "Äänen sieppaus vaatii PipeWiren; PulseAudio-varavaihtoehto saatavilla, mutta rajoitetusti.", + "limit_linux_arm": "ARM64-koontiversiot saatavilla; jotkin koodekit voivat käyttää ohjelmistodekoodausta (hitaampaa).", + "limit_mac_screen": "Näytön tallennuslupa vaaditaan kohdassa Järjestelmäasetukset > Tietosuoja ja suojaus.", + "limit_mac_signing": "Agentin on oltava allekirjoitettu Apple Developer ID:llä jakelua varten.", + "limit_mac_notarize": "macOS Gatekeeper (muu kuin App Store -jakelu) edellyttää notaarin vahvistamista.", + "limit_android_projection": "MediaProjection API vaatii käyttäjän suostumuksen jokaiseen kuvakaappausistuntoon.", + "limit_android_accessibility": "Syöttösyöttö vaatii AccessibilityServicen; rajoitettu Android 14+.", + "limit_android_battery": "Taustapalvelua rajoittaa Doze-tila; saattaa vaatia poikkeuksen akun optimoinnista.", + "limit_ios_capture": "Apple kieltää taustakuvankaappauksen; vain katsoja -tila tuettu.", + "limit_ios_input": "Ei sisäänsyöttöä sallittua; vain etäkatselu ja chat.", + "limit_ios_appstore": "Jakelu vain App Storen kautta; TestFlight beta-testausta varten.", + "limit_web_https": "WebCodecs API ja WebRTC vaativat HTTPS; HTTP palautuu JMuxeriin (rajoitetut koodekit).", + "limit_web_codec": "Codec-tuki riippuu selaimesta; H.264 laajasti tuettu, VP9/AV1 vaihtelee.", + "limit_web_performance": "Suorituskykyä rajoittaa selaimen hiekkalaatikko; ei suoraa laitteistokiihdytystä.", + "limit_chrome_crostini": "Täysi agenttituki vain Crostini Linux -säiliön sisällä.", + "limit_chrome_pwa": "PWA-tila tarjoaa vain web-ominaisuuksia; ei alkuperäisen agentin ominaisuuksia.", + "limit_chrome_input": "Syöttöinjektiota ei tueta Crostini-säiliön ulkopuolella.", + "feat_session_recording": "Istunnon tallennus", + "feat_multi_monitor": "Useita näyttöjä", + "feat_unattended_access": "Valvomaton käyttö", + "limit_win_virtual_account": "Palvelue laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Palvelue laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Turvallisuustarkastus", + "tab_overview": "Yleiskatsaus", + "tab_events": "Tarkastustapahtumat", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Turvallisuuspisteet", + "failed_logins": "Epäonnistuneet kirjautumiset (24h)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Vanhat avaimet (>90 p)", + "security_checks": "Turvatarkastukset", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Turvallinen", + "enabled": "Käytössä", + "disabled": "Ei käytössä", + "all_events": "All Events", + "event_login_failed": "Kirjautuminen epäonnistui", + "event_login_success": "Kirjautuminen onnistui", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfiguraatio muutettu", + "event_key_created": "Avain luotu", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Tarkastustapahtumia ei löytynyt.", + "hardening_hint": "Turvallisuuden parantamisen prioriteetit BetterDesk-käyttöönotossasi. Tuotteet on järjestetty vakavuuden mukaan.", + "no_hardening": "Kovettavia tuotteita ei ole saatavilla.", + "vuln_hint": "Riippuvuushaavoittuvuuden tarkistuksen tulokset. Suorita npm-tarkastus säännöllisesti pitääksesi riippuvuudet turvassa.", + "no_vulns": "Haavoittuvuuksia ei löytynyt. Riippuvuutesi ovat turvassa." + }, + "languages": { + "title": "Kielenhallinta", + "total_languages": "Kielet yhteensä", + "fully_translated": "Täysin käännetty", + "needs_review": "Vaatii tarkastelun", + "reference_keys": "Viiteavaimet", + "no_languages": "Kielitiedostoja ei löytynyt.", + "badge_reference": "Reference", + "badge_review": "Vaatii tarkastelun", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Näkymä puuttuu", + "fix_missing": "Fix Missing", + "missing_keys_for": "Avaimet puuttuvat", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "ja {n} lisää...", + "all_keys_present": "Kaikki avaimet löytyy!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Kielen {code} puuttuvat avaimet on käännettävä manuaalisesti.", + "no_fix_needed": "Ei puuttuvia avaimia korjattavaksi." + }, + "resource_control": { + "title": "Resurssien hallinta", + "tab_overview": "Yleiskatsaus", + "tab_usb": "USB Control", + "tab_optical": "Optiset asemat", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Resurssikiintiöt", + "compliance_by_category": "Vaatimustenmukaisuus kategorioittain", + "device_compliance": "Laitteen yhteensopivuus", + "search_devices": "Hae laitteita...", + "col_device": "Laite", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Laitteita yhteensä", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Vaatimustenmukaisuusaste", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Määritä", + "no_devices": "Laitteita ei löytynyt", + "usb_title": "USB Portin ohjaus", + "usb_hint": "Hallitse valitun laitteen USB-tallennuslaitteen käyttöä tai organisaation laajuista oletuskäytäntöä.", + "usb_storage_policy": "USB tallennuskäytäntö", + "usb_whitelist": "Sallittujen luetteloon lisätyt laitteet (yksi per rivi)", + "usb_whitelist_hint": "VID:PID (esim. 0781:5583)", + "usb_audit_log": "Kirjaa USB-laiteyhteydet", + "optical_title": "Optinen aseman ohjaus", + "optical_hint": "Hallitse valitun laitteen CD-/DVD-/Blu-ray-aseman käyttöä.", + "optical_policy": "Optisen aseman käytäntö", + "optical_audit_log": "Kirjaa optisen aseman käyttöoikeus", + "monitors_title": "Monitorin hallinta", + "monitors_hint": "Määritä näytön asetukset, mukaan lukien enimmäismäärä, resoluution valvonta, kirkkaus ja tehoaikataulut.", + "monitors_max_count": "Monitorien enimmäismäärä (0 = rajoittamaton)", + "monitors_max_hint": "0 tarkoittaa, että ei ole rajaa", + "monitors_resolution": "Max resoluutio", + "monitors_brightness": "Kirkkausraja", + "monitors_power_schedule": "Tehoaikataulu", + "monitors_power_hint": "esim. pois:22.00-06.00", + "disks_title": "Levyn käytön valvonta", + "disks_hint": "Määritä levyn käyttökäytännöt, mukaan lukien vain luku -tila, salauksen valvonta ja osion näkyvyys.", + "disks_readonly": "Pakota vain luku -tila", + "disks_encryption": "Vaadi salaus (BitLocker/LUKS)", + "disks_smart": "Ota S.M.A.R.T. seurantaa", + "disks_hidden": "Piilotetut osiot", + "disks_hidden_hint": "Pilkuilla erotetut asemakirjaimet tai liitoskohdat", + "quotas_title": "Resurssikiintiöt", + "quotas_hint": "Aseta käyttäjäkohtaiset suorittimen, RAM-muistin, kaistanleveyden ja levykiintiöt valitulle laitteelle.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Kaistanleveysrajoitus (Mbps)", + "quotas_bandwidth_hint": "0 = rajoittamaton", + "quotas_disk_quota": "Levykiintiö (GB)", + "quotas_disk_hint": "0 = rajoittamaton", + "quotas_process_whitelist": "Prosessin sallittujen luettelo (yksi per rivi)", + "quotas_process_hint": "esim. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Vain valkoinen lista", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Ohjelmistopäivitykset", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Asennettu versio", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Tarkista päivitykset", + "checking": "Checking…", + "up_to_date": "Ajantasainen", + "update_available": "Päivitys saatavilla", + "changelog": "Release Notes", + "no_changelog": "Julkaisutietoja ei ole saatavilla", + "files_changed": "Tiedostot muutettu", + "files": "tiedostot", + "changes_unavailable": "Tiedoston muutosluetteloa ei voitu ladata. Voit silti asentaa päivityksen.", + "create_backup": "Luo varmuuskopio ennen päivittämistä", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Asennetaan päivitystä…", + "creating_backup": "Luodaan varmuuskopiota…", + "downloading": "Ladataan tiedostoja…", + "install_success": "Päivitys asennettu onnistuneesti. Konsoli käynnistyy uudelleen…", + "install_failed": "Päivityksen asennus epäonnistui", + "restarting": "Odotetaan konsolin uudelleenkäynnistystä…", + "restart_complete": "Konsoli käynnistyi uudelleen onnistuneesti", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Päivitysversiota ei ole valittu. Tarkista ensin päivitykset.", + "backups_title": "Päivitä varmuuskopiot", + "backups_desc": "Päivitystä edeltävät varmuuskopiot luodaan automaattisesti ennen jokaista päivitystä", + "no_backups": "Päivitysvarmuuskopioita ei löytynyt", + "restore": "Restore", + "restore_confirm": "Haluatko varmasti palauttaa tämän varmuuskopion? Muutetut tiedostot korvataan.", + "restore_success": "Varmuuskopion palautus onnistui. Konsoli käynnistyy uudelleen…", + "baseline_set": "Perusasetelma", + "commits_behind": "sitoutuu taakse", + "total_files": "Tiedostot yhteensä", + "applied": "Applied", + "failed": "Epäonnistui", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Siirry palvelimeen", + "component_agent": "Agent", + "component_scripts": "Käsikirjoitukset ja Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Tarkistetaan Go…", + "go_not_found": "Go ei asennettu", + "go_check_failed": "Go saatavuutta ei voitu tarkistaa", + "server_building": "Käännetään Go server… Tämä voi kestää muutaman minuutin.", + "server_built": "Palvelimen binaari käännetty", + "server_build_failed": "Palvelimen käännös epäonnistui", + "server_stale_title": "Palvelimen binaari on vanhentunut", + "server_stale_desc": "Go server-lähde päivitettiin, mutta käynnissä olevaa binaaria ei rakennettu uudelleen. Rakenna se uudelleen nyt ottaaksesi käyttöön tietoturva- ja kirjastopäivitykset.", + "rebuild_server": "Rakenna palvelimen binaari uudelleen", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Palvelimen binaarirakenne on rakennettu uudelleen ja käynnistetty uudelleen", + "rebuild_server_failed": "Palvelimen binaarien uudelleenmuodostus epäonnistui", + "server_deployed": "Palvelimen binaari otettu käyttöön", + "server_deploy_failed": "Palvelimen käyttöönotto epäonnistui", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Ladataan palvelinlähdettä…", + "delete": "Poista", + "delete_confirm": "Poistetaanko varmuuskopio {name} pysyvästi? Tätä ei voi kumota.", + "delete_success": "Varmuuskopio poistettu", + "delete_failed": "Varmuuskopion poistaminen epäonnistui", + "retention_label": "Säilytä N viimeisintä varmuuskopiota", + "retention_hint": "Vanhemmat varmuuskopiot poistetaan automaattisesti jokaisen päivityksen jälkeen. Käytä 0 säilyttääksesi kaikki varmuuskopiot.", + "retention_saved": "Säilytysasetus tallennettu", + "retention_invalid": "Säilytysarvon on oltava kokonaisluku välillä 0–1000", + "retention_required_for_prune": "Aseta ensin säilytysarvo, joka on suurempi kuin 0", + "prune_now": "Apply now", + "prune_confirm": "Säilytetäänkö vain {n} uusimmat varmuuskopiot ja poistetaanko loput?", + "prune_done": "Karsittu {n}-varmuuskopio(t)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Päivitysmenetelmä", + "strategy_download": "Lataa valmiiksi rakennettu binaari", + "strategy_compile": "Kääntää lähteestä", + "both_available": "Lataa ja käännä", + "download_available": "Lataa saatavilla", + "no_method": "Ei päivitystapaa", + "no_release": "No release", + "available": "Saatavilla", + "server_downloading": "Ladataan palvelimen binaaritiedostoa…", + "server_downloaded": "Palvelimen binaari ladattu", + "server_download_failed": "Palvelimen binaarilataus epäonnistui", + "server_download_note": "Valmiiksi rakennettu binaari ladataan GitHub Releasesista. Tämä kestää yleensä alle minuutin.", + "install_go_hint": "Asenna Go osoitteesta https://go.dev/dl/ ottaaksesi käännöksen käyttöön tai julkaise julkaisun valmiilla binäärimuodoilla", + "strategy_install_go": "Asenna automaattisesti Go ja käännä", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Automaattinen uudelleenrakennus valmis", + "toolchain_ready": "Työkaluketju asennettuna", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Ladataan Go-työkaluketjua…", + "toolchain_failed": "Go-työkaluketjun asennus epäonnistui", + "modal_title": "Asennetaan päivitystä", + "modal_done_title": "Päivitys valmis", + "modal_close": "Sulje", + "modal_reload_now": "Lataa konsoli uudelleen", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsolin tiedostot", + "phase_server": "Palvelinkomponentti", + "phase_restart": "Käynnistä uudelleen", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Varmuuskopiointi ohitettu (käyttäjän valintaa kohti)", + "server_skipped": "Go server ohitettiin", + "server_not_selected": "Go server not selected", + "server_processing": "Käsitellään Go server-päivitystä…", + "no_restart_needed": "Uudelleenkäynnistystä ei tarvita", + "complete": "Päivitys otettu käyttöön", + "complete_summary": "Päivitys on otettu käyttöön onnistuneesti.", + "complete_with_errors": "Päivitys on valmis, mutta jotkin vaiheet epäonnistuivat. Katso tiedot alta.", + "modal_done_with_errors_title": "Päivitys päättyi virheisiin", + "console_will_restart": "Konsoliprosessi käynnistyy nyt uudelleen…", + "restart_complete_msg": "Konsoli käynnistyi uudelleen. Lataa uusi versio napsauttamalla Lataa uudelleen. Sivu latautuu automaattisesti uudelleen 8 sekunnin kuluttua.", + "refresh_recommended": "Staattinen sisältö muutettu – lataa sivu uudelleen nähdäksesi uuden käyttöliittymän.", + "confirm_title": "Ota päivitys käyttöön", + "confirm_with_backup": "Päivitystä edeltävä varmuuskopio luodaan automaattisesti.", + "confirm_no_backup": "Varmuuskopiota ei luoda (jatka omalla vastuullasi)." + }, + "permissions": { + "title": "Käyttöoikeudet", + "subtitle": "Hallitse roolipohjaisia käyttöoikeuksia ja mukautettuja ohituksia", + "info_title": "Miten käyttöoikeudet toimivat", + "info_desc": "Jokaisella roolilla on oletuskäyttöoikeudet. Voit lisätä tai poistaa yksittäisiä käyttöoikeuksia roolia kohden vaihtamalla ne alla. Mukautetut ohitukset on korostettu, ja ne voidaan palauttaa oletusasetuksiin milloin tahansa.", + "select_role": "Valitse rooli", + "select_role_placeholder": "Valitse rooli...", + "reset_overrides": "Nollaa kaikki ohitukset", + "granted": "Myönnetty", + "overrides": "Ohitukset", + "level": "Taso", + "super_admin_tag": "Täysi pääsy", + "server_level_tag": "Palvelintaso", + "custom": "Mukautettu", + "default": "Oletus", + "revert": "Palauta oletusarvo", + "saved": "Lupa päivitetty", + "reverted": "Palautettu oletusarvoon", + "all_reverted": "Kaikki ohitukset palautettiin", + "confirm_reset": "Palautetaanko kaikki tämän roolin mukautetut ohitukset oletusasetuksiin?", + "empty_title": "Valitse rooli", + "empty_desc": "Valitse rooli yllä olevasta avattavasta valikosta nähdäksesi ja hallinnoidaksesi sen käyttöoikeuksia.", + "locked_title": "Pääkäyttäjä", + "locked_desc": "Super Adminilla on oletuksena kaikki käyttöoikeudet, eikä sitä voi mukauttaa.", + "cat_device": "Laitteet", + "cat_user": "Käyttäjät", + "cat_server": "Palvelin", + "cat_org": "Organisaatiot", + "cat_audit": "Tarkastus ja seuranta", + "cat_cdap": "CDAP", + "cat_enrollment": "Rekisteröinti", + "cat_chat": "Chat", + "cat_branding": "Brändäys", + "perm_device_view": "Näytä laitteet", + "perm_device_connect": "Yhdistä laitteisiin", + "perm_device_edit": "Muokkaa laitteita", + "perm_device_delete": "Poista laitteet", + "perm_device_ban": "Laitteiden estäminen / eston poistaminen", + "perm_device_change_id": "Vaihda laitetunnus", + "perm_user_view": "Näytä käyttäjät", + "perm_user_create": "Luo käyttäjiä", + "perm_user_edit": "Muokkaa käyttäjiä", + "perm_user_delete": "Poista käyttäjiä", + "perm_server_config": "Palvelimen määritykset", + "perm_server_keys": "Hallitse API-avaimia", + "perm_org_create": "Luo organisaatioita", + "perm_org_edit": "Muokkaa organisaatioita", + "perm_org_delete": "Poista organisaatiot", + "perm_org_manage_users": "Hallinnoi organisaation käyttäjiä", + "perm_org_manage_devices": "Hallinnoi organisaation laitteita", + "perm_audit_view": "Tarkastele tarkastuslokeja", + "perm_metrics_view": "Näytä mittarit", + "perm_blocklist_edit": "Muokkaa estolistaa", + "perm_cdap_view": "Tarkastele CDAP-laitteita", + "perm_cdap_command": "Lähetä CDAP-komennot", + "perm_cdap_terminal": "CDAP terminaalin käyttö", + "perm_cdap_files": "CDAP tiedostojen käyttö", + "perm_enrollment_manage": "Hallinnoi ilmoittautumista", + "perm_enrollment_approve": "Hyväksy ilmoittautuminen", + "perm_chat_access": "Chat-pääsy", + "perm_branding_edit": "Muokkaa brändäystä", + "perm_server_attestation": "Palvelimen suorituskykytodistus" + }, + "notifications": { + "title": "Ilmoitukset", + "empty": "Ei uusia ilmoituksia", + "mark_all_read": "Merkitse kaikki luetuiksi", + "see_all": "Katso kaikki avunpyynnöt", + "help_request": "Apupyyntö", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Säädä konsoli näkö-, liike- ja lukutarpeidesi mukaan.", + "close": "Sulje esteettömyysvalikko", + "profiles": "Pikaprofiilit", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Suurempi teksti, voimakas kontrasti ja tarkennus.", + "profile_dyslexia": "Lukemisen mukavuus", + "profile_dyslexia_hint": "Luettava fontti ja leveämpi väli.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Vähentää siirtymiä ja keskeyttää animaation.", + "profile_color_assist": "Värituki", + "profile_color_assist_hint": "Värisuodatin, tarrat ja korostetut linkit.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Kirjainvälit", + "word_spacing": "Sanavälit", + "readable_font": "Luettava fontti", + "readable_font_hint": "Käyttää leveitä, tuttuja kirjainmuotoja.", + "dyslexia_spacing": "Lukihäiriövälit", + "dyslexia_spacing_hint": "Lisää ylimääräisiä välilyöntejä pitkälle tekstille.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Korkea kontrasti tumma", + "contrast_high_light": "Korkeakontrastinen valo", + "contrast_yellow_black": "Keltainen mustalla", + "color_filter": "Värinäön suodatin", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Värikylläisyys", + "underline_links": "Alleviivaa linkit", + "underline_links_hint": "Tekee linkit näkyviksi ilman värejä.", + "highlight_links": "Korosta toimintoja", + "highlight_links_hint": "Piirtää linkit ja painikkeet.", + "highlight_headings": "Korosta otsikot", + "highlight_headings_hint": "Merkitsee osien otsikot väripalkilla.", + "hide_media": "Dim media", + "hide_media_hint": "Himmentää kuvia, videoita ja kankaita.", + "interaction": "Interaction", + "strong_focus": "Vahva tarkennus", + "strong_focus_hint": "Näyttää suuren näppäimistön tarkennusrenkaan.", + "large_cursor": "Suuri kursori", + "large_cursor_hint": "Käyttää suurempaa korkeakontrastista osoitinta.", + "reduce_motion": "Vähennä liikettä", + "reduce_motion_hint": "Lyhentää siirtymiä ja tasaista vieritystä.", + "pause_animations": "Keskeytä animaatiot", + "pause_animations_hint": "Pysäyttää visuaalisen liikkeen silmukan.", + "reading_guide": "Lukuopas", + "reading_guide_hint": "Seuraa osoitinta kirkkaalla viivalla.", + "reading_mask": "Luku naamio", + "reading_mask_hint": "Himmentää sisältöä osoittimen ylä- ja alapuolella.", + "preview": "Preview", + "preview_title": "Käyttäjän työtilan esikatselu", + "preview_text": "Tarkista ennen tämän valikon sulkemista, ovatko tekstit, linkit, säätimet ja tilatunnisteet mukavia lukea.", + "preview_link": "Laitteen tiedot -linkki", + "preview_status": "Online", + "preview_button": "Ensisijainen toiminta", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Palvelimen hallinta", + "subtitle": "Ohjaamomainen ohjaustaso BetterDesk-konsoliisännälle (BETA).", + "beta_tooltip": "Beta-ominaisuus – aktiivisesti kehitteillä.", + "notice_title": "Beta-ominaisuus", + "notice_body": "Nämä työkalut toimivat isännässä, jossa BetterDesk-konsoliprosessi sijaitsee. Kaikki toiminta on auditoitua. Ominaisuus laajenee tulevissa julkaisuissa.", + "tab_overview": "Yleiskatsaus", + "tab_terminal": "Pääte", + "tab_files": "Tiedostot", + "tab_services": "Palvelut", + "cpu": "CPU", + "memory": "Muisti", + "load": "Keskimääräinen kuormitus", + "disks": "Levyt", + "history": "Historia (viimeiset 60 näytettä)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Käyntiaika", + "no_disks": "Levytietoja ei ole saatavilla", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY saatavilla", + "term_connect": "Yhdistä", + "term_disconnect": "Katkaise", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Yhteysvirhe", + "term_warning": "Komennot suoritetaan käyttäjänä, joka omistaa konsoliprosessin. Lisää sudoers-sääntö ottaaksesi korkeuden käyttöön.", + "term_hint": "Vinkki: kirjoita `sudo -i` eskaloidaksesi (vaatii sudoers-määrityksen).", + "term_lib_failed": "Päätekirjaston lataaminen epäonnistui", + "files_up": "Yksi taso ylöspäin", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Tyhjä hakemisto", + "files_error": "Hakemiston luettelointi epäonnistui", + "read_failed": "Tiedoston lukeminen epäonnistui", + "save_failed": "Tiedoston tallennus epäonnistui", + "rename_failed": "Uudelleennimeäminen epäonnistui", + "delete_failed": "Poistaminen epäonnistui", + "delete_confirm": "Poistetaanko tämä merkintä?", + "mkdir_prompt": "Uuden kansion nimi:", + "mkdir_failed": "Kansion luominen epäonnistui", + "file_saved": "Tiedosto tallennettu", + "binary_warn": "Binaaritiedosto – vain esikatselu", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Hakupalvelut…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Palveluita ei löytynyt", + "svc_load_failed": "Palvelujen lataaminen epäonnistui", + "svc_action_failed": "Toiminto epäonnistui", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Käynnistä uudelleen", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Lataa BetterDesk Agent", + "choose_platform": "Valitse alustasi", + "choose_platform_hint": "Valitse käyttöjärjestelmääsi vastaava asennusohjelma.", + "download": "Lataa", + "building": "Rakennus…", + "failed": "Rakennus epäonnistui", + "need_help": "Tarvitsetko apua?", + "powered_by": "Voimanlähteenä" + }, + "server_attestation": { + "title": "Palvelintodistus", + "subtitle": "Suorituskykyvertailu, joka määrittää samanaikaisten etäyhteyksien kapasiteetin 80 %:n CPU-, RAM- ja levykynnyksellä.", + "warning_title": "Kuormitustesti", + "warning_body": "Vertailu simuloi rinnakkaisia WebSocket-yhteyksiä signaali- ja relépalvelimiin. Suorita hiljaisina aikoina — tämä testi kuormittaa tuotantoa.", + "run_benchmark": "Suorita vertailu", + "abort": "Keskeytä", + "download_report": "Lataa JSON-raportti", + "last_test": "Viimeisin testi", + "no_test_yet": "Vertailua ei ole vielä suoritettu", + "max_connections": "Enimmäisyhteydet", + "threshold_80": "80 %:n kynnys — lopulliset mittaukset", + "disk": "Levy", + "ramp_chart": "Kuormituskaavio", + "connections": "Yhteydet", + "connections_short": "yhteyt.", + "tier_guide_title": "Mitä kukin taso tarkoittaa?", + "tier_bronze": "PRONSSI", + "tier_iron": "RAUTA", + "tier_titanium": "TITAANI", + "tier_platinum": "PLATINA", + "tier_obsidian": "OBSIDIAANI", + "tier_none": "ARVIOIMATON", + "tier_bronze_desc": "1–25 samanaikaista yhteyttä — pieni VPS (1–2 vCPU, 2–4 Gt RAM).", + "tier_iron_desc": "26–75 yhteyttä — keskitasoinen palvelin (2–4 vCPU, 4–8 Gt RAM).", + "tier_platinum_desc": "76–200 yhteyttä — suorituskykyinen palvelin (4–8 vCPU, 8–16 Gt RAM).", + "tier_titanium_desc": "201–400 yhteyttä — yritysinfrastruktuuri (8+ vCPU, 16–32 Gt RAM).", + "tier_obsidian_desc": "401+ yhteyttä — turboiluokka: oma laitteisto, 16+ vCPU, 32+ Gt RAM, NVMe.", + "docker_note": "Huomio: Dockerissa CPU/RAM-mittaukset saattavat heijastaa säilön rajoituksia fyysisen isäntäkoneen sijaan.", + "badge_tooltip": "BetterDesk-palvelintodistus — palvelimen suorituskykysertifiointi", + "confirm_run": "Tämä vertailu kuormitustestaa palvelimen simuloiduilla yhteyksillä. Jatketaanko?", + "starting": "Käynnistetään...", + "complete": "Vertailu valmis", + "signal_peers": "Signaaliverdaistahot", + "relay_sessions": "Reléistunnot", + "page_error": "Palvelintodistus-sivun lataus epäonnistui", + "mode_estimated": "Arvioitu (WebSocket ei saavutettavissa)", + "incomplete": "Vertailu valmistui ilman kelvollista tasoa" + }, + "commercialization": { + "title": "Kaupallistaminen", + "subtitle": "Tukipaketit, laskutettavat istunnot ja raportit", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Varhainen ominaisuus — laskutus ja paketit ovat aktiivisessa kehityksessä.", + "tabs": { + "overview": "Yleiskatsaus", + "packages": "Paketit ja sopimukset", + "sessions": "Istunnot", + "reports": "Raportit", + "settings": "Lisäasetukset" }, - "branding": { - "identity_title": "Brändin identiteetti", - "identity_desc": "Mukauta konsolissa näkyvää sovelluksen nimeä ja kuvausta", - "app_name": "Sovelluksen nimi", - "app_description": "Sovelluksen kuvaus", - "logo_title": "Logo", - "logo_desc": "Valitse, miten logosi näkyy sivupalkissa ja kirjautumissivulla", - "logo_type_icon": "Materiaalin kuvake", - "logo_type_svg": "SVG-koodi", - "logo_type_image": "Kuva-URL", - "logo_icon_name": "Kuvakkeen nimi", - "logo_icon_hint": "Anna materiaalikuvakkeiden nimi (esim. dns, pilvi, tietoturva). Katso fonts.google.com/icons", - "logo_svg_code": "SVG-koodi", - "logo_svg_hint": "Liitä SVG-merkintäsi tähän. Tukee kaikkia -elementtejä poluilla ja tyyleillä.", - "logo_image_upload": "Lataa kuva", - "logo_image_choose": "Valitse kuvatiedosto", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Virheellinen tiedostotyyppi. Käytä PNG, JPG, GIF, WebP tai SVG.", - "preview": "Esikatselu", - "colors_title": "Värimalli", - "colors_desc": "Mukauta väripalettia. Jätä tyhjäksi, jos haluat käyttää oletusasetuksia.", - "colors_backgrounds": "Taustat", - "colors_text": "Teksti", - "colors_accents": "Korostusvärit", - "colors_borders": "Reunat", - "import_export_title": "Tuo / Vie", - "import_export_desc": "Tallenna teemasi JSON-tiedostona tai tuo se toisesta esiintymästä", - "export_theme": "Vie teema", - "import_theme": "Tuo teema", - "reset_defaults": "Palauta oletusarvoihin", - "save_branding": "Tallenna brändäys", - "saved": "Brändäyksen tallennus onnistui. Ladataan uudelleen...", - "exported": "Teema viety", - "imported": "Teeman tuonti onnistui. Ladataan uudelleen...", - "import_error": "Teeman tuonti epäonnistui. Virheellinen tiedostomuoto.", - "reset_confirm": "Haluatko varmasti palauttaa brändäyksen oletusasetuksiin? Tätä ei voi kumota.", - "reset_success": "Brändi palautettu oletusasetuksiin. Ladataan uudelleen...", - "logo_type_text": "Tekstilogo", - "logo_text": "Logoteksti", - "logo_text_hint": "Ensisijainen teksti näkyy brändisi logona", - "logo_text_accent": "Korostusteksti", - "logo_text_accent_hint": "Logon alla oleva toissijainen teksti (esim. tuotteen nimi tai tunnuslause)", - "logo_upload_success": "Logo lähetetty onnistuneesti.", - "typography_title": "Typografia", - "typography_desc": "Valitse fontit otsikoille ja leipätekstille. Fontit ladataan palvelimelle itseisännöintiä varten.", - "font_heading": "Otsikon fontti", - "font_heading_hint": "Käytetään otsikoissa (H1–H6) ja tekstilogossa", - "font_body": "Leipätekstifontti", - "font_body_hint": "Käytetään leipätekstissä ja käyttöliittymäelementeissä", - "font_search_placeholder": "Hae fontteja...", - "font_system_default": "Järjestelmän oletus", - "font_clear": "Tyhjennä", - "font_cat_all": "Kaikki", - "font_downloaded_count": "palvelimelle ladatut fontit", - "powered_by": "Powered by", - "background_title": "Tausta ja ulkoasu", - "background_desc": "Aseta konsolin tausta, liukuväri tai tasainen tausta.", - "bg_type_none": "Ei mitään", - "bg_type_color": "Tasainen väri", - "bg_type_gradient": "Liukuväri", - "bg_type_image": "Kuva", - "bg_color": "Taustaväri", - "bg_gradient": "CSS-liukuväri", - "bg_gradient_hint": "Mikä tahansa kelvollinen CSS-liukuväri, esim. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Lataa taustakuva", - "bg_image_choose": "Valitse kuvatiedosto", - "bg_image_hint": "PNG, JPG, WebP tai GIF. Enintään 8 Mt.", - "bg_image_url": "Kuvan polku / URL", - "bg_size": "Kuvan koko", - "bg_size_cover": "Peitä (täytä näyttö)", - "bg_size_contain": "Sovita (fit)", - "bg_size_auto": "Auto (alkuperäinen)", - "bg_blur": "Taustan sumennus", - "bg_overlay": "Tumma peite", - "bg_overlay_hint": "Tummentaa taustaa paremman tekstin luettavuuden vuoksi.", - "bg_image_too_large": "Kuva on liian suuri. Enimmäiskoko on 8 Mt.", - "bg_image_invalid_type": "Virheellinen tiedostotyyppi. Käytä PNG, JPG, WebP tai GIF.", - "bg_upload_success": "Taustakuva ladattu.", - "login_title": "Kirjautumissivu", - "login_desc": "Mukauta kirjautumisruudun otsikko, alaotsikko ja tausta.", - "login_heading": "Kirjautumisotsikko", - "login_heading_placeholder": "Tervetuloa takaisin", - "login_subheading": "Kirjautumisen alaotsikko", - "login_subheading_placeholder": "Kirjaudu tilillesi", - "login_bg_inherit": "Sama kuin konsoli", - "agent_title": "Agentin lataussivu", - "agent_desc": "Mukauta loppukäyttäjille näytettävä julkinen agentin latausportaali.", - "agent_show_powered": "Näytä \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Näytä BetterDesk-merkintä latausportaalin alatunnisteessa.", - "footer_title": "Alatunniste ja tekijänoikeus", - "footer_desc": "Lisää mukautettu alatunnisterivi kirjautumisruutuun ja konsolin sivupalkkiin.", - "footer_text": "Alatunnistedteksti", - "footer_text_hint": "esim. tekijänoikeusilmoitus tai yrityksen nimi.", - "show_powered": "Näytä \"BetterDesk\"-merkintä", - "show_powered_hint": "Näytä BetterDesk-nimi ja versio kirjautumisen alatunnisteessa ja sivupalkissa.", - "custom_css_title": "Mukautettu CSS", - "custom_css_desc": "Edistynyt: lisää mukautettu CSS konsoliin ja kirjautumissivulle.", - "custom_css_hint": "Käytä varoen. Enintään 20 000 merkkiä." + "clock": { + "title": "Palvelinaika (NTP)", + "check_now": "Tarkista nyt", + "unsynced": "Palvelimen kello ei ole synkronoitu — laskutettavat istunnot voidaan estää" }, - "device_detail": { - "tab_overview": "Yleiskatsaus", - "tab_tags": "Tunnisteet ja muistiinpanot", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Yhteys", - "section_manage": "Hallinto", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Tämä laite on kielletty", - "no_reason": "Ei annettu syytä", - "tags": "Tags", - "no_tags": "Tälle laitteelle ei ole määritetty tunnisteita", - "tag_placeholder": "Anna tunnisteen nimi...", - "add_tag": "Add", - "tag_exists": "Tämä tunniste on jo olemassa", - "notes": "Notes", - "notes_placeholder": "Lisää muistiinpanoja tästä laitteesta...", - "danger_zone": "Danger Zone", - "action_connect_web": "Yhdistä selaimella", - "action_connect_web_desc": "Yhdistä selaimen etätyöpöydän kautta", - "action_native_remote": "BetterDesk Kaukosäädin", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Yhdistä työpöytäsovelluksella", - "action_connect_desktop_desc": "Avaa työpöytäasiakassovelluksessa", - "action_change_id_desc": "Vaihda laitteen rekisteröintitunnus", - "action_ban_desc": "Estä tätä laitetta muodostamasta yhteyttä", - "action_unban_desc": "Anna tämän laitteen muodostaa yhteys uudelleen", - "action_delete_desc": "Poista tämä laite pysyvästi", - "tab_hardware": "Hardware", - "tab_metrics": "Mittarit", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Koodausominaisuudet", - "section_live_metrics": "Live-mittarit", - "section_current_usage": "Nykyinen käyttö", - "section_usage_history": "Käyttöhistoria", - "os": "Käyttöjärjestelmä", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU-taajuus", - "total_memory": "Kokonaismuisti", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Päivitetty", - "device_groups": "ryhmät", - "no_sysinfo": "Laitteistotietoja ei ole saatavilla", - "no_sysinfo_hint": "Järjestelmätiedot tulevat näkyviin, kun laite lähettää sysinfo-raportin", - "no_metrics": "Mittatietoja ei ole saatavilla", - "no_metrics_hint": "Mittarit tulevat näkyviin, kun laite lähettää sykeraportteja", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Tiedostot", - "agent_lazy_hint": "Napsauta tätä välilehteä ladataksesi reaaliaikaiset tiedot agentista", - "agent_offline": "Agentti on offline-tilassa", - "agent_timeout": "Agentti ei vastannut ajoissa", - "agent_error": "Tietojen lataaminen agentilta epäonnistui", - "service_name": "Name", - "service_display": "Näyttönimi", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktiiviset laskutettavat istunnot" }, - "inventory": { - "title": "Inventory", - "subtitle": "Hallittujen laitteiden laitteisto- ja ohjelmistoluettelo", - "device_id": "Laitteen tunnus", - "hostname": "Hostname", - "os": "Käyttöjärjestelmä", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Kokonaismuisti", - "memory_used": "Used Memory", - "memory_available": "Käytettävissä oleva muisti", - "memory_usage": "Muistin käyttö", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Verkkoliitännät", - "software": "Software", - "software_count": "Asennettu ohjelmisto", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fyysiset ytimet", - "logical_cores": "Loogiset ytimet", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Saatavilla", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-osoitteet", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Keräilijä Juoksemassa", - "collector_stopped": "Keräilijä pysähtynyt", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Kerätty klo", - "no_data": "Varastotietoja ei ole vielä saatavilla. Napsauta \"Kerää nyt\" kerätäksesi järjestelmätiedot.", - "no_devices": "Varastotietoja sisältäviä laitteita ei löytynyt", - "detail_title": "Laitevaraston tiedot", - "telemetry": "Telemetry", - "view_detail": "Näytä tiedot", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Uusi paketti", + "name": "Nimi", + "included_minutes": "Sisältyvät minuutit", + "overage_rate": "Ylityshinta / h", + "currency": "Valuutta", + "heading": "Tukipaketit", + "prompt_name": "Paketin nimi", + "create_title": "Uusi paketti organisaatiolle", + "create_submit": "Luo paketti", + "select_org": "Organisaatio", + "select_org_placeholder": "Valitse organisaatio…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Tuki lippuja ja ongelmien seurantaa", - "create": "New Ticket", - "edit": "Muokkaa lippua", - "delete": "Poista lippu", - "detail": "Lippujen tiedot", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Määrätty vastaanottajalle", - "created_by": "Luonut", - "device": "Laite", - "sla_due": "SLA Due", - "created_at": "Luotu", - "updated_at": "Päivitetty", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Avaa", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Kirjoita kommentti...", - "internal_note": "Sisäinen huomautus (ei näy loppukäyttäjille)", - "attachments": "Attachments", - "upload_attachment": "Lataa liite", - "download": "Download", - "connect_device": "Yhdistä laitteeseen", - "no_tickets": "Lippuja ei löytynyt", - "no_comments": "Ei vielä kommentteja", - "no_attachments": "Ei liitteitä", - "title_required": "Otsikko vaaditaan", - "delete_confirm": "Haluatko varmasti poistaa lipun #{id}?", - "delete_success": "Lippu poistettu onnistuneesti", - "created_success": "Lipun luominen onnistui", - "updated_success": "Lippu päivitetty onnistuneesti", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Hae liput...", - "assign_to_me": "Määrää minulle", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Avaa", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Toiminnan seuranta", - "subtitle": "Sovelluksen käytön ja tyhjäkäynnin seuranta", - "device": "Laite", - "hostname": "Hostname", - "sessions": "Istunnot", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Suosituimmat sovellukset", - "app_name": "Application", - "window_title": "Ikkunan otsikko", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Istuntojen määrä", - "total_active": "Aktiivinen yhteensä", - "total_idle": "Total Idle", - "detail_count": "Yksityiskohdat Records", - "no_data": "Toimintatietoja ei ole saatavilla", - "no_sessions": "Ei istuntoja", - "filter_from": "Alkaen", - "filter_to": "Vastaanottaja", - "filter_apply": "Käytä suodatinta", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Hae laitteita...", - "date_range": "Date Range", - "device_id": "Laitteen tunnus", - "session_start": "Istunnon aloitus", - "session_end": "Istunnon loppu", - "user": "User", - "no_activity": "Ei tallennettua toimintaa", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Ei sovelluksia" - }, - "automation": { - "title": "Automaatio ja hälytykset", - "subtitle": "Varoitussäännöt, etäkomennot ja SMTP-määritykset", - "rules": "Alert Rules", - "rules_subtitle": "Määritä ehdot, jotka käynnistävät ilmoitukset", - "alerts": "Varoitushistoria", - "alerts_subtitle": "Tarkastele ja kuitata käynnistettyjä hälytyksiä", - "commands": "Etäkomennot", - "commands_subtitle": "Lähetä komentoja etälaitteisiin", - "smtp": "SMTP-asetukset", - "smtp_subtitle": "Sähköposti-ilmoitusasetukset", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Kuntotyyppi", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Kohdelaite", - "scope_all": "Kaikki laitteet", - "cooldown": "Jäähdytys (sekuntia)", - "notify_emails": "Ilmoitussähköpostit", - "enabled": "Käytössä", - "disabled": "Ei käytössä", - "create_rule": "Luo sääntö", - "edit_rule": "Muokkaa sääntöä", - "delete_rule": "Poista sääntö", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Laukaistiin klo", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Suurempi kuin", - "op_gte": "Suurempi tai yhtä suuri", - "op_lt": "Less than", - "op_lte": "Vähemmän tai yhtä suuret", - "op_eq": "Yhtä", - "op_neq": "Ei yhtä suuri kuin", - "type_cpu_usage": "Prosessorin käyttö (%)", - "type_memory_usage": "Muistin käyttö (%)", - "type_disk_usage": "Levyn käyttö (%)", - "type_offline_duration": "Offline-kesto (s)", - "type_idle_duration": "Joutokäynnin kesto (s)", - "type_custom": "Custom", - "command_type": "Komentotyyppi", - "command_payload": "Komento / komentosarja", - "command_result": "Result", - "command_status": "Status", - "send_command": "Lähetä komento", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Epäonnistui", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Käyttäjätunnus", - "smtp_pass": "Salasana", - "smtp_from": "Osoitteesta", - "smtp_test": "Testaa yhteys", - "smtp_save": "Tallenna asetukset", - "smtp_test_success": "Yhteys onnistui", - "smtp_test_failed": "Yhteys epäonnistui", - "no_rules": "Varoitussääntöjä ei ole määritetty", - "no_alerts": "Hälytyksiä ei laukaistu", - "no_commands": "Ei lähetetty komentoja", - "id_payload_required": "Laitetunnus ja hyötykuorma vaaditaan", - "no_commands_sent": "Mitään komentoja ei ole vielä lähetetty" - }, - "file_transfer": { - "title": "Tiedoston siirto", - "transfers": "Transfers", - "new_transfer": "Uusi siirto", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Tiedoston koko", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Laite", - "initiated_by": "Aloittaja", - "created_at": "Luotu klo", - "cancel": "Peruuta", - "cancel_confirm": "Haluatko varmasti peruuttaa tämän siirron?", - "download_file": "Lataa tiedosto", - "browse_files": "Selaa tiedostoja", - "select_file": "Valitse Tiedosto", - "select_device": "Valitse Laite", - "no_transfers": "Ei tiedostojen siirtoja", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Epäonnistui", - "status_cancelled": "Cancelled", - "bytes_transferred": "Tavut siirretty", - "chunks": "Chunks", - "transfer_started": "Siirto aloitettu", - "transfer_completed": "Siirto suoritettu", - "transfer_failed": "Siirto epäonnistui", - "transfer_cancelled": "Siirto peruttu", - "max_file_size": "Tiedoston enimmäiskoko: 4 Gt", - "error_too_large": "Tiedosto on liian suuri", - "error_no_device": "Laitetta ei ole valittu", - "error_no_file": "Tiedostoa ei ole valittu" - }, - "network": { - "title": "Verkon valvonta", - "targets": "Seurantatavoitteet", - "add_target": "Add Target", - "edit_target": "Muokkaa kohdetta", - "delete_target": "Poista kohde", - "delete_confirm": "Haluatko varmasti poistaa tämän kohteen?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Aikakatkaisu (ms)", - "interval": "Aikaväli (ms)", - "enabled": "Käytössä", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Tarkista historia", - "stats": "Statistics", - "total_targets": "Tavoitteet yhteensä", - "targets_up": "Targets Up", - "targets_down": "Kohteet alas", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Verkkotyökalut", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Portin tarkistus", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Käynnistä näyttö", - "monitor_stop": "Pysäytysnäyttö", - "monitor_running": "Monitori on käynnissä", - "monitor_stopped": "Monitori pysähtyy", - "no_targets": "Valvontakohteita ei ole määritetty", - "no_history": "Tarkistushistoriaa ei ole saatavilla", - "error_code": "Error", - "status_code": "HTTP Tilakoodi", - "search_targets": "Hakukohteet...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Tarkista historia", - "name_host_required": "Nimi ja isäntä vaaditaan", - "uptime": "Uptime", - "response_time": "Vastausaika", - "avg_response": "Keskimääräinen vastaus", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Vastausaika (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Viimeiset 24 tuntia", - "last_7d": "Last 7 days", - "last_30d": "Viimeiset 30 päivää" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP-käytännöt", - "add_policy": "Lisää käytäntö", - "edit_policy": "Muokkaa käytäntöä", - "delete_policy": "Poista käytäntö", - "delete_confirm": "Haluatko varmasti poistaa tämän käytännön?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Käytössä", - "disabled": "Ei käytössä", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB Laite", - "rule_type_file": "Tiedoston käyttö", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Toimittajatunnus (VID)", - "pid": "Tuotetunnus (PID)", - "serial": "Sarjanumero", - "device_class": "Laiteluokka", - "drive_type": "Drive Type", - "file_extensions": "Tiedoston laajennukset", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Tiedosto", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "DLP-käytäntöjä ei ole määritetty", - "no_events": "Ei tallennettuja DLP-tapahtumia", - "stats": "Statistics", - "total_events": "Tapahtumat yhteensä", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Tiedosto Tapahtumat", - "device_id": "Laitteen tunnus", - "policy_matched": "Käytäntö sovitettu", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Yhteensä käytännöt", - "active_policies": "Aktiiviset käytännöt", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Käytännöt", - "tab_events": "Events", - "search_policies": "Hakukäytännöt...", - "create_policy": "Luo käytäntö", - "policy_type": "Käytännön tyyppi", - "scope": "Scope", - "events_count": "Events", - "search_events": "Hae tapahtumia...", - "event_time": "Event Time", - "device": "Laite", - "policy": "politiikka", - "detail": "Detail", - "scope_help": "Pilkuilla eroteltu laitetunnukset tai jätä tyhjäksi kaikille", - "scope_all": "Kaikki laitteet", - "active": "Active", - "type_file_type": "Tiedostotyyppi", - "type_clipboard": "Leikepöytä", - "type_screen_share": "Näytön jako", - "type_file_transfer": "Tiedoston siirto", - "policy_desc": "Käytännön kuvaus", - "type_usb": "USB" + "sessions": { + "device": "Laite", + "operator": "Operaattori", + "duration": "Kesto", + "phase": "Vaihe", + "amount": "Summa" }, "reports": { - "title": "Reports", - "generate": "Luo raportti", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Laitteen yhteenveto", - "type_activity": "Toiminnan yhteenveto", - "type_security": "Turvallisuusraportti", - "type_tickets": "Lippuraportti", - "type_network": "Verkkoraportti", - "type_inventory": "Varastoraportti", - "type_alerts": "Varoitusraportti", - "saved": "Tallennetut raportit", - "save_report": "Tallenna raportti", - "delete_report": "Poista raportti", - "delete_confirm": "Haluatko varmasti poistaa tämän tallennetun raportin?", - "no_saved": "Ei tallennettuja raportteja", - "report_title": "Title", - "created_by": "Luonut", - "created_at": "Luotu klo", - "filters": "Filters", - "date_from": "Alkupäivä", - "date_to": "Vastaanottaja", - "device_filter": "Laitteen tunnus", - "generated_at": "Luotu klo", - "section": "Tietoosio", - "total_devices": "Laitteita yhteensä", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Alustan jakelu", - "top_applications": "Suosituimmat sovellukset", - "total_active": "Aktiivinen aika yhteensä", - "total_idle": "Tyhjäkäyntiaika yhteensä", - "dlp_stats": "DLP-tilastot", - "banned_devices": "Kielletyt laitteet", - "audit_logs": "Audit Logs", - "ticket_stats": "Lippujen tilastot", - "category_distribution": "Luokka Jakelu", - "priority_distribution": "Ensisijainen jakelu", - "targets_status": "Kohteiden tila", - "os_distribution": "Käyttöjärjestelmän jakelu", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Viimeaikaiset hälytykset", - "tab_generate": "Luo raportti", - "tab_saved": "Tallennetut raportit", - "type_devices_desc": "Yleiskatsaus kaikista laitteista, alustoista ja tiloista", - "type_activity_desc": "Yhteenveto sovelluksen käytöstä ja lepotilasta", - "type_security_desc": "Estä toiminnot, DLP-tapahtumat ja tarkastuslokit", - "type_tickets_desc": "Lipputilastot ja SLA:n suorituskyky", - "type_network_desc": "Verkon seurantatavoitteet ja käyttöaikatiedot", - "type_inventory_desc": "Yhteenveto laitteisto- ja ohjelmistoluettelosta", - "type_alerts_desc": "Varoitussäännöt ja laukaistu hälytyshistoria", - "report_name": "Report Name", - "format": "Format", - "save": "Tallenna raportti", - "preview": "Preview", - "download": "Download", - "delete_saved": "Poista raportti", - "raw_json": "Raw JSON" + "session": "Istunto", + "summary": "Yhteenveto", + "date": "Päivämäärä" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Muokkaa vuokralaista", - "delete_tenant": "Poista vuokralainen", - "delete_confirm": "Haluatko varmasti poistaa tämän vuokralaisen? Kaikki laite- ja käyttäjämääritykset poistetaan.", - "name": "Name", - "slug": "Slug", - "contact_name": "Yhteyshenkilön nimi", - "contact_email": "Yhteydenotto Sähköposti", - "max_devices": "Max laitteet", - "max_devices_hint": "0 = rajoittamaton", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Laitteet", - "users": "Users", - "assign_device": "Määritä laite", - "assign_devices": "Määritä laitteet", - "remove_device": "Poista laite", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Vuokralaisia ei ole määritetty", - "no_devices": "Tälle vuokraajalle ei ole määritetty laitteita", - "no_users": "Tälle vuokraajalle ei ole määritetty käyttäjiä", - "stats": "Vuokralaisten tilastot", - "total_devices": "Laitteita yhteensä", - "online_devices": "Online-laitteet", - "total_users": "Total Users", - "created_at": "Luotu klo", - "updated_at": "Päivitetty klo", - "slug_exists": "Vuokralaisen etana on jo olemassa", - "total_tenants": "Vuokralaisia yhteensä", - "active_tenants": "Aktiiviset vuokralaiset", - "search": "Etsi vuokralaisia...", - "create_tenant": "Luo vuokralainen", - "detail": "Vuokralaisen tiedot", - "contact": "Contact", - "enabled": "Käytössä", - "disabled": "Ei käytössä", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Organisaatiosopimukset", + "new": "Määritä paketti", + "org": "Organisaatio", + "package": "Paketti", + "remaining": "Jäljellä olevat minuutit", + "status": "Tila", + "actions": "Toiminnot", + "suspend": "Keskeytä", + "activate": "Aktivoi", + "select_org": "Valitse organisaatio", + "select_package": "Valitse paketti", + "no_orgs": "Organisaatioita ei löytynyt", + "no_packages": "Luo ensin paketti" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Hae laitetunnuksen, isäntänimen tai IP-osoitteen perusteella...", - "no_registrations": "No registration requests", - "col_device_id": "Laitteen tunnus", - "col_hostname": "Isäntänimi", - "col_platform": "Alusta", - "col_ip": "IP-osoite", - "col_version": "Versio", - "col_status": "Tila", - "col_requested": "Pyydetty", - "col_actions": "Toiminnot", - "status_pending": "Odottaa", - "status_approved": "Hyväksytty", - "status_rejected": "Hylätty", - "approve_btn": "Hyväksy", - "approve_confirm": "Haluatko varmasti hyväksyä tämän laitteen? Se vastaanottaa palvelimen tunnistetiedot ja voi muodostaa yhteyden automaattisesti.", - "approved_success": "Laitteen rekisteröinti hyväksytty", - "reject_btn": "Hylkää", - "reject_title": "Hylkää rekisteröinti", - "reject_confirm": "Haluatko varmasti hylätä tämän rekisteröintipyynnön?", - "reject_reason": "Syy (valinnainen)", - "reject_reason_placeholder": "Anna hylkäämisen syy...", - "rejected_success": "Laitteen rekisteröinti hylätty", - "delete_confirm": "Haluatko varmasti poistaa tämän rekisteröintitietueen?", - "deleted_success": "Rekisteröintitietue poistettu", - "enrollment_title": "Laitteen rekisteröinti", - "enrollment_subtitle": "Odottavat rekisteröintipyynnöt BetterDesk-työpöytäasiakkailta", - "enrollment_empty": "Ei vireillä olevia ilmoittautumispyyntöjä", - "enrollment_approve": "Hyväksy", - "enrollment_reject": "Hylkää", - "enrollment_display_name": "Näyttönimi", - "enrollment_display_name_placeholder": "Anna nimi tälle laitteelle...", - "enrollment_sync_mode": "Synkronointitila", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Laitteen rekisteröinti hyväksytty", - "enrollment_rejected_success": "Laitteen rekisteröinti hylätty", - "approve_title": "Hyväksy laite", - "field_name": "Laitteen nimi", - "field_name_placeholder": "Anna nimi tälle laitteelle...", - "field_sync_mode": "Synkronointitila", - "sync_standard": "Vakio — tasapainoinen synkronointi", - "sync_silent": "Hiljainen — minimaalinen telemetria", - "sync_turbo": "Turbo — aggressiivinen synkronointi", - "field_tags": "Tunnisteet", - "field_tags_placeholder": "Pilkulla erotetut tunnisteet (esim. toimisto, kannettava)...", - "field_tags_existing": "Olemassa olevat tunnisteet", - "field_tag_add_placeholder": "Lisää uusi tunniste...", - "field_tag_add_btn": "Lisää", - "field_groups": "Laiteryhmät", - "field_folder": "Kansio", - "field_folder_none": "Ei kansiota", - "reject_ban_option": "Estä tämä laite", - "reject_ban_hint": "Laite estetään eikä se voi lähettää uusia rekisteröintipyyntöjä.", - "banner_open_mode": "Rekisteröinti on avoinna — uudet RustDesk-asiakkaat rekisteröityvät ilman operaattorin hyväksyntää.", - "banner_locked_mode": "Rekisteröinti on lukittu — vain tunnisteeseen sidotut laitteet voivat rekisteröityä.", - "enrollment_settings_link": "Rekisteröintiasetukset" + "export": { + "csv": "Vie CSV", + "pdf": "Vie PDF", + "sessions_csv": "Vie istunnot CSV" }, - "backup": { - "title": "Varmuuskopio", - "desc": "Lataa täydellinen varmuuskopio konsolikokoonpanosta, käyttäjistä, ryhmistä ja asetuksista. Go server-vertaisdata sisällytetään, kun BetterDesk-taustaosa on aktiivinen.", - "restore_title": "Palauta", - "restore_desc": "Lataa aiemmin ladattu varmuuskopiotiedosto konsolin kokoonpanon palauttamiseksi. Valitse alta palautettavat osiot.", - "stat_users": "Käyttäjät", - "stat_settings": "Asetukset", - "stat_folders": "Kansiot", - "stat_groups": "ryhmät", - "stat_strategies": "Strategiat", - "stat_backend": "Tausta", - "download": "Lataa varmuuskopio", - "creating": "Luodaan varmuuskopiota...", - "download_success": "Varmuuskopion lataus onnistui", - "upload": "Lataa varmuuskopio", - "restore_confirm": "Haluatko varmasti palauttaa tämän varmuuskopion? Valitut osat korvataan.", - "restore_success": "Varmuuskopion palautus onnistui. Jotkut muutokset saattavat edellyttää sivun uudelleenlataamista.", - "restored": "Palautettu", - "skipped": "Ohitettu", - "backup_date": "Varmuuskopiopäivä", - "opt_settings": "Konsolin asetukset", - "opt_branding": "Brändäys / teema", - "opt_folders": "Laitteen kansiot", - "opt_groups": "Käyttäjä- ja laiteryhmät", - "opt_addressbooks": "Osoitekirjat", - "opt_users": "Käyttäjätilit", - "opt_users_warning": "Tuhoava: korvaa KAIKKI käyttäjätilit varmuuskopiotiedoilla. Saatat olla kirjautunut ulos.", - "no_file": "Varmuuskopiotiedostoa ei ole valittu", - "invalid_json": "Virheellinen varmuuskopiotiedosto: ei kelpaa JSON", - "invalid_format": "Virheellinen varmuuskopiotiedosto: ei BetterDesk-varmuuskopio", - "stat_database": "Tietokantamoottori", - "stat_keys": "Palvelinavaimet mukana", - "stat_env": "Ympäristötiedosto", - "stat_uploads": "Bränditiedostot", - "restart_required": "Jotkin palautetut komponentit (avaimet / .env / Go-tietokanta) vaativat palvelun uudelleenkäynnistyksen.", - "security_warning": "Tämä varmuuskopio sisältää salaisuuksia. Säilytä se turvallisesti äläkä koskaan jaa sitä.", - "restore_warning": "Salaisuuksien tai Go-palvelintietokannan palauttaminen ylikirjoittaa palvelimen identiteetin ja vaatii palvelun uudelleenkäynnistyksen.", - "opt_database": "Tietokanta (kaikki taulut)", - "opt_database_hint": "Tuo kaikki konsolidata uudelleen. Ei uudelleenkäynnistystä tarvita.", - "opt_uploads": "Bränditiedostot", - "opt_uploads_hint": "Logot ja ladatut kuvat.", - "opt_secrets": "Palvelinavaimet ja salaisuudet", - "opt_secrets_warning": "Ylikirjoittaa Ed25519-palvelinidentiteetin, API-avaimen ja istuntosalaisuuden. Vaatii palvelun uudelleenkäynnistyksen.", - "opt_env": "Ympäristötiedosto (.env)", - "opt_env_warning": "Ylikirjoittaa SESSION_SECRET, API-avaimen, tietokannan DSN:n, portit ja TLS-asetukset. Vaatii palvelun uudelleenkäynnistyksen.", - "opt_godb": "Go-palvelintietokanta", - "opt_godb_warning": "Ylikirjoittaa Go-palvelimen SQLite-tietokannan (vain SQLite-tausta). Vaatii palvelun uudelleenkäynnistyksen." + "report": { + "title": "Työraportti", + "subtitle": "Kuvaile tämän etäistunnon aikana tehty työ.", + "category": "Kategoria", + "ticket_ref": "Tikettiviite", + "summary": "Tehty työ", + "skip": "Ohita toistaiseksi", + "submit": "Lähetä raportti", + "summary_required": "Yhteenveto vaaditaan", + "saved": "Työraportti tallennettu" }, - "cdap": { - "device_detail": "CDAP Laite", - "loading": "Ladataan...", - "loading_widgets": "Ladataan laitteen widgetejä...", - "load_error": "Laitteen tietojen lataaminen epäonnistui", - "connected": "Yhdistetty", - "disconnected": "Yhteys katkaistu", - "device_offline_msg": "Laite on tällä hetkellä offline-tilassa. Widgetien arvot voivat olla vanhentuneita.", - "no_widgets": "Ei widgetejä saatavilla", - "no_widgets_desc": "Tämä laite ei ole rekisteröinyt CDAP-luetteloa widget-määrittelyillä.", - "command_log": "Komentoloki", - "clear_log": "Tyhjennä loki", - "confirm_command": "Vahvista komento", - "select_option": "Valitse", - "cdap_status": "CDAP-tila", - "cdap_enabled": "CDAP käytössä", - "cdap_disabled": "CDAP ei käytössä", - "cdap_devices": "CDAP-laitteet", - "cdap_connections": "Aktiiviset yhteydet", - "send_command": "Lähetä komento", - "command_sent": "Komento lähetetty onnistuneesti", - "command_failed": "Komennon lähettäminen epäonnistui", - "devices_title": "CDAP -laitteet", - "devices_subtitle": "Yhdistetyt laitteet mukautetun laitteen sovellusprotokollan kautta", - "stat_connected": "Yhdistetty", - "stat_port": "Portti", - "search_devices": "Hae laitteita...", - "no_devices": "Ei kytkettyjä laitteita", - "no_devices_desc": "CDAP-laitteita ei ole tällä hetkellä yhdistetty. Laitteet näkyvät täällä, kun ne muodostavat yhteyden yhdyskäytävään.", - "gateway_disabled": "CDAP Gateway ei käytössä", - "gateway_disabled_desc": "Ota CDAP-yhdyskäytävä käyttöön asettamalla palvelimen asetuksissa CDAP_ENABLED=true.", - "gateway_active": "Aktiivinen", - "toggle_enable": "Ota CDAP käyttöön", - "toggle_disable": "Poista CDAP käytöstä", - "enabled_restart": "CDAP käytössä. Palvelimen uudelleenkäynnistys vaaditaan muutosten soveltamiseksi.", - "disabled_restart": "CDAP poistettu käytöstä. Palvelimen uudelleenkäynnistys vaaditaan muutosten soveltamiseksi.", - "widgets": "widgetit", - "type_all": "Kaikki", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-ohjelma", - "type_network": "Verkko", - "type_camera": "Kamera", - "type_custom": "Mukautettu", - "active_alerts": "Aktiiviset hälytykset", - "alert_fired": "Hälytys laukaistu", - "alert_cleared": "Hälytys tyhjennetty", - "no_alerts": "Ei aktiivisia hälytyksiä", - "connect_terminal": "Yhdistä pääte", - "table_search": "Hae...", - "just_now": "Juuri nyt", - "terminal_connecting": "Yhdistetään laitteeseen...", - "terminal_disconnected": "Yhteys katkaistu", - "terminal_error": "Pääteliitäntä epäonnistui", - "linked_devices": "Linkitetyt laitteet", - "link_device": "Linkitä laite", - "unlink_device": "Poista linkitys", - "no_linked_devices": "Ei linkitettyjä laitteita", - "unlink_confirm": "Haluatko varmasti poistaa tämän laitteen linkityksen?", - "link_prompt": "Anna vertaistunnus linkittääksesi tähän laitteeseen:", - "connect_desktop": "Yhdistä työpöytä", - "connect_video": "Yhdistä Stream", - "connect_files": "Selaa tiedostoja", - "connect_audio": "Liitä ääni", - "upload_file": "Lataa", - "desktop_connecting": "Yhdistetään...", - "video_connecting": "Yhdistetään...", - "files_connecting": "Yhdistetään...", - "audio_connecting": "Yhdistetään...", - "audio_streaming": "Suoratoisto", - "clipboard_in": "Leikepöytä vastaanotettu", - "clipboard_out": "Leikepöytä lähetetty", - "monitor_select": "Valitse Näyttö", - "keyframe_request": "Pyydä avainkehystä", - "quality_auto": "Auto Laatu" + "empty": { + "packages": "Ei paketteja vielä. Luo ensimmäinen yllä olevalla painikkeella.", + "contracts": "Ei organisaatiosopimuksia vielä. Määritä paketti organisaatiolle.", + "sessions": "Ei laskutettavia istuntoja vielä.", + "reports": "Ei työraportteja vielä." }, - "desktop": { - "switch_mode": "Työpöytätila", - "console_mode": "Konsolitila", - "loading": "Ladataan...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Sulje", - "widgets_mode": "Widgetit", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Lisää widget", - "remove_widget": "Poista widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Määritä", - "search_widgets": "Hae widgetejä...", - "cat_monitoring": "Monitoring", - "cat_devices": "Laitteet", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Kirjoita muistiinpanoja tähän...", - "search_placeholder": "Hae laitteita, sivuja, asetuksia...", - "search_pages": "Pages", - "search_devices": "Laitteet", - "search_no_results": "No results", - "exit_desktop": "Poistu työpöytätilasta", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Laitteen tila", - "widget_server_health": "Palvelimen tiedot", - "widget_system_stats": "Laitteen mittarit", - "widget_device_list": "Laiteluettelo", - "widget_quick_actions": "Nopeat toiminnot", - "widget_recent_activity": "Viimeaikainen toiminta", - "widget_notes": "Notes", - "widget_network_monitor": "Verkkomonitori", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP -laitteet", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Laitteen verkko", - "widget_multi_gauge": "Palvelimen mittarit", - "widget_weekly_chart": "Viikkotoiminta", - "widget_quick_controls": "Pikaohjaimet", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Yhteystilastot", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Käyttäjäistunnot", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Ei laitteita", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Avaa", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Aseta URL konfiguraatiossa", - "label_server_uptime": "Palvelimen käyttöaika", - "label_merged_info": "Yhdistetty Server Info -widgetiin", - "label_with_notes": "Muistiinpanojen kanssa", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Laitteita yhteensä", - "label_throughput": "Throughput", - "label_active_relays": "Aktiiviset releet", - "label_total_relayed": "Välitetty yhteensä", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Suodata laitteita...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Ei CDAP-laitteita", - "action_add_widget": "Lisää widget", - "label_merged_server_info": "Yhdistetty Server Info -widgetiin", - "wp_images": "Images", - "wp_colors": "Kiinteät värit", - "wp_custom_color": "Mukautettu väri", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Taustakuvia ei ole asennettu tälle palvelimelle.", - "wp_download_hint": "Aseta PNG-kuvat julkiseen/taustakuvat/hakemistoon mahdollistaaksesi taustakuvan valinnan.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Prosessin monitori", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Tietokannan tilastot", - "widget_docker_containers": "Docker Säiliöt", - "widget_shell_command": "Shell-komento", - "widget_device_map": "Laitekartta", - "widget_remote_connect": "Etäyhteys", - "label_no_online": "Ei online-laitteita", - "label_no_events": "Ei tapahtumia tänään", - "label_event_title": "Tapahtuman otsikko:", - "label_no_data": "Tietoja ei ole saatavilla", - "label_download_speed": "Latausnopeus", - "label_latency": "Latency", - "label_server": "Palvelin", - "label_run_test": "Run Test", - "label_testing": "Testataan...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Ei kontteja", - "label_docker_unavailable": "Docker ei saatavilla", - "label_no_command": "Mitään komentoa ei ole määritetty", - "label_no_output": "Ei vielä lähtöä", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Tallenna esiasetus", - "label_load_preset": "Load Preset", - "label_preset_name": "Esiasetettu nimi:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automaattinen järjestys", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 saraketta (yhtä)", - "label_2col_wide": "2 saraketta (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget-ryhmä", - "ungroup_widgets": "Pura widgetit", - "group_widgets": "Ryhmittele valitut widgetit", - "snap_layouts": "Kiinnitysasettelut", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Napsauta ylhäältä vasemmalle", - "snap_top_right": "Napsauta ylhäältä oikealle", - "snap_bottom_left": "Napsauta alhaalta vasemmalle", - "snap_bottom_right": "Napsauta alhaalta oikealle", - "aero_shake": "Ravista muiden minimoimiseksi", - "zone_resize": "Muuta vyöhykkeiden kokoa vetämällä reunusta", - "zone_borders": "Vedettävät vyöhykkeen reunat", - "app_drawer": "Applications", - "search_apps": "Hae sovelluksia...", - "edit_shortcuts": "Muokkaa pikakuvakkeita", - "widgets": "Widgetit", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Määritä olemassa oleva paketti", + "submit": "Määritä" }, - "desktop_login": { - "click_to_sign_in": "Napsauta mitä tahansa tai kirjaudu sisään painamalla näppäintä", - "username_placeholder": "Käyttäjätunnus", - "password_placeholder": "Salasana", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Kaksitekijäinen todennus", - "totp_subtitle": "Syötä 6-numeroinen koodi todennussovelluksesta", - "back_to_login": "Takaisin kirjautumiseen", - "fill_all_fields": "Täytä kaikki kentät", - "invalid_credentials": "Virheellinen käyttäjätunnus tai salasana", - "invalid_code": "Virheellinen vahvistuskoodi", - "enter_6_digits": "Syötä kaikki 6 numeroa", - "network_error": "Network error — check your connection", - "session_expired": "Istunto vanhentunut. Kirjaudu uudelleen sisään." - }, - "tokens": { - "title": "Laitteen tunnukset", - "subtitle": "Hallinnoi automaattisen laitteiden hallinnan rekisteröintitunnuksia", - "enrollment_mode": "Ilmoittautumistila", - "mode_open": "Avaa", - "mode_open_desc": "Mikä tahansa laite voi rekisteröityä ilman token-tunnusta", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Tokeneja yhteensä", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Hae tunnuksia...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Luo joukko", - "create": "Luo tunnus", - "edit": "Muokkaa Tokeni��", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Luotu", - "actions": "Actions", - "name_placeholder": "esim. Office PC erä", - "max_uses": "Max Uses", - "max_uses_hint": "0 = rajoittamaton", - "expires_in": "Expires In", - "no_expiration": "Ei vanhenemista", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Valinnainen huomautus tästä tunnuksesta...", - "count": "Count", - "count_range": "Luotavien tunnuksien määrä (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token luotu", - "tokens_generated": "Tokenit luotu", - "copy_warning": "Kopioi tunnus nyt. Sitä ei näytetä uudelleen.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Haluatko varmasti peruuttaa tämän tunnuksen? Tämä ei vaikuta siihen jo rekisteröityihin laitteisiin.", - "revoked_success": "Tunnus peruutettu onnistuneesti", - "no_tokens": "Tunnuksia ei löytynyt", - "expired": "Expired", - "never": "Never", - "save": "Tallenna", - "cancel": "Peruuta", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Seuraavaksi", - "prev": "Previous", - "skip": "Skip", - "finish": "Valmis", - "close": "Sulje", - "step_of": "{current} / {total}", - "console_sidebar_title": "Navigoinnin sivupalkki", - "console_sidebar_text": "Pääset kaikkiin moduuleihin täältä. Napsauta mitä tahansa kuvaketta navigoidaksesi kyseiseen osioon. Sivupalkki mukautuu näytön kokoon.", - "console_expand_title": "Laajenna sivupalkki", - "console_expand_text": "Napsauta tätä laajentaaksesi sivupalkkia ja nähdäksesi kaikkien navigointikohteiden täydelliset tunnisteet. Tiivistä napsauttamalla uudelleen.", - "console_search_title": "Pikahaku", - "console_search_text": "Hae laitteita, asetuksia tai toimintoja nopeasti. Paina Ctrl+K saadaksesi pikanäppäimen.", - "console_dashboard_title": "Kojelauta", - "console_dashboard_text": "Keskittimesi näyttää palvelimen tilan, online-laitteet ja nopeat toiminnot. Pidä silmällä tärkeitä mittareita yhdellä silmäyksellä.", - "console_devices_title": "Laitehallinta", - "console_devices_text": "Tarkastele, etsi ja hallinnoi kaikkia yhdistettyjä laitteita. Suodata tilan mukaan, määritä tunnisteita ja määritä yksittäisiä laiteasetuksia.", - "console_settings_title": "Asetukset", - "console_settings_text": "Määritä palvelimen toiminta, suojausasetukset, brändäys ja käyttäjien hallinta. Mukauta BetterDesk tarpeidesi mukaan.", - "console_desktop_title": "Työpöytätila", - "console_desktop_text": "Vaihda työpöytätilaan, jos haluat käyttää ikkunoitua työtilaa widgeteillä. Täydellinen monen tehtävän suorittamiseen ja kojetaulujen valvontaan.", - "console_complete_title": "Olet valmis!", - "console_complete_text": "Tutustu sivupalkin luokkiin löytääksesi kaikki ominaisuudet. Napsauta Ohje-kuvaketta milloin tahansa käynnistääksesi tämän oppaan uudelleen.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Yläpalkissa näkyy kello, pikasäätimet ja pääsy sovelluslaatikkoon. Napsauta ruudukkokuvaketta selataksesi kaikkia sovelluksia.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Avaa sovelluslaatikko etsiäksesi ja käynnistääksesi minkä tahansa konsolitoiminnon kelluvana ikkunana. Sovellukset on järjestetty luokittain.", - "desktop_widgets_title": "Widget-hallintapaneeli", - "desktop_widgets_text": "Muokattava työtilasi. Widgetit näyttävät reaaliaikaista tietoa ja tarjoavat nopean pääsyn ominaisuuksiin. Järjestä uudelleen vetämällä.", - "desktop_add_widget_title": "Lisää widgetejä", - "desktop_add_widget_text": "Napsauta tätä selataksesi saatavilla olevia widgetejä. Valitse valvontanäytöistä, laiteluetteloista, muistiinpanoista ja muista.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Avoimet sovellukset näkyvät täällä. Tarkenna tai pienennä ikkunoita napsauttamalla. Näet sovellusten tunnisteet viemällä hiiren osoitinta kuvakkeisiin.", - "desktop_snap_title": "Kiinnitysasettelut", - "desktop_snap_text": "Vedä ikkunoita näytön reunoille napsauttaaksesi ne paikoilleen, tai vie hiiren osoittimella suurenna-painiketta asettelun esiasetuksia varten. Kokeile Aero Shakea!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Sovellukset avautuvat vedettävissä ikkunoissa, joiden kokoa voi muuttaa. Pienennä, suurenna tai sulje otsikkopalkista. Windows-taso widgetien yläpuolella.", - "desktop_search_title": "Pikahaku", - "desktop_search_text": "Hae eri laitteista, sivuilta ja asetuksista. Avaa haku välittömästi painamalla Ctrl+K missä tahansa.", - "desktop_complete_title": "Työpöytätila valmis!", - "desktop_complete_text": "Kokeile avata sovelluksia laatikosta ja järjestää ikkunat vierekkäin. Käytä widgetien esiasetuksia nopeaan kojelautaasetteluun.", - "devices_folders_title": "Laitteen kansiot", - "devices_folders_text": "Järjestä laitteet kansioihin. Suodata luettelo napsauttamalla kansiota. Napsauta hiiren kakkospainikkeella nimetäksesi uudelleen tai poistaaksesi.", - "devices_search_title": "Haku ja suodatin", - "devices_search_text": "Hae tunnuksen, isäntänimen tai alustan perusteella. K��ytä tilapillereitä näyttääksesi vain online-tilassa, offline-tilassa tai kaikilla laitteilla.", - "devices_table_title": "Laiteluettelo", - "devices_table_text": "Napsauta mitä tahansa laiteriviä saadaksesi lisätietoja. Käytä oikealla olevaa kebab-valikkoa pikatoimintoihin, kuten yhdistämiseen, tunnisteiden muokkaamiseen tai poistamiseen.", - "devices_complete_title": "Laitehallinta valmiina!", - "devices_complete_text": "Järjestä ne vetämällä laitteita kansioiden välillä. Kaksoisnapsauta laitetta avataksesi sen tietopaneelin.", - "settings_tabs_title": "Asetukset Luokat", - "settings_tabs_text": "Siirry Yleiset-, Turvallisuus-, Ulkoasu- ja muiden määritysosien välillä.", - "settings_content_title": "Kokoonpano", - "settings_content_text": "Jokainen osio sisältää tietyt palvelin- ja konsoliasetukset. Muutokset tallennetaan, kun napsautat Tallenna.", - "settings_complete_title": "Asetusten yleiskatsaus", - "settings_complete_text": "Tarkista 2FA-, API-avaimien suojausasetukset ja käyttäjien hallinta. Vieraile Ulkoasussa muokataksesi konsolin ulkoasua.", - "help": "Ohjeet ja opetusohjelmat", - "tour_console": "Konsolikierros", - "tour_desktop": "Työpöytätilan esittely", - "tour_devices": "Laitteet Tour", - "tour_settings": "Asetukset Tour", - "reset_all": "Nollaa kaikki opetusohjelmat", - "tour_remote": "Etäistunnon kierros", - "tour_organization": "Organisaation asetukset", - "tour_cdap": "CDAP Yleiskatsaus", - "tour_chat": "Chatin perusteet", - "remote_toolbar_title": "Etätyökalupalkki", - "remote_toolbar_text": "Käytä näytön ohjaimia, leikepöydän synkronointia, erikoisnäppäimiä ja laatuasetuksia työkalupalkista. Vaihda koko näyttö päälle F11-näppäimellä.", - "remote_canvas_title": "Etänäyttö", - "remote_canvas_text": "Tämä on kaukosäätimen näyttö. Napsauta sisällä aloittaaksesi etälaitteen ohjauksen. Hiiren ja näppäimistön syöttö välitetään automaattisesti.", - "remote_clipboard_title": "Leikepöydän synkronointi", - "remote_clipboard_text": "Kopioi ja liitä tekstiä tietokoneen ja etälaitteen välillä. Käytä näppäinyhdistelmää Ctrl+C / Ctrl+V normaalisti, kun keskität etänäytön.", - "remote_complete_title": "Etäistunto valmis!", - "remote_complete_text": "Käytä työkalupalkin painikkeita erikoisnäppäimille (Ctrl+Alt+Del, PrintScreen) ja näytön vaihtamiseen. Lopeta istunto painamalla Esc-näppäintä tai napsauttamalla Katkaise yhteys.", - "org_overview_title": "Organisaatiot", - "org_overview_text": "Organisaatioiden avulla voit ryhmitellä käyttäjiä, laitteita ja käytäntöjä. Jokaisella organisaatiolla on oma järjestelmänvalvojansa, operaattorinsa ja asetuksesi.", - "org_create_title": "Luo organisaatio", - "org_create_text": "Napsauta tätä luodaksesi uuden organisaation. Anna nimi, etana ja valinnainen kuvaus. Sinusta tulee uuden organisaation omistaja.", - "org_members_title": "Hallitse jäseniä", - "org_members_text": "Kutsu käyttäjiä sähköpostitse, määritä rooleja (järjestelmänvalvoja, operaattori, käyttäjä) ja hallitse käyttöoikeuksia. Jäsenet voivat nähdä organisaatiolleen määritetyt laitteet.", - "org_devices_title": "Määritä laitteet", - "org_devices_text": "Lisää laitteita organisaatioon. Tässä määritetyt laitteet perivät organisaation käytännöt ja näkyvät sen jäsenille.", - "org_policies_title": "Organisaatiokäytännöt", - "org_policies_text": "Aseta organisaatiolle suojauskäytännöt, kuten salasanavaatimukset, istunnon aikakatkaisut, 2FA-valvonta ja laitteiden rekisteröintisäännöt.", - "org_complete_title": "Organisaation asetukset valmis!", - "org_complete_text": "Kutsu tiimisi ja määritä laitteet aloittamaan organisaation kattavan hallinnan käyttö. Käytännöt koskevat automaattisesti kaikkia jäseniä.", - "cdap_devices_title": "CDAP-laitteet", - "cdap_devices_text": "Näytä kaikki yhdistetyt CDAP-laitteet — IoT-anturit, logiikkaohjaimet, sillat ja mukautetut ohjelmat. Vihreät indikaattorit näyttävät live-yhteydet.", - "cdap_widgets_title": "Vimpainkojelauta", - "cdap_widgets_text": "Vimpaimet näyttävät reaaliaikaisia tietoja laitteista. Mittarit, kytkimet, LEDit, kaaviot — jokainen vimpaintyyppi visualisoi erilaisen datan.", - "cdap_commands_title": "Lähetä komentoja", - "cdap_commands_text": "Tee yhteistyötä laitteiden kanssa lähettämällä komentoja. Komentoloki tallentaa historian.", - "cdap_terminal_title": "Laitteterminaali", - "cdap_terminal_text": "Avaa terminaali-istunto CDAP-ohjelmille edistynyttä diagnostiikkaa tai manuaalista konfiguraatiota varten.", - "cdap_complete_title": "CDAP-yleiskatsaus valmis!", - "cdap_complete_text": "Tutustu laitevimpaimiin, lähetä komentoja ja käytä terminaalia tai tiedostoselailuohjelmaa syvempään hallintaan.", - "chat_contacts_title": "Yhteystiedot & Ryhmät", - "chat_contacts_text": "Katso yhteystietosi ja chat-ryhmäsi. Napsauta mitä tahansa kontaktia avataksesi keskustelun. Vihreät pisteet osoittavat online-käyttäjiä.", - "chat_send_title": "Lähetä viestejä", - "chat_send_text": "Kirjoita viestisi ja lähetä painamalla Enter. Viestit ovat päästä päähän -salattuja, kun molemmat osapuolet tukevat E2E:tä.", - "chat_file_title": "Jaa tiedostoja", - "chat_file_text": "Jaa tiedostoja napsauttamalla liitekuvaketta. Tiedostot ovat salattuja ja niiden koko voi olla enintään 50 megatavua.", - "chat_complete_title": "Chat valmis!", - "chat_complete_text": "Keskustele operaattoreiden ja loppukäyttäjien kanssa reaaliajassa. Luo ryhmiä tiimiviestintää varten. Kaikki viestit tukevat lukukuittauksia.", - "disable_tutorials": "Poista opetusohjelmat käytöstä", - "enable_tutorials": "Ota opetusohjelmat käyttöön" - }, - "help_request": { - "title": "Apupyynnöt", - "subtitle": "Hallinnoi saapuvia ohjepyyntöjä pöytätietokoneiden asiakkailta", - "new_request": "Uusi apupyyntö", - "device": "Laite", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Ei avunpyyntöjä", - "notification": "Apupyyntö vastaanotettu osoitteesta", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisaatiot", - "create": "Luo organisaatio", - "edit": "Muokkaa organisaatiota", - "detail": "Organisaation tiedot", - "name": "Name", - "slug": "Slug (URL-turvallinen)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Laitteet", - "invitations": "Invitations", - "settings": "Asetukset", - "add_user": "Add User", - "assign_device": "Määritä laite", - "create_invitation": "Luo kutsu", - "delete_confirm": "Poistetaanko tämä organisaatio? Tämä poistaa kaikki liittyvät käyttäjät, laitteet ja asetukset.", - "no_orgs": "Ei vielä organisaatioita", - "no_orgs_hint": "Luo ensimmäinen organisaatiosi ja aloita laitteiden ja käyttäjien hallinta.", - "connection_policy": "Yhteyskäytäntö", - "allow_file_transfer": "Salli tiedostonsiirto", - "allow_clipboard": "Salli leikepöytä", - "max_session_duration": "Istunnon enimmäiskesto (min)", - "role_owner": "Owner", - "role_admin": "Järjestelmänvalvoja", - "role_operator": "Operator", - "role_user": "Jäsen", - "username": "Käyttäjätunnus", - "password": "Salasana", - "display_name": "Näyttönimi", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Laitteen tunnus", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Määrätty käyttäjä", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Ei käyttäjiä tässä organisaatiossa.", - "no_devices": "Tälle organisaatiolle ei ole määritetty laitteita.", - "no_invitations": "Ei kutsuja.", - "user_added": "User added", - "user_removed": "Käyttäjä poistettu", - "user_updated": "Käyttäjärooli päivitetty", - "device_assigned": "Laite määritetty", - "device_unassigned": "Laite on poistettu", - "invitation_created": "Kutsu luotu", - "settings_saved": "Asetukset tallennettu", - "org_deleted": "Organisaatio poistettu", - "confirm_remove_user": "Poistetaanko tämä käyttäjä organisaatiosta?", - "confirm_unassign_device": "Poistetaanko tämän laitteen määritys organisaatiosta?", - "confirm_delete_org": "Poistetaanko tämä organisaatio ja kaikki siihen liittyvät tiedot?", - "edit_role": "Muokkaa roolia", - "raw_settings": "Raaka-asetukset", - "key": "Key", - "value": "Value", - "save": "Tallenna asetukset", - "policy_unattended": "Valvomaton (välitön)", - "policy_attended": "Osallistunut (vahvistuksella)", - "policy_ask": "Always ask", - "expires_hours": "Vanheneminen (tuntia)", - "loading_failed": "Organisaation tietojen lataaminen epäonnistui", - "name_slug_required": "Nimi ja etana vaaditaan", - "org_created": "Organisaatio luotu", - "org_updated": "Organisaatio päivitetty", - "create_new_user": "Luo uusi", - "add_existing_user": "Lisää olemassa oleva", - "none_available": "none", - "select_user": "Valitse käyttäjä", - "org_role": "Organisaation rooli", - "link_user_hint": "Valittu käyttäjä linkitetään tähän organisaatioon hänen palvelintilinsä tunnistetiedoilla.", - "no_available_users": "Kaikki palvelimen käyttäjät on jo linkitetty tähän organisaatioon.", - "user_linked": "Käyttäjä linkitetty organisaatioon" - }, - "chat": { - "e2e_enabled": "Päästä päähän salattu", - "e2e_establishing": "Luodaan suojattua kanavaa...", - "e2e_established": "Suojattu kanava perustettu", - "e2e_unsupported": "E2E-salausta ei tueta tässä selaimessa", - "typing_indicator": "kirjoittaa...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Tiedosto", - "file_too_large": "Tiedosto liian suuri (enintään 50 Mt)", - "file_encrypted": "Salattu tiedostonsiirto", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Suojausavaimia kierretty", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "ryhmät", - "no_contacts": "Ei vielä yhteystietoja", - "no_groups": "Ei vielä ryhmiä", - "no_messages": "Ei viestejä vielä", - "no_results": "Tuloksia ei löytynyt", - "select_conversation": "Aloita chattailu valitsemalla keskustelu", - "type_message": "Kirjoita viesti...", - "send": "Lähetä", - "attach_file": "Liitä tiedosto", - "emoji": "Emoji", - "search_messages": "Hae viestejä", - "create_group": "Luo ryhmä", - "group_name": "Ryhmän nimi", - "group_members": "jäsenet", - "cancel": "Peruuta", - "create": "Luo", - "members": "jäseniä", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Hae yhteystietoja ja viestejä", - "select_conversation_hint": "Valitse keskustelu nähdäksesi viestit", - "info": "Info", - "group_name_placeholder": "Anna ryhmän nimi" - }, - "toast": { - "device_connected": "Laite yhdistetty", - "device_disconnected": "Laitteen yhteys katkaistu", - "session_started": "Etäistunto aloitettu", - "session_ended": "Etäistunto päättyi", - "file_upload_complete": "Tiedoston lataus valmis", - "settings_saved": "Asetukset tallennettu", - "error_generic": "Tapahtui virhe", - "connection_lost": "Yhteys katkesi", - "reconnecting": "Yhdistetään uudelleen..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Järjestelmänvalvojan apuohjelmat ja diagnostiikkatyökalut", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Lähetä", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Kirjoita tekstiä...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Siirry palvelimeen", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Tarkista isännän tavoitettavuus ja latenssi", - "tcp_title": "TCP Portin tarkistus", - "tcp_desc": "Testaa TCP-portin liitäntä", - "ssl_title": "SSL-tarkastaja", - "ssl_desc": "Tarkista SSL/TLS-varmenteen tiedot", - "http_title": "HTTP Terveystarkastus", - "http_desc": "Tarkista HTTP-päätepisteen tila", - "dns_title": "DNS Lookup", - "dns_desc": "Ratkaise isäntänimi IP-osoitteeksi", - "whois_title": "DNS Records", - "whois_desc": "Kysely A-, AAAA-, MX-, TXT-, NS-tietueita", - "speed_title": "Speed Test", - "speed_desc": "Mittaa latauskaistanleveyttä", - "run_speed_test": "Suorita nopeustesti", - "wol_title": "Wake-on-LAN", - "wol_desc": "Lähetä taikapaketti laitteen herättämiseksi", - "wol_sent": "Taikapaketti lähetetty", - "hash_title": "Hash-generaattori", - "hash_desc": "Luo salaustiivisteitä", - "password_title": "Salasanageneraattori", - "password_desc": "Luo turvallinen satunnainen salasana", - "jwt_title": "JWT Decoder", - "jwt_desc": "Dekoodaa ja tarkasta JSON-verkkotunnukset", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Koodaa tai purkaa Base64-tiedot", - "url_title": "URL Encoder", - "url_desc": "Koodaa tai purkaa URL-komponentit", - "processes_title": "Prosessiluettelo", - "processes_desc": "Tarkastele käynnissä olevia järjestelmäprosesseja", - "disk_title": "Disk Usage", - "disk_desc": "Näytä levyosion käyttö", - "db_title": "Tietokannan tilastot", - "db_desc": "Näytä tietokantataulukon tilastot", - "docker_title": "Docker Säiliöt", - "docker_desc": "Näytä käynnissä olevat Docker-säilöt", - "logs_title": "Log Viewer", - "logs_desc": "Näytä viimeisimmät lokitulosteet", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Voimassa alkaen", - "valid_to": "Voimassa", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Tietoja ei ole saatavilla", - "no_docker": "Docker-säiliöitä ei löytynyt tai Docker ei ole saatavilla", - "no_logs": "Ei lokirivejä saatavilla" - }, - "policies": { - "title": "Organisaatiokäytännöt", - "subtitle": "Hallinnoi organisaatioidesi suojaus-, yhteys- ja ominaisuuskäytäntöjä", - "select_org": "Organisaatio", - "select_org_placeholder": "Valitse organisaatio...", - "select_org_first": "Valitse organisaatio nähdäksesi käytännön tarkastuslokin.", - "configured": "Määritetty", - "connection_title": "Yhteyskäytäntö", - "connection_desc": "Hallitse kuinka etäistunnot muodostetaan", - "connection_mode": "Yhteystila", - "mode_attended": "Osallistunut (vaatii käyttäjän hyväksynnän)", - "mode_unattended": "Vartioimaton (salli aina)", - "mode_ask": "Kysy aina", - "max_session": "Istunnon enimmäiskesto (minuuttia)", - "idle_lock": "Tyhjäkäyntilukon aikakatkaisu (minuuttia)", - "wallpaper_policy": "Taustakuva istunnon aikana", - "wallpaper_show": "Näytä", - "wallpaper_hide_session": "Piilota istunnon aikana", - "wallpaper_hide_always": "Piilota aina", - "features_title": "Ominaisuuskäytäntö", - "features_desc": "Ota käyttöön tai poista käytöstä tiettyjä ominaisuuksia laitteille", - "allow_file_transfer": "Salli tiedostonsiirto", - "allow_clipboard": "Salli leikepöydän synkronointi", - "allow_audio": "Salli äänen suoratoisto", - "allow_recording": "Salli istunnon tallennus", - "security_title": "Turvallisuuspolitiikka", - "security_desc": "Täytä organisaation laitteiden suojausvaatimukset", - "require_2fa": "Vaatii 2FA:n valvomattomaan käyttöön", - "password_min_length": "Salasanan vähimmäispituus", - "password_require_special": "Vaadi erikoismerkkejä", - "password_max_age": "Salasanan enimmäisikä (päivää, 0 = ei koskaan)", - "allowed_operators": "Sallitut operaattoriroolit (pilkuilla erotettu)", - "network_title": "Verkkokäytäntö", - "network_desc": "Ohjaa välityspalvelimia ja suoria yhteyksiä", - "block_direct_p2p": "Estä suora P2P (force relay)", - "allowed_relays": "Sallitut välityspalvelimet (yksi per rivi)", - "ip_allowlist": "IP-salliluettelo (CIDR, yksi riviä kohden)", - "update_title": "Päivitä käytäntö", - "update_desc": "Hallitse automaattisia päivityksiä ja päivitä kanavia", - "auto_update": "Ota automaattinen päivitys käyttöön", - "update_channel": "Päivitä kanava", - "audit_title": "Käytännön muutokset", - "audit_desc": "Viimeaikainen käytäntömuutoshistoria", - "no_audit": "Sääntömuutoksia ei ole tallennettu.", - "save_success": "Käytännön tallennus onnistui", - "save_failed": "Käytännön tallentaminen epäonnistui", - "load_failed": "Käytäntöjen lataaminen epäonnistui", - "block_direct_p2p_hint": "Koskee tämän organisaation laitteita." - }, - "attestation": { - "title": "Laitteen todistus", - "subtitle": "Tarkkaile laitteen henkilöllisyyden vahvistusta ja laitteiston sormenjälkiä", - "verified": "Verified", - "pending": "Pending", - "failed": "Epäonnistui", - "device_list": "Laitteen todistustiedot", - "device_list_desc": "Laitteiston sormenjäljet ja henkilöllisyyden vahvistuksen tila", - "col_device": "Laitteen tunnus", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Todistustietoja ei löytynyt.", - "verify_success": "Laite merkitty vahvistetuksi", - "verify_failed": "Laitteen vahvistaminen epäonnistui", - "revoke_success": "Laitteen todistus peruttu", - "revoke_failed": "Todistuksen peruuttaminen epäonnistui" - }, - "fleet": { - "title": "Laivaston hallinta", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Työnkulun rakentaja", - "tab_compliance": "Compliance", - "res_title": "Resurssien kartoitus", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Verkkoasema", - "res_type_dns": "DNS-palvelin", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Lisää resurssi", - "res_name": "Resurssin nimi", - "res_type": "Type", - "res_address": "Osoite / Polku", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organisaatio", - "res_scope_group": "ryhmä", - "res_scope_device": "Laite", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Resursseja ei löytynyt. Luo resurssi napsauttamalla Lisää resurssi.", - "res_confirm_delete": "Haluatko varmasti poistaa tämän resurssin?", - "task_title": "Tehtävien ajoitus", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Epäonnistui", - "task_search": "Search tasks…", - "task_create": "Luo tehtävä", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Päivitä", - "task_type_restart": "Käynnistä uudelleen", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Laitetunnukset tai ryhmien nimet pilkuilla erotettuina", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Aikataulun arvo", - "task_script": "Käsikirjoitus / komento", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Tehtäviä ei löytynyt. Aloita napsauttamalla Luo tehtävä.", - "task_confirm_delete": "Haluatko varmasti poistaa tämän tehtävän?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Työnkulun rakentaja", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Tallenna", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Valitse solmu muokataksesi sen ominaisuuksia.", - "builder_node_trigger_manual": "Manuaalinen laukaisu", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Tapahtuman laukaisin", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Käynnistä Svc uudelleen", - "builder_node_action_file_deploy": "Ota käyttöön tiedosto", - "builder_node_action_message": "Lähetä Viesti", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Lähetä hälytys", - "builder_node_result_chain": "Ketjun työnkulku", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Työnkulun nimi:", - "comp_title": "Ohjelmiston yhteensopivuus", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Laite", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Suoritetaanko automaattinen korjaus tällä laitteella?", - "comp_no_data": "Vaatimustenmukaisuustietoja ei ole saatavilla. Aloita suorittamalla skannaus.", - "save": "Tallenna", - "cancel": "Peruuta", - "close": "Sulje", - "edit": "Muokkaa", - "delete": "Poista", - "actions": "Actions", - "all_orgs": "Kaikki organisaatiot", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Verkkoasema", - "type_dns": "DNS-palvelin", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Lisää resurssi", - "edit_resource": "Muokkaa resurssia", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Osoite / Polku", - "scope_org": "Organisaatio", - "scope_group": "ryhmä", - "scope_device": "Laite", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Haluatko varmasti poistaa tämän kohteen?", - "all_statuses": "Kaikki tilat", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Epäonnistui", - "search_tasks": "Search tasks�", - "create_task": "Luo tehtävä", - "edit_task": "Muokkaa tehtävää", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Tiedoston käyttöönotto", - "task_type_registry": "Registry", - "target_devices": "Kohdelaitteet", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Käsikirjoitus / komento", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Ladataan", - "no_output": "Tulostetta ei ole saatavilla", - "error_loading": "Virhe ladattaessa tietoja", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuaalinen laukaisu", - "node_schedule": "Schedule", - "node_event": "Tapahtuman laukaisin", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Käynnistä Svc uudelleen", - "node_file_deploy": "Ota käyttöön tiedosto", - "node_send_message": "Lähetä Viesti", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Lähetä hälytys", - "node_chain": "Ketjun työnkulku", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Kaikki organisaatiot", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Laite", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Suoritetaanko automaattinen korjaus tällä laitteella?" - }, - "scaling": { - "title": "Skaalaus ja releen hallinta", - "tab_overview": "Yleiskatsaus", - "tab_relays": "Relay Nodes", - "tab_rules": "Toimeksiannon säännöt", - "tab_capacity": "Kapasiteetin suunnittelu", - "arch_title": "Verkkoarkkitehtuuri", - "arch_loading": "Ladataan arkkitehtuurikaaviota...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Laitteita yhteensä", - "stat_active_sessions": "Aktiiviset istunnot", - "stat_bandwidth": "Kaistanleveys yhteensä", - "relay_health": "Välityspalvelimen tila", - "no_relays": "Relesolmuja ei ole määritetty. Lisää ensimmäinen välityssolmu kuorman jakamiseksi.", - "relay_search": "Etsi releitä...", - "relay_add": "Lisää välityssolmu", - "relay_edit": "Muokkaa välityssolmua", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Laitteet", - "col_sessions": "Istunnot", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Tavoiteviesti", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Käytössä", - "status_disabled": "Ei käytössä", - "confirm_delete_relay": "Haluatko varmasti poistaa tämän välityssolmun?", - "confirm_delete_rule": "Haluatko varmasti poistaa tämän tehtävän säännön?", - "rules_hint": "Osoitussäännöt määrittävät, mikä välityspalvelin käsittelee tiettyjä laiteryhmiä. Säännöt arvioidaan prioriteetin mukaan (pienin ensin).", - "rule_add": "Add Rule", - "rule_edit": "Muokkaa sääntöä", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Laiteryhmä", - "match_tag": "Laitteen tunniste", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Pääpalvelin", - "fallback_nearest": "Lähin rele", - "relay_max_sessions": "Max istuntoja", - "relay_max_bandwidth": "Suurin kaistanleveys (Mbps)", - "cap_tiers": "Kapasiteettitasot", - "cap_loading": "Ladataan kapasiteettitietoja...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Suosituksia ei ole saatavilla.", - "cap_planning": "Infrastruktuurin suunnittelu", - "cap_config": "Kokoonpano", - "cap_max_devices": "Max laitteet", - "cap_max_sessions": "Max istuntoja", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Laitteen kapasiteetti", - "cap_tier_sessions": "Istuntokapasiteetti", - "cap_tier_bandwidth": "Kaistanleveyskapasiteetti", - "cap_single_sqlite": "Yksi palvelin (SQLite)", - "cap_single_pg": "Yksi palvelin (PostgreSQL)", - "cap_master_3": "Master + 3 relettä", - "cap_master_10": "Master + 10 relettä", - "rec_no_relays": "Relesolmuja ei ole määritetty. Harkitse välityssolmujen lisäämistä suorituskyvyn ja redundanssin parantamiseksi.", - "rec_devices_high": "Laitteiden käyttöaste on korkea. Harkitse välityssolmujen lisäämistä kuorman jakamiseksi.", - "rec_sessions_high": "Istuntokapasiteetti lähestyy rajaansa. Harkitse välitysinfrastruktuurin päivittämistä.", - "rec_cpu_high": "Jotkut relesolmut ilmoittavat korkean suorittimen käytön. Harkitse kuormituksen tasapainottamista tai kapasiteetin lisäyksiä.", - "rec_all_good": "Kaikki järjestelmät toimivat normaaleilla parametreilla. Toimia ei vaadita.", - "save": "Tallenna", - "cancel": "Peruuta", - "edit": "Muokkaa", - "delete": "Poista", - "close": "Sulje", - "no_rules": "Ei luovutussääntöjä.", - "relays_info_banner": "Tämä luettelo on informatiivinen. Asiakkaiden tosiasiallisesti käyttämät välityspalvelimet määritetään RELAY_SERVERS-ympäristömuuttujan kautta BetterDesk-palvelimessa.", - "relay_name_address_required": "Nimi ja osoite vaaditaan.", - "relay_save_failed": "Välityssolmun tallennus epäonnistui.", - "relay_delete_failed": "Välityssolmun poistaminen epäonnistui.", - "relay_saved": "Välityssolmu tallennettu.", - "relay_deleted": "Välityssolmu poistettu.", - "rule_name_value_required": "Säännön nimi ja vastaavuusarvo ovat pakollisia.", - "rule_save_failed": "Säännön tallentaminen epäonnistui.", - "rule_delete_failed": "Säännön poistaminen epäonnistui.", - "rule_saved": "Sääntö tallennettu.", - "rule_deleted": "Sääntö poistettu." - }, - "cross_platform": { - "title": "Eri alustojen yhteensopivuus", - "tab_matrix": "Yhteensopivuusmatriisi", - "tab_distribution": "Jakelu", - "tab_protocols": "Protokollat", - "tab_limitations": "Rajoitukset", - "matrix_hint": "Ominaisuustukimatriisi kaikilla tuetuilla alustoilla. Vihreä = täysi tuki, keltainen = osittainen, harmaa = ei saatavilla, sininen = suunniteltu.", - "col_feature": "Ominaisuus", - "legend_full": "Täysi tuki", - "legend_partial": "Osittainen tuki", - "legend_none": "Ei saatavilla", - "legend_planned": "Suunniteltu", - "platform_breakdown": "Alustan erittely", - "arch_breakdown": "Arkkitehtuurin erittely", - "version_breakdown": "Version erittely", - "summary": "Yhteenveto", - "total_devices": "Laitteita yhteensä", - "unique_platforms": "Alustat", - "unique_archs": "Arkkitehtuurit", - "unique_versions": "Asiakasversiot", - "no_devices": "Ei vielä rekisteröityjä laitteita.", - "protocols_hint": "Protokollavalmiuksien neuvottelu varmistaa, että jokainen asiakas saa vain ne ominaisuudet, joita se tukee. Palvelin mukauttaa käyttäytymistä raportoitujen ominaisuuksien perusteella.", - "capability_negotiation": "Kykyneuvottelut", - "codec_support": "Codec-tuki (online-laitteet)", - "feature_support": "Ominaisuustuki (online-laitteet)", - "no_codec_data": "Online-laitteilta ei ole saatavilla koodekkitietoja.", - "no_feature_data": "Verkkolaitteista ei ole saatavilla ominaisuustietoja.", - "protobuf_schema": "Protobuf-kaavio", - "diagram_client": "Asiakas", - "diagram_server": "BetterDesk-palvelin", - "diagram_peer": "Vertaislaite", - "limitations_hint": "Jokaisella alustalla on erityisiä rajoituksia, jotka vaikuttavat käytettävissä oleviin ominaisuuksiin. Tarkista nämä rajoitukset, kun suunnittelet käyttöönottoja.", - "feat_desktop_client": "Työpöytäasiakas", - "feat_background_agent": "Taustaagentti", - "feat_remote_target": "Kaukokohde", - "feat_screen_capture": "Näytön kaappaus", - "feat_input_injection": "Syötteen välitys", - "feat_file_transfer": "Tiedoston siirto", - "feat_clipboard_sync": "Leikepöydän synkronointi", - "feat_audio_streaming": "Äänen suoratoisto", - "feat_chat": "Chat", - "feat_h264": "H.264-koodekki", - "feat_vp9": "VP9-koodekki", - "feat_av1": "AV1-koodekki", - "feat_cdap_agent": "CDAP-ohjelma", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Verkkoselain", - "platform_chromeos": "ChromeOS", - "status_production": "Tuotanto", - "status_testing": "Testaus", - "status_planned": "Suunniteltu", - "status_limited": "Rajoitettu", - "status_experimental": "Kokeellinen", - "limit_win_uac": "UAC-korkeus vaaditaan palvelun asennusta ja syötteiden lisäämistä varten suojatuille pöytäkoneille.", - "limit_win_service": "Toimii NSSM-palveluna; vaatii järjestelmänvalvojan oikeudet asennukseen.", - "limit_win_firewall": "Windows Palomuurisääntöjen on sallittava portit 21115-21119 releyhteyksiä varten.", - "limit_linux_wayland": "Wayland-säveltäjät rajoittavat ohjelmallista kuvakaappausta; PipeWire-portaali API vaaditaan.", - "limit_linux_pipewire": "Äänen sieppaus vaatii PipeWiren; PulseAudio-varavaihtoehto saatavilla, mutta rajoitetusti.", - "limit_linux_arm": "ARM64-koontiversiot saatavilla; jotkin koodekit voivat käyttää ohjelmistodekoodausta (hitaampaa).", - "limit_mac_screen": "Näytön tallennuslupa vaaditaan kohdassa Järjestelmäasetukset > Tietosuoja ja suojaus.", - "limit_mac_signing": "Agentin on oltava allekirjoitettu Apple Developer ID:llä jakelua varten.", - "limit_mac_notarize": "macOS Gatekeeper (muu kuin App Store -jakelu) edellyttää notaarin vahvistamista.", - "limit_android_projection": "MediaProjection API vaatii käyttäjän suostumuksen jokaiseen kuvakaappausistuntoon.", - "limit_android_accessibility": "Syöttösyöttö vaatii AccessibilityServicen; rajoitettu Android 14+.", - "limit_android_battery": "Taustapalvelua rajoittaa Doze-tila; saattaa vaatia poikkeuksen akun optimoinnista.", - "limit_ios_capture": "Apple kieltää taustakuvankaappauksen; vain katsoja -tila tuettu.", - "limit_ios_input": "Ei sisäänsyöttöä sallittua; vain etäkatselu ja chat.", - "limit_ios_appstore": "Jakelu vain App Storen kautta; TestFlight beta-testausta varten.", - "limit_web_https": "WebCodecs API ja WebRTC vaativat HTTPS; HTTP palautuu JMuxeriin (rajoitetut koodekit).", - "limit_web_codec": "Codec-tuki riippuu selaimesta; H.264 laajasti tuettu, VP9/AV1 vaihtelee.", - "limit_web_performance": "Suorituskykyä rajoittaa selaimen hiekkalaatikko; ei suoraa laitteistokiihdytystä.", - "limit_chrome_crostini": "Täysi agenttituki vain Crostini Linux -säiliön sisällä.", - "limit_chrome_pwa": "PWA-tila tarjoaa vain web-ominaisuuksia; ei alkuperäisen agentin ominaisuuksia.", - "limit_chrome_input": "Syöttöinjektiota ei tueta Crostini-säiliön ulkopuolella.", - "feat_session_recording": "Istunnon tallennus", - "feat_multi_monitor": "Useita näyttöjä", - "feat_unattended_access": "Valvomaton käyttö", - "limit_win_virtual_account": "Palvelue laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Palvelue laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Turvallisuustarkastus", - "tab_overview": "Yleiskatsaus", - "tab_events": "Tarkastustapahtumat", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Turvallisuuspisteet", - "failed_logins": "Epäonnistuneet kirjautumiset (24h)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Vanhat avaimet (>90 p)", - "security_checks": "Turvatarkastukset", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Turvallinen", - "enabled": "Käytössä", - "disabled": "Ei käytössä", - "all_events": "All Events", - "event_login_failed": "Kirjautuminen epäonnistui", - "event_login_success": "Kirjautuminen onnistui", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfiguraatio muutettu", - "event_key_created": "Avain luotu", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Tarkastustapahtumia ei löytynyt.", - "hardening_hint": "Turvallisuuden parantamisen prioriteetit BetterDesk-käyttöönotossasi. Tuotteet on järjestetty vakavuuden mukaan.", - "no_hardening": "Kovettavia tuotteita ei ole saatavilla.", - "vuln_hint": "Riippuvuushaavoittuvuuden tarkistuksen tulokset. Suorita npm-tarkastus säännöllisesti pitääksesi riippuvuudet turvassa.", - "no_vulns": "Haavoittuvuuksia ei löytynyt. Riippuvuutesi ovat turvassa." - }, - "languages": { - "title": "Kielenhallinta", - "total_languages": "Kielet yhteensä", - "fully_translated": "Täysin käännetty", - "needs_review": "Vaatii tarkastelun", - "reference_keys": "Viiteavaimet", - "no_languages": "Kielitiedostoja ei löytynyt.", - "badge_reference": "Reference", - "badge_review": "Vaatii tarkastelun", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Näkymä puuttuu", - "fix_missing": "Fix Missing", - "missing_keys_for": "Avaimet puuttuvat", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "ja {n} lisää...", - "all_keys_present": "Kaikki avaimet löytyy!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Kielen {code} puuttuvat avaimet on käännettävä manuaalisesti.", - "no_fix_needed": "Ei puuttuvia avaimia korjattavaksi." - }, - "resource_control": { - "title": "Resurssien hallinta", - "tab_overview": "Yleiskatsaus", - "tab_usb": "USB Control", - "tab_optical": "Optiset asemat", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Resurssikiintiöt", - "compliance_by_category": "Vaatimustenmukaisuus kategorioittain", - "device_compliance": "Laitteen yhteensopivuus", - "search_devices": "Hae laitteita...", - "col_device": "Laite", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Laitteita yhteensä", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Vaatimustenmukaisuusaste", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Määritä", - "no_devices": "Laitteita ei löytynyt", - "usb_title": "USB Portin ohjaus", - "usb_hint": "Hallitse valitun laitteen USB-tallennuslaitteen käyttöä tai organisaation laajuista oletuskäytäntöä.", - "usb_storage_policy": "USB tallennuskäytäntö", - "usb_whitelist": "Sallittujen luetteloon lisätyt laitteet (yksi per rivi)", - "usb_whitelist_hint": "VID:PID (esim. 0781:5583)", - "usb_audit_log": "Kirjaa USB-laiteyhteydet", - "optical_title": "Optinen aseman ohjaus", - "optical_hint": "Hallitse valitun laitteen CD-/DVD-/Blu-ray-aseman käyttöä.", - "optical_policy": "Optisen aseman käytäntö", - "optical_audit_log": "Kirjaa optisen aseman käyttöoikeus", - "monitors_title": "Monitorin hallinta", - "monitors_hint": "Määritä näytön asetukset, mukaan lukien enimmäismäärä, resoluution valvonta, kirkkaus ja tehoaikataulut.", - "monitors_max_count": "Monitorien enimmäismäärä (0 = rajoittamaton)", - "monitors_max_hint": "0 tarkoittaa, että ei ole rajaa", - "monitors_resolution": "Max resoluutio", - "monitors_brightness": "Kirkkausraja", - "monitors_power_schedule": "Tehoaikataulu", - "monitors_power_hint": "esim. pois:22.00-06.00", - "disks_title": "Levyn käytön valvonta", - "disks_hint": "Määritä levyn käyttökäytännöt, mukaan lukien vain luku -tila, salauksen valvonta ja osion näkyvyys.", - "disks_readonly": "Pakota vain luku -tila", - "disks_encryption": "Vaadi salaus (BitLocker/LUKS)", - "disks_smart": "Ota S.M.A.R.T. seurantaa", - "disks_hidden": "Piilotetut osiot", - "disks_hidden_hint": "Pilkuilla erotetut asemakirjaimet tai liitoskohdat", - "quotas_title": "Resurssikiintiöt", - "quotas_hint": "Aseta käyttäjäkohtaiset suorittimen, RAM-muistin, kaistanleveyden ja levykiintiöt valitulle laitteelle.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Kaistanleveysrajoitus (Mbps)", - "quotas_bandwidth_hint": "0 = rajoittamaton", - "quotas_disk_quota": "Levykiintiö (GB)", - "quotas_disk_hint": "0 = rajoittamaton", - "quotas_process_whitelist": "Prosessin sallittujen luettelo (yksi per rivi)", - "quotas_process_hint": "esim. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Vain valkoinen lista", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Ohjelmistopäivitykset", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Asennettu versio", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Tarkista päivitykset", - "checking": "Checking…", - "up_to_date": "Ajantasainen", - "update_available": "Päivitys saatavilla", - "changelog": "Release Notes", - "no_changelog": "Julkaisutietoja ei ole saatavilla", - "files_changed": "Tiedostot muutettu", - "files": "tiedostot", - "changes_unavailable": "Tiedoston muutosluetteloa ei voitu ladata. Voit silti asentaa päivityksen.", - "create_backup": "Luo varmuuskopio ennen päivittämistä", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Asennetaan päivitystä…", - "creating_backup": "Luodaan varmuuskopiota…", - "downloading": "Ladataan tiedostoja…", - "install_success": "Päivitys asennettu onnistuneesti. Konsoli käynnistyy uudelleen…", - "install_failed": "Päivityksen asennus epäonnistui", - "restarting": "Odotetaan konsolin uudelleenkäynnistystä…", - "restart_complete": "Konsoli käynnistyi uudelleen onnistuneesti", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Päivitysversiota ei ole valittu. Tarkista ensin päivitykset.", - "backups_title": "Päivitä varmuuskopiot", - "backups_desc": "Päivitystä edeltävät varmuuskopiot luodaan automaattisesti ennen jokaista päivitystä", - "no_backups": "Päivitysvarmuuskopioita ei löytynyt", - "restore": "Restore", - "restore_confirm": "Haluatko varmasti palauttaa tämän varmuuskopion? Muutetut tiedostot korvataan.", - "restore_success": "Varmuuskopion palautus onnistui. Konsoli käynnistyy uudelleen…", - "baseline_set": "Perusasetelma", - "commits_behind": "sitoutuu taakse", - "total_files": "Tiedostot yhteensä", - "applied": "Applied", - "failed": "Epäonnistui", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Siirry palvelimeen", - "component_agent": "Agent", - "component_scripts": "Käsikirjoitukset ja Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Tarkistetaan Go…", - "go_not_found": "Go ei asennettu", - "go_check_failed": "Go saatavuutta ei voitu tarkistaa", - "server_building": "Käännetään Go server… Tämä voi kestää muutaman minuutin.", - "server_built": "Palvelimen binaari käännetty", - "server_build_failed": "Palvelimen käännös epäonnistui", - "server_stale_title": "Palvelimen binaari on vanhentunut", - "server_stale_desc": "Go server-lähde päivitettiin, mutta käynnissä olevaa binaaria ei rakennettu uudelleen. Rakenna se uudelleen nyt ottaaksesi käyttöön tietoturva- ja kirjastopäivitykset.", - "rebuild_server": "Rakenna palvelimen binaari uudelleen", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Palvelimen binaarirakenne on rakennettu uudelleen ja käynnistetty uudelleen", - "rebuild_server_failed": "Palvelimen binaarien uudelleenmuodostus epäonnistui", - "server_deployed": "Palvelimen binaari otettu käyttöön", - "server_deploy_failed": "Palvelimen käyttöönotto epäonnistui", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Ladataan palvelinlähdettä…", - "delete": "Poista", - "delete_confirm": "Poistetaanko varmuuskopio {name} pysyvästi? Tätä ei voi kumota.", - "delete_success": "Varmuuskopio poistettu", - "delete_failed": "Varmuuskopion poistaminen epäonnistui", - "retention_label": "Säilytä N viimeisintä varmuuskopiota", - "retention_hint": "Vanhemmat varmuuskopiot poistetaan automaattisesti jokaisen päivityksen jälkeen. Käytä 0 säilyttääksesi kaikki varmuuskopiot.", - "retention_saved": "Säilytysasetus tallennettu", - "retention_invalid": "Säilytysarvon on oltava kokonaisluku välillä 0–1000", - "retention_required_for_prune": "Aseta ensin säilytysarvo, joka on suurempi kuin 0", - "prune_now": "Apply now", - "prune_confirm": "Säilytetäänkö vain {n} uusimmat varmuuskopiot ja poistetaanko loput?", - "prune_done": "Karsittu {n}-varmuuskopio(t)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Päivitysmenetelmä", - "strategy_download": "Lataa valmiiksi rakennettu binaari", - "strategy_compile": "Kääntää lähteestä", - "both_available": "Lataa ja käännä", - "download_available": "Lataa saatavilla", - "no_method": "Ei päivitystapaa", - "no_release": "No release", - "available": "Saatavilla", - "server_downloading": "Ladataan palvelimen binaaritiedostoa…", - "server_downloaded": "Palvelimen binaari ladattu", - "server_download_failed": "Palvelimen binaarilataus epäonnistui", - "server_download_note": "Valmiiksi rakennettu binaari ladataan GitHub Releasesista. Tämä kestää yleensä alle minuutin.", - "install_go_hint": "Asenna Go osoitteesta https://go.dev/dl/ ottaaksesi käännöksen käyttöön tai julkaise julkaisun valmiilla binäärimuodoilla", - "strategy_install_go": "Asenna automaattisesti Go ja käännä", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Automaattinen uudelleenrakennus valmis", - "toolchain_ready": "Työkaluketju asennettuna", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Ladataan Go-työkaluketjua…", - "toolchain_failed": "Go-työkaluketjun asennus epäonnistui", - "modal_title": "Asennetaan päivitystä", - "modal_done_title": "Päivitys valmis", - "modal_close": "Sulje", - "modal_reload_now": "Lataa konsoli uudelleen", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsolin tiedostot", - "phase_server": "Palvelinkomponentti", - "phase_restart": "Käynnistä uudelleen", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Varmuuskopiointi ohitettu (käyttäjän valintaa kohti)", - "server_skipped": "Go server ohitettiin", - "server_not_selected": "Go server not selected", - "server_processing": "Käsitellään Go server-päivitystä…", - "no_restart_needed": "Uudelleenkäynnistystä ei tarvita", - "complete": "Päivitys otettu käyttöön", - "complete_summary": "Päivitys on otettu käyttöön onnistuneesti.", - "complete_with_errors": "Päivitys on valmis, mutta jotkin vaiheet epäonnistuivat. Katso tiedot alta.", - "modal_done_with_errors_title": "Päivitys päättyi virheisiin", - "console_will_restart": "Konsoliprosessi käynnistyy nyt uudelleen…", - "restart_complete_msg": "Konsoli käynnistyi uudelleen. Lataa uusi versio napsauttamalla Lataa uudelleen. Sivu latautuu automaattisesti uudelleen 8 sekunnin kuluttua.", - "refresh_recommended": "Staattinen sisältö muutettu – lataa sivu uudelleen nähdäksesi uuden käyttöliittymän.", - "confirm_title": "Ota päivitys käyttöön", - "confirm_with_backup": "Päivitystä edeltävä varmuuskopio luodaan automaattisesti.", - "confirm_no_backup": "Varmuuskopiota ei luoda (jatka omalla vastuullasi)." - }, - "permissions": { - "title": "Käyttöoikeudet", - "subtitle": "Hallitse roolipohjaisia käyttöoikeuksia ja mukautettuja ohituksia", - "info_title": "Miten käyttöoikeudet toimivat", - "info_desc": "Jokaisella roolilla on oletuskäyttöoikeudet. Voit lisätä tai poistaa yksittäisiä käyttöoikeuksia roolia kohden vaihtamalla ne alla. Mukautetut ohitukset on korostettu, ja ne voidaan palauttaa oletusasetuksiin milloin tahansa.", - "select_role": "Valitse rooli", - "select_role_placeholder": "Valitse rooli...", - "reset_overrides": "Nollaa kaikki ohitukset", - "granted": "Myönnetty", - "overrides": "Ohitukset", - "level": "Taso", - "super_admin_tag": "Täysi pääsy", - "server_level_tag": "Palvelintaso", - "custom": "Mukautettu", - "default": "Oletus", - "revert": "Palauta oletusarvo", - "saved": "Lupa päivitetty", - "reverted": "Palautettu oletusarvoon", - "all_reverted": "Kaikki ohitukset palautettiin", - "confirm_reset": "Palautetaanko kaikki tämän roolin mukautetut ohitukset oletusasetuksiin?", - "empty_title": "Valitse rooli", - "empty_desc": "Valitse rooli yllä olevasta avattavasta valikosta nähdäksesi ja hallinnoidaksesi sen käyttöoikeuksia.", - "locked_title": "Pääkäyttäjä", - "locked_desc": "Super Adminilla on oletuksena kaikki käyttöoikeudet, eikä sitä voi mukauttaa.", - "cat_device": "Laitteet", - "cat_user": "Käyttäjät", - "cat_server": "Palvelin", - "cat_org": "Organisaatiot", - "cat_audit": "Tarkastus ja seuranta", - "cat_cdap": "CDAP", - "cat_enrollment": "Rekisteröinti", - "cat_chat": "Chat", - "cat_branding": "Brändäys", - "perm_device_view": "Näytä laitteet", - "perm_device_connect": "Yhdistä laitteisiin", - "perm_device_edit": "Muokkaa laitteita", - "perm_device_delete": "Poista laitteet", - "perm_device_ban": "Laitteiden estäminen / eston poistaminen", - "perm_device_change_id": "Vaihda laitetunnus", - "perm_user_view": "Näytä käyttäjät", - "perm_user_create": "Luo käyttäjiä", - "perm_user_edit": "Muokkaa käyttäjiä", - "perm_user_delete": "Poista käyttäjiä", - "perm_server_config": "Palvelimen määritykset", - "perm_server_keys": "Hallitse API-avaimia", - "perm_org_create": "Luo organisaatioita", - "perm_org_edit": "Muokkaa organisaatioita", - "perm_org_delete": "Poista organisaatiot", - "perm_org_manage_users": "Hallinnoi organisaation käyttäjiä", - "perm_org_manage_devices": "Hallinnoi organisaation laitteita", - "perm_audit_view": "Tarkastele tarkastuslokeja", - "perm_metrics_view": "Näytä mittarit", - "perm_blocklist_edit": "Muokkaa estolistaa", - "perm_cdap_view": "Tarkastele CDAP-laitteita", - "perm_cdap_command": "Lähetä CDAP-komennot", - "perm_cdap_terminal": "CDAP terminaalin käyttö", - "perm_cdap_files": "CDAP tiedostojen käyttö", - "perm_enrollment_manage": "Hallinnoi ilmoittautumista", - "perm_enrollment_approve": "Hyväksy ilmoittautuminen", - "perm_chat_access": "Chat-pääsy", - "perm_branding_edit": "Muokkaa brändäystä", - "perm_server_attestation": "Palvelimen suorituskykytodistus" - }, - "notifications": { - "title": "Ilmoitukset", - "empty": "Ei uusia ilmoituksia", - "mark_all_read": "Merkitse kaikki luetuiksi", - "see_all": "Katso kaikki avunpyynnöt", - "help_request": "Apupyyntö", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Säädä konsoli näkö-, liike- ja lukutarpeidesi mukaan.", - "close": "Sulje esteettömyysvalikko", - "profiles": "Pikaprofiilit", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Suurempi teksti, voimakas kontrasti ja tarkennus.", - "profile_dyslexia": "Lukemisen mukavuus", - "profile_dyslexia_hint": "Luettava fontti ja leveämpi väli.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Vähentää siirtymiä ja keskeyttää animaation.", - "profile_color_assist": "Värituki", - "profile_color_assist_hint": "Värisuodatin, tarrat ja korostetut linkit.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Kirjainvälit", - "word_spacing": "Sanavälit", - "readable_font": "Luettava fontti", - "readable_font_hint": "Käyttää leveitä, tuttuja kirjainmuotoja.", - "dyslexia_spacing": "Lukihäiriövälit", - "dyslexia_spacing_hint": "Lisää ylimääräisiä välilyöntejä pitkälle tekstille.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Korkea kontrasti tumma", - "contrast_high_light": "Korkeakontrastinen valo", - "contrast_yellow_black": "Keltainen mustalla", - "color_filter": "Värinäön suodatin", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Värikylläisyys", - "underline_links": "Alleviivaa linkit", - "underline_links_hint": "Tekee linkit näkyviksi ilman värejä.", - "highlight_links": "Korosta toimintoja", - "highlight_links_hint": "Piirtää linkit ja painikkeet.", - "highlight_headings": "Korosta otsikot", - "highlight_headings_hint": "Merkitsee osien otsikot väripalkilla.", - "hide_media": "Dim media", - "hide_media_hint": "Himmentää kuvia, videoita ja kankaita.", - "interaction": "Interaction", - "strong_focus": "Vahva tarkennus", - "strong_focus_hint": "Näyttää suuren näppäimistön tarkennusrenkaan.", - "large_cursor": "Suuri kursori", - "large_cursor_hint": "Käyttää suurempaa korkeakontrastista osoitinta.", - "reduce_motion": "Vähennä liikettä", - "reduce_motion_hint": "Lyhentää siirtymiä ja tasaista vieritystä.", - "pause_animations": "Keskeytä animaatiot", - "pause_animations_hint": "Pysäyttää visuaalisen liikkeen silmukan.", - "reading_guide": "Lukuopas", - "reading_guide_hint": "Seuraa osoitinta kirkkaalla viivalla.", - "reading_mask": "Luku naamio", - "reading_mask_hint": "Himmentää sisältöä osoittimen ylä- ja alapuolella.", - "preview": "Preview", - "preview_title": "Käyttäjän työtilan esikatselu", - "preview_text": "Tarkista ennen tämän valikon sulkemista, ovatko tekstit, linkit, säätimet ja tilatunnisteet mukavia lukea.", - "preview_link": "Laitteen tiedot -linkki", - "preview_status": "Online", - "preview_button": "Ensisijainen toiminta", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Palvelimen hallinta", - "subtitle": "Ohjaamomainen ohjaustaso BetterDesk-konsoliisännälle (BETA).", - "beta_tooltip": "Beta-ominaisuus – aktiivisesti kehitteillä.", - "notice_title": "Beta-ominaisuus", - "notice_body": "Nämä työkalut toimivat isännässä, jossa BetterDesk-konsoliprosessi sijaitsee. Kaikki toiminta on auditoitua. Ominaisuus laajenee tulevissa julkaisuissa.", - "tab_overview": "Yleiskatsaus", - "tab_terminal": "Pääte", - "tab_files": "Tiedostot", - "tab_services": "Palvelut", - "cpu": "CPU", - "memory": "Muisti", - "load": "Keskimääräinen kuormitus", - "disks": "Levyt", - "history": "Historia (viimeiset 60 näytettä)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Käyntiaika", - "no_disks": "Levytietoja ei ole saatavilla", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY saatavilla", - "term_connect": "Yhdistä", - "term_disconnect": "Katkaise", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Yhteysvirhe", - "term_warning": "Komennot suoritetaan käyttäjänä, joka omistaa konsoliprosessin. Lisää sudoers-sääntö ottaaksesi korkeuden käyttöön.", - "term_hint": "Vinkki: kirjoita `sudo -i` eskaloidaksesi (vaatii sudoers-määrityksen).", - "term_lib_failed": "Päätekirjaston lataaminen epäonnistui", - "files_up": "Yksi taso ylöspäin", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Tyhjä hakemisto", - "files_error": "Hakemiston luettelointi epäonnistui", - "read_failed": "Tiedoston lukeminen epäonnistui", - "save_failed": "Tiedoston tallennus epäonnistui", - "rename_failed": "Uudelleennimeäminen epäonnistui", - "delete_failed": "Poistaminen epäonnistui", - "delete_confirm": "Poistetaanko tämä merkintä?", - "mkdir_prompt": "Uuden kansion nimi:", - "mkdir_failed": "Kansion luominen epäonnistui", - "file_saved": "Tiedosto tallennettu", - "binary_warn": "Binaaritiedosto – vain esikatselu", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Hakupalvelut…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Palveluita ei löytynyt", - "svc_load_failed": "Palvelujen lataaminen epäonnistui", - "svc_action_failed": "Toiminto epäonnistui", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Käynnistä uudelleen", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Lataa BetterDesk Agent", - "choose_platform": "Valitse alustasi", - "choose_platform_hint": "Valitse käyttöjärjestelmääsi vastaava asennusohjelma.", - "download": "Lataa", - "building": "Rakennus…", - "failed": "Rakennus epäonnistui", - "need_help": "Tarvitsetko apua?", - "powered_by": "Voimanlähteenä" - }, - "server_attestation": { - "title": "Palvelintodistus", - "subtitle": "Suorituskykyvertailu, joka määrittää samanaikaisten etäyhteyksien kapasiteetin 80 %:n CPU-, RAM- ja levykynnyksellä.", - "warning_title": "Kuormitustesti", - "warning_body": "Vertailu simuloi rinnakkaisia WebSocket-yhteyksiä signaali- ja relépalvelimiin. Suorita hiljaisina aikoina — tämä testi kuormittaa tuotantoa.", - "run_benchmark": "Suorita vertailu", - "abort": "Keskeytä", - "download_report": "Lataa JSON-raportti", - "last_test": "Viimeisin testi", - "no_test_yet": "Vertailua ei ole vielä suoritettu", - "max_connections": "Enimmäisyhteydet", - "threshold_80": "80 %:n kynnys — lopulliset mittaukset", - "disk": "Levy", - "ramp_chart": "Kuormituskaavio", - "connections": "Yhteydet", - "connections_short": "yhteyt.", - "tier_guide_title": "Mitä kukin taso tarkoittaa?", - "tier_bronze": "PRONSSI", - "tier_iron": "RAUTA", - "tier_titanium": "TITAANI", - "tier_platinum": "PLATINA", - "tier_obsidian": "OBSIDIAANI", - "tier_none": "ARVIOIMATON", - "tier_bronze_desc": "1–25 samanaikaista yhteyttä — pieni VPS (1–2 vCPU, 2–4 Gt RAM).", - "tier_iron_desc": "26–75 yhteyttä — keskitasoinen palvelin (2–4 vCPU, 4–8 Gt RAM).", - "tier_platinum_desc": "76–200 yhteyttä — suorituskykyinen palvelin (4–8 vCPU, 8–16 Gt RAM).", - "tier_titanium_desc": "201–400 yhteyttä — yritysinfrastruktuuri (8+ vCPU, 16–32 Gt RAM).", - "tier_obsidian_desc": "401+ yhteyttä — turboiluokka: oma laitteisto, 16+ vCPU, 32+ Gt RAM, NVMe.", - "docker_note": "Huomio: Dockerissa CPU/RAM-mittaukset saattavat heijastaa säilön rajoituksia fyysisen isäntäkoneen sijaan.", - "badge_tooltip": "BetterDesk-palvelintodistus — palvelimen suorituskykysertifiointi", - "confirm_run": "Tämä vertailu kuormitustestaa palvelimen simuloiduilla yhteyksillä. Jatketaanko?", - "starting": "Käynnistetään...", - "complete": "Vertailu valmis", - "signal_peers": "Signaaliverdaistahot", - "relay_sessions": "Reléistunnot", - "page_error": "Palvelintodistus-sivun lataus epäonnistui", - "mode_estimated": "Arvioitu (WebSocket ei saavutettavissa)", - "incomplete": "Vertailu valmistui ilman kelvollista tasoa" + "form": { + "cancel": "Peruuta" } + } } diff --git a/web-nodejs/lang/fr.json b/web-nodejs/lang/fr.json index 48acf02f..9c7d5019 100644 --- a/web-nodejs/lang/fr.json +++ b/web-nodejs/lang/fr.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "fr", - "name": "French", - "native_name": "Français", - "direction": "ltr" + "meta": { + "lang": "fr", + "name": "French", + "native_name": "Français", + "direction": "ltr" + }, + "common": { + "loading": "Chargement...", + "confirm": "Confirmer", + "alert": "Alerte", + "prompt": "Saisir une valeur", + "copied": "Copié dans le presse-papiers", + "save": "Enregistrer", + "saved": "Enregistré", + "error": "Erreur", + "success": "Succès", + "warning": "Avertissement", + "info": "Information", + "all": "Tous", + "cancel": "Annuler", + "delete": "Supprimer", + "actions": "Actions", + "close": "Fermer", + "required": "Obligatoire", + "name_required": "Le nom est obligatoire", + "active": "Actif", + "inactive": "Inactif", + "field_required": "Le champ {field} est obligatoire", + "back": "Retour", + "edit": "Modifier", + "invalid_json": "JSON invalide", + "yes": "Oui", + "no": "Non" + }, + "nav": { + "main": "Principal", + "tools": "Outils", + "system": "Système", + "dashboard": "Tableau de bord", + "devices": "Appareils", + "keys": "Clés", + "generator": "Générateur", + "settings": "Paramètres", + "users": "Utilisateurs", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Demande d'Aide", + "activity": "Activité", + "automation": "Automatisation", + "file_transfer": "Transfert de fichiers", + "network": "Adaptateur Réseaux", + "dataguard": "Protection de Données", + "reports": "Rapports", + "tenants": "Tenants", + "registrations": "Enregistrements", + "management": "Gestion", + "toggle_sidebar": "Basculer la barre latérale", + "toggle_theme": "Changer de thème", + "cdap": "CDAP", + "fleet": "Flotte", + "scaling": "Mise à l'échelle", + "cross_platform": "Multiplateforme", + "tokens": "Jetons d'Appareils", + "organizations": "Organisations", + "policies": "Politiques", + "attestation": "Attestation", + "remote": "Bureau à Distance", + "toolkit": "Kit d'Outils", + "security_audit": "Audit de Sécurité", + "languages": "Langues", + "resource_control": "Contrôle des ressources", + "sdk_studio": "SDK Studio", + "chat": "Discussion", + "help": "Aide", + "expand_sidebar": "Développer la barre latérale", + "login": "Connexion", + "permissions": "Autorisations", + "server_management": "Gestion du serveur", + "server_attestation": "Attestation du serveur", + "commercialization": "Commercialisation" + }, + "auth": { + "login": "Connexion", + "logout": "Déconnexion", + "login_title": "Se connecter", + "login_subtitle": "Connectez-vous à la console BetterDesk", + "username": "Nom d'utilisateur", + "username_placeholder": "Entrez le nom d'utilisateur", + "password": "Mot de passe", + "password_placeholder": "Entrez le mot de passe", + "remember_me": "Se souvenir de moi", + "login_failed": "Échec de la connexion. Veuillez vérifier vos identifiants.", + "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide.", + "username_collision": "Un compte local portant ce nom d'utilisateur existe déjà. Connectez-vous avec votre mot de passe local, ou demandez à un administrateur de renommer ou supprimer le compte en conflit.", + "pro_only_account": "Ce compte est réservé au client de bureau RustDesk. Veuillez utiliser l'application RustDesk pour vous connecter.", + "fill_all_fields": "Veuillez remplir tous les champs", + "logout_confirm": "Êtes-vous sûr de vouloir vous déconnecter ?", + "change_password": "Changer le mot de passe", + "password_required": "Le mot de passe est requis", + "totp_title": "Authentification à deux facteurs", + "totp_subtitle": "Entrez le code à 6 chiffres de votre application d'authentification", + "totp_code": "Code de vérification", + "totp_verify": "Vérifier", + "totp_use_recovery": "Utiliser un code de vérification à la place", + "totp_use_code": "Utiliser le code d'authentification à la place", + "totp_recovery_code": "Code de récupération", + "totp_back_to_login": "Retour à la connexion", + "totp_invalid_code": "Code de vérification invalide. Veuillez réessayer.", + "totp_enter_code": "Veuillez entrer un code à 6 chiffres", + "totp_enter_recovery": "Veuillez entrer un code de récupération", + "totp_session_expired": "Session expirée. Veuillez vous reconnecter.", + "totp_already_enabled": "L'authentification à deux facteurs est déjà activée", + "passwords_mismatch": "Les mots de passe ne correspondent pas", + "or": "ou", + "login_sso": "Se connecter avec SSO", + "login_sso_with": "Se connecter avec {{provider}}", + "oidc_denied": "L’accès a été refusé par le fournisseur d’identité.", + "oidc_invalid": "Rappel OIDC invalide. Veuillez réessayer.", + "oidc_failed": "L’authentification OIDC a échoué. Veuillez réessayer.", + "oidc_error": "Une erreur s’est produite pendant la connexion SSO.", + "oidc_no_account": "Votre compte est introuvable et l’inscription automatique est désactivée.", + "totp_rate_limited": "Trop de tentatives. Veuillez réessayer plus tard.", + "emergency_mode_banner": "Serveur Go inaccessible — fonctionnement en mode d’urgence (administrateur uniquement, fonctionnalités limitées)" + }, + "dashboard": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur BetterDesk", + "total_devices": "Total d'Appareils", + "online_now": "Actuellement En ligne", + "banned": "Bannis", + "active_connections": "Connexions actives", + "offline_devices": "Actuellement Hors ligne", + "server_status": "État du serveur", + "quick_actions": "Actions rapides", + "manage_devices": "Gérer les appareils connectés", + "view_keys": "Voir les clés du serveur", + "generate_config": "Générer la configuration client", + "server_settings": "Configurer les paramètres", + "greeting_morning": "Bonjour, {name}", + "greeting_afternoon": "Bonjour, {name}", + "greeting_evening": "Bonsoir, {name}", + "greeting_night": "Bonsoir, {name}", + "health_overview": "Vue d'ensemble de l'état de santé", + "devices_online": "Appareils en ligne", + "active_alerts": "Alertes actives", + "recent_connections": "Appareils enregistrés", + "server_uptime": "Temps de fonctionnement du serveur", + "activity_feed": "Activité récente", + "no_recent_activity": "Aucune activité récente", + "just_now": "à l'instant", + "ago": "depuis", + "tip_desktop_mode": "Essayez le Mode Bureau pour un espace de travail multi-fenêtres avec des widgets de supervision.", + "tip_keyboard_shortcuts": "Appuyez sur Ctrl+K n'importe où pour ouvrir la palette de recherche rapide.", + "tip_address_book": "Synchronisez votre carnet d'adresses entre vos appareils en vous connectant depuis le client RustDesk.", + "tip_2fa": "Activez l'authentification à deux facteurs dans les paramètres pour renforcer la sécurité du compte.", + "tip_bulk_actions": "Sélectionnez plusieurs appareils et utilisez les actions groupées pour les gérer en une fois.", + "tip_theme": "Basculez entre les thèmes sombre et clair dans les paramètres de la barre latérale.", + "tip_cdap": "Connectez des appareils IoT et des capteurs industriels via la passerelle CDAP.", + "tip_tutorials": "Cliquez sur le bouton d'aide en bas à droite pour afficher des tutoriels interactifs." + }, + "devices": { + "title": "Appareils", + "id": "Identifiant", + "hostname": "Nom d'hôte", + "username": "Nom d'utilisateur", + "platform": "Plateforme", + "version": "Version", + "ip_address": "Adresse IP", + "note": "Note", + "last_seen": "Derniere Vu", + "last_online": "Derniere fois En Ligne", + "first_seen": "Premiere fois Vu", + "created": "Créé", + "status": "Statut", + "ban_reason": "Raison du bannissement", + "actions": "Actions", + "search_placeholder": "Rechercher des appareils...", + "filter_all": "Tous", + "filter_online": "En ligne", + "filter_offline": "Hors ligne", + "filter_banned": "Bannis", + "selected": "selectionné", + "showing": "Affiché", + "of": "de", + "sync_status": "État de synchronisation", + "sync_success": "Statut synchronisé avec succès", + "empty_title": "Aucun appareil trouvé", + "empty_text": "Aucun appareil ne correspond à vos filtres actuels", + "edit_title": "Détails de l'appareil", + "delete_title": "Supprimer l'appareil", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer l'appareil {id} ?", + "delete_warning": "Vous êtes sur le point de supprimer définitivement cet appareil :", + "delete_permanent": "Cette action est irréversible. Toutes les données associées à cet appareil seront définitivement supprimées de la base de données.", + "delete_success": "Appareil supprimé avec succès", + "revoke_option": "Révoquer l'appareil", + "revoke_hint": "Révoquer l'appareil et déconnecter les connexions actives", + "revoke_success": "Appareil révoqué avec succès", + "details": "Détails de l'appareil", + "ban_title": "Bannir l'appareil", + "ban_confirm": "Êtes-vous sûr de vouloir bannir l'appareil {id}?", + "ban_success": "Appareil banni avec succès", + "unban_title": "Débannir l'appareil", + "unban_confirm": "Êtes-vous sûr de vouloir débannir l'appareil {id} ?", + "unban_success": "Appareil débanni avec succès", + "change_id": "Changer l'identifiant", + "change_id_title": "Changer l'identifiant de l'appareil", + "new_id": "Nouvel identifiant", + "change_id_hint": "6-16 caractères, lettres, chiffres, tirets et underscores uniquement", + "change_id_success": "Identifiant de l'appareil modifié avec succès", + "id_length_error": "L'identifiant doit contenir entre 6 et 16 caractères", + "id_format_error": "L'identifiant ne peut contenir que des lettres, des chiffres, des tirets et des underscores", + "bulk_delete_title": "Supprimer plusieurs appareils", + "bulk_delete_confirm": "Êtes-vous sûr de vouloir supprimer {count} appareils ?", + "bulk_delete_success": "{count} appareils supprimés avec succès", + "columns": "Colonnes", + "toggle_columns": "Selectionner les colonnes visibles", + "not_found": "Introuvable", + "delete_failed": "Échec de la suppression de l'appareil", + "change_id_failed": "Échec du changement de l'identifiant de l'appareil", + "invalid_id": "Identifiant d'appareil non valide (6 à 16 caractères requis)", + "invalid_id_format": "Format d'identifiant non valide (lettres, chiffres, tirets et underscores uniquement)", + "id_exists": "L'identifiant de l'appareil existe déjà", + "no_selection": "Aucun appareil sélectionné", + "device_type": "Type d'appareil", + "filter_type_all": "Tous les Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Bureau", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP connecté", + "revoke": "Révoquer", + "access_policy": "Politique d'accès", + "unattended_access": "Accès sans surveillance", + "enable_unattended": "Activer l'accès sans surveillance", + "access_password": "Mot de passe d'accès", + "password_configured": "Mot de passe défini", + "no_password": "Pas de mot de passe", + "new_password": "Nouveau mot de passe (ne rien indiquer pour conserver le mot de passe actuel)", + "clear_password": "Effacer le mot de passe", + "access_schedule": "Horaires d'accès", + "enable_schedule": "Activer l'accès en fonction de l'heure", + "allowed_days": "Jours autorisés", + "start_time": "Heure de début", + "end_time": "Heure de fin", + "timezone": "Fuseau horaire", + "allowed_operators": "Opérateurs autorisés", + "all_operators": "Tous les opérateurs (laisser vide)", + "operators_hint": "Noms d'utilisateur séparés par des virgules. Laisser vide pour autoriser tous les opérateurs.", + "last_updated_by": "Dernière mise à jour par", + "access_policy_saved": "Politique d'accès enregistrée", + "display_name": "Nom d'affichage", + "display_name_placeholder": "Nom personnalisé (remplace le nom d'hôte)", + "note_placeholder": "Remarques concernant cet appareil", + "tabs": { + "overview": "Aperçu", + "hardware": "Matériel", + "metrics": "Métriques", + "connections": "Connexions", + "audit": "Audit", + "info": "Information", + "history": "Historique" }, - "common": { - "loading": "Chargement...", - "confirm": "Confirmer", - "alert": "Alerte", - "prompt": "Saisir une valeur", - "copied": "Copié dans le presse-papiers", - "save": "Enregistrer", - "saved": "Enregistré", - "error": "Erreur", - "success": "Succès", - "warning": "Avertissement", - "info": "Information", - "all": "Tous", - "cancel": "Annuler", - "delete": "Supprimer", - "actions": "Actions", - "close": "Fermer", - "required": "Obligatoire", - "name_required": "Le nom est obligatoire", - "active": "Actif", - "inactive": "Inactif", - "field_required": "Le champ {field} est obligatoire", - "back": "Retour", - "edit": "Modifier", - "invalid_json": "JSON invalide", - "yes": "Oui", - "no": "Non" + "hardware": { + "cpu": "Processeur", + "memory": "Mémoire", + "disk": "Disque", + "os": "Système d'exploitation", + "hostname": "Nom d'hôte", + "uptime": "Temps de fonctionnement", + "load_avg": "Charge moyenne", + "network": "Adaptateurs Réseaux", + "no_data": "Aucune donnée matérielle disponible", + "title": "Informations sur le matériel", + "gpu": "Carte graphique" }, - "nav": { - "main": "Principal", - "tools": "Outils", - "system": "Système", - "dashboard": "Tableau de bord", - "devices": "Appareils", - "keys": "Clés", - "generator": "Générateur", - "settings": "Paramètres", - "users": "Utilisateurs", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Demande d'Aide", - "activity": "Activité", - "automation": "Automatisation", - "file_transfer": "Transfert de fichiers", - "network": "Adaptateur Réseaux", - "dataguard": "Protection de Données", - "reports": "Rapports", - "tenants": "Tenants", - "registrations": "Enregistrements", - "management": "Gestion", - "toggle_sidebar": "Basculer la barre latérale", - "toggle_theme": "Changer de thème", - "cdap": "CDAP", - "fleet": "Flotte", - "scaling": "Mise à l'échelle", - "cross_platform": "Multiplateforme", - "tokens": "Jetons d'Appareils", - "organizations": "Organisations", - "policies": "Politiques", - "attestation": "Attestation", - "remote": "Bureau à Distance", - "toolkit": "Kit d'Outils", - "security_audit": "Audit de Sécurité", - "languages": "Langues", - "resource_control": "Contrôle des ressources", - "sdk_studio": "SDK Studio", - "chat": "Discussion", - "help": "Aide", - "expand_sidebar": "Développer la barre latérale", - "login": "Connexion", - "permissions": "Autorisations", - "server_management": "Gestion du serveur", - "server_attestation": "Attestation du serveur" - }, - "auth": { - "login": "Connexion", - "logout": "Déconnexion", - "login_title": "Se connecter", - "login_subtitle": "Connectez-vous à la console BetterDesk", - "username": "Nom d'utilisateur", - "username_placeholder": "Entrez le nom d'utilisateur", - "password": "Mot de passe", - "password_placeholder": "Entrez le mot de passe", - "remember_me": "Se souvenir de moi", - "login_failed": "Échec de la connexion. Veuillez vérifier vos identifiants.", - "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide.", - "username_collision": "Un compte local portant ce nom d'utilisateur existe déjà. Connectez-vous avec votre mot de passe local, ou demandez à un administrateur de renommer ou supprimer le compte en conflit.", - "pro_only_account": "Ce compte est réservé au client de bureau RustDesk. Veuillez utiliser l'application RustDesk pour vous connecter.", - "fill_all_fields": "Veuillez remplir tous les champs", - "logout_confirm": "Êtes-vous sûr de vouloir vous déconnecter ?", - "change_password": "Changer le mot de passe", - "password_required": "Le mot de passe est requis", - "totp_title": "Authentification à deux facteurs", - "totp_subtitle": "Entrez le code à 6 chiffres de votre application d'authentification", - "totp_code": "Code de vérification", - "totp_verify": "Vérifier", - "totp_use_recovery": "Utiliser un code de vérification à la place", - "totp_use_code": "Utiliser le code d'authentification à la place", - "totp_recovery_code": "Code de récupération", - "totp_back_to_login": "Retour à la connexion", - "totp_invalid_code": "Code de vérification invalide. Veuillez réessayer.", - "totp_enter_code": "Veuillez entrer un code à 6 chiffres", - "totp_enter_recovery": "Veuillez entrer un code de récupération", - "totp_session_expired": "Session expirée. Veuillez vous reconnecter.", - "totp_already_enabled": "L'authentification à deux facteurs est déjà activée", - "passwords_mismatch": "Les mots de passe ne correspondent pas", - "or": "ou", - "login_sso": "Se connecter avec SSO", - "login_sso_with": "Se connecter avec {{provider}}", - "oidc_denied": "L’accès a été refusé par le fournisseur d’identité.", - "oidc_invalid": "Rappel OIDC invalide. Veuillez réessayer.", - "oidc_failed": "L’authentification OIDC a échoué. Veuillez réessayer.", - "oidc_error": "Une erreur s’est produite pendant la connexion SSO.", - "oidc_no_account": "Votre compte est introuvable et l’inscription automatique est désactivée.", - "totp_rate_limited": "Trop de tentatives. Veuillez réessayer plus tard.", - "emergency_mode_banner": "Serveur Go inaccessible — fonctionnement en mode d’urgence (administrateur uniquement, fonctionnalités limitées)" - }, - "dashboard": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur BetterDesk", - "total_devices": "Total d'Appareils", - "online_now": "Actuellement En ligne", - "banned": "Bannis", - "active_connections": "Connexions actives", - "offline_devices": "Actuellement Hors ligne", - "server_status": "État du serveur", - "quick_actions": "Actions rapides", - "manage_devices": "Gérer les appareils connectés", - "view_keys": "Voir les clés du serveur", - "generate_config": "Générer la configuration client", - "server_settings": "Configurer les paramètres", - "greeting_morning": "Bonjour, {name}", - "greeting_afternoon": "Bonjour, {name}", - "greeting_evening": "Bonsoir, {name}", - "greeting_night": "Bonsoir, {name}", - "health_overview": "Vue d'ensemble de l'état de santé", - "devices_online": "Appareils en ligne", - "active_alerts": "Alertes actives", - "recent_connections": "Appareils enregistrés", - "server_uptime": "Temps de fonctionnement du serveur", - "activity_feed": "Activité récente", - "no_recent_activity": "Aucune activité récente", - "just_now": "à l'instant", - "ago": "depuis", - "tip_desktop_mode": "Essayez le Mode Bureau pour un espace de travail multi-fenêtres avec des widgets de supervision.", - "tip_keyboard_shortcuts": "Appuyez sur Ctrl+K n'importe où pour ouvrir la palette de recherche rapide.", - "tip_address_book": "Synchronisez votre carnet d'adresses entre vos appareils en vous connectant depuis le client RustDesk.", - "tip_2fa": "Activez l'authentification à deux facteurs dans les paramètres pour renforcer la sécurité du compte.", - "tip_bulk_actions": "Sélectionnez plusieurs appareils et utilisez les actions groupées pour les gérer en une fois.", - "tip_theme": "Basculez entre les thèmes sombre et clair dans les paramètres de la barre latérale.", - "tip_cdap": "Connectez des appareils IoT et des capteurs industriels via la passerelle CDAP.", - "tip_tutorials": "Cliquez sur le bouton d'aide en bas à droite pour afficher des tutoriels interactifs." - }, - "devices": { - "title": "Appareils", - "id": "Identifiant", - "hostname": "Nom d'hôte", - "username": "Nom d'utilisateur", - "platform": "Plateforme", - "version": "Version", - "ip_address": "Adresse IP", - "note": "Note", - "last_seen": "Derniere Vu", - "last_online": "Derniere fois En Ligne", - "first_seen": "Premiere fois Vu", - "created": "Créé", - "status": "Statut", - "ban_reason": "Raison du bannissement", - "actions": "Actions", - "search_placeholder": "Rechercher des appareils...", - "filter_all": "Tous", - "filter_online": "En ligne", - "filter_offline": "Hors ligne", - "filter_banned": "Bannis", - "selected": "selectionné", - "showing": "Affiché", - "of": "de", - "sync_status": "État de synchronisation", - "sync_success": "Statut synchronisé avec succès", - "empty_title": "Aucun appareil trouvé", - "empty_text": "Aucun appareil ne correspond à vos filtres actuels", - "edit_title": "Détails de l'appareil", - "delete_title": "Supprimer l'appareil", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer l'appareil {id} ?", - "delete_warning": "Vous êtes sur le point de supprimer définitivement cet appareil :", - "delete_permanent": "Cette action est irréversible. Toutes les données associées à cet appareil seront définitivement supprimées de la base de données.", - "delete_success": "Appareil supprimé avec succès", - "revoke_option": "Révoquer l'appareil", - "revoke_hint": "Révoquer l'appareil et déconnecter les connexions actives", - "revoke_success": "Appareil révoqué avec succès", - "details": "Détails de l'appareil", - "ban_title": "Bannir l'appareil", - "ban_confirm": "Êtes-vous sûr de vouloir bannir l'appareil {id}?", - "ban_success": "Appareil banni avec succès", - "unban_title": "Débannir l'appareil", - "unban_confirm": "Êtes-vous sûr de vouloir débannir l'appareil {id} ?", - "unban_success": "Appareil débanni avec succès", - "change_id": "Changer l'identifiant", - "change_id_title": "Changer l'identifiant de l'appareil", - "new_id": "Nouvel identifiant", - "change_id_hint": "6-16 caractères, lettres, chiffres, tirets et underscores uniquement", - "change_id_success": "Identifiant de l'appareil modifié avec succès", - "id_length_error": "L'identifiant doit contenir entre 6 et 16 caractères", - "id_format_error": "L'identifiant ne peut contenir que des lettres, des chiffres, des tirets et des underscores", - "bulk_delete_title": "Supprimer plusieurs appareils", - "bulk_delete_confirm": "Êtes-vous sûr de vouloir supprimer {count} appareils ?", - "bulk_delete_success": "{count} appareils supprimés avec succès", - "columns": "Colonnes", - "toggle_columns": "Selectionner les colonnes visibles", - "not_found": "Introuvable", - "delete_failed": "Échec de la suppression de l'appareil", - "change_id_failed": "Échec du changement de l'identifiant de l'appareil", - "invalid_id": "Identifiant d'appareil non valide (6 à 16 caractères requis)", - "invalid_id_format": "Format d'identifiant non valide (lettres, chiffres, tirets et underscores uniquement)", - "id_exists": "L'identifiant de l'appareil existe déjà", - "no_selection": "Aucun appareil sélectionné", - "device_type": "Type d'appareil", - "filter_type_all": "Tous les Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Bureau", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP connecté", - "revoke": "Révoquer", - "access_policy": "Politique d'accès", - "unattended_access": "Accès sans surveillance", - "enable_unattended": "Activer l'accès sans surveillance", - "access_password": "Mot de passe d'accès", - "password_configured": "Mot de passe défini", - "no_password": "Pas de mot de passe", - "new_password": "Nouveau mot de passe (ne rien indiquer pour conserver le mot de passe actuel)", - "clear_password": "Effacer le mot de passe", - "access_schedule": "Horaires d'accès", - "enable_schedule": "Activer l'accès en fonction de l'heure", - "allowed_days": "Jours autorisés", - "start_time": "Heure de début", - "end_time": "Heure de fin", - "timezone": "Fuseau horaire", - "allowed_operators": "Opérateurs autorisés", - "all_operators": "Tous les opérateurs (laisser vide)", - "operators_hint": "Noms d'utilisateur séparés par des virgules. Laisser vide pour autoriser tous les opérateurs.", - "last_updated_by": "Dernière mise à jour par", - "access_policy_saved": "Politique d'accès enregistrée", - "display_name": "Nom d'affichage", - "display_name_placeholder": "Nom personnalisé (remplace le nom d'hôte)", - "note_placeholder": "Remarques concernant cet appareil", - "tabs": { - "overview": "Aperçu", - "hardware": "Matériel", - "metrics": "Métriques", - "connections": "Connexions", - "audit": "Audit", - "info": "Information", - "history": "Historique" - }, - "hardware": { - "cpu": "Processeur", - "memory": "Mémoire", - "disk": "Disque", - "os": "Système d'exploitation", - "hostname": "Nom d'hôte", - "uptime": "Temps de fonctionnement", - "load_avg": "Charge moyenne", - "network": "Adaptateurs Réseaux", - "no_data": "Aucune donnée matérielle disponible", - "title": "Informations sur le matériel", - "gpu": "Carte graphique" - }, - "tags": "Tags", - "filter_by_tags": "Filtrer par étiquettes", - "no_tags": "No tags", - "all_groups": "Tous les groupes", - "create_group": "Créer un groupe", - "manage_groups": "Gérer les groupes", - "group_name": "Nom du groupe", - "group_name_placeholder": "ex. PC multimédia", - "dynamic_group": "Groupe dynamique par étiquette", - "dynamic_group_hint": "Les appareils portant cette étiquette rejoignent automatiquement le groupe.", - "tag_filter": "Tag filter", - "group_allowed_users": "Utilisateurs autorisés", - "group_allowed_users_hint": "Laissez vide pour que le groupe reste visible à tous les utilisateurs disposant des autorisations sur les appareils.", - "group_tag_required": "Un filtre d’étiquette est requis pour les groupes dynamiques", - "group_invalid": "Identifiant de groupe invalide", - "group_not_found": "Groupe introuvable", - "group_saved": "Groupe d’appareils enregistré", - "groups_saved": "Groupes d’appareils enregistrés", + "tags": "Tags", + "filter_by_tags": "Filtrer par étiquettes", + "no_tags": "No tags", + "all_groups": "Tous les groupes", + "create_group": "Créer un groupe", + "manage_groups": "Gérer les groupes", + "group_name": "Nom du groupe", + "group_name_placeholder": "ex. PC multimédia", + "dynamic_group": "Groupe dynamique par étiquette", + "dynamic_group_hint": "Les appareils portant cette étiquette rejoignent automatiquement le groupe.", + "tag_filter": "Tag filter", + "group_allowed_users": "Utilisateurs autorisés", + "group_allowed_users_hint": "Laissez vide pour que le groupe reste visible à tous les utilisateurs disposant des autorisations sur les appareils.", + "group_tag_required": "Un filtre d’étiquette est requis pour les groupes dynamiques", + "group_invalid": "Identifiant de groupe invalide", + "group_not_found": "Groupe introuvable", + "group_saved": "Groupe d’appareils enregistré", + "groups_saved": "Groupes d’appareils enregistrés", "group_membership_added": "Ajouté au groupe", "group_membership_removed": "Retiré du groupe", - "no_groups": "Aucun groupe pour le moment", - "manual_groups": "Groupes manuels", - "dynamic_memberships": "Appartenances dynamiques", - "group_allowed_user_groups": "Groupes d’utilisateurs autorisés", - "group_allowed_user_groups_hint": "Les utilisateurs des groupes sélectionnés peuvent accéder à ce groupe d’appareils.", - "no_user_groups": "Aucun groupe d’utilisateurs", - "edit_group": "Modifier le groupe", - "delete_group": "Supprimer le groupe", - "delete_group_confirm": "Supprimer le groupe d’appareils {name} ?", - "group_deleted": "Groupe d’appareils supprimé", - "folder_group_readonly": "Les groupes associés aux dossiers sont gérés depuis les dossiers.", - "manage_user_groups": "Gérer les groupes d’utilisateurs", - "restore_failed": "Échec de la restauration de l'appareil", - "no_signal_tooltip": "Le client a contacté l'API récemment mais n'est pas enregistré sur le serveur de signal (UDP :21116). Redémarrez le client après la migration du serveur.", - "per_page": "Par page" - }, - "keys": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur BetterDesk", - "public_key": "Clé publique", - "qr_code": "Code QR", - "server_info": "Informations du serveur", - "download": "Télécharger la clé", - "show_qr": "Afficher le code QR", - "qr_hint": "Scannez ce code QR avec l'application mobile RustDesk", - "no_key": "Aucune clé publique trouvée", - "no_key_to_copy": "Aucune clé à copier", - "no_qr": "Code QR non disponible", - "download_success": "Fichier de clé téléchargé", - "not_found": "Introuvable", - "api_not_found": "Clé API non trouvé" - }, - "settings": { - "title": "Paramètres", - "subtitle": "Configuration de la console et paramètres du compte", - "tab_general": "Général", - "tab_server": "Serveur", - "tab_branding": "Image de marque", - "tab_backup": "Sauvegarde", - "language": "Langue", - "change_password": "Changer le mot de passe", - "password_desc": "Mettre à jour le mot de passe de votre compte", - "current_password": "Mot de passe actuel", - "new_password": "Nouveau mot de passe", - "confirm_password": "Confirmer le mot de passe", - "save_password": "Mettre à jour le mot de passe", - "password_changed": "Mot de passe modifié avec succès", - "fill_all_fields": "Veuillez remplir tous les champs", - "passwords_not_match": "Les mots de passe ne correspondent pas", - "password_requirements": "Exigences du mot de passe", - "password_requirements_not_met": "Le mot de passe ne répond pas aux exigences", - "req_length": "Au moins 8 caractères", - "req_uppercase": "Au moins une lettre majuscule", - "req_lowercase": "Au moins une lettre minuscule", - "req_number": "Au moins un chiffre", - "server_info": "Informations du serveur", - "version": "Version", - "database": "Base de données", - "uptime": "Temps de fonctionnement", - "audit_log": "Journal d'audit", - "audit_desc": "Activité récente de la console", - "no_audit_logs": "Aucun journal d'audit trouvé", - "backend_title": "Serveur Backend", - "backend_desc": "Choisissez quel serveur backend à utiliser pour la gestion des appareils et les services de signalisation/relais.", - "backend_original": "Origine", - "backend_enhanced": "Amélioré", - "backend_rustdesk_desc": "Serveurs de signalisation et relais RustDesk standard (hbbs + hbbr). API HTTP de base avec un nombre limité de terminaux.", - "backend_betterdesk_desc": "Serveur amélioré basé sur GO avec API REST complète, authentification JWT, liste de blocage, balises, événements WebSocket en temps réel et journal d'audit.", - "backend_feature_signal": "Serveur de signalisation (enregistrement d'identifiant)", - "backend_feature_relay": "Serveur relais (relais de connexion)", - "backend_feature_basic_api": "API REST basique", - "backend_feature_full_api": "API REST complète (34+ terminaux)", - "backend_feature_jwt": "Authentification JWT & TOTP 2FA", - "backend_feature_blocklist": "Gestion de liste de blocage IP/Identifiant", - "backend_feature_tags": "Balises et regroupement des appareils", - "backend_feature_audit": "Journalisation des événements d'audit", - "backend_feature_websocket": "Événements WebSocket en temps réel", - "backend_connection": "Connexion", - "backend_api_url": "URL de l'API", - "backend_test": "Tester la connexion", - "backend_testing": "Test en cours...", - "backend_save": "Appliquer le backend", - "backend_saved": "Serveur Backend modifié avec succès. Les données des appareils seront désormais gérées par le nouveau Backend.", - "backend_save_failed": "Échec du changement de serveur Backend", - "backend_test_success": "Connexion réussie ! Le serveur est accessible.", - "backend_test_failed": "Échec de la connexion. Le serveur est inaccessible.", - "backend_confirm_switch": "Êtes-vous sûr de vouloir changer le serveur backend ? Cela modifiera comment sont gérés les appareils.", - "backend_unreachable": "Changement impossible : le serveur cible est inaccessible. Démarrez d'abord le serveur.", - "invalid_backend": "Sélection de backend invalide. Choisissez 'rustdesk' ou 'betterdesk'.", - "backend_status_running": "Connecté", - "backend_status_unreachable": "Inaccessible", - "backend_status_error": "Erreur", - "backend_status_unknown": "Inconnu", - "totp_title": "Authentification à deux facteurs", - "totp_desc": "Ajoutez une couche de sécurité supplémentaire avec les applications d'authentification TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", - "totp_enabled": "2FA activée", - "totp_enabled_desc": "Votre compte est protégé par l'authentification à deux facteurs.", - "totp_disabled": "2FA non activée", - "totp_disabled_desc": "Activez l'authentification à deux facteurs pour une sécurité supplémentaire du compte.", - "totp_setup": "Activer 2FA", - "totp_disable": "Désactiver 2FA", - "totp_step1": "Installez une application d'authentification sur votre téléphone", - "totp_step2": "Scannez le code QR ci-dessous", - "totp_step3": "Entrez le code à 6 chiffres pour vérifier", - "totp_manual_key": "Clé manuelle", - "totp_enter_code": "Veuillez entrer le code de verification", - "totp_verify_enable": "Vérifier & Activer", - "totp_enabled_success": "Authentification à deux facteurs activée !", - "totp_recovery_warning": "Conservez ces codes de récupération en lieu sûr. Chaque code ne peut être utilisé qu'une seule fois. Si vous perdez l'accès à votre application d'authentification, vous pouvez utiliser ces codes pour vous connecter.", - "totp_done": "Effectué", - "totp_disable_warning": "Désactiver l'authentification à deux facteurs rendra votre compte moins sécurisé. Entrez votre mot de passe pour confirmer.", - "totp_disabled_success": "L'authentification à deux facteurs a été désactivée.", - "tutorials_title": "Tutoriels et guides", - "tutorials_desc": "Contrôlez les visites guidées et les aides contextuelles affichées dans la console", - "tutorials_enabled": "Activer les tutoriels", - "tutorials_enabled_hint": "Lorsque cette option est désactivée, les tutoriels ne démarrent pas automatiquement et le bouton d’aide est masqué", - "tutorials_reset_hint": "Marquer tous les tutoriels comme non vus afin de les afficher à nouveau", - "tutorials_enabled_toast": "Tutoriels activés", - "tutorials_disabled_toast": "Tutoriels désactivés", - "tutorials_reset_toast": "Tous les tutoriels ont été réinitialisés", - "tab_auth": "Authentification", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Configurez l’authentification externe via LDAP ou Active Directory. Les utilisateurs pourront se connecter avec leurs identifiants de domaine.", - "ldap_enabled": "Activer l’authentification LDAP", - "ldap_enabled_hint": "Lorsque cette option est activée, les utilisateurs peuvent se connecter avec leurs identifiants LDAP/AD. Les comptes locaux restent disponibles en solution de secours.", - "ldap_connection": "Connexion au serveur", - "ldap_host": "Hôte", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Ignorer la vérification TLS", - "ldap_timeout": "Délai de connexion (s)", - "ldap_timeout_hint": "Nombre de secondes à attendre la réponse du serveur LDAP", - "ldap_bind_mode": "Mode de liaison", - "ldap_direct_bind": "Liaison directe", - "ldap_direct_bind_hint": "Effectue une liaison directe avec un modèle DN au lieu d’utiliser un compte de service pour la recherche.", - "ldap_bind_dn": "DN de liaison (compte de service)", - "ldap_bind_dn_hint": "Nom distinctif d’un compte de service en lecture seule utilisé pour rechercher les utilisateurs.", - "ldap_bind_password": "Mot de passe de liaison", - "ldap_base_dn": "DN de base", - "ldap_base_dn_hint": "Base de recherche pour trouver les utilisateurs, par ex. dc=example,dc=com", - "ldap_user_filter": "Filtre utilisateur", - "ldap_user_filter_hint": "Filtre LDAP pour trouver les utilisateurs. Utilisez {{username}} comme espace réservé. Par défaut : (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Modèle DN de liaison directe", - "ldap_direct_bind_dn_hint": "Modèle DN pour la liaison directe. Utilisez {{username}} comme espace réservé, par ex. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Attributs utilisateur", - "ldap_attr_id": "Attribut du nom d’utilisateur", - "ldap_attr_email": "Attribut e-mail", - "ldap_attr_name": "Attribut du nom affiché", - "ldap_group_mapping": "Mappage groupe → rôle", - "ldap_group_base_dn": "DN de base des groupes", - "ldap_group_base_dn_hint": "Laissez vide pour utiliser le DN de base principal", - "ldap_group_filter": "Filtre de groupe", - "ldap_group_attr_name": "Attribut du nom de groupe", - "ldap_default_role": "Rôle par défaut", - "ldap_default_role_hint": "Rôle attribué aux utilisateurs dont les groupes LDAP ne correspondent à aucun mappage", - "ldap_role_viewer": "Lecteur", - "ldap_role_operator": "Opérateur", - "ldap_role_admin": "Administrateur", - "ldap_group_role_map": "Carte groupes → rôles", - "ldap_group_role_map_hint": "Associez les groupes LDAP aux rôles BetterDesk. Format : GroupDN=rôle séparé par | (pipe). Exemple : CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Tester la connexion", - "ldap_testing": "Test en cours...", - "ldap_test_success": "Connexion réussie ! Le serveur LDAP est joignable et les identifiants de liaison sont valides.", - "ldap_test_failed": "Échec de la connexion", - "ldap_save": "Enregistrer la configuration LDAP", - "ldap_saved": "Configuration LDAP enregistrée avec succès", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Configurez l’authentification unique via un fournisseur OpenID Connect (Azure AD, Okta, Google, Keycloak, etc.).", - "oidc_enabled": "Activer l’authentification OIDC", - "oidc_enabled_hint": "Autoriser les utilisateurs à se connecter avec un fournisseur d’identité externe", - "oidc_provider": "Fournisseur d’identité", - "oidc_display_name": "Nom affiché du bouton", - "oidc_display_name_hint": "Texte affiché sur le bouton de connexion (par ex. Azure AD, Okta)", - "oidc_issuer_url": "URL de l’émetteur", - "oidc_issuer_url_hint": "URL de l’émetteur OpenID Connect (la découverte sera automatique)", - "oidc_client_id": "ID client", - "oidc_client_secret": "Secret client", - "oidc_redirect_url": "URL de redirection (rappel)", - "oidc_redirect_url_hint": "Doit correspondre exactement à ce qui est configuré dans votre IdP. Généralement : http(s)://votre-serveur:21114/api/auth/oidc/callback", - "oidc_scopes": "Portées", - "oidc_use_pkce": "Utiliser PKCE (recommandé)", - "oidc_auto_discovery": "Découverte automatique", - "oidc_allow_signup": "Créer automatiquement les utilisateurs", - "oidc_manual_endpoints": "URL des points de terminaison manuels", - "oidc_authorization_url": "Point de terminaison d’autorisation", - "oidc_token_url": "Point de terminaison des jetons", - "oidc_userinfo_url": "Point de terminaison UserInfo", - "oidc_claim_mapping": "Mappage des revendications", - "oidc_claim_username": "Revendi­cation du nom d’utilisateur", - "oidc_claim_email": "Revendi­cation e-mail", - "oidc_claim_name": "Revendi­cation du nom affiché", - "oidc_claim_groups": "Revendi­cation des groupes", - "oidc_role_mapping": "Mappage des rôles", - "oidc_default_role": "Rôle par défaut", - "oidc_group_role_map": "Mappage groupe → rôle", - "oidc_group_role_map_hint": "Un mappage par ligne : nom_groupe=rôle (par ex. admins=admin, operators=operator)", - "oidc_test_discovery": "Tester la découverte", - "oidc_testing": "Test en cours...", - "oidc_test_success": "Découverte réussie ! Points de terminaison résolus.", - "oidc_test_failed": "Échec de la découverte", - "oidc_issuer_required": "L’URL de l’émetteur est requise pour tester la découverte", - "oidc_save": "Enregistrer la configuration OIDC", - "oidc_saved": "Configuration OIDC enregistrée avec succès", - "tab_advanced": "Avancé", - "connection_mode_title": "Stratégie de connexion", - "connection_mode_desc": "Contrôlez comment les clients de bureau RustDesk se connectent : P2P direct (hole punch) si possible, ou toujours via relais.", - "connection_mode_label": "Mode de connexion par défaut", - "connection_mode_p2p_first": "P2P en premier (recommandé) — essayer la connexion directe, se rabattre sur le relais", - "connection_mode_relay_only": "Relais uniquement — toutes les sessions utilisent le serveur relais", - "connection_mode_advanced": "Options avancées", - "connection_mode_fallback_ms": "Délai d'expiration de basculement P2P (ms)", - "connection_mode_same_nat_relay": "Forcer le relais lorsque les deux pairs partagent la même IP publique (NAT hairpin)", - "connection_mode_network_hint": "P2P nécessite que le port UDP 21116 soit accessible entre les clients. Signal TCP 21116, relais TCP 21117, test NAT 21115 doivent être ouverts sur le serveur. Les navigateurs web utilisent toujours le relais.", - "connection_mode_save": "Enregistrer", - "connection_mode_save_restart": "Enregistrer et redémarrer le serveur", - "connection_mode_saved": "Mode de connexion enregistré", - "connection_mode_restart_started": "Redémarrage du serveur initié", - "connection_mode_restart_failed": "Échec du redémarrage du serveur", - "connection_mode_not_configurable": "Le mode de connexion ne peut pas être modifié sur ce déploiement (aucune unité systemd ou docker-compose trouvé)", - "connection_mode_compose_error": "Impossible de trouver la section d'environnement du serveur dans docker-compose.yml", - "connection_mode_source_saved": "Enregistré dans", - "connection_mode_source_defaults": "Utilisation des valeurs par défaut du serveur (non modifiables depuis le panneau)", - "connection_mode_runtime": "Serveur actif", - "advanced_title": "Fichiers de configuration", - "advanced_desc": "Modifiez directement les fichiers de configuration du serveur. Les modifications peuvent nécessiter un redémarrage des services. Une copie de sauvegarde est créée avant chaque enregistrement.", - "advanced_warning": "Ces fichiers contiennent des secrets (clés API, mots de passe de base de données, secrets de session). Ne modifiez que si vous savez ce que vous faites. Une syntaxe incorrecte peut empêcher le serveur de démarrer.", - "advanced_files_label": "Fichiers", - "advanced_select_file": "Sélectionnez un fichier dans la liste pour afficher ou modifier son contenu.", - "advanced_reload": "Recharger", - "advanced_save": "Enregistrer le fichier", - "advanced_apply_restart": "Appliquer (redémarrer le service)", - "advanced_saved": "Fichier de configuration enregistré", - "advanced_restart_after_save": "Configuration enregistrée. Redémarrer le service concerné maintenant pour que les modifications prennent effet ?", - "advanced_restart_confirm": "Redémarrer le(s) service(s) BetterDesk concerné(s) ? Les connexions actives peuvent être brièvement interrompues.", - "advanced_restart_console_confirm": "Redémarrer le service de console web ? Votre session de navigateur se déconnectera brièvement et la page se rechargera lorsque la console sera de retour.", - "advanced_restart_started": "Redémarrage du service initié", - "advanced_restart_done": "Console redémarrée — rechargement de la page…", - "advanced_restart_polling": "En attente du retour en ligne de la console…", - "advanced_restart_timeout": "Le redémarrage a été envoyé mais la console n'a pas répondu à temps. Vérifiez les journaux systemd/NSSM et rechargez manuellement.", - "advanced_restart_failed": "Échec du redémarrage du service (privilèges insuffisants ou service non installé)", - "advanced_save_confirm": "Enregistrer les modifications de ce fichier ? Une sauvegarde de la version précédente sera créée.", - "advanced_unsaved_confirm": "Vous avez des modifications non enregistrées. Les ignorer ?", - "advanced_no_files": "Aucun fichier de configuration disponible sur ce système.", - "advanced_readonly": "lecture seule", - "advanced_missing": "manquant", - "advanced_new_file": "Nouveau fichier (non créé jusqu'à l'enregistrement)", - "advanced_new_file_hint": "Nouveau fichier — ajoutez du contenu et enregistrez", - "advanced_backup_created": "sauvegarde créée", - "advanced_restart_console": "Redémarrez le service de console web (p. ex. systemctl restart betterdesk-console) pour que les modifications .env prennent effet.", - "advanced_restart_goserver": "Redémarrez le serveur Go BetterDesk pour que les modifications de la liste de blocage soient chargées.", - "advanced_restart_systemd": "Après avoir modifié des unités systemd, exécutez : systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Redémarrez le service concerné pour que les modifications prennent effet.", - "advanced_error_unknown": "Fichier de configuration inconnu", - "advanced_error_not_found": "Le fichier n'existe pas", - "advanced_error_not_file": "Le chemin n'est pas un fichier ordinaire", - "advanced_error_too_large": "Le fichier dépasse la taille maximale modifiable (512 Ko)", - "advanced_error_binary": "Les fichiers binaires ne peuvent pas être modifiés dans le panneau", - "advanced_error_invalid": "Contenu de fichier invalide", - "advanced_error_not_writable": "Le fichier n'est pas accessible en écriture par le processus de console", - "advanced_file_console-env": "Environnement de la console (.env)", - "advanced_file_console-env-local": "Substitutions de la console (.env.local)", - "advanced_file_go-blocklist": "Liste de blocage du serveur Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unité de service)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unité de service)", - "advanced_file_console-session-secret": "Secret de session de la console (.session_secret)", - "advanced_file_go-audit-log": "Journal d'audit du serveur Go (audit.jsonl)", - "advanced_file_build-env": "Environnement de compilation de l'agent (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuration supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestration)", - "advanced_restart_none": "Aucun redémarrage de service n'est requis pour ce fichier.", - "enrollment_title": "Inscription de l'appareil (RustDesk)", - "enrollment_desc": "Contrôlez comment les nouveaux clients RustDesk s'inscrivent et comment les opérateurs les approuvent dans la page des demandes d'inscription.", - "enrollment_require_approval": "Approbation de l'opérateur requise (mode géré)", - "enrollment_require_approval_hint": "Lorsqu'activé, les clients inconnus sont mis en file d'attente jusqu'à ce qu'un opérateur les approuve dans les demandes d'inscription.", - "enrollment_rich_approve": "Formulaire d'approbation complet (nom, dossier, groupes, tags)", - "enrollment_rich_approve_hint": "Affiche un dialogue détaillé lors de l'approbation des demandes d'inscription ou d'enregistrement LAN.", - "enrollment_tag_picker": "Sélectionner des tags parmi les tags d'appareils existants", - "enrollment_tag_picker_hint": "Permet aux opérateurs de sélectionner des tags dans la liste utilisée sur la page Appareils plutôt que de les saisir uniquement.", - "enrollment_open_requests": "Demandes d'inscription ouvertes", - "enrollment_pending_count": "{count} demande(s) d'inscription en attente" - }, - "audit": { - "time": "Heure", - "user": "Utilisateur", - "action": "Action", - "details": "Détails", - "action_login": "Connexion", - "action_login_failed": "Erreur de Connexion", - "action_logout": "Deconnexion", - "action_password_change": "Mot de passe modifié", - "action_2fa_enable": "2FA Activé", - "action_2fa_disable": "2FA Désactivé", - "action_user_create": "Utilisateur Créé", - "action_user_update": "Utilisateur Mis à Jour", - "action_user_delete": "Utilisateur Supprimé", - "action_settings_update": "Paramètres Mis à Jour", - "action_device_ban": "Appareil Banni", - "action_device_unban": "Appareils Débanni", - "action_device_delete": "Appareil Supprimé" - }, - "generator": { - "title": "Générateur de configuration client", - "subtitle": "Générer la configuration pour les clients RustDesk", - "config_options": "Options de configuration", - "server_address": "Adresse du serveur", - "server_address_hint": "Nom de Domaine ou adresse IP de votre serveur", - "custom_port": "Port personnalisé", - "port_hint": "Laisser vide pour le port par défaut (21116)", - "relay_server": "Serveur relais", - "relay_placeholder": "Identique au serveur ID si vide", - "relay_hint": "Optionnel : adresse de serveur relais séparée", - "include_key": "Inclure la clé publique dans la configuration", - "generate": "Générer la configuration", - "output": "Informations de configuration", - "usage_title": "Détails des informations de connexion", - "generated": "Configuration générée", - "server_required": "L'adresse du serveur est requise", - "nothing_to_copy": "Générez d'abord une configuration", - "bundles_title": "Packages d’agent", - "new_bundle": "Nouveau package", - "editor_title": "Éditeur de package", - "empty_state": "Sélectionnez un package à gauche ou créez-en un nouveau pour commencer.", - "loading": "Chargement…", - "no_bundles": "Aucun package pour le moment. Créez le premier.", - "bundle_name": "Nom du package", - "bundle_name_hint": "Libellé interne uniquement — non affiché aux utilisateurs finaux.", - "short_link": "Lien de téléchargement court", - "short_link_hint": "Utilisé dans l’URL publique (/d/…). Lettres minuscules, chiffres et tirets uniquement (2–32 caractères). Rempli automatiquement à partir du nom du paquet — raccourcissez-le pour faciliter le partage (p. ex. acme).", - "branding_section": "Marque", - "company_name": "Nom de l’entreprise / marque", - "short_text": "Description courte", - "contact_email": "E-mail de contact", - "contact_phone": "Téléphone de contact", - "contact_url": "Site web de contact", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG ou WebP. Maximum 256 Ko.", - "logo_clear": "Supprimer le logo", - "primary_color": "Couleur principale", - "accent_color": "Couleur de l’en-tête", - "default_lang": "Langue par défaut", - "allow_unattended": "Autoriser l’accès sans surveillance", - "allow_unattended_hint": "Lorsque cette option est activée, l’agent affiche un mot de passe permanent pour l’accès opérateur.", - "save": "Enregistrer le package", - "revoke": "Révoquer", - "unrevoke": "Réactiver", - "revoked": "Révoqué", - "preview_title": "Aperçu en direct", - "preview_hint": "Aspect approximatif de la fenêtre d’agent côté utilisateur final.", - "preview_default_name": "Support BetterDesk", - "preview_status_ready": "Prêt", - "preview_id": "Votre ID", - "preview_password": "Mot de passe", - "preview_chat": "Discuter avec le support", - "preview_settings": "Paramètres (admin uniquement)", - "preview_quit": "Quitter (admin uniquement)", - "download_link_title": "Lien de téléchargement", - "download_link_hint": "Partagez ce lien avec les utilisateurs finaux. Ils verront une page de téléchargement personnalisée. Les anciens liens hex continuent de fonctionner après modification du lien court.", - "open_portal": "Ouvrir", - "created": "Package créé", - "saved": "Package enregistré", - "deleted": "Package supprimé", - "revoked_ok": "Package révoqué", - "unrevoked_ok": "Package réactivé", - "link_copied": "Lien copié dans le presse-papiers", - "copy_failed": "Impossible de copier automatiquement — veuillez copier manuellement", - "unsaved_confirm": "Ignorer les modifications non enregistrées ?", - "confirm_revoke": "Révoquer ce package ? Le lien de téléchargement cessera de fonctionner.", - "confirm_unrevoke": "Réactiver ce package ?", - "confirm_delete": "Supprimer définitivement ce package ? Cette action est irréversible.", - "errors": { - "validation_failed": "Échec de la validation", - "name_required": "Le nom du package est requis", - "company_name_required": "Le nom de l’entreprise est requis", - "logo_invalid": "Le logo doit être un fichier image valide", - "logo_too_large": "Le logo doit faire 256 Ko ou moins", - "logo_read_failed": "Impossible de lire le fichier du logo", - "primary_color_invalid": "La couleur principale doit être une valeur hexadécimale (ex. #2563eb)", - "accent_color_invalid": "La couleur de l’en-tête doit être une valeur hexadécimale (ex. #1e293b)", - "contact_url_invalid": "Le site web de contact doit être une URL valide", - "rebuild_revoked": "Impossible de reconstruire un paquet révoqué — réactivez-le d'abord", - "server_host_invalid": "Entrez un nom de domaine ou une adresse IPv4 valide", - "server_host_required": "L'adresse publique du serveur est requise", - "token_failed": "Impossible de générer le jeton d'inscription — vérifiez la connectivité du serveur", - "slug_invalid": "Le lien court ne peut contenir que des lettres minuscules, des chiffres et des tirets", - "slug_too_short": "Le lien court doit comporter au moins 2 caractères", - "slug_too_long": "Le lien court doit comporter au maximum 32 caractères", - "slug_taken": "Ce lien court est déjà utilisé par un autre paquet" - }, - "legacy_title": "Générateur de configuration client", - "background_color": "Arrière-plan de la fenêtre", - "build_error_hint": "Erreur de compilation", - "build_status_building": "En cours de compilation", - "build_status_failed": "Échoué", - "build_status_pending": "En file d'attente", - "build_status_ready": "Prêt", - "builds_empty": "Aucun build en file d'attente — enregistrez le paquet ou cliquez sur Reconstruire tout.", - "builds_hint": "Installateurs compilés sur ce serveur pour chaque plateforme. Reconstruire après avoir corrigé les erreurs de la chaîne d'outils ou mis à jour les sources de l'agent.", - "builds_loading": "Chargement de l'état de compilation…", - "builds_summary": "{{ready}} prêt · {{pending}} en file d'attente · {{building}} en compilation · {{failed}} échoué", - "builds_title": "Compilations client", - "connection_section": "Connexion au serveur", - "enrollment_per_device": "Par appareil — approuver dans Inscriptions", - "enrollment_token": "Enregistrement de l'appareil", - "enrollment_token_hint": "Chaque installation s'enregistre d'elle-même. Approuvez les nouveaux appareils dans le panneau Inscriptions ; le serveur délivre ensuite une clé d'accès unique par ordinateur.", - "enrollment_token_pending": "Par appareil après approbation", - "enrollment_token_set": "Par appareil — approuver dans Inscriptions", - "header_text_color": "Couleur du texte d'en-tête", - "rebuild_all": "Reconstruire tout", - "rebuild_confirm": "Reconstruire tous les installateurs de plateforme pour ce paquet ? Les artefacts prêts existants seront remplacés.", - "rebuild_queued": "Toutes les compilations de plateformes mises en file d'attente", - "rebuilding_all": "Mise en file d'attente des reconstructions…", - "server_host": "Adresse publique du serveur", - "server_host_hint": "Nom de domaine ou IP publique où les utilisateurs finaux joignent votre serveur BetterDesk. Le port est pris dans la configuration de la console.", - "server_host_placeholder": "support.example.com ou 203.0.113.10", - "status_ready_color": "Couleur de l'indicateur prêt", - "surface_color": "Arrière-plan de la carte", - "text_color": "Couleur du texte", - "text_muted_color": "Couleur du texte atténué", - "use_https": "Utiliser HTTPS / WSS (recommandé)", - "preview_help": "Demander de l'aide" - }, - "server": { - "port": "Port", - "api_port": "Port API", - "id_server": "Serveur ID", - "relay_server": "Serveur relais", - "api_key": "Clé API" - }, - "status": { - "online": "En ligne", - "offline": "Hors ligne", - "banned": "Banni", - "running": "En cours", - "stopped": "Arrêté", - "unknown": "Inconnu", - "checking": "Vérification...", - "label": "Status", - "no_signal": "Pas de signal" - }, - "actions": { - "refresh": "Actualiser", - "copy": "Copier", - "connect": "Connecter", - "connect_desktop": "Connecter via le client de bureau", - "remote_viewer": "Visionneuse distante", - "web_remote": "Bureau distant web", - "details": "Détails", - "edit": "Modifier", - "delete": "Supprimer", - "ban": "Bannir", - "unban": "Débannir", - "save": "Enregistrer", - "cancel": "Annuler", - "confirm": "Confirmer", - "close": "Fermer", - "clear": "Effacer", - "ok": "OK", - "saved": "Enregistré", - "back": "Retour", - "create": "Créer", - "dismiss": "Ignorer", - "view_all": "Tout afficher", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "à l'instant", - "seconds_ago": "Il y a {count} seconde(s)", - "minutes_ago": "Il y a {count} minute(s)", - "hours_ago": "Il y a {count} heure(s)", - "days_ago": "Il y a {count} jour(s)", - "day_mon": "Lun", - "day_tue": "Mar", - "day_wed": "Mer", - "day_thu": "Jeu", - "day_fri": "Ven", - "day_sat": "Sam", - "day_sun": "Dim" - }, - "users": { - "title": "Gestion des Utilisateurs", - "subtitle": "Gérer les utilisateurs de la console et les autorisations", - "add_user": "Ajouter un utilisateur", - "edit_user": "Modifier l'utilisateur", - "username": "Nom d'utilisateur", - "username_placeholder": "Entrez le nom d'utilisateur", - "username_hint": "3-32 caractères, lettres, chiffres et underscores uniquement", - "password": "Mot de passe", - "password_placeholder": "Entrez le mot de passe", - "password_hint": "Minimum 8 caractères avec majuscules, minuscules, chiffres et symboles", - "password_leave_empty": "Laisser vide pour conserver l'actuel", - "role": "Rôle", - "role_admin": "Administrateur", - "role_operator": "Opérateur", - "role_viewer": "Observateur", - "role_pro": "Pro (API seulement)", - "role_super_admin": "Super Administrateur", - "role_server_admin": "Administrateur du serveur", - "role_global_admin": "Administrateur Global", - "role_hint": "Les observateurs peuvent uniquement consulter les données, les opérateurs peuvent gérer les appareils, les administrateurs ont un accès complet", - "created": "Créé", - "last_login": "Dernière connexion", - "never": "Jamais", - "actions": "Actions", - "create": "Créer Utilisateur", - "edit": "Modifier", - "reset_password": "Réinitialiser le mot de passe", - "new_password": "Nouveau mot de passe", - "delete_title": "Supprimer l'utilisateur", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer l'utilisateur {username} ?", - "delete_success": "Utilisateur supprimé avec succès", - "user_created": "Utilisateur créé avec succès", - "user_updated": "Utilisateur mis à jour avec succès", - "password_reset_success": "Mot de passe réinitialisé avec succès", - "empty_title": "Aucun Utilisateur trouvé", - "empty_text": "Ajouter des utilisateurs pour gérer les permissions d'accès à la console", - "fill_required": "Veuillez remplir tous les champs obligatoires", - "invalid_username": "Le nom d'utilisateur doit contenir 3-32 caractères, lettres, chiffres et underscores uniquement", - "username_exists": "Le nom d'utilisateur existe déjà", - "weak_password": "Le mot de passe est trop faible", - "password_too_short": "Le mot de passe doit contenir au moins 8 caractères", - "invalid_role": "Rôle invalide", - "cannot_demote_self": "Vous ne pouvez pas vous rétrograder", - "cannot_delete_self": "Vous ne pouvez pas supprimer votre propre compte", - "last_admin": "Impossible de supprimer le dernier administrateur", - "admin_only": "Cette fonctionnalité est réservée aux administrateurs", - "password_required": "Le mot de passe est requis", - "not_found": "Utilisateur Introuvable", - "strength_weak": "Faible", - "strength_medium": "Moyen", - "strength_strong": "Fort", - "security_tips_title": "Bonnes pratiques de sécurité", - "tip_strong_passwords": "Utilisez des mots de passe forts et uniques pour chaque utilisateur", - "tip_unique_accounts": "Créez des comptes individuels pour chaque personne", - "tip_viewer_role": "Utilisez le rôle observateur pour les utilisateurs qui n'ont besoin que d'un accès en lecture", - "tip_operator_role": "Utilisez le rôle opérateur pour les utilisateurs qui doivent gérer les appareils mais pas les utilisateurs", - "tip_audit_logs": "Vérifiez régulièrement les journaux d'audit pour détecter les activités suspectes", - "organizations": "Organisations", - "user_organizations": "Organisations pour {username}", - "no_organizations": "L'utilisateur n'est affecté à aucune organisation", - "org_removed": "Suppression de l'affectation à une organisation", - "server_role_label": "Rôle serveur", - "server_role_hint": "Détermine ce que l’utilisateur peut faire dans toute la console (accès au panneau, configuration serveur, audit, etc.).", - "org_membership_section": "Appartenance aux organisations", - "org_membership_hint": "Un utilisateur peut appartenir à plusieurs organisations. Le rôle d’organisation ne contrôle que les autorisations dans cette organisation et reste indépendant du rôle serveur ci-dessus.", - "column_organizations": "Organisations", - "no_orgs_short": "—", - "org_count_one": "{count} organisation", - "org_count_many": "{count} organisations", - "all_orgs_assigned": "L’utilisateur est déjà membre de toutes les organisations.", - "user_groups": "Groupes d’utilisateurs", - "user_groups_hint": "Les groupes d’utilisateurs peuvent accorder l’accès à certains groupes d’appareils.", - "loading_user_groups": "Chargement des groupes d’utilisateurs...", - "no_user_groups": "Aucun groupe d’utilisateurs disponible", - "create_user_group": "Créer un groupe", - "edit_user_group": "Modifier le groupe d’utilisateurs", - "delete_user_group": "Supprimer le groupe d’utilisateurs", - "delete_user_group_confirm": "Supprimer le groupe d’utilisateurs {name} ? Les membres perdront l’accès accordé par ce groupe.", - "user_group_created": "Groupe d’utilisateurs créé", - "user_group_updated": "Groupe d’utilisateurs mis à jour", - "user_group_deleted": "Groupe d’utilisateurs supprimé", - "user_group_not_found": "Groupe d’utilisateurs introuvable", - "group_name": "Nom du groupe", - "group_name_placeholder": "Opérateurs", - "group_note": "Note", - "group_note_placeholder": "Note facultative", - "group_name_required": "Le nom du groupe est requis", - "group_members_count": "{count} membres", - "provider": "Fournisseur", - "provider_local": "Local", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Géré par le fournisseur d'identité", - "provider_managed_hint": "Ce compte est géré par un fournisseur d'identité externe (LDAP/AD ou SSO). Le mot de passe et le rôle sont contrôlés par le fournisseur et ne peuvent pas être modifiés ici." - }, - "folders": { - "title": "Dossiers", - "create": "Créer un dossier", - "edit": "Modifier un dossier", - "delete": "Supprimer un dossier", - "name": "Nom du dossier", - "name_placeholder": "Entrez le nom du dossier", - "name_required": "Le nom du dossier est obligatoire", - "name_too_long": "Le nom du dossier est trop long (max 50 caractères)", - "color": "Couleur", - "icon": "Icône", - "not_found": "Dossier Introuvable", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce dossier ? Les appareils seront désassignés.", - "delete_success": "Dossier supprimé avec succès", - "created": "Dossier Créé", - "updated": "Dossier mis à jour avec succès", - "no_devices_selected": "Aucun appareil sélectionné", - "devices_moved": "Appareils déplacés avec succès", - "device_assigned": "Appareil assigné au dossier", - "unassigned": "Non assigné", - "all_devices": "Tous les appareils", - "drag_hint": "Glissez les appareils dans les dossiers pour les organiser", - "move_to": "Déplacer vers", - "toggle_sidebar": "Basculer la barre latérale" - }, + "no_groups": "Aucun groupe pour le moment", + "manual_groups": "Groupes manuels", + "dynamic_memberships": "Appartenances dynamiques", + "group_allowed_user_groups": "Groupes d’utilisateurs autorisés", + "group_allowed_user_groups_hint": "Les utilisateurs des groupes sélectionnés peuvent accéder à ce groupe d’appareils.", + "no_user_groups": "Aucun groupe d’utilisateurs", + "edit_group": "Modifier le groupe", + "delete_group": "Supprimer le groupe", + "delete_group_confirm": "Supprimer le groupe d’appareils {name} ?", + "group_deleted": "Groupe d’appareils supprimé", + "folder_group_readonly": "Les groupes associés aux dossiers sont gérés depuis les dossiers.", + "manage_user_groups": "Gérer les groupes d’utilisateurs", + "restore_failed": "Échec de la restauration de l'appareil", + "no_signal_tooltip": "Le client a contacté l'API récemment mais n'est pas enregistré sur le serveur de signal (UDP :21116). Redémarrez le client après la migration du serveur.", + "per_page": "Par page" + }, + "keys": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur BetterDesk", + "public_key": "Clé publique", + "qr_code": "Code QR", + "server_info": "Informations du serveur", + "download": "Télécharger la clé", + "show_qr": "Afficher le code QR", + "qr_hint": "Scannez ce code QR avec l'application mobile RustDesk", + "no_key": "Aucune clé publique trouvée", + "no_key_to_copy": "Aucune clé à copier", + "no_qr": "Code QR non disponible", + "download_success": "Fichier de clé téléchargé", + "not_found": "Introuvable", + "api_not_found": "Clé API non trouvé" + }, + "settings": { + "title": "Paramètres", + "subtitle": "Configuration de la console et paramètres du compte", + "tab_general": "Général", + "tab_server": "Serveur", + "tab_branding": "Image de marque", + "tab_backup": "Sauvegarde", + "language": "Langue", + "change_password": "Changer le mot de passe", + "password_desc": "Mettre à jour le mot de passe de votre compte", + "current_password": "Mot de passe actuel", + "new_password": "Nouveau mot de passe", + "confirm_password": "Confirmer le mot de passe", + "save_password": "Mettre à jour le mot de passe", + "password_changed": "Mot de passe modifié avec succès", + "fill_all_fields": "Veuillez remplir tous les champs", + "passwords_not_match": "Les mots de passe ne correspondent pas", + "password_requirements": "Exigences du mot de passe", + "password_requirements_not_met": "Le mot de passe ne répond pas aux exigences", + "req_length": "Au moins 8 caractères", + "req_uppercase": "Au moins une lettre majuscule", + "req_lowercase": "Au moins une lettre minuscule", + "req_number": "Au moins un chiffre", + "server_info": "Informations du serveur", + "version": "Version", + "database": "Base de données", + "uptime": "Temps de fonctionnement", + "audit_log": "Journal d'audit", + "audit_desc": "Activité récente de la console", + "no_audit_logs": "Aucun journal d'audit trouvé", + "backend_title": "Serveur Backend", + "backend_desc": "Choisissez quel serveur backend à utiliser pour la gestion des appareils et les services de signalisation/relais.", + "backend_original": "Origine", + "backend_enhanced": "Amélioré", + "backend_rustdesk_desc": "Serveurs de signalisation et relais RustDesk standard (hbbs + hbbr). API HTTP de base avec un nombre limité de terminaux.", + "backend_betterdesk_desc": "Serveur amélioré basé sur GO avec API REST complète, authentification JWT, liste de blocage, balises, événements WebSocket en temps réel et journal d'audit.", + "backend_feature_signal": "Serveur de signalisation (enregistrement d'identifiant)", + "backend_feature_relay": "Serveur relais (relais de connexion)", + "backend_feature_basic_api": "API REST basique", + "backend_feature_full_api": "API REST complète (34+ terminaux)", + "backend_feature_jwt": "Authentification JWT & TOTP 2FA", + "backend_feature_blocklist": "Gestion de liste de blocage IP/Identifiant", + "backend_feature_tags": "Balises et regroupement des appareils", + "backend_feature_audit": "Journalisation des événements d'audit", + "backend_feature_websocket": "Événements WebSocket en temps réel", + "backend_connection": "Connexion", + "backend_api_url": "URL de l'API", + "backend_test": "Tester la connexion", + "backend_testing": "Test en cours...", + "backend_save": "Appliquer le backend", + "backend_saved": "Serveur Backend modifié avec succès. Les données des appareils seront désormais gérées par le nouveau Backend.", + "backend_save_failed": "Échec du changement de serveur Backend", + "backend_test_success": "Connexion réussie ! Le serveur est accessible.", + "backend_test_failed": "Échec de la connexion. Le serveur est inaccessible.", + "backend_confirm_switch": "Êtes-vous sûr de vouloir changer le serveur backend ? Cela modifiera comment sont gérés les appareils.", + "backend_unreachable": "Changement impossible : le serveur cible est inaccessible. Démarrez d'abord le serveur.", + "invalid_backend": "Sélection de backend invalide. Choisissez 'rustdesk' ou 'betterdesk'.", + "backend_status_running": "Connecté", + "backend_status_unreachable": "Inaccessible", + "backend_status_error": "Erreur", + "backend_status_unknown": "Inconnu", + "totp_title": "Authentification à deux facteurs", + "totp_desc": "Ajoutez une couche de sécurité supplémentaire avec les applications d'authentification TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", + "totp_enabled": "2FA activée", + "totp_enabled_desc": "Votre compte est protégé par l'authentification à deux facteurs.", + "totp_disabled": "2FA non activée", + "totp_disabled_desc": "Activez l'authentification à deux facteurs pour une sécurité supplémentaire du compte.", + "totp_setup": "Activer 2FA", + "totp_disable": "Désactiver 2FA", + "totp_step1": "Installez une application d'authentification sur votre téléphone", + "totp_step2": "Scannez le code QR ci-dessous", + "totp_step3": "Entrez le code à 6 chiffres pour vérifier", + "totp_manual_key": "Clé manuelle", + "totp_enter_code": "Veuillez entrer le code de verification", + "totp_verify_enable": "Vérifier & Activer", + "totp_enabled_success": "Authentification à deux facteurs activée !", + "totp_recovery_warning": "Conservez ces codes de récupération en lieu sûr. Chaque code ne peut être utilisé qu'une seule fois. Si vous perdez l'accès à votre application d'authentification, vous pouvez utiliser ces codes pour vous connecter.", + "totp_done": "Effectué", + "totp_disable_warning": "Désactiver l'authentification à deux facteurs rendra votre compte moins sécurisé. Entrez votre mot de passe pour confirmer.", + "totp_disabled_success": "L'authentification à deux facteurs a été désactivée.", + "tutorials_title": "Tutoriels et guides", + "tutorials_desc": "Contrôlez les visites guidées et les aides contextuelles affichées dans la console", + "tutorials_enabled": "Activer les tutoriels", + "tutorials_enabled_hint": "Lorsque cette option est désactivée, les tutoriels ne démarrent pas automatiquement et le bouton d’aide est masqué", + "tutorials_reset_hint": "Marquer tous les tutoriels comme non vus afin de les afficher à nouveau", + "tutorials_enabled_toast": "Tutoriels activés", + "tutorials_disabled_toast": "Tutoriels désactivés", + "tutorials_reset_toast": "Tous les tutoriels ont été réinitialisés", + "tab_auth": "Authentification", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Configurez l’authentification externe via LDAP ou Active Directory. Les utilisateurs pourront se connecter avec leurs identifiants de domaine.", + "ldap_enabled": "Activer l’authentification LDAP", + "ldap_enabled_hint": "Lorsque cette option est activée, les utilisateurs peuvent se connecter avec leurs identifiants LDAP/AD. Les comptes locaux restent disponibles en solution de secours.", + "ldap_connection": "Connexion au serveur", + "ldap_host": "Hôte", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Ignorer la vérification TLS", + "ldap_timeout": "Délai de connexion (s)", + "ldap_timeout_hint": "Nombre de secondes à attendre la réponse du serveur LDAP", + "ldap_bind_mode": "Mode de liaison", + "ldap_direct_bind": "Liaison directe", + "ldap_direct_bind_hint": "Effectue une liaison directe avec un modèle DN au lieu d’utiliser un compte de service pour la recherche.", + "ldap_bind_dn": "DN de liaison (compte de service)", + "ldap_bind_dn_hint": "Nom distinctif d’un compte de service en lecture seule utilisé pour rechercher les utilisateurs.", + "ldap_bind_password": "Mot de passe de liaison", + "ldap_base_dn": "DN de base", + "ldap_base_dn_hint": "Base de recherche pour trouver les utilisateurs, par ex. dc=example,dc=com", + "ldap_user_filter": "Filtre utilisateur", + "ldap_user_filter_hint": "Filtre LDAP pour trouver les utilisateurs. Utilisez {{username}} comme espace réservé. Par défaut : (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Modèle DN de liaison directe", + "ldap_direct_bind_dn_hint": "Modèle DN pour la liaison directe. Utilisez {{username}} comme espace réservé, par ex. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Attributs utilisateur", + "ldap_attr_id": "Attribut du nom d’utilisateur", + "ldap_attr_email": "Attribut e-mail", + "ldap_attr_name": "Attribut du nom affiché", + "ldap_group_mapping": "Mappage groupe → rôle", + "ldap_group_base_dn": "DN de base des groupes", + "ldap_group_base_dn_hint": "Laissez vide pour utiliser le DN de base principal", + "ldap_group_filter": "Filtre de groupe", + "ldap_group_attr_name": "Attribut du nom de groupe", + "ldap_default_role": "Rôle par défaut", + "ldap_default_role_hint": "Rôle attribué aux utilisateurs dont les groupes LDAP ne correspondent à aucun mappage", + "ldap_role_viewer": "Lecteur", + "ldap_role_operator": "Opérateur", + "ldap_role_admin": "Administrateur", + "ldap_group_role_map": "Carte groupes → rôles", + "ldap_group_role_map_hint": "Associez les groupes LDAP aux rôles BetterDesk. Format : GroupDN=rôle séparé par | (pipe). Exemple : CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Tester la connexion", + "ldap_testing": "Test en cours...", + "ldap_test_success": "Connexion réussie ! Le serveur LDAP est joignable et les identifiants de liaison sont valides.", + "ldap_test_failed": "Échec de la connexion", + "ldap_save": "Enregistrer la configuration LDAP", + "ldap_saved": "Configuration LDAP enregistrée avec succès", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Configurez l’authentification unique via un fournisseur OpenID Connect (Azure AD, Okta, Google, Keycloak, etc.).", + "oidc_enabled": "Activer l’authentification OIDC", + "oidc_enabled_hint": "Autoriser les utilisateurs à se connecter avec un fournisseur d’identité externe", + "oidc_provider": "Fournisseur d’identité", + "oidc_display_name": "Nom affiché du bouton", + "oidc_display_name_hint": "Texte affiché sur le bouton de connexion (par ex. Azure AD, Okta)", + "oidc_issuer_url": "URL de l’émetteur", + "oidc_issuer_url_hint": "URL de l’émetteur OpenID Connect (la découverte sera automatique)", + "oidc_client_id": "ID client", + "oidc_client_secret": "Secret client", + "oidc_redirect_url": "URL de redirection (rappel)", + "oidc_redirect_url_hint": "Doit correspondre exactement à ce qui est configuré dans votre IdP. Généralement : http(s)://votre-serveur:21114/api/auth/oidc/callback", + "oidc_scopes": "Portées", + "oidc_use_pkce": "Utiliser PKCE (recommandé)", + "oidc_auto_discovery": "Découverte automatique", + "oidc_allow_signup": "Créer automatiquement les utilisateurs", + "oidc_manual_endpoints": "URL des points de terminaison manuels", + "oidc_authorization_url": "Point de terminaison d’autorisation", + "oidc_token_url": "Point de terminaison des jetons", + "oidc_userinfo_url": "Point de terminaison UserInfo", + "oidc_claim_mapping": "Mappage des revendications", + "oidc_claim_username": "Revendi­cation du nom d’utilisateur", + "oidc_claim_email": "Revendi­cation e-mail", + "oidc_claim_name": "Revendi­cation du nom affiché", + "oidc_claim_groups": "Revendi­cation des groupes", + "oidc_role_mapping": "Mappage des rôles", + "oidc_default_role": "Rôle par défaut", + "oidc_group_role_map": "Mappage groupe → rôle", + "oidc_group_role_map_hint": "Un mappage par ligne : nom_groupe=rôle (par ex. admins=admin, operators=operator)", + "oidc_test_discovery": "Tester la découverte", + "oidc_testing": "Test en cours...", + "oidc_test_success": "Découverte réussie ! Points de terminaison résolus.", + "oidc_test_failed": "Échec de la découverte", + "oidc_issuer_required": "L’URL de l’émetteur est requise pour tester la découverte", + "oidc_save": "Enregistrer la configuration OIDC", + "oidc_saved": "Configuration OIDC enregistrée avec succès", + "tab_advanced": "Avancé", + "connection_mode_title": "Stratégie de connexion", + "connection_mode_desc": "Contrôlez comment les clients de bureau RustDesk se connectent : P2P direct (hole punch) si possible, ou toujours via relais.", + "connection_mode_label": "Mode de connexion par défaut", + "connection_mode_p2p_first": "P2P en premier (recommandé) — essayer la connexion directe, se rabattre sur le relais", + "connection_mode_relay_only": "Relais uniquement — toutes les sessions utilisent le serveur relais", + "connection_mode_advanced": "Options avancées", + "connection_mode_fallback_ms": "Délai d'expiration de basculement P2P (ms)", + "connection_mode_same_nat_relay": "Forcer le relais lorsque les deux pairs partagent la même IP publique (NAT hairpin)", + "connection_mode_network_hint": "P2P nécessite que le port UDP 21116 soit accessible entre les clients. Signal TCP 21116, relais TCP 21117, test NAT 21115 doivent être ouverts sur le serveur. Les navigateurs web utilisent toujours le relais.", + "connection_mode_save": "Enregistrer", + "connection_mode_save_restart": "Enregistrer et redémarrer le serveur", + "connection_mode_saved": "Mode de connexion enregistré", + "connection_mode_restart_started": "Redémarrage du serveur initié", + "connection_mode_restart_failed": "Échec du redémarrage du serveur", + "connection_mode_not_configurable": "Le mode de connexion ne peut pas être modifié sur ce déploiement (aucune unité systemd ou docker-compose trouvé)", + "connection_mode_compose_error": "Impossible de trouver la section d'environnement du serveur dans docker-compose.yml", + "connection_mode_source_saved": "Enregistré dans", + "connection_mode_source_defaults": "Utilisation des valeurs par défaut du serveur (non modifiables depuis le panneau)", + "connection_mode_runtime": "Serveur actif", + "advanced_title": "Fichiers de configuration", + "advanced_desc": "Modifiez directement les fichiers de configuration du serveur. Les modifications peuvent nécessiter un redémarrage des services. Une copie de sauvegarde est créée avant chaque enregistrement.", + "advanced_warning": "Ces fichiers contiennent des secrets (clés API, mots de passe de base de données, secrets de session). Ne modifiez que si vous savez ce que vous faites. Une syntaxe incorrecte peut empêcher le serveur de démarrer.", + "advanced_files_label": "Fichiers", + "advanced_select_file": "Sélectionnez un fichier dans la liste pour afficher ou modifier son contenu.", + "advanced_reload": "Recharger", + "advanced_save": "Enregistrer le fichier", + "advanced_apply_restart": "Appliquer (redémarrer le service)", + "advanced_saved": "Fichier de configuration enregistré", + "advanced_restart_after_save": "Configuration enregistrée. Redémarrer le service concerné maintenant pour que les modifications prennent effet ?", + "advanced_restart_confirm": "Redémarrer le(s) service(s) BetterDesk concerné(s) ? Les connexions actives peuvent être brièvement interrompues.", + "advanced_restart_console_confirm": "Redémarrer le service de console web ? Votre session de navigateur se déconnectera brièvement et la page se rechargera lorsque la console sera de retour.", + "advanced_restart_started": "Redémarrage du service initié", + "advanced_restart_done": "Console redémarrée — rechargement de la page…", + "advanced_restart_polling": "En attente du retour en ligne de la console…", + "advanced_restart_timeout": "Le redémarrage a été envoyé mais la console n'a pas répondu à temps. Vérifiez les journaux systemd/NSSM et rechargez manuellement.", + "advanced_restart_failed": "Échec du redémarrage du service (privilèges insuffisants ou service non installé)", + "advanced_save_confirm": "Enregistrer les modifications de ce fichier ? Une sauvegarde de la version précédente sera créée.", + "advanced_unsaved_confirm": "Vous avez des modifications non enregistrées. Les ignorer ?", + "advanced_no_files": "Aucun fichier de configuration disponible sur ce système.", + "advanced_readonly": "lecture seule", + "advanced_missing": "manquant", + "advanced_new_file": "Nouveau fichier (non créé jusqu'à l'enregistrement)", + "advanced_new_file_hint": "Nouveau fichier — ajoutez du contenu et enregistrez", + "advanced_backup_created": "sauvegarde créée", + "advanced_restart_console": "Redémarrez le service de console web (p. ex. systemctl restart betterdesk-console) pour que les modifications .env prennent effet.", + "advanced_restart_goserver": "Redémarrez le serveur Go BetterDesk pour que les modifications de la liste de blocage soient chargées.", + "advanced_restart_systemd": "Après avoir modifié des unités systemd, exécutez : systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Redémarrez le service concerné pour que les modifications prennent effet.", + "advanced_error_unknown": "Fichier de configuration inconnu", + "advanced_error_not_found": "Le fichier n'existe pas", + "advanced_error_not_file": "Le chemin n'est pas un fichier ordinaire", + "advanced_error_too_large": "Le fichier dépasse la taille maximale modifiable (512 Ko)", + "advanced_error_binary": "Les fichiers binaires ne peuvent pas être modifiés dans le panneau", + "advanced_error_invalid": "Contenu de fichier invalide", + "advanced_error_not_writable": "Le fichier n'est pas accessible en écriture par le processus de console", + "advanced_file_console-env": "Environnement de la console (.env)", + "advanced_file_console-env-local": "Substitutions de la console (.env.local)", + "advanced_file_go-blocklist": "Liste de blocage du serveur Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unité de service)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unité de service)", + "advanced_file_console-session-secret": "Secret de session de la console (.session_secret)", + "advanced_file_go-audit-log": "Journal d'audit du serveur Go (audit.jsonl)", + "advanced_file_build-env": "Environnement de compilation de l'agent (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuration supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestration)", + "advanced_restart_none": "Aucun redémarrage de service n'est requis pour ce fichier.", + "enrollment_title": "Inscription de l'appareil (RustDesk)", + "enrollment_desc": "Contrôlez comment les nouveaux clients RustDesk s'inscrivent et comment les opérateurs les approuvent dans la page des demandes d'inscription.", + "enrollment_require_approval": "Approbation de l'opérateur requise (mode géré)", + "enrollment_require_approval_hint": "Lorsqu'activé, les clients inconnus sont mis en file d'attente jusqu'à ce qu'un opérateur les approuve dans les demandes d'inscription.", + "enrollment_rich_approve": "Formulaire d'approbation complet (nom, dossier, groupes, tags)", + "enrollment_rich_approve_hint": "Affiche un dialogue détaillé lors de l'approbation des demandes d'inscription ou d'enregistrement LAN.", + "enrollment_tag_picker": "Sélectionner des tags parmi les tags d'appareils existants", + "enrollment_tag_picker_hint": "Permet aux opérateurs de sélectionner des tags dans la liste utilisée sur la page Appareils plutôt que de les saisir uniquement.", + "enrollment_open_requests": "Demandes d'inscription ouvertes", + "enrollment_pending_count": "{count} demande(s) d'inscription en attente" + }, + "audit": { + "time": "Heure", + "user": "Utilisateur", + "action": "Action", + "details": "Détails", + "action_login": "Connexion", + "action_login_failed": "Erreur de Connexion", + "action_logout": "Deconnexion", + "action_password_change": "Mot de passe modifié", + "action_2fa_enable": "2FA Activé", + "action_2fa_disable": "2FA Désactivé", + "action_user_create": "Utilisateur Créé", + "action_user_update": "Utilisateur Mis à Jour", + "action_user_delete": "Utilisateur Supprimé", + "action_settings_update": "Paramètres Mis à Jour", + "action_device_ban": "Appareil Banni", + "action_device_unban": "Appareils Débanni", + "action_device_delete": "Appareil Supprimé" + }, + "generator": { + "title": "Générateur de configuration client", + "subtitle": "Générer la configuration pour les clients RustDesk", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Fonctionnalité précoce — le générateur de bundles agent est en développement actif.", + "config_options": "Options de configuration", + "server_address": "Adresse du serveur", + "server_address_hint": "Nom de Domaine ou adresse IP de votre serveur", + "custom_port": "Port personnalisé", + "port_hint": "Laisser vide pour le port par défaut (21116)", + "relay_server": "Serveur relais", + "relay_placeholder": "Identique au serveur ID si vide", + "relay_hint": "Optionnel : adresse de serveur relais séparée", + "include_key": "Inclure la clé publique dans la configuration", + "generate": "Générer la configuration", + "output": "Informations de configuration", + "usage_title": "Détails des informations de connexion", + "generated": "Configuration générée", + "server_required": "L'adresse du serveur est requise", + "nothing_to_copy": "Générez d'abord une configuration", + "bundles_title": "Packages d’agent", + "new_bundle": "Nouveau package", + "editor_title": "Éditeur de package", + "empty_state": "Sélectionnez un package à gauche ou créez-en un nouveau pour commencer.", + "loading": "Chargement…", + "no_bundles": "Aucun package pour le moment. Créez le premier.", + "bundle_name": "Nom du package", + "bundle_name_hint": "Libellé interne uniquement — non affiché aux utilisateurs finaux.", + "short_link": "Lien de téléchargement court", + "short_link_hint": "Utilisé dans l’URL publique (/d/…). Lettres minuscules, chiffres et tirets uniquement (2–32 caractères). Rempli automatiquement à partir du nom du paquet — raccourcissez-le pour faciliter le partage (p. ex. acme).", + "branding_section": "Marque", + "company_name": "Nom de l’entreprise / marque", + "short_text": "Description courte", + "contact_email": "E-mail de contact", + "contact_phone": "Téléphone de contact", + "contact_url": "Site web de contact", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG ou WebP. Maximum 256 Ko.", + "logo_clear": "Supprimer le logo", + "primary_color": "Couleur principale", + "accent_color": "Couleur de l’en-tête", + "default_lang": "Langue par défaut", + "allow_unattended": "Autoriser l’accès sans surveillance", + "allow_unattended_hint": "Lorsque cette option est activée, l’agent affiche un mot de passe permanent pour l’accès opérateur.", + "save": "Enregistrer le package", + "revoke": "Révoquer", + "unrevoke": "Réactiver", + "revoked": "Révoqué", + "preview_title": "Aperçu en direct", + "preview_hint": "Aspect approximatif de la fenêtre d’agent côté utilisateur final.", + "preview_default_name": "Support BetterDesk", + "preview_status_ready": "Prêt", + "preview_id": "Votre ID", + "preview_password": "Mot de passe", + "preview_chat": "Discuter avec le support", + "preview_settings": "Paramètres (admin uniquement)", + "preview_quit": "Quitter (admin uniquement)", + "download_link_title": "Lien de téléchargement", + "download_link_hint": "Partagez ce lien avec les utilisateurs finaux. Ils verront une page de téléchargement personnalisée. Les anciens liens hex continuent de fonctionner après modification du lien court.", + "open_portal": "Ouvrir", + "created": "Package créé", + "saved": "Package enregistré", + "deleted": "Package supprimé", + "revoked_ok": "Package révoqué", + "unrevoked_ok": "Package réactivé", + "link_copied": "Lien copié dans le presse-papiers", + "copy_failed": "Impossible de copier automatiquement — veuillez copier manuellement", + "unsaved_confirm": "Ignorer les modifications non enregistrées ?", + "confirm_revoke": "Révoquer ce package ? Le lien de téléchargement cessera de fonctionner.", + "confirm_unrevoke": "Réactiver ce package ?", + "confirm_delete": "Supprimer définitivement ce package ? Cette action est irréversible.", "errors": { - "forbidden_title": "Accès refusé", - "forbidden_message": "Vous n'avez pas la permission d'accéder à cette ressource.", - "not_found_title": "Page non trouvée", - "not_found_message": "La page que vous recherchez n'existe pas ou a été déplacée.", - "server_error_title": "Erreur serveur", - "server_error_message": "Un problème est survenu. Veuillez réessayer plus tard.", - "go_home": "Accueil", - "try_again": "Réessayer", - "load_devices_failed": "Échec du chargement des appareils", - "load_key_failed": "Échec du chargement de la clé", - "load_qr_failed": "Échec du chargement du code QR", - "load_audit_failed": "Échec du chargement du journal d'audit", - "load_users_failed": "Échec du chargement des utilisateurs", - "load_folders_failed": "Échec du chargement des dossiers", - "download_failed": "Échec du téléchargement", - "logout_failed": "Échec de la déconnexion", - "password_change_failed": "Échec du changement de mot de passe", - "language_change_failed": "Échec du changement de langue", - "ban_failed": "Échec du bannissement de l'appareil", - "unban_failed": "Échec du débannissement de l'appareil", - "delete_failed": "Échec de la suppression de l'appareil", - "change_id_failed": "Échec de la modification de l'identifiant de l'appareil", - "bulk_delete_failed": "Échec de la suppression des appareils", - "sync_failed": "Échec de la synchronisation", - "error": "Erreur", - "not_found": "Introuvable", - "server_error": "Erreur du serveur", - "load_device_failed": "Échec du chargement de l'appareil", - "load_orgs_failed": "Échec du chargement des organisations" + "validation_failed": "Échec de la validation", + "name_required": "Le nom du package est requis", + "company_name_required": "Le nom de l’entreprise est requis", + "logo_invalid": "Le logo doit être un fichier image valide", + "logo_too_large": "Le logo doit faire 256 Ko ou moins", + "logo_read_failed": "Impossible de lire le fichier du logo", + "primary_color_invalid": "La couleur principale doit être une valeur hexadécimale (ex. #2563eb)", + "accent_color_invalid": "La couleur de l’en-tête doit être une valeur hexadécimale (ex. #1e293b)", + "contact_url_invalid": "Le site web de contact doit être une URL valide", + "rebuild_revoked": "Impossible de reconstruire un paquet révoqué — réactivez-le d'abord", + "server_host_invalid": "Entrez un nom de domaine ou une adresse IPv4 valide", + "server_host_required": "L'adresse publique du serveur est requise", + "token_failed": "Impossible de générer le jeton d'inscription — vérifiez la connectivité du serveur", + "slug_invalid": "Le lien court ne peut contenir que des lettres minuscules, des chiffres et des tirets", + "slug_too_short": "Le lien court doit comporter au moins 2 caractères", + "slug_too_long": "Le lien court doit comporter au maximum 32 caractères", + "slug_taken": "Ce lien court est déjà utilisé par un autre paquet" }, - "remote": { - "title": "Bureau à Distance", - "connecting": "Connexion en cours...", - "waiting_password": "En attente du mot de passe", - "authenticating": "Authentification...", - "streaming": "Connecté", - "disconnected": "Déconnecté", - "error": "Erreur", - "status_idle": "Inactif", - "password_required": "Le mot de passe est requis", - "enter_password_for": "Entrez le mot de passe pour l'appareil", - "password_placeholder": "Mot de passe pour l'appareil", - "connect": "Connecter", - "reconnect": "Reconnecter", - "disconnect": "Déconnecter", - "back_to_devices": "Retour aux appareils", - "fullscreen": "Plein écran", - "toggle_audio": "Activer/désactiver le son", - "send_keys": "Envoyer des touches de commande", - "scale_mode": "Mode de mise à l'échelle", - "scale_fit": "Adapter à la fenêtre", - "scale_fill": "Remplir la fenêtre", - "scale_original": "Taille originale (1:1)", - "scale_stretch": "Ajustement automatique", - "actions": "Actions", - "lock_screen": "Verrouiller l'écran", - "restart_remote": "Redémarrer l'appareil distant", - "refresh_screen": "Rafraîchir l'écran", - "clipboard_paste": "Coller depuis le presse-papiers", - "block_input": "Bloquer la saisie", - "display_settings": "Paramètres d'affichage", - "image_quality": "Qualité d'image", - "quality_best": "Meilleure (qualité optimale, 60 images par seconde)", - "quality_balanced": "Équilibrée", - "quality_low": "Performance", - "show_cursor": "Afficher le curseur distant", - "lock_after_session": "Verrouiller après la session", - "privacy_mode": "Mode confidentiel", - "disable_clipboard": "Désactiver le presse-papiers", - "chat": "Discussion", - "chat_placeholder": "Écrivez un message...", - "record": "Enregistrer l'écran", - "view_only": "Affichage seulement", - "pin_toolbar": "Épingler la barre d'outils", - "monitors": "Écrans", - "select_monitor": "Sélectionner un écran", - "quality_speed": "Vitesse (basse qualité, 60 images par seconde)", - "quality_quality": "Qualité (Optimale, 30 images par seconde)", - "recording_started": "L'enregistrement a commencé", - "recording_stopped": "L'enregistrement s'est arrêté", - "download_recording": "Télécharger l'enregistrement", - "e2e_encrypted": "Chiffrement de bout en bout", - "e2e_key_exchange": "Établissement d'un canal sécurisé...", - "confirm_restart": "Êtes-vous sûr de vouloir redémarrer l'appareil distant ?", - "webcodecs_not_supported": "Votre navigateur ne prend pas en charge l'API WebCodecs. Veuillez utiliser Chrome 94+ ou Edge 94+.", - "webcodecs_insecure_context": "WebCodecs indisponible en HTTP. La vidéo utilise un décodeur logiciel. Pour de meilleures performances, utilisez HTTPS.", - "webcodecs_fallback_active": "Décodeur vidéo logiciel actif (performances limitées)", - "click_to_start": "Cliquez pour démarrer", - "autoplay_blocked": "Le navigateur nécessite une intervention de l'utilisateur pour démarrer la vidéo et le son.", - "start_playback": "Démarrer la lecture", - "new_connection": "Nouvelle connexion", - "device_id_placeholder": "Saisir l'identifiant de l'appareil", - "http_warning": "Mode HTTP : limité au décodage logiciel H.264 (~15 images par seconde). Utilisez HTTPS pour des performances optimales (WebCodecs, VP9, 60 images par seconde).", - "file_transfer": "Transfert de fichiers", - "file_upload": "Transférer", - "file_download": "Télécharger", - "file_empty": "Ce dossier est vide", - "file_transfers": "Transferts", - "file_complete": "Terminé", - "file_error": "Échec du transfert", - "file_show_hidden": "Afficher les fichiers cachés", - "file_new_folder": "Nouveau dossier", - "file_new_folder_prompt": "Entrez le nom du dossier :", - "file_parent": "Dossier parent", - "file_root": "Racine", - "file_rename": "Renommer", - "file_rename_prompt": "Entrez le nouveau nom :", - "file_delete_confirm": "Êtes-vous sûr de vouloir supprimer cet élément ?", - "file_cancelled": "Transfert annulé", - "2fa_required": "Verification 2FA requise", - "2fa_hint": "Saisissez le code à 6 chiffres de votre application d'authentification", - "2fa_invalid": "Entrez un code à 6 chiffres valide", - "verify": "Vérifier", - "use_cdap_fallback": "Utiliser la visionneuse CDAP", - "cdap_fallback_hint": "Ouvre le viewer JPEG léger qui utilise bd-signal/CDAP au lieu du relais RustDesk. Utile quand le pair est hors ligne sur le relais mais joignable via le canal de gestion de l'agent.", - "clipboard_empty": "Le presse-papiers est vide", - "clipboard_denied": "Accès au presse-papiers refusé. HTTPS est requis ou l’autorisation n’a pas été accordée.", - "file_loading": "Chargement...", - "file_timeout": "L’appareil distant n’a pas répondu. Le transfert de fichiers peut ne pas être pris en charge ou être désactivé sur la machine distante.", - "codec": "Codec vidéo", - "codec_auto": "Auto (recommandé)" + "legacy_title": "Générateur de configuration client", + "background_color": "Arrière-plan de la fenêtre", + "build_error_hint": "Erreur de compilation", + "build_status_building": "En cours de compilation", + "build_status_failed": "Échoué", + "build_status_pending": "En file d'attente", + "build_status_ready": "Prêt", + "builds_empty": "Aucun build en file d'attente — enregistrez le paquet ou cliquez sur Reconstruire tout.", + "builds_hint": "Installateurs compilés sur ce serveur pour chaque plateforme. Reconstruire après avoir corrigé les erreurs de la chaîne d'outils ou mis à jour les sources de l'agent.", + "builds_loading": "Chargement de l'état de compilation…", + "builds_summary": "{{ready}} prêt · {{pending}} en file d'attente · {{building}} en compilation · {{failed}} échoué", + "builds_title": "Compilations client", + "connection_section": "Connexion au serveur", + "enrollment_per_device": "Par appareil — approuver dans Inscriptions", + "enrollment_token": "Enregistrement de l'appareil", + "enrollment_token_hint": "Chaque installation s'enregistre d'elle-même. Approuvez les nouveaux appareils dans le panneau Inscriptions ; le serveur délivre ensuite une clé d'accès unique par ordinateur.", + "enrollment_token_pending": "Par appareil après approbation", + "enrollment_token_set": "Par appareil — approuver dans Inscriptions", + "header_text_color": "Couleur du texte d'en-tête", + "rebuild_all": "Reconstruire tout", + "rebuild_confirm": "Reconstruire tous les installateurs de plateforme pour ce paquet ? Les artefacts prêts existants seront remplacés.", + "rebuild_queued": "Toutes les compilations de plateformes mises en file d'attente", + "rebuilding_all": "Mise en file d'attente des reconstructions…", + "server_host": "Adresse publique du serveur", + "server_host_hint": "Nom de domaine ou IP publique où les utilisateurs finaux joignent votre serveur BetterDesk. Le port est pris dans la configuration de la console.", + "server_host_placeholder": "support.example.com ou 203.0.113.10", + "status_ready_color": "Couleur de l'indicateur prêt", + "surface_color": "Arrière-plan de la carte", + "text_color": "Couleur du texte", + "text_muted_color": "Couleur du texte atténué", + "use_https": "Utiliser HTTPS / WSS (recommandé)", + "preview_help": "Demander de l'aide" + }, + "server": { + "port": "Port", + "api_port": "Port API", + "id_server": "Serveur ID", + "relay_server": "Serveur relais", + "api_key": "Clé API" + }, + "status": { + "online": "En ligne", + "offline": "Hors ligne", + "banned": "Banni", + "running": "En cours", + "stopped": "Arrêté", + "unknown": "Inconnu", + "checking": "Vérification...", + "label": "Status", + "no_signal": "Pas de signal" + }, + "actions": { + "refresh": "Actualiser", + "copy": "Copier", + "connect": "Connecter", + "connect_desktop": "Connecter via le client de bureau", + "remote_viewer": "Visionneuse distante", + "web_remote": "Bureau distant web", + "details": "Détails", + "edit": "Modifier", + "delete": "Supprimer", + "ban": "Bannir", + "unban": "Débannir", + "save": "Enregistrer", + "cancel": "Annuler", + "confirm": "Confirmer", + "close": "Fermer", + "clear": "Effacer", + "ok": "OK", + "saved": "Enregistré", + "back": "Retour", + "create": "Créer", + "dismiss": "Ignorer", + "view_all": "Tout afficher", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "à l'instant", + "seconds_ago": "Il y a {count} seconde(s)", + "minutes_ago": "Il y a {count} minute(s)", + "hours_ago": "Il y a {count} heure(s)", + "days_ago": "Il y a {count} jour(s)", + "day_mon": "Lun", + "day_tue": "Mar", + "day_wed": "Mer", + "day_thu": "Jeu", + "day_fri": "Ven", + "day_sat": "Sam", + "day_sun": "Dim" + }, + "users": { + "title": "Gestion des Utilisateurs", + "subtitle": "Gérer les utilisateurs de la console et les autorisations", + "add_user": "Ajouter un utilisateur", + "edit_user": "Modifier l'utilisateur", + "username": "Nom d'utilisateur", + "username_placeholder": "Entrez le nom d'utilisateur", + "username_hint": "3-32 caractères, lettres, chiffres et underscores uniquement", + "password": "Mot de passe", + "password_placeholder": "Entrez le mot de passe", + "password_hint": "Minimum 8 caractères avec majuscules, minuscules, chiffres et symboles", + "password_leave_empty": "Laisser vide pour conserver l'actuel", + "role": "Rôle", + "role_admin": "Administrateur", + "role_operator": "Opérateur", + "role_viewer": "Observateur", + "role_pro": "Pro (API seulement)", + "role_super_admin": "Super Administrateur", + "role_server_admin": "Administrateur du serveur", + "role_global_admin": "Administrateur Global", + "role_hint": "Les observateurs peuvent uniquement consulter les données, les opérateurs peuvent gérer les appareils, les administrateurs ont un accès complet", + "created": "Créé", + "last_login": "Dernière connexion", + "never": "Jamais", + "actions": "Actions", + "create": "Créer Utilisateur", + "edit": "Modifier", + "reset_password": "Réinitialiser le mot de passe", + "new_password": "Nouveau mot de passe", + "delete_title": "Supprimer l'utilisateur", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer l'utilisateur {username} ?", + "delete_success": "Utilisateur supprimé avec succès", + "user_created": "Utilisateur créé avec succès", + "user_updated": "Utilisateur mis à jour avec succès", + "password_reset_success": "Mot de passe réinitialisé avec succès", + "empty_title": "Aucun Utilisateur trouvé", + "empty_text": "Ajouter des utilisateurs pour gérer les permissions d'accès à la console", + "fill_required": "Veuillez remplir tous les champs obligatoires", + "invalid_username": "Le nom d'utilisateur doit contenir 3-32 caractères, lettres, chiffres et underscores uniquement", + "username_exists": "Le nom d'utilisateur existe déjà", + "weak_password": "Le mot de passe est trop faible", + "password_too_short": "Le mot de passe doit contenir au moins 8 caractères", + "invalid_role": "Rôle invalide", + "cannot_demote_self": "Vous ne pouvez pas vous rétrograder", + "cannot_delete_self": "Vous ne pouvez pas supprimer votre propre compte", + "last_admin": "Impossible de supprimer le dernier administrateur", + "admin_only": "Cette fonctionnalité est réservée aux administrateurs", + "password_required": "Le mot de passe est requis", + "not_found": "Utilisateur Introuvable", + "strength_weak": "Faible", + "strength_medium": "Moyen", + "strength_strong": "Fort", + "security_tips_title": "Bonnes pratiques de sécurité", + "tip_strong_passwords": "Utilisez des mots de passe forts et uniques pour chaque utilisateur", + "tip_unique_accounts": "Créez des comptes individuels pour chaque personne", + "tip_viewer_role": "Utilisez le rôle observateur pour les utilisateurs qui n'ont besoin que d'un accès en lecture", + "tip_operator_role": "Utilisez le rôle opérateur pour les utilisateurs qui doivent gérer les appareils mais pas les utilisateurs", + "tip_audit_logs": "Vérifiez régulièrement les journaux d'audit pour détecter les activités suspectes", + "organizations": "Organisations", + "user_organizations": "Organisations pour {username}", + "no_organizations": "L'utilisateur n'est affecté à aucune organisation", + "org_removed": "Suppression de l'affectation à une organisation", + "server_role_label": "Rôle serveur", + "server_role_hint": "Détermine ce que l’utilisateur peut faire dans toute la console (accès au panneau, configuration serveur, audit, etc.).", + "org_membership_section": "Appartenance aux organisations", + "org_membership_hint": "Un utilisateur peut appartenir à plusieurs organisations. Le rôle d’organisation ne contrôle que les autorisations dans cette organisation et reste indépendant du rôle serveur ci-dessus.", + "column_organizations": "Organisations", + "no_orgs_short": "—", + "org_count_one": "{count} organisation", + "org_count_many": "{count} organisations", + "all_orgs_assigned": "L’utilisateur est déjà membre de toutes les organisations.", + "user_groups": "Groupes d’utilisateurs", + "user_groups_hint": "Les groupes d’utilisateurs peuvent accorder l’accès à certains groupes d’appareils.", + "loading_user_groups": "Chargement des groupes d’utilisateurs...", + "no_user_groups": "Aucun groupe d’utilisateurs disponible", + "create_user_group": "Créer un groupe", + "edit_user_group": "Modifier le groupe d’utilisateurs", + "delete_user_group": "Supprimer le groupe d’utilisateurs", + "delete_user_group_confirm": "Supprimer le groupe d’utilisateurs {name} ? Les membres perdront l’accès accordé par ce groupe.", + "user_group_created": "Groupe d’utilisateurs créé", + "user_group_updated": "Groupe d’utilisateurs mis à jour", + "user_group_deleted": "Groupe d’utilisateurs supprimé", + "user_group_not_found": "Groupe d’utilisateurs introuvable", + "group_name": "Nom du groupe", + "group_name_placeholder": "Opérateurs", + "group_note": "Note", + "group_note_placeholder": "Note facultative", + "group_name_required": "Le nom du groupe est requis", + "group_members_count": "{count} membres", + "provider": "Fournisseur", + "provider_local": "Local", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Géré par le fournisseur d'identité", + "provider_managed_hint": "Ce compte est géré par un fournisseur d'identité externe (LDAP/AD ou SSO). Le mot de passe et le rôle sont contrôlés par le fournisseur et ne peuvent pas être modifiés ici." + }, + "folders": { + "title": "Dossiers", + "create": "Créer un dossier", + "edit": "Modifier un dossier", + "delete": "Supprimer un dossier", + "name": "Nom du dossier", + "name_placeholder": "Entrez le nom du dossier", + "name_required": "Le nom du dossier est obligatoire", + "name_too_long": "Le nom du dossier est trop long (max 50 caractères)", + "color": "Couleur", + "icon": "Icône", + "not_found": "Dossier Introuvable", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce dossier ? Les appareils seront désassignés.", + "delete_success": "Dossier supprimé avec succès", + "created": "Dossier Créé", + "updated": "Dossier mis à jour avec succès", + "no_devices_selected": "Aucun appareil sélectionné", + "devices_moved": "Appareils déplacés avec succès", + "device_assigned": "Appareil assigné au dossier", + "unassigned": "Non assigné", + "all_devices": "Tous les appareils", + "drag_hint": "Glissez les appareils dans les dossiers pour les organiser", + "move_to": "Déplacer vers", + "toggle_sidebar": "Basculer la barre latérale" + }, + "errors": { + "forbidden_title": "Accès refusé", + "forbidden_message": "Vous n'avez pas la permission d'accéder à cette ressource.", + "not_found_title": "Page non trouvée", + "not_found_message": "La page que vous recherchez n'existe pas ou a été déplacée.", + "server_error_title": "Erreur serveur", + "server_error_message": "Un problème est survenu. Veuillez réessayer plus tard.", + "go_home": "Accueil", + "try_again": "Réessayer", + "load_devices_failed": "Échec du chargement des appareils", + "load_key_failed": "Échec du chargement de la clé", + "load_qr_failed": "Échec du chargement du code QR", + "load_audit_failed": "Échec du chargement du journal d'audit", + "load_users_failed": "Échec du chargement des utilisateurs", + "load_folders_failed": "Échec du chargement des dossiers", + "download_failed": "Échec du téléchargement", + "logout_failed": "Échec de la déconnexion", + "password_change_failed": "Échec du changement de mot de passe", + "language_change_failed": "Échec du changement de langue", + "ban_failed": "Échec du bannissement de l'appareil", + "unban_failed": "Échec du débannissement de l'appareil", + "delete_failed": "Échec de la suppression de l'appareil", + "change_id_failed": "Échec de la modification de l'identifiant de l'appareil", + "bulk_delete_failed": "Échec de la suppression des appareils", + "sync_failed": "Échec de la synchronisation", + "error": "Erreur", + "not_found": "Introuvable", + "server_error": "Erreur du serveur", + "load_device_failed": "Échec du chargement de l'appareil", + "load_orgs_failed": "Échec du chargement des organisations" + }, + "remote": { + "title": "Bureau à Distance", + "connecting": "Connexion en cours...", + "waiting_password": "En attente du mot de passe", + "authenticating": "Authentification...", + "streaming": "Connecté", + "disconnected": "Déconnecté", + "error": "Erreur", + "status_idle": "Inactif", + "password_required": "Le mot de passe est requis", + "enter_password_for": "Entrez le mot de passe pour l'appareil", + "password_placeholder": "Mot de passe pour l'appareil", + "connect": "Connecter", + "reconnect": "Reconnecter", + "disconnect": "Déconnecter", + "back_to_devices": "Retour aux appareils", + "fullscreen": "Plein écran", + "toggle_audio": "Activer/désactiver le son", + "send_keys": "Envoyer des touches de commande", + "scale_mode": "Mode de mise à l'échelle", + "scale_fit": "Adapter à la fenêtre", + "scale_fill": "Remplir la fenêtre", + "scale_original": "Taille originale (1:1)", + "scale_stretch": "Ajustement automatique", + "actions": "Actions", + "lock_screen": "Verrouiller l'écran", + "restart_remote": "Redémarrer l'appareil distant", + "refresh_screen": "Rafraîchir l'écran", + "clipboard_paste": "Coller depuis le presse-papiers", + "block_input": "Bloquer la saisie", + "display_settings": "Paramètres d'affichage", + "image_quality": "Qualité d'image", + "quality_best": "Meilleure (qualité optimale, 60 images par seconde)", + "quality_balanced": "Équilibrée", + "quality_low": "Performance", + "show_cursor": "Afficher le curseur distant", + "lock_after_session": "Verrouiller après la session", + "privacy_mode": "Mode confidentiel", + "disable_clipboard": "Désactiver le presse-papiers", + "chat": "Discussion", + "chat_placeholder": "Écrivez un message...", + "record": "Enregistrer l'écran", + "view_only": "Affichage seulement", + "pin_toolbar": "Épingler la barre d'outils", + "monitors": "Écrans", + "select_monitor": "Sélectionner un écran", + "quality_speed": "Vitesse (basse qualité, 60 images par seconde)", + "quality_quality": "Qualité (Optimale, 30 images par seconde)", + "recording_started": "L'enregistrement a commencé", + "recording_stopped": "L'enregistrement s'est arrêté", + "download_recording": "Télécharger l'enregistrement", + "e2e_encrypted": "Chiffrement de bout en bout", + "e2e_key_exchange": "Établissement d'un canal sécurisé...", + "confirm_restart": "Êtes-vous sûr de vouloir redémarrer l'appareil distant ?", + "webcodecs_not_supported": "Votre navigateur ne prend pas en charge l'API WebCodecs. Veuillez utiliser Chrome 94+ ou Edge 94+.", + "webcodecs_insecure_context": "WebCodecs indisponible en HTTP. La vidéo utilise un décodeur logiciel. Pour de meilleures performances, utilisez HTTPS.", + "webcodecs_fallback_active": "Décodeur vidéo logiciel actif (performances limitées)", + "click_to_start": "Cliquez pour démarrer", + "autoplay_blocked": "Le navigateur nécessite une intervention de l'utilisateur pour démarrer la vidéo et le son.", + "start_playback": "Démarrer la lecture", + "new_connection": "Nouvelle connexion", + "device_id_placeholder": "Saisir l'identifiant de l'appareil", + "http_warning": "Mode HTTP : limité au décodage logiciel H.264 (~15 images par seconde). Utilisez HTTPS pour des performances optimales (WebCodecs, VP9, 60 images par seconde).", + "file_transfer": "Transfert de fichiers", + "file_upload": "Transférer", + "file_download": "Télécharger", + "file_empty": "Ce dossier est vide", + "file_transfers": "Transferts", + "file_complete": "Terminé", + "file_error": "Échec du transfert", + "file_show_hidden": "Afficher les fichiers cachés", + "file_new_folder": "Nouveau dossier", + "file_new_folder_prompt": "Entrez le nom du dossier :", + "file_parent": "Dossier parent", + "file_root": "Racine", + "file_rename": "Renommer", + "file_rename_prompt": "Entrez le nouveau nom :", + "file_delete_confirm": "Êtes-vous sûr de vouloir supprimer cet élément ?", + "file_cancelled": "Transfert annulé", + "2fa_required": "Verification 2FA requise", + "2fa_hint": "Saisissez le code à 6 chiffres de votre application d'authentification", + "2fa_invalid": "Entrez un code à 6 chiffres valide", + "verify": "Vérifier", + "use_cdap_fallback": "Utiliser la visionneuse CDAP", + "cdap_fallback_hint": "Ouvre le viewer JPEG léger qui utilise bd-signal/CDAP au lieu du relais RustDesk. Utile quand le pair est hors ligne sur le relais mais joignable via le canal de gestion de l'agent.", + "clipboard_empty": "Le presse-papiers est vide", + "clipboard_denied": "Accès au presse-papiers refusé. HTTPS est requis ou l’autorisation n’a pas été accordée.", + "file_loading": "Chargement...", + "file_timeout": "L’appareil distant n’a pas répondu. Le transfert de fichiers peut ne pas être pris en charge ou être désactivé sur la machine distante.", + "codec": "Codec vidéo", + "codec_auto": "Auto (recommandé)" + }, + "branding": { + "identity_title": "Identité de marque", + "identity_desc": "Personnalisez le nom et la description de l'application affichés dans la console", + "app_name": "Nom de l'application", + "app_description": "Description de l'application", + "logo_title": "Logo", + "logo_desc": "Choisissez comment votre logo apparaît dans la barre latérale et la page de connexion", + "logo_type_icon": "Icône Material", + "logo_type_svg": "Code SVG", + "logo_type_image": "URL de l'image", + "logo_icon_name": "Nom de l'icône", + "logo_icon_hint": "Entrez un nom Material Icons (ex: dns, cloud, security). Voir fonts.google.com/icons", + "logo_svg_code": "Code SVG", + "logo_svg_hint": "Collez votre balisage SVG ici. Supporte les éléments complets avec chemins et styles.", + "logo_image_upload": "Télécharger une image", + "logo_image_choose": "Choisir un fichier image", + "logo_image_hint": "PNG, JPG, GIF, WebP ou SVG. Max 1,5 Mo. L'image est stockée en données base64.", + "logo_image_url": "Données / URL de l'image", + "logo_image_url_hint": "Rempli automatiquement lors du téléchargement ou collez une URL manuellement.", + "logo_image_too_large": "L'image est trop grande. Taille maximale : 1,5 Mo.", + "logo_image_invalid_type": "Type de fichier invalide. Utilisez PNG, JPG, GIF, WebP ou SVG.", + "preview": "Aperçu", + "colors_title": "Palette de couleurs", + "colors_desc": "Personnalisez la palette de couleurs. Laissez vide pour les valeurs par défaut.", + "colors_backgrounds": "Arrière-plans", + "colors_text": "Texte", + "colors_accents": "Couleurs d'accentuation", + "colors_borders": "Bordures", + "import_export_title": "Importation / exportation", + "import_export_desc": "Sauvegardez votre thème en fichier JSON ou importez-en un d'une autre instance", + "export_theme": "Exporter le thème", + "import_theme": "Importer un thème", + "reset_defaults": "Réinitialiser par défaut", + "save_branding": "Enregistrer l'image de marque", + "saved": "Enregistré", + "exported": "Thème exporté", + "imported": "Thème importé avec succès. Rechargement...", + "import_error": "Échec de l'import du thème. Format de fichier invalide.", + "reset_confirm": "Êtes-vous sûr de vouloir réinitialiser l'image de marque par défaut ? Cette action est irréversible.", + "reset_success": "Image de marque réinitialisée par défaut. Rechargement...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Texte principal affiché comme logo de votre marque", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Texte secondaire sous le logo (ex. nom du produit ou slogan)", + "logo_upload_success": "Logo téléversé avec succès.", + "typography_title": "Typography", + "typography_desc": "Choisissez les polices pour les titres et le corps du texte. Les polices sont téléchargées sur le serveur pour un hébergement local.", + "font_heading": "Police des titres", + "font_heading_hint": "Utilisée pour les titres (H1–H6) et le logo texte", + "font_body": "Body Font", + "font_body_hint": "Utilisée pour le texte courant et les éléments d’interface", + "font_search_placeholder": "Rechercher des polices...", + "font_system_default": "Valeur système par défaut", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "polices téléchargées sur le serveur", + "agent_desc": "Personnalisez le portail de téléchargement d'agent public affiché aux utilisateurs finaux.", + "agent_show_powered": "Afficher « Propulsé par BetterDesk »", + "agent_show_powered_hint": "Afficher l'attribution BetterDesk dans le pied de page du portail de téléchargement.", + "agent_title": "Page de téléchargement de l'agent", + "background_desc": "Définissez un fond d'écran, un dégradé ou un fond uni pour la console. Les cartes flottent au-dessus.", + "background_title": "Arrière-plan et apparence", + "bg_blur": "Flou d'arrière-plan", + "bg_color": "Couleur d'arrière-plan", + "bg_gradient": "Dégradé CSS", + "bg_gradient_hint": "Tout dégradé CSS valide, p. ex. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_choose": "Choisir un fichier image", + "bg_image_hint": "PNG, JPG, WebP ou GIF. 8 Mo maximum. Stocké sur le serveur.", + "bg_image_invalid_type": "Type de fichier invalide. Utilisez PNG, JPG, WebP ou GIF.", + "bg_image_too_large": "L'image est trop grande. La taille maximale est de 8 Mo.", + "bg_image_upload": "Télécharger l'image d'arrière-plan", + "bg_image_url": "Chemin de l'image / URL", + "bg_overlay": "Superposition sombre", + "bg_overlay_hint": "Assombrit l'arrière-plan pour une meilleure lisibilité du texte.", + "bg_size": "Dimensionnement de l'image", + "bg_size_auto": "Automatique (original)", + "bg_size_contain": "Contenu (ajuster)", + "bg_size_cover": "Couvrir (remplir l'écran)", + "bg_type_color": "Couleur unie", + "bg_type_gradient": "Dégradé", + "bg_type_image": "Image", + "bg_type_none": "Aucun", + "bg_upload_success": "Image d'arrière-plan téléchargée avec succès.", + "custom_css_desc": "Avancé : injectez du CSS personnalisé appliqué dans toute la console et la page de connexion.", + "custom_css_hint": "À utiliser avec précaution. Les règles invalides ou non sécurisées sont nettoyées. Maximum 20 000 caractères.", + "custom_css_title": "CSS personnalisé", + "footer_desc": "Ajoutez une ligne de pied de page personnalisée affichée sur l'écran de connexion et dans la barre latérale de la console.", + "footer_text": "Texte du pied de page", + "footer_text_hint": "p. ex. une mention de droit d'auteur ou le nom de l'entreprise.", + "footer_title": "Pied de page et droits d'auteur", + "login_bg_inherit": "Identique à la console", + "login_desc": "Personnalisez le titre, le sous-titre et l'arrière-plan de l'écran de connexion.", + "login_heading": "Titre de connexion", + "login_heading_placeholder": "Bon retour", + "login_subheading": "Sous-titre de connexion", + "login_subheading_placeholder": "Connectez-vous à votre compte", + "login_title": "Page de connexion", + "powered_by": "Propulsé par", + "show_powered": "Afficher l'attribution « BetterDesk »", + "show_powered_hint": "Afficher le nom et la version de BetterDesk dans le pied de page de connexion et la barre latérale." + }, + "device_detail": { + "tab_overview": "Vue d'ensemble", + "tab_tags": "Étiquettes et notes", + "tab_actions": "Actions", + "section_identity": "Identité", + "section_network": "Réseau", + "section_timestamps": "Horodatages", + "section_connect": "Connexion", + "section_manage": "Gestion", + "folder": "Dossier", + "status_tier": "Niveau de statut", + "device_banned": "Cet appareil est banni", + "no_reason": "Aucune raison fournie", + "tags": "Tags", + "no_tags": "Aucun tag assigné à cet appareil", + "tag_placeholder": "Entrez un nom de tag...", + "add_tag": "Ajouter", + "tag_exists": "Ce tag existe déjà", + "notes": "Notes", + "notes_placeholder": "Ajoutez des notes sur cet appareil...", + "danger_zone": "Zone de danger", + "action_connect_web": "Bureau à distance Web", + "action_connect_web_desc": "Connexion via le bureau à distance du navigateur", + "action_native_remote": "Remote BetterDesk", + "action_native_remote_desc": "Flux JPEG natif — aucun plugin requis", + "action_connect_desktop": "Client de bureau", + "action_connect_desktop_desc": "Ouvrir dans l'application client de bureau", + "action_change_id_desc": "Changer l'ID d'enregistrement de l'appareil", + "action_ban_desc": "Empêcher cet appareil de se connecter", + "action_unban_desc": "Permettre à cet appareil de se reconnecter", + "action_delete_desc": "Supprimer définitivement cet appareil", + "tab_hardware": "Matériel", + "tab_metrics": "Métriques", + "section_system": "Système", + "section_cpu": "Processeur", + "section_memory": "Mémoire", + "section_displays": "Écrans", + "section_encoding": "Capacités d'encodage", + "section_live_metrics": "Métriques en direct", + "section_current_usage": "Utilisation actuelle", + "section_usage_history": "Historique d'utilisation", + "os": "Système d'exploitation", + "version": "Version", + "cpu_model": "Modèle CPU", + "cpu_cores": "Cœurs CPU", + "cpu_freq": "Fréquence CPU", + "total_memory": "Mémoire totale", + "metric_memory": "Mémoire", + "metric_disk": "Disque", + "metrics_updated": "Mis à jour", + "device_groups": "Groupes", + "no_sysinfo": "Aucune information matérielle disponible", + "no_sysinfo_hint": "Les infos système apparaîtront après que l'appareil aura envoyé un rapport sysinfo", + "no_metrics": "Aucune métrique disponible", + "no_metrics_hint": "Les métriques apparaîtront après que l'appareil aura envoyé des rapports de battement de cœur", + "chart_oldest": "← Plus ancien", + "chart_newest": "Plus récent →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Fichiers", + "agent_lazy_hint": "Cliquez sur cet onglet pour charger les données en direct depuis l’agent", + "agent_offline": "L’agent est hors ligne", + "agent_timeout": "L’agent n’a pas répondu à temps", + "agent_error": "Impossible de charger les données depuis l’agent", + "service_name": "Name", + "service_display": "Nom affiché", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "device_id": "ID de l'appareil", + "hostname": "Nom d'hôte", + "os": "Système d'exploitation", + "cpu": "Processor", + "cpu_cores": "Cœurs CPU", + "cpu_usage": "Utilisation CPU", + "memory": "Memory", + "memory_total": "Mémoire totale", + "memory_used": "Mémoire utilisée", + "memory_available": "Mémoire disponible", + "memory_usage": "Utilisation mémoire", + "swap": "Swap", + "disks": "Disques", + "disk_count": "Nombre de disques", + "network": "Network Adapters", + "network_interfaces": "Interfaces réseau", + "software": "Logiciels", + "software_count": "Logiciels installés", + "system": "Système", + "kernel": "Noyau", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Fréquence", + "physical_cores": "Cœurs physiques", + "logical_cores": "Cœurs logiques", + "model": "Modèle", + "usage": "Utilisation", + "total": "Total", + "used": "Utilisé", + "available": "Disponible", + "mount_point": "Point de montage", + "removable": "Amovible", + "mac_address": "Adresse MAC", + "ip_addresses": "Adresses IP", + "traffic": "Trafic", + "collect_now": "Collecter maintenant", + "collector_running": "Collecte en cours", + "collector_stopped": "Collecte arrêtée", + "last_upload": "Dernier envoi", + "total_uploads": "Total", + "last_seen": "Vu en dernier", + "collected_at": "Collecté le", + "no_data": "No hardware data available", + "no_devices": "Aucun appareil avec des données d'inventaire trouvé", + "detail_title": "Détails d'inventaire de l'appareil", + "telemetry": "Télémétrie", + "view_detail": "Voir les détails", + "export": "Exporter", + "refresh": "Actualiser" + }, + "tickets": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "create": "Créer", + "edit": "Modifier", + "delete": "Supprimer", + "detail": "Détails du ticket", + "ticket_id": "ID du ticket", + "ticket_title": "Titre", + "description": "Description", + "status": "Statut", + "priority": "Priorité", + "category": "Catégorie", + "assigned_to": "Assigné à", + "created_by": "Créé par", + "device": "Appareil", + "sla_due": "Échéance SLA", + "created_at": "Créé", + "updated_at": "Mis à jour", + "resolved_at": "Résolu", + "closed_at": "Fermé", + "status_open": "Ouvert", + "status_in_progress": "En cours", + "status_resolved": "Résolu", + "status_closed": "Fermé", + "priority_low": "Faible", + "priority_medium": "Moyen", + "priority_high": "Élevé", + "priority_critical": "Critique", + "category_general": "Général", + "category_hardware": "Matériel", + "category_software": "Logiciel", + "category_network": "Réseau", + "category_access": "Accès", + "category_other": "Autre", + "comments": "Commentaires", + "add_comment": "Ajouter un commentaire", + "comment_placeholder": "Écrire un commentaire...", + "internal_note": "Note interne (non visible par les utilisateurs finaux)", + "attachments": "Pièces jointes", + "upload_attachment": "Télécharger une pièce jointe", + "download": "Télécharger la clé", + "connect_device": "Se connecter à l'appareil", + "no_tickets": "Aucun ticket trouvé", + "no_comments": "Aucun commentaire", + "no_attachments": "Aucune pièce jointe", + "title_required": "Le titre est requis", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer le ticket #{id} ?", + "delete_success": "Appareil supprimé avec succès", + "created_success": "Ticket créé avec succès", + "updated_success": "Ticket mis à jour avec succès", + "sla_overdue": "SLA dépassé", + "filter_all": "Tous", + "search_placeholder": "Rechercher des appareils...", + "assign_to_me": "M'assigner", + "unassign": "Désassigner", + "stats_total": "Total", + "stats_open": "Ouverts", + "stats_in_progress": "En cours", + "stats_resolved": "Résolus", + "stats_closed": "Fermés" + }, + "activity": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "device": "Appareil", + "hostname": "Nom d'hôte", + "sessions": "Sessions actives", + "idle_time": "Temps d'inactivité", + "active_time": "Temps actif", + "last_report": "Dernier rapport", + "top_apps": "Applications principales", + "app_name": "Nom de l'application", + "window_title": "Titre de la fenêtre", + "category": "Catégorie", + "duration": "Durée", + "started_at": "Démarré", + "ended_at": "Terminé", + "session_count": "Nombre de sessions", + "total_active": "Total actif", + "total_idle": "Total inactif", + "detail_count": "Enregistrements détaillés", + "no_data": "No hardware data available", + "no_sessions": "Aucune session enregistrée", + "filter_from": "De", + "filter_to": "À", + "filter_apply": "Appliquer le filtre", + "hours": "heures", + "minutes": "minutes", + "seconds": "secondes", + "category_browser": "Navigateur", + "category_productivity": "Productivité", + "category_communication": "Communication", + "category_development": "Développement", + "category_media": "Médias", + "category_gaming": "Jeux", + "category_system": "Système", + "category_other": "Autre", + "summary": "Résumé", + "details": "Détails de l'appareil", + "refresh": "Actualiser", + "search": "Rechercher des appareils...", + "date_range": "Plage de dates", + "device_id": "ID de l'appareil", + "session_start": "Début de session", + "session_end": "Fin de session", + "user": "Utilisateur", + "no_activity": "Aucune activité enregistrée", + "reported_at": "Reported At", + "detail": "Détails du ticket", + "no_apps": "Aucune application" + }, + "automation": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "rules": "Règles d'alerte", + "rules_subtitle": "Définir les conditions qui déclenchent des notifications", + "alerts": "Historique des alertes", + "alerts_subtitle": "Voir et acquitter les alertes déclenchées", + "commands": "Commandes à distance", + "commands_subtitle": "Envoyer des commandes aux appareils distants", + "smtp": "Configuration SMTP", + "smtp_subtitle": "Paramètres de notification par e-mail", + "rule_name": "Nom de la règle", + "description": "Description", + "condition_type": "Type de condition", + "condition_op": "Opérateur", + "condition_value": "Seuil", + "severity": "Sévérité", + "scope_device": "Appareil cible", + "scope_all": "Tous les appareils", + "cooldown": "Temps de refroidissement (secondes)", + "notify_emails": "E-mails de notification", + "enabled": "Activé", + "disabled": "Désactivé", + "create_rule": "Créer une règle", + "edit_rule": "Modifier la règle", + "delete_rule": "Supprimer la règle", + "acknowledge": "Acquitter", + "acknowledged": "Acquitté", + "unacknowledged": "Non acquitté", + "triggered_at": "Déclenché le", + "severity_info": "Info", + "severity_warning": "Avertissement", + "severity_critical": "Critique", + "op_gt": "Supérieur à", + "op_gte": "Supérieur ou égal", + "op_lt": "Inférieur à", + "op_lte": "Inférieur ou égal", + "op_eq": "Égal à", + "op_neq": "Différent de", + "type_cpu_usage": "Utilisation CPU (%)", + "type_memory_usage": "Utilisation mémoire (%)", + "type_disk_usage": "Utilisation disque (%)", + "type_offline_duration": "Durée hors ligne (s)", + "type_idle_duration": "Durée d'inactivité (s)", + "type_custom": "Personnalisé", + "command_type": "Type de commande", + "command_payload": "Commande / Script", + "command_result": "Résultat", + "command_status": "Statut", + "send_command": "Envoyer la commande", + "status_pending": "En attente", + "status_running": "En cours", + "status_completed": "Terminé", + "status_failed": "Échoué", + "smtp_host": "Hôte SMTP", + "smtp_port": "Port", + "smtp_secure": "Utiliser TLS", + "smtp_user": "Nom d'utilisateur", + "smtp_pass": "Mot de passe", + "smtp_from": "Adresse d'expédition", + "smtp_test": "Tester la connexion", + "smtp_save": "Enregistrer la configuration", + "smtp_test_success": "Connexion réussie", + "smtp_test_failed": "Échec de la connexion", + "no_rules": "Aucune règle d'attribution.", + "no_alerts": "Aucune alerte déclenchée", + "no_commands": "Aucune commande envoyée", + "id_payload_required": "L’ID de l’appareil et la charge utile sont requis", + "no_commands_sent": "Aucune commande envoyée pour le moment" + }, + "file_transfer": { + "title": "Tableau de bord", + "transfers": "Transferts", + "new_transfer": "Nouveau transfert", + "upload": "Télécharger vers", + "download": "Télécharger la clé", + "direction": "Direction", + "filename": "Nom du fichier", + "file_size": "Taille du fichier", + "mime_type": "Type MIME", + "progress": "Progression", + "status": "Statut", + "device": "Appareil", + "initiated_by": "Initié par", + "created_at": "Créé", + "cancel": "Annuler", + "cancel_confirm": "Êtes-vous sûr de vouloir annuler ce transfert ?", + "download_file": "Télécharger le fichier", + "browse_files": "Parcourir les fichiers", + "select_file": "Sélectionner un fichier", + "select_device": "Sélectionner un appareil", + "no_transfers": "Aucun transfert de fichier", + "status_pending": "En attente", + "status_active": "Actif", + "status_completed": "Terminé", + "status_failed": "Échoué", + "status_cancelled": "Annulé", + "bytes_transferred": "Octets transférés", + "chunks": "Blocs", + "transfer_started": "Transfert démarré", + "transfer_completed": "Transfert terminé", + "transfer_failed": "Transfert échoué", + "transfer_cancelled": "Transfert annulé", + "max_file_size": "Taille maximale du fichier : 4 Go", + "error_too_large": "Le fichier est trop volumineux", + "error_no_device": "Aucun appareil sélectionné", + "error_no_file": "Aucun fichier sélectionné" + }, + "network": { + "title": "Tableau de bord", + "targets": "Cibles de surveillance", + "add_target": "Ajouter une cible", + "edit_target": "Modifier la cible", + "delete_target": "Supprimer la cible", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer cette cible ?", + "target_name": "Nom", + "host": "Hôte", + "port": "Port", + "url": "URL", + "check_type": "Type de vérification", + "timeout": "Délai d'attente (ms)", + "interval": "Intervalle (ms)", + "enabled": "Activé", + "status": "Statut", + "last_check": "Dernière vérification", + "last_rtt": "Dernier RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Accessible", + "status_down": "Inaccessible", + "status_unknown": "Inconnu", + "check_now": "Vérifier maintenant", + "history": "History", + "stats": "Statistiques", + "total_targets": "Cibles totales", + "targets_up": "Cibles accessibles", + "targets_down": "Cibles inaccessibles", + "type_ping": "Ping (ICMP)", + "type_tcp": "Port TCP", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Outils réseau", + "ping_tool": "Test Ping", + "tcp_tool": "Vérification port TCP", + "http_tool": "Vérification HTTP", + "dns_tool": "Résolution DNS", + "monitor_start": "Démarrer la surveillance", + "monitor_stop": "Arrêter la surveillance", + "monitor_running": "Surveillance en cours", + "monitor_stopped": "Surveillance arrêtée", + "no_targets": "Aucune cible de surveillance configurée", + "no_history": "Aucun historique de vérification disponible", + "error_code": "Erreur", + "status_code": "Code de statut HTTP", + "search_targets": "Rechercher des cibles...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Historique des vérifications", + "name_host_required": "Le nom et l’hôte sont requis", + "uptime": "Uptime", + "response_time": "Temps de réponse", + "avg_response": "Réponse moyenne", + "charts": "Graphiques", + "realtime": "Temps réel", + "response_time_ms": "Temps de réponse (ms)", + "uptime_percent": "Disponibilité %", + "last_24h": "Dernières 24 heures", + "last_7d": "7 derniers jours", + "last_30d": "30 derniers jours" + }, + "dataguard": { + "title": "Tableau de bord", + "policies": "Politiques DLP", + "add_policy": "Ajouter une politique", + "edit_policy": "Modifier la politique", + "delete_policy": "Supprimer la politique", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer cette politique ?", + "policy_name": "Nom", + "policy_description": "Description", + "policy_desc": "Description de la politique", + "status": "Statut", + "enabled": "Activé", + "disabled": "Désactivé", + "rules": "Règles d'alerte", + "add_rule": "Ajouter une règle", + "rule_type": "Type de règle", + "rule_type_usb": "Périphérique USB", + "rule_type_file": "Opération sur fichier", + "action": "Action", + "action_allow": "Autoriser", + "action_block": "Bloquer", + "action_log": "Journaliser uniquement", + "filter": "Filtre", + "vid": "ID fournisseur (VID)", + "pid": "ID produit (PID)", + "serial": "Numéro de série", + "device_class": "Classe d'appareil", + "drive_type": "Type de lecteur", + "file_extensions": "Extensions de fichier", + "events": "Événements DLP", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Fichier", + "event_type": "Type d'événement", + "event_details": "Détails", + "no_policies": "Aucune politique DLP configurée", + "no_events": "Aucun événement DLP enregistré", + "stats": "Statistiques", + "total_events": "Total des événements", + "blocked_events": "Bloqués", + "logged_events": "Journalisés", + "usb_events": "Événements USB", + "file_events": "Événements fichier", + "device_id": "ID de l'appareil", + "policy_matched": "Politique correspondante", + "timestamp": "Horodatage", + "drive_removable": "Amovible", + "drive_fixed": "Fixe", + "drive_network": "Réseau", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Inconnu", + "total_policies": "Nombre total de politiques", + "active_policies": "Politiques actives", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Politiques", + "tab_events": "Events", + "search_policies": "Rechercher des politiques...", + "create_policy": "Créer une politique", + "policy_type": "Type de politique", + "scope": "Scope", + "events_count": "Events", + "search_events": "Rechercher des événements...", + "event_time": "Event Time", + "device": "Appareil", + "policy": "Politique", + "detail": "Détails du ticket", + "scope_help": "ID d’appareils séparés par des virgules, ou laissez vide pour tous", + "scope_all": "Tous les appareils", + "active": "Actif", + "type_file_type": "Type de fichier", + "type_usb": "USB", + "type_clipboard": "Presse-papiers", + "type_screen_share": "Partage d’écran", + "type_file_transfer": "Transfert de fichiers" + }, + "reports": { + "title": "Tableau de bord", + "generate": "Générer la configuration", + "generate_csv": "Exporter CSV", + "report_type": "Type de rapport", + "type_devices": "Résumé des appareils", + "type_activity": "Résumé d'activité", + "type_security": "Rapport de sécurité", + "type_tickets": "Rapport de tickets", + "type_network": "Rapport réseau", + "type_inventory": "Rapport d'inventaire", + "type_alerts": "Rapport d'alertes", + "saved": "Enregistré", + "save_report": "Sauvegarder le rapport", + "delete_report": "Supprimer le rapport", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce rapport enregistré ?", + "no_saved": "Aucun rapport enregistré", + "report_title": "Titre", + "created_by": "Créé par", + "created_at": "Créé", + "filters": "Filtres", + "date_from": "De", + "date_to": "À", + "device_filter": "ID de l'appareil", + "generated_at": "Généré le", + "section": "Section de données", + "total_devices": "Total des appareils", + "online": "En ligne", + "offline": "Hors ligne", + "banned": "Bannis", + "platform_distribution": "Distribution par plateforme", + "top_applications": "Applications principales", + "total_active": "Total actif", + "total_idle": "Total inactif", + "dlp_stats": "Statistiques DLP", + "banned_devices": "Appareils bannis", + "audit_logs": "Journaux d'audit", + "ticket_stats": "Statistiques des tickets", + "category_distribution": "Distribution par catégorie", + "priority_distribution": "Distribution par priorité", + "targets_status": "Statut des cibles", + "os_distribution": "Distribution des OS", + "avg_ram": "RAM moyenne", + "alert_rules": "Règles d'alerte", + "recent_alerts": "Alertes récentes", + "tab_generate": "Générer un rapport", + "tab_saved": "Rapports enregistrés", + "type_devices_desc": "Vue d'ensemble de tous les appareils, plateformes et statuts", + "type_activity_desc": "Résumé de l'utilisation des applications et du temps d'inactivité", + "type_security_desc": "Actions de bannissement, événements DLP et journaux d'audit", + "type_tickets_desc": "Statistiques des tickets et performance SLA", + "type_network_desc": "Cibles de surveillance réseau et données de disponibilité", + "type_inventory_desc": "Résumé de l'inventaire matériel et logiciel", + "type_alerts_desc": "Règles d'alerte et historique des alertes déclenchées", + "report_name": "Nom du rapport", + "format": "Format", + "save": "Enregistrer", + "preview": "Aperçu", + "download": "Télécharger la clé", + "delete_saved": "Supprimer le rapport", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tableau de bord", + "list": "Locataires", + "add_tenant": "Ajouter un locataire", + "edit_tenant": "Modifier le locataire", + "delete_tenant": "Supprimer le locataire", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce locataire ? Toutes les affectations d'appareils et d'utilisateurs seront supprimées.", + "name": "Name", + "slug": "Slug", + "contact_name": "Nom du contact", + "contact_email": "E-mail du contact", + "max_devices": "Max appareils", + "max_devices_hint": "0 = illimité", + "notes": "Notes", + "active": "Actif", + "inactive": "Inactif", + "devices": "Appareils", + "users": "Utilisateurs", + "assign_device": "Assigner un appareil", + "assign_devices": "Assigner des appareils", + "remove_device": "Retirer l'appareil", + "assign_user": "Assigner un utilisateur", + "remove_user": "Retirer l'utilisateur", + "no_tenants": "Aucun locataire configuré", + "no_devices": "Aucun appareil avec des données d'inventaire trouvé", + "no_users": "Aucun utilisateur assigné à ce locataire", + "stats": "Statistiques", + "total_devices": "Total des appareils", + "online_devices": "Appareils en ligne", + "total_users": "Total des utilisateurs", + "created_at": "Créé", + "updated_at": "Mis à jour", + "slug_exists": "Le slug du locataire existe déjà", + "total_tenants": "Total des locataires", + "active_tenants": "Locataires actifs", + "search": "Search devices...", + "create_tenant": "Créer un locataire", + "detail": "Détails du ticket", + "contact": "Contact", + "enabled": "Activé", + "disabled": "Désactivé", + "max": "max", + "info": "Information", + "status": "Statut" + }, + "registrations": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "search_placeholder": "Rechercher des appareils...", + "no_registrations": "Aucune demande d'inscription", + "col_device_id": "ID de l'appareil", + "col_hostname": "Nom d'hôte", + "col_platform": "Plateforme", + "col_ip": "Adresse IP", + "col_version": "Version", + "col_status": "Statut", + "col_requested": "Demandé", + "col_actions": "Actions", + "status_pending": "En attente", + "status_approved": "Approuvé", + "status_rejected": "Rejeté", + "approve_btn": "Approuver", + "approve_confirm": "Êtes-vous sûr de vouloir approuver cet appareil ? Il recevra les identifiants du serveur et pourra se connecter automatiquement.", + "approved_success": "Inscription de l'appareil approuvée avec succès", + "reject_btn": "Rejeter", + "reject_title": "Rejeter l'inscription", + "reject_confirm": "Êtes-vous sûr de vouloir rejeter cette demande d'inscription ?", + "reject_reason": "Raison (optionnel)", + "reject_reason_placeholder": "Entrez la raison du rejet...", + "rejected_success": "Inscription de l'appareil rejetée", + "delete_confirm": "Êtes-vous sûr de vouloir supprimer cet enregistrement d'inscription ?", + "deleted_success": "Enregistrement d'inscription supprimé", + "enrollment_title": "Inscription des appareils", + "enrollment_subtitle": "Demandes d’inscription en attente depuis les clients de bureau BetterDesk", + "enrollment_empty": "Aucune demande d’inscription en attente", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Nom affiché", + "enrollment_display_name_placeholder": "Saisissez un nom pour cet appareil...", + "enrollment_sync_mode": "Mode de synchronisation", + "enrollment_sync_silent": "Silencieux — télémétrie minimale", + "enrollment_sync_standard": "Standard — synchronisation équilibrée", + "enrollment_sync_turbo": "Turbo — synchronisation agressive", + "enrollment_approved_success": "Inscription de l’appareil approuvée", + "enrollment_rejected_success": "Inscription de l’appareil rejetée", + "approve_title": "Approuver l'appareil", + "banner_locked_mode": "L'inscription est verrouillée — seuls les appareils liés à un jeton peuvent s'inscrire. Le mode géré est requis pour l'approbation des clients inconnus par l'opérateur.", + "banner_open_mode": "L'inscription est ouverte — les nouveaux clients RustDesk s'inscrivent sans approbation de l'opérateur. Définissez le mode géré dans les paramètres pour utiliser cette file d'attente.", + "enrollment_settings_link": "Paramètres d'inscription", + "field_folder": "Dossier", + "field_folder_none": "Aucun dossier", + "field_groups": "Groupes d'appareils", + "field_name": "Nom de l'appareil", + "field_name_placeholder": "Entrez un nom pour cet appareil...", + "field_sync_mode": "Mode de synchronisation", + "field_tag_add_btn": "Ajouter", + "field_tag_add_placeholder": "Ajouter un nouveau tag...", + "field_tags": "Tags", + "field_tags_existing": "Tags existants", + "field_tags_placeholder": "Tags séparés par des virgules (p. ex. bureau, ordinateur portable)...", + "reject_ban_hint": "L'appareil sera bloqué et ne pourra plus envoyer de nouvelles demandes d'inscription.", + "reject_ban_option": "Bannir cet appareil", + "sync_silent": "Silencieux — télémétrie minimale", + "sync_standard": "Standard — synchronisation équilibrée", + "sync_turbo": "Turbo — synchronisation agressive" + }, + "backup": { + "title": "Tableau de bord", + "desc": "Téléchargez une sauvegarde complète de la configuration de votre console, utilisateurs, groupes et paramètres. Les données peer du serveur Go sont incluses lorsque le backend BetterDesk est actif.", + "restore_title": "Restaurer", + "restore_desc": "Téléchargez un fichier de sauvegarde précédemment téléchargé pour restaurer la configuration de la console. Sélectionnez ci-dessous les sections à restaurer.", + "stat_users": "Utilisateurs", + "stat_settings": "Paramètres", + "stat_folders": "Dossiers", + "stat_groups": "Groupes", + "stat_strategies": "Stratégies", + "stat_backend": "Backend", + "download": "Télécharger la clé", + "creating": "Création de la sauvegarde...", + "download_success": "Fichier de clé téléchargé", + "upload": "Télécharger vers", + "restore_confirm": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde ? Les sections sélectionnées seront écrasées.", + "restore_success": "Sauvegarde restaurée avec succès. Certaines modifications peuvent nécessiter un rechargement de la page.", + "restored": "Restauré", + "skipped": "Ignoré", + "backup_date": "Date de sauvegarde", + "opt_settings": "Paramètres de la console", + "opt_branding": "Image de marque / Thème", + "opt_folders": "Dossiers d'appareils", + "opt_groups": "Groupes d'utilisateurs & d'appareils", + "opt_addressbooks": "Carnets d'adresses", + "opt_users": "Comptes utilisateurs", + "opt_users_warning": "Destructif : remplace TOUS les comptes utilisateurs par les données de sauvegarde. Vous pourriez être déconnecté.", + "no_file": "Aucun fichier de sauvegarde sélectionné", + "invalid_json": "Format JSON invalide", + "invalid_format": "Fichier de sauvegarde invalide : pas une sauvegarde BetterDesk", + "opt_database": "Base de données (toutes les tables)", + "opt_database_hint": "Réimporte toutes les données de la console. Appliqué en direct, aucun redémarrage nécessaire.", + "opt_env": "Fichier d'environnement (.env)", + "opt_env_warning": "Écrase SESSION_SECRET, la clé API, le DSN de la base de données, les ports et les paramètres TLS. Nécessite un redémarrage du service.", + "opt_godb": "Base de données du serveur Go", + "opt_godb_warning": "Écrase la base de données SQLite du serveur Go (backend SQLite uniquement). Nécessite un redémarrage du service.", + "opt_secrets": "Clés et secrets du serveur", + "opt_secrets_warning": "Écrase l'identité du serveur Ed25519, la clé API et le secret de session. Nécessite un redémarrage du service.", + "opt_uploads": "Fichiers de marque", + "opt_uploads_hint": "Logos et images téléchargées.", + "restart_required": "Certains composants restaurés (clés / .env / base de données Go) nécessitent un redémarrage du service pour prendre effet.", + "restore_warning": "La restauration des secrets, du fichier d'environnement ou de la base de données du serveur Go écrase l'identité du serveur et nécessite un redémarrage du service par la suite.", + "security_warning": "Cette sauvegarde contient des secrets (clés serveur, fichier d'environnement, hachages de mots de passe et secrets 2FA). Conservez-la en sécurité et ne la partagez jamais.", + "stat_database": "Moteur de base de données", + "stat_env": "Fichier d'environnement", + "stat_keys": "Clés serveur incluses", + "stat_uploads": "Fichiers de marque" + }, + "cdap": { + "device_detail": "Détail de l'appareil", + "loading": "Chargement...", + "loading_widgets": "Chargement des widgets de l’appareil...", + "load_error": "Impossible de charger les données de l’appareil", + "connected": "Connecté", + "disconnected": "Déconnecté", + "device_offline_msg": "L’appareil est actuellement hors ligne. Les valeurs des widgets peuvent être obsolètes.", + "no_widgets": "Cet appareil ne signale aucun widget.", + "no_widgets_desc": "Cet appareil n’a pas enregistré de manifeste CDAP avec des définitions de widgets.", + "command_log": "Journal des commandes", + "clear_log": "Effacer le journal", + "confirm_command": "Exécuter cette commande ?", + "select_option": "Sélectionner", + "cdap_status": "Statut CDAP", + "cdap_enabled": "CDAP activé", + "cdap_disabled": "CDAP désactivé", + "cdap_devices": "Appareils CDAP", + "cdap_connections": "Connexions actives", + "send_command": "Envoyer la commande", + "command_sent": "Commande envoyée", + "command_failed": "Échec de l'envoi de la commande", + "devices_title": "Appareils CDAP", + "devices_subtitle": "Appareils connectés via le protocole Custom Device Application Protocol", + "stat_connected": "Connecté", + "stat_port": "Port", + "search_devices": "Rechercher des appareils...", + "no_devices": "Aucun appareil avec des données d'inventaire trouvé", + "no_devices_desc": "Aucun appareil CDAP n’est actuellement connecté. Les appareils apparaîtront ici après leur connexion à la passerelle.", + "gateway_disabled": "Passerelle CDAP désactivée", + "gateway_disabled_desc": "Activez la passerelle CDAP en définissant CDAP_ENABLED=true dans la configuration du serveur.", + "gateway_active": "Active", + "toggle_enable": "Activer CDAP", + "toggle_disable": "Désactiver CDAP", + "enabled_restart": "CDAP activé. Un redémarrage du serveur est requis pour appliquer les changements.", + "disabled_restart": "CDAP désactivé. Un redémarrage du serveur est requis pour appliquer les changements.", + "widgets": "Widgets CDAP", + "type_all": "Tous", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agent OS", + "type_network": "Rapport réseau", + "type_camera": "Caméra", + "type_custom": "Personnalisé", + "active_alerts": "Alertes actives", + "alert_fired": "Alerte déclenchée", + "alert_cleared": "Alerte effacée", + "no_alerts": "Aucune alerte déclenchée", + "connect_terminal": "Connecter le terminal", + "table_search": "Rechercher...", + "just_now": "à l'instant", + "terminal_connecting": "Connexion à l’appareil...", + "terminal_disconnected": "Déconnecté", + "terminal_error": "Échec de la connexion au terminal", + "linked_devices": "Appareils liés", + "link_device": "Lier un appareil", + "unlink_device": "Délier", + "no_linked_devices": "Aucun appareil lié", + "unlink_confirm": "Voulez-vous vraiment dissocier cet appareil ?", + "link_prompt": "Saisissez l’ID pair à lier à cet appareil :", + "connect_desktop": "Connecter via le client de bureau", + "connect_video": "Connecter le flux", + "connect_files": "Parcourir les fichiers", + "connect_audio": "Connecter l'audio", + "upload_file": "Upload", + "desktop_connecting": "Connexion...", + "video_connecting": "Connexion...", + "files_connecting": "Connexion...", + "audio_connecting": "Connexion audio...", + "audio_streaming": "Audio en streaming", + "clipboard_in": "Presse-papiers appareil → navigateur", + "clipboard_out": "Presse-papiers navigateur → appareil", + "monitor_select": "Sélectionner le moniteur", + "keyframe_request": "Demander une image clé", + "quality_auto": "Qualité automatique" + }, + "desktop": { + "switch_mode": "Mode bureau", + "console_mode": "Mode console", + "loading": "Chargement...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Fermer", + "widgets_mode": "Mode widgets", + "windows_mode": "Windows", + "wallpaper": "Fond d'écran", + "add_widget": "Ajouter un widget", + "remove_widget": "Supprimer le widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Configurer", + "search_widgets": "Rechercher des widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Appareils", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Ajoutez des notes sur cet appareil...", + "search_placeholder": "Rechercher des appareils...", + "search_pages": "Pages", + "search_devices": "Search devices...", + "search_no_results": "No results", + "exit_desktop": "Quitter le bureau", + "refresh": "Actualiser", + "fullscreen": "Plein écran", + "help": "Help", + "widget_clock": "Clock", + "widget_device_status": "État des appareils", + "widget_server_health": "Infos serveur", + "widget_system_stats": "Jauges des appareils", + "widget_device_list": "Liste des appareils", + "widget_quick_actions": "Actions rapides", + "widget_recent_activity": "Activité récente", + "widget_notes": "Notes", + "widget_network_monitor": "Surveillance réseau", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Appareils CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Grille d’appareils", + "widget_multi_gauge": "Jauges serveur", + "widget_weekly_chart": "Activité hebdomadaire", + "widget_quick_controls": "Contrôles rapides", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Statistiques de connexion", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sessions utilisateur", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Aucun appareil", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Ouvrir", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Définir l’URL dans la configuration", + "label_server_uptime": "Temps de fonctionnement du serveur", + "label_merged_info": "Fusionné dans le widget Infos serveur", + "label_with_notes": "Avec notes", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Nombre total d’appareils", + "label_throughput": "Throughput", + "label_active_relays": "Relais actifs", + "label_total_relayed": "Total relayé", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrer les appareils...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Aucun appareil CDAP", + "action_add_widget": "Ajouter un widget", + "label_merged_server_info": "Fusionné dans le widget Infos serveur", + "wp_images": "Images", + "wp_colors": "Couleurs unies", + "wp_custom_color": "Couleur personnalisée", + "wp_fit_style": "Style", + "wp_fill": "Remplir", + "wp_fit": "Ajuster", + "wp_stretch": "Étirer", + "wp_center": "Centrer", + "wp_unavailable": "Les images de fond d’écran ne sont pas installées sur ce serveur.", + "wp_download_hint": "Placez des images PNG dans le répertoire public/wallpapers/ pour activer le choix du fond d’écran.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Surveillance des processus", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Statistiques de base de données", + "widget_docker_containers": "Conteneurs Docker", + "widget_shell_command": "Commande shell", + "widget_device_map": "Carte des appareils", + "widget_remote_connect": "Connexion distante", + "label_no_online": "Aucun appareil en ligne", + "label_no_events": "Aucun événement aujourd’hui", + "label_event_title": "Titre de l’événement :", + "label_no_data": "Aucune donnée disponible", + "label_download_speed": "Vitesse de téléchargement", + "label_latency": "Latency", + "label_server": "Serveur", + "label_run_test": "Run Test", + "label_testing": "Test en cours...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Aucun conteneur", + "label_docker_unavailable": "Docker non disponible", + "label_no_command": "Aucune commande configurée", + "label_no_output": "Aucune sortie pour le moment", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Enregistrer le préréglage", + "label_load_preset": "Load Preset", + "label_preset_name": "Nom du préréglage :", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Disposition automatique", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 colonnes (égales)", + "label_2col_wide": "2 colonnes (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Groupe de widgets", + "ungroup_widgets": "Dégrouper les widgets", + "group_widgets": "Grouper les widgets sélectionnés", + "snap_layouts": "Dispositions d’ancrage", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Ancrer en haut à gauche", + "snap_top_right": "Ancrer en haut à droite", + "snap_bottom_left": "Ancrer en bas à gauche", + "snap_bottom_right": "Ancrer en bas à droite", + "aero_shake": "Secouer pour réduire les autres fenêtres", + "zone_resize": "Faites glisser la bordure pour redimensionner les zones", + "zone_borders": "Bordures de zones déplaçables", + "app_drawer": "Applications", + "search_apps": "Rechercher des applications...", + "edit_shortcuts": "Modifier les raccourcis", + "widgets": "widgets", + "theme": "Theme" + }, + "desktop_login": { + "click_to_sign_in": "Cliquez n’importe où ou appuyez sur une touche pour vous connecter", + "username_placeholder": "Entrez le nom d'utilisateur", + "password_placeholder": "Entrez le mot de passe", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Authentification à deux facteurs", + "totp_subtitle": "Entrez le code à 6 chiffres de votre application d'authentification", + "back_to_login": "Retour à la connexion", + "fill_all_fields": "Veuillez remplir tous les champs", + "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide.", + "invalid_code": "Code de vérification invalide", + "enter_6_digits": "Saisissez les 6 chiffres", + "network_error": "Erreur réseau — vérifiez votre connexion", + "session_expired": "Session expirée. Veuillez vous reconnecter." + }, + "tokens": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "enrollment_mode": "Mode d’inscription", + "mode_open": "Ouvert", + "mode_open_desc": "Tout appareil peut s’inscrire sans jeton", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Total", + "active": "Actif", + "used": "Utilisé", + "revoked": "Jeton révoqué", + "search_placeholder": "Rechercher des appareils...", + "status_pending": "En attente", + "status_active": "Actif", + "status_used": "Used", + "status_revoked": "Révoqué", + "status_expired": "Expiré", + "bulk_generate": "Génération en lot", + "create": "Créer", + "edit": "Modifier", + "token": "Token", + "name": "Name", + "status": "Statut", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Date d'expiration", + "created": "Créé", + "actions": "Actions", + "name_placeholder": "Entrez le nom du dossier", + "max_uses": "Max Uses", + "max_uses_hint": "0 = illimité", + "expires_in": "Expires In", + "no_expiration": "Aucune expiration", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 jours", + "note": "Note", + "note_placeholder": "Notes about this device", + "count": "Count", + "count_range": "Nombre de jetons à générer (1-100)", + "name_prefix": "Name Prefix", + "generate": "Générer la configuration", + "token_created": "Jeton créé avec succès", + "tokens_generated": "Jetons générés", + "copy_warning": "Copiez le jeton maintenant. Il ne sera plus affiché.", + "copy_token": "Copy Token", + "copied": "Copié dans le presse-papiers", + "revoke": "Révoquer", + "revoke_confirm": "Êtes-vous sûr de vouloir révoquer ce jeton ? Cela invalidera immédiatement toutes les requêtes API qui l'utilisent.", + "revoked_success": "Jeton révoqué avec succès", + "no_tokens": "Aucun jeton API créé", + "expired": "Expired", + "never": "Jamais", + "save": "Enregistrer", + "cancel": "Annuler", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Suivant", + "prev": "Précédent", + "skip": "Passer le tutoriel", + "finish": "Terminer", + "close": "Fermer", + "step_of": "{current} sur {total}", + "console_sidebar_title": "Barre latérale de navigation", + "console_sidebar_text": "Accédez à tous les modules depuis ici. Cliquez sur une icône pour accéder à la section correspondante. La barre latérale s’adapte à la taille de votre écran.", + "console_expand_title": "Développer la barre latérale", + "console_expand_text": "Cliquez ici pour développer la barre latérale et voir les libellés complets de tous les éléments de navigation. Cliquez à nouveau pour la réduire.", + "console_search_title": "Recherche rapide", + "console_search_text": "Recherchez rapidement des appareils, paramètres ou actions. Appuyez sur Ctrl+K pour utiliser le raccourci clavier.", + "console_dashboard_title": "Tableau de bord", + "console_dashboard_text": "Votre centre principal affiche l’état du serveur, les appareils en ligne et les actions rapides. Surveillez les métriques importantes en un coup d’œil.", + "console_devices_title": "Gestion des appareils", + "console_devices_text": "Affichez, recherchez et gérez tous les appareils connectés. Filtrez par état, attribuez des étiquettes et configurez chaque appareil.", + "console_settings_title": "Paramètres", + "console_settings_text": "Configurez le comportement du serveur, les options de sécurité, la marque et la gestion des utilisateurs. Adaptez BetterDesk à vos besoins.", + "console_desktop_title": "Mode bureau", + "console_desktop_text": "Passez en mode bureau pour un espace de travail fenêtré avec widgets. Idéal pour le multitâche et les tableaux de surveillance.", + "console_complete_title": "Vous êtes prêt !", + "console_complete_text": "Explorez les catégories de la barre latérale pour découvrir toutes les fonctionnalités. Cliquez sur l’icône Aide à tout moment pour relancer ce guide.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "La barre supérieure affiche l’horloge, les contrôles rapides et l’accès au tiroir d’applications. Cliquez sur l’icône de grille pour parcourir toutes les applications.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Ouvrez le tiroir d’applications pour rechercher et lancer n’importe quelle fonction de la console dans une fenêtre flottante. Les applications sont organisées par catégorie.", + "desktop_widgets_title": "Tableau de bord des widgets", + "desktop_widgets_text": "Votre espace de travail personnalisable. Les widgets affichent des informations en direct et offrent un accès rapide aux fonctions. Faites-les glisser pour les réorganiser.", + "desktop_add_widget_title": "Ajouter des widgets", + "desktop_add_widget_text": "Cliquez ici pour parcourir les widgets disponibles. Choisissez parmi les vues de surveillance, listes d’appareils, notes et plus encore.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "Dispositions d’ancrage", + "desktop_snap_text": "Faites glisser les fenêtres vers les bords de l’écran pour les ancrer, ou survolez le bouton d’agrandissement pour afficher les préréglages. Essayez Aero Shake !", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Les applications s’ouvrent dans des fenêtres déplaçables et redimensionnables. Réduisez, agrandissez ou fermez-les depuis la barre de titre. Les fenêtres se placent au-dessus des widgets.", + "desktop_search_title": "Recherche rapide", + "desktop_search_text": "Recherchez dans les appareils, pages et paramètres. Appuyez sur Ctrl+K n’importe où pour ouvrir instantanément la recherche.", + "desktop_complete_title": "Mode bureau prêt !", + "desktop_complete_text": "Essayez d’ouvrir des applications depuis le tiroir et d’organiser les fenêtres côte à côte. Utilisez les préréglages de widgets pour créer rapidement des tableaux de bord.", + "devices_folders_title": "Dossiers d’appareils", + "devices_folders_text": "Organisez les appareils en dossiers. Cliquez sur un dossier pour filtrer la liste. Faites un clic droit pour renommer ou supprimer.", + "devices_search_title": "Recherche et filtre", + "devices_search_text": "Recherchez par ID, nom d’hôte ou plateforme. Utilisez les pastilles d’état pour afficher uniquement les appareils en ligne, hors ligne ou tous les appareils.", + "devices_table_title": "Liste des appareils", + "devices_table_text": "Cliquez sur une ligne d’appareil pour voir les détails. Utilisez le menu kebab à droite pour les actions rapides comme connecter, modifier les étiquettes ou supprimer.", + "devices_complete_title": "Gestion des appareils prête !", + "devices_complete_text": "Faites glisser les appareils entre dossiers pour les organiser. Double-cliquez sur un appareil pour ouvrir son panneau de détails.", + "settings_tabs_title": "Catégories de paramètres", + "settings_tabs_text": "Naviguez entre Général, Sécurité, Apparence et les autres sections de configuration.", + "settings_content_title": "Paramétrage", + "settings_content_text": "Chaque section contient des paramètres précis pour le serveur et la console. Les changements sont enregistrés lorsque vous cliquez sur Enregistrer.", + "settings_complete_title": "Vue d’ensemble des paramètres", + "settings_complete_text": "Consultez les paramètres de sécurité pour la 2FA, les clés API et la gestion des utilisateurs. Ouvrez Apparence pour personnaliser l’interface de la console.", + "help": "Help", + "tour_console": "Visite de la console", + "tour_desktop": "Visite du mode bureau", + "tour_devices": "Visite des appareils", + "tour_remote": "Visite de la session distante", + "tour_organization": "Configuration de l’organisation", + "tour_cdap": "Présentation de CDAP", + "tour_chat": "Bases du chat", + "tour_settings": "Visite des paramètres", + "reset_all": "Réinitialiser tous les tutoriels", + "remote_toolbar_title": "Barre d’outils distante", + "remote_toolbar_text": "Accédez aux contrôles d’affichage, à la synchronisation du presse-papiers, aux touches spéciales et aux paramètres de qualité depuis la barre d’outils. Activez le plein écran avec F11.", + "remote_canvas_title": "Affichage distant", + "remote_canvas_text": "Ceci est l’écran distant. Cliquez dedans pour commencer à contrôler l’appareil distant. Les entrées souris et clavier sont transférées automatiquement.", + "remote_clipboard_title": "Synchronisation du presse-papiers", + "remote_clipboard_text": "Copiez et collez du texte entre votre ordinateur et l’appareil distant. Utilisez Ctrl+C / Ctrl+V normalement lorsque l’affichage distant a le focus.", + "remote_complete_title": "Session distante prête !", + "remote_complete_text": "Utilisez les boutons de la barre d’outils pour les touches spéciales (Ctrl+Alt+Suppr, Impr. écran) et le changement d’écran. Appuyez sur Échap ou cliquez sur Déconnecter pour terminer la session.", + "org_overview_title": "Organisations", + "org_overview_text": "Les organisations permettent de regrouper utilisateurs, appareils et politiques. Chaque organisation possède ses propres administrateurs, opérateurs et paramètres.", + "org_create_title": "Créer une organisation", + "org_create_text": "Cliquez ici pour créer une nouvelle organisation. Indiquez un nom, un identifiant court et une description facultative. Vous deviendrez propriétaire de la nouvelle organisation.", + "org_members_title": "Gérer les membres", + "org_members_text": "Invitez des utilisateurs par e-mail, attribuez des rôles (admin, opérateur, utilisateur) et gérez l’accès. Les membres peuvent voir les appareils attribués à leur organisation.", + "org_devices_title": "Attribuer des appareils", + "org_devices_text": "Ajoutez des appareils à l’organisation. Les appareils attribués ici hériteront des politiques de l’organisation et seront visibles par ses membres.", + "org_policies_title": "Politiques d’organisation", + "org_policies_text": "Définissez les politiques de sécurité de l’organisation, comme les exigences de mot de passe, les délais de session, l’obligation de 2FA et les règles d’inscription des appareils.", + "org_complete_title": "Configuration de l’organisation terminée !", + "org_complete_text": "Invitez votre équipe et attribuez des appareils pour commencer à utiliser la gestion limitée à l’organisation. Les politiques s’appliquent automatiquement à tous les membres.", + "cdap_devices_title": "Appareils CDAP", + "cdap_devices_text": "Affichez tous les appareils CDAP connectés — capteurs IoT, automates, ponts et agents personnalisés. Les indicateurs verts signalent des connexions en direct.", + "cdap_widgets_title": "Tableau de bord des widgets", + "cdap_widgets_text": "Les widgets affichent des données en temps réel depuis les appareils. Jauges, interrupteurs, LEDs, graphiques — chaque type de widget visualise un type de données différent.", + "cdap_commands_title": "Envoyer des commandes", + "cdap_commands_text": "Interagissez avec les appareils en envoyant des commandes. Certaines commandes nécessitent une confirmation. Le journal des commandes conserve l'historique de toutes les commandes envoyées.", + "cdap_terminal_title": "Terminal de l'appareil", + "cdap_terminal_text": "Ouvrez une session de terminal vers les agents CDAP pour des diagnostics avancés ou une configuration manuelle. Saisissez les commandes directement.", + "cdap_complete_title": "Présentation CDAP terminée !", + "cdap_complete_text": "Explorez les widgets des appareils, envoyez des commandes et utilisez le terminal ou le navigateur de fichiers pour une gestion plus approfondie. Les agents CDAP rapportent automatiquement les métriques.", + "chat_contacts_title": "Contacts et groupes", + "chat_contacts_text": "Consultez vos contacts et groupes de chat. Cliquez sur un contact pour ouvrir une conversation. Les points verts indiquent les utilisateurs en ligne.", + "chat_send_title": "Envoyer des messages", + "chat_send_text": "Saisissez votre message et appuyez sur Entrée pour l’envoyer. Les messages sont chiffrés de bout en bout lorsque les deux parties prennent en charge l’E2E.", + "chat_file_title": "Partager des fichiers", + "chat_file_text": "Cliquez sur l’icône de pièce jointe pour partager des fichiers. Les fichiers sont chiffrés et peuvent atteindre 50 Mo.", + "chat_complete_title": "Chat prêt !", + "chat_complete_text": "Discutez en temps réel avec les opérateurs et les utilisateurs finaux. Créez des groupes pour la communication d’équipe. Tous les messages prennent en charge les accusés de lecture.", + "disable_tutorials": "Désactiver les tutoriels", + "enable_tutorials": "Activer les tutoriels" + }, + "help_request": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "new_request": "Nouvelle demande d’aide", + "device": "Appareil", + "hostname": "Nom d'hôte", + "message": "Message", + "status": "Statut", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Aucune demande d’aide", + "notification": "Demande d’aide reçue de", + "stats_total": "Total", + "filter_all": "Tous" + }, + "organizations": { + "title": "Tableau de bord", + "create": "Créer", + "edit": "Modifier", + "detail": "Détails du ticket", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Utilisateurs", + "devices": "Appareils", + "invitations": "Invitations", + "settings": "Paramètres", + "add_user": "Ajouter un utilisateur", + "assign_device": "Assigner un appareil", + "create_invitation": "Créer une invitation", + "delete_confirm": "Supprimer cette organisation ? Tous les utilisateurs, appareils et paramètres associés seront supprimés.", + "no_orgs": "Aucune organisation pour le moment", + "no_orgs_hint": "Créez votre première organisation pour commencer à gérer les appareils et les utilisateurs.", + "connection_policy": "Politique de connexion", + "allow_file_transfer": "Autoriser le transfert de fichiers", + "allow_clipboard": "Autoriser le presse-papiers", + "max_session_duration": "Durée maximale de session (min)", + "role_owner": "Owner", + "role_admin": "Administrateur", + "role_operator": "Opérateur", + "role_user": "Membre", + "username": "Nom d’utilisateur", + "password": "Mot de passe", + "display_name": "Nom affiché", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID de l’appareil", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Utilisateur attribué", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Aucun utilisateur dans cette organisation.", + "no_devices": "Aucun appareil attribué à cette organisation.", + "no_invitations": "Aucune invitation.", + "user_added": "User added", + "user_removed": "Utilisateur supprimé", + "user_updated": "Rôle utilisateur mis à jour", + "device_assigned": "Appareil attribué", + "device_unassigned": "Appareil retiré", + "invitation_created": "Invitation créée", + "settings_saved": "Paramètres enregistrés", + "org_deleted": "Organisation supprimée", + "confirm_remove_user": "Retirer cet utilisateur de l’organisation ?", + "confirm_unassign_device": "Retirer cet appareil de l’organisation ?", + "confirm_delete_org": "Supprimer cette organisation et toutes les données associées ?", + "edit_role": "Modifier le rôle", + "raw_settings": "Paramètres bruts", + "key": "Key", + "value": "Value", + "save": "Enregistrer les paramètres", + "policy_unattended": "Sans surveillance (instantané)", + "policy_attended": "Assisté (avec confirmation)", + "policy_ask": "Always ask", + "expires_hours": "Expiration (heures)", + "loading_failed": "Impossible de charger les données de l’organisation", + "name_slug_required": "Le nom et le slug sont requis", + "org_created": "Organisation créée", + "org_updated": "Organisation mise à jour", + "create_new_user": "Créer un nouveau", + "add_existing_user": "Ajouter un existant", + "none_available": "none", + "select_user": "Sélectionner un utilisateur", + "org_role": "Rôle dans l’organisation", + "link_user_hint": "L’utilisateur sélectionné sera lié à cette organisation avec les identifiants de son compte serveur.", + "no_available_users": "Tous les utilisateurs serveur sont déjà liés à cette organisation.", + "user_linked": "Utilisateur lié à l’organisation" + }, + "chat": { + "e2e_enabled": "Chiffré de bout en bout", + "e2e_establishing": "Établissement du canal sécurisé...", + "e2e_established": "Canal sécurisé établi", + "e2e_unsupported": "Chiffrement E2E non pris en charge par ce navigateur", + "typing_indicator": "écrit...", + "read_receipt": "Lu", + "delivered": "Remis", + "file_share": "Fichier", + "file_too_large": "Fichier trop volumineux (max 50 Mo)", + "file_encrypted": "Transfert de fichier chiffré", + "presence_online": "En ligne", + "presence_away": "Absent", + "presence_busy": "Occupé", + "presence_offline": "Hors ligne", + "key_rotation": "Clés de sécurité renouvelées", + "new_message": "Nouveau message", + "title": "Tableau de bord", + "contacts": "Contacts", + "groups": "Groupes", + "no_contacts": "Aucun contact pour le moment", + "no_groups": "Aucun groupe pour le moment", + "no_messages": "Aucun message pour le moment", + "no_results": "Aucun résultat trouvé", + "select_conversation": "Sélectionnez une conversation pour commencer à discuter", + "select_conversation_hint": "Sélectionnez une conversation pour afficher les messages", + "type_message": "Saisissez un message...", + "send": "Envoyer", + "attach_file": "Joindre un fichier", + "emoji": "Emoji", + "info": "Information", + "search_messages": "Rechercher des messages", + "create_group": "Créer un groupe", + "group_name": "Nom du groupe", + "group_name_placeholder": "Entrez le nom du groupe", + "group_members": "Membres", + "cancel": "Annuler", + "create": "Créer", + "members": "membres", + "today": "Aujourd'hui", + "yesterday": "Hier", + "react": "Réagir", + "my_presence": "Mon statut", + "search_placeholder": "Rechercher des appareils..." + }, + "toast": { + "device_connected": "Appareil connecté", + "device_disconnected": "Appareil déconnecté", + "session_started": "Session distante démarrée", + "session_ended": "Session distante terminée", + "file_upload_complete": "Téléversement du fichier terminé", + "settings_saved": "Paramètres enregistrés", + "error_generic": "Une erreur s’est produite", + "connection_lost": "Connexion perdue", + "reconnecting": "Reconnexion..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Tableau de bord" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Hôte", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Générer la configuration", + "encode": "Encode", + "decode": "Decode", + "send": "Envoyer", + "refresh": "Actualiser", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Saisissez du texte...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Serveur Go", + "mac_address": "Adresse MAC", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Vérifier la joignabilité et la latence de l’hôte", + "tcp_title": "Vérification de port TCP", + "tcp_desc": "Tester la connectivité d’un port TCP", + "ssl_title": "Inspecteur SSL", + "ssl_desc": "Inspecter les détails du certificat SSL/TLS", + "http_title": "Contrôle d’état HTTP", + "http_desc": "Vérifier l’état d’un point de terminaison HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Résoudre un nom d’hôte en adresse IP", + "whois_title": "DNS Records", + "whois_desc": "Interroger les enregistrements A, AAAA, MX, TXT, NS", + "speed_title": "Speed Test", + "speed_desc": "Mesurer la bande passante de téléchargement", + "run_speed_test": "Lancer le test de débit", + "wol_title": "Wake-on-LAN", + "wol_desc": "Envoyer un paquet magique pour réveiller un appareil", + "wol_sent": "Paquet magique envoyé", + "hash_title": "Générateur de hachage", + "hash_desc": "Générer des hachages cryptographiques", + "password_title": "Générateur de mots de passe", + "password_desc": "Mettre à jour le mot de passe de votre compte", + "jwt_title": "JWT Decoder", + "jwt_desc": "Décoder et inspecter les JSON Web Tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Encoder ou décoder des données Base64", + "url_title": "URL Encoder", + "url_desc": "Encoder ou décoder des composants d’URL", + "processes_title": "Liste des processus", + "processes_desc": "Afficher les processus système en cours", + "disk_title": "Disk Usage", + "disk_desc": "Afficher l’utilisation des partitions disque", + "db_title": "Statistiques de base de données", + "db_desc": "Afficher les statistiques des tables de la base de données", + "docker_title": "Conteneurs Docker", + "docker_desc": "Afficher les conteneurs Docker en cours d’exécution", + "logs_title": "Log Viewer", + "logs_desc": "Afficher les sorties de journal récentes", + "ip_address": "Adresse IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Statut", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Valide à partir du", + "valid_to": "Valide jusqu’au", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "No hardware data available", + "no_docker": "Aucun conteneur Docker trouvé ou Docker indisponible", + "no_logs": "Aucune ligne de journal disponible" + }, + "policies": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "select_org": "Organisation", + "select_org_placeholder": "Sélectionner une organisation...", + "select_org_first": "Sélectionnez une organisation pour voir le journal d'audit des politiques.", + "configured": "Configuré", + "connection_title": "Politique de connexion", + "connection_desc": "Contrôler l'établissement des sessions distantes", + "connection_mode": "Mode de connexion", + "mode_attended": "Assisté (nécessite l'approbation)", + "mode_unattended": "Non assisté (toujours autoriser)", + "mode_ask": "Toujours demander", + "max_session": "Durée max. de session (minutes)", + "idle_lock": "Verrouillage en cas d'inactivité (minutes)", + "wallpaper_policy": "Fond d'écran pendant la session", + "wallpaper_show": "Afficher", + "wallpaper_hide_session": "Masquer pendant la session", + "wallpaper_hide_always": "Toujours masquer", + "features_title": "Politique de fonctionnalités", + "features_desc": "Activer ou désactiver des fonctionnalités spécifiques", + "allow_file_transfer": "Autoriser le transfert de fichiers", + "allow_clipboard": "Allow Clipboard", + "allow_audio": "Autoriser le streaming audio", + "allow_recording": "Autoriser l'enregistrement de session", + "security_title": "Politique de sécurité", + "security_desc": "Appliquer les exigences de sécurité pour les appareils", + "require_2fa": "Exiger 2FA pour l'accès non assisté", + "password_min_length": "Longueur minimale du mot de passe", + "password_require_special": "Exiger des caractères spéciaux", + "password_max_age": "Âge max. du mot de passe (jours, 0=jamais)", + "allowed_operators": "Allowed Operators", + "network_title": "Politique réseau", + "network_desc": "Contrôler les serveurs relais et les connexions directes", + "block_direct_p2p": "Bloquer P2P direct (forcer relais)", + "allowed_relays": "Serveurs relais autorisés (un par ligne)", + "ip_allowlist": "Liste blanche IP (CIDR, un par ligne)", + "update_title": "Politique de mise à jour", + "update_desc": "Contrôler les mises à jour automatiques et les canaux", + "auto_update": "Activer la mise à jour automatique", + "update_channel": "Canal de mise à jour", + "audit_title": "Modifications de politiques", + "audit_desc": "Activité récente de la console", + "no_audit": "Aucune modification de politique enregistrée.", + "save_success": "Politique enregistrée avec succès", + "save_failed": "Impossible d’enregistrer la politique", + "load_failed": "Impossible de charger les politiques", + "block_direct_p2p_hint": "S'applique aux appareils de cette organisation. La valeur par défaut globale est sous Paramètres → Stratégie de connexion." + }, + "attestation": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "verified": "Vérifié", + "pending": "Pending", + "failed": "Échoué", + "device_list": "Registres d'attestation", + "device_list_desc": "Empreintes matérielles et statut de vérification d'identité", + "col_device": "ID d'appareil", + "col_hostname": "Nom d'hôte", + "col_fingerprint": "Empreinte", + "col_status": "Statut", + "col_last_check": "Dernière vérification", + "col_actions": "Actions", + "no_records": "Aucun enregistrement d'attestation trouvé.", + "verify_success": "Appareil marqué comme vérifié", + "verify_failed": "Impossible de vérifier l’appareil", + "revoke_success": "Attestation de l’appareil révoquée", + "revoke_failed": "Impossible de révoquer l’attestation" + }, + "fleet": { + "title": "Tableau de bord", + "tab_resources": "Ressources", + "tab_tasks": "Tâches", + "tab_builder": "Constructeur", + "tab_compliance": "Conformité", + "res_title": "Cartographie des ressources", + "res_all_types": "Tous les types", + "res_type_printer": "Imprimante", + "res_type_network_drive": "Lecteur réseau", + "res_type_dns": "Serveur DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Ajouter une ressource", + "res_name": "Nom de la ressource", + "res_type": "Type", + "res_address": "Adresse / Chemin", + "res_target": "Cible", + "res_scope": "Portée", + "res_scope_org": "Organisation", + "res_scope_group": "Groupe", + "res_scope_device": "Appareil", + "res_scope_value": "Valeur de portée", + "res_status": "Statut", + "res_active": "Actif", + "res_inactive": "Inactif", + "res_no_data": "Aucune ressource trouvée. Cliquez sur 'Ajouter'.", + "res_confirm_delete": "Êtes-vous sûr de vouloir supprimer cette ressource ?", + "task_title": "Planificateur de tâches", + "task_all_status": "Tous les statuts", + "task_status_pending": "En attente", + "task_status_running": "En cours", + "task_status_success": "Succès", + "task_status_failed": "Échoué", + "task_search": "Rechercher des tâches…", + "task_create": "Créer une tâche", + "task_name": "Nom de la tâche", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Installation", + "task_type_update": "Mise à jour", + "task_type_restart": "Redémarrage", + "task_type_deploy": "Déploiement", + "task_type_scan": "Scan", + "task_targets": "Cibles", + "task_targets_help": "IDs d'appareils ou noms de groupes, séparés par des virgules", + "task_schedule": "Planification", + "task_schedule_once": "Une fois", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Intervalle", + "task_schedule_value": "Valeur de planification", + "task_script": "Script / Commande", + "task_retries": "Réessais", + "task_timeout": "Délai (s)", + "task_last_run": "Dernière exécution", + "task_no_data": "Aucune tâche trouvée. Créez une nouvelle tâche.", + "task_confirm_delete": "Êtes-vous sûr de vouloir supprimer cette tâche ?", + "task_output": "Sortie de la tâche", + "task_retry": "Réessayer", + "builder_title": "Constructeur de workflow visuel", + "builder_select_workflow": "Sélectionner un workflow…", + "builder_new": "Nouveau", + "builder_save": "Enregistrer", + "builder_export": "Exporter", + "builder_execute": "Exécuter", + "builder_dry_run": "Simulation", + "builder_triggers": "Déclencheurs", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Résultats", + "builder_transforms": "Transformations", + "builder_properties": "Propriétés", + "builder_no_selection": "Sélectionnez un nœud pour modifier ses propriétés.", + "builder_node_trigger_manual": "Déclencheur manuel", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Déclencheur d’événement", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Redémarrer svc", + "builder_node_action_file_deploy": "Déployer un fichier", + "builder_node_action_message": "Envoyer un message", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Envoyer une alerte", + "builder_node_result_chain": "Chaîner le flux", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Nom du workflow :", + "comp_title": "Conformité logicielle", + "comp_compliant": "Conforme", + "comp_warning": "Avertissement", + "comp_critical": "Critique", + "comp_score": "Score moyen", + "comp_device": "Appareil", + "comp_hostname": "Nom d'hôte", + "comp_os": "SE", + "comp_score_col": "Score", + "comp_issues": "Problèmes", + "comp_last_scan": "Dernier scan", + "comp_scan": "Scanner", + "comp_scan_all": "Tout scanner", + "comp_remediate": "Remédier", + "comp_remediate_confirm": "Exécuter l'auto-remédiation sur cet appareil ?", + "comp_no_data": "Pas de données de conformité. Lancez un scan.", + "save": "Enregistrer", + "cancel": "Annuler", + "close": "Fermer", + "edit": "Modifier", + "delete": "Supprimer", + "actions": "Actions", + "all_orgs": "Toutes les organisations", + "select_org_placeholder": "Sélectionner une organisation...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Lecteur réseau", + "type_dns": "Serveur DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Ajouter une ressource", + "edit_resource": "Modifier la ressource", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Statut", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Actif", + "inactive": "Inactif", + "address": "Adresse / chemin", + "scope_org": "Organisation", + "scope_group": "Groupe", + "scope_device": "Appareil cible", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Voulez-vous vraiment supprimer cet élément ?", + "all_statuses": "Tous les états", + "status_pending": "En attente", + "status_running": "En cours", + "status_success": "Success", + "status_failed": "Échoué", + "search_tasks": "Rechercher des tâches…", + "create_task": "Créer une tâche", + "edit_task": "Modifier la tâche", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Déploiement de fichier", + "task_type_registry": "Registry", + "target_devices": "Appareils cibles", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / commande", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Chargement...", + "no_output": "Aucune sortie disponible", + "error_loading": "Erreur lors du chargement des données", + "select_workflow": "Sélectionner un flux…", + "new_workflow": "New", + "export": "Exporter", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Déclencheur manuel", + "node_schedule": "Schedule", + "node_event": "Déclencheur d’événement", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Redémarrer svc", + "node_file_deploy": "Déployer un fichier", + "node_send_message": "Envoyer un message", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Envoyer une alerte", + "node_chain": "Chaîner le flux", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Toutes les organisations", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "ID d'appareil", + "col_hostname": "Nom d'hôte", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Exécuter l’auto-remédiation sur cet appareil ?" + }, + "scaling": { + "title": "Tableau de bord", + "tab_overview": "Vue d'ensemble", + "tab_relays": "Nœuds relais", + "tab_rules": "Règles d'attribution", + "tab_capacity": "Planification de capacité", + "arch_title": "Architecture réseau", + "arch_loading": "Chargement du diagramme d'architecture...", + "stat_relay_nodes": "Nœuds relais", + "stat_total_devices": "Total appareils", + "stat_active_sessions": "Sessions actives", + "stat_bandwidth": "Bande passante totale", + "relay_health": "État des relais", + "no_relays": "Aucun nœud relais configuré. Ajoutez votre premier nœud pour distribuer la charge.", + "relay_search": "Rechercher des relais...", + "relay_add": "Ajouter un nœud relais", + "relay_edit": "Modifier le nœud relais", + "col_name": "Name", + "col_address": "Adresse", + "col_location": "Emplacement", + "col_devices": "Appareils", + "col_sessions": "Sessions actives", + "col_bandwidth": "Bande passante", + "col_status": "Statut", + "col_actions": "Actions", + "col_priority": "Priorité", + "col_rule_name": "Nom de la règle", + "col_match": "Correspondance", + "col_target_relay": "Relais cible", + "col_fallback": "Repli", + "status_online": "En ligne", + "status_degraded": "Dégradé", + "status_offline": "Hors ligne", + "status_enabled": "Activé", + "status_disabled": "Désactivé", + "confirm_delete_relay": "Êtes-vous sûr de vouloir supprimer ce nœud relais ?", + "confirm_delete_rule": "Êtes-vous sûr de vouloir supprimer cette règle d'attribution ?", + "rules_hint": "Les règles d'attribution déterminent quel serveur relais gère des groupes d'appareils spécifiques. Les règles sont évaluées par priorité (la plus basse d'abord).", + "no_rules": "Aucune règle d'attribution.", + "rule_add": "Ajouter une règle", + "rule_edit": "Modifier la règle", + "rule_match_type": "Type de correspondance", + "match_subnet": "Sous-réseau", + "match_group": "Groupe d'appareils", + "match_tag": "Tag d'appareil", + "match_location": "Emplacement", + "rule_match_value": "Valeur de correspondance", + "fallback_master": "Serveur maître", + "fallback_nearest": "Relais le plus proche", + "relay_max_sessions": "Max. sessions", + "relay_max_bandwidth": "Max. bande passante (Mbps)", + "cap_tiers": "Niveaux de capacité", + "cap_loading": "Chargement des données de capacité...", + "cap_recommendations": "Recommandations", + "cap_no_recs": "Aucune recommandation disponible.", + "cap_planning": "Planification d'infrastructure", + "cap_config": "Configuration de capacité", + "cap_max_devices": "Max. appareils", + "cap_max_sessions": "Max. sessions", + "cap_current": "Actuel", + "cap_utilization": "Utilisation", + "cap_tier_devices": "Capacité appareils", + "cap_tier_sessions": "Capacité sessions", + "cap_tier_bandwidth": "Capacité bande passante", + "cap_single_sqlite": "Serveur unique (SQLite)", + "cap_single_pg": "Serveur unique (PostgreSQL)", + "cap_master_3": "Maître + 3 relais", + "cap_master_10": "Maître + 10 relais", + "rec_no_relays": "Aucun nœud configuré. Envisagez d'ajouter des relais pour de meilleures performances et redondance.", + "rec_devices_high": "L'utilisation des appareils est élevée. Envisagez d'ajouter plus de nœuds relais.", + "rec_sessions_high": "La capacité de sessions approche sa limite. Envisagez une mise à niveau de l'infrastructure.", + "rec_cpu_high": "Certains nœuds relais signalent une utilisation CPU élevée. Envisagez l'équilibrage de charge.", + "rec_all_good": "Tous les systèmes fonctionnent dans les paramètres normaux. Aucune action requise.", + "save": "Enregistrer", + "cancel": "Annuler", + "edit": "Modifier", + "delete": "Supprimer", + "close": "Fermer", + "relays_info_banner": "Cette liste est informative. Les serveurs relais réellement utilisés par les clients sont configurés via la variable d’environnement RELAY_SERVERS sur le serveur BetterDesk.", + "relay_name_address_required": "Le nom et l’adresse sont requis.", + "relay_save_failed": "Impossible d’enregistrer le nœud relais.", + "relay_delete_failed": "Impossible de supprimer le nœud relais.", + "relay_saved": "Nœud relais enregistré.", + "relay_deleted": "Nœud relais supprimé.", + "rule_name_value_required": "Le nom de la règle et la valeur de correspondance sont requis.", + "rule_save_failed": "Impossible d’enregistrer la règle.", + "rule_delete_failed": "Impossible de supprimer la règle.", + "rule_saved": "Règle enregistrée.", + "rule_deleted": "Règle supprimée." + }, + "cross_platform": { + "title": "Tableau de bord", + "tab_matrix": "Matrice de compatibilité", + "tab_distribution": "Distribution", + "tab_protocols": "Protocoles", + "tab_limitations": "Limitations", + "matrix_hint": "Matrice de support des fonctionnalités pour toutes les plateformes prises en charge. Vert = support complet, Jaune = partiel, Gris = non disponible, Bleu = planifié.", + "col_feature": "Fonctionnalité", + "legend_full": "Support complet", + "legend_partial": "Support partiel", + "legend_none": "Non disponible", + "legend_planned": "Planifié", + "platform_breakdown": "Répartition par plateforme", + "arch_breakdown": "Répartition par architecture", + "version_breakdown": "Répartition par version", + "summary": "Résumé", + "total_devices": "Total des appareils", + "unique_platforms": "Plateformes", + "unique_archs": "Architectures", + "unique_versions": "Versions client", + "no_devices": "Aucun appareil avec des données d'inventaire trouvé", + "protocols_hint": "La négociation des capacités du protocole garantit que chaque client reçoit uniquement les fonctionnalités prises en charge. Le serveur adapte son comportement en fonction des capacités signalées.", + "capability_negotiation": "Négociation des capacités", + "codec_support": "Support des codecs (appareils en ligne)", + "feature_support": "Support des fonctionnalités (appareils en ligne)", + "no_codec_data": "Aucune donnée de codec des appareils en ligne.", + "no_feature_data": "Aucune donnée de fonctionnalités des appareils en ligne.", + "protobuf_schema": "Schéma Protobuf ClientCapabilities", + "diagram_client": "Client", + "diagram_server": "Serveur BetterDesk", + "diagram_peer": "Pair distant", + "limitations_hint": "Chaque plateforme a des limitations spécifiques affectant les fonctionnalités disponibles. Vérifiez-les lors de la planification des déploiements.", + "feat_desktop_client": "Client bureau", + "feat_background_agent": "Agent en arrière-plan", + "feat_remote_target": "Cible distante", + "feat_screen_capture": "Capture d'écran", + "feat_input_injection": "Injection d'entrée", + "feat_file_transfer": "Transfert de fichiers", + "feat_clipboard_sync": "Synchronisation du presse-papiers", + "feat_audio_streaming": "Streaming audio", + "feat_chat": "Chat", + "feat_h264": "Codec H.264", + "feat_vp9": "Codec VP9", + "feat_av1": "Codec AV1", + "feat_cdap_agent": "Agent CDAP", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Navigateur web", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Test", + "status_planned": "Planifié", + "status_limited": "Limité", + "status_experimental": "Expérimental", + "limit_win_uac": "Élévation UAC requise pour l'installation du service et l'injection d'entrée sur les bureaux sécurisés.", + "limit_win_service": "Fonctionne en tant que service NSSM ; nécessite des droits d'administrateur pour l'installation.", + "limit_win_firewall": "Les règles du pare-feu Windows doivent autoriser les ports 21115-21119 pour les connexions relais.", + "limit_linux_wayland": "Les compositeurs Wayland restreignent la capture d'écran programmatique ; API portail PipeWire requise.", + "limit_linux_pipewire": "La capture audio nécessite PipeWire ; repli PulseAudio disponible mais limité.", + "limit_linux_arm": "Builds ARM64 disponibles ; certains codecs peuvent utiliser le décodage logiciel (plus lent).", + "limit_mac_screen": "Autorisation d'enregistrement d'écran requise dans Réglages > Confidentialité et sécurité.", + "limit_mac_signing": "L'agent doit être signé avec un Apple Developer ID pour la distribution.", + "limit_mac_notarize": "Notarisation requise pour macOS Gatekeeper (distribution hors App Store).", + "limit_android_projection": "L'API MediaProjection nécessite le consentement de l'utilisateur pour chaque session de capture.", + "limit_android_accessibility": "L'injection d'entrée nécessite AccessibilityService ; restreint depuis Android 14+.", + "limit_android_battery": "Service en arrière-plan limité par le mode Doze ; exemption d'optimisation de batterie possible.", + "limit_ios_capture": "Apple interdit la capture d'écran en arrière-plan ; seul le mode visualisation est pris en charge.", + "limit_ios_input": "Pas d'injection d'entrée autorisée ; uniquement vue distante et chat.", + "limit_ios_appstore": "Distribution uniquement via l'App Store ; TestFlight pour les tests bêta.", + "limit_web_https": "L'API WebCodecs et WebRTC nécessitent HTTPS ; HTTP utilise JMuxer en repli (codecs limités).", + "limit_web_codec": "Support des codecs dépendant du navigateur ; H.264 largement supporté, VP9/AV1 variable.", + "limit_web_performance": "Performance limitée par le sandbox du navigateur ; pas d'accélération matérielle directe.", + "limit_chrome_crostini": "Support complet de l'agent uniquement dans le conteneur Linux Crostini.", + "limit_chrome_pwa": "Le mode PWA fournit uniquement les capacités web ; pas de fonctions d'agent natives.", + "limit_chrome_input": "Injection d'entrée en dehors du conteneur Crostini non prise en charge.", + "feat_multi_monitor": "Multi-écran", + "feat_session_recording": "Enregistrement de session", + "feat_unattended_access": "Accès sans surveillance", + "limit_linux_unprivileged": "Les services fonctionnent sous le compte non privilégié dédié « betterdesk » avec durcissement systemd (NoNewPrivileges, ProtectSystem=strict).", + "limit_win_virtual_account": "Les services fonctionnent sous des comptes virtuels isolés au lieu de LocalSystem ; les chemins de journaux personnalisés peuvent nécessiter des ajustements ACL." + }, + "security_audit": { + "title": "Tableau de bord", + "tab_overview": "Vue d'ensemble", + "tab_events": "Events", + "tab_hardening": "Durcissement", + "tab_vulnerabilities": "Vulnérabilités", + "security_score": "Score de sécurité", + "failed_logins": "Connexions échouées (24h)", + "active_bans": "Bannissements actifs", + "api_keys": "Clés API", + "old_keys": "Anciennes clés (>90j)", + "security_checks": "Vérifications de sécurité", + "tls_status": "Statut TLS", + "pass": "OK", + "warning": "Avertissement", + "fail": "Échec", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket sécurisé", + "enabled": "Activé", + "disabled": "Désactivé", + "all_events": "Tous les événements", + "event_login_failed": "Connexion échouée", + "event_login_success": "Connexion réussie", + "event_peer_banned": "Appareil banni", + "event_ip_banned": "IP bannie", + "event_config_changed": "Configuration modifiée", + "event_key_created": "Clé créée", + "refresh": "Actualiser", + "col_time": "Heure", + "col_action": "Action", + "col_actor": "Acteur", + "col_target": "Target", + "col_ip": "Adresse IP", + "col_details": "Détails", + "no_events": "Aucun événement DLP enregistré", + "hardening_hint": "Priorités de durcissement sécuritaire pour votre déploiement BetterDesk. Triés par gravité.", + "no_hardening": "Aucun élément de durcissement disponible.", + "vuln_hint": "Résultats de l'analyse des vulnérabilités. Exécutez npm audit régulièrement.", + "no_vulns": "Aucune vulnérabilité trouvée. Vos dépendances sont sécurisées." + }, + "languages": { + "title": "Tableau de bord", + "total_languages": "Nombre total de langues", + "fully_translated": "Entièrement traduit", + "needs_review": "À vérifier", + "reference_keys": "Clés de référence", + "no_languages": "Aucun fichier de langue trouvé.", + "badge_reference": "Reference", + "badge_review": "À vérifier", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "Clés", + "missing": "missing", + "extra": "extra", + "view_missing": "Voir les éléments manquants", + "fix_missing": "Fix Missing", + "missing_keys_for": "Clés manquantes pour", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "et encore {n}...", + "all_keys_present": "Toutes les clés sont présentes !", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Les clés manquantes dans {code} doivent être traduites manuellement.", + "no_fix_needed": "Aucune clé manquante à compléter." + }, + "resource_control": { + "title": "Tableau de bord", + "tab_overview": "Vue d'ensemble", + "tab_usb": "USB Control", + "tab_optical": "Lecteurs optiques", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Quotas de ressources", + "compliance_by_category": "Conformité par catégorie", + "device_compliance": "Conformité des appareils", + "search_devices": "Rechercher des appareils...", + "col_device": "ID d'appareil", + "col_platform": "Plateforme", + "col_status": "Statut", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Total appareils", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Taux de conformité", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configurer", + "no_devices": "Aucun appareil avec des données d'inventaire trouvé", + "usb_title": "Contrôle des ports USB", + "usb_hint": "Contrôlez l’accès aux périphériques de stockage USB pour l’appareil sélectionné ou pour la politique par défaut de l’organisation.", + "usb_storage_policy": "Politique de stockage USB", + "usb_whitelist": "Appareils en liste blanche (un par ligne)", + "usb_whitelist_hint": "VID:PID (ex. 0781:5583)", + "usb_audit_log": "Journaliser les connexions de périphériques USB", + "optical_title": "Contrôle des lecteurs optiques", + "optical_hint": "Contrôlez l’accès aux lecteurs CD/DVD/Blu-ray pour l’appareil sélectionné.", + "optical_policy": "Politique des lecteurs optiques", + "optical_audit_log": "Journaliser l’accès aux lecteurs optiques", + "monitors_title": "Gestion des moniteurs", + "monitors_hint": "Configurez les paramètres des moniteurs, y compris le nombre maximal, l’application de la résolution, la luminosité et les horaires d’alimentation.", + "monitors_max_count": "Nombre maximal de moniteurs (0 = illimité)", + "monitors_max_hint": "0 signifie aucune limite", + "monitors_resolution": "Résolution max.", + "monitors_brightness": "Limite de luminosité", + "monitors_power_schedule": "Horaire d’alimentation", + "monitors_power_hint": "ex. off:22:00-06:00", + "disks_title": "Contrôle d’accès aux disques", + "disks_hint": "Configurez les politiques d’accès aux disques, y compris le mode lecture seule, l’obligation de chiffrement et la visibilité des partitions.", + "disks_readonly": "Forcer le mode lecture seule", + "disks_encryption": "Exiger le chiffrement (BitLocker/LUKS)", + "disks_smart": "Activer la surveillance S.M.A.R.T.", + "disks_hidden": "Partitions masquées", + "disks_hidden_hint": "Lettres de lecteur ou points de montage séparés par des virgules", + "quotas_title": "Quotas de ressources", + "quotas_hint": "Définissez des quotas CPU, RAM, bande passante et disque par utilisateur pour l’appareil sélectionné.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Limite de bande passante (Mbps)", + "quotas_bandwidth_hint": "0 = illimité", + "quotas_disk_quota": "Quota disque (Go)", + "quotas_disk_hint": "0 = illimité", + "quotas_process_whitelist": "Liste blanche des processus (un par ligne)", + "quotas_process_hint": "ex. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Liste blanche uniquement", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "Tableau de bord", + "subtitle": "Vue d'ensemble de votre serveur RustDesk", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "import_flow": "Import Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Aucun appareil trouvé", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Status", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Chargement...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this item?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write" + }, + "updates": { + "tab_title": "Updates", + "title": "Tableau de bord", + "desc": "Téléchargez une sauvegarde complète de la configuration de votre console, utilisateurs, groupes et paramètres. Les données peer du serveur Go sont incluses lorsque le backend BetterDesk est actif.", + "current_version": "Version installée", + "latest_version": "Latest version", + "status": "Statut", + "check_now": "Vérifier maintenant", + "checking": "Vérification...", + "up_to_date": "À jour", + "update_available": "Mise à jour disponible", + "changelog": "Release Notes", + "no_changelog": "Aucune note de version disponible", + "files_changed": "Fichiers modifiés", + "files": "Fichiers", + "changes_unavailable": "Impossible de charger la liste des changements. Vous pouvez quand même installer la mise à jour.", + "create_backup": "Créer une sauvegarde avant la mise à jour", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installation de la mise à jour…", + "creating_backup": "Création de la sauvegarde…", + "downloading": "Téléchargement des fichiers…", + "install_success": "Mise à jour installée avec succès. La console redémarre…", + "install_failed": "Échec de l’installation de la mise à jour", + "restarting": "Attente du redémarrage de la console…", + "restart_complete": "Console redémarrée avec succès", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Aucune version de mise à jour sélectionnée. Recherchez d’abord les mises à jour.", + "backups_title": "Sauvegardes de mise à jour", + "backups_desc": "Sauvegardes préalables créées automatiquement avant chaque mise à jour", + "no_backups": "Aucune sauvegarde de mise à jour trouvée", + "restore": "Restore", + "restore_confirm": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde ? Les sections sélectionnées seront écrasées.", + "restore_success": "Sauvegarde restaurée avec succès. Certaines modifications peuvent nécessiter un rechargement de la page.", + "baseline_set": "Référence définie", + "commits_behind": "commits de retard", + "total_files": "Nombre total de fichiers", + "applied": "Applied", + "failed": "Échec", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Serveur Go", + "component_agent": "Agent", + "component_scripts": "Scripts et Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Vérification de Go…", + "go_not_found": "Go n’est pas installé", + "go_check_failed": "Impossible de vérifier la disponibilité de Go", + "server_building": "Compilation du serveur Go… Cela peut prendre quelques minutes.", + "server_built": "Binaire du serveur compilé", + "server_build_failed": "Échec de la compilation du serveur", + "server_stale_title": "Binaire du serveur obsolète", + "server_stale_desc": "Le code source du serveur Go a été mis à jour, mais le binaire en cours d’exécution n’a pas été reconstruit. Reconstruisez-le maintenant pour appliquer les mises à jour de sécurité et de bibliothèques.", + "rebuild_server": "Reconstruire le binaire du serveur", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Binaire du serveur reconstruit et redémarré", + "rebuild_server_failed": "Échec de la reconstruction du binaire du serveur", + "server_deployed": "Binaire du serveur déployé", + "server_deploy_failed": "Échec du déploiement du serveur", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Téléchargement du code source du serveur…", + "delete": "Supprimer", + "delete_confirm": "Supprimer définitivement la sauvegarde {name} ? Cette action est irréversible.", + "delete_success": "Sauvegarde supprimée", + "delete_failed": "Impossible de supprimer la sauvegarde", + "retention_label": "Conserver les N sauvegardes les plus récentes", + "retention_hint": "Les anciennes sauvegardes sont supprimées automatiquement après chaque mise à jour. Utilisez 0 pour toutes les conserver.", + "retention_saved": "Paramètre de rétention enregistré", + "retention_invalid": "La rétention doit être un entier entre 0 et 1000", + "retention_required_for_prune": "Définissez d’abord une valeur de rétention supérieure à 0", + "prune_now": "Apply now", + "prune_confirm": "Ne conserver que les {n} sauvegardes les plus récentes et supprimer le reste ?", + "prune_done": "{n} sauvegarde(s) supprimée(s)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Méthode de mise à jour", + "strategy_download": "Télécharger le binaire précompilé", + "strategy_compile": "Compiler depuis les sources", + "both_available": "Télécharger et compiler", + "download_available": "Téléchargement disponible", + "no_method": "Aucune méthode de mise à jour", + "no_release": "No release", + "available": "Disponible", + "server_downloading": "Téléchargement du binaire serveur…", + "server_downloaded": "Binaire serveur téléchargé", + "server_download_failed": "Échec du téléchargement du binaire serveur", + "server_download_note": "Un binaire précompilé sera téléchargé depuis GitHub Releases. Cela prend généralement moins d’une minute.", + "install_go_hint": "Installez Go depuis https://go.dev/dl/ pour activer la compilation, ou publiez une version avec des binaires précompilés", + "strategy_install_go": "Installer Go automatiquement et compiler", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Reconstruction automatique prête", + "toolchain_ready": "Chaîne d’outils installée", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Téléchargement de la chaîne d’outils Go…", + "toolchain_failed": "Échec de l’installation de la chaîne d’outils Go", + "modal_title": "Installation de la mise à jour", + "modal_done_title": "Mise à jour terminée", + "modal_close": "Fermer", + "modal_reload_now": "Recharger la console", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Fichiers de la console", + "phase_server": "Serveur Go", + "phase_restart": "Redémarrage", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Sauvegarde ignorée (choix utilisateur)", + "server_skipped": "Serveur Go ignoré", + "server_not_selected": "Go server not selected", + "server_processing": "Traitement de la mise à jour du serveur Go…", + "no_restart_needed": "Aucun redémarrage requis", + "complete": "Mise à jour appliquée", + "complete_summary": "La mise à jour a été appliquée avec succès.", + "complete_with_errors": "La mise à jour est terminée, mais certaines étapes ont échoué. Voir les détails ci-dessous.", + "modal_done_with_errors_title": "Mise à jour terminée avec erreurs", + "console_will_restart": "Le processus de console va maintenant redémarrer…", + "restart_complete_msg": "La console a terminé son redémarrage. Cliquez sur Recharger pour charger la nouvelle version. La page se rechargera automatiquement dans 8 secondes.", + "refresh_recommended": "Les ressources statiques ont changé — rechargez la page pour voir la nouvelle interface.", + "confirm_title": "Appliquer la mise à jour", + "confirm_with_backup": "Une sauvegarde préalable sera créée automatiquement.", + "confirm_no_backup": "Aucune sauvegarde ne sera créée (continuez à vos risques)." + }, + "permissions": { + "title": "Autorisations", + "subtitle": "Gérer les autorisations basées sur les rôles et les remplacements personnalisés", + "info_title": "Fonctionnement des autorisations", + "info_desc": "Chaque rôle dispose d’autorisations par défaut. Vous pouvez ajouter ou retirer des autorisations individuelles par rôle avec les bascules ci-dessous. Les remplacements personnalisés sont mis en évidence et peuvent être rétablis aux valeurs par défaut à tout moment.", + "select_role": "Sélectionner un rôle", + "select_role_placeholder": "Choisissez un rôle...", + "reset_overrides": "Réinitialiser tous les remplacements", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Niveau serveur", + "custom": "Custom", + "default": "Default", + "revert": "Revenir à la valeur par défaut", + "saved": "Autorisation mise à jour", + "reverted": "Rétabli à la valeur par défaut", + "all_reverted": "Tous les remplacements ont été rétablis", + "confirm_reset": "Réinitialiser tous les remplacements personnalisés de ce rôle aux valeurs par défaut ?", + "empty_title": "Sélectionnez un rôle", + "empty_desc": "Choisissez un rôle dans la liste ci-dessus pour afficher et gérer ses autorisations.", + "locked_title": "Super Admin", + "locked_desc": "Le Super Admin possède toutes les autorisations par défaut et ne peut pas être personnalisé.", + "cat_device": "Appareils", + "cat_user": "Users", + "cat_server": "Serveur", + "cat_org": "Organisations", + "cat_audit": "Audit et surveillance", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Voir les appareils", + "perm_device_connect": "Se connecter aux appareils", + "perm_device_edit": "Modifier les appareils", + "perm_device_delete": "Supprimer les appareils", + "perm_device_ban": "Bannir / débannir les appareils", + "perm_device_change_id": "Changer l’ID de l’appareil", + "perm_user_view": "Voir les utilisateurs", + "perm_user_create": "Créer des utilisateurs", + "perm_user_edit": "Modifier les utilisateurs", + "perm_user_delete": "Supprimer les utilisateurs", + "perm_server_config": "Configuration du serveur", + "perm_server_keys": "Gérer les clés API", + "perm_org_create": "Créer des organisations", + "perm_org_edit": "Modifier les organisations", + "perm_org_delete": "Supprimer les organisations", + "perm_org_manage_users": "Gérer les utilisateurs de l’organisation", + "perm_org_manage_devices": "Gérer les appareils de l’organisation", + "perm_audit_view": "Voir les journaux d’audit", + "perm_metrics_view": "Voir les métriques", + "perm_blocklist_edit": "Modifier la liste de blocage", + "perm_cdap_view": "Voir les appareils CDAP", + "perm_cdap_command": "Envoyer des commandes CDAP", + "perm_cdap_terminal": "Accès au terminal CDAP", + "perm_cdap_files": "Accès aux fichiers CDAP", + "perm_enrollment_manage": "Gérer l’inscription", + "perm_enrollment_approve": "Approuver l’inscription", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Modifier la marque", + "perm_server_attestation": "Attestation de performance du serveur" + }, + "notifications": { + "title": "Centre de notifications", + "empty": "Aucune nouvelle notification", + "mark_all_read": "Tout marquer comme lu", + "see_all": "Voir toutes les demandes d’aide", + "help_request": "Demande d’aide", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibilité", + "subtitle": "Adaptez la console à votre vision, au mouvement et à la lecture.", + "close": "Fermer le menu accessibilité", + "profiles": "Profils rapides", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Texte plus grand, fort contraste et focus visible.", + "profile_dyslexia": "Confort de lecture", + "profile_dyslexia_hint": "Police lisible et espacement plus large.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Réduit les transitions et met les animations en pause.", + "profile_color_assist": "Aide aux couleurs", + "profile_color_assist_hint": "Filtre de couleur, libellés et liens mis en évidence.", + "reading": "Lecture", + "font_size": "Taille du texte", + "line_height": "Hauteur de ligne", + "letter_spacing": "Espacement des lettres", + "word_spacing": "Espacement des mots", + "readable_font": "Police lisible", + "readable_font_hint": "Utilise des formes de lettres larges et familières.", + "dyslexia_spacing": "Espacement pour dyslexie", + "dyslexia_spacing_hint": "Ajoute un espacement supplémentaire pour les textes longs.", + "visual": "Visuel", + "contrast": "Contraste", + "contrast_normal": "Normal", + "contrast_high_dark": "Contraste élevé sombre", + "contrast_high_light": "Contraste élevé clair", + "contrast_yellow_black": "Jaune sur noir", + "color_filter": "Filtre de vision des couleurs", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturation des couleurs", + "underline_links": "Souligner les liens", + "underline_links_hint": "Rend les liens visibles sans dépendre de la couleur.", + "highlight_links": "Mettre en évidence les actions", + "highlight_links_hint": "Trace un contour autour des liens et boutons.", + "highlight_headings": "Mettre en évidence les titres", + "highlight_headings_hint": "Marque les titres de section avec une barre colorée.", + "hide_media": "Dim media", + "hide_media_hint": "Assombrit les images, vidéos et canevas.", + "interaction": "Interaction", + "strong_focus": "Focus renforcé", + "strong_focus_hint": "Affiche un large contour de focus clavier.", + "large_cursor": "Grand curseur", + "large_cursor_hint": "Utilise un pointeur plus grand à fort contraste.", + "reduce_motion": "Réduire les mouvements", + "reduce_motion_hint": "Raccourcit les transitions et le défilement fluide.", + "pause_animations": "Mettre les animations en pause", + "pause_animations_hint": "Arrête les mouvements visuels en boucle.", + "reading_guide": "Guide de lecture", + "reading_guide_hint": "Suit le pointeur avec une ligne lumineuse.", + "reading_mask": "Masque de lecture", + "reading_mask_hint": "Assombrit le contenu au-dessus et au-dessous du pointeur.", + "preview": "Aperçu", + "preview_title": "Aperçu de l’espace opérateur", + "preview_text": "Vérifiez si le texte, les liens, les contrôles et les libellés d’état sont confortables à lire avant de fermer ce menu.", + "preview_link": "Lien vers les détails de l’appareil", + "preview_status": "Online", + "preview_button": "Action principale", + "preview_secondary": "Secondary", + "reset": "Réinitialiser", + "done": "Terminé" + }, + "server_mgmt": { + "title": "Gestion du serveur", + "subtitle": "Panneau de type Cockpit pour l'hôte de la console BetterDesk (BÊTA).", + "beta_tooltip": "Fonction bêta — en développement actif.", + "notice_title": "Fonction bêta", + "notice_body": "Ces outils s'exécutent sur l'hôte où tourne le processus de la console BetterDesk. Toutes les opérations sont auditées.", + "tab_overview": "Aperçu", + "tab_terminal": "Terminal", + "tab_files": "Fichiers", + "tab_services": "Services", + "cpu": "CPU", + "memory": "Mémoire", + "load": "Charge moyenne", + "disks": "Disques", + "history": "Historique (60 derniers échantillons)", + "host_info": "Infos hôte", + "cores": "cœurs", + "uptime": "Temps d'activité", + "no_disks": "Aucune donnée disque disponible", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY disponible", + "term_connect": "Connecter", + "term_disconnect": "Déconnecter", + "term_clear": "Effacer", + "term_status": "Status", + "term_connecting": "Connexion…", + "term_connected": "Connecté", + "term_disconnected": "Déconnecté", + "term_error": "Erreur de connexion", + "term_warning": "Les commandes s’exécutent sous l’utilisateur propriétaire du processus de console. Ajoutez une règle sudoers pour permettre l’élévation.", + "term_hint": "Astuce : tapez `sudo -i` pour obtenir les privilèges root (configuration sudoers requise).", + "term_lib_failed": "Impossible de charger la bibliothèque de terminal", + "files_up": "Niveau supérieur", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Nom", + "files_size": "Taille", + "files_perms": "Mode", + "files_mtime": "Modifié", + "files_rename": "Renommer", + "files_rename_prompt": "New name:", + "files_empty": "Répertoire vide", + "files_error": "Impossible de lister le répertoire", + "read_failed": "Impossible de lire le fichier", + "save_failed": "Impossible d’enregistrer le fichier", + "rename_failed": "Échec du renommage", + "delete_failed": "Échec de la suppression", + "delete_confirm": "Supprimer cette entrée ?", + "mkdir_prompt": "Nom du nouveau dossier :", + "mkdir_failed": "Impossible de créer le dossier", + "file_saved": "Fichier enregistré", + "binary_warn": "Fichier binaire — aperçu uniquement", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Rechercher des services…", + "svc_name": "Service", + "svc_state": "État", + "svc_description": "Description", + "svc_empty": "Aucun service trouvé", + "svc_load_failed": "Impossible de charger les services", + "svc_action_failed": "Échec de l’action", + "svc_confirm": "Run", + "svc_start": "Démarrer", + "svc_stop": "Arrêter", + "svc_restart": "Redémarrer", + "svc_reload": "Recharger", + "svc_enable": "Activer", + "svc_disable": "Désactiver", + "svc_status": "Status" + }, + "download": { + "title": "Télécharger l’agent BetterDesk", + "choose_platform": "Choisissez votre plateforme", + "choose_platform_hint": "Sélectionnez l’installateur correspondant à votre système d’exploitation.", + "download": "Télécharger", + "building": "Construction…", + "failed": "Échec de la construction", + "need_help": "Besoin d’aide ?", + "powered_by": "Propulsé par" + }, + "server_attestation": { + "title": "Attestation du serveur", + "subtitle": "Benchmark de performance qui détermine la capacité de connexions distantes simultanées à un seuil de 80% CPU, RAM et disque.", + "warning_title": "Test de charge", + "warning_body": "Le benchmark simule des connexions WebSocket parallèles aux serveurs de signal et de relais. Exécutez pendant les heures creuses — ce test charge la production.", + "run_benchmark": "Lancer le benchmark", + "abort": "Abandonner", + "download_report": "Télécharger le rapport JSON", + "last_test": "Dernier test", + "no_test_yet": "Aucun benchmark n'a encore été exécuté", + "max_connections": "Connexions maximales", + "threshold_80": "Seuil à 80% — métriques finales", + "disk": "Disque", + "ramp_chart": "Graphique de montée en charge", + "connections": "Connexions", + "connections_short": "conn.", + "tier_guide_title": "Que signifie chaque niveau ?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "NON ÉVALUÉ", + "tier_bronze_desc": "1–25 connexions simultanées — petit VPS (1–2 vCPU, 2–4 Go de RAM).", + "tier_iron_desc": "26–75 connexions — serveur milieu de gamme (2–4 vCPU, 4–8 Go de RAM).", + "tier_platinum_desc": "76–200 connexions — serveur haute performance (4–8 vCPU, 8–16 Go de RAM).", + "tier_titanium_desc": "201–400 connexions — infrastructure d'entreprise (8+ vCPU, 16–32 Go de RAM).", + "tier_obsidian_desc": "401+ connexions — classe turbo : matériel dédié, 16+ vCPU, 32+ Go de RAM, NVMe.", + "docker_note": "Remarque : dans Docker, les métriques CPU/RAM peuvent refléter les limites du conteneur plutôt que l'hôte physique.", + "badge_tooltip": "Attestation du serveur BetterDesk — certification de performance du serveur", + "confirm_run": "Ce benchmark effectuera un test de charge du serveur avec des connexions simulées. Continuer ?", + "starting": "Démarrage…", + "complete": "Benchmark terminé", + "signal_peers": "Pairs de signal", + "relay_sessions": "Sessions de relais", + "page_error": "Échec du chargement de la page d'attestation du serveur", + "mode_estimated": "Estimé (WebSocket inaccessible)", + "incomplete": "Benchmark terminé sans niveau valide" + }, + "commercialization": { + "title": "Commercialisation", + "subtitle": "Forfaits support, sessions facturables et rapports", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Fonctionnalité précoce — facturation et forfaits en développement actif.", + "tabs": { + "overview": "Aperçu", + "packages": "Forfaits et contrats", + "sessions": "Sessions", + "reports": "Rapports", + "settings": "Paramètres avancés" }, - "branding": { - "identity_title": "Identité de marque", - "identity_desc": "Personnalisez le nom et la description de l'application affichés dans la console", - "app_name": "Nom de l'application", - "app_description": "Description de l'application", - "logo_title": "Logo", - "logo_desc": "Choisissez comment votre logo apparaît dans la barre latérale et la page de connexion", - "logo_type_icon": "Icône Material", - "logo_type_svg": "Code SVG", - "logo_type_image": "URL de l'image", - "logo_icon_name": "Nom de l'icône", - "logo_icon_hint": "Entrez un nom Material Icons (ex: dns, cloud, security). Voir fonts.google.com/icons", - "logo_svg_code": "Code SVG", - "logo_svg_hint": "Collez votre balisage SVG ici. Supporte les éléments complets avec chemins et styles.", - "logo_image_upload": "Télécharger une image", - "logo_image_choose": "Choisir un fichier image", - "logo_image_hint": "PNG, JPG, GIF, WebP ou SVG. Max 1,5 Mo. L'image est stockée en données base64.", - "logo_image_url": "Données / URL de l'image", - "logo_image_url_hint": "Rempli automatiquement lors du téléchargement ou collez une URL manuellement.", - "logo_image_too_large": "L'image est trop grande. Taille maximale : 1,5 Mo.", - "logo_image_invalid_type": "Type de fichier invalide. Utilisez PNG, JPG, GIF, WebP ou SVG.", - "preview": "Aperçu", - "colors_title": "Palette de couleurs", - "colors_desc": "Personnalisez la palette de couleurs. Laissez vide pour les valeurs par défaut.", - "colors_backgrounds": "Arrière-plans", - "colors_text": "Texte", - "colors_accents": "Couleurs d'accentuation", - "colors_borders": "Bordures", - "import_export_title": "Importation / exportation", - "import_export_desc": "Sauvegardez votre thème en fichier JSON ou importez-en un d'une autre instance", - "export_theme": "Exporter le thème", - "import_theme": "Importer un thème", - "reset_defaults": "Réinitialiser par défaut", - "save_branding": "Enregistrer l'image de marque", - "saved": "Enregistré", - "exported": "Thème exporté", - "imported": "Thème importé avec succès. Rechargement...", - "import_error": "Échec de l'import du thème. Format de fichier invalide.", - "reset_confirm": "Êtes-vous sûr de vouloir réinitialiser l'image de marque par défaut ? Cette action est irréversible.", - "reset_success": "Image de marque réinitialisée par défaut. Rechargement...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Texte principal affiché comme logo de votre marque", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Texte secondaire sous le logo (ex. nom du produit ou slogan)", - "logo_upload_success": "Logo téléversé avec succès.", - "typography_title": "Typography", - "typography_desc": "Choisissez les polices pour les titres et le corps du texte. Les polices sont téléchargées sur le serveur pour un hébergement local.", - "font_heading": "Police des titres", - "font_heading_hint": "Utilisée pour les titres (H1–H6) et le logo texte", - "font_body": "Body Font", - "font_body_hint": "Utilisée pour le texte courant et les éléments d’interface", - "font_search_placeholder": "Rechercher des polices...", - "font_system_default": "Valeur système par défaut", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "polices téléchargées sur le serveur", - "agent_desc": "Personnalisez le portail de téléchargement d'agent public affiché aux utilisateurs finaux.", - "agent_show_powered": "Afficher « Propulsé par BetterDesk »", - "agent_show_powered_hint": "Afficher l'attribution BetterDesk dans le pied de page du portail de téléchargement.", - "agent_title": "Page de téléchargement de l'agent", - "background_desc": "Définissez un fond d'écran, un dégradé ou un fond uni pour la console. Les cartes flottent au-dessus.", - "background_title": "Arrière-plan et apparence", - "bg_blur": "Flou d'arrière-plan", - "bg_color": "Couleur d'arrière-plan", - "bg_gradient": "Dégradé CSS", - "bg_gradient_hint": "Tout dégradé CSS valide, p. ex. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_choose": "Choisir un fichier image", - "bg_image_hint": "PNG, JPG, WebP ou GIF. 8 Mo maximum. Stocké sur le serveur.", - "bg_image_invalid_type": "Type de fichier invalide. Utilisez PNG, JPG, WebP ou GIF.", - "bg_image_too_large": "L'image est trop grande. La taille maximale est de 8 Mo.", - "bg_image_upload": "Télécharger l'image d'arrière-plan", - "bg_image_url": "Chemin de l'image / URL", - "bg_overlay": "Superposition sombre", - "bg_overlay_hint": "Assombrit l'arrière-plan pour une meilleure lisibilité du texte.", - "bg_size": "Dimensionnement de l'image", - "bg_size_auto": "Automatique (original)", - "bg_size_contain": "Contenu (ajuster)", - "bg_size_cover": "Couvrir (remplir l'écran)", - "bg_type_color": "Couleur unie", - "bg_type_gradient": "Dégradé", - "bg_type_image": "Image", - "bg_type_none": "Aucun", - "bg_upload_success": "Image d'arrière-plan téléchargée avec succès.", - "custom_css_desc": "Avancé : injectez du CSS personnalisé appliqué dans toute la console et la page de connexion.", - "custom_css_hint": "À utiliser avec précaution. Les règles invalides ou non sécurisées sont nettoyées. Maximum 20 000 caractères.", - "custom_css_title": "CSS personnalisé", - "footer_desc": "Ajoutez une ligne de pied de page personnalisée affichée sur l'écran de connexion et dans la barre latérale de la console.", - "footer_text": "Texte du pied de page", - "footer_text_hint": "p. ex. une mention de droit d'auteur ou le nom de l'entreprise.", - "footer_title": "Pied de page et droits d'auteur", - "login_bg_inherit": "Identique à la console", - "login_desc": "Personnalisez le titre, le sous-titre et l'arrière-plan de l'écran de connexion.", - "login_heading": "Titre de connexion", - "login_heading_placeholder": "Bon retour", - "login_subheading": "Sous-titre de connexion", - "login_subheading_placeholder": "Connectez-vous à votre compte", - "login_title": "Page de connexion", - "powered_by": "Propulsé par", - "show_powered": "Afficher l'attribution « BetterDesk »", - "show_powered_hint": "Afficher le nom et la version de BetterDesk dans le pied de page de connexion et la barre latérale." + "clock": { + "title": "Heure serveur (NTP)", + "check_now": "Vérifier", + "unsynced": "L'horloge du serveur n'est pas synchronisée — les sessions facturables peuvent être bloquées" }, - "device_detail": { - "tab_overview": "Vue d'ensemble", - "tab_tags": "Étiquettes et notes", - "tab_actions": "Actions", - "section_identity": "Identité", - "section_network": "Réseau", - "section_timestamps": "Horodatages", - "section_connect": "Connexion", - "section_manage": "Gestion", - "folder": "Dossier", - "status_tier": "Niveau de statut", - "device_banned": "Cet appareil est banni", - "no_reason": "Aucune raison fournie", - "tags": "Tags", - "no_tags": "Aucun tag assigné à cet appareil", - "tag_placeholder": "Entrez un nom de tag...", - "add_tag": "Ajouter", - "tag_exists": "Ce tag existe déjà", - "notes": "Notes", - "notes_placeholder": "Ajoutez des notes sur cet appareil...", - "danger_zone": "Zone de danger", - "action_connect_web": "Bureau à distance Web", - "action_connect_web_desc": "Connexion via le bureau à distance du navigateur", - "action_native_remote": "Remote BetterDesk", - "action_native_remote_desc": "Flux JPEG natif — aucun plugin requis", - "action_connect_desktop": "Client de bureau", - "action_connect_desktop_desc": "Ouvrir dans l'application client de bureau", - "action_change_id_desc": "Changer l'ID d'enregistrement de l'appareil", - "action_ban_desc": "Empêcher cet appareil de se connecter", - "action_unban_desc": "Permettre à cet appareil de se reconnecter", - "action_delete_desc": "Supprimer définitivement cet appareil", - "tab_hardware": "Matériel", - "tab_metrics": "Métriques", - "section_system": "Système", - "section_cpu": "Processeur", - "section_memory": "Mémoire", - "section_displays": "Écrans", - "section_encoding": "Capacités d'encodage", - "section_live_metrics": "Métriques en direct", - "section_current_usage": "Utilisation actuelle", - "section_usage_history": "Historique d'utilisation", - "os": "Système d'exploitation", - "version": "Version", - "cpu_model": "Modèle CPU", - "cpu_cores": "Cœurs CPU", - "cpu_freq": "Fréquence CPU", - "total_memory": "Mémoire totale", - "metric_memory": "Mémoire", - "metric_disk": "Disque", - "metrics_updated": "Mis à jour", - "device_groups": "Groupes", - "no_sysinfo": "Aucune information matérielle disponible", - "no_sysinfo_hint": "Les infos système apparaîtront après que l'appareil aura envoyé un rapport sysinfo", - "no_metrics": "Aucune métrique disponible", - "no_metrics_hint": "Les métriques apparaîtront après que l'appareil aura envoyé des rapports de battement de cœur", - "chart_oldest": "← Plus ancien", - "chart_newest": "Plus récent →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Fichiers", - "agent_lazy_hint": "Cliquez sur cet onglet pour charger les données en direct depuis l’agent", - "agent_offline": "L’agent est hors ligne", - "agent_timeout": "L’agent n’a pas répondu à temps", - "agent_error": "Impossible de charger les données depuis l’agent", - "service_name": "Name", - "service_display": "Nom affiché", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Sessions facturables actives" }, - "inventory": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "device_id": "ID de l'appareil", - "hostname": "Nom d'hôte", - "os": "Système d'exploitation", - "cpu": "Processor", - "cpu_cores": "Cœurs CPU", - "cpu_usage": "Utilisation CPU", - "memory": "Memory", - "memory_total": "Mémoire totale", - "memory_used": "Mémoire utilisée", - "memory_available": "Mémoire disponible", - "memory_usage": "Utilisation mémoire", - "swap": "Swap", - "disks": "Disques", - "disk_count": "Nombre de disques", - "network": "Network Adapters", - "network_interfaces": "Interfaces réseau", - "software": "Logiciels", - "software_count": "Logiciels installés", - "system": "Système", - "kernel": "Noyau", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Fréquence", - "physical_cores": "Cœurs physiques", - "logical_cores": "Cœurs logiques", - "model": "Modèle", - "usage": "Utilisation", - "total": "Total", - "used": "Utilisé", - "available": "Disponible", - "mount_point": "Point de montage", - "removable": "Amovible", - "mac_address": "Adresse MAC", - "ip_addresses": "Adresses IP", - "traffic": "Trafic", - "collect_now": "Collecter maintenant", - "collector_running": "Collecte en cours", - "collector_stopped": "Collecte arrêtée", - "last_upload": "Dernier envoi", - "total_uploads": "Total", - "last_seen": "Vu en dernier", - "collected_at": "Collecté le", - "no_data": "No hardware data available", - "no_devices": "Aucun appareil avec des données d'inventaire trouvé", - "detail_title": "Détails d'inventaire de l'appareil", - "telemetry": "Télémétrie", - "view_detail": "Voir les détails", - "export": "Exporter", - "refresh": "Actualiser" + "packages": { + "new": "Nouveau forfait", + "name": "Nom", + "included_minutes": "Minutes incluses", + "overage_rate": "Tarif dépassement / h", + "currency": "Devise", + "heading": "Forfaits de support", + "prompt_name": "Nom du forfait", + "create_title": "Nouveau forfait pour l'organisation", + "create_submit": "Créer le forfait", + "select_org": "Organisation", + "select_org_placeholder": "Sélectionner une organisation…" }, - "tickets": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "create": "Créer", - "edit": "Modifier", - "delete": "Supprimer", - "detail": "Détails du ticket", - "ticket_id": "ID du ticket", - "ticket_title": "Titre", - "description": "Description", - "status": "Statut", - "priority": "Priorité", - "category": "Catégorie", - "assigned_to": "Assigné à", - "created_by": "Créé par", - "device": "Appareil", - "sla_due": "Échéance SLA", - "created_at": "Créé", - "updated_at": "Mis à jour", - "resolved_at": "Résolu", - "closed_at": "Fermé", - "status_open": "Ouvert", - "status_in_progress": "En cours", - "status_resolved": "Résolu", - "status_closed": "Fermé", - "priority_low": "Faible", - "priority_medium": "Moyen", - "priority_high": "Élevé", - "priority_critical": "Critique", - "category_general": "Général", - "category_hardware": "Matériel", - "category_software": "Logiciel", - "category_network": "Réseau", - "category_access": "Accès", - "category_other": "Autre", - "comments": "Commentaires", - "add_comment": "Ajouter un commentaire", - "comment_placeholder": "Écrire un commentaire...", - "internal_note": "Note interne (non visible par les utilisateurs finaux)", - "attachments": "Pièces jointes", - "upload_attachment": "Télécharger une pièce jointe", - "download": "Télécharger la clé", - "connect_device": "Se connecter à l'appareil", - "no_tickets": "Aucun ticket trouvé", - "no_comments": "Aucun commentaire", - "no_attachments": "Aucune pièce jointe", - "title_required": "Le titre est requis", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer le ticket #{id} ?", - "delete_success": "Appareil supprimé avec succès", - "created_success": "Ticket créé avec succès", - "updated_success": "Ticket mis à jour avec succès", - "sla_overdue": "SLA dépassé", - "filter_all": "Tous", - "search_placeholder": "Rechercher des appareils...", - "assign_to_me": "M'assigner", - "unassign": "Désassigner", - "stats_total": "Total", - "stats_open": "Ouverts", - "stats_in_progress": "En cours", - "stats_resolved": "Résolus", - "stats_closed": "Fermés" - }, - "activity": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "device": "Appareil", - "hostname": "Nom d'hôte", - "sessions": "Sessions actives", - "idle_time": "Temps d'inactivité", - "active_time": "Temps actif", - "last_report": "Dernier rapport", - "top_apps": "Applications principales", - "app_name": "Nom de l'application", - "window_title": "Titre de la fenêtre", - "category": "Catégorie", - "duration": "Durée", - "started_at": "Démarré", - "ended_at": "Terminé", - "session_count": "Nombre de sessions", - "total_active": "Total actif", - "total_idle": "Total inactif", - "detail_count": "Enregistrements détaillés", - "no_data": "No hardware data available", - "no_sessions": "Aucune session enregistrée", - "filter_from": "De", - "filter_to": "À", - "filter_apply": "Appliquer le filtre", - "hours": "heures", - "minutes": "minutes", - "seconds": "secondes", - "category_browser": "Navigateur", - "category_productivity": "Productivité", - "category_communication": "Communication", - "category_development": "Développement", - "category_media": "Médias", - "category_gaming": "Jeux", - "category_system": "Système", - "category_other": "Autre", - "summary": "Résumé", - "details": "Détails de l'appareil", - "refresh": "Actualiser", - "search": "Rechercher des appareils...", - "date_range": "Plage de dates", - "device_id": "ID de l'appareil", - "session_start": "Début de session", - "session_end": "Fin de session", - "user": "Utilisateur", - "no_activity": "Aucune activité enregistrée", - "reported_at": "Reported At", - "detail": "Détails du ticket", - "no_apps": "Aucune application" - }, - "automation": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "rules": "Règles d'alerte", - "rules_subtitle": "Définir les conditions qui déclenchent des notifications", - "alerts": "Historique des alertes", - "alerts_subtitle": "Voir et acquitter les alertes déclenchées", - "commands": "Commandes à distance", - "commands_subtitle": "Envoyer des commandes aux appareils distants", - "smtp": "Configuration SMTP", - "smtp_subtitle": "Paramètres de notification par e-mail", - "rule_name": "Nom de la règle", - "description": "Description", - "condition_type": "Type de condition", - "condition_op": "Opérateur", - "condition_value": "Seuil", - "severity": "Sévérité", - "scope_device": "Appareil cible", - "scope_all": "Tous les appareils", - "cooldown": "Temps de refroidissement (secondes)", - "notify_emails": "E-mails de notification", - "enabled": "Activé", - "disabled": "Désactivé", - "create_rule": "Créer une règle", - "edit_rule": "Modifier la règle", - "delete_rule": "Supprimer la règle", - "acknowledge": "Acquitter", - "acknowledged": "Acquitté", - "unacknowledged": "Non acquitté", - "triggered_at": "Déclenché le", - "severity_info": "Info", - "severity_warning": "Avertissement", - "severity_critical": "Critique", - "op_gt": "Supérieur à", - "op_gte": "Supérieur ou égal", - "op_lt": "Inférieur à", - "op_lte": "Inférieur ou égal", - "op_eq": "Égal à", - "op_neq": "Différent de", - "type_cpu_usage": "Utilisation CPU (%)", - "type_memory_usage": "Utilisation mémoire (%)", - "type_disk_usage": "Utilisation disque (%)", - "type_offline_duration": "Durée hors ligne (s)", - "type_idle_duration": "Durée d'inactivité (s)", - "type_custom": "Personnalisé", - "command_type": "Type de commande", - "command_payload": "Commande / Script", - "command_result": "Résultat", - "command_status": "Statut", - "send_command": "Envoyer la commande", - "status_pending": "En attente", - "status_running": "En cours", - "status_completed": "Terminé", - "status_failed": "Échoué", - "smtp_host": "Hôte SMTP", - "smtp_port": "Port", - "smtp_secure": "Utiliser TLS", - "smtp_user": "Nom d'utilisateur", - "smtp_pass": "Mot de passe", - "smtp_from": "Adresse d'expédition", - "smtp_test": "Tester la connexion", - "smtp_save": "Enregistrer la configuration", - "smtp_test_success": "Connexion réussie", - "smtp_test_failed": "Échec de la connexion", - "no_rules": "Aucune règle d'attribution.", - "no_alerts": "Aucune alerte déclenchée", - "no_commands": "Aucune commande envoyée", - "id_payload_required": "L’ID de l’appareil et la charge utile sont requis", - "no_commands_sent": "Aucune commande envoyée pour le moment" - }, - "file_transfer": { - "title": "Tableau de bord", - "transfers": "Transferts", - "new_transfer": "Nouveau transfert", - "upload": "Télécharger vers", - "download": "Télécharger la clé", - "direction": "Direction", - "filename": "Nom du fichier", - "file_size": "Taille du fichier", - "mime_type": "Type MIME", - "progress": "Progression", - "status": "Statut", - "device": "Appareil", - "initiated_by": "Initié par", - "created_at": "Créé", - "cancel": "Annuler", - "cancel_confirm": "Êtes-vous sûr de vouloir annuler ce transfert ?", - "download_file": "Télécharger le fichier", - "browse_files": "Parcourir les fichiers", - "select_file": "Sélectionner un fichier", - "select_device": "Sélectionner un appareil", - "no_transfers": "Aucun transfert de fichier", - "status_pending": "En attente", - "status_active": "Actif", - "status_completed": "Terminé", - "status_failed": "Échoué", - "status_cancelled": "Annulé", - "bytes_transferred": "Octets transférés", - "chunks": "Blocs", - "transfer_started": "Transfert démarré", - "transfer_completed": "Transfert terminé", - "transfer_failed": "Transfert échoué", - "transfer_cancelled": "Transfert annulé", - "max_file_size": "Taille maximale du fichier : 4 Go", - "error_too_large": "Le fichier est trop volumineux", - "error_no_device": "Aucun appareil sélectionné", - "error_no_file": "Aucun fichier sélectionné" - }, - "network": { - "title": "Tableau de bord", - "targets": "Cibles de surveillance", - "add_target": "Ajouter une cible", - "edit_target": "Modifier la cible", - "delete_target": "Supprimer la cible", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer cette cible ?", - "target_name": "Nom", - "host": "Hôte", - "port": "Port", - "url": "URL", - "check_type": "Type de vérification", - "timeout": "Délai d'attente (ms)", - "interval": "Intervalle (ms)", - "enabled": "Activé", - "status": "Statut", - "last_check": "Dernière vérification", - "last_rtt": "Dernier RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Accessible", - "status_down": "Inaccessible", - "status_unknown": "Inconnu", - "check_now": "Vérifier maintenant", - "history": "History", - "stats": "Statistiques", - "total_targets": "Cibles totales", - "targets_up": "Cibles accessibles", - "targets_down": "Cibles inaccessibles", - "type_ping": "Ping (ICMP)", - "type_tcp": "Port TCP", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Outils réseau", - "ping_tool": "Test Ping", - "tcp_tool": "Vérification port TCP", - "http_tool": "Vérification HTTP", - "dns_tool": "Résolution DNS", - "monitor_start": "Démarrer la surveillance", - "monitor_stop": "Arrêter la surveillance", - "monitor_running": "Surveillance en cours", - "monitor_stopped": "Surveillance arrêtée", - "no_targets": "Aucune cible de surveillance configurée", - "no_history": "Aucun historique de vérification disponible", - "error_code": "Erreur", - "status_code": "Code de statut HTTP", - "search_targets": "Rechercher des cibles...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Historique des vérifications", - "name_host_required": "Le nom et l’hôte sont requis", - "uptime": "Uptime", - "response_time": "Temps de réponse", - "avg_response": "Réponse moyenne", - "charts": "Graphiques", - "realtime": "Temps réel", - "response_time_ms": "Temps de réponse (ms)", - "uptime_percent": "Disponibilité %", - "last_24h": "Dernières 24 heures", - "last_7d": "7 derniers jours", - "last_30d": "30 derniers jours" - }, - "dataguard": { - "title": "Tableau de bord", - "policies": "Politiques DLP", - "add_policy": "Ajouter une politique", - "edit_policy": "Modifier la politique", - "delete_policy": "Supprimer la politique", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer cette politique ?", - "policy_name": "Nom", - "policy_description": "Description", - "policy_desc": "Description de la politique", - "status": "Statut", - "enabled": "Activé", - "disabled": "Désactivé", - "rules": "Règles d'alerte", - "add_rule": "Ajouter une règle", - "rule_type": "Type de règle", - "rule_type_usb": "Périphérique USB", - "rule_type_file": "Opération sur fichier", - "action": "Action", - "action_allow": "Autoriser", - "action_block": "Bloquer", - "action_log": "Journaliser uniquement", - "filter": "Filtre", - "vid": "ID fournisseur (VID)", - "pid": "ID produit (PID)", - "serial": "Numéro de série", - "device_class": "Classe d'appareil", - "drive_type": "Type de lecteur", - "file_extensions": "Extensions de fichier", - "events": "Événements DLP", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Fichier", - "event_type": "Type d'événement", - "event_details": "Détails", - "no_policies": "Aucune politique DLP configurée", - "no_events": "Aucun événement DLP enregistré", - "stats": "Statistiques", - "total_events": "Total des événements", - "blocked_events": "Bloqués", - "logged_events": "Journalisés", - "usb_events": "Événements USB", - "file_events": "Événements fichier", - "device_id": "ID de l'appareil", - "policy_matched": "Politique correspondante", - "timestamp": "Horodatage", - "drive_removable": "Amovible", - "drive_fixed": "Fixe", - "drive_network": "Réseau", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Inconnu", - "total_policies": "Nombre total de politiques", - "active_policies": "Politiques actives", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Politiques", - "tab_events": "Events", - "search_policies": "Rechercher des politiques...", - "create_policy": "Créer une politique", - "policy_type": "Type de politique", - "scope": "Scope", - "events_count": "Events", - "search_events": "Rechercher des événements...", - "event_time": "Event Time", - "device": "Appareil", - "policy": "Politique", - "detail": "Détails du ticket", - "scope_help": "ID d’appareils séparés par des virgules, ou laissez vide pour tous", - "scope_all": "Tous les appareils", - "active": "Actif", - "type_file_type": "Type de fichier", - "type_usb": "USB", - "type_clipboard": "Presse-papiers", - "type_screen_share": "Partage d’écran", - "type_file_transfer": "Transfert de fichiers" + "sessions": { + "device": "Appareil", + "operator": "Opérateur", + "duration": "Durée", + "phase": "Phase", + "amount": "Montant" }, "reports": { - "title": "Tableau de bord", - "generate": "Générer la configuration", - "generate_csv": "Exporter CSV", - "report_type": "Type de rapport", - "type_devices": "Résumé des appareils", - "type_activity": "Résumé d'activité", - "type_security": "Rapport de sécurité", - "type_tickets": "Rapport de tickets", - "type_network": "Rapport réseau", - "type_inventory": "Rapport d'inventaire", - "type_alerts": "Rapport d'alertes", - "saved": "Enregistré", - "save_report": "Sauvegarder le rapport", - "delete_report": "Supprimer le rapport", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce rapport enregistré ?", - "no_saved": "Aucun rapport enregistré", - "report_title": "Titre", - "created_by": "Créé par", - "created_at": "Créé", - "filters": "Filtres", - "date_from": "De", - "date_to": "À", - "device_filter": "ID de l'appareil", - "generated_at": "Généré le", - "section": "Section de données", - "total_devices": "Total des appareils", - "online": "En ligne", - "offline": "Hors ligne", - "banned": "Bannis", - "platform_distribution": "Distribution par plateforme", - "top_applications": "Applications principales", - "total_active": "Total actif", - "total_idle": "Total inactif", - "dlp_stats": "Statistiques DLP", - "banned_devices": "Appareils bannis", - "audit_logs": "Journaux d'audit", - "ticket_stats": "Statistiques des tickets", - "category_distribution": "Distribution par catégorie", - "priority_distribution": "Distribution par priorité", - "targets_status": "Statut des cibles", - "os_distribution": "Distribution des OS", - "avg_ram": "RAM moyenne", - "alert_rules": "Règles d'alerte", - "recent_alerts": "Alertes récentes", - "tab_generate": "Générer un rapport", - "tab_saved": "Rapports enregistrés", - "type_devices_desc": "Vue d'ensemble de tous les appareils, plateformes et statuts", - "type_activity_desc": "Résumé de l'utilisation des applications et du temps d'inactivité", - "type_security_desc": "Actions de bannissement, événements DLP et journaux d'audit", - "type_tickets_desc": "Statistiques des tickets et performance SLA", - "type_network_desc": "Cibles de surveillance réseau et données de disponibilité", - "type_inventory_desc": "Résumé de l'inventaire matériel et logiciel", - "type_alerts_desc": "Règles d'alerte et historique des alertes déclenchées", - "report_name": "Nom du rapport", - "format": "Format", - "save": "Enregistrer", - "preview": "Aperçu", - "download": "Télécharger la clé", - "delete_saved": "Supprimer le rapport", - "raw_json": "Raw JSON" + "session": "Session", + "summary": "Résumé", + "date": "Date" }, - "tenants": { - "title": "Tableau de bord", - "list": "Locataires", - "add_tenant": "Ajouter un locataire", - "edit_tenant": "Modifier le locataire", - "delete_tenant": "Supprimer le locataire", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce locataire ? Toutes les affectations d'appareils et d'utilisateurs seront supprimées.", - "name": "Name", - "slug": "Slug", - "contact_name": "Nom du contact", - "contact_email": "E-mail du contact", - "max_devices": "Max appareils", - "max_devices_hint": "0 = illimité", - "notes": "Notes", - "active": "Actif", - "inactive": "Inactif", - "devices": "Appareils", - "users": "Utilisateurs", - "assign_device": "Assigner un appareil", - "assign_devices": "Assigner des appareils", - "remove_device": "Retirer l'appareil", - "assign_user": "Assigner un utilisateur", - "remove_user": "Retirer l'utilisateur", - "no_tenants": "Aucun locataire configuré", - "no_devices": "Aucun appareil avec des données d'inventaire trouvé", - "no_users": "Aucun utilisateur assigné à ce locataire", - "stats": "Statistiques", - "total_devices": "Total des appareils", - "online_devices": "Appareils en ligne", - "total_users": "Total des utilisateurs", - "created_at": "Créé", - "updated_at": "Mis à jour", - "slug_exists": "Le slug du locataire existe déjà", - "total_tenants": "Total des locataires", - "active_tenants": "Locataires actifs", - "search": "Search devices...", - "create_tenant": "Créer un locataire", - "detail": "Détails du ticket", - "contact": "Contact", - "enabled": "Activé", - "disabled": "Désactivé", - "max": "max", - "info": "Information", - "status": "Statut" + "contracts": { + "title": "Contrats organisationnels", + "new": "Assigner un forfait", + "org": "Organisation", + "package": "Forfait", + "remaining": "Minutes restantes", + "status": "Statut", + "actions": "Actions", + "suspend": "Suspendre", + "activate": "Activer", + "select_org": "Sélectionner une organisation", + "select_package": "Sélectionner un forfait", + "no_orgs": "Aucune organisation trouvée", + "no_packages": "Créez d'abord un forfait" }, - "registrations": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "search_placeholder": "Rechercher des appareils...", - "no_registrations": "Aucune demande d'inscription", - "col_device_id": "ID de l'appareil", - "col_hostname": "Nom d'hôte", - "col_platform": "Plateforme", - "col_ip": "Adresse IP", - "col_version": "Version", - "col_status": "Statut", - "col_requested": "Demandé", - "col_actions": "Actions", - "status_pending": "En attente", - "status_approved": "Approuvé", - "status_rejected": "Rejeté", - "approve_btn": "Approuver", - "approve_confirm": "Êtes-vous sûr de vouloir approuver cet appareil ? Il recevra les identifiants du serveur et pourra se connecter automatiquement.", - "approved_success": "Inscription de l'appareil approuvée avec succès", - "reject_btn": "Rejeter", - "reject_title": "Rejeter l'inscription", - "reject_confirm": "Êtes-vous sûr de vouloir rejeter cette demande d'inscription ?", - "reject_reason": "Raison (optionnel)", - "reject_reason_placeholder": "Entrez la raison du rejet...", - "rejected_success": "Inscription de l'appareil rejetée", - "delete_confirm": "Êtes-vous sûr de vouloir supprimer cet enregistrement d'inscription ?", - "deleted_success": "Enregistrement d'inscription supprimé", - "enrollment_title": "Inscription des appareils", - "enrollment_subtitle": "Demandes d’inscription en attente depuis les clients de bureau BetterDesk", - "enrollment_empty": "Aucune demande d’inscription en attente", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Nom affiché", - "enrollment_display_name_placeholder": "Saisissez un nom pour cet appareil...", - "enrollment_sync_mode": "Mode de synchronisation", - "enrollment_sync_silent": "Silencieux — télémétrie minimale", - "enrollment_sync_standard": "Standard — synchronisation équilibrée", - "enrollment_sync_turbo": "Turbo — synchronisation agressive", - "enrollment_approved_success": "Inscription de l’appareil approuvée", - "enrollment_rejected_success": "Inscription de l’appareil rejetée", - "approve_title": "Approuver l'appareil", - "banner_locked_mode": "L'inscription est verrouillée — seuls les appareils liés à un jeton peuvent s'inscrire. Le mode géré est requis pour l'approbation des clients inconnus par l'opérateur.", - "banner_open_mode": "L'inscription est ouverte — les nouveaux clients RustDesk s'inscrivent sans approbation de l'opérateur. Définissez le mode géré dans les paramètres pour utiliser cette file d'attente.", - "enrollment_settings_link": "Paramètres d'inscription", - "field_folder": "Dossier", - "field_folder_none": "Aucun dossier", - "field_groups": "Groupes d'appareils", - "field_name": "Nom de l'appareil", - "field_name_placeholder": "Entrez un nom pour cet appareil...", - "field_sync_mode": "Mode de synchronisation", - "field_tag_add_btn": "Ajouter", - "field_tag_add_placeholder": "Ajouter un nouveau tag...", - "field_tags": "Tags", - "field_tags_existing": "Tags existants", - "field_tags_placeholder": "Tags séparés par des virgules (p. ex. bureau, ordinateur portable)...", - "reject_ban_hint": "L'appareil sera bloqué et ne pourra plus envoyer de nouvelles demandes d'inscription.", - "reject_ban_option": "Bannir cet appareil", - "sync_silent": "Silencieux — télémétrie minimale", - "sync_standard": "Standard — synchronisation équilibrée", - "sync_turbo": "Turbo — synchronisation agressive" + "export": { + "csv": "Exporter CSV", + "pdf": "Exporter PDF", + "sessions_csv": "Exporter les sessions CSV" }, - "backup": { - "title": "Tableau de bord", - "desc": "Téléchargez une sauvegarde complète de la configuration de votre console, utilisateurs, groupes et paramètres. Les données peer du serveur Go sont incluses lorsque le backend BetterDesk est actif.", - "restore_title": "Restaurer", - "restore_desc": "Téléchargez un fichier de sauvegarde précédemment téléchargé pour restaurer la configuration de la console. Sélectionnez ci-dessous les sections à restaurer.", - "stat_users": "Utilisateurs", - "stat_settings": "Paramètres", - "stat_folders": "Dossiers", - "stat_groups": "Groupes", - "stat_strategies": "Stratégies", - "stat_backend": "Backend", - "download": "Télécharger la clé", - "creating": "Création de la sauvegarde...", - "download_success": "Fichier de clé téléchargé", - "upload": "Télécharger vers", - "restore_confirm": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde ? Les sections sélectionnées seront écrasées.", - "restore_success": "Sauvegarde restaurée avec succès. Certaines modifications peuvent nécessiter un rechargement de la page.", - "restored": "Restauré", - "skipped": "Ignoré", - "backup_date": "Date de sauvegarde", - "opt_settings": "Paramètres de la console", - "opt_branding": "Image de marque / Thème", - "opt_folders": "Dossiers d'appareils", - "opt_groups": "Groupes d'utilisateurs & d'appareils", - "opt_addressbooks": "Carnets d'adresses", - "opt_users": "Comptes utilisateurs", - "opt_users_warning": "Destructif : remplace TOUS les comptes utilisateurs par les données de sauvegarde. Vous pourriez être déconnecté.", - "no_file": "Aucun fichier de sauvegarde sélectionné", - "invalid_json": "Format JSON invalide", - "invalid_format": "Fichier de sauvegarde invalide : pas une sauvegarde BetterDesk", - "opt_database": "Base de données (toutes les tables)", - "opt_database_hint": "Réimporte toutes les données de la console. Appliqué en direct, aucun redémarrage nécessaire.", - "opt_env": "Fichier d'environnement (.env)", - "opt_env_warning": "Écrase SESSION_SECRET, la clé API, le DSN de la base de données, les ports et les paramètres TLS. Nécessite un redémarrage du service.", - "opt_godb": "Base de données du serveur Go", - "opt_godb_warning": "Écrase la base de données SQLite du serveur Go (backend SQLite uniquement). Nécessite un redémarrage du service.", - "opt_secrets": "Clés et secrets du serveur", - "opt_secrets_warning": "Écrase l'identité du serveur Ed25519, la clé API et le secret de session. Nécessite un redémarrage du service.", - "opt_uploads": "Fichiers de marque", - "opt_uploads_hint": "Logos et images téléchargées.", - "restart_required": "Certains composants restaurés (clés / .env / base de données Go) nécessitent un redémarrage du service pour prendre effet.", - "restore_warning": "La restauration des secrets, du fichier d'environnement ou de la base de données du serveur Go écrase l'identité du serveur et nécessite un redémarrage du service par la suite.", - "security_warning": "Cette sauvegarde contient des secrets (clés serveur, fichier d'environnement, hachages de mots de passe et secrets 2FA). Conservez-la en sécurité et ne la partagez jamais.", - "stat_database": "Moteur de base de données", - "stat_env": "Fichier d'environnement", - "stat_keys": "Clés serveur incluses", - "stat_uploads": "Fichiers de marque" + "report": { + "title": "Rapport de travail", + "subtitle": "Décrivez le travail effectué pendant cette session à distance.", + "category": "Catégorie", + "ticket_ref": "Référence ticket", + "summary": "Travail effectué", + "skip": "Ignorer pour l'instant", + "submit": "Envoyer le rapport", + "summary_required": "Le résumé est obligatoire", + "saved": "Rapport de travail enregistré" }, - "cdap": { - "device_detail": "Détail de l'appareil", - "loading": "Chargement...", - "loading_widgets": "Chargement des widgets de l’appareil...", - "load_error": "Impossible de charger les données de l’appareil", - "connected": "Connecté", - "disconnected": "Déconnecté", - "device_offline_msg": "L’appareil est actuellement hors ligne. Les valeurs des widgets peuvent être obsolètes.", - "no_widgets": "Cet appareil ne signale aucun widget.", - "no_widgets_desc": "Cet appareil n’a pas enregistré de manifeste CDAP avec des définitions de widgets.", - "command_log": "Journal des commandes", - "clear_log": "Effacer le journal", - "confirm_command": "Exécuter cette commande ?", - "select_option": "Sélectionner", - "cdap_status": "Statut CDAP", - "cdap_enabled": "CDAP activé", - "cdap_disabled": "CDAP désactivé", - "cdap_devices": "Appareils CDAP", - "cdap_connections": "Connexions actives", - "send_command": "Envoyer la commande", - "command_sent": "Commande envoyée", - "command_failed": "Échec de l'envoi de la commande", - "devices_title": "Appareils CDAP", - "devices_subtitle": "Appareils connectés via le protocole Custom Device Application Protocol", - "stat_connected": "Connecté", - "stat_port": "Port", - "search_devices": "Rechercher des appareils...", - "no_devices": "Aucun appareil avec des données d'inventaire trouvé", - "no_devices_desc": "Aucun appareil CDAP n’est actuellement connecté. Les appareils apparaîtront ici après leur connexion à la passerelle.", - "gateway_disabled": "Passerelle CDAP désactivée", - "gateway_disabled_desc": "Activez la passerelle CDAP en définissant CDAP_ENABLED=true dans la configuration du serveur.", - "gateway_active": "Active", - "toggle_enable": "Activer CDAP", - "toggle_disable": "Désactiver CDAP", - "enabled_restart": "CDAP activé. Un redémarrage du serveur est requis pour appliquer les changements.", - "disabled_restart": "CDAP désactivé. Un redémarrage du serveur est requis pour appliquer les changements.", - "widgets": "Widgets CDAP", - "type_all": "Tous", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agent OS", - "type_network": "Rapport réseau", - "type_camera": "Caméra", - "type_custom": "Personnalisé", - "active_alerts": "Alertes actives", - "alert_fired": "Alerte déclenchée", - "alert_cleared": "Alerte effacée", - "no_alerts": "Aucune alerte déclenchée", - "connect_terminal": "Connecter le terminal", - "table_search": "Rechercher...", - "just_now": "à l'instant", - "terminal_connecting": "Connexion à l’appareil...", - "terminal_disconnected": "Déconnecté", - "terminal_error": "Échec de la connexion au terminal", - "linked_devices": "Appareils liés", - "link_device": "Lier un appareil", - "unlink_device": "Délier", - "no_linked_devices": "Aucun appareil lié", - "unlink_confirm": "Voulez-vous vraiment dissocier cet appareil ?", - "link_prompt": "Saisissez l’ID pair à lier à cet appareil :", - "connect_desktop": "Connecter via le client de bureau", - "connect_video": "Connecter le flux", - "connect_files": "Parcourir les fichiers", - "connect_audio": "Connecter l'audio", - "upload_file": "Upload", - "desktop_connecting": "Connexion...", - "video_connecting": "Connexion...", - "files_connecting": "Connexion...", - "audio_connecting": "Connexion audio...", - "audio_streaming": "Audio en streaming", - "clipboard_in": "Presse-papiers appareil → navigateur", - "clipboard_out": "Presse-papiers navigateur → appareil", - "monitor_select": "Sélectionner le moniteur", - "keyframe_request": "Demander une image clé", - "quality_auto": "Qualité automatique" + "empty": { + "packages": "Aucun forfait pour l'instant. Créez-en un avec le bouton ci-dessus.", + "contracts": "Aucun contrat d'organisation pour l'instant. Assignez un forfait à une organisation.", + "sessions": "Aucune session facturable enregistrée.", + "reports": "Aucun rapport de travail soumis." }, - "desktop": { - "switch_mode": "Mode bureau", - "console_mode": "Mode console", - "loading": "Chargement...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Fermer", - "widgets_mode": "Mode widgets", - "windows_mode": "Windows", - "wallpaper": "Fond d'écran", - "add_widget": "Ajouter un widget", - "remove_widget": "Supprimer le widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Configurer", - "search_widgets": "Rechercher des widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Appareils", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Ajoutez des notes sur cet appareil...", - "search_placeholder": "Rechercher des appareils...", - "search_pages": "Pages", - "search_devices": "Search devices...", - "search_no_results": "No results", - "exit_desktop": "Quitter le bureau", - "refresh": "Actualiser", - "fullscreen": "Plein écran", - "help": "Help", - "widget_clock": "Clock", - "widget_device_status": "État des appareils", - "widget_server_health": "Infos serveur", - "widget_system_stats": "Jauges des appareils", - "widget_device_list": "Liste des appareils", - "widget_quick_actions": "Actions rapides", - "widget_recent_activity": "Activité récente", - "widget_notes": "Notes", - "widget_network_monitor": "Surveillance réseau", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Appareils CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Grille d’appareils", - "widget_multi_gauge": "Jauges serveur", - "widget_weekly_chart": "Activité hebdomadaire", - "widget_quick_controls": "Contrôles rapides", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Statistiques de connexion", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sessions utilisateur", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Aucun appareil", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Ouvrir", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Définir l’URL dans la configuration", - "label_server_uptime": "Temps de fonctionnement du serveur", - "label_merged_info": "Fusionné dans le widget Infos serveur", - "label_with_notes": "Avec notes", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Nombre total d’appareils", - "label_throughput": "Throughput", - "label_active_relays": "Relais actifs", - "label_total_relayed": "Total relayé", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrer les appareils...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Aucun appareil CDAP", - "action_add_widget": "Ajouter un widget", - "label_merged_server_info": "Fusionné dans le widget Infos serveur", - "wp_images": "Images", - "wp_colors": "Couleurs unies", - "wp_custom_color": "Couleur personnalisée", - "wp_fit_style": "Style", - "wp_fill": "Remplir", - "wp_fit": "Ajuster", - "wp_stretch": "Étirer", - "wp_center": "Centrer", - "wp_unavailable": "Les images de fond d’écran ne sont pas installées sur ce serveur.", - "wp_download_hint": "Placez des images PNG dans le répertoire public/wallpapers/ pour activer le choix du fond d’écran.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Surveillance des processus", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Statistiques de base de données", - "widget_docker_containers": "Conteneurs Docker", - "widget_shell_command": "Commande shell", - "widget_device_map": "Carte des appareils", - "widget_remote_connect": "Connexion distante", - "label_no_online": "Aucun appareil en ligne", - "label_no_events": "Aucun événement aujourd’hui", - "label_event_title": "Titre de l’événement :", - "label_no_data": "Aucune donnée disponible", - "label_download_speed": "Vitesse de téléchargement", - "label_latency": "Latency", - "label_server": "Serveur", - "label_run_test": "Run Test", - "label_testing": "Test en cours...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Aucun conteneur", - "label_docker_unavailable": "Docker non disponible", - "label_no_command": "Aucune commande configurée", - "label_no_output": "Aucune sortie pour le moment", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Enregistrer le préréglage", - "label_load_preset": "Load Preset", - "label_preset_name": "Nom du préréglage :", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Disposition automatique", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 colonnes (égales)", - "label_2col_wide": "2 colonnes (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Groupe de widgets", - "ungroup_widgets": "Dégrouper les widgets", - "group_widgets": "Grouper les widgets sélectionnés", - "snap_layouts": "Dispositions d’ancrage", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Ancrer en haut à gauche", - "snap_top_right": "Ancrer en haut à droite", - "snap_bottom_left": "Ancrer en bas à gauche", - "snap_bottom_right": "Ancrer en bas à droite", - "aero_shake": "Secouer pour réduire les autres fenêtres", - "zone_resize": "Faites glisser la bordure pour redimensionner les zones", - "zone_borders": "Bordures de zones déplaçables", - "app_drawer": "Applications", - "search_apps": "Rechercher des applications...", - "edit_shortcuts": "Modifier les raccourcis", - "widgets": "widgets", - "theme": "Theme" + "assign": { + "title": "Assigner un forfait existant", + "submit": "Assigner" }, - "desktop_login": { - "click_to_sign_in": "Cliquez n’importe où ou appuyez sur une touche pour vous connecter", - "username_placeholder": "Entrez le nom d'utilisateur", - "password_placeholder": "Entrez le mot de passe", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Authentification à deux facteurs", - "totp_subtitle": "Entrez le code à 6 chiffres de votre application d'authentification", - "back_to_login": "Retour à la connexion", - "fill_all_fields": "Veuillez remplir tous les champs", - "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide.", - "invalid_code": "Code de vérification invalide", - "enter_6_digits": "Saisissez les 6 chiffres", - "network_error": "Erreur réseau — vérifiez votre connexion", - "session_expired": "Session expirée. Veuillez vous reconnecter." - }, - "tokens": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "enrollment_mode": "Mode d’inscription", - "mode_open": "Ouvert", - "mode_open_desc": "Tout appareil peut s’inscrire sans jeton", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Total", - "active": "Actif", - "used": "Utilisé", - "revoked": "Jeton révoqué", - "search_placeholder": "Rechercher des appareils...", - "status_pending": "En attente", - "status_active": "Actif", - "status_used": "Used", - "status_revoked": "Révoqué", - "status_expired": "Expiré", - "bulk_generate": "Génération en lot", - "create": "Créer", - "edit": "Modifier", - "token": "Token", - "name": "Name", - "status": "Statut", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Date d'expiration", - "created": "Créé", - "actions": "Actions", - "name_placeholder": "Entrez le nom du dossier", - "max_uses": "Max Uses", - "max_uses_hint": "0 = illimité", - "expires_in": "Expires In", - "no_expiration": "Aucune expiration", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 jours", - "note": "Note", - "note_placeholder": "Notes about this device", - "count": "Count", - "count_range": "Nombre de jetons à générer (1-100)", - "name_prefix": "Name Prefix", - "generate": "Générer la configuration", - "token_created": "Jeton créé avec succès", - "tokens_generated": "Jetons générés", - "copy_warning": "Copiez le jeton maintenant. Il ne sera plus affiché.", - "copy_token": "Copy Token", - "copied": "Copié dans le presse-papiers", - "revoke": "Révoquer", - "revoke_confirm": "Êtes-vous sûr de vouloir révoquer ce jeton ? Cela invalidera immédiatement toutes les requêtes API qui l'utilisent.", - "revoked_success": "Jeton révoqué avec succès", - "no_tokens": "Aucun jeton API créé", - "expired": "Expired", - "never": "Jamais", - "save": "Enregistrer", - "cancel": "Annuler", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Suivant", - "prev": "Précédent", - "skip": "Passer le tutoriel", - "finish": "Terminer", - "close": "Fermer", - "step_of": "{current} sur {total}", - "console_sidebar_title": "Barre latérale de navigation", - "console_sidebar_text": "Accédez à tous les modules depuis ici. Cliquez sur une icône pour accéder à la section correspondante. La barre latérale s’adapte à la taille de votre écran.", - "console_expand_title": "Développer la barre latérale", - "console_expand_text": "Cliquez ici pour développer la barre latérale et voir les libellés complets de tous les éléments de navigation. Cliquez à nouveau pour la réduire.", - "console_search_title": "Recherche rapide", - "console_search_text": "Recherchez rapidement des appareils, paramètres ou actions. Appuyez sur Ctrl+K pour utiliser le raccourci clavier.", - "console_dashboard_title": "Tableau de bord", - "console_dashboard_text": "Votre centre principal affiche l’état du serveur, les appareils en ligne et les actions rapides. Surveillez les métriques importantes en un coup d’œil.", - "console_devices_title": "Gestion des appareils", - "console_devices_text": "Affichez, recherchez et gérez tous les appareils connectés. Filtrez par état, attribuez des étiquettes et configurez chaque appareil.", - "console_settings_title": "Paramètres", - "console_settings_text": "Configurez le comportement du serveur, les options de sécurité, la marque et la gestion des utilisateurs. Adaptez BetterDesk à vos besoins.", - "console_desktop_title": "Mode bureau", - "console_desktop_text": "Passez en mode bureau pour un espace de travail fenêtré avec widgets. Idéal pour le multitâche et les tableaux de surveillance.", - "console_complete_title": "Vous êtes prêt !", - "console_complete_text": "Explorez les catégories de la barre latérale pour découvrir toutes les fonctionnalités. Cliquez sur l’icône Aide à tout moment pour relancer ce guide.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "La barre supérieure affiche l’horloge, les contrôles rapides et l’accès au tiroir d’applications. Cliquez sur l’icône de grille pour parcourir toutes les applications.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Ouvrez le tiroir d’applications pour rechercher et lancer n’importe quelle fonction de la console dans une fenêtre flottante. Les applications sont organisées par catégorie.", - "desktop_widgets_title": "Tableau de bord des widgets", - "desktop_widgets_text": "Votre espace de travail personnalisable. Les widgets affichent des informations en direct et offrent un accès rapide aux fonctions. Faites-les glisser pour les réorganiser.", - "desktop_add_widget_title": "Ajouter des widgets", - "desktop_add_widget_text": "Cliquez ici pour parcourir les widgets disponibles. Choisissez parmi les vues de surveillance, listes d’appareils, notes et plus encore.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "Dispositions d’ancrage", - "desktop_snap_text": "Faites glisser les fenêtres vers les bords de l’écran pour les ancrer, ou survolez le bouton d’agrandissement pour afficher les préréglages. Essayez Aero Shake !", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Les applications s’ouvrent dans des fenêtres déplaçables et redimensionnables. Réduisez, agrandissez ou fermez-les depuis la barre de titre. Les fenêtres se placent au-dessus des widgets.", - "desktop_search_title": "Recherche rapide", - "desktop_search_text": "Recherchez dans les appareils, pages et paramètres. Appuyez sur Ctrl+K n’importe où pour ouvrir instantanément la recherche.", - "desktop_complete_title": "Mode bureau prêt !", - "desktop_complete_text": "Essayez d’ouvrir des applications depuis le tiroir et d’organiser les fenêtres côte à côte. Utilisez les préréglages de widgets pour créer rapidement des tableaux de bord.", - "devices_folders_title": "Dossiers d’appareils", - "devices_folders_text": "Organisez les appareils en dossiers. Cliquez sur un dossier pour filtrer la liste. Faites un clic droit pour renommer ou supprimer.", - "devices_search_title": "Recherche et filtre", - "devices_search_text": "Recherchez par ID, nom d’hôte ou plateforme. Utilisez les pastilles d’état pour afficher uniquement les appareils en ligne, hors ligne ou tous les appareils.", - "devices_table_title": "Liste des appareils", - "devices_table_text": "Cliquez sur une ligne d’appareil pour voir les détails. Utilisez le menu kebab à droite pour les actions rapides comme connecter, modifier les étiquettes ou supprimer.", - "devices_complete_title": "Gestion des appareils prête !", - "devices_complete_text": "Faites glisser les appareils entre dossiers pour les organiser. Double-cliquez sur un appareil pour ouvrir son panneau de détails.", - "settings_tabs_title": "Catégories de paramètres", - "settings_tabs_text": "Naviguez entre Général, Sécurité, Apparence et les autres sections de configuration.", - "settings_content_title": "Paramétrage", - "settings_content_text": "Chaque section contient des paramètres précis pour le serveur et la console. Les changements sont enregistrés lorsque vous cliquez sur Enregistrer.", - "settings_complete_title": "Vue d’ensemble des paramètres", - "settings_complete_text": "Consultez les paramètres de sécurité pour la 2FA, les clés API et la gestion des utilisateurs. Ouvrez Apparence pour personnaliser l’interface de la console.", - "help": "Help", - "tour_console": "Visite de la console", - "tour_desktop": "Visite du mode bureau", - "tour_devices": "Visite des appareils", - "tour_remote": "Visite de la session distante", - "tour_organization": "Configuration de l’organisation", - "tour_cdap": "Présentation de CDAP", - "tour_chat": "Bases du chat", - "tour_settings": "Visite des paramètres", - "reset_all": "Réinitialiser tous les tutoriels", - "remote_toolbar_title": "Barre d’outils distante", - "remote_toolbar_text": "Accédez aux contrôles d’affichage, à la synchronisation du presse-papiers, aux touches spéciales et aux paramètres de qualité depuis la barre d’outils. Activez le plein écran avec F11.", - "remote_canvas_title": "Affichage distant", - "remote_canvas_text": "Ceci est l’écran distant. Cliquez dedans pour commencer à contrôler l’appareil distant. Les entrées souris et clavier sont transférées automatiquement.", - "remote_clipboard_title": "Synchronisation du presse-papiers", - "remote_clipboard_text": "Copiez et collez du texte entre votre ordinateur et l’appareil distant. Utilisez Ctrl+C / Ctrl+V normalement lorsque l’affichage distant a le focus.", - "remote_complete_title": "Session distante prête !", - "remote_complete_text": "Utilisez les boutons de la barre d’outils pour les touches spéciales (Ctrl+Alt+Suppr, Impr. écran) et le changement d’écran. Appuyez sur Échap ou cliquez sur Déconnecter pour terminer la session.", - "org_overview_title": "Organisations", - "org_overview_text": "Les organisations permettent de regrouper utilisateurs, appareils et politiques. Chaque organisation possède ses propres administrateurs, opérateurs et paramètres.", - "org_create_title": "Créer une organisation", - "org_create_text": "Cliquez ici pour créer une nouvelle organisation. Indiquez un nom, un identifiant court et une description facultative. Vous deviendrez propriétaire de la nouvelle organisation.", - "org_members_title": "Gérer les membres", - "org_members_text": "Invitez des utilisateurs par e-mail, attribuez des rôles (admin, opérateur, utilisateur) et gérez l’accès. Les membres peuvent voir les appareils attribués à leur organisation.", - "org_devices_title": "Attribuer des appareils", - "org_devices_text": "Ajoutez des appareils à l’organisation. Les appareils attribués ici hériteront des politiques de l’organisation et seront visibles par ses membres.", - "org_policies_title": "Politiques d’organisation", - "org_policies_text": "Définissez les politiques de sécurité de l’organisation, comme les exigences de mot de passe, les délais de session, l’obligation de 2FA et les règles d’inscription des appareils.", - "org_complete_title": "Configuration de l’organisation terminée !", - "org_complete_text": "Invitez votre équipe et attribuez des appareils pour commencer à utiliser la gestion limitée à l’organisation. Les politiques s’appliquent automatiquement à tous les membres.", - "cdap_devices_title": "Appareils CDAP", - "cdap_devices_text": "Affichez tous les appareils CDAP connectés — capteurs IoT, automates, ponts et agents personnalisés. Les indicateurs verts signalent des connexions en direct.", - "cdap_widgets_title": "Tableau de bord des widgets", - "cdap_widgets_text": "Les widgets affichent des données en temps réel depuis les appareils. Jauges, interrupteurs, LEDs, graphiques — chaque type de widget visualise un type de données différent.", - "cdap_commands_title": "Envoyer des commandes", - "cdap_commands_text": "Interagissez avec les appareils en envoyant des commandes. Certaines commandes nécessitent une confirmation. Le journal des commandes conserve l'historique de toutes les commandes envoyées.", - "cdap_terminal_title": "Terminal de l'appareil", - "cdap_terminal_text": "Ouvrez une session de terminal vers les agents CDAP pour des diagnostics avancés ou une configuration manuelle. Saisissez les commandes directement.", - "cdap_complete_title": "Présentation CDAP terminée !", - "cdap_complete_text": "Explorez les widgets des appareils, envoyez des commandes et utilisez le terminal ou le navigateur de fichiers pour une gestion plus approfondie. Les agents CDAP rapportent automatiquement les métriques.", - "chat_contacts_title": "Contacts et groupes", - "chat_contacts_text": "Consultez vos contacts et groupes de chat. Cliquez sur un contact pour ouvrir une conversation. Les points verts indiquent les utilisateurs en ligne.", - "chat_send_title": "Envoyer des messages", - "chat_send_text": "Saisissez votre message et appuyez sur Entrée pour l’envoyer. Les messages sont chiffrés de bout en bout lorsque les deux parties prennent en charge l’E2E.", - "chat_file_title": "Partager des fichiers", - "chat_file_text": "Cliquez sur l’icône de pièce jointe pour partager des fichiers. Les fichiers sont chiffrés et peuvent atteindre 50 Mo.", - "chat_complete_title": "Chat prêt !", - "chat_complete_text": "Discutez en temps réel avec les opérateurs et les utilisateurs finaux. Créez des groupes pour la communication d’équipe. Tous les messages prennent en charge les accusés de lecture.", - "disable_tutorials": "Désactiver les tutoriels", - "enable_tutorials": "Activer les tutoriels" - }, - "help_request": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "new_request": "Nouvelle demande d’aide", - "device": "Appareil", - "hostname": "Nom d'hôte", - "message": "Message", - "status": "Statut", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Aucune demande d’aide", - "notification": "Demande d’aide reçue de", - "stats_total": "Total", - "filter_all": "Tous" - }, - "organizations": { - "title": "Tableau de bord", - "create": "Créer", - "edit": "Modifier", - "detail": "Détails du ticket", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Utilisateurs", - "devices": "Appareils", - "invitations": "Invitations", - "settings": "Paramètres", - "add_user": "Ajouter un utilisateur", - "assign_device": "Assigner un appareil", - "create_invitation": "Créer une invitation", - "delete_confirm": "Supprimer cette organisation ? Tous les utilisateurs, appareils et paramètres associés seront supprimés.", - "no_orgs": "Aucune organisation pour le moment", - "no_orgs_hint": "Créez votre première organisation pour commencer à gérer les appareils et les utilisateurs.", - "connection_policy": "Politique de connexion", - "allow_file_transfer": "Autoriser le transfert de fichiers", - "allow_clipboard": "Autoriser le presse-papiers", - "max_session_duration": "Durée maximale de session (min)", - "role_owner": "Owner", - "role_admin": "Administrateur", - "role_operator": "Opérateur", - "role_user": "Membre", - "username": "Nom d’utilisateur", - "password": "Mot de passe", - "display_name": "Nom affiché", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID de l’appareil", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Utilisateur attribué", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Aucun utilisateur dans cette organisation.", - "no_devices": "Aucun appareil attribué à cette organisation.", - "no_invitations": "Aucune invitation.", - "user_added": "User added", - "user_removed": "Utilisateur supprimé", - "user_updated": "Rôle utilisateur mis à jour", - "device_assigned": "Appareil attribué", - "device_unassigned": "Appareil retiré", - "invitation_created": "Invitation créée", - "settings_saved": "Paramètres enregistrés", - "org_deleted": "Organisation supprimée", - "confirm_remove_user": "Retirer cet utilisateur de l’organisation ?", - "confirm_unassign_device": "Retirer cet appareil de l’organisation ?", - "confirm_delete_org": "Supprimer cette organisation et toutes les données associées ?", - "edit_role": "Modifier le rôle", - "raw_settings": "Paramètres bruts", - "key": "Key", - "value": "Value", - "save": "Enregistrer les paramètres", - "policy_unattended": "Sans surveillance (instantané)", - "policy_attended": "Assisté (avec confirmation)", - "policy_ask": "Always ask", - "expires_hours": "Expiration (heures)", - "loading_failed": "Impossible de charger les données de l’organisation", - "name_slug_required": "Le nom et le slug sont requis", - "org_created": "Organisation créée", - "org_updated": "Organisation mise à jour", - "create_new_user": "Créer un nouveau", - "add_existing_user": "Ajouter un existant", - "none_available": "none", - "select_user": "Sélectionner un utilisateur", - "org_role": "Rôle dans l’organisation", - "link_user_hint": "L’utilisateur sélectionné sera lié à cette organisation avec les identifiants de son compte serveur.", - "no_available_users": "Tous les utilisateurs serveur sont déjà liés à cette organisation.", - "user_linked": "Utilisateur lié à l’organisation" - }, - "chat": { - "e2e_enabled": "Chiffré de bout en bout", - "e2e_establishing": "Établissement du canal sécurisé...", - "e2e_established": "Canal sécurisé établi", - "e2e_unsupported": "Chiffrement E2E non pris en charge par ce navigateur", - "typing_indicator": "écrit...", - "read_receipt": "Lu", - "delivered": "Remis", - "file_share": "Fichier", - "file_too_large": "Fichier trop volumineux (max 50 Mo)", - "file_encrypted": "Transfert de fichier chiffré", - "presence_online": "En ligne", - "presence_away": "Absent", - "presence_busy": "Occupé", - "presence_offline": "Hors ligne", - "key_rotation": "Clés de sécurité renouvelées", - "new_message": "Nouveau message", - "title": "Tableau de bord", - "contacts": "Contacts", - "groups": "Groupes", - "no_contacts": "Aucun contact pour le moment", - "no_groups": "Aucun groupe pour le moment", - "no_messages": "Aucun message pour le moment", - "no_results": "Aucun résultat trouvé", - "select_conversation": "Sélectionnez une conversation pour commencer à discuter", - "select_conversation_hint": "Sélectionnez une conversation pour afficher les messages", - "type_message": "Saisissez un message...", - "send": "Envoyer", - "attach_file": "Joindre un fichier", - "emoji": "Emoji", - "info": "Information", - "search_messages": "Rechercher des messages", - "create_group": "Créer un groupe", - "group_name": "Nom du groupe", - "group_name_placeholder": "Entrez le nom du groupe", - "group_members": "Membres", - "cancel": "Annuler", - "create": "Créer", - "members": "membres", - "today": "Aujourd'hui", - "yesterday": "Hier", - "react": "Réagir", - "my_presence": "Mon statut", - "search_placeholder": "Rechercher des appareils..." - }, - "toast": { - "device_connected": "Appareil connecté", - "device_disconnected": "Appareil déconnecté", - "session_started": "Session distante démarrée", - "session_ended": "Session distante terminée", - "file_upload_complete": "Téléversement du fichier terminé", - "settings_saved": "Paramètres enregistrés", - "error_generic": "Une erreur s’est produite", - "connection_lost": "Connexion perdue", - "reconnecting": "Reconnexion..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Tableau de bord" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Hôte", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Générer la configuration", - "encode": "Encode", - "decode": "Decode", - "send": "Envoyer", - "refresh": "Actualiser", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Saisissez du texte...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Serveur Go", - "mac_address": "Adresse MAC", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Vérifier la joignabilité et la latence de l’hôte", - "tcp_title": "Vérification de port TCP", - "tcp_desc": "Tester la connectivité d’un port TCP", - "ssl_title": "Inspecteur SSL", - "ssl_desc": "Inspecter les détails du certificat SSL/TLS", - "http_title": "Contrôle d’état HTTP", - "http_desc": "Vérifier l’état d’un point de terminaison HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Résoudre un nom d’hôte en adresse IP", - "whois_title": "DNS Records", - "whois_desc": "Interroger les enregistrements A, AAAA, MX, TXT, NS", - "speed_title": "Speed Test", - "speed_desc": "Mesurer la bande passante de téléchargement", - "run_speed_test": "Lancer le test de débit", - "wol_title": "Wake-on-LAN", - "wol_desc": "Envoyer un paquet magique pour réveiller un appareil", - "wol_sent": "Paquet magique envoyé", - "hash_title": "Générateur de hachage", - "hash_desc": "Générer des hachages cryptographiques", - "password_title": "Générateur de mots de passe", - "password_desc": "Mettre à jour le mot de passe de votre compte", - "jwt_title": "JWT Decoder", - "jwt_desc": "Décoder et inspecter les JSON Web Tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Encoder ou décoder des données Base64", - "url_title": "URL Encoder", - "url_desc": "Encoder ou décoder des composants d’URL", - "processes_title": "Liste des processus", - "processes_desc": "Afficher les processus système en cours", - "disk_title": "Disk Usage", - "disk_desc": "Afficher l’utilisation des partitions disque", - "db_title": "Statistiques de base de données", - "db_desc": "Afficher les statistiques des tables de la base de données", - "docker_title": "Conteneurs Docker", - "docker_desc": "Afficher les conteneurs Docker en cours d’exécution", - "logs_title": "Log Viewer", - "logs_desc": "Afficher les sorties de journal récentes", - "ip_address": "Adresse IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Statut", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Valide à partir du", - "valid_to": "Valide jusqu’au", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "No hardware data available", - "no_docker": "Aucun conteneur Docker trouvé ou Docker indisponible", - "no_logs": "Aucune ligne de journal disponible" - }, - "policies": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "select_org": "Organisation", - "select_org_placeholder": "Sélectionner une organisation...", - "select_org_first": "Sélectionnez une organisation pour voir le journal d'audit des politiques.", - "configured": "Configuré", - "connection_title": "Politique de connexion", - "connection_desc": "Contrôler l'établissement des sessions distantes", - "connection_mode": "Mode de connexion", - "mode_attended": "Assisté (nécessite l'approbation)", - "mode_unattended": "Non assisté (toujours autoriser)", - "mode_ask": "Toujours demander", - "max_session": "Durée max. de session (minutes)", - "idle_lock": "Verrouillage en cas d'inactivité (minutes)", - "wallpaper_policy": "Fond d'écran pendant la session", - "wallpaper_show": "Afficher", - "wallpaper_hide_session": "Masquer pendant la session", - "wallpaper_hide_always": "Toujours masquer", - "features_title": "Politique de fonctionnalités", - "features_desc": "Activer ou désactiver des fonctionnalités spécifiques", - "allow_file_transfer": "Autoriser le transfert de fichiers", - "allow_clipboard": "Allow Clipboard", - "allow_audio": "Autoriser le streaming audio", - "allow_recording": "Autoriser l'enregistrement de session", - "security_title": "Politique de sécurité", - "security_desc": "Appliquer les exigences de sécurité pour les appareils", - "require_2fa": "Exiger 2FA pour l'accès non assisté", - "password_min_length": "Longueur minimale du mot de passe", - "password_require_special": "Exiger des caractères spéciaux", - "password_max_age": "Âge max. du mot de passe (jours, 0=jamais)", - "allowed_operators": "Allowed Operators", - "network_title": "Politique réseau", - "network_desc": "Contrôler les serveurs relais et les connexions directes", - "block_direct_p2p": "Bloquer P2P direct (forcer relais)", - "allowed_relays": "Serveurs relais autorisés (un par ligne)", - "ip_allowlist": "Liste blanche IP (CIDR, un par ligne)", - "update_title": "Politique de mise à jour", - "update_desc": "Contrôler les mises à jour automatiques et les canaux", - "auto_update": "Activer la mise à jour automatique", - "update_channel": "Canal de mise à jour", - "audit_title": "Modifications de politiques", - "audit_desc": "Activité récente de la console", - "no_audit": "Aucune modification de politique enregistrée.", - "save_success": "Politique enregistrée avec succès", - "save_failed": "Impossible d’enregistrer la politique", - "load_failed": "Impossible de charger les politiques", - "block_direct_p2p_hint": "S'applique aux appareils de cette organisation. La valeur par défaut globale est sous Paramètres → Stratégie de connexion." - }, - "attestation": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "verified": "Vérifié", - "pending": "Pending", - "failed": "Échoué", - "device_list": "Registres d'attestation", - "device_list_desc": "Empreintes matérielles et statut de vérification d'identité", - "col_device": "ID d'appareil", - "col_hostname": "Nom d'hôte", - "col_fingerprint": "Empreinte", - "col_status": "Statut", - "col_last_check": "Dernière vérification", - "col_actions": "Actions", - "no_records": "Aucun enregistrement d'attestation trouvé.", - "verify_success": "Appareil marqué comme vérifié", - "verify_failed": "Impossible de vérifier l’appareil", - "revoke_success": "Attestation de l’appareil révoquée", - "revoke_failed": "Impossible de révoquer l’attestation" - }, - "fleet": { - "title": "Tableau de bord", - "tab_resources": "Ressources", - "tab_tasks": "Tâches", - "tab_builder": "Constructeur", - "tab_compliance": "Conformité", - "res_title": "Cartographie des ressources", - "res_all_types": "Tous les types", - "res_type_printer": "Imprimante", - "res_type_network_drive": "Lecteur réseau", - "res_type_dns": "Serveur DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Ajouter une ressource", - "res_name": "Nom de la ressource", - "res_type": "Type", - "res_address": "Adresse / Chemin", - "res_target": "Cible", - "res_scope": "Portée", - "res_scope_org": "Organisation", - "res_scope_group": "Groupe", - "res_scope_device": "Appareil", - "res_scope_value": "Valeur de portée", - "res_status": "Statut", - "res_active": "Actif", - "res_inactive": "Inactif", - "res_no_data": "Aucune ressource trouvée. Cliquez sur 'Ajouter'.", - "res_confirm_delete": "Êtes-vous sûr de vouloir supprimer cette ressource ?", - "task_title": "Planificateur de tâches", - "task_all_status": "Tous les statuts", - "task_status_pending": "En attente", - "task_status_running": "En cours", - "task_status_success": "Succès", - "task_status_failed": "Échoué", - "task_search": "Rechercher des tâches…", - "task_create": "Créer une tâche", - "task_name": "Nom de la tâche", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Installation", - "task_type_update": "Mise à jour", - "task_type_restart": "Redémarrage", - "task_type_deploy": "Déploiement", - "task_type_scan": "Scan", - "task_targets": "Cibles", - "task_targets_help": "IDs d'appareils ou noms de groupes, séparés par des virgules", - "task_schedule": "Planification", - "task_schedule_once": "Une fois", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Intervalle", - "task_schedule_value": "Valeur de planification", - "task_script": "Script / Commande", - "task_retries": "Réessais", - "task_timeout": "Délai (s)", - "task_last_run": "Dernière exécution", - "task_no_data": "Aucune tâche trouvée. Créez une nouvelle tâche.", - "task_confirm_delete": "Êtes-vous sûr de vouloir supprimer cette tâche ?", - "task_output": "Sortie de la tâche", - "task_retry": "Réessayer", - "builder_title": "Constructeur de workflow visuel", - "builder_select_workflow": "Sélectionner un workflow…", - "builder_new": "Nouveau", - "builder_save": "Enregistrer", - "builder_export": "Exporter", - "builder_execute": "Exécuter", - "builder_dry_run": "Simulation", - "builder_triggers": "Déclencheurs", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Résultats", - "builder_transforms": "Transformations", - "builder_properties": "Propriétés", - "builder_no_selection": "Sélectionnez un nœud pour modifier ses propriétés.", - "builder_node_trigger_manual": "Déclencheur manuel", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Déclencheur d’événement", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Redémarrer svc", - "builder_node_action_file_deploy": "Déployer un fichier", - "builder_node_action_message": "Envoyer un message", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Envoyer une alerte", - "builder_node_result_chain": "Chaîner le flux", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Nom du workflow :", - "comp_title": "Conformité logicielle", - "comp_compliant": "Conforme", - "comp_warning": "Avertissement", - "comp_critical": "Critique", - "comp_score": "Score moyen", - "comp_device": "Appareil", - "comp_hostname": "Nom d'hôte", - "comp_os": "SE", - "comp_score_col": "Score", - "comp_issues": "Problèmes", - "comp_last_scan": "Dernier scan", - "comp_scan": "Scanner", - "comp_scan_all": "Tout scanner", - "comp_remediate": "Remédier", - "comp_remediate_confirm": "Exécuter l'auto-remédiation sur cet appareil ?", - "comp_no_data": "Pas de données de conformité. Lancez un scan.", - "save": "Enregistrer", - "cancel": "Annuler", - "close": "Fermer", - "edit": "Modifier", - "delete": "Supprimer", - "actions": "Actions", - "all_orgs": "Toutes les organisations", - "select_org_placeholder": "Sélectionner une organisation...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Lecteur réseau", - "type_dns": "Serveur DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Ajouter une ressource", - "edit_resource": "Modifier la ressource", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Statut", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Actif", - "inactive": "Inactif", - "address": "Adresse / chemin", - "scope_org": "Organisation", - "scope_group": "Groupe", - "scope_device": "Appareil cible", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Voulez-vous vraiment supprimer cet élément ?", - "all_statuses": "Tous les états", - "status_pending": "En attente", - "status_running": "En cours", - "status_success": "Success", - "status_failed": "Échoué", - "search_tasks": "Rechercher des tâches…", - "create_task": "Créer une tâche", - "edit_task": "Modifier la tâche", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Déploiement de fichier", - "task_type_registry": "Registry", - "target_devices": "Appareils cibles", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / commande", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Chargement...", - "no_output": "Aucune sortie disponible", - "error_loading": "Erreur lors du chargement des données", - "select_workflow": "Sélectionner un flux…", - "new_workflow": "New", - "export": "Exporter", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Déclencheur manuel", - "node_schedule": "Schedule", - "node_event": "Déclencheur d’événement", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Redémarrer svc", - "node_file_deploy": "Déployer un fichier", - "node_send_message": "Envoyer un message", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Envoyer une alerte", - "node_chain": "Chaîner le flux", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Toutes les organisations", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "ID d'appareil", - "col_hostname": "Nom d'hôte", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Exécuter l’auto-remédiation sur cet appareil ?" - }, - "scaling": { - "title": "Tableau de bord", - "tab_overview": "Vue d'ensemble", - "tab_relays": "Nœuds relais", - "tab_rules": "Règles d'attribution", - "tab_capacity": "Planification de capacité", - "arch_title": "Architecture réseau", - "arch_loading": "Chargement du diagramme d'architecture...", - "stat_relay_nodes": "Nœuds relais", - "stat_total_devices": "Total appareils", - "stat_active_sessions": "Sessions actives", - "stat_bandwidth": "Bande passante totale", - "relay_health": "État des relais", - "no_relays": "Aucun nœud relais configuré. Ajoutez votre premier nœud pour distribuer la charge.", - "relay_search": "Rechercher des relais...", - "relay_add": "Ajouter un nœud relais", - "relay_edit": "Modifier le nœud relais", - "col_name": "Name", - "col_address": "Adresse", - "col_location": "Emplacement", - "col_devices": "Appareils", - "col_sessions": "Sessions actives", - "col_bandwidth": "Bande passante", - "col_status": "Statut", - "col_actions": "Actions", - "col_priority": "Priorité", - "col_rule_name": "Nom de la règle", - "col_match": "Correspondance", - "col_target_relay": "Relais cible", - "col_fallback": "Repli", - "status_online": "En ligne", - "status_degraded": "Dégradé", - "status_offline": "Hors ligne", - "status_enabled": "Activé", - "status_disabled": "Désactivé", - "confirm_delete_relay": "Êtes-vous sûr de vouloir supprimer ce nœud relais ?", - "confirm_delete_rule": "Êtes-vous sûr de vouloir supprimer cette règle d'attribution ?", - "rules_hint": "Les règles d'attribution déterminent quel serveur relais gère des groupes d'appareils spécifiques. Les règles sont évaluées par priorité (la plus basse d'abord).", - "no_rules": "Aucune règle d'attribution.", - "rule_add": "Ajouter une règle", - "rule_edit": "Modifier la règle", - "rule_match_type": "Type de correspondance", - "match_subnet": "Sous-réseau", - "match_group": "Groupe d'appareils", - "match_tag": "Tag d'appareil", - "match_location": "Emplacement", - "rule_match_value": "Valeur de correspondance", - "fallback_master": "Serveur maître", - "fallback_nearest": "Relais le plus proche", - "relay_max_sessions": "Max. sessions", - "relay_max_bandwidth": "Max. bande passante (Mbps)", - "cap_tiers": "Niveaux de capacité", - "cap_loading": "Chargement des données de capacité...", - "cap_recommendations": "Recommandations", - "cap_no_recs": "Aucune recommandation disponible.", - "cap_planning": "Planification d'infrastructure", - "cap_config": "Configuration de capacité", - "cap_max_devices": "Max. appareils", - "cap_max_sessions": "Max. sessions", - "cap_current": "Actuel", - "cap_utilization": "Utilisation", - "cap_tier_devices": "Capacité appareils", - "cap_tier_sessions": "Capacité sessions", - "cap_tier_bandwidth": "Capacité bande passante", - "cap_single_sqlite": "Serveur unique (SQLite)", - "cap_single_pg": "Serveur unique (PostgreSQL)", - "cap_master_3": "Maître + 3 relais", - "cap_master_10": "Maître + 10 relais", - "rec_no_relays": "Aucun nœud configuré. Envisagez d'ajouter des relais pour de meilleures performances et redondance.", - "rec_devices_high": "L'utilisation des appareils est élevée. Envisagez d'ajouter plus de nœuds relais.", - "rec_sessions_high": "La capacité de sessions approche sa limite. Envisagez une mise à niveau de l'infrastructure.", - "rec_cpu_high": "Certains nœuds relais signalent une utilisation CPU élevée. Envisagez l'équilibrage de charge.", - "rec_all_good": "Tous les systèmes fonctionnent dans les paramètres normaux. Aucune action requise.", - "save": "Enregistrer", - "cancel": "Annuler", - "edit": "Modifier", - "delete": "Supprimer", - "close": "Fermer", - "relays_info_banner": "Cette liste est informative. Les serveurs relais réellement utilisés par les clients sont configurés via la variable d’environnement RELAY_SERVERS sur le serveur BetterDesk.", - "relay_name_address_required": "Le nom et l’adresse sont requis.", - "relay_save_failed": "Impossible d’enregistrer le nœud relais.", - "relay_delete_failed": "Impossible de supprimer le nœud relais.", - "relay_saved": "Nœud relais enregistré.", - "relay_deleted": "Nœud relais supprimé.", - "rule_name_value_required": "Le nom de la règle et la valeur de correspondance sont requis.", - "rule_save_failed": "Impossible d’enregistrer la règle.", - "rule_delete_failed": "Impossible de supprimer la règle.", - "rule_saved": "Règle enregistrée.", - "rule_deleted": "Règle supprimée." - }, - "cross_platform": { - "title": "Tableau de bord", - "tab_matrix": "Matrice de compatibilité", - "tab_distribution": "Distribution", - "tab_protocols": "Protocoles", - "tab_limitations": "Limitations", - "matrix_hint": "Matrice de support des fonctionnalités pour toutes les plateformes prises en charge. Vert = support complet, Jaune = partiel, Gris = non disponible, Bleu = planifié.", - "col_feature": "Fonctionnalité", - "legend_full": "Support complet", - "legend_partial": "Support partiel", - "legend_none": "Non disponible", - "legend_planned": "Planifié", - "platform_breakdown": "Répartition par plateforme", - "arch_breakdown": "Répartition par architecture", - "version_breakdown": "Répartition par version", - "summary": "Résumé", - "total_devices": "Total des appareils", - "unique_platforms": "Plateformes", - "unique_archs": "Architectures", - "unique_versions": "Versions client", - "no_devices": "Aucun appareil avec des données d'inventaire trouvé", - "protocols_hint": "La négociation des capacités du protocole garantit que chaque client reçoit uniquement les fonctionnalités prises en charge. Le serveur adapte son comportement en fonction des capacités signalées.", - "capability_negotiation": "Négociation des capacités", - "codec_support": "Support des codecs (appareils en ligne)", - "feature_support": "Support des fonctionnalités (appareils en ligne)", - "no_codec_data": "Aucune donnée de codec des appareils en ligne.", - "no_feature_data": "Aucune donnée de fonctionnalités des appareils en ligne.", - "protobuf_schema": "Schéma Protobuf ClientCapabilities", - "diagram_client": "Client", - "diagram_server": "Serveur BetterDesk", - "diagram_peer": "Pair distant", - "limitations_hint": "Chaque plateforme a des limitations spécifiques affectant les fonctionnalités disponibles. Vérifiez-les lors de la planification des déploiements.", - "feat_desktop_client": "Client bureau", - "feat_background_agent": "Agent en arrière-plan", - "feat_remote_target": "Cible distante", - "feat_screen_capture": "Capture d'écran", - "feat_input_injection": "Injection d'entrée", - "feat_file_transfer": "Transfert de fichiers", - "feat_clipboard_sync": "Synchronisation du presse-papiers", - "feat_audio_streaming": "Streaming audio", - "feat_chat": "Chat", - "feat_h264": "Codec H.264", - "feat_vp9": "Codec VP9", - "feat_av1": "Codec AV1", - "feat_cdap_agent": "Agent CDAP", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Navigateur web", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Test", - "status_planned": "Planifié", - "status_limited": "Limité", - "status_experimental": "Expérimental", - "limit_win_uac": "Élévation UAC requise pour l'installation du service et l'injection d'entrée sur les bureaux sécurisés.", - "limit_win_service": "Fonctionne en tant que service NSSM ; nécessite des droits d'administrateur pour l'installation.", - "limit_win_firewall": "Les règles du pare-feu Windows doivent autoriser les ports 21115-21119 pour les connexions relais.", - "limit_linux_wayland": "Les compositeurs Wayland restreignent la capture d'écran programmatique ; API portail PipeWire requise.", - "limit_linux_pipewire": "La capture audio nécessite PipeWire ; repli PulseAudio disponible mais limité.", - "limit_linux_arm": "Builds ARM64 disponibles ; certains codecs peuvent utiliser le décodage logiciel (plus lent).", - "limit_mac_screen": "Autorisation d'enregistrement d'écran requise dans Réglages > Confidentialité et sécurité.", - "limit_mac_signing": "L'agent doit être signé avec un Apple Developer ID pour la distribution.", - "limit_mac_notarize": "Notarisation requise pour macOS Gatekeeper (distribution hors App Store).", - "limit_android_projection": "L'API MediaProjection nécessite le consentement de l'utilisateur pour chaque session de capture.", - "limit_android_accessibility": "L'injection d'entrée nécessite AccessibilityService ; restreint depuis Android 14+.", - "limit_android_battery": "Service en arrière-plan limité par le mode Doze ; exemption d'optimisation de batterie possible.", - "limit_ios_capture": "Apple interdit la capture d'écran en arrière-plan ; seul le mode visualisation est pris en charge.", - "limit_ios_input": "Pas d'injection d'entrée autorisée ; uniquement vue distante et chat.", - "limit_ios_appstore": "Distribution uniquement via l'App Store ; TestFlight pour les tests bêta.", - "limit_web_https": "L'API WebCodecs et WebRTC nécessitent HTTPS ; HTTP utilise JMuxer en repli (codecs limités).", - "limit_web_codec": "Support des codecs dépendant du navigateur ; H.264 largement supporté, VP9/AV1 variable.", - "limit_web_performance": "Performance limitée par le sandbox du navigateur ; pas d'accélération matérielle directe.", - "limit_chrome_crostini": "Support complet de l'agent uniquement dans le conteneur Linux Crostini.", - "limit_chrome_pwa": "Le mode PWA fournit uniquement les capacités web ; pas de fonctions d'agent natives.", - "limit_chrome_input": "Injection d'entrée en dehors du conteneur Crostini non prise en charge.", - "feat_multi_monitor": "Multi-écran", - "feat_session_recording": "Enregistrement de session", - "feat_unattended_access": "Accès sans surveillance", - "limit_linux_unprivileged": "Les services fonctionnent sous le compte non privilégié dédié « betterdesk » avec durcissement systemd (NoNewPrivileges, ProtectSystem=strict).", - "limit_win_virtual_account": "Les services fonctionnent sous des comptes virtuels isolés au lieu de LocalSystem ; les chemins de journaux personnalisés peuvent nécessiter des ajustements ACL." - }, - "security_audit": { - "title": "Tableau de bord", - "tab_overview": "Vue d'ensemble", - "tab_events": "Events", - "tab_hardening": "Durcissement", - "tab_vulnerabilities": "Vulnérabilités", - "security_score": "Score de sécurité", - "failed_logins": "Connexions échouées (24h)", - "active_bans": "Bannissements actifs", - "api_keys": "Clés API", - "old_keys": "Anciennes clés (>90j)", - "security_checks": "Vérifications de sécurité", - "tls_status": "Statut TLS", - "pass": "OK", - "warning": "Avertissement", - "fail": "Échec", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket sécurisé", - "enabled": "Activé", - "disabled": "Désactivé", - "all_events": "Tous les événements", - "event_login_failed": "Connexion échouée", - "event_login_success": "Connexion réussie", - "event_peer_banned": "Appareil banni", - "event_ip_banned": "IP bannie", - "event_config_changed": "Configuration modifiée", - "event_key_created": "Clé créée", - "refresh": "Actualiser", - "col_time": "Heure", - "col_action": "Action", - "col_actor": "Acteur", - "col_target": "Target", - "col_ip": "Adresse IP", - "col_details": "Détails", - "no_events": "Aucun événement DLP enregistré", - "hardening_hint": "Priorités de durcissement sécuritaire pour votre déploiement BetterDesk. Triés par gravité.", - "no_hardening": "Aucun élément de durcissement disponible.", - "vuln_hint": "Résultats de l'analyse des vulnérabilités. Exécutez npm audit régulièrement.", - "no_vulns": "Aucune vulnérabilité trouvée. Vos dépendances sont sécurisées." - }, - "languages": { - "title": "Tableau de bord", - "total_languages": "Nombre total de langues", - "fully_translated": "Entièrement traduit", - "needs_review": "À vérifier", - "reference_keys": "Clés de référence", - "no_languages": "Aucun fichier de langue trouvé.", - "badge_reference": "Reference", - "badge_review": "À vérifier", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "Clés", - "missing": "missing", - "extra": "extra", - "view_missing": "Voir les éléments manquants", - "fix_missing": "Fix Missing", - "missing_keys_for": "Clés manquantes pour", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "et encore {n}...", - "all_keys_present": "Toutes les clés sont présentes !", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Les clés manquantes dans {code} doivent être traduites manuellement.", - "no_fix_needed": "Aucune clé manquante à compléter." - }, - "resource_control": { - "title": "Tableau de bord", - "tab_overview": "Vue d'ensemble", - "tab_usb": "USB Control", - "tab_optical": "Lecteurs optiques", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Quotas de ressources", - "compliance_by_category": "Conformité par catégorie", - "device_compliance": "Conformité des appareils", - "search_devices": "Rechercher des appareils...", - "col_device": "ID d'appareil", - "col_platform": "Plateforme", - "col_status": "Statut", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Total appareils", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Taux de conformité", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configurer", - "no_devices": "Aucun appareil avec des données d'inventaire trouvé", - "usb_title": "Contrôle des ports USB", - "usb_hint": "Contrôlez l’accès aux périphériques de stockage USB pour l’appareil sélectionné ou pour la politique par défaut de l’organisation.", - "usb_storage_policy": "Politique de stockage USB", - "usb_whitelist": "Appareils en liste blanche (un par ligne)", - "usb_whitelist_hint": "VID:PID (ex. 0781:5583)", - "usb_audit_log": "Journaliser les connexions de périphériques USB", - "optical_title": "Contrôle des lecteurs optiques", - "optical_hint": "Contrôlez l’accès aux lecteurs CD/DVD/Blu-ray pour l’appareil sélectionné.", - "optical_policy": "Politique des lecteurs optiques", - "optical_audit_log": "Journaliser l’accès aux lecteurs optiques", - "monitors_title": "Gestion des moniteurs", - "monitors_hint": "Configurez les paramètres des moniteurs, y compris le nombre maximal, l’application de la résolution, la luminosité et les horaires d’alimentation.", - "monitors_max_count": "Nombre maximal de moniteurs (0 = illimité)", - "monitors_max_hint": "0 signifie aucune limite", - "monitors_resolution": "Résolution max.", - "monitors_brightness": "Limite de luminosité", - "monitors_power_schedule": "Horaire d’alimentation", - "monitors_power_hint": "ex. off:22:00-06:00", - "disks_title": "Contrôle d’accès aux disques", - "disks_hint": "Configurez les politiques d’accès aux disques, y compris le mode lecture seule, l’obligation de chiffrement et la visibilité des partitions.", - "disks_readonly": "Forcer le mode lecture seule", - "disks_encryption": "Exiger le chiffrement (BitLocker/LUKS)", - "disks_smart": "Activer la surveillance S.M.A.R.T.", - "disks_hidden": "Partitions masquées", - "disks_hidden_hint": "Lettres de lecteur ou points de montage séparés par des virgules", - "quotas_title": "Quotas de ressources", - "quotas_hint": "Définissez des quotas CPU, RAM, bande passante et disque par utilisateur pour l’appareil sélectionné.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Limite de bande passante (Mbps)", - "quotas_bandwidth_hint": "0 = illimité", - "quotas_disk_quota": "Quota disque (Go)", - "quotas_disk_hint": "0 = illimité", - "quotas_process_whitelist": "Liste blanche des processus (un par ligne)", - "quotas_process_hint": "ex. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Liste blanche uniquement", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "Tableau de bord", - "subtitle": "Vue d'ensemble de votre serveur RustDesk", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "import_flow": "Import Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Aucun appareil trouvé", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Status", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Chargement...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this item?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write" - }, - "updates": { - "tab_title": "Updates", - "title": "Tableau de bord", - "desc": "Téléchargez une sauvegarde complète de la configuration de votre console, utilisateurs, groupes et paramètres. Les données peer du serveur Go sont incluses lorsque le backend BetterDesk est actif.", - "current_version": "Version installée", - "latest_version": "Latest version", - "status": "Statut", - "check_now": "Vérifier maintenant", - "checking": "Vérification...", - "up_to_date": "À jour", - "update_available": "Mise à jour disponible", - "changelog": "Release Notes", - "no_changelog": "Aucune note de version disponible", - "files_changed": "Fichiers modifiés", - "files": "Fichiers", - "changes_unavailable": "Impossible de charger la liste des changements. Vous pouvez quand même installer la mise à jour.", - "create_backup": "Créer une sauvegarde avant la mise à jour", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installation de la mise à jour…", - "creating_backup": "Création de la sauvegarde…", - "downloading": "Téléchargement des fichiers…", - "install_success": "Mise à jour installée avec succès. La console redémarre…", - "install_failed": "Échec de l’installation de la mise à jour", - "restarting": "Attente du redémarrage de la console…", - "restart_complete": "Console redémarrée avec succès", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Aucune version de mise à jour sélectionnée. Recherchez d’abord les mises à jour.", - "backups_title": "Sauvegardes de mise à jour", - "backups_desc": "Sauvegardes préalables créées automatiquement avant chaque mise à jour", - "no_backups": "Aucune sauvegarde de mise à jour trouvée", - "restore": "Restore", - "restore_confirm": "Êtes-vous sûr de vouloir restaurer à partir de cette sauvegarde ? Les sections sélectionnées seront écrasées.", - "restore_success": "Sauvegarde restaurée avec succès. Certaines modifications peuvent nécessiter un rechargement de la page.", - "baseline_set": "Référence définie", - "commits_behind": "commits de retard", - "total_files": "Nombre total de fichiers", - "applied": "Applied", - "failed": "Échec", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Serveur Go", - "component_agent": "Agent", - "component_scripts": "Scripts et Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Vérification de Go…", - "go_not_found": "Go n’est pas installé", - "go_check_failed": "Impossible de vérifier la disponibilité de Go", - "server_building": "Compilation du serveur Go… Cela peut prendre quelques minutes.", - "server_built": "Binaire du serveur compilé", - "server_build_failed": "Échec de la compilation du serveur", - "server_stale_title": "Binaire du serveur obsolète", - "server_stale_desc": "Le code source du serveur Go a été mis à jour, mais le binaire en cours d’exécution n’a pas été reconstruit. Reconstruisez-le maintenant pour appliquer les mises à jour de sécurité et de bibliothèques.", - "rebuild_server": "Reconstruire le binaire du serveur", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Binaire du serveur reconstruit et redémarré", - "rebuild_server_failed": "Échec de la reconstruction du binaire du serveur", - "server_deployed": "Binaire du serveur déployé", - "server_deploy_failed": "Échec du déploiement du serveur", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Téléchargement du code source du serveur…", - "delete": "Supprimer", - "delete_confirm": "Supprimer définitivement la sauvegarde {name} ? Cette action est irréversible.", - "delete_success": "Sauvegarde supprimée", - "delete_failed": "Impossible de supprimer la sauvegarde", - "retention_label": "Conserver les N sauvegardes les plus récentes", - "retention_hint": "Les anciennes sauvegardes sont supprimées automatiquement après chaque mise à jour. Utilisez 0 pour toutes les conserver.", - "retention_saved": "Paramètre de rétention enregistré", - "retention_invalid": "La rétention doit être un entier entre 0 et 1000", - "retention_required_for_prune": "Définissez d’abord une valeur de rétention supérieure à 0", - "prune_now": "Apply now", - "prune_confirm": "Ne conserver que les {n} sauvegardes les plus récentes et supprimer le reste ?", - "prune_done": "{n} sauvegarde(s) supprimée(s)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Méthode de mise à jour", - "strategy_download": "Télécharger le binaire précompilé", - "strategy_compile": "Compiler depuis les sources", - "both_available": "Télécharger et compiler", - "download_available": "Téléchargement disponible", - "no_method": "Aucune méthode de mise à jour", - "no_release": "No release", - "available": "Disponible", - "server_downloading": "Téléchargement du binaire serveur…", - "server_downloaded": "Binaire serveur téléchargé", - "server_download_failed": "Échec du téléchargement du binaire serveur", - "server_download_note": "Un binaire précompilé sera téléchargé depuis GitHub Releases. Cela prend généralement moins d’une minute.", - "install_go_hint": "Installez Go depuis https://go.dev/dl/ pour activer la compilation, ou publiez une version avec des binaires précompilés", - "strategy_install_go": "Installer Go automatiquement et compiler", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Reconstruction automatique prête", - "toolchain_ready": "Chaîne d’outils installée", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Téléchargement de la chaîne d’outils Go…", - "toolchain_failed": "Échec de l’installation de la chaîne d’outils Go", - "modal_title": "Installation de la mise à jour", - "modal_done_title": "Mise à jour terminée", - "modal_close": "Fermer", - "modal_reload_now": "Recharger la console", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Fichiers de la console", - "phase_server": "Serveur Go", - "phase_restart": "Redémarrage", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Sauvegarde ignorée (choix utilisateur)", - "server_skipped": "Serveur Go ignoré", - "server_not_selected": "Go server not selected", - "server_processing": "Traitement de la mise à jour du serveur Go…", - "no_restart_needed": "Aucun redémarrage requis", - "complete": "Mise à jour appliquée", - "complete_summary": "La mise à jour a été appliquée avec succès.", - "complete_with_errors": "La mise à jour est terminée, mais certaines étapes ont échoué. Voir les détails ci-dessous.", - "modal_done_with_errors_title": "Mise à jour terminée avec erreurs", - "console_will_restart": "Le processus de console va maintenant redémarrer…", - "restart_complete_msg": "La console a terminé son redémarrage. Cliquez sur Recharger pour charger la nouvelle version. La page se rechargera automatiquement dans 8 secondes.", - "refresh_recommended": "Les ressources statiques ont changé — rechargez la page pour voir la nouvelle interface.", - "confirm_title": "Appliquer la mise à jour", - "confirm_with_backup": "Une sauvegarde préalable sera créée automatiquement.", - "confirm_no_backup": "Aucune sauvegarde ne sera créée (continuez à vos risques)." - }, - "permissions": { - "title": "Autorisations", - "subtitle": "Gérer les autorisations basées sur les rôles et les remplacements personnalisés", - "info_title": "Fonctionnement des autorisations", - "info_desc": "Chaque rôle dispose d’autorisations par défaut. Vous pouvez ajouter ou retirer des autorisations individuelles par rôle avec les bascules ci-dessous. Les remplacements personnalisés sont mis en évidence et peuvent être rétablis aux valeurs par défaut à tout moment.", - "select_role": "Sélectionner un rôle", - "select_role_placeholder": "Choisissez un rôle...", - "reset_overrides": "Réinitialiser tous les remplacements", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Niveau serveur", - "custom": "Custom", - "default": "Default", - "revert": "Revenir à la valeur par défaut", - "saved": "Autorisation mise à jour", - "reverted": "Rétabli à la valeur par défaut", - "all_reverted": "Tous les remplacements ont été rétablis", - "confirm_reset": "Réinitialiser tous les remplacements personnalisés de ce rôle aux valeurs par défaut ?", - "empty_title": "Sélectionnez un rôle", - "empty_desc": "Choisissez un rôle dans la liste ci-dessus pour afficher et gérer ses autorisations.", - "locked_title": "Super Admin", - "locked_desc": "Le Super Admin possède toutes les autorisations par défaut et ne peut pas être personnalisé.", - "cat_device": "Appareils", - "cat_user": "Users", - "cat_server": "Serveur", - "cat_org": "Organisations", - "cat_audit": "Audit et surveillance", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Voir les appareils", - "perm_device_connect": "Se connecter aux appareils", - "perm_device_edit": "Modifier les appareils", - "perm_device_delete": "Supprimer les appareils", - "perm_device_ban": "Bannir / débannir les appareils", - "perm_device_change_id": "Changer l’ID de l’appareil", - "perm_user_view": "Voir les utilisateurs", - "perm_user_create": "Créer des utilisateurs", - "perm_user_edit": "Modifier les utilisateurs", - "perm_user_delete": "Supprimer les utilisateurs", - "perm_server_config": "Configuration du serveur", - "perm_server_keys": "Gérer les clés API", - "perm_org_create": "Créer des organisations", - "perm_org_edit": "Modifier les organisations", - "perm_org_delete": "Supprimer les organisations", - "perm_org_manage_users": "Gérer les utilisateurs de l’organisation", - "perm_org_manage_devices": "Gérer les appareils de l’organisation", - "perm_audit_view": "Voir les journaux d’audit", - "perm_metrics_view": "Voir les métriques", - "perm_blocklist_edit": "Modifier la liste de blocage", - "perm_cdap_view": "Voir les appareils CDAP", - "perm_cdap_command": "Envoyer des commandes CDAP", - "perm_cdap_terminal": "Accès au terminal CDAP", - "perm_cdap_files": "Accès aux fichiers CDAP", - "perm_enrollment_manage": "Gérer l’inscription", - "perm_enrollment_approve": "Approuver l’inscription", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Modifier la marque", - "perm_server_attestation": "Attestation de performance du serveur" - }, - "notifications": { - "title": "Centre de notifications", - "empty": "Aucune nouvelle notification", - "mark_all_read": "Tout marquer comme lu", - "see_all": "Voir toutes les demandes d’aide", - "help_request": "Demande d’aide", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibilité", - "subtitle": "Adaptez la console à votre vision, au mouvement et à la lecture.", - "close": "Fermer le menu accessibilité", - "profiles": "Profils rapides", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Texte plus grand, fort contraste et focus visible.", - "profile_dyslexia": "Confort de lecture", - "profile_dyslexia_hint": "Police lisible et espacement plus large.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Réduit les transitions et met les animations en pause.", - "profile_color_assist": "Aide aux couleurs", - "profile_color_assist_hint": "Filtre de couleur, libellés et liens mis en évidence.", - "reading": "Lecture", - "font_size": "Taille du texte", - "line_height": "Hauteur de ligne", - "letter_spacing": "Espacement des lettres", - "word_spacing": "Espacement des mots", - "readable_font": "Police lisible", - "readable_font_hint": "Utilise des formes de lettres larges et familières.", - "dyslexia_spacing": "Espacement pour dyslexie", - "dyslexia_spacing_hint": "Ajoute un espacement supplémentaire pour les textes longs.", - "visual": "Visuel", - "contrast": "Contraste", - "contrast_normal": "Normal", - "contrast_high_dark": "Contraste élevé sombre", - "contrast_high_light": "Contraste élevé clair", - "contrast_yellow_black": "Jaune sur noir", - "color_filter": "Filtre de vision des couleurs", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturation des couleurs", - "underline_links": "Souligner les liens", - "underline_links_hint": "Rend les liens visibles sans dépendre de la couleur.", - "highlight_links": "Mettre en évidence les actions", - "highlight_links_hint": "Trace un contour autour des liens et boutons.", - "highlight_headings": "Mettre en évidence les titres", - "highlight_headings_hint": "Marque les titres de section avec une barre colorée.", - "hide_media": "Dim media", - "hide_media_hint": "Assombrit les images, vidéos et canevas.", - "interaction": "Interaction", - "strong_focus": "Focus renforcé", - "strong_focus_hint": "Affiche un large contour de focus clavier.", - "large_cursor": "Grand curseur", - "large_cursor_hint": "Utilise un pointeur plus grand à fort contraste.", - "reduce_motion": "Réduire les mouvements", - "reduce_motion_hint": "Raccourcit les transitions et le défilement fluide.", - "pause_animations": "Mettre les animations en pause", - "pause_animations_hint": "Arrête les mouvements visuels en boucle.", - "reading_guide": "Guide de lecture", - "reading_guide_hint": "Suit le pointeur avec une ligne lumineuse.", - "reading_mask": "Masque de lecture", - "reading_mask_hint": "Assombrit le contenu au-dessus et au-dessous du pointeur.", - "preview": "Aperçu", - "preview_title": "Aperçu de l’espace opérateur", - "preview_text": "Vérifiez si le texte, les liens, les contrôles et les libellés d’état sont confortables à lire avant de fermer ce menu.", - "preview_link": "Lien vers les détails de l’appareil", - "preview_status": "Online", - "preview_button": "Action principale", - "preview_secondary": "Secondary", - "reset": "Réinitialiser", - "done": "Terminé" - }, - "server_mgmt": { - "title": "Gestion du serveur", - "subtitle": "Panneau de type Cockpit pour l'hôte de la console BetterDesk (BÊTA).", - "beta_tooltip": "Fonction bêta — en développement actif.", - "notice_title": "Fonction bêta", - "notice_body": "Ces outils s'exécutent sur l'hôte où tourne le processus de la console BetterDesk. Toutes les opérations sont auditées.", - "tab_overview": "Aperçu", - "tab_terminal": "Terminal", - "tab_files": "Fichiers", - "tab_services": "Services", - "cpu": "CPU", - "memory": "Mémoire", - "load": "Charge moyenne", - "disks": "Disques", - "history": "Historique (60 derniers échantillons)", - "host_info": "Infos hôte", - "cores": "cœurs", - "uptime": "Temps d'activité", - "no_disks": "Aucune donnée disque disponible", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY disponible", - "term_connect": "Connecter", - "term_disconnect": "Déconnecter", - "term_clear": "Effacer", - "term_status": "Status", - "term_connecting": "Connexion…", - "term_connected": "Connecté", - "term_disconnected": "Déconnecté", - "term_error": "Erreur de connexion", - "term_warning": "Les commandes s’exécutent sous l’utilisateur propriétaire du processus de console. Ajoutez une règle sudoers pour permettre l’élévation.", - "term_hint": "Astuce : tapez `sudo -i` pour obtenir les privilèges root (configuration sudoers requise).", - "term_lib_failed": "Impossible de charger la bibliothèque de terminal", - "files_up": "Niveau supérieur", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Nom", - "files_size": "Taille", - "files_perms": "Mode", - "files_mtime": "Modifié", - "files_rename": "Renommer", - "files_rename_prompt": "New name:", - "files_empty": "Répertoire vide", - "files_error": "Impossible de lister le répertoire", - "read_failed": "Impossible de lire le fichier", - "save_failed": "Impossible d’enregistrer le fichier", - "rename_failed": "Échec du renommage", - "delete_failed": "Échec de la suppression", - "delete_confirm": "Supprimer cette entrée ?", - "mkdir_prompt": "Nom du nouveau dossier :", - "mkdir_failed": "Impossible de créer le dossier", - "file_saved": "Fichier enregistré", - "binary_warn": "Fichier binaire — aperçu uniquement", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Rechercher des services…", - "svc_name": "Service", - "svc_state": "État", - "svc_description": "Description", - "svc_empty": "Aucun service trouvé", - "svc_load_failed": "Impossible de charger les services", - "svc_action_failed": "Échec de l’action", - "svc_confirm": "Run", - "svc_start": "Démarrer", - "svc_stop": "Arrêter", - "svc_restart": "Redémarrer", - "svc_reload": "Recharger", - "svc_enable": "Activer", - "svc_disable": "Désactiver", - "svc_status": "Status" - }, - "download": { - "title": "Télécharger l’agent BetterDesk", - "choose_platform": "Choisissez votre plateforme", - "choose_platform_hint": "Sélectionnez l’installateur correspondant à votre système d’exploitation.", - "download": "Télécharger", - "building": "Construction…", - "failed": "Échec de la construction", - "need_help": "Besoin d’aide ?", - "powered_by": "Propulsé par" - }, - "server_attestation": { - "title": "Attestation du serveur", - "subtitle": "Benchmark de performance qui détermine la capacité de connexions distantes simultanées à un seuil de 80% CPU, RAM et disque.", - "warning_title": "Test de charge", - "warning_body": "Le benchmark simule des connexions WebSocket parallèles aux serveurs de signal et de relais. Exécutez pendant les heures creuses — ce test charge la production.", - "run_benchmark": "Lancer le benchmark", - "abort": "Abandonner", - "download_report": "Télécharger le rapport JSON", - "last_test": "Dernier test", - "no_test_yet": "Aucun benchmark n'a encore été exécuté", - "max_connections": "Connexions maximales", - "threshold_80": "Seuil à 80% — métriques finales", - "disk": "Disque", - "ramp_chart": "Graphique de montée en charge", - "connections": "Connexions", - "connections_short": "conn.", - "tier_guide_title": "Que signifie chaque niveau ?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "NON ÉVALUÉ", - "tier_bronze_desc": "1–25 connexions simultanées — petit VPS (1–2 vCPU, 2–4 Go de RAM).", - "tier_iron_desc": "26–75 connexions — serveur milieu de gamme (2–4 vCPU, 4–8 Go de RAM).", - "tier_platinum_desc": "76–200 connexions — serveur haute performance (4–8 vCPU, 8–16 Go de RAM).", - "tier_titanium_desc": "201–400 connexions — infrastructure d'entreprise (8+ vCPU, 16–32 Go de RAM).", - "tier_obsidian_desc": "401+ connexions — classe turbo : matériel dédié, 16+ vCPU, 32+ Go de RAM, NVMe.", - "docker_note": "Remarque : dans Docker, les métriques CPU/RAM peuvent refléter les limites du conteneur plutôt que l'hôte physique.", - "badge_tooltip": "Attestation du serveur BetterDesk — certification de performance du serveur", - "confirm_run": "Ce benchmark effectuera un test de charge du serveur avec des connexions simulées. Continuer ?", - "starting": "Démarrage…", - "complete": "Benchmark terminé", - "signal_peers": "Pairs de signal", - "relay_sessions": "Sessions de relais", - "page_error": "Échec du chargement de la page d'attestation du serveur", - "mode_estimated": "Estimé (WebSocket inaccessible)", - "incomplete": "Benchmark terminé sans niveau valide" + "form": { + "cancel": "Annuler" } + } } diff --git a/web-nodejs/lang/hi.json b/web-nodejs/lang/hi.json index 5d83d293..31e12eb8 100644 --- a/web-nodejs/lang/hi.json +++ b/web-nodejs/lang/hi.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Hindi", - "native_name": "हिन्दी", - "flag": "🇮🇳", - "needs_review": true + "_meta": { + "name": "Hindi", + "native_name": "हिन्दी", + "flag": "🇮🇳", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "लोड हो रहा है...", + "confirm": "पुष्टि करना", + "alert": "Alert", + "prompt": "मान दर्ज करें", + "copied": "क्लिपबोर्ड पर कॉपी किया गया", + "save": "बचाना", + "saved": "सहेजा गया", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "रद्द करना", + "delete": "मिटाना", + "actions": "Actions", + "close": "बंद करना", + "required": "आवश्यक", + "name_required": "नाम आवश्यक है", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "अमान्य JSON", + "field_required": "{field} आवश्यक है", + "back": "पीछे", + "edit": "संपादन करना", + "yes": "हाँ", + "no": "नहीं" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "डैशबोर्ड", + "devices": "उपकरण", + "keys": "Keys", + "generator": "Generator", + "settings": "सेटिंग्स", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "सहायता अनुरोध", + "activity": "Activity", + "automation": "स्वचालन", + "file_transfer": "दस्तावेज हस्तांतरण", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "प्रबंध", + "toggle_sidebar": "साइडबार टॉगल करें", + "cdap": "CDAP उपकरण", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "डिवाइस टोकन", + "organizations": "संगठनों", + "policies": "नीतियों", + "attestation": "Attestation", + "remote": "दूरवर्ती डेस्कटॉप", + "toolkit": "Toolkit", + "security_audit": "सुरक्षा लेखापरीक्षा", + "languages": "Languages", + "resource_control": "संसाधन नियंत्रण", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "साइडबार का विस्तार करें", + "toggle_theme": "थीम टॉगल करें", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "अनुमतियां", + "server_management": "सर्वर प्रबंधन", + "server_attestation": "सर्वर प्रमाणीकरण", + "commercialization": "व्यावसायीकरण" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "BetterDesk कंसोल में साइन इन करें", + "username": "उपयोगकर्ता नाम", + "username_placeholder": "उपयोक्तानाम दर्ज करें", + "password": "पासवर्ड", + "password_placeholder": "पास वर्ड दर्ज करें", + "remember_me": "Remember me", + "login_failed": "लॉगिन विफल। कृपया अपनी साख जांचें.", + "invalid_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड।", + "username_collision": "इस उपयोगकर्ता नाम वाला स्थानीय खाता पहले से मौजूद है। अपने स्थानीय पासवर्ड से साइन इन करें, या व्यवस्थापक से संघर्ष वाले खाते का नाम बदलने या हटाने को कहें।", + "fill_all_fields": "कृपया सभी स्थानों को भरें", + "logout_confirm": "क्या आप लॉग आउट करना चाहते हैं?", + "change_password": "पासवर्ड बदलें", + "password_required": "पासवर्ड आवश्यक है", + "totp_title": "दो-कारक प्रमाणीकरण", + "totp_subtitle": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "इसके बजाय पुनर्प्राप्ति कोड का उपयोग करें", + "totp_use_code": "इसके बजाय प्रमाणक कोड का उपयोग करें", + "totp_recovery_code": "पुनःप्राप्ति सांकेतिक अंक", + "totp_back_to_login": "लॉगिन पर वापस जाएं", + "totp_invalid_code": "अवैध सत्यापन संकेत। कृपया पुन: प्रयास करें।", + "totp_enter_code": "कृपया 6 अंकीय कोड दर्ज करें", + "totp_enter_recovery": "कृपया एक पुनर्प्राप्ति कोड दर्ज करें", + "totp_session_expired": "सत्र समाप्त हुआ। कृपया फिर भाग लें।", + "totp_already_enabled": "दो-कारक प्रमाणीकरण पहले से ही सक्षम है", + "pro_only_account": "यह खाता केवल RustDesk डेस्कटॉप क्लाइंट के लिए है। लॉग इन करने के लिए कृपया RustDesk ऐप का उपयोग करें।", + "passwords_mismatch": "सांकेतिक शब्द मेल नहीं खाते", + "or": "या", + "login_sso": "SSO के साथ साइन इन करें", + "login_sso_with": "{{provider}} के साथ साइन इन करें", + "oidc_denied": "पहचान प्रदाता द्वारा पहुंच से इनकार कर दिया गया था।", + "oidc_invalid": "अमान्य OIDC कॉलबैक. कृपया पुन: प्रयास करें।", + "oidc_failed": "OIDC प्रमाणीकरण विफल रहा. कृपया पुन: प्रयास करें।", + "oidc_error": "SSO लॉगिन के दौरान एक त्रुटि उत्पन्न हुई।", + "oidc_no_account": "आपका खाता नहीं मिला और स्वतः-पंजीकरण अक्षम है।", + "totp_rate_limited": "बहुत अधिक प्रयास. कृपया बाद में पुन: प्रयास करें।", + "emergency_mode_banner": "Go server पहुंच योग्य नहीं - आपातकालीन मोड में चल रहा है (केवल व्यवस्थापक, सीमित कार्यक्षमता)" + }, + "dashboard": { + "title": "डैशबोर्ड", + "subtitle": "Overview of your RustDesk server", + "total_devices": "कुल उपकरण", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "सक्रिय कनेक्शन", + "offline_devices": "Offline", + "server_status": "सर्वर की स्थिति", + "quick_actions": "त्वरित कार्रवाई", + "manage_devices": "कनेक्टेड डिवाइस प्रबंधित करें", + "view_keys": "सर्वर कुंजियाँ देखें", + "generate_config": "क्लाइंट कॉन्फ़िगरेशन जनरेट करें", + "server_settings": "सेटिंग्स कॉन्फ़िगर करें", + "greeting_morning": "सुप्रभात, {name}", + "greeting_afternoon": "शुभ दोपहर, {name}", + "greeting_evening": "शुभ संध्या, {name}", + "greeting_night": "शुभ रात्रि, {name}", + "health_overview": "स्वास्थ्य अवलोकन", + "devices_online": "उपकरण ऑनलाइन", + "active_alerts": "सक्रिय अलर्ट", + "recent_connections": "कुल उपकरण", + "server_uptime": "सर्वर अपटाइम", + "activity_feed": "हाल की गतिविधि", + "no_recent_activity": "कोई हालिया गतिविधि नहीं", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "मॉनिटरिंग विजेट के साथ मल्टी-विंडो कार्यक्षेत्र के लिए डेस्कटॉप मोड आज़माएं।", + "tip_keyboard_shortcuts": "त्वरित खोज कमांड पैलेट खोलने के लिए कहीं भी Ctrl+K दबाएँ।", + "tip_address_book": "RustDesk क्लाइंट से लॉग इन करके अपनी एड्रेस बुक को सभी डिवाइसों में सिंक करें।", + "tip_2fa": "अतिरिक्त खाता सुरक्षा के लिए सेटिंग्स में दो-कारक प्रमाणीकरण सक्षम करें।", + "tip_bulk_actions": "एकाधिक डिवाइस चुनें और उन्हें एक साथ प्रबंधित करने के लिए बल्क क्रियाओं का उपयोग करें।", + "tip_theme": "साइडबार सेटिंग्स में डार्क और लाइट थीम के बीच स्विच करें।", + "tip_cdap": "CDAP गेटवे के माध्यम से IoT उपकरणों और औद्योगिक सेंसर को कनेक्ट करें।", + "tip_tutorials": "इंटरैक्टिव ट्यूटोरियल के लिए नीचे-दाएं कोने में सहायता बटन पर क्लिक करें।" + }, + "devices": { + "title": "उपकरण", + "id": "ID", + "hostname": "Hostname", + "username": "उपयोगकर्ता नाम", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "बनाया था", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "डिवाइस खोजें...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "सिंक स्थिति", + "sync_success": "स्थिति सफलतापूर्वक समन्वयित हुई", + "empty_title": "कोई यंत्र नहीं मिले", + "empty_text": "कोई भी उपकरण आपके वर्तमान फ़िल्टर से मेल नहीं खाता", + "edit_title": "डिवाइस विवरण", + "delete_title": "डिवाइस हटाएँ", + "delete_confirm": "क्या आप वाकई डिवाइस {id} को हटाना चाहते हैं?", + "delete_warning": "आप इस डिवाइस को स्थायी रूप से हटाने वाले हैं:", + "delete_permanent": "इस एक्शन को वापस नहीं किया जा सकता। इस डिवाइस से जुड़े सभी डेटा को डेटाबेस से स्थायी रूप से हटा दिया जाएगा।", + "delete_success": "डिवाइस सफलतापूर्वक हटा दिया गया", + "revoke_option": "डिवाइस निरस्त करें", + "revoke_hint": "डिवाइस आईडी को ब्लॉक करें और सक्रिय कनेक्शन डिस्कनेक्ट करें", + "revoke_success": "डिवाइस सफलतापूर्वक निरस्त कर दिया गया", + "details": "डिवाइस विवरण", + "ban_title": "डिवाइस पर प्रतिबंध लगाएं", + "ban_confirm": "क्या आप वाकई {id} डिवाइस पर प्रतिबंध लगाना चाहते हैं?", + "ban_success": "डिवाइस सफलतापूर्वक प्रतिबंधित कर दिया गया", + "unban_title": "डिवाइस को अनबैन करें", + "unban_confirm": "क्या आप वाकई डिवाइस {id} को अनबैन करना चाहते हैं?", + "unban_success": "डिवाइस सफलतापूर्वक अप्रतिबंधित किया गया", + "change_id": "Change ID", + "change_id_title": "डिवाइस आईडी बदलें", + "new_id": "New ID", + "change_id_hint": "केवल 6-16 अक्षर, अक्षर, संख्याएँ, डैश और अंडरस्कोर", + "change_id_success": "डिवाइस आईडी सफलतापूर्वक बदल दी गई", + "id_length_error": "आईडी 6-16 अक्षर लंबी होनी चाहिए", + "id_format_error": "आईडी में केवल अक्षर, संख्याएं, डैश और अंडरस्कोर हो सकते हैं", + "bulk_delete_title": "एकाधिक डिवाइस हटाएं", + "bulk_delete_confirm": "क्या आप वाकई {count} डिवाइस को हटाना चाहते हैं?", + "bulk_delete_success": "{count} डिवाइस सफलतापूर्वक हटा दिए गए", + "columns": "Columns", + "toggle_columns": "दृश्यमान कॉलम टॉगल करें", + "not_found": "युक्ति नहीं मिला", + "delete_failed": "डिवाइस हटाने में विफल", + "change_id_failed": "डिवाइस आईडी बदलने में विफल", + "invalid_id": "अमान्य डिवाइस आईडी (6-16 अक्षर आवश्यक)", + "invalid_id_format": "अमान्य आईडी प्रारूप (केवल अक्षर, संख्या, डैश, अंडरस्कोर)", + "id_exists": "डिवाइस आईडी पहले से मौजूद है", + "no_selection": "कोई उपकरण चयनित नहीं", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "एक्सेस नीति", + "unattended_access": "अप्राप्य पहुंच", + "enable_unattended": "अप्राप्य पहुंच सक्षम करें", + "access_password": "एक्सेस पासवर्ड", + "password_configured": "पासवर्ड सेट", + "no_password": "कोई पासवर्ड नहीं", + "new_password": "नया पासवर्ड (वर्तमान रखने के लिए खाली छोड़ें)", + "clear_password": "पासवर्ड साफ़ करें", + "access_schedule": "प्रवेश अनुसूची", + "enable_schedule": "समय-आधारित पहुंच सक्षम करें", + "allowed_days": "अनुमत दिन", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "अनुमत ऑपरेटर", + "all_operators": "सभी ऑपरेटर (खाली छोड़ें)", + "operators_hint": "अल्पविराम से अलग किए गए उपयोक्तानाम. सभी ऑपरेटरों को अनुमति देने के लिए खाली छोड़ें।", + "last_updated_by": "अंतिम बार अद्यतन किया गया", + "access_policy_saved": "पहुंच नीति सहेजी गई", + "tabs": { + "overview": "सिंहावलोकन", + "hardware": "Hardware", + "metrics": "मेट्रिक्स", + "connections": "कनेक्शन", + "audit": "Audit", + "info": "Info", + "history": "इतिहास" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "औसत लोड करें", + "network": "संचार अनुकूलक", + "no_data": "कोई हार्डवेयर डेटा उपलब्ध नहीं है", + "title": "हार्डवेयर सूचना", + "gpu": "Graphics Card" }, - "common": { - "loading": "लोड हो रहा है...", - "confirm": "पुष्टि करना", - "alert": "Alert", - "prompt": "मान दर्ज करें", - "copied": "क्लिपबोर्ड पर कॉपी किया गया", - "save": "बचाना", - "saved": "सहेजा गया", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "रद्द करना", - "delete": "मिटाना", - "actions": "Actions", - "close": "बंद करना", - "required": "आवश्यक", - "name_required": "नाम आवश्यक है", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "अमान्य JSON", - "field_required": "{field} आवश्यक है", - "back": "पीछे", - "edit": "संपादन करना", - "yes": "हाँ", - "no": "नहीं" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "डैशबोर्ड", - "devices": "उपकरण", - "keys": "Keys", - "generator": "Generator", - "settings": "सेटिंग्स", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "सहायता अनुरोध", - "activity": "Activity", - "automation": "स्वचालन", - "file_transfer": "दस्तावेज हस्तांतरण", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "प्रबंध", - "toggle_sidebar": "साइडबार टॉगल करें", - "cdap": "CDAP उपकरण", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "डिवाइस टोकन", - "organizations": "संगठनों", - "policies": "नीतियों", - "attestation": "Attestation", - "remote": "दूरवर्ती डेस्कटॉप", - "toolkit": "Toolkit", - "security_audit": "सुरक्षा लेखापरीक्षा", - "languages": "Languages", - "resource_control": "संसाधन नियंत्रण", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "साइडबार का विस्तार करें", - "toggle_theme": "थीम टॉगल करें", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "अनुमतियां", - "server_management": "सर्वर प्रबंधन", - "server_attestation": "सर्वर प्रमाणीकरण" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "BetterDesk कंसोल में साइन इन करें", - "username": "उपयोगकर्ता नाम", - "username_placeholder": "उपयोक्तानाम दर्ज करें", - "password": "पासवर्ड", - "password_placeholder": "पास वर्ड दर्ज करें", - "remember_me": "Remember me", - "login_failed": "लॉगिन विफल। कृपया अपनी साख जांचें.", - "invalid_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड।", - "username_collision": "इस उपयोगकर्ता नाम वाला स्थानीय खाता पहले से मौजूद है। अपने स्थानीय पासवर्ड से साइन इन करें, या व्यवस्थापक से संघर्ष वाले खाते का नाम बदलने या हटाने को कहें।", - "fill_all_fields": "कृपया सभी स्थानों को भरें", - "logout_confirm": "क्या आप लॉग आउट करना चाहते हैं?", - "change_password": "पासवर्ड बदलें", - "password_required": "पासवर्ड आवश्यक है", - "totp_title": "दो-कारक प्रमाणीकरण", - "totp_subtitle": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "इसके बजाय पुनर्प्राप्ति कोड का उपयोग करें", - "totp_use_code": "इसके बजाय प्रमाणक कोड का उपयोग करें", - "totp_recovery_code": "पुनःप्राप्ति सांकेतिक अंक", - "totp_back_to_login": "लॉगिन पर वापस जाएं", - "totp_invalid_code": "अवैध सत्यापन संकेत। कृपया पुन: प्रयास करें।", - "totp_enter_code": "कृपया 6 अंकीय कोड दर्ज करें", - "totp_enter_recovery": "कृपया एक पुनर्प्राप्ति कोड दर्ज करें", - "totp_session_expired": "सत्र समाप्त हुआ। कृपया फिर भाग लें।", - "totp_already_enabled": "दो-कारक प्रमाणीकरण पहले से ही सक्षम है", - "pro_only_account": "यह खाता केवल RustDesk डेस्कटॉप क्लाइंट के लिए है। लॉग इन करने के लिए कृपया RustDesk ऐप का उपयोग करें।", - "passwords_mismatch": "सांकेतिक शब्द मेल नहीं खाते", - "or": "या", - "login_sso": "SSO के साथ साइन इन करें", - "login_sso_with": "{{provider}} के साथ साइन इन करें", - "oidc_denied": "पहचान प्रदाता द्वारा पहुंच से इनकार कर दिया गया था।", - "oidc_invalid": "अमान्य OIDC कॉलबैक. कृपया पुन: प्रयास करें।", - "oidc_failed": "OIDC प्रमाणीकरण विफल रहा. कृपया पुन: प्रयास करें।", - "oidc_error": "SSO लॉगिन के दौरान एक त्रुटि उत्पन्न हुई।", - "oidc_no_account": "आपका खाता नहीं मिला और स्वतः-पंजीकरण अक्षम है।", - "totp_rate_limited": "बहुत अधिक प्रयास. कृपया बाद में पुन: प्रयास करें।", - "emergency_mode_banner": "Go server पहुंच योग्य नहीं - आपातकालीन मोड में चल रहा है (केवल व्यवस्थापक, सीमित कार्यक्षमता)" - }, - "dashboard": { - "title": "डैशबोर्ड", - "subtitle": "Overview of your RustDesk server", - "total_devices": "कुल उपकरण", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "सक्रिय कनेक्शन", - "offline_devices": "Offline", - "server_status": "सर्वर की स्थिति", - "quick_actions": "त्वरित कार्रवाई", - "manage_devices": "कनेक्टेड डिवाइस प्रबंधित करें", - "view_keys": "सर्वर कुंजियाँ देखें", - "generate_config": "क्लाइंट कॉन्फ़िगरेशन जनरेट करें", - "server_settings": "सेटिंग्स कॉन्फ़िगर करें", - "greeting_morning": "सुप्रभात, {name}", - "greeting_afternoon": "शुभ दोपहर, {name}", - "greeting_evening": "शुभ संध्या, {name}", - "greeting_night": "शुभ रात्रि, {name}", - "health_overview": "स्वास्थ्य अवलोकन", - "devices_online": "उपकरण ऑनलाइन", - "active_alerts": "सक्रिय अलर्ट", - "recent_connections": "कुल उपकरण", - "server_uptime": "सर्वर अपटाइम", - "activity_feed": "हाल की गतिविधि", - "no_recent_activity": "कोई हालिया गतिविधि नहीं", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "मॉनिटरिंग विजेट के साथ मल्टी-विंडो कार्यक्षेत्र के लिए डेस्कटॉप मोड आज़माएं।", - "tip_keyboard_shortcuts": "त्वरित खोज कमांड पैलेट खोलने के लिए कहीं भी Ctrl+K दबाएँ।", - "tip_address_book": "RustDesk क्लाइंट से लॉग इन करके अपनी एड्रेस बुक को सभी डिवाइसों में सिंक करें।", - "tip_2fa": "अतिरिक्त खाता सुरक्षा के लिए सेटिंग्स में दो-कारक प्रमाणीकरण सक्षम करें।", - "tip_bulk_actions": "एकाधिक डिवाइस चुनें और उन्हें एक साथ प्रबंधित करने के लिए बल्क क्रियाओं का उपयोग करें।", - "tip_theme": "साइडबार सेटिंग्स में डार्क और लाइट थीम के बीच स्विच करें।", - "tip_cdap": "CDAP गेटवे के माध्यम से IoT उपकरणों और औद्योगिक सेंसर को कनेक्ट करें।", - "tip_tutorials": "इंटरैक्टिव ट्यूटोरियल के लिए नीचे-दाएं कोने में सहायता बटन पर क्लिक करें।" - }, - "devices": { - "title": "उपकरण", - "id": "ID", - "hostname": "Hostname", - "username": "उपयोगकर्ता नाम", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "बनाया था", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "डिवाइस खोजें...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "सिंक स्थिति", - "sync_success": "स्थिति सफलतापूर्वक समन्वयित हुई", - "empty_title": "कोई यंत्र नहीं मिले", - "empty_text": "कोई भी उपकरण आपके वर्तमान फ़िल्टर से मेल नहीं खाता", - "edit_title": "डिवाइस विवरण", - "delete_title": "डिवाइस हटाएँ", - "delete_confirm": "क्या आप वाकई डिवाइस {id} को हटाना चाहते हैं?", - "delete_warning": "आप इस डिवाइस को स्थायी रूप से हटाने वाले हैं:", - "delete_permanent": "इस एक्शन को वापस नहीं किया जा सकता। इस डिवाइस से जुड़े सभी डेटा को डेटाबेस से स्थायी रूप से हटा दिया जाएगा।", - "delete_success": "डिवाइस सफलतापूर्वक हटा दिया गया", - "revoke_option": "डिवाइस निरस्त करें", - "revoke_hint": "डिवाइस आईडी को ब्लॉक करें और सक्रिय कनेक्शन डिस्कनेक्ट करें", - "revoke_success": "डिवाइस सफलतापूर्वक निरस्त कर दिया गया", - "details": "डिवाइस विवरण", - "ban_title": "डिवाइस पर प्रतिबंध लगाएं", - "ban_confirm": "क्या आप वाकई {id} डिवाइस पर प्रतिबंध लगाना चाहते हैं?", - "ban_success": "डिवाइस सफलतापूर्वक प्रतिबंधित कर दिया गया", - "unban_title": "डिवाइस को अनबैन करें", - "unban_confirm": "क्या आप वाकई डिवाइस {id} को अनबैन करना चाहते हैं?", - "unban_success": "डिवाइस सफलतापूर्वक अप्रतिबंधित किया गया", - "change_id": "Change ID", - "change_id_title": "डिवाइस आईडी बदलें", - "new_id": "New ID", - "change_id_hint": "केवल 6-16 अक्षर, अक्षर, संख्याएँ, डैश और अंडरस्कोर", - "change_id_success": "डिवाइस आईडी सफलतापूर्वक बदल दी गई", - "id_length_error": "आईडी 6-16 अक्षर लंबी होनी चाहिए", - "id_format_error": "आईडी में केवल अक्षर, संख्याएं, डैश और अंडरस्कोर हो सकते हैं", - "bulk_delete_title": "एकाधिक डिवाइस हटाएं", - "bulk_delete_confirm": "क्या आप वाकई {count} डिवाइस को हटाना चाहते हैं?", - "bulk_delete_success": "{count} डिवाइस सफलतापूर्वक हटा दिए गए", - "columns": "Columns", - "toggle_columns": "दृश्यमान कॉलम टॉगल करें", - "not_found": "युक्ति नहीं मिला", - "delete_failed": "डिवाइस हटाने में विफल", - "change_id_failed": "डिवाइस आईडी बदलने में विफल", - "invalid_id": "अमान्य डिवाइस आईडी (6-16 अक्षर आवश्यक)", - "invalid_id_format": "अमान्य आईडी प्रारूप (केवल अक्षर, संख्या, डैश, अंडरस्कोर)", - "id_exists": "डिवाइस आईडी पहले से मौजूद है", - "no_selection": "कोई उपकरण चयनित नहीं", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "एक्सेस नीति", - "unattended_access": "अप्राप्य पहुंच", - "enable_unattended": "अप्राप्य पहुंच सक्षम करें", - "access_password": "एक्सेस पासवर्ड", - "password_configured": "पासवर्ड सेट", - "no_password": "कोई पासवर्ड नहीं", - "new_password": "नया पासवर्ड (वर्तमान रखने के लिए खाली छोड़ें)", - "clear_password": "पासवर्ड साफ़ करें", - "access_schedule": "प्रवेश अनुसूची", - "enable_schedule": "समय-आधारित पहुंच सक्षम करें", - "allowed_days": "अनुमत दिन", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "अनुमत ऑपरेटर", - "all_operators": "सभी ऑपरेटर (खाली छोड़ें)", - "operators_hint": "अल्पविराम से अलग किए गए उपयोक्तानाम. सभी ऑपरेटरों को अनुमति देने के लिए खाली छोड़ें।", - "last_updated_by": "अंतिम बार अद्यतन किया गया", - "access_policy_saved": "पहुंच नीति सहेजी गई", - "tabs": { - "overview": "सिंहावलोकन", - "hardware": "Hardware", - "metrics": "मेट्रिक्स", - "connections": "कनेक्शन", - "audit": "Audit", - "info": "Info", - "history": "इतिहास" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "औसत लोड करें", - "network": "संचार अनुकूलक", - "no_data": "कोई हार्डवेयर डेटा उपलब्ध नहीं है", - "title": "हार्डवेयर सूचना", - "gpu": "Graphics Card" - }, - "display_name": "प्रदर्शित होने वाला नाम", - "display_name_placeholder": "कस्टम नाम (होस्टनाम को ओवरराइड करता है)", - "note_placeholder": "इस डिवाइस के बारे में नोट्स", - "tags": "Tags", - "filter_by_tags": "टैग द्वारा फ़िल्टर करें", - "no_tags": "No tags", - "all_groups": "सभी समूह", - "create_group": "समूह बनाना", - "manage_groups": "समूह प्रबंधित करें", - "group_name": "समूह नाम", - "group_name_placeholder": "जैसे मीडिया पीसी", - "dynamic_group": "टैग से गतिशील समूह", - "dynamic_group_hint": "इस टैग वाले डिवाइस स्वचालित रूप से जुड़ जाते हैं।", - "tag_filter": "Tag filter", - "group_allowed_users": "अनुमत उपयोगकर्ता", - "group_allowed_users_hint": "समूह को डिवाइस अनुमतियों वाले सभी लोगों के लिए दृश्यमान रखने के लिए खाली छोड़ दें।", - "group_tag_required": "गतिशील समूहों के लिए टैग फ़िल्टर आवश्यक है", - "group_invalid": "अमान्य समूह पहचानकर्ता", - "group_not_found": "समूह नहीं मिला", - "group_saved": "डिवाइस समूह सहेजा गया", - "groups_saved": "डिवाइस समूह सहेजे गए", + "display_name": "प्रदर्शित होने वाला नाम", + "display_name_placeholder": "कस्टम नाम (होस्टनाम को ओवरराइड करता है)", + "note_placeholder": "इस डिवाइस के बारे में नोट्स", + "tags": "Tags", + "filter_by_tags": "टैग द्वारा फ़िल्टर करें", + "no_tags": "No tags", + "all_groups": "सभी समूह", + "create_group": "समूह बनाना", + "manage_groups": "समूह प्रबंधित करें", + "group_name": "समूह नाम", + "group_name_placeholder": "जैसे मीडिया पीसी", + "dynamic_group": "टैग से गतिशील समूह", + "dynamic_group_hint": "इस टैग वाले डिवाइस स्वचालित रूप से जुड़ जाते हैं।", + "tag_filter": "Tag filter", + "group_allowed_users": "अनुमत उपयोगकर्ता", + "group_allowed_users_hint": "समूह को डिवाइस अनुमतियों वाले सभी लोगों के लिए दृश्यमान रखने के लिए खाली छोड़ दें।", + "group_tag_required": "गतिशील समूहों के लिए टैग फ़िल्टर आवश्यक है", + "group_invalid": "अमान्य समूह पहचानकर्ता", + "group_not_found": "समूह नहीं मिला", + "group_saved": "डिवाइस समूह सहेजा गया", + "groups_saved": "डिवाइस समूह सहेजे गए", "group_membership_added": "समूह में जोड़ा गया", "group_membership_removed": "समूह से हटाया गया", - "no_groups": "अभी तक कोई समूह नहीं", - "manual_groups": "मैनुअल समूह", - "dynamic_memberships": "गतिशील सदस्यताएँ", - "group_allowed_user_groups": "अनुमत उपयोगकर्ता समूह", - "group_allowed_user_groups_hint": "चयनित उपयोगकर्ता समूहों के उपयोगकर्ता इस डिवाइस समूह तक पहुंच सकते हैं।", - "no_user_groups": "कोई उपयोगकर्ता समूह नहीं", - "edit_group": "समूह संपादित करें", - "delete_group": "समूह हटाएँ", - "delete_group_confirm": "डिवाइस समूह {name} हटाएं?", - "group_deleted": "डिवाइस समूह हटा दिया गया", - "folder_group_readonly": "फ़ोल्डर-समर्थित समूहों को फ़ोल्डरों से प्रबंधित किया जाता है।", - "manage_user_groups": "उपयोगकर्ता समूह प्रबंधित करें", - "restore_failed": "डिवाइस पुनर्स्थापित करने में विफल", - "no_signal_tooltip": "क्लाइंट ने हाल ही में API से संपर्क किया, लेकिन सिग्नल सर्वर (UDP :21116) पर पंजीकृत नहीं है। सर्वर माइग्रेशन के बाद क्लाइंट को पुनः प्रारंभ करें।", - "per_page": "प्रति पृष्ठ" - }, - "keys": { - "title": "सर्वर कुंजी", - "subtitle": "RustDesk क्लाइंट के लिए सार्वजनिक कुंजी और कॉन्फ़िगरेशन", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "सर्वर जानकारी", - "download": "कुंजी डाउनलोड करें", - "show_qr": "Show QR", - "qr_hint": "इस QR कोड को RustDesk मोबाइल ऐप से स्कैन करें", - "no_key": "कोई सार्वजनिक कुंजी नहीं मिली", - "no_key_to_copy": "कॉपी करने की कोई कुंजी नहीं", - "no_qr": "क्यूआर कोड उपलब्ध नहीं है", - "download_success": "कुंजी फ़ाइल डाउनलोड की गई", - "not_found": "कुंजी प्राप्त नहीं हुई", - "api_not_found": "API कुंजी नहीं मिली" - }, - "settings": { - "title": "सेटिंग्स", - "subtitle": "कंसोल कॉन्फ़िगरेशन और खाता सेटिंग्स", - "tab_general": "General", - "tab_server": "सर्वर", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "भाषा", - "change_password": "पासवर्ड बदलें", - "password_desc": "अपना खाता पासवर्ड अपडेट करें", - "current_password": "वर्तमान पासवर्ड", - "new_password": "नया पासवर्ड", - "confirm_password": "पासवर्ड की पुष्टि कीजिये", - "save_password": "पासवर्ड अपडेट करें", - "password_changed": "पासवर्ड सफलतापूर्वक बदला गया", - "fill_all_fields": "कृपया सभी स्थानों को भरें", - "passwords_not_match": "सांकेतिक शब्द मेल नहीं खाते", - "password_requirements": "पासवर्ड आवश्यकताएँ", - "password_requirements_not_met": "पासवर्ड आवश्यकताओं को पूरा नहीं करता है", - "req_length": "कम से कम 8 अक्षर", - "req_uppercase": "कम से कम एक बड़ा अक्षर", - "req_lowercase": "कम से कम एक छोटा अक्षर", - "req_number": "कम से कम एक नंबर", - "server_info": "सर्वर जानकारी", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "हाल की कंसोल गतिविधि", - "no_audit_logs": "कोई ऑडिट लॉग नहीं मिला", - "backend_title": "सर्वर बैकएंड", - "backend_desc": "डिवाइस प्रबंधन और सिग्नल/रिले सेवाओं के लिए उपयोग करने के लिए कौन सा सर्वर बैकएंड चुनें।", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "मानक RustDesk सिग्नल और रिले सर्वर (hbbs + hbbr)। सीमित समापन बिंदुओं के साथ बुनियादी HTTP API।", - "backend_betterdesk_desc": "पूर्ण REST API, JWT प्रमाणीकरण, ब्लॉकलिस्ट, टैग, वास्तविक समय WebSocket ईवेंट और ऑडिट लॉगिंग के साथ उन्नत गो-आधारित सर्वर।", - "backend_feature_signal": "सिग्नल सर्वर (आईडी पंजीकरण)", - "backend_feature_relay": "रिले सर्वर (कनेक्शन रिले)", - "backend_feature_basic_api": "बेसिक रेस्ट API", - "backend_feature_full_api": "पूर्ण विश्राम API (34+ समापन बिंदु)", - "backend_feature_jwt": "JWT प्रमाणीकरण और TOTP 2FA", - "backend_feature_blocklist": "आईपी/आईडी ब्लॉकलिस्ट प्रबंधन", - "backend_feature_tags": "डिवाइस टैग और ग्रुपिंग", - "backend_feature_audit": "ऑडिट इवेंट लॉगिंग", - "backend_feature_websocket": "वास्तविक समय WebSocket घटनाएँ", - "backend_connection": "संबंध", - "backend_api_url": "API URL", - "backend_test": "परीक्षण कनेक्शन", - "backend_testing": "परीक्षण...", - "backend_save": "बैकएंड लागू करें", - "backend_saved": "सर्वर बैकएंड सफलतापूर्वक बदला गया. डिवाइस डेटा अब नए बैकएंड द्वारा प्रबंधित किया जाएगा।", - "backend_save_failed": "सर्वर बैकएंड स्विच करने में विफल", - "backend_test_success": "कनेक्शन सफल! सर्वर पहुंच योग्य है.", - "backend_test_failed": "कनेक्शन विफल। सर्वर पहुंच योग्य नहीं है.", - "backend_confirm_switch": "क्या आप वाकई सर्वर बैकएंड स्विच करना चाहते हैं? इससे डिवाइसों को प्रबंधित करने का तरीका बदल जाएगा.", - "backend_unreachable": "स्विच नहीं किया जा सकता: लक्ष्य सर्वर पहुंच योग्य नहीं है. सबसे पहले सर्वर प्रारंभ करें.", - "invalid_backend": "अमान्य बैकएंड चयन. 'रस्टडेस्क' या 'बेटरडेस्क' चुनें।", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "दो-कारक प्रमाणीकरण", - "totp_desc": "TOTP प्रमाणक ऐप्स (Google प्रमाणक, Microsoft प्रमाणक, ऑथी, आदि) के साथ सुरक्षा की एक अतिरिक्त परत जोड़ें।", - "totp_enabled": "2एफए सक्षम", - "totp_enabled_desc": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है।", - "totp_disabled": "2FA सक्षम नहीं है", - "totp_disabled_desc": "अतिरिक्त खाता सुरक्षा के लिए दो-कारक प्रमाणीकरण सक्षम करें।", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "अपने फ़ोन पर एक प्रमाणक ऐप इंस्टॉल करें", - "totp_step2": "नीचे दिए गए QR कोड को स्कैन करें", - "totp_step3": "सत्यापित करने के लिए 6 अंकों का कोड दर्ज करें", - "totp_manual_key": "Manual key", - "totp_enter_code": "सत्यापन कोड दर्ज करें", - "totp_verify_enable": "सत्यापित करें और सक्षम करें", - "totp_enabled_success": "दो-कारक प्रमाणीकरण सक्षम!", - "totp_recovery_warning": "इन पुनर्प्राप्ति कोड को सुरक्षित स्थान पर सहेजें। प्रत्येक कोड का उपयोग केवल एक बार किया जा सकता है। यदि आप अपने प्रमाणक ऐप तक पहुंच खो देते हैं, तो आप लॉग इन करने के लिए इन कोड का उपयोग कर सकते हैं।", - "totp_done": "Done", - "totp_disable_warning": "दो-कारक प्रमाणीकरण अक्षम करने से आपका खाता कम सुरक्षित हो जाएगा। पुष्टि करने के लिए अपना पासवर्ड दर्ज करें।", - "totp_disabled_success": "दो-कारक प्रमाणीकरण अक्षम कर दिया गया है.", - "tutorials_title": "ट्यूटोरियल और मार्गदर्शिकाएँ", - "tutorials_desc": "पूरे कंसोल में दिखाए गए निर्देशित पर्यटन और सहायता ओवरले को नियंत्रित करें", - "tutorials_enabled": "ट्यूटोरियल सक्षम करें", - "tutorials_enabled_hint": "अक्षम होने पर, ट्यूटोरियल स्वचालित रूप से प्रारंभ नहीं होंगे और सहायता बटन छिपा रहेगा", - "tutorials_reset_hint": "सभी ट्यूटोरियल को अदृश्य के रूप में चिह्नित करें ताकि उन्हें फिर से दिखाया जा सके", - "tutorials_enabled_toast": "ट्यूटोरियल सक्षम", - "tutorials_disabled_toast": "ट्यूटोरियल अक्षम किए गए", - "tutorials_reset_toast": "सभी ट्यूटोरियल रीसेट कर दिए गए हैं", - "tab_auth": "प्रमाणीकरण", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "LDAP या Active Directory के माध्यम से बाहरी प्रमाणीकरण कॉन्फ़िगर करें। उपयोगकर्ता अपने डोमेन क्रेडेंशियल के साथ साइन इन करने में सक्षम होंगे।", - "ldap_enabled": "LDAP प्रमाणीकरण सक्षम करें", - "ldap_enabled_hint": "सक्षम होने पर, उपयोगकर्ता LDAP/AD क्रेडेंशियल के साथ साइन इन कर सकते हैं। स्थानीय खाते अभी भी फ़ॉलबैक के रूप में कार्य करते हैं.", - "ldap_connection": "सर्वर कनेक्शन", - "ldap_host": "मेज़बान", - "ldap_port": "पत्तन", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "TLS सत्यापित छोड़ें", - "ldap_timeout": "कनेक्शन टाइमआउट", - "ldap_timeout_hint": "LDAP सर्वर प्रतिक्रिया के लिए प्रतीक्षा करने के लिए सेकंड", - "ldap_bind_mode": "बाइंड मोड", - "ldap_direct_bind": "प्रत्यक्ष बाइंड", - "ldap_direct_bind_hint": "खोजने के लिए सेवा खाते का उपयोग करने के बजाय सीधे डीएन टेम्पलेट से जुड़ें।", - "ldap_bind_dn": "बाइंड डीएन (सेवा खाता)", - "ldap_bind_dn_hint": "उपयोगकर्ताओं को खोजने के लिए उपयोग किए जाने वाले रीड-ओनली सेवा खाते का विशिष्ट नाम।", - "ldap_bind_password": "पासवर्ड बाइंड करें", - "ldap_base_dn": "बेस डी.एन", - "ldap_base_dn_hint": "उपयोगकर्ताओं को ढूंढने के लिए खोज आधार, उदा. dc=उदाहरण,dc=com", - "ldap_user_filter": "उपयोगकर्ता फ़िल्टर", - "ldap_user_filter_hint": "उपयोगकर्ताओं को ढूंढने के लिए LDAP फ़िल्टर। प्लेसहोल्डर के रूप में {{username}} का उपयोग करें। डिफ़ॉल्ट: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "डायरेक्ट बाइंड डीएन टेम्पलेट", - "ldap_direct_bind_dn_hint": "डायरेक्ट बाइंड के लिए डीएन टेम्पलेट। प्लेसहोल्डर के रूप में {{username}} का उपयोग करें, उदा. uid={{username}},ou=उपयोगकर्ता,dc=उदाहरण,dc=com", - "ldap_user_attrs": "उपयोगकर्ता विशेषताएँ", - "ldap_attr_id": "उपयोक्तानाम विशेषता", - "ldap_attr_email": "ईमेल विशेषता", - "ldap_attr_name": "प्रदर्शन नाम विशेषता", - "ldap_group_mapping": "समूह → भूमिका मानचित्रण", - "ldap_group_base_dn": "ग्रुप बेस डी.एन", - "ldap_group_base_dn_hint": "मुख्य बेस डीएन का उपयोग करने के लिए इसे खाली छोड़ दें", - "ldap_group_filter": "समूह फ़िल्टर", - "ldap_group_attr_name": "समूह का नाम गुण", - "ldap_default_role": "डिफ़ॉल्ट भूमिका", - "ldap_default_role_hint": "भूमिका उन उपयोगकर्ताओं को सौंपी गई है जिनके LDAP समूह किसी भी मैपिंग से मेल नहीं खाते हैं", - "ldap_role_viewer": "दर्शक", - "ldap_role_operator": "संचालिका", - "ldap_role_admin": "व्यवस्थापक", - "ldap_group_role_map": "समूह → भूमिका मानचित्र", - "ldap_group_role_map_hint": "LDAP समूहों को BetterDesk भूमिकाओं में मैप करें। प्रारूप: GroupDN=भूमिका | द्वारा अलग की गई (पाइप). उदाहरण: CN=एडमिन,DC=उदाहरण,DC=com=एडमिन|CN=ऑप्स,DC=उदाहरण,DC=com=ऑपरेटर", - "ldap_test_connection": "परीक्षण कनेक्शन", - "ldap_testing": "परीक्षण...", - "ldap_test_success": "कनेक्शन सफल! LDAP सर्वर पहुंच योग्य है और बाइंड क्रेडेंशियल मान्य हैं।", - "ldap_test_failed": "कनेक्शन विफल", - "ldap_save": "LDAP कॉन्फ़िगरेशन सहेजें", - "ldap_saved": "LDAP कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "ओपनआईडी कनेक्ट प्रदाता (एज़्योर एडी, ओक्टा, गूगल, कीक्लोक, आदि) के माध्यम से सिंगल साइन-ऑन कॉन्फ़िगर करें।", - "oidc_enabled": "OIDC प्रमाणीकरण सक्षम करें", - "oidc_enabled_hint": "उपयोगकर्ताओं को बाहरी पहचान प्रदाता के साथ साइन इन करने की अनुमति दें", - "oidc_provider": "पहचान प्रदाता", - "oidc_display_name": "बटन प्रदर्शन नाम", - "oidc_display_name_hint": "लॉगिन बटन पर दिखाया गया टेक्स्ट (उदाहरण के लिए Azure AD, Okta)", - "oidc_issuer_url": "जारीकर्ता URL", - "oidc_issuer_url_hint": "OpenID कनेक्ट जारीकर्ता URL (खोज स्वचालित होगी)", - "oidc_client_id": "ग्राहक आईडी", - "oidc_client_secret": "ग्राहक रहस्य", - "oidc_redirect_url": "URL को पुनर्निर्देशित करें (कॉलबैक)", - "oidc_redirect_url_hint": "आपके आईडीपी में जो कॉन्फ़िगर किया गया है उससे बिल्कुल मेल खाना चाहिए। आमतौर पर: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "कार्यक्षेत्र", - "oidc_use_pkce": "PKCE का उपयोग करें (अनुशंसित)", - "oidc_auto_discovery": "स्वत: खोज", - "oidc_allow_signup": "उपयोगकर्ताओं को स्वतः बनाएँ", - "oidc_manual_endpoints": "मैनुअल समापन बिंदु यूआरएल", - "oidc_authorization_url": "प्राधिकरण समापन बिंदु", - "oidc_token_url": "टोकन समापनबिंदु", - "oidc_userinfo_url": "उपयोगकर्ता जानकारी समापन बिंदु", - "oidc_claim_mapping": "दावा मानचित्रण", - "oidc_claim_username": "उपयोक्तानाम दावा", - "oidc_claim_email": "ईमेल दावा", - "oidc_claim_name": "प्रदर्शन नाम का दावा", - "oidc_claim_groups": "समूहों का दावा", - "oidc_role_mapping": "भूमिका मानचित्रण", - "oidc_default_role": "डिफ़ॉल्ट भूमिका", - "oidc_group_role_map": "समूह → भूमिका मानचित्रण", - "oidc_group_role_map_hint": "प्रति पंक्ति एक मैपिंग: समूह_नाम=भूमिका (उदा. व्यवस्थापक=व्यवस्थापक, ऑपरेटर=ऑपरेटर)", - "oidc_test_discovery": "परीक्षण खोज", - "oidc_testing": "परीक्षण...", - "oidc_test_success": "खोज सफल! समापन बिंदु हल हो गए।", - "oidc_test_failed": "खोज विफल रही", - "oidc_issuer_required": "जारीकर्ता URL को खोज का परीक्षण करना आवश्यक है", - "oidc_save": "OIDC कॉन्फ़िगरेशन सहेजें", - "oidc_saved": "OIDC कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया", - "tab_advanced": "उन्नत", - "connection_mode_title": "कनेक्शन रणनीति", - "connection_mode_desc": "नियंत्रित करें कि RustDesk डेस्कटॉप क्लाइंट कैसे कनेक्ट हों: जब संभव हो सीधे P2P (होल पंच), या हमेशा रिले के माध्यम से।", - "connection_mode_label": "डिफ़ॉल्ट कनेक्शन मोड", - "connection_mode_p2p_first": "P2P पहले (अनुशंसित) — सीधे कनेक्शन का प्रयास करें, विफल होने पर रिले पर वापस जाएं", - "connection_mode_relay_only": "केवल रिले — सभी सत्र रिले सर्वर का उपयोग करते हैं", - "connection_mode_advanced": "उन्नत विकल्प", - "connection_mode_fallback_ms": "P2P फ़ॉलबैक टाइमआउट (मिलीसेकंड)", - "connection_mode_same_nat_relay": "जब दोनों पीयर एक ही सार्वजनिक IP साझा करें तो रिले बाध्य करें (NAT हेयरपिन)", - "connection_mode_network_hint": "P2P के लिए क्लाइंट के बीच UDP पोर्ट 21116 पहुँचनीय होना आवश्यक है। सर्वर पर Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115 खुले होने चाहिए। वेब ब्राउज़र क्लाइंट हमेशा रिले का उपयोग करते हैं।", - "connection_mode_save": "सहेजें", - "connection_mode_save_restart": "सहेजें और सर्वर पुनः प्रारंभ करें", - "connection_mode_saved": "कनेक्शन मोड सहेजा गया", - "connection_mode_restart_started": "सर्वर पुनः प्रारंभ आरंभ हुआ", - "connection_mode_restart_failed": "सर्वर पुनः प्रारंभ विफल", - "connection_mode_not_configurable": "इस डिप्लॉयमेंट पर कनेक्शन मोड नहीं बदला जा सकता (कोई systemd यूनिट या docker-compose नहीं मिला)", - "connection_mode_compose_error": "docker-compose.yml में server environment अनुभाग नहीं मिला", - "connection_mode_source_saved": "में सहेजा गया", - "connection_mode_source_defaults": "सर्वर डिफ़ॉल्ट का उपयोग (पैनल से लिखने योग्य नहीं)", - "connection_mode_runtime": "सक्रिय सर्वर", - "advanced_title": "कॉन्फ़िगरेशन फ़ाइलें", - "advanced_desc": "सर्वर कॉन्फ़िगरेशन फ़ाइलों को सीधे संपादित करें। परिवर्तनों के लिए सेवाओं को पुनः प्रारंभ करना पड़ सकता है। प्रत्येक सहेजने से पहले बैकअप प्रतिलिपि बनाई जाती है।", - "advanced_warning": "इन फ़ाइलों में गोपनीय जानकारी (API कुंजियाँ, डेटाबेस पासवर्ड, सत्र रहस्य) शामिल हैं। केवल तभी संपादित करें जब आप प्रभाव समझते हों। गलत सिंटैक्स सर्वर को प्रारंभ होने से रोक सकता है।", - "advanced_files_label": "फ़ाइलें", - "advanced_select_file": "सामग्री देखने या संपादित करने के लिए सूची से फ़ाइल चुनें।", - "advanced_reload": "पुनः लोड करें", - "advanced_save": "फ़ाइल सहेजें", - "advanced_apply_restart": "लागू करें (सेवा पुनः प्रारंभ)", - "advanced_saved": "कॉन्फ़िगरेशन फ़ाइल सहेजी गई", - "advanced_restart_after_save": "कॉन्फ़िगरेशन सहेजी गई। परिवर्तन लागू करने के लिए अभी प्रभावित सेवा पुनः प्रारंभ करें?", - "advanced_restart_confirm": "संबंधित BetterDesk सेवाएं पुनः प्रारंभ करें? सक्रिय कनेक्शन संक्षिप्त रूप से बाधित हो सकते हैं।", - "advanced_restart_console_confirm": "वेब कंसोल सेवा पुनः प्रारंभ करें? ब्राउज़र सत्र संक्षिप्त रूप से डिस्कनेक्ट होगा और कंसोल वापस आने पर पेज पुनः लोड होगा।", - "advanced_restart_started": "सेवा पुनः प्रारंभ आरंभ हुआ", - "advanced_restart_done": "कंसोल पुनः प्रारंभ हुआ — पेज पुनः लोड हो रहा है…", - "advanced_restart_polling": "कंसोल के ऑनलाइन वापस आने की प्रतीक्षा…", - "advanced_restart_timeout": "पुनः प्रारंभ भेजा गया लेकिन कंसोल ने समय पर प्रतिक्रिया नहीं दी। systemd/NSSM लॉग जांचें और मैन्युअल रूप से पुनः लोड करें।", - "advanced_restart_failed": "सेवा पुनः प्रारंभ विफल (अपर्याप्त अधिकार या सेवा स्थापित नहीं)", - "advanced_save_confirm": "इस फ़ाइल में परिवर्तन सहेजें? पिछले संस्करण का बैकअप बनाया जाएगा।", - "advanced_unsaved_confirm": "आपके पास असहेजे परिवर्तन हैं। खारिज करें?", - "advanced_no_files": "इस सिस्टम पर कोई कॉन्फ़िगरेशन फ़ाइल उपलब्ध नहीं है।", - "advanced_readonly": "केवल पठनीय", - "advanced_missing": "गायब", - "advanced_new_file": "नई फ़ाइल (सहेजने तक नहीं बनाई जाएगी)", - "advanced_new_file_hint": "नई फ़ाइल — सामग्री जोड़ें और सहेजें", - "advanced_backup_created": "बैकअप बनाया गया", - "advanced_restart_console": ".env परिवर्तन लागू करने के लिए वेब कंसोल सेवा पुनः प्रारंभ करें (जैसे systemctl restart betterdesk-console)।", - "advanced_restart_goserver": "ब्लॉकलिस्ट परिवर्तन लोड करने के लिए BetterDesk Go सर्वर पुनः प्रारंभ करें।", - "advanced_restart_systemd": "systemd यूनिट संपादित करने के बाद, चलाएं: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "परिवर्तन लागू करने के लिए प्रभावित सेवा पुनः प्रारंभ करें।", - "advanced_error_unknown": "अज्ञात कॉन्फ़िगरेशन फ़ाइल", - "advanced_error_not_found": "फ़ाइल मौजूद नहीं है", - "advanced_error_not_file": "पथ एक सामान्य फ़ाइल नहीं है", - "advanced_error_too_large": "फ़ाइल अधिकतम संपादन योग्य आकार (512 KB) से अधिक है", - "advanced_error_binary": "बाइनरी फ़ाइलें पैनल में संपादित नहीं की जा सकतीं", - "advanced_error_invalid": "अमान्य फ़ाइल सामग्री", - "advanced_error_not_writable": "कंसोल प्रक्रिया इस फ़ाइल में लिख नहीं सकती", - "advanced_file_console-env": "कंसोल वातावरण (.env)", - "advanced_file_console-env-local": "कंसोल ओवरराइड (.env.local)", - "advanced_file_go-blocklist": "Go सर्वर ब्लॉकलिस्ट (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (सेवा इकाई)", - "advanced_file_systemd-server": "systemd: betterdesk-server (सेवा इकाई)", - "advanced_file_console-session-secret": "कंसोल सत्र रहस्य (.session_secret)", - "advanced_file_go-audit-log": "Go सर्वर ऑडिट लॉग (audit.jsonl)", - "advanced_file_build-env": "एजेंट बिल्ड वातावरण (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (सुपरवाइज़र कॉन्फ़िग)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (ऑर्केस्ट्रेशन)", - "advanced_restart_none": "इस फ़ाइल के लिए सेवा पुनः प्रारंभ की आवश्यकता नहीं है।", - "enrollment_title": "डिवाइस नामांकन (RustDesk)", - "enrollment_desc": "नियंत्रित करें कि नए RustDesk क्लाइंट कैसे पंजीकृत हों और ऑपरेटर नामांकन अनुरोध पेज पर उन्हें कैसे स्वीकृत करें।", - "enrollment_require_approval": "ऑपरेटर स्वीकृति आवश्यक (प्रबंधित मोड)", - "enrollment_require_approval_hint": "सक्षम होने पर, अज्ञात क्लाइंट तब तक कतार में रहते हैं जब तक ऑपरेटर उन्हें \"नामांकन अनुरोध\" में स्वीकृत नहीं करते।", - "enrollment_rich_approve": "पूर्ण स्वीकृति फ़ॉर्म (नाम, फ़ोल्डर, समूह, टैग)", - "enrollment_rich_approve_hint": "नामांकन या LAN पंजीकरण अनुरोध स्वीकृत करते समय विस्तृत संवाद दिखाता है।", - "enrollment_tag_picker": "मौजूदा डिवाइस टैग से टैग चुनें", - "enrollment_tag_picker_hint": "ऑपरेटरों को केवल टाइप करने की बजाय डिवाइस पेज पर उपयोग की गई टैग सूची से चुनने देता है।", - "enrollment_open_requests": "नामांकन अनुरोध खोलें", - "enrollment_pending_count": "{count} लंबित नामांकन अनुरोध" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "लॉगिन विफल", - "action_logout": "Logout", - "action_password_change": "पासवर्ड बदला गया", - "action_2fa_enable": "2एफए सक्षम", - "action_2fa_disable": "2FA अक्षम", - "action_user_create": "उपयोगकर्ता बनाया गया", - "action_user_update": "उपयोगकर्ता अपडेट किया गया", - "action_user_delete": "उपयोगकर्ता हटा दिया गया", - "action_settings_update": "सेटिंग्स अपडेट की गईं", - "action_device_ban": "डिवाइस प्रतिबंधित", - "action_device_unban": "डिवाइस अप्रतिबंधित", - "action_device_delete": "डिवाइस हटा दिया गया" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "कॉन्फ़िगरेशन विकल्प", - "server_address": "सर्वर पता", - "server_address_hint": "आपके सर्वर का डोमेन या आईपी पता", - "custom_port": "Custom Port", - "port_hint": "डिफ़ॉल्ट के लिए खाली छोड़ें (21116)", - "relay_server": "रिले सर्वर", - "relay_placeholder": "खाली होने पर आईडी सर्वर के समान", - "relay_hint": "वैकल्पिक: अलग रिले सर्वर पता", - "include_key": "कॉन्फ़िगरेशन में सार्वजनिक कुंजी शामिल करें", - "generate": "कॉन्फ़िगरेशन जनरेट करें", - "output": "कॉन्फ़िगरेशन आउटपुट", - "usage_title": "कनेक्शन विवरण", - "generated": "कॉन्फ़िगरेशन उत्पन्न हुआ", - "server_required": "सर्वर पता आवश्यक है", - "nothing_to_copy": "पहले एक कॉन्फ़िगरेशन जनरेट करें", - "bundles_title": "एजेंट बंडल", - "new_bundle": "नया बंडल", - "editor_title": "बंडल संपादक", - "empty_state": "बाईं ओर एक बंडल चुनें या शुरू करने के लिए एक नया बंडल बनाएं।", - "loading": "लोड हो रहा है...", - "no_bundles": "अभी तक कोई बंडल नहीं. अपना पहला बनाएं.", - "bundle_name": "बंडल का नाम", - "bundle_name_hint": "केवल आंतरिक लेबल - अंतिम उपयोगकर्ताओं को नहीं दिखाया गया।", - "short_link": "लघु डाउनलोड लिंक", - "short_link_hint": "सार्वजनिक URL (/d/…) में उपयोग होता है। केवल छोटे अक्षर, संख्याएँ और डैश (2–32 वर्ण)। बंडल नाम से स्वतः भरा जाता है — साझा करना आसान बनाने के लिए छोटा करें (जैसे acme)।", - "branding_section": "ब्रांडिंग", - "company_name": "कंपनी/ब्रांड नाम", - "short_text": "संक्षिप्त वर्णन", - "contact_email": "ई - मेल से संपर्क करे", - "contact_phone": "संपर्क फ़ोन", - "contact_url": "वेबसाइट से संपर्क करें", - "logo": "प्रतीक चिन्ह", - "logo_hint": "पीएनजी, जेपीईजी, एसवीजी या वेबपी। अधिकतम 256 केबी.", - "logo_clear": "लोगो हटाएँ", - "primary_color": "प्राथमिक रंग", - "accent_color": "हेडर का रंग", - "default_lang": "डिफ़ॉल्ट भाषा", - "allow_unattended": "अप्राप्य पहुंच की अनुमति दें", - "allow_unattended_hint": "सक्षम होने पर, एजेंट ऑपरेटर पहुंच के लिए एक स्थायी पासवर्ड दिखाता है।", - "save": "बंडल सहेजें", - "revoke": "रद्द करना", - "unrevoke": "पुन: सक्षम", - "revoked": "निरस्त किया गया", - "preview_title": "लाइव पूर्वावलोकन", - "preview_hint": "अंतिम-उपयोगकर्ता एजेंट विंडो का अनुमानित स्वरूप।", - "preview_default_name": "BetterDesk समर्थन", - "preview_status_ready": "तैयार", - "preview_id": "आपका आईडी", - "preview_password": "पासवर्ड", - "preview_chat": "समर्थन के साथ चैट करें", - "preview_settings": "सेटिंग्स (केवल व्यवस्थापक)", - "preview_quit": "छोड़ें (केवल व्यवस्थापक)", - "download_link_title": "लिंक को डाउनलोड करें", - "download_link_hint": "इस लिंक को अंतिम उपयोगकर्ताओं के साथ साझा करें. उन्हें एक ब्रांडेड डाउनलोड पेज दिखाई देगा। छोटा लिंक बदलने के बाद भी पुराने hex लिंक काम करते रहेंगे।", - "open_portal": "खुला", - "created": "बंडल बनाया गया", - "saved": "बंडल सहेजा गया", - "deleted": "बंडल हटा दिया गया", - "revoked_ok": "बंडल निरस्त कर दिया गया", - "unrevoked_ok": "बंडल पुनः सक्षम किया गया", - "link_copied": "लिंक को क्लिपबोर्ड पर कॉपी किया गया", - "copy_failed": "स्वचालित रूप से कॉपी नहीं किया जा सका - कृपया मैन्युअल रूप से कॉपी करें", - "unsaved_confirm": "सहेजे न गए परिवर्तन त्यागें?", - "confirm_revoke": "इस बंडल को निरस्त करें? डाउनलोड लिंक काम करना बंद कर देगा.", - "confirm_unrevoke": "इस बंडल को पुनः सक्षम करें?", - "confirm_delete": "इस बंडल को स्थायी रूप से हटाएं? इसे असंपादित नहीं किया जा सकता है।", - "errors": { - "validation_failed": "प्रमाणीकरण विफल रहा", - "name_required": "बंडल नाम आवश्यक है", - "company_name_required": "कंपनी का नाम आवश्यक है", - "logo_invalid": "लोगो एक वैध छवि फ़ाइल होनी चाहिए", - "logo_too_large": "लोगो 256 KB या उससे छोटा होना चाहिए", - "logo_read_failed": "लोगो फ़ाइल पढ़ने में विफल", - "primary_color_invalid": "प्राथमिक रंग एक हेक्स मान होना चाहिए (उदा. #2563eb)", - "accent_color_invalid": "हेडर का रंग हेक्स मान होना चाहिए (जैसे #1e293b)", - "contact_url_invalid": "संपर्क वेबसाइट वैध URL होनी चाहिए", - "server_host_required": "सार्वजनिक सर्वर पता आवश्यक है", - "server_host_invalid": "वैध डोमेन नाम या IPv4 पता दर्ज करें", - "token_failed": "नामांकन टोकन नहीं बन सका — सर्वर कनेक्टिविटी जांचें", - "rebuild_revoked": "निरस्त बंडल पुनर्निर्माण नहीं हो सकता — पहले पुनः सक्षम करें", - "slug_invalid": "लघु लिंक में केवल छोटे अक्षर, संख्याएँ और डैश हो सकते हैं", - "slug_too_short": "लघु लिंक कम से कम 2 वर्ण का होना चाहिए", - "slug_too_long": "लघु लिंक अधिकतम 32 वर्ण का हो सकता है", - "slug_taken": "यह लघु लिंक पहले से किसी अन्य बंडल द्वारा उपयोग में है" - }, - "legacy_title": "क्लाइंट कॉन्फ़िगरेशन जेनरेटर", - "connection_section": "सर्वर कनेक्शन", - "server_host": "सार्वजनिक सर्वर पता", - "server_host_placeholder": "support.example.com या 203.0.113.10", - "server_host_hint": "डोमेन नाम या सार्वजनिक IP जहाँ अंत उपयोगकर्ता आपके BetterDesk सर्वर तक पहुँचते हैं। पोर्ट कंसोल कॉन्फ़िगरेशन से लिया जाता है।", - "use_https": "HTTPS / WSS उपयोग करें (अनुशंसित)", - "enrollment_token": "डिवाइस पंजीकरण", - "enrollment_token_pending": "स्वीकृति के बाद प्रति डिवाइस", - "enrollment_token_set": "प्रति डिवाइस — Registrations में स्वीकृत करें", - "enrollment_token_hint": "प्रत्येक इंस्टॉलेशन अपने आप पंजीकृत होती है। Registrations पैनल में नए डिवाइस स्वीकृत करें; सर्वर फिर प्रत्येक कंप्यूटर के लिए अद्वितीय एक्सेस कुंजी जारी करता है।", - "enrollment_per_device": "प्रति डिवाइस — Registrations में स्वीकृत करें", - "background_color": "विंडो पृष्ठभूमि", - "surface_color": "कार्ड पृष्ठभूमि", - "text_color": "पाठ रंग", - "text_muted_color": "म्यूट पाठ रंग", - "status_ready_color": "तैयार संकेतक रंग", - "header_text_color": "हेडर पाठ रंग", - "builds_title": "क्लाइंट बिल्ड", - "builds_hint": "प्रत्येक प्लेटफ़ॉर्म के लिए इस सर्वर पर संकलित इंस्टॉलर। टूलचेन त्रुटियों को ठीक करने या एजेंट स्रोत अपडेट करने के बाद पुनर्निर्माण करें।", - "builds_loading": "बिल्ड स्थिति लोड हो रही है…", - "builds_empty": "अभी तक कोई बिल्ड कतार में नहीं — बंडल सहेजें या सभी पुनर्निर्माण क्लिक करें।", - "rebuild_all": "सभी पुनर्निर्माण", - "rebuilding_all": "पुनर्निर्माण कतारबद्ध किया जा रहा है…", - "rebuild_queued": "सभी प्लेटफ़ॉर्म बिल्ड कतारबद्ध", - "rebuild_confirm": "इस बंडल के सभी प्लेटफ़ॉर्म इंस्टॉलर पुनर्निर्माण करें? मौजूदा तैयार आर्टिफ़ैक्ट प्रतिस्थापित किए जाएंगे।", - "build_status_ready": "तैयार", - "build_status_pending": "कतार में", - "build_status_building": "बिल्ड हो रहा है", - "build_status_failed": "विफल", - "builds_summary": "{{ready}} तैयार · {{pending}} कतार में · {{building}} बिल्ड हो रहा है · {{failed}} विफल", - "build_error_hint": "बिल्ड त्रुटि", - "preview_help": "सहायता का अनुरोध" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "आईडी सर्वर", - "relay_server": "रिले सर्वर", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "जाँच हो रही है...", - "label": "Status", - "no_signal": "कोई सिग्नल नहीं" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "डेस्कटॉप क्लाइंट के माध्यम से कनेक्ट करें", - "remote_viewer": "दूरस्थ दर्शक", - "web_remote": "वेब रिमोट", - "details": "Details", - "edit": "संपादन करना", - "delete": "मिटाना", - "ban": "Ban", - "unban": "Unban", - "save": "बचाना", - "cancel": "रद्द करना", - "confirm": "पुष्टि करना", - "close": "बंद करना", - "clear": "Clear", - "ok": "OK", - "saved": "सफलतापूर्वक बचाया", - "back": "पीछे", - "create": "बनाएं", - "dismiss": "Dismiss", - "view_all": "सभी को देखें", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s पहले", - "minutes_ago": "{count}m पहले", - "hours_ago": "{count}h पहले", - "days_ago": "{count}d पहले", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "प्रयोक्ता प्रबंधन", - "subtitle": "कंसोल उपयोगकर्ता और अनुमतियाँ प्रबंधित करें", - "add_user": "Add User", - "edit_user": "यूजर को संपादित करो", - "username": "उपयोगकर्ता नाम", - "username_placeholder": "उपयोक्तानाम दर्ज करें", - "username_hint": "केवल 3-32 अक्षर, अक्षर, संख्याएँ और अंडरस्कोर", - "password": "पासवर्ड", - "password_placeholder": "पास वर्ड दर्ज करें", - "password_hint": "मिश्रित केस, संख्याओं और प्रतीकों के साथ न्यूनतम 8 अक्षर", - "password_leave_empty": "चालू रखने के लिए खाली छोड़ें", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "बनाया था", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "उपयोगकर्ता बनाएं", - "edit": "संपादन करना", - "reset_password": "पासवर्ड रीसेट", - "new_password": "नया पासवर्ड", - "delete_title": "उपयोगकर्ता हटाएँ", - "delete_confirm": "क्या आप वाकई उपयोगकर्ता {username} को हटाना चाहते हैं?", - "delete_success": "उपयोगकर्ता सफलतापूर्वक हटा दिया गया", - "user_created": "उपयोगकर्ता सफलतापूर्वक बनाया गया", - "user_updated": "उपयोगकर्ता सफलतापूर्वक अपडेट किया गया", - "password_reset_success": "पासवर्ड सफलतापूर्वक रीसेट हो गया", - "empty_title": "कोई उपयोगकर्ता नहीं मिला", - "empty_text": "कंसोल एक्सेस प्रबंधित करने के लिए उपयोगकर्ता जोड़ें", - "fill_required": "कृपया सभी अपेक्षित फ़ील्ड को भरें", - "invalid_username": "उपयोगकर्ता नाम केवल 3-32 अक्षर, अक्षर, संख्या और अंडरस्कोर होना चाहिए", - "username_exists": "उपयोगकर्ता का नाम पहले से मौजूद है", - "weak_password": "पासवर्ड बहुत कमजोर है", - "password_too_short": "पासवर्ड कम से कम 8 वर्णों का होना चाहिए", - "invalid_role": "अमान्य भूमिका", - "cannot_demote_self": "आप स्वयं को पदावनत नहीं कर सकते", - "cannot_delete_self": "आप अपना स्वयं का खाता नहीं हटा सकते", - "last_admin": "अंतिम व्यवस्थापक को हटाया नहीं जा सकता", - "admin_only": "यह सुविधा केवल व्यवस्थापकों के लिए उपलब्ध है", - "password_required": "पासवर्ड आवश्यक है", - "not_found": "उपयोगकर्ता नहीं मिला", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "सुरक्षा सर्वोत्तम अभ्यास", - "tip_strong_passwords": "प्रत्येक उपयोगकर्ता के लिए मजबूत, अद्वितीय पासवर्ड का उपयोग करें", - "tip_unique_accounts": "प्रत्येक व्यक्ति के लिए अलग-अलग खाते बनाएं", - "tip_viewer_role": "उन उपयोगकर्ताओं के लिए दर्शक भूमिका का उपयोग करें जिन्हें केवल पढ़ने की पहुंच की आवश्यकता है", - "tip_operator_role": "उन उपयोगकर्ताओं के लिए ऑपरेटर भूमिका का उपयोग करें जिन्हें डिवाइस प्रबंधित करने की आवश्यकता है लेकिन उपयोगकर्ताओं की नहीं", - "tip_audit_logs": "संदिग्ध गतिविधि के लिए नियमित रूप से ऑडिट लॉग की समीक्षा करें", - "role_pro": "प्रो (केवल API)", - "role_super_admin": "Super Admin", - "role_server_admin": "सर्वर व्यवस्थापक", - "role_global_admin": "वैश्विक प्रशासन", - "organizations": "संगठनों", - "user_organizations": "{username} के लिए संगठन", - "no_organizations": "उपयोगकर्ता को किसी संगठन को नहीं सौंपा गया है", - "org_removed": "संगठन का असाइनमेंट हटा दिया गया", - "server_role_label": "सर्वर भूमिका", - "server_role_hint": "यह निर्धारित करता है कि उपयोगकर्ता पूरे कंसोल (पैनल एक्सेस, सर्वर कॉन्फ़िगरेशन, ऑडिट इत्यादि) में क्या कर सकता है।", - "org_membership_section": "संगठन की सदस्यता", - "org_membership_hint": "एक उपयोगकर्ता अनेक संगठनों से संबंधित हो सकता है. संगठन की भूमिका केवल उस संगठन के अंदर अनुमतियों को नियंत्रित करती है और उपरोक्त सर्वर भूमिका से स्वतंत्र है।", - "column_organizations": "संगठनों", - "no_orgs_short": "—", - "org_count_one": "{count} संगठन", - "org_count_many": "{count} संगठन", - "all_orgs_assigned": "उपयोगकर्ता पहले से ही प्रत्येक संगठन का सदस्य है.", - "user_groups": "यूसर समूह", - "user_groups_hint": "उपयोगकर्ता समूहों का उपयोग चयनित डिवाइस समूहों तक पहुंच प्रदान करने के लिए किया जा सकता है।", - "loading_user_groups": "उपयोगकर्ता समूह लोड हो रहे हैं...", - "no_user_groups": "कोई उपयोगकर्ता समूह उपलब्ध नहीं है", - "create_user_group": "समूह बनाना", - "edit_user_group": "उपयोगकर्ता समूह संपादित करें", - "delete_user_group": "उपयोगकर्ता समूह हटाएँ", - "delete_user_group_confirm": "उपयोगकर्ता समूह {name} हटाएं? सदस्य इस समूह के माध्यम से दी गई पहुंच खो देंगे।", - "user_group_created": "उपयोगकर्ता समूह बनाया गया", - "user_group_updated": "उपयोगकर्ता समूह अद्यतन किया गया", - "user_group_deleted": "उपयोगकर्ता समूह हटा दिया गया", - "user_group_not_found": "उपयोगकर्ता समूह नहीं मिला", - "group_name": "समूह नाम", - "group_name_placeholder": "ऑपरेटर्स", - "group_note": "Note", - "group_note_placeholder": "वैकल्पिक नोट", - "group_name_required": "समूह का नाम आवश्यक है", - "group_members_count": "{count} सदस्य", - "provider": "प्रदाता", - "provider_local": "स्थानीय", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "पहचान प्रदाता द्वारा प्रबंधित", - "provider_managed_hint": "यह खाता बाहरी पहचान प्रदाता (LDAP/AD या SSO) द्वारा प्रबंधित है। पासवर्ड और भूमिका प्रदाता द्वारा नियंत्रित हैं और यहाँ नहीं बदले जा सकते।" - }, - "folders": { - "title": "Folders", - "create": "फ़ोल्डर बनाएँ", - "edit": "फ़ोल्डर संपादित करें", - "delete": "फ़ोल्डर हटाएँ", - "name": "Folder Name", - "name_placeholder": "फ़ोल्डर का नाम दर्ज करें", - "name_required": "फ़ोल्डर का नाम आवश्यक है", - "name_too_long": "फ़ोल्डर का नाम बहुत लंबा है (अधिकतम 50 अक्षर)", - "color": "Color", - "icon": "Icon", - "not_found": "फ़ोल्डर नहीं मिला", - "delete_confirm": "क्या आप वाकई इस फ़ोल्डर को हटाना चाहते हैं? डिवाइस अनअसाइन किए जाएंगे.", - "delete_success": "फ़ोल्डर सफलतापूर्वक हटा दिया गया", - "created": "फ़ोल्डर सफलतापूर्वक बनाया गया", - "updated": "फ़ोल्डर सफलतापूर्वक अपडेट किया गया", - "no_devices_selected": "कोई उपकरण चयनित नहीं", - "devices_moved": "डिवाइस सफलतापूर्वक स्थानांतरित हो गए", - "device_assigned": "डिवाइस को फ़ोल्डर में असाइन किया गया", - "unassigned": "Unassigned", - "all_devices": "सभी उपकरणों", - "drag_hint": "उपकरणों को व्यवस्थित करने के लिए उन्हें फ़ोल्डरों में खींचें", - "move_to": "करने के लिए कदम", - "toggle_sidebar": "साइडबार टॉगल करें" - }, + "no_groups": "अभी तक कोई समूह नहीं", + "manual_groups": "मैनुअल समूह", + "dynamic_memberships": "गतिशील सदस्यताएँ", + "group_allowed_user_groups": "अनुमत उपयोगकर्ता समूह", + "group_allowed_user_groups_hint": "चयनित उपयोगकर्ता समूहों के उपयोगकर्ता इस डिवाइस समूह तक पहुंच सकते हैं।", + "no_user_groups": "कोई उपयोगकर्ता समूह नहीं", + "edit_group": "समूह संपादित करें", + "delete_group": "समूह हटाएँ", + "delete_group_confirm": "डिवाइस समूह {name} हटाएं?", + "group_deleted": "डिवाइस समूह हटा दिया गया", + "folder_group_readonly": "फ़ोल्डर-समर्थित समूहों को फ़ोल्डरों से प्रबंधित किया जाता है।", + "manage_user_groups": "उपयोगकर्ता समूह प्रबंधित करें", + "restore_failed": "डिवाइस पुनर्स्थापित करने में विफल", + "no_signal_tooltip": "क्लाइंट ने हाल ही में API से संपर्क किया, लेकिन सिग्नल सर्वर (UDP :21116) पर पंजीकृत नहीं है। सर्वर माइग्रेशन के बाद क्लाइंट को पुनः प्रारंभ करें।", + "per_page": "प्रति पृष्ठ" + }, + "keys": { + "title": "सर्वर कुंजी", + "subtitle": "RustDesk क्लाइंट के लिए सार्वजनिक कुंजी और कॉन्फ़िगरेशन", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "सर्वर जानकारी", + "download": "कुंजी डाउनलोड करें", + "show_qr": "Show QR", + "qr_hint": "इस QR कोड को RustDesk मोबाइल ऐप से स्कैन करें", + "no_key": "कोई सार्वजनिक कुंजी नहीं मिली", + "no_key_to_copy": "कॉपी करने की कोई कुंजी नहीं", + "no_qr": "क्यूआर कोड उपलब्ध नहीं है", + "download_success": "कुंजी फ़ाइल डाउनलोड की गई", + "not_found": "कुंजी प्राप्त नहीं हुई", + "api_not_found": "API कुंजी नहीं मिली" + }, + "settings": { + "title": "सेटिंग्स", + "subtitle": "कंसोल कॉन्फ़िगरेशन और खाता सेटिंग्स", + "tab_general": "General", + "tab_server": "सर्वर", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "भाषा", + "change_password": "पासवर्ड बदलें", + "password_desc": "अपना खाता पासवर्ड अपडेट करें", + "current_password": "वर्तमान पासवर्ड", + "new_password": "नया पासवर्ड", + "confirm_password": "पासवर्ड की पुष्टि कीजिये", + "save_password": "पासवर्ड अपडेट करें", + "password_changed": "पासवर्ड सफलतापूर्वक बदला गया", + "fill_all_fields": "कृपया सभी स्थानों को भरें", + "passwords_not_match": "सांकेतिक शब्द मेल नहीं खाते", + "password_requirements": "पासवर्ड आवश्यकताएँ", + "password_requirements_not_met": "पासवर्ड आवश्यकताओं को पूरा नहीं करता है", + "req_length": "कम से कम 8 अक्षर", + "req_uppercase": "कम से कम एक बड़ा अक्षर", + "req_lowercase": "कम से कम एक छोटा अक्षर", + "req_number": "कम से कम एक नंबर", + "server_info": "सर्वर जानकारी", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "हाल की कंसोल गतिविधि", + "no_audit_logs": "कोई ऑडिट लॉग नहीं मिला", + "backend_title": "सर्वर बैकएंड", + "backend_desc": "डिवाइस प्रबंधन और सिग्नल/रिले सेवाओं के लिए उपयोग करने के लिए कौन सा सर्वर बैकएंड चुनें।", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "मानक RustDesk सिग्नल और रिले सर्वर (hbbs + hbbr)। सीमित समापन बिंदुओं के साथ बुनियादी HTTP API।", + "backend_betterdesk_desc": "पूर्ण REST API, JWT प्रमाणीकरण, ब्लॉकलिस्ट, टैग, वास्तविक समय WebSocket ईवेंट और ऑडिट लॉगिंग के साथ उन्नत गो-आधारित सर्वर।", + "backend_feature_signal": "सिग्नल सर्वर (आईडी पंजीकरण)", + "backend_feature_relay": "रिले सर्वर (कनेक्शन रिले)", + "backend_feature_basic_api": "बेसिक रेस्ट API", + "backend_feature_full_api": "पूर्ण विश्राम API (34+ समापन बिंदु)", + "backend_feature_jwt": "JWT प्रमाणीकरण और TOTP 2FA", + "backend_feature_blocklist": "आईपी/आईडी ब्लॉकलिस्ट प्रबंधन", + "backend_feature_tags": "डिवाइस टैग और ग्रुपिंग", + "backend_feature_audit": "ऑडिट इवेंट लॉगिंग", + "backend_feature_websocket": "वास्तविक समय WebSocket घटनाएँ", + "backend_connection": "संबंध", + "backend_api_url": "API URL", + "backend_test": "परीक्षण कनेक्शन", + "backend_testing": "परीक्षण...", + "backend_save": "बैकएंड लागू करें", + "backend_saved": "सर्वर बैकएंड सफलतापूर्वक बदला गया. डिवाइस डेटा अब नए बैकएंड द्वारा प्रबंधित किया जाएगा।", + "backend_save_failed": "सर्वर बैकएंड स्विच करने में विफल", + "backend_test_success": "कनेक्शन सफल! सर्वर पहुंच योग्य है.", + "backend_test_failed": "कनेक्शन विफल। सर्वर पहुंच योग्य नहीं है.", + "backend_confirm_switch": "क्या आप वाकई सर्वर बैकएंड स्विच करना चाहते हैं? इससे डिवाइसों को प्रबंधित करने का तरीका बदल जाएगा.", + "backend_unreachable": "स्विच नहीं किया जा सकता: लक्ष्य सर्वर पहुंच योग्य नहीं है. सबसे पहले सर्वर प्रारंभ करें.", + "invalid_backend": "अमान्य बैकएंड चयन. 'रस्टडेस्क' या 'बेटरडेस्क' चुनें।", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "दो-कारक प्रमाणीकरण", + "totp_desc": "TOTP प्रमाणक ऐप्स (Google प्रमाणक, Microsoft प्रमाणक, ऑथी, आदि) के साथ सुरक्षा की एक अतिरिक्त परत जोड़ें।", + "totp_enabled": "2एफए सक्षम", + "totp_enabled_desc": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है।", + "totp_disabled": "2FA सक्षम नहीं है", + "totp_disabled_desc": "अतिरिक्त खाता सुरक्षा के लिए दो-कारक प्रमाणीकरण सक्षम करें।", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "अपने फ़ोन पर एक प्रमाणक ऐप इंस्टॉल करें", + "totp_step2": "नीचे दिए गए QR कोड को स्कैन करें", + "totp_step3": "सत्यापित करने के लिए 6 अंकों का कोड दर्ज करें", + "totp_manual_key": "Manual key", + "totp_enter_code": "सत्यापन कोड दर्ज करें", + "totp_verify_enable": "सत्यापित करें और सक्षम करें", + "totp_enabled_success": "दो-कारक प्रमाणीकरण सक्षम!", + "totp_recovery_warning": "इन पुनर्प्राप्ति कोड को सुरक्षित स्थान पर सहेजें। प्रत्येक कोड का उपयोग केवल एक बार किया जा सकता है। यदि आप अपने प्रमाणक ऐप तक पहुंच खो देते हैं, तो आप लॉग इन करने के लिए इन कोड का उपयोग कर सकते हैं।", + "totp_done": "Done", + "totp_disable_warning": "दो-कारक प्रमाणीकरण अक्षम करने से आपका खाता कम सुरक्षित हो जाएगा। पुष्टि करने के लिए अपना पासवर्ड दर्ज करें।", + "totp_disabled_success": "दो-कारक प्रमाणीकरण अक्षम कर दिया गया है.", + "tutorials_title": "ट्यूटोरियल और मार्गदर्शिकाएँ", + "tutorials_desc": "पूरे कंसोल में दिखाए गए निर्देशित पर्यटन और सहायता ओवरले को नियंत्रित करें", + "tutorials_enabled": "ट्यूटोरियल सक्षम करें", + "tutorials_enabled_hint": "अक्षम होने पर, ट्यूटोरियल स्वचालित रूप से प्रारंभ नहीं होंगे और सहायता बटन छिपा रहेगा", + "tutorials_reset_hint": "सभी ट्यूटोरियल को अदृश्य के रूप में चिह्नित करें ताकि उन्हें फिर से दिखाया जा सके", + "tutorials_enabled_toast": "ट्यूटोरियल सक्षम", + "tutorials_disabled_toast": "ट्यूटोरियल अक्षम किए गए", + "tutorials_reset_toast": "सभी ट्यूटोरियल रीसेट कर दिए गए हैं", + "tab_auth": "प्रमाणीकरण", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "LDAP या Active Directory के माध्यम से बाहरी प्रमाणीकरण कॉन्फ़िगर करें। उपयोगकर्ता अपने डोमेन क्रेडेंशियल के साथ साइन इन करने में सक्षम होंगे।", + "ldap_enabled": "LDAP प्रमाणीकरण सक्षम करें", + "ldap_enabled_hint": "सक्षम होने पर, उपयोगकर्ता LDAP/AD क्रेडेंशियल के साथ साइन इन कर सकते हैं। स्थानीय खाते अभी भी फ़ॉलबैक के रूप में कार्य करते हैं.", + "ldap_connection": "सर्वर कनेक्शन", + "ldap_host": "मेज़बान", + "ldap_port": "पत्तन", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "TLS सत्यापित छोड़ें", + "ldap_timeout": "कनेक्शन टाइमआउट", + "ldap_timeout_hint": "LDAP सर्वर प्रतिक्रिया के लिए प्रतीक्षा करने के लिए सेकंड", + "ldap_bind_mode": "बाइंड मोड", + "ldap_direct_bind": "प्रत्यक्ष बाइंड", + "ldap_direct_bind_hint": "खोजने के लिए सेवा खाते का उपयोग करने के बजाय सीधे डीएन टेम्पलेट से जुड़ें।", + "ldap_bind_dn": "बाइंड डीएन (सेवा खाता)", + "ldap_bind_dn_hint": "उपयोगकर्ताओं को खोजने के लिए उपयोग किए जाने वाले रीड-ओनली सेवा खाते का विशिष्ट नाम।", + "ldap_bind_password": "पासवर्ड बाइंड करें", + "ldap_base_dn": "बेस डी.एन", + "ldap_base_dn_hint": "उपयोगकर्ताओं को ढूंढने के लिए खोज आधार, उदा. dc=उदाहरण,dc=com", + "ldap_user_filter": "उपयोगकर्ता फ़िल्टर", + "ldap_user_filter_hint": "उपयोगकर्ताओं को ढूंढने के लिए LDAP फ़िल्टर। प्लेसहोल्डर के रूप में {{username}} का उपयोग करें। डिफ़ॉल्ट: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "डायरेक्ट बाइंड डीएन टेम्पलेट", + "ldap_direct_bind_dn_hint": "डायरेक्ट बाइंड के लिए डीएन टेम्पलेट। प्लेसहोल्डर के रूप में {{username}} का उपयोग करें, उदा. uid={{username}},ou=उपयोगकर्ता,dc=उदाहरण,dc=com", + "ldap_user_attrs": "उपयोगकर्ता विशेषताएँ", + "ldap_attr_id": "उपयोक्तानाम विशेषता", + "ldap_attr_email": "ईमेल विशेषता", + "ldap_attr_name": "प्रदर्शन नाम विशेषता", + "ldap_group_mapping": "समूह → भूमिका मानचित्रण", + "ldap_group_base_dn": "ग्रुप बेस डी.एन", + "ldap_group_base_dn_hint": "मुख्य बेस डीएन का उपयोग करने के लिए इसे खाली छोड़ दें", + "ldap_group_filter": "समूह फ़िल्टर", + "ldap_group_attr_name": "समूह का नाम गुण", + "ldap_default_role": "डिफ़ॉल्ट भूमिका", + "ldap_default_role_hint": "भूमिका उन उपयोगकर्ताओं को सौंपी गई है जिनके LDAP समूह किसी भी मैपिंग से मेल नहीं खाते हैं", + "ldap_role_viewer": "दर्शक", + "ldap_role_operator": "संचालिका", + "ldap_role_admin": "व्यवस्थापक", + "ldap_group_role_map": "समूह → भूमिका मानचित्र", + "ldap_group_role_map_hint": "LDAP समूहों को BetterDesk भूमिकाओं में मैप करें। प्रारूप: GroupDN=भूमिका | द्वारा अलग की गई (पाइप). उदाहरण: CN=एडमिन,DC=उदाहरण,DC=com=एडमिन|CN=ऑप्स,DC=उदाहरण,DC=com=ऑपरेटर", + "ldap_test_connection": "परीक्षण कनेक्शन", + "ldap_testing": "परीक्षण...", + "ldap_test_success": "कनेक्शन सफल! LDAP सर्वर पहुंच योग्य है और बाइंड क्रेडेंशियल मान्य हैं।", + "ldap_test_failed": "कनेक्शन विफल", + "ldap_save": "LDAP कॉन्फ़िगरेशन सहेजें", + "ldap_saved": "LDAP कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "ओपनआईडी कनेक्ट प्रदाता (एज़्योर एडी, ओक्टा, गूगल, कीक्लोक, आदि) के माध्यम से सिंगल साइन-ऑन कॉन्फ़िगर करें।", + "oidc_enabled": "OIDC प्रमाणीकरण सक्षम करें", + "oidc_enabled_hint": "उपयोगकर्ताओं को बाहरी पहचान प्रदाता के साथ साइन इन करने की अनुमति दें", + "oidc_provider": "पहचान प्रदाता", + "oidc_display_name": "बटन प्रदर्शन नाम", + "oidc_display_name_hint": "लॉगिन बटन पर दिखाया गया टेक्स्ट (उदाहरण के लिए Azure AD, Okta)", + "oidc_issuer_url": "जारीकर्ता URL", + "oidc_issuer_url_hint": "OpenID कनेक्ट जारीकर्ता URL (खोज स्वचालित होगी)", + "oidc_client_id": "ग्राहक आईडी", + "oidc_client_secret": "ग्राहक रहस्य", + "oidc_redirect_url": "URL को पुनर्निर्देशित करें (कॉलबैक)", + "oidc_redirect_url_hint": "आपके आईडीपी में जो कॉन्फ़िगर किया गया है उससे बिल्कुल मेल खाना चाहिए। आमतौर पर: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "कार्यक्षेत्र", + "oidc_use_pkce": "PKCE का उपयोग करें (अनुशंसित)", + "oidc_auto_discovery": "स्वत: खोज", + "oidc_allow_signup": "उपयोगकर्ताओं को स्वतः बनाएँ", + "oidc_manual_endpoints": "मैनुअल समापन बिंदु यूआरएल", + "oidc_authorization_url": "प्राधिकरण समापन बिंदु", + "oidc_token_url": "टोकन समापनबिंदु", + "oidc_userinfo_url": "उपयोगकर्ता जानकारी समापन बिंदु", + "oidc_claim_mapping": "दावा मानचित्रण", + "oidc_claim_username": "उपयोक्तानाम दावा", + "oidc_claim_email": "ईमेल दावा", + "oidc_claim_name": "प्रदर्शन नाम का दावा", + "oidc_claim_groups": "समूहों का दावा", + "oidc_role_mapping": "भूमिका मानचित्रण", + "oidc_default_role": "डिफ़ॉल्ट भूमिका", + "oidc_group_role_map": "समूह → भूमिका मानचित्रण", + "oidc_group_role_map_hint": "प्रति पंक्ति एक मैपिंग: समूह_नाम=भूमिका (उदा. व्यवस्थापक=व्यवस्थापक, ऑपरेटर=ऑपरेटर)", + "oidc_test_discovery": "परीक्षण खोज", + "oidc_testing": "परीक्षण...", + "oidc_test_success": "खोज सफल! समापन बिंदु हल हो गए।", + "oidc_test_failed": "खोज विफल रही", + "oidc_issuer_required": "जारीकर्ता URL को खोज का परीक्षण करना आवश्यक है", + "oidc_save": "OIDC कॉन्फ़िगरेशन सहेजें", + "oidc_saved": "OIDC कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया", + "tab_advanced": "उन्नत", + "connection_mode_title": "कनेक्शन रणनीति", + "connection_mode_desc": "नियंत्रित करें कि RustDesk डेस्कटॉप क्लाइंट कैसे कनेक्ट हों: जब संभव हो सीधे P2P (होल पंच), या हमेशा रिले के माध्यम से।", + "connection_mode_label": "डिफ़ॉल्ट कनेक्शन मोड", + "connection_mode_p2p_first": "P2P पहले (अनुशंसित) — सीधे कनेक्शन का प्रयास करें, विफल होने पर रिले पर वापस जाएं", + "connection_mode_relay_only": "केवल रिले — सभी सत्र रिले सर्वर का उपयोग करते हैं", + "connection_mode_advanced": "उन्नत विकल्प", + "connection_mode_fallback_ms": "P2P फ़ॉलबैक टाइमआउट (मिलीसेकंड)", + "connection_mode_same_nat_relay": "जब दोनों पीयर एक ही सार्वजनिक IP साझा करें तो रिले बाध्य करें (NAT हेयरपिन)", + "connection_mode_network_hint": "P2P के लिए क्लाइंट के बीच UDP पोर्ट 21116 पहुँचनीय होना आवश्यक है। सर्वर पर Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115 खुले होने चाहिए। वेब ब्राउज़र क्लाइंट हमेशा रिले का उपयोग करते हैं।", + "connection_mode_save": "सहेजें", + "connection_mode_save_restart": "सहेजें और सर्वर पुनः प्रारंभ करें", + "connection_mode_saved": "कनेक्शन मोड सहेजा गया", + "connection_mode_restart_started": "सर्वर पुनः प्रारंभ आरंभ हुआ", + "connection_mode_restart_failed": "सर्वर पुनः प्रारंभ विफल", + "connection_mode_not_configurable": "इस डिप्लॉयमेंट पर कनेक्शन मोड नहीं बदला जा सकता (कोई systemd यूनिट या docker-compose नहीं मिला)", + "connection_mode_compose_error": "docker-compose.yml में server environment अनुभाग नहीं मिला", + "connection_mode_source_saved": "में सहेजा गया", + "connection_mode_source_defaults": "सर्वर डिफ़ॉल्ट का उपयोग (पैनल से लिखने योग्य नहीं)", + "connection_mode_runtime": "सक्रिय सर्वर", + "advanced_title": "कॉन्फ़िगरेशन फ़ाइलें", + "advanced_desc": "सर्वर कॉन्फ़िगरेशन फ़ाइलों को सीधे संपादित करें। परिवर्तनों के लिए सेवाओं को पुनः प्रारंभ करना पड़ सकता है। प्रत्येक सहेजने से पहले बैकअप प्रतिलिपि बनाई जाती है।", + "advanced_warning": "इन फ़ाइलों में गोपनीय जानकारी (API कुंजियाँ, डेटाबेस पासवर्ड, सत्र रहस्य) शामिल हैं। केवल तभी संपादित करें जब आप प्रभाव समझते हों। गलत सिंटैक्स सर्वर को प्रारंभ होने से रोक सकता है।", + "advanced_files_label": "फ़ाइलें", + "advanced_select_file": "सामग्री देखने या संपादित करने के लिए सूची से फ़ाइल चुनें।", + "advanced_reload": "पुनः लोड करें", + "advanced_save": "फ़ाइल सहेजें", + "advanced_apply_restart": "लागू करें (सेवा पुनः प्रारंभ)", + "advanced_saved": "कॉन्फ़िगरेशन फ़ाइल सहेजी गई", + "advanced_restart_after_save": "कॉन्फ़िगरेशन सहेजी गई। परिवर्तन लागू करने के लिए अभी प्रभावित सेवा पुनः प्रारंभ करें?", + "advanced_restart_confirm": "संबंधित BetterDesk सेवाएं पुनः प्रारंभ करें? सक्रिय कनेक्शन संक्षिप्त रूप से बाधित हो सकते हैं।", + "advanced_restart_console_confirm": "वेब कंसोल सेवा पुनः प्रारंभ करें? ब्राउज़र सत्र संक्षिप्त रूप से डिस्कनेक्ट होगा और कंसोल वापस आने पर पेज पुनः लोड होगा।", + "advanced_restart_started": "सेवा पुनः प्रारंभ आरंभ हुआ", + "advanced_restart_done": "कंसोल पुनः प्रारंभ हुआ — पेज पुनः लोड हो रहा है…", + "advanced_restart_polling": "कंसोल के ऑनलाइन वापस आने की प्रतीक्षा…", + "advanced_restart_timeout": "पुनः प्रारंभ भेजा गया लेकिन कंसोल ने समय पर प्रतिक्रिया नहीं दी। systemd/NSSM लॉग जांचें और मैन्युअल रूप से पुनः लोड करें।", + "advanced_restart_failed": "सेवा पुनः प्रारंभ विफल (अपर्याप्त अधिकार या सेवा स्थापित नहीं)", + "advanced_save_confirm": "इस फ़ाइल में परिवर्तन सहेजें? पिछले संस्करण का बैकअप बनाया जाएगा।", + "advanced_unsaved_confirm": "आपके पास असहेजे परिवर्तन हैं। खारिज करें?", + "advanced_no_files": "इस सिस्टम पर कोई कॉन्फ़िगरेशन फ़ाइल उपलब्ध नहीं है।", + "advanced_readonly": "केवल पठनीय", + "advanced_missing": "गायब", + "advanced_new_file": "नई फ़ाइल (सहेजने तक नहीं बनाई जाएगी)", + "advanced_new_file_hint": "नई फ़ाइल — सामग्री जोड़ें और सहेजें", + "advanced_backup_created": "बैकअप बनाया गया", + "advanced_restart_console": ".env परिवर्तन लागू करने के लिए वेब कंसोल सेवा पुनः प्रारंभ करें (जैसे systemctl restart betterdesk-console)।", + "advanced_restart_goserver": "ब्लॉकलिस्ट परिवर्तन लोड करने के लिए BetterDesk Go सर्वर पुनः प्रारंभ करें।", + "advanced_restart_systemd": "systemd यूनिट संपादित करने के बाद, चलाएं: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "परिवर्तन लागू करने के लिए प्रभावित सेवा पुनः प्रारंभ करें।", + "advanced_error_unknown": "अज्ञात कॉन्फ़िगरेशन फ़ाइल", + "advanced_error_not_found": "फ़ाइल मौजूद नहीं है", + "advanced_error_not_file": "पथ एक सामान्य फ़ाइल नहीं है", + "advanced_error_too_large": "फ़ाइल अधिकतम संपादन योग्य आकार (512 KB) से अधिक है", + "advanced_error_binary": "बाइनरी फ़ाइलें पैनल में संपादित नहीं की जा सकतीं", + "advanced_error_invalid": "अमान्य फ़ाइल सामग्री", + "advanced_error_not_writable": "कंसोल प्रक्रिया इस फ़ाइल में लिख नहीं सकती", + "advanced_file_console-env": "कंसोल वातावरण (.env)", + "advanced_file_console-env-local": "कंसोल ओवरराइड (.env.local)", + "advanced_file_go-blocklist": "Go सर्वर ब्लॉकलिस्ट (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (सेवा इकाई)", + "advanced_file_systemd-server": "systemd: betterdesk-server (सेवा इकाई)", + "advanced_file_console-session-secret": "कंसोल सत्र रहस्य (.session_secret)", + "advanced_file_go-audit-log": "Go सर्वर ऑडिट लॉग (audit.jsonl)", + "advanced_file_build-env": "एजेंट बिल्ड वातावरण (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (सुपरवाइज़र कॉन्फ़िग)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (ऑर्केस्ट्रेशन)", + "advanced_restart_none": "इस फ़ाइल के लिए सेवा पुनः प्रारंभ की आवश्यकता नहीं है।", + "enrollment_title": "डिवाइस नामांकन (RustDesk)", + "enrollment_desc": "नियंत्रित करें कि नए RustDesk क्लाइंट कैसे पंजीकृत हों और ऑपरेटर नामांकन अनुरोध पेज पर उन्हें कैसे स्वीकृत करें।", + "enrollment_require_approval": "ऑपरेटर स्वीकृति आवश्यक (प्रबंधित मोड)", + "enrollment_require_approval_hint": "सक्षम होने पर, अज्ञात क्लाइंट तब तक कतार में रहते हैं जब तक ऑपरेटर उन्हें \"नामांकन अनुरोध\" में स्वीकृत नहीं करते।", + "enrollment_rich_approve": "पूर्ण स्वीकृति फ़ॉर्म (नाम, फ़ोल्डर, समूह, टैग)", + "enrollment_rich_approve_hint": "नामांकन या LAN पंजीकरण अनुरोध स्वीकृत करते समय विस्तृत संवाद दिखाता है।", + "enrollment_tag_picker": "मौजूदा डिवाइस टैग से टैग चुनें", + "enrollment_tag_picker_hint": "ऑपरेटरों को केवल टाइप करने की बजाय डिवाइस पेज पर उपयोग की गई टैग सूची से चुनने देता है।", + "enrollment_open_requests": "नामांकन अनुरोध खोलें", + "enrollment_pending_count": "{count} लंबित नामांकन अनुरोध" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "लॉगिन विफल", + "action_logout": "Logout", + "action_password_change": "पासवर्ड बदला गया", + "action_2fa_enable": "2एफए सक्षम", + "action_2fa_disable": "2FA अक्षम", + "action_user_create": "उपयोगकर्ता बनाया गया", + "action_user_update": "उपयोगकर्ता अपडेट किया गया", + "action_user_delete": "उपयोगकर्ता हटा दिया गया", + "action_settings_update": "सेटिंग्स अपडेट की गईं", + "action_device_ban": "डिवाइस प्रतिबंधित", + "action_device_unban": "डिवाइस अप्रतिबंधित", + "action_device_delete": "डिवाइस हटा दिया गया" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "प्रारंभिक सुविधा — एजेंट बंडल जनरेटर सक्रिय विकास में है।", + "config_options": "कॉन्फ़िगरेशन विकल्प", + "server_address": "सर्वर पता", + "server_address_hint": "आपके सर्वर का डोमेन या आईपी पता", + "custom_port": "Custom Port", + "port_hint": "डिफ़ॉल्ट के लिए खाली छोड़ें (21116)", + "relay_server": "रिले सर्वर", + "relay_placeholder": "खाली होने पर आईडी सर्वर के समान", + "relay_hint": "वैकल्पिक: अलग रिले सर्वर पता", + "include_key": "कॉन्फ़िगरेशन में सार्वजनिक कुंजी शामिल करें", + "generate": "कॉन्फ़िगरेशन जनरेट करें", + "output": "कॉन्फ़िगरेशन आउटपुट", + "usage_title": "कनेक्शन विवरण", + "generated": "कॉन्फ़िगरेशन उत्पन्न हुआ", + "server_required": "सर्वर पता आवश्यक है", + "nothing_to_copy": "पहले एक कॉन्फ़िगरेशन जनरेट करें", + "bundles_title": "एजेंट बंडल", + "new_bundle": "नया बंडल", + "editor_title": "बंडल संपादक", + "empty_state": "बाईं ओर एक बंडल चुनें या शुरू करने के लिए एक नया बंडल बनाएं।", + "loading": "लोड हो रहा है...", + "no_bundles": "अभी तक कोई बंडल नहीं. अपना पहला बनाएं.", + "bundle_name": "बंडल का नाम", + "bundle_name_hint": "केवल आंतरिक लेबल - अंतिम उपयोगकर्ताओं को नहीं दिखाया गया।", + "short_link": "लघु डाउनलोड लिंक", + "short_link_hint": "सार्वजनिक URL (/d/…) में उपयोग होता है। केवल छोटे अक्षर, संख्याएँ और डैश (2–32 वर्ण)। बंडल नाम से स्वतः भरा जाता है — साझा करना आसान बनाने के लिए छोटा करें (जैसे acme)।", + "branding_section": "ब्रांडिंग", + "company_name": "कंपनी/ब्रांड नाम", + "short_text": "संक्षिप्त वर्णन", + "contact_email": "ई - मेल से संपर्क करे", + "contact_phone": "संपर्क फ़ोन", + "contact_url": "वेबसाइट से संपर्क करें", + "logo": "प्रतीक चिन्ह", + "logo_hint": "पीएनजी, जेपीईजी, एसवीजी या वेबपी। अधिकतम 256 केबी.", + "logo_clear": "लोगो हटाएँ", + "primary_color": "प्राथमिक रंग", + "accent_color": "हेडर का रंग", + "default_lang": "डिफ़ॉल्ट भाषा", + "allow_unattended": "अप्राप्य पहुंच की अनुमति दें", + "allow_unattended_hint": "सक्षम होने पर, एजेंट ऑपरेटर पहुंच के लिए एक स्थायी पासवर्ड दिखाता है।", + "save": "बंडल सहेजें", + "revoke": "रद्द करना", + "unrevoke": "पुन: सक्षम", + "revoked": "निरस्त किया गया", + "preview_title": "लाइव पूर्वावलोकन", + "preview_hint": "अंतिम-उपयोगकर्ता एजेंट विंडो का अनुमानित स्वरूप।", + "preview_default_name": "BetterDesk समर्थन", + "preview_status_ready": "तैयार", + "preview_id": "आपका आईडी", + "preview_password": "पासवर्ड", + "preview_chat": "समर्थन के साथ चैट करें", + "preview_settings": "सेटिंग्स (केवल व्यवस्थापक)", + "preview_quit": "छोड़ें (केवल व्यवस्थापक)", + "download_link_title": "लिंक को डाउनलोड करें", + "download_link_hint": "इस लिंक को अंतिम उपयोगकर्ताओं के साथ साझा करें. उन्हें एक ब्रांडेड डाउनलोड पेज दिखाई देगा। छोटा लिंक बदलने के बाद भी पुराने hex लिंक काम करते रहेंगे।", + "open_portal": "खुला", + "created": "बंडल बनाया गया", + "saved": "बंडल सहेजा गया", + "deleted": "बंडल हटा दिया गया", + "revoked_ok": "बंडल निरस्त कर दिया गया", + "unrevoked_ok": "बंडल पुनः सक्षम किया गया", + "link_copied": "लिंक को क्लिपबोर्ड पर कॉपी किया गया", + "copy_failed": "स्वचालित रूप से कॉपी नहीं किया जा सका - कृपया मैन्युअल रूप से कॉपी करें", + "unsaved_confirm": "सहेजे न गए परिवर्तन त्यागें?", + "confirm_revoke": "इस बंडल को निरस्त करें? डाउनलोड लिंक काम करना बंद कर देगा.", + "confirm_unrevoke": "इस बंडल को पुनः सक्षम करें?", + "confirm_delete": "इस बंडल को स्थायी रूप से हटाएं? इसे असंपादित नहीं किया जा सकता है।", "errors": { - "forbidden_title": "पहुंच अस्वीकृत", - "forbidden_message": "आपके पास इस संसाधन तक पहुँचने की अनुमति नहीं है.", - "not_found_title": "पृष्ठ नहीं मिला", - "not_found_message": "आप जिस पृष्ठ को खोज रहे हैं वह मौजूद नहीं है या उसे स्थानांतरित कर दिया गया है।", - "server_error_title": "सर्वर त्रुटि", - "server_error_message": "कुछ गलत हो गया। कृपया बाद में पुन: प्रयास करें।", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "डिवाइस लोड करने में विफल", - "load_key_failed": "कुंजी लोड करने में विफल", - "load_qr_failed": "QR लोड करने में विफल", - "load_audit_failed": "ऑडिट लॉग लोड करने में विफल", - "load_users_failed": "उपयोगकर्ताओं को लोड करने में विफल", - "load_folders_failed": "फ़ोल्डर्स लोड करने में विफल", - "download_failed": "डाउनलोड विफल रहा", - "logout_failed": "लॉगआउट विफल", - "password_change_failed": "पासवर्ड बदलने में विफल", - "language_change_failed": "भाषा बदलने में विफल", - "ban_failed": "डिवाइस पर प्रतिबंध लगाने में विफल", - "unban_failed": "डिवाइस पर प्रतिबंध हटाने में विफल", - "delete_failed": "डिवाइस हटाने में विफल", - "change_id_failed": "डिवाइस आईडी बदलने में विफल", - "bulk_delete_failed": "डिवाइस हटाने में विफल", - "sync_failed": "स्थिति समन्वयित करने में विफल", - "error": "Error", - "not_found": "Not found", - "server_error": "सर्वर त्रुटि", - "load_device_failed": "डिवाइस लोड करने में विफल", - "load_orgs_failed": "संगठनों को लोड करने में विफल" + "validation_failed": "प्रमाणीकरण विफल रहा", + "name_required": "बंडल नाम आवश्यक है", + "company_name_required": "कंपनी का नाम आवश्यक है", + "logo_invalid": "लोगो एक वैध छवि फ़ाइल होनी चाहिए", + "logo_too_large": "लोगो 256 KB या उससे छोटा होना चाहिए", + "logo_read_failed": "लोगो फ़ाइल पढ़ने में विफल", + "primary_color_invalid": "प्राथमिक रंग एक हेक्स मान होना चाहिए (उदा. #2563eb)", + "accent_color_invalid": "हेडर का रंग हेक्स मान होना चाहिए (जैसे #1e293b)", + "contact_url_invalid": "संपर्क वेबसाइट वैध URL होनी चाहिए", + "server_host_required": "सार्वजनिक सर्वर पता आवश्यक है", + "server_host_invalid": "वैध डोमेन नाम या IPv4 पता दर्ज करें", + "token_failed": "नामांकन टोकन नहीं बन सका — सर्वर कनेक्टिविटी जांचें", + "rebuild_revoked": "निरस्त बंडल पुनर्निर्माण नहीं हो सकता — पहले पुनः सक्षम करें", + "slug_invalid": "लघु लिंक में केवल छोटे अक्षर, संख्याएँ और डैश हो सकते हैं", + "slug_too_short": "लघु लिंक कम से कम 2 वर्ण का होना चाहिए", + "slug_too_long": "लघु लिंक अधिकतम 32 वर्ण का हो सकता है", + "slug_taken": "यह लघु लिंक पहले से किसी अन्य बंडल द्वारा उपयोग में है" }, - "remote": { - "title": "दूरवर्ती डेस्कटॉप", - "connecting": "कनेक्ट हो रहा है...", - "waiting_password": "पासवर्ड का इंतजार है", - "authenticating": "प्रमाणित किया जा रहा है...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "पासवर्ड आवश्यक", - "enter_password_for": "डिवाइस के लिए पासवर्ड दर्ज करें", - "password_placeholder": "डिवाइस पासवर्ड", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "डिवाइसेस पर वापस जाएँ", - "fullscreen": "Fullscreen", - "toggle_audio": "ऑडियो टॉगल करें", - "send_keys": "कुंजियाँ भेजें", - "scale_mode": "Scale Mode", - "scale_fit": "खिड़की के लिए फिट", - "scale_fill": "Fill Window", - "scale_original": "मूल आकार (1:1)", - "scale_stretch": "भरने के लिए खिंचाव", - "actions": "Actions", - "lock_screen": "लॉक स्क्रीन", - "restart_remote": "रिमोट डिवाइस पुनः प्रारंभ करें", - "refresh_screen": "स्क्रीन ताज़ा करें", - "clipboard_paste": "क्लिपबोर्ड से चिपकाएँ", - "block_input": "Block Input", - "display_settings": "प्रदर्शन सेटिंग्स", - "image_quality": "छवि के गुणवत्ता", - "quality_best": "सर्वोत्तम (पूर्ण गुणवत्ता, 60एफपीएस)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "रिमोट कर्सर दिखाएँ", - "lock_after_session": "सत्र के बाद लॉक करें", - "privacy_mode": "गोपनीयता मोड", - "disable_clipboard": "क्लिपबोर्ड अक्षम करें", - "chat": "Chat", - "chat_placeholder": "एक संदेश टाइप करें...", - "record": "स्क्रीन रिकॉर्ड करें", - "view_only": "केवल देखें", - "pin_toolbar": "टूलबार पिन करें", - "monitors": "Monitors", - "select_monitor": "मॉनिटर का चयन करें", - "quality_speed": "गति (कम गुणवत्ता, 60fps)", - "quality_quality": "गुणवत्ता (सर्वोत्तम, 30एफपीएस)", - "recording_started": "रिकॉर्डिंग शुरू हुई", - "recording_stopped": "रिकॉर्डिंग बंद हो गई", - "download_recording": "रिकॉर्डिंग डाउनलोड करें", - "e2e_encrypted": "एंड-टू-एंड एन्क्रिप्टेड", - "e2e_key_exchange": "सुरक्षित चैनल स्थापित किया जा रहा है...", - "confirm_restart": "क्या आप वाकई रिमोट डिवाइस को पुनरारंभ करना चाहते हैं?", - "webcodecs_not_supported": "आपका ब्राउज़र WebCodecs API का समर्थन नहीं करता है. कृपया Chrome 94+ या Edge 94+ का उपयोग करें।", - "webcodecs_insecure_context": "WebCodecs HTTP पर अनुपलब्ध है। वीडियो सॉफ़्टवेयर फ़ॉलबैक का उपयोग करता है. सर्वोत्तम प्रदर्शन के लिए, HTTPS का उपयोग करें।", - "webcodecs_fallback_active": "सॉफ़्टवेयर वीडियो डिकोडर सक्रिय (सीमित प्रदर्शन)", - "click_to_start": "प्रारंभ करने के लिए क्लिक करें", - "autoplay_blocked": "ब्राउज़र को वीडियो और ऑडियो प्लेबैक शुरू करने के लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है।", - "start_playback": "प्लेबैक प्रारंभ करें", - "new_connection": "नया कनेक्शन", - "device_id_placeholder": "डिवाइस आईडी दर्ज करें", - "http_warning": "HTTP मोड: H.264 सॉफ़्टवेयर डिकोड (~15 FPS) तक सीमित। पूर्ण प्रदर्शन के लिए HTTPS का उपयोग करें (WebCodecs, VP9, 60 FPS)।", - "file_transfer": "दस्तावेज हस्तांतरण", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "यह फ़ोल्डर खाली है", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "स्थानांतरण विफल रहा", - "file_show_hidden": "छुपी हुई फ़ाइलें दिखाएँ", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "फ़ोल्डर का नाम दर्ज करें:", - "file_parent": "मूल फ़ोल्डर", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "नया नाम दर्ज करें:", - "file_delete_confirm": "क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?", - "file_cancelled": "स्थानांतरण रद्द कर दिया गया", - "2fa_required": "2एफए सत्यापन आवश्यक है", - "2fa_hint": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", - "2fa_invalid": "एक वैध 6-अंकीय कोड दर्ज करें", - "verify": "Verify", - "use_cdap_fallback": "CDAP व्यूअर का उपयोग करें", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "क्लिपबोर्ड खाली है", - "clipboard_denied": "क्लिपबोर्ड पहुंच अस्वीकृत. HTTPS आवश्यक है या अनुमति नहीं दी गई है।", - "file_loading": "लोड हो रहा है...", - "file_timeout": "रिमोट डिवाइस ने प्रतिक्रिया नहीं दी. फ़ाइल स्थानांतरण समर्थित नहीं हो सकता है या रिमोट मशीन पर अक्षम है।", - "codec": "वीडियो कोडेक", - "codec_auto": "ऑटो (अनुशंसित)" + "legacy_title": "क्लाइंट कॉन्फ़िगरेशन जेनरेटर", + "connection_section": "सर्वर कनेक्शन", + "server_host": "सार्वजनिक सर्वर पता", + "server_host_placeholder": "support.example.com या 203.0.113.10", + "server_host_hint": "डोमेन नाम या सार्वजनिक IP जहाँ अंत उपयोगकर्ता आपके BetterDesk सर्वर तक पहुँचते हैं। पोर्ट कंसोल कॉन्फ़िगरेशन से लिया जाता है।", + "use_https": "HTTPS / WSS उपयोग करें (अनुशंसित)", + "enrollment_token": "डिवाइस पंजीकरण", + "enrollment_token_pending": "स्वीकृति के बाद प्रति डिवाइस", + "enrollment_token_set": "प्रति डिवाइस — Registrations में स्वीकृत करें", + "enrollment_token_hint": "प्रत्येक इंस्टॉलेशन अपने आप पंजीकृत होती है। Registrations पैनल में नए डिवाइस स्वीकृत करें; सर्वर फिर प्रत्येक कंप्यूटर के लिए अद्वितीय एक्सेस कुंजी जारी करता है।", + "enrollment_per_device": "प्रति डिवाइस — Registrations में स्वीकृत करें", + "background_color": "विंडो पृष्ठभूमि", + "surface_color": "कार्ड पृष्ठभूमि", + "text_color": "पाठ रंग", + "text_muted_color": "म्यूट पाठ रंग", + "status_ready_color": "तैयार संकेतक रंग", + "header_text_color": "हेडर पाठ रंग", + "builds_title": "क्लाइंट बिल्ड", + "builds_hint": "प्रत्येक प्लेटफ़ॉर्म के लिए इस सर्वर पर संकलित इंस्टॉलर। टूलचेन त्रुटियों को ठीक करने या एजेंट स्रोत अपडेट करने के बाद पुनर्निर्माण करें।", + "builds_loading": "बिल्ड स्थिति लोड हो रही है…", + "builds_empty": "अभी तक कोई बिल्ड कतार में नहीं — बंडल सहेजें या सभी पुनर्निर्माण क्लिक करें।", + "rebuild_all": "सभी पुनर्निर्माण", + "rebuilding_all": "पुनर्निर्माण कतारबद्ध किया जा रहा है…", + "rebuild_queued": "सभी प्लेटफ़ॉर्म बिल्ड कतारबद्ध", + "rebuild_confirm": "इस बंडल के सभी प्लेटफ़ॉर्म इंस्टॉलर पुनर्निर्माण करें? मौजूदा तैयार आर्टिफ़ैक्ट प्रतिस्थापित किए जाएंगे।", + "build_status_ready": "तैयार", + "build_status_pending": "कतार में", + "build_status_building": "बिल्ड हो रहा है", + "build_status_failed": "विफल", + "builds_summary": "{{ready}} तैयार · {{pending}} कतार में · {{building}} बिल्ड हो रहा है · {{failed}} विफल", + "build_error_hint": "बिल्ड त्रुटि", + "preview_help": "सहायता का अनुरोध" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "आईडी सर्वर", + "relay_server": "रिले सर्वर", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "जाँच हो रही है...", + "label": "Status", + "no_signal": "कोई सिग्नल नहीं" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "डेस्कटॉप क्लाइंट के माध्यम से कनेक्ट करें", + "remote_viewer": "दूरस्थ दर्शक", + "web_remote": "वेब रिमोट", + "details": "Details", + "edit": "संपादन करना", + "delete": "मिटाना", + "ban": "Ban", + "unban": "Unban", + "save": "बचाना", + "cancel": "रद्द करना", + "confirm": "पुष्टि करना", + "close": "बंद करना", + "clear": "Clear", + "ok": "OK", + "saved": "सफलतापूर्वक बचाया", + "back": "पीछे", + "create": "बनाएं", + "dismiss": "Dismiss", + "view_all": "सभी को देखें", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s पहले", + "minutes_ago": "{count}m पहले", + "hours_ago": "{count}h पहले", + "days_ago": "{count}d पहले", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "प्रयोक्ता प्रबंधन", + "subtitle": "कंसोल उपयोगकर्ता और अनुमतियाँ प्रबंधित करें", + "add_user": "Add User", + "edit_user": "यूजर को संपादित करो", + "username": "उपयोगकर्ता नाम", + "username_placeholder": "उपयोक्तानाम दर्ज करें", + "username_hint": "केवल 3-32 अक्षर, अक्षर, संख्याएँ और अंडरस्कोर", + "password": "पासवर्ड", + "password_placeholder": "पास वर्ड दर्ज करें", + "password_hint": "मिश्रित केस, संख्याओं और प्रतीकों के साथ न्यूनतम 8 अक्षर", + "password_leave_empty": "चालू रखने के लिए खाली छोड़ें", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "बनाया था", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "उपयोगकर्ता बनाएं", + "edit": "संपादन करना", + "reset_password": "पासवर्ड रीसेट", + "new_password": "नया पासवर्ड", + "delete_title": "उपयोगकर्ता हटाएँ", + "delete_confirm": "क्या आप वाकई उपयोगकर्ता {username} को हटाना चाहते हैं?", + "delete_success": "उपयोगकर्ता सफलतापूर्वक हटा दिया गया", + "user_created": "उपयोगकर्ता सफलतापूर्वक बनाया गया", + "user_updated": "उपयोगकर्ता सफलतापूर्वक अपडेट किया गया", + "password_reset_success": "पासवर्ड सफलतापूर्वक रीसेट हो गया", + "empty_title": "कोई उपयोगकर्ता नहीं मिला", + "empty_text": "कंसोल एक्सेस प्रबंधित करने के लिए उपयोगकर्ता जोड़ें", + "fill_required": "कृपया सभी अपेक्षित फ़ील्ड को भरें", + "invalid_username": "उपयोगकर्ता नाम केवल 3-32 अक्षर, अक्षर, संख्या और अंडरस्कोर होना चाहिए", + "username_exists": "उपयोगकर्ता का नाम पहले से मौजूद है", + "weak_password": "पासवर्ड बहुत कमजोर है", + "password_too_short": "पासवर्ड कम से कम 8 वर्णों का होना चाहिए", + "invalid_role": "अमान्य भूमिका", + "cannot_demote_self": "आप स्वयं को पदावनत नहीं कर सकते", + "cannot_delete_self": "आप अपना स्वयं का खाता नहीं हटा सकते", + "last_admin": "अंतिम व्यवस्थापक को हटाया नहीं जा सकता", + "admin_only": "यह सुविधा केवल व्यवस्थापकों के लिए उपलब्ध है", + "password_required": "पासवर्ड आवश्यक है", + "not_found": "उपयोगकर्ता नहीं मिला", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "सुरक्षा सर्वोत्तम अभ्यास", + "tip_strong_passwords": "प्रत्येक उपयोगकर्ता के लिए मजबूत, अद्वितीय पासवर्ड का उपयोग करें", + "tip_unique_accounts": "प्रत्येक व्यक्ति के लिए अलग-अलग खाते बनाएं", + "tip_viewer_role": "उन उपयोगकर्ताओं के लिए दर्शक भूमिका का उपयोग करें जिन्हें केवल पढ़ने की पहुंच की आवश्यकता है", + "tip_operator_role": "उन उपयोगकर्ताओं के लिए ऑपरेटर भूमिका का उपयोग करें जिन्हें डिवाइस प्रबंधित करने की आवश्यकता है लेकिन उपयोगकर्ताओं की नहीं", + "tip_audit_logs": "संदिग्ध गतिविधि के लिए नियमित रूप से ऑडिट लॉग की समीक्षा करें", + "role_pro": "प्रो (केवल API)", + "role_super_admin": "Super Admin", + "role_server_admin": "सर्वर व्यवस्थापक", + "role_global_admin": "वैश्विक प्रशासन", + "organizations": "संगठनों", + "user_organizations": "{username} के लिए संगठन", + "no_organizations": "उपयोगकर्ता को किसी संगठन को नहीं सौंपा गया है", + "org_removed": "संगठन का असाइनमेंट हटा दिया गया", + "server_role_label": "सर्वर भूमिका", + "server_role_hint": "यह निर्धारित करता है कि उपयोगकर्ता पूरे कंसोल (पैनल एक्सेस, सर्वर कॉन्फ़िगरेशन, ऑडिट इत्यादि) में क्या कर सकता है।", + "org_membership_section": "संगठन की सदस्यता", + "org_membership_hint": "एक उपयोगकर्ता अनेक संगठनों से संबंधित हो सकता है. संगठन की भूमिका केवल उस संगठन के अंदर अनुमतियों को नियंत्रित करती है और उपरोक्त सर्वर भूमिका से स्वतंत्र है।", + "column_organizations": "संगठनों", + "no_orgs_short": "—", + "org_count_one": "{count} संगठन", + "org_count_many": "{count} संगठन", + "all_orgs_assigned": "उपयोगकर्ता पहले से ही प्रत्येक संगठन का सदस्य है.", + "user_groups": "यूसर समूह", + "user_groups_hint": "उपयोगकर्ता समूहों का उपयोग चयनित डिवाइस समूहों तक पहुंच प्रदान करने के लिए किया जा सकता है।", + "loading_user_groups": "उपयोगकर्ता समूह लोड हो रहे हैं...", + "no_user_groups": "कोई उपयोगकर्ता समूह उपलब्ध नहीं है", + "create_user_group": "समूह बनाना", + "edit_user_group": "उपयोगकर्ता समूह संपादित करें", + "delete_user_group": "उपयोगकर्ता समूह हटाएँ", + "delete_user_group_confirm": "उपयोगकर्ता समूह {name} हटाएं? सदस्य इस समूह के माध्यम से दी गई पहुंच खो देंगे।", + "user_group_created": "उपयोगकर्ता समूह बनाया गया", + "user_group_updated": "उपयोगकर्ता समूह अद्यतन किया गया", + "user_group_deleted": "उपयोगकर्ता समूह हटा दिया गया", + "user_group_not_found": "उपयोगकर्ता समूह नहीं मिला", + "group_name": "समूह नाम", + "group_name_placeholder": "ऑपरेटर्स", + "group_note": "Note", + "group_note_placeholder": "वैकल्पिक नोट", + "group_name_required": "समूह का नाम आवश्यक है", + "group_members_count": "{count} सदस्य", + "provider": "प्रदाता", + "provider_local": "स्थानीय", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "पहचान प्रदाता द्वारा प्रबंधित", + "provider_managed_hint": "यह खाता बाहरी पहचान प्रदाता (LDAP/AD या SSO) द्वारा प्रबंधित है। पासवर्ड और भूमिका प्रदाता द्वारा नियंत्रित हैं और यहाँ नहीं बदले जा सकते।" + }, + "folders": { + "title": "Folders", + "create": "फ़ोल्डर बनाएँ", + "edit": "फ़ोल्डर संपादित करें", + "delete": "फ़ोल्डर हटाएँ", + "name": "Folder Name", + "name_placeholder": "फ़ोल्डर का नाम दर्ज करें", + "name_required": "फ़ोल्डर का नाम आवश्यक है", + "name_too_long": "फ़ोल्डर का नाम बहुत लंबा है (अधिकतम 50 अक्षर)", + "color": "Color", + "icon": "Icon", + "not_found": "फ़ोल्डर नहीं मिला", + "delete_confirm": "क्या आप वाकई इस फ़ोल्डर को हटाना चाहते हैं? डिवाइस अनअसाइन किए जाएंगे.", + "delete_success": "फ़ोल्डर सफलतापूर्वक हटा दिया गया", + "created": "फ़ोल्डर सफलतापूर्वक बनाया गया", + "updated": "फ़ोल्डर सफलतापूर्वक अपडेट किया गया", + "no_devices_selected": "कोई उपकरण चयनित नहीं", + "devices_moved": "डिवाइस सफलतापूर्वक स्थानांतरित हो गए", + "device_assigned": "डिवाइस को फ़ोल्डर में असाइन किया गया", + "unassigned": "Unassigned", + "all_devices": "सभी उपकरणों", + "drag_hint": "उपकरणों को व्यवस्थित करने के लिए उन्हें फ़ोल्डरों में खींचें", + "move_to": "करने के लिए कदम", + "toggle_sidebar": "साइडबार टॉगल करें" + }, + "errors": { + "forbidden_title": "पहुंच अस्वीकृत", + "forbidden_message": "आपके पास इस संसाधन तक पहुँचने की अनुमति नहीं है.", + "not_found_title": "पृष्ठ नहीं मिला", + "not_found_message": "आप जिस पृष्ठ को खोज रहे हैं वह मौजूद नहीं है या उसे स्थानांतरित कर दिया गया है।", + "server_error_title": "सर्वर त्रुटि", + "server_error_message": "कुछ गलत हो गया। कृपया बाद में पुन: प्रयास करें।", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "डिवाइस लोड करने में विफल", + "load_key_failed": "कुंजी लोड करने में विफल", + "load_qr_failed": "QR लोड करने में विफल", + "load_audit_failed": "ऑडिट लॉग लोड करने में विफल", + "load_users_failed": "उपयोगकर्ताओं को लोड करने में विफल", + "load_folders_failed": "फ़ोल्डर्स लोड करने में विफल", + "download_failed": "डाउनलोड विफल रहा", + "logout_failed": "लॉगआउट विफल", + "password_change_failed": "पासवर्ड बदलने में विफल", + "language_change_failed": "भाषा बदलने में विफल", + "ban_failed": "डिवाइस पर प्रतिबंध लगाने में विफल", + "unban_failed": "डिवाइस पर प्रतिबंध हटाने में विफल", + "delete_failed": "डिवाइस हटाने में विफल", + "change_id_failed": "डिवाइस आईडी बदलने में विफल", + "bulk_delete_failed": "डिवाइस हटाने में विफल", + "sync_failed": "स्थिति समन्वयित करने में विफल", + "error": "Error", + "not_found": "Not found", + "server_error": "सर्वर त्रुटि", + "load_device_failed": "डिवाइस लोड करने में विफल", + "load_orgs_failed": "संगठनों को लोड करने में विफल" + }, + "remote": { + "title": "दूरवर्ती डेस्कटॉप", + "connecting": "कनेक्ट हो रहा है...", + "waiting_password": "पासवर्ड का इंतजार है", + "authenticating": "प्रमाणित किया जा रहा है...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "पासवर्ड आवश्यक", + "enter_password_for": "डिवाइस के लिए पासवर्ड दर्ज करें", + "password_placeholder": "डिवाइस पासवर्ड", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "डिवाइसेस पर वापस जाएँ", + "fullscreen": "Fullscreen", + "toggle_audio": "ऑडियो टॉगल करें", + "send_keys": "कुंजियाँ भेजें", + "scale_mode": "Scale Mode", + "scale_fit": "खिड़की के लिए फिट", + "scale_fill": "Fill Window", + "scale_original": "मूल आकार (1:1)", + "scale_stretch": "भरने के लिए खिंचाव", + "actions": "Actions", + "lock_screen": "लॉक स्क्रीन", + "restart_remote": "रिमोट डिवाइस पुनः प्रारंभ करें", + "refresh_screen": "स्क्रीन ताज़ा करें", + "clipboard_paste": "क्लिपबोर्ड से चिपकाएँ", + "block_input": "Block Input", + "display_settings": "प्रदर्शन सेटिंग्स", + "image_quality": "छवि के गुणवत्ता", + "quality_best": "सर्वोत्तम (पूर्ण गुणवत्ता, 60एफपीएस)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "रिमोट कर्सर दिखाएँ", + "lock_after_session": "सत्र के बाद लॉक करें", + "privacy_mode": "गोपनीयता मोड", + "disable_clipboard": "क्लिपबोर्ड अक्षम करें", + "chat": "Chat", + "chat_placeholder": "एक संदेश टाइप करें...", + "record": "स्क्रीन रिकॉर्ड करें", + "view_only": "केवल देखें", + "pin_toolbar": "टूलबार पिन करें", + "monitors": "Monitors", + "select_monitor": "मॉनिटर का चयन करें", + "quality_speed": "गति (कम गुणवत्ता, 60fps)", + "quality_quality": "गुणवत्ता (सर्वोत्तम, 30एफपीएस)", + "recording_started": "रिकॉर्डिंग शुरू हुई", + "recording_stopped": "रिकॉर्डिंग बंद हो गई", + "download_recording": "रिकॉर्डिंग डाउनलोड करें", + "e2e_encrypted": "एंड-टू-एंड एन्क्रिप्टेड", + "e2e_key_exchange": "सुरक्षित चैनल स्थापित किया जा रहा है...", + "confirm_restart": "क्या आप वाकई रिमोट डिवाइस को पुनरारंभ करना चाहते हैं?", + "webcodecs_not_supported": "आपका ब्राउज़र WebCodecs API का समर्थन नहीं करता है. कृपया Chrome 94+ या Edge 94+ का उपयोग करें।", + "webcodecs_insecure_context": "WebCodecs HTTP पर अनुपलब्ध है। वीडियो सॉफ़्टवेयर फ़ॉलबैक का उपयोग करता है. सर्वोत्तम प्रदर्शन के लिए, HTTPS का उपयोग करें।", + "webcodecs_fallback_active": "सॉफ़्टवेयर वीडियो डिकोडर सक्रिय (सीमित प्रदर्शन)", + "click_to_start": "प्रारंभ करने के लिए क्लिक करें", + "autoplay_blocked": "ब्राउज़र को वीडियो और ऑडियो प्लेबैक शुरू करने के लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है।", + "start_playback": "प्लेबैक प्रारंभ करें", + "new_connection": "नया कनेक्शन", + "device_id_placeholder": "डिवाइस आईडी दर्ज करें", + "http_warning": "HTTP मोड: H.264 सॉफ़्टवेयर डिकोड (~15 FPS) तक सीमित। पूर्ण प्रदर्शन के लिए HTTPS का उपयोग करें (WebCodecs, VP9, 60 FPS)।", + "file_transfer": "दस्तावेज हस्तांतरण", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "यह फ़ोल्डर खाली है", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "स्थानांतरण विफल रहा", + "file_show_hidden": "छुपी हुई फ़ाइलें दिखाएँ", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "फ़ोल्डर का नाम दर्ज करें:", + "file_parent": "मूल फ़ोल्डर", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "नया नाम दर्ज करें:", + "file_delete_confirm": "क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?", + "file_cancelled": "स्थानांतरण रद्द कर दिया गया", + "2fa_required": "2एफए सत्यापन आवश्यक है", + "2fa_hint": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", + "2fa_invalid": "एक वैध 6-अंकीय कोड दर्ज करें", + "verify": "Verify", + "use_cdap_fallback": "CDAP व्यूअर का उपयोग करें", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "क्लिपबोर्ड खाली है", + "clipboard_denied": "क्लिपबोर्ड पहुंच अस्वीकृत. HTTPS आवश्यक है या अनुमति नहीं दी गई है।", + "file_loading": "लोड हो रहा है...", + "file_timeout": "रिमोट डिवाइस ने प्रतिक्रिया नहीं दी. फ़ाइल स्थानांतरण समर्थित नहीं हो सकता है या रिमोट मशीन पर अक्षम है।", + "codec": "वीडियो कोडेक", + "codec_auto": "ऑटो (अनुशंसित)" + }, + "branding": { + "identity_title": "ब्रांड पहचान", + "identity_desc": "कंसोल पर दिखाए गए एप्लिकेशन नाम और विवरण को कस्टमाइज़ करें", + "app_name": "आवेदन का नाम", + "app_description": "आवेदन विवरण", + "logo_title": "Logo", + "logo_desc": "चुनें कि आपका लोगो साइडबार और लॉगिन पेज पर कैसे दिखाई देगा", + "logo_type_icon": "सामग्री चिह्न", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "सामग्री चिह्न नाम दर्ज करें (उदा. डीएनएस, क्लाउड, सुरक्षा)। फ़ॉन्ट्स.google.com/icons देखें", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "अपना एसवीजी मार्कअप यहां चिपकाएं। पथ और शैलियों के साथ पूर्ण तत्वों का समर्थन करता है।", + "logo_image_upload": "तस्विर अपलोड करना", + "logo_image_choose": "छवि फ़ाइल चुनें", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "अमान्य फ़ाइल प्रकार. पीएनजी, जेपीजी, जीआईएफ, वेबपी या एसवीजी का प्रयोग करें।", + "preview": "Preview", + "colors_title": "रंग योजना", + "colors_desc": "रंग पैलेट को अनुकूलित करें. डिफ़ॉल्ट का उपयोग करने के लिए खाली छोड़ें.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "एक्सेंट रंग", + "colors_borders": "Borders", + "import_export_title": "आयात/निर्यात", + "import_export_desc": "अपनी थीम को JSON फ़ाइल के रूप में सहेजें या किसी अन्य उदाहरण से आयात करें", + "export_theme": "थीम निर्यात करें", + "import_theme": "थीम आयात करें", + "reset_defaults": "डिफ़ॉल्ट पर पुनः सेट करें", + "save_branding": "ब्रांडिंग सहेजें", + "saved": "ब्रांडिंग सफलतापूर्वक सहेजी गई. पुनः लोड हो रहा है...", + "exported": "थीम निर्यात की गई", + "imported": "थीम सफलतापूर्वक आयात की गई. पुनः लोड हो रहा है...", + "import_error": "थीम आयात करने में विफल. अमान्य फाइल प्रारूप।", + "reset_confirm": "क्या आप वाकई ब्रांडिंग को डिफ़ॉल्ट पर रीसेट करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।", + "reset_success": "ब्रांडिंग डिफ़ॉल्ट पर रीसेट हो गई. पुनः लोड हो रहा है...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "प्राथमिक पाठ आपके ब्रांड लोगो के रूप में प्रदर्शित होता है", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "लोगो के नीचे द्वितीयक पाठ (जैसे उत्पाद का नाम या टैगलाइन)", + "logo_upload_success": "लोगो सफलतापूर्वक अपलोड हो गया.", + "typography_title": "Typography", + "typography_desc": "शीर्षकों और मुख्य पाठ के लिए फ़ॉन्ट चुनें. सेल्फ-होस्टिंग के लिए फ़ॉन्ट्स को सर्वर पर डाउनलोड किया जाता है।", + "font_heading": "शीर्षक फ़ॉन्ट", + "font_heading_hint": "शीर्षकों (H1–H6) और टेक्स्ट लोगो के लिए उपयोग किया जाता है", + "font_body": "Body Font", + "font_body_hint": "बॉडी टेक्स्ट और यूआई तत्वों के लिए उपयोग किया जाता है", + "font_search_placeholder": "फ़ॉन्ट खोजें...", + "font_system_default": "प्रणालीगत चूक", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "सर्वर पर फ़ॉन्ट डाउनलोड किए गए", + "powered_by": "द्वारा संचालित", + "background_title": "पृष्ठभूमि और रूप-रंग", + "background_desc": "कंसोल वॉलपेपर, ग्रेडियेंट या ठोस पृष्ठभूमि सेट करें। कार्ड उस पर तैरते हैं।", + "bg_type_none": "कोई नहीं", + "bg_type_color": "ठोस रंग", + "bg_type_gradient": "ग्रेडियेंट", + "bg_type_image": "छवि", + "bg_color": "पृष्ठभूमि रंग", + "bg_gradient": "CSS ग्रेडियेंट", + "bg_gradient_hint": "कोई भी वैध CSS ग्रेडियेंट, जैसे linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "पृष्ठभूमि छवि अपलोड करें", + "bg_image_choose": "छवि फ़ाइल चुनें", + "bg_image_hint": "PNG, JPG, WebP या GIF। अधिकतम 8 MB। सर्वर पर संग्रहीत।", + "bg_image_url": "छवि पथ / URL", + "bg_size": "छवि आकार", + "bg_size_cover": "कवर (स्क्रीन भरें)", + "bg_size_contain": "कंटेन (फ़िट करें)", + "bg_size_auto": "स्वचालित (मूल)", + "bg_blur": "पृष्ठभूमि धुंधलापन", + "bg_overlay": "गहरा ओवरले", + "bg_overlay_hint": "बेहतर पाठ पठनीयता के लिए पृष्ठभूमि को गहरा करता है।", + "bg_image_too_large": "छवि बहुत बड़ी है। अधिकतम आकार 8 MB है।", + "bg_image_invalid_type": "अमान्य फ़ाइल प्रकार। PNG, JPG, WebP या GIF उपयोग करें।", + "bg_upload_success": "पृष्ठभूमि छवि सफलतापूर्वक अपलोड हुई।", + "login_title": "लॉगिन पेज", + "login_desc": "लॉगिन स्क्रीन शीर्षक, उपशीर्षक और पृष्ठभूमि अनुकूलित करें।", + "login_heading": "लॉगिन शीर्षक", + "login_heading_placeholder": "वापस स्वागत है", + "login_subheading": "लॉगिन उपशीर्षक", + "login_subheading_placeholder": "अपने खाते में साइन इन करें", + "login_bg_inherit": "कंसोल जैसा ही", + "agent_title": "एजेंट डाउनलोड पेज", + "agent_desc": "अंत उपयोगकर्ताओं को दिखाया जाने वाला सार्वजनिक एजेंट डाउनलोड पोर्टल अनुकूलित करें।", + "agent_show_powered": "\"Powered by BetterDesk\" दिखाएं", + "agent_show_powered_hint": "डाउनलोड पोर्टल फ़ुटर में BetterDesk का श्रेय दिखाएं।", + "footer_title": "फ़ुटर और कॉपीराइट", + "footer_desc": "लॉगिन स्क्रीन और कंसोल साइडबार पर दिखाई देने वाली कस्टम फ़ुटर लाइन जोड़ें।", + "footer_text": "फ़ुटर पाठ", + "footer_text_hint": "जैसे कॉपीराइट नोटिस या कंपनी का नाम।", + "show_powered": "\"BetterDesk\" श्रेय दिखाएं", + "show_powered_hint": "लॉगिन फ़ुटर और साइडबार में BetterDesk नाम और संस्करण दिखाएं।", + "custom_css_title": "कस्टम CSS", + "custom_css_desc": "उन्नत: कंसोल और लॉगिन पेज पर लागू कस्टम CSS इंजेक्ट करें।", + "custom_css_hint": "सावधानी से उपयोग करें। अमान्य या असुरक्षित नियम साफ़ किए जाएंगे। अधिकतम 20,000 वर्ण।" + }, + "device_detail": { + "tab_overview": "सिंहावलोकन", + "tab_tags": "टैग और नोट्स", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "संबंध", + "section_manage": "प्रबंध", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "यह उपकरण प्रतिबंधित है", + "no_reason": "कोई कारण नहीं बताया गया", + "tags": "Tags", + "no_tags": "इस डिवाइस को कोई टैग असाइन नहीं किया गया है", + "tag_placeholder": "एक टैग नाम दर्ज करें...", + "add_tag": "Add", + "tag_exists": "यह टैग पहले से मौजूद है", + "notes": "Notes", + "notes_placeholder": "इस डिवाइस के बारे में नोट्स जोड़ें...", + "danger_zone": "Danger Zone", + "action_connect_web": "वेब रिमोट", + "action_connect_web_desc": "ब्राउज़र रिमोट डेस्कटॉप के माध्यम से कनेक्ट करें", + "action_native_remote": "BetterDesk रिमोट", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "डेस्कटॉप क्लाइंट", + "action_connect_desktop_desc": "डेस्कटॉप क्लाइंट ऐप में खोलें", + "action_change_id_desc": "डिवाइस पंजीकरण आईडी बदलें", + "action_ban_desc": "इस डिवाइस को कनेक्ट होने से रोकें", + "action_unban_desc": "इस डिवाइस को फिर से कनेक्ट होने दें", + "action_delete_desc": "इस उपकरण को स्थायी रूप से हटा दें", + "tab_hardware": "Hardware", + "tab_metrics": "मेट्रिक्स", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "एन्कोडिंग क्षमताएँ", + "section_live_metrics": "लाइव मेट्रिक्स", + "section_current_usage": "वर्तमान उपयोग", + "section_usage_history": "उपयोग इतिहास", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "सीपीयू फ्रीक्वेंसी", + "total_memory": "कुल मेमोरी", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "अद्यतन", + "device_groups": "समूह", + "no_sysinfo": "कोई हार्डवेयर जानकारी उपलब्ध नहीं है", + "no_sysinfo_hint": "डिवाइस द्वारा sysinfo रिपोर्ट भेजने के बाद सिस्टम जानकारी दिखाई देगी", + "no_metrics": "कोई मेट्रिक्स डेटा उपलब्ध नहीं है", + "no_metrics_hint": "डिवाइस द्वारा दिल की धड़कन की रिपोर्ट भेजने के बाद मेट्रिक्स दिखाई देंगे", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "फ़ाइलें", + "agent_lazy_hint": "एजेंट से लाइव डेटा लोड करने के लिए इस टैब पर क्लिक करें", + "agent_offline": "एजेंट ऑफ़लाइन है", + "agent_timeout": "एजेंट ने समय पर जवाब नहीं दिया", + "agent_error": "एजेंट से डेटा लोड करने में विफल", + "service_name": "Name", + "service_display": "प्रदर्शित होने वाला नाम", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "प्रबंधित उपकरणों की हार्डवेयर और सॉफ़्टवेयर सूची", + "device_id": "डिवाइस आईडी", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "कुल मेमोरी", + "memory_used": "Used Memory", + "memory_available": "उपलब्ध मेमोरी", + "memory_usage": "स्मृति प्रयोग", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "नेटवर्क इंटरफेस", + "software": "Software", + "software_count": "स्थापित सॉफ्टवेयर", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "भौतिक कोर", + "logical_cores": "तार्किक कोर", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "उपलब्ध", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "आईपी ​​पते", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "कलेक्टर दौड़ रहा है", + "collector_stopped": "कलेक्टर ने रोका", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "पर एकत्रित किया गया", + "no_data": "अभी तक कोई इन्वेंट्री डेटा उपलब्ध नहीं है. सिस्टम जानकारी इकट्ठा करने के लिए \"अभी एकत्र करें\" पर क्लिक करें।", + "no_devices": "इन्वेंट्री डेटा वाला कोई उपकरण नहीं मिला", + "detail_title": "डिवाइस इन्वेंटरी विवरण", + "telemetry": "Telemetry", + "view_detail": "विस्तार से देखें", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "समर्थन टिकट और ट्रैकिंग जारी करें", + "create": "New Ticket", + "edit": "टिकट संपादित करें", + "delete": "टिकट हटाएँ", + "detail": "टिकट विवरण", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "को सौंपना", + "created_by": "के द्वारा बनाई गई", + "device": "उपकरण", + "sla_due": "SLA Due", + "created_at": "बनाया था", + "updated_at": "अद्यतन", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "खुला", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "एक टिप्पणी लिखें...", + "internal_note": "आंतरिक नोट (अंतिम उपयोगकर्ताओं के लिए दृश्यमान नहीं)", + "attachments": "Attachments", + "upload_attachment": "अनुलग्नक अपलोड करें", + "download": "Download", + "connect_device": "डिवाइस से कनेक्ट करें", + "no_tickets": "कोई टिकट नहीं मिला", + "no_comments": "अब तक कोई टिप्पणी नहीं", + "no_attachments": "कोई अनुलग्नक नहीं", + "title_required": "शीर्षक आवश्यक है", + "delete_confirm": "क्या आप वाकई टिकट #{id} हटाना चाहते हैं?", + "delete_success": "टिकट सफलतापूर्वक हटा दिया गया", + "created_success": "टिकट सफलतापूर्वक बनाया गया", + "updated_success": "टिकट सफलतापूर्वक अपडेट किया गया", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "टिकट खोजें...", + "assign_to_me": "मुझे सौंप दो", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "खुला", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "गतिविधि की निगरानी", + "subtitle": "एप्लिकेशन का उपयोग और निष्क्रिय ट्रैकिंग", + "device": "उपकरण", + "hostname": "Hostname", + "sessions": "सत्र", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "शीर्ष अनुप्रयोग", + "app_name": "Application", + "window_title": "विंडो शीर्षक", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "सत्र गणना", + "total_active": "कुल सक्रिय", + "total_idle": "Total Idle", + "detail_count": "विस्तृत रिकार्ड", + "no_data": "कोई गतिविधि डेटा उपलब्ध नहीं है", + "no_sessions": "कोई सत्र नहीं", + "filter_from": "से", + "filter_to": "को", + "filter_apply": "फ़िल्टर लागू करें", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "डिवाइस खोजें...", + "date_range": "Date Range", + "device_id": "डिवाइस आईडी", + "session_start": "सत्र प्रारंभ", + "session_end": "सत्र समाप्ति", + "user": "User", + "no_activity": "कोई गतिविधि दर्ज नहीं की गई", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "कोई आवेदन नहीं" + }, + "automation": { + "title": "स्वचालन एवं अलर्ट", + "subtitle": "अलर्ट नियम, रिमोट कमांड और एसएमटीपी कॉन्फ़िगरेशन", + "rules": "Alert Rules", + "rules_subtitle": "उन स्थितियों को परिभाषित करें जो सूचनाएं ट्रिगर करती हैं", + "alerts": "चेतावनी इतिहास", + "alerts_subtitle": "ट्रिगर अलर्ट देखें और स्वीकार करें", + "commands": "रिमोट कमांड", + "commands_subtitle": "दूरस्थ डिवाइसों पर आदेश भेजें", + "smtp": "एसएमटीपी कॉन्फ़िगरेशन", + "smtp_subtitle": "ईमेल अधिसूचना सेटिंग्स", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "शर्त प्रकार", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "लक्ष्य डिवाइस", + "scope_all": "सभी उपकरणों", + "cooldown": "कूलडाउन (सेकंड)", + "notify_emails": "अधिसूचना ईमेल", + "enabled": "सक्रिय", + "disabled": "अक्षम", + "create_rule": "नियम बनाएं", + "edit_rule": "नियम संपादित करें", + "delete_rule": "नियम हटाएँ", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "पर ट्रिगर किया गया", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "से अधिक", + "op_gte": "अधिक या बराबर", + "op_lt": "Less than", + "op_lte": "कम या बराबर", + "op_eq": "के बराबर", + "op_neq": "असमान", + "type_cpu_usage": "सीपीयू उपयोग (%)", + "type_memory_usage": "स्मृति प्रयोग (%)", + "type_disk_usage": "डिस्क उपयोग (%)", + "type_offline_duration": "ऑफ़लाइन अवधि", + "type_idle_duration": "निष्क्रिय अवधि", + "type_custom": "Custom", + "command_type": "कमांड प्रकार", + "command_payload": "कमांड/स्क्रिप्ट", + "command_result": "Result", + "command_status": "Status", + "send_command": "आदेश भेजें", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "असफल", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "उपयोगकर्ता नाम", + "smtp_pass": "पासवर्ड", + "smtp_from": "इस पते से", + "smtp_test": "परीक्षण कनेक्शन", + "smtp_save": "कॉन्फ़िगरेशन सहेजें", + "smtp_test_success": "कनेक्शन सफल", + "smtp_test_failed": "कनेक्शन विफल", + "no_rules": "कोई चेतावनी नियम कॉन्फ़िगर नहीं किया गया", + "no_alerts": "कोई अलर्ट ट्रिगर नहीं हुआ", + "no_commands": "कोई आदेश नहीं भेजा गया", + "id_payload_required": "डिवाइस आईडी और पेलोड आवश्यक हैं", + "no_commands_sent": "अभी तक कोई आदेश नहीं भेजा गया है" + }, + "file_transfer": { + "title": "दस्तावेज हस्तांतरण", + "transfers": "Transfers", + "new_transfer": "नया स्थानांतरण", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "फ़ाइल का साइज़", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "उपकरण", + "initiated_by": "द्वारा आरंभ किया गया", + "created_at": "पर बनाया गया", + "cancel": "रद्द करना", + "cancel_confirm": "क्या आप वाकई यह स्थानांतरण रद्द करना चाहते हैं?", + "download_file": "डाउनलोड फ़ाइल", + "browse_files": "फ़ाइलों को ब्राउज़ करें", + "select_file": "फ़ाइल चुनें", + "select_device": "डिवाइस का चयन करें", + "no_transfers": "कोई फ़ाइल स्थानांतरण नहीं", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "असफल", + "status_cancelled": "Cancelled", + "bytes_transferred": "बाइट्स स्थानांतरित", + "chunks": "Chunks", + "transfer_started": "स्थानांतरण प्रारंभ हुआ", + "transfer_completed": "स्थानांतरण पूरा हुआ", + "transfer_failed": "स्थानांतरण विफल रहा", + "transfer_cancelled": "स्थानांतरण रद्द कर दिया गया", + "max_file_size": "अधिकतम फ़ाइल आकार: 4 जीबी", + "error_too_large": "फ़ाइल बहुत बड़ी है", + "error_no_device": "कोई उपकरण चयनित नहीं", + "error_no_file": "कोई फ़ाइल चयनित नहीं" + }, + "network": { + "title": "नेटवर्क मॉनिटरिंग", + "targets": "निगरानी लक्ष्य", + "add_target": "Add Target", + "edit_target": "लक्ष्य संपादित करें", + "delete_target": "लक्ष्य हटाएँ", + "delete_confirm": "क्या आप वाकई इस लक्ष्य को हटाना चाहते हैं?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "टाइमआउट (एमएस)", + "interval": "अंतराल (एमएस)", + "enabled": "सक्रिय", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "इतिहास जांचें", + "stats": "Statistics", + "total_targets": "कुल लक्ष्य", + "targets_up": "Targets Up", + "targets_down": "लक्ष्य नीचे", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "नेटवर्क उपकरण", + "ping_tool": "Ping Test", + "tcp_tool": "TCP पोर्ट जांच", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "मॉनिटर प्रारंभ करें", + "monitor_stop": "मॉनिटर बंद करो", + "monitor_running": "मॉनिटर चल रहा है", + "monitor_stopped": "मॉनिटर बंद हो गया है", + "no_targets": "कोई निगरानी लक्ष्य कॉन्फ़िगर नहीं किया गया", + "no_history": "कोई चेक इतिहास उपलब्ध नहीं है", + "error_code": "Error", + "status_code": "HTTP स्थिति कोड", + "search_targets": "लक्ष्य खोजें...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "इतिहास जांचें", + "name_host_required": "नाम और होस्ट आवश्यक हैं", + "uptime": "Uptime", + "response_time": "प्रतिक्रिया समय", + "avg_response": "औसत प्रतिक्रिया", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "प्रतिक्रिया समय (एमएस)", + "uptime_percent": "Uptime %", + "last_24h": "पिछले 24 घंटे", + "last_7d": "Last 7 days", + "last_30d": "पिछले 30 दिन" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "डीएलपी नीतियां", + "add_policy": "नीति जोड़ें", + "edit_policy": "नीति संपादित करें", + "delete_policy": "नीति हटाएँ", + "delete_confirm": "क्या आप वाकई इस नीति को हटाना चाहते हैं?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "सक्रिय", + "disabled": "अक्षम", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB डिवाइस", + "rule_type_file": "फ़ाइल संचालन", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "विक्रेता आईडी (वीआईडी)", + "pid": "उत्पाद आईडी (पीआईडी)", + "serial": "क्रम संख्या", + "device_class": "डिवाइस क्लास", + "drive_type": "Drive Type", + "file_extensions": "फाइल एक्सटेंशन", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "फ़ाइल", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "कोई DLP नीति कॉन्फ़िगर नहीं की गई", + "no_events": "कोई DLP इवेंट रिकॉर्ड नहीं किया गया", + "stats": "Statistics", + "total_events": "कुल घटनाएँ", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "फ़ाइल घटनाक्रम", + "device_id": "डिवाइस आईडी", + "policy_matched": "नीति मेल खाती है", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "कुल नीतियाँ", + "active_policies": "सक्रिय नीतियाँ", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "नीतियों", + "tab_events": "Events", + "search_policies": "नीतियां खोजें...", + "create_policy": "नीति बनाएं", + "policy_type": "पॉलिसी प्रकार", + "scope": "Scope", + "events_count": "Events", + "search_events": "ईवेंट खोजें...", + "event_time": "Event Time", + "device": "उपकरण", + "policy": "नीति", + "detail": "Detail", + "scope_help": "डिवाइस आईडी को अल्पविराम से अलग करें, या सभी के लिए खाली छोड़ दें", + "scope_all": "सभी उपकरणों", + "active": "Active", + "type_file_type": "फ़ाइल प्रकार", + "type_clipboard": "क्लिपबोर्ड", + "type_screen_share": "स्क्रीन शेयर", + "type_file_transfer": "दस्तावेज हस्तांतरण", + "policy_desc": "नीति विवरण", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "रिपोर्ट तैयार करें", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "डिवाइस सारांश", + "type_activity": "गतिविधि सारांश", + "type_security": "सुरक्षा रिपोर्ट", + "type_tickets": "टिकट रिपोर्ट", + "type_network": "नेटवर्क रिपोर्ट", + "type_inventory": "इन्वेंटरी रिपोर्ट", + "type_alerts": "चेतावनी रिपोर्ट", + "saved": "सहेजी गई रिपोर्टें", + "save_report": "रिपोर्ट सहेजें", + "delete_report": "रिपोर्ट हटाएँ", + "delete_confirm": "क्या आप वाकई इस सहेजी गई रिपोर्ट को हटाना चाहते हैं?", + "no_saved": "कोई सहेजी गई रिपोर्ट नहीं", + "report_title": "Title", + "created_by": "के द्वारा बनाई गई", + "created_at": "पर बनाया गया", + "filters": "Filters", + "date_from": "से", + "date_to": "को", + "device_filter": "डिवाइस आईडी", + "generated_at": "पर उत्पन्न", + "section": "डेटा अनुभाग", + "total_devices": "कुल उपकरण", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "प्लेटफार्म वितरण", + "top_applications": "शीर्ष अनुप्रयोग", + "total_active": "कुल सक्रिय समय", + "total_idle": "कुल निष्क्रिय समय", + "dlp_stats": "डीएलपी सांख्यिकी", + "banned_devices": "प्रतिबंधित उपकरण", + "audit_logs": "Audit Logs", + "ticket_stats": "टिकट सांख्यिकी", + "category_distribution": "श्रेणी वितरण", + "priority_distribution": "प्राथमिकता वितरण", + "targets_status": "लक्ष्य स्थिति", + "os_distribution": "ओएस वितरण", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "हालिया अलर्ट", + "tab_generate": "रिपोर्ट तैयार करें", + "tab_saved": "सहेजी गई रिपोर्टें", + "type_devices_desc": "सभी डिवाइस, प्लेटफ़ॉर्म और स्थितियों का अवलोकन", + "type_activity_desc": "एप्लिकेशन उपयोग और निष्क्रिय समय सारांश", + "type_security_desc": "कार्रवाइयों, डीएलपी इवेंट और ऑडिट लॉग पर प्रतिबंध लगाएं", + "type_tickets_desc": "टिकट आँकड़े और एसएलए प्रदर्शन", + "type_network_desc": "नेटवर्क निगरानी लक्ष्य और अपटाइम डेटा", + "type_inventory_desc": "हार्डवेयर और सॉफ्टवेयर इन्वेंट्री सारांश", + "type_alerts_desc": "चेतावनी नियम और ट्रिगर किया गया चेतावनी इतिहास", + "report_name": "Report Name", + "format": "Format", + "save": "रिपोर्ट सहेजें", + "preview": "Preview", + "download": "Download", + "delete_saved": "रिपोर्ट हटाएँ", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "किरायेदार संपादित करें", + "delete_tenant": "किरायेदार हटाएँ", + "delete_confirm": "क्या आप वाकई इस किरायेदार को हटाना चाहते हैं? सभी डिवाइस और उपयोगकर्ता असाइनमेंट हटा दिए जाएंगे.", + "name": "Name", + "slug": "Slug", + "contact_name": "संपर्क नाम", + "contact_email": "ई - मेल से संपर्क करे", + "max_devices": "अधिकतम उपकरण", + "max_devices_hint": "0 = असीमित", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "उपकरण", + "users": "Users", + "assign_device": "डिवाइस असाइन करें", + "assign_devices": "डिवाइस असाइन करें", + "remove_device": "डिवाइस हटाएँ", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "कोई किरायेदार कॉन्फ़िगर नहीं किया गया", + "no_devices": "इस किरायेदार को कोई उपकरण आवंटित नहीं किया गया", + "no_users": "इस किरायेदार को कोई उपयोगकर्ता निर्दिष्ट नहीं किया गया", + "stats": "किरायेदार सांख्यिकी", + "total_devices": "कुल उपकरण", + "online_devices": "ऑनलाइन उपकरण", + "total_users": "Total Users", + "created_at": "पर बनाया गया", + "updated_at": "पर अद्यतन किया गया", + "slug_exists": "किरायेदार स्लग पहले से मौजूद है", + "total_tenants": "कुल किरायेदार", + "active_tenants": "सक्रिय किरायेदार", + "search": "किरायेदार खोजें...", + "create_tenant": "किरायेदार बनाएँ", + "detail": "किरायेदार विवरण", + "contact": "Contact", + "enabled": "सक्रिय", + "disabled": "अक्षम", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "डिवाइस आईडी, होस्टनाम या आईपी द्वारा खोजें...", + "no_registrations": "No registration requests", + "col_device_id": "डिवाइस आईडी", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "क्या आप वाकई इस उपकरण को स्वीकृत करना चाहते हैं? यह सर्वर क्रेडेंशियल प्राप्त करेगा और स्वचालित रूप से कनेक्ट हो सकता है।", + "approved_success": "डिवाइस पंजीकरण सफलतापूर्वक स्वीकृत हो गया", + "reject_btn": "Reject", + "reject_title": "पंजीकरण अस्वीकार करें", + "reject_confirm": "क्या आप वाकई इस पंजीकरण अनुरोध को अस्वीकार करना चाहते हैं?", + "reject_reason": "कारण (वैकल्पिक)", + "reject_reason_placeholder": "अस्वीकृति का कारण दर्ज करें...", + "rejected_success": "डिवाइस पंजीकरण अस्वीकृत", + "delete_confirm": "क्या आप वाकई इस पंजीकरण रिकॉर्ड को हटाना चाहते हैं?", + "deleted_success": "पंजीकरण रिकॉर्ड हटा दिया गया", + "enrollment_title": "डिवाइस नामांकन", + "enrollment_subtitle": "BetterDesk डेस्कटॉप क्लाइंट से लंबित नामांकन अनुरोध", + "enrollment_empty": "कोई भी नामांकन अनुरोध लंबित नहीं है", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "प्रदर्शित होने वाला नाम", + "enrollment_display_name_placeholder": "इस डिवाइस के लिए एक नाम दर्ज करें...", + "enrollment_sync_mode": "सिंक मोड", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "डिवाइस नामांकन स्वीकृत", + "enrollment_rejected_success": "डिवाइस नामांकन अस्वीकृत", + "approve_title": "डिवाइस स्वीकृत करें", + "field_name": "डिवाइस नाम", + "field_name_placeholder": "इस डिवाइस के लिए नाम दर्ज करें...", + "field_sync_mode": "सिंक मोड", + "sync_standard": "मानक — संतुलित सिंक", + "sync_silent": "मौन — न्यूनतम टेलीमेट्री", + "sync_turbo": "टर्बो — आक्रामक सिंक", + "field_tags": "टैग", + "field_tags_placeholder": "अल्पविराम से अलग टैग (जैसे कार्यालय, लैपटॉप)...", + "field_tags_existing": "मौजूदा टैग", + "field_tag_add_placeholder": "नया टैग जोड़ें...", + "field_tag_add_btn": "जोड़ें", + "field_groups": "डिवाइस समूह", + "field_folder": "फ़ोल्डर", + "field_folder_none": "कोई फ़ोल्डर नहीं", + "reject_ban_option": "इस डिवाइस को प्रतिबंधित करें", + "reject_ban_hint": "डिवाइस अवरुद्ध हो जाएगा और नए पंजीकरण अनुरोध नहीं भेज सकेगा।", + "banner_open_mode": "नामांकन खुला है — नए RustDesk क्लाइंट बिना ऑपरेटर स्वीकृति के पंजीकृत होते हैं। इस कतार का उपयोग करने के लिए सेटिंग में प्रबंधित मोड सेट करें।", + "banner_locked_mode": "नामांकन लॉक है — केवल टोकन-बाउंड डिवाइस पंजीकृत हो सकते हैं। अज्ञात क्लाइंट के ऑपरेटर अनुमोदन के लिए प्रबंधित मोड आवश्यक है।", + "enrollment_settings_link": "नामांकन सेटिंग" + }, + "backup": { + "title": "Backup", + "desc": "अपने कंसोल कॉन्फ़िगरेशन, उपयोगकर्ताओं, समूहों और सेटिंग्स का पूर्ण बैकअप डाउनलोड करें। Go server बैकएंड सक्रिय होने पर Go server सहकर्मी डेटा शामिल किया जाता है।", + "restore_title": "Restore", + "restore_desc": "कंसोल कॉन्फ़िगरेशन को पुनर्स्थापित करने के लिए पहले से डाउनलोड की गई बैकअप फ़ाइल अपलोड करें। नीचे चुनें कि किन अनुभागों को पुनर्स्थापित करना है.", + "stat_users": "Users", + "stat_settings": "सेटिंग्स", + "stat_folders": "Folders", + "stat_groups": "समूह", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "बैकअप डाउनलोड करें", + "creating": "बैकअप बनाया जा रहा है...", + "download_success": "बैकअप सफलतापूर्वक डाउनलोड हुआ", + "upload": "बैकअप अपलोड करें", + "restore_confirm": "क्या आप वाकई इस बैकअप से पुनर्स्थापित करना चाहते हैं? चयनित अनुभागों को अधिलेखित कर दिया जाएगा.", + "restore_success": "बैकअप सफलतापूर्वक बहाल हुआ. कुछ परिवर्तनों के लिए पृष्ठ पुनः लोड करने की आवश्यकता हो सकती है।", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "कंसोल सेटिंग्स", + "opt_branding": "ब्रांडिंग/थीम", + "opt_folders": "डिवाइस फ़ोल्डर", + "opt_groups": "उपयोगकर्ता एवं उपकरण समूह", + "opt_addressbooks": "पता पुस्तिकाएँ", + "opt_users": "उपयोगकर्ता खाते", + "opt_users_warning": "विनाशकारी: सभी उपयोगकर्ता खातों को बैकअप डेटा से बदल देता है। आप लॉग आउट हो सकते हैं.", + "no_file": "कोई बैकअप फ़ाइल चयनित नहीं", + "invalid_json": "अमान्य बैकअप फ़ाइल: मान्य JSON नहीं", + "invalid_format": "अमान्य बैकअप फ़ाइल: BetterDesk बैकअप नहीं", + "stat_database": "डेटाबेस इंजन", + "stat_keys": "सर्वर कुंजियाँ शामिल", + "stat_env": "वातावरण फ़ाइल", + "stat_uploads": "ब्रांडिंग फ़ाइलें", + "restart_required": "कुछ पुनर्स्थापित घटकों (कुंजियाँ / .env / Go डेटाबेस) को प्रभावी होने के लिए सेवा पुनः प्रारंभ की आवश्यकता है।", + "security_warning": "इस बैकअप में रहस्य (सर्वर कुंजियाँ, वातावरण फ़ाइल, पासवर्ड हैश और 2FA रहस्य) शामिल हैं। सुरक्षित रखें और कभी साझा न करें।", + "restore_warning": "रहस्यों, वातावरण फ़ाइल या Go सर्वर डेटाबेस को पुनर्स्थापित करने से सर्वर पहचान अधिलेखित होती है और बाद में सेवा पुनः प्रारंभ की आवश्यकता है।", + "opt_database": "डेटाबेस (सभी तालिकाएं)", + "opt_database_hint": "सभी कंसोल डेटा पुनः आयात करता है। सीधे लागू, पुनः प्रारंभ की आवश्यकता नहीं।", + "opt_uploads": "ब्रांडिंग फ़ाइलें", + "opt_uploads_hint": "लोगो और अपलोड की गई छवियाँ।", + "opt_secrets": "सर्वर कुंजियाँ और रहस्य", + "opt_secrets_warning": "Ed25519 सर्वर पहचान, API कुंजी और सत्र रहस्य को अधिलेखित करता है। सेवा पुनः प्रारंभ आवश्यक है।", + "opt_env": "वातावरण फ़ाइल (.env)", + "opt_env_warning": "SESSION_SECRET, API कुंजी, डेटाबेस DSN, पोर्ट और TLS सेटिंग को अधिलेखित करता है। सेवा पुनः प्रारंभ आवश्यक है।", + "opt_godb": "Go सर्वर डेटाबेस", + "opt_godb_warning": "Go सर्वर SQLite डेटाबेस को अधिलेखित करता है (केवल SQLite बैकएंड)। सेवा पुनः प्रारंभ आवश्यक है।" + }, + "cdap": { + "device_detail": "CDAP डिवाइस", + "loading": "लोड हो रहा है...", + "loading_widgets": "डिवाइस विजेट लोड हो रहा है...", + "load_error": "डिवाइस डेटा लोड करने में विफल", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "डिवाइस अभी ऑफ़लाइन है. विजेट मान पुराने हो सकते हैं.", + "no_widgets": "कोई विजेट उपलब्ध नहीं है", + "no_widgets_desc": "इस डिवाइस ने विजेट परिभाषाओं के साथ CDAP मेनिफेस्ट पंजीकृत नहीं किया है।", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "आदेश की पुष्टि करें", + "select_option": "चुनना", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "आदेश भेजें", + "command_sent": "आदेश सफलतापूर्वक भेजा गया", + "command_failed": "आदेश भेजने में विफल", + "devices_title": "CDAP उपकरण", + "devices_subtitle": "कस्टम डिवाइस एप्लिकेशन प्रोटोकॉल के माध्यम से कनेक्टेड डिवाइस", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "डिवाइस खोजें...", + "no_devices": "कोई डिवाइस कनेक्ट नहीं है", + "no_devices_desc": "वर्तमान में कोई CDAP डिवाइस कनेक्ट नहीं है। गेटवे से कनेक्ट होते ही डिवाइस यहां दिखाई देंगे।", + "gateway_disabled": "CDAP गेटवे अक्षम", + "gateway_disabled_desc": "सर्वर कॉन्फ़िगरेशन में CDAP_ENABLED=true सेट करके CDAP गेटवे सक्षम करें।", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "CDAP अक्षम करें", + "enabled_restart": "CDAP सक्षम। परिवर्तन लागू करने के लिए सर्वर पुनरारंभ आवश्यक है।", + "disabled_restart": "CDAP अक्षम किया गया. परिवर्तन लागू करने के लिए सर्वर पुनरारंभ आवश्यक है।", + "widgets": "विजेट", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "सक्रिय अलर्ट", + "alert_fired": "Alert fired", + "alert_cleared": "अलर्ट साफ़ किया गया", + "no_alerts": "कोई सक्रिय अलर्ट नहीं", + "connect_terminal": "टर्मिनल कनेक्ट करें", + "table_search": "खोज...", + "just_now": "Just now", + "terminal_connecting": "उपकरण से जुड़ रहा है...", + "terminal_disconnected": "Disconnected", + "terminal_error": "टर्मिनल कनेक्शन विफल", + "linked_devices": "जुड़े हुए उपकरण", + "link_device": "डिवाइस लिंक करें", + "unlink_device": "Unlink", + "no_linked_devices": "कोई लिंक्ड डिवाइस नहीं", + "unlink_confirm": "क्या आप वाकई इस डिवाइस को अनलिंक करना चाहते हैं?", + "link_prompt": "इस डिवाइस से लिंक करने के लिए पीयर आईडी दर्ज करें:", + "connect_desktop": "डेस्कटॉप कनेक्ट करें", + "connect_video": "स्ट्रीम कनेक्ट करें", + "connect_files": "फ़ाइलों को ब्राउज़ करें", + "connect_audio": "ऑडियो कनेक्ट करें", + "upload_file": "Upload", + "desktop_connecting": "कनेक्ट हो रहा है...", + "video_connecting": "कनेक्ट हो रहा है...", + "files_connecting": "कनेक्ट हो रहा है...", + "audio_connecting": "कनेक्ट हो रहा है...", + "audio_streaming": "Streaming", + "clipboard_in": "क्लिपबोर्ड प्राप्त हुआ", + "clipboard_out": "क्लिपबोर्ड भेजा गया", + "monitor_select": "मॉनिटर का चयन करें", + "keyframe_request": "मुख्य-फ़्रेम का अनुरोध करें", + "quality_auto": "ऑटो गुणवत्ता" + }, + "desktop": { + "switch_mode": "डेस्कटॉप मोड", + "console_mode": "कंसोल मोड", + "loading": "लोड हो रहा है...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "बंद करना", + "widgets_mode": "विजेट", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "विजेट जोड़ें", + "remove_widget": "विजेट हटाएँ", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "कॉन्फ़िगर", + "search_widgets": "विजेट खोजें...", + "cat_monitoring": "Monitoring", + "cat_devices": "उपकरण", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "यहां नोट्स लिखें...", + "search_placeholder": "डिवाइस, पेज, सेटिंग्स खोजें...", + "search_pages": "Pages", + "search_devices": "उपकरण", + "search_no_results": "No results", + "exit_desktop": "डेस्कटॉप मोड से बाहर निकलें", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "डिवाइस स्थिति", + "widget_server_health": "सर्वर जानकारी", + "widget_system_stats": "डिवाइस गेज", + "widget_device_list": "डिवाइस सूची", + "widget_quick_actions": "त्वरित कार्रवाई", + "widget_recent_activity": "हाल की गतिविधि", + "widget_notes": "Notes", + "widget_network_monitor": "नेटवर्क मॉनिटर", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP उपकरण", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "डिवाइस ग्रिड", + "widget_multi_gauge": "सर्वर गेज", + "widget_weekly_chart": "साप्ताहिक गतिविधि", + "widget_quick_controls": "त्वरित नियंत्रण", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "कनेक्शन आँकड़े", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "उपयोगकर्ता सत्र", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "कोई उपकरण नहीं", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "खुला", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "कॉन्फ़िगरेशन में URL सेट करें", + "label_server_uptime": "सर्वर अपटाइम", + "label_merged_info": "सर्वर जानकारी विजेट में विलय", + "label_with_notes": "नोट्स के साथ", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "कुल उपकरण", + "label_throughput": "Throughput", + "label_active_relays": "सक्रिय रिले", + "label_total_relayed": "कुल रिले", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "फ़िल्टर डिवाइस...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "कोई CDAP डिवाइस नहीं", + "action_add_widget": "विजेट जोड़ें", + "label_merged_server_info": "सर्वर जानकारी विजेट में विलय", + "wp_images": "Images", + "wp_colors": "ठोस रंग", + "wp_custom_color": "कस्टम रंग", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "इस सर्वर पर वॉलपेपर छवियां स्थापित नहीं हैं।", + "wp_download_hint": "वॉलपेपर चयन को सक्षम करने के लिए पीएनजी छवियों को सार्वजनिक/वॉलपेपर/निर्देशिका में रखें।", + "widget_calendar": "Calendar", + "widget_process_monitor": "प्रक्रिया मॉनिटर", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "डेटाबेस आँकड़े", + "widget_docker_containers": "Docker कंटेनर", + "widget_shell_command": "शैल कमान", + "widget_device_map": "डिवाइस मानचित्र", + "widget_remote_connect": "रिमोट कनेक्ट", + "label_no_online": "कोई ऑनलाइन डिवाइस नहीं", + "label_no_events": "आज कोई कार्यक्रम नहीं", + "label_event_title": "इवेंट का शीर्षक:", + "label_no_data": "कोई डेटा मौजूद नहीं", + "label_download_speed": "डाउनलोड की गति", + "label_latency": "Latency", + "label_server": "सर्वर", + "label_run_test": "Run Test", + "label_testing": "परीक्षण...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "कोई कंटेनर नहीं", + "label_docker_unavailable": "Docker उपलब्ध नहीं है", + "label_no_command": "कोई आदेश कॉन्फ़िगर नहीं किया गया", + "label_no_output": "अभी तक कोई आउटपुट नहीं", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "प्रीसेट सहेजें", + "label_load_preset": "Load Preset", + "label_preset_name": "पूर्व निर्धारित नाम:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "स्वतः व्यवस्थित करें", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 कॉलम (समान)", + "label_2col_wide": "2 कॉलम (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "विजेट समूह", + "ungroup_widgets": "विजेट्स को अनग्रुप करें", + "group_widgets": "समूह चयनित विजेट", + "snap_layouts": "स्नैप लेआउट", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "ऊपर-बाएँ स्नैप करें", + "snap_top_right": "स्नैप टॉप-राइट", + "snap_bottom_left": "नीचे-बाएँ स्नैप करें", + "snap_bottom_right": "स्नैप बॉटम-राइट", + "aero_shake": "दूसरों को छोटा करने के लिए हिलाएँ", + "zone_resize": "क्षेत्रों का आकार बदलने के लिए बॉर्डर खींचें", + "zone_borders": "खींचने योग्य क्षेत्र सीमाएँ", + "app_drawer": "Applications", + "search_apps": "ऐप्स खोजें...", + "edit_shortcuts": "शॉर्टकट संपादित करें", + "widgets": "विजेट", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "साइन इन करने के लिए कहीं भी क्लिक करें या कुंजी दबाएँ", + "username_placeholder": "उपयोगकर्ता नाम", + "password_placeholder": "पासवर्ड", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "दो-कारक प्रमाणीकरण", + "totp_subtitle": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", + "back_to_login": "लॉगिन पर वापस जाएं", + "fill_all_fields": "कृपया सभी स्थानों को भरें", + "invalid_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड", + "invalid_code": "अवैध सत्यापन संकेत", + "enter_6_digits": "सभी 6 अंक दर्ज करें", + "network_error": "Network error — check your connection", + "session_expired": "सत्र समाप्त हुआ। कृपया पुनः साइन इन करें." + }, + "tokens": { + "title": "डिवाइस टोकन", + "subtitle": "स्वचालित डिवाइस प्रावधान के लिए नामांकन टोकन प्रबंधित करें", + "enrollment_mode": "नामांकन मोड", + "mode_open": "खुला", + "mode_open_desc": "कोई भी उपकरण बिना टोकन के पंजीकरण कर सकता है", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "कुल टोकन", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "टोकन खोजें...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "थोक में उत्पन्न करें", + "create": "टोकन बनाएं", + "edit": "टोकन संपादित करें", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "बनाया था", + "actions": "Actions", + "name_placeholder": "जैसे ऑफिस पीसी बैच", + "max_uses": "Max Uses", + "max_uses_hint": "0 = असीमित", + "expires_in": "Expires In", + "no_expiration": "कोई समय समाप्ति नहीं", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "इस टोकन के बारे में वैकल्पिक नोट...", + "count": "Count", + "count_range": "उत्पन्न करने के लिए टोकन की संख्या (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "टोकन बनाया गया", + "tokens_generated": "टोकन जनरेट किए गए", + "copy_warning": "अब टोकन कॉपी करें. इसे दोबारा नहीं दिखाया जाएगा.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "क्या आप वाकई इस टोकन को रद्द करना चाहते हैं? इससे पहले से पंजीकृत डिवाइस प्रभावित नहीं होंगे।", + "revoked_success": "टोकन सफलतापूर्वक निरस्त कर दिया गया", + "no_tokens": "कोई टोकन नहीं मिला", + "expired": "Expired", + "never": "Never", + "save": "बचाना", + "cancel": "रद्द करना", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "अगला", + "prev": "Previous", + "skip": "Skip", + "finish": "खत्म करना", + "close": "बंद करना", + "step_of": "{total} का {current}", + "console_sidebar_title": "नेविगेशन साइडबार", + "console_sidebar_text": "यहां से सभी मॉड्यूल तक पहुंचें। उस अनुभाग पर नेविगेट करने के लिए किसी भी आइकन पर क्लिक करें। साइडबार आपके स्क्रीन आकार के अनुरूप होता है।", + "console_expand_title": "साइडबार का विस्तार करें", + "console_expand_text": "साइडबार का विस्तार करने और सभी नेविगेशन आइटमों के लिए पूर्ण लेबल देखने के लिए यहां क्लिक करें। संक्षिप्त करने के लिए पुनः क्लिक करें.", + "console_search_title": "त्वरित खोज", + "console_search_text": "डिवाइस, सेटिंग्स या कार्रवाइयों को शीघ्रता से खोजें। कीबोर्ड शॉर्टकट के लिए Ctrl+K दबाएँ।", + "console_dashboard_title": "डैशबोर्ड", + "console_dashboard_text": "आपका सेंट्रल हब सर्वर स्थिति, ऑनलाइन डिवाइस और त्वरित कार्रवाइयां दिखा रहा है। एक नज़र में महत्वपूर्ण मैट्रिक्स पर नज़र रखें।", + "console_devices_title": "डिवाइस प्रबंधन", + "console_devices_text": "सभी कनेक्टेड डिवाइस देखें, खोजें और प्रबंधित करें। स्थिति के आधार पर फ़िल्टर करें, टैग निर्दिष्ट करें और अलग-अलग डिवाइस सेटिंग्स कॉन्फ़िगर करें।", + "console_settings_title": "सेटिंग्स", + "console_settings_text": "सर्वर व्यवहार, सुरक्षा विकल्प, ब्रांडिंग और उपयोगकर्ता प्रबंधन कॉन्फ़िगर करें। अपनी आवश्यकताओं के अनुरूप BetterDesk को अनुकूलित करें।", + "console_desktop_title": "डेस्कटॉप मोड", + "console_desktop_text": "विजेट्स के साथ विंडो वाले कार्यक्षेत्र के लिए डेस्कटॉप मोड पर स्विच करें। मल्टी-टास्किंग और मॉनिटरिंग डैशबोर्ड के लिए बिल्कुल सही।", + "console_complete_title": "आप तैयार हैं!", + "console_complete_text": "सभी सुविधाओं को खोजने के लिए साइडबार श्रेणियों का अन्वेषण करें। इस गाइड को पुनः आरंभ करने के लिए किसी भी समय सहायता आइकन पर क्लिक करें।", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "शीर्ष बार घड़ी, त्वरित नियंत्रण और ऐप ड्रॉअर तक पहुंच दिखाता है। सभी ऐप्स ब्राउज़ करने के लिए ग्रिड आइकन पर क्लिक करें।", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "किसी भी कंसोल फ़ंक्शन को फ़्लोटिंग विंडो के रूप में खोजने और लॉन्च करने के लिए ऐप ड्रॉअर खोलें। ऐप्स को श्रेणी के अनुसार व्यवस्थित किया जाता है।", + "desktop_widgets_title": "विजेट डैशबोर्ड", + "desktop_widgets_text": "आपका अनुकूलन योग्य कार्यक्षेत्र. विजेट लाइव जानकारी प्रदर्शित करते हैं और सुविधाओं तक त्वरित पहुंच प्रदान करते हैं। पुनर्व्यवस्थित करने के लिए खींचें.", + "desktop_add_widget_title": "विजेट जोड़ें", + "desktop_add_widget_text": "उपलब्ध विजेट ब्राउज़ करने के लिए यहां क्लिक करें। मॉनिटरिंग डिस्प्ले, डिवाइस सूची, नोट्स और बहुत कुछ में से चुनें।", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "खुले ऐप्स यहां दिखाई देते हैं. विंडोज़ को फ़ोकस करने या छोटा करने के लिए क्लिक करें। ऐप लेबल देखने के लिए आइकन पर होवर करें।", + "desktop_snap_title": "स्नैप लेआउट", + "desktop_snap_text": "विंडोज़ को स्थिति में लाने के लिए उन्हें स्क्रीन के किनारों पर खींचें, या लेआउट प्रीसेट के लिए अधिकतम बटन पर होवर करें। एयरो शेक आज़माएँ!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "ऐप्स खींचने योग्य, आकार बदलने योग्य विंडो में खुलते हैं। शीर्षक पट्टी से छोटा करें, अधिकतम करें या बंद करें। विजेट्स के ऊपर Windows परत।", + "desktop_search_title": "त्वरित खोज", + "desktop_search_text": "सभी डिवाइस, पेज और सेटिंग्स में खोजें। तुरंत खोज खोलने के लिए कहीं भी Ctrl+K दबाएँ।", + "desktop_complete_title": "डेस्कटॉप मोड तैयार!", + "desktop_complete_text": "ड्रॉअर से ऐप्स खोलने और विंडोज़ को साथ-साथ व्यवस्थित करने का प्रयास करें। त्वरित डैशबोर्ड लेआउट के लिए विजेट प्रीसेट का उपयोग करें।", + "devices_folders_title": "डिवाइस फ़ोल्डर", + "devices_folders_text": "डिवाइसों को फ़ोल्डरों में व्यवस्थित करें. सूची को फ़िल्टर करने के लिए किसी फ़ोल्डर पर क्लिक करें। नाम बदलने या हटाने के लिए राइट-क्लिक करें।", + "devices_search_title": "खोजें एवं फ़िल्टर करें", + "devices_search_text": "आईडी, होस्टनाम या प्लेटफ़ॉर्म के आधार पर खोजें। स्टेटस पिल्स का उपयोग केवल ऑनलाइन, ऑफलाइन या सभी डिवाइस पर दिखाने के लिए करें।", + "devices_table_title": "डिवाइस सूची", + "devices_table_text": "विवरण के लिए किसी भी डिवाइस पंक्ति पर क्लिक करें। कनेक्ट करने, टैग संपादित करने या हटाने जैसी त्वरित कार्रवाइयों के लिए दाईं ओर कबाब मेनू का उपयोग करें।", + "devices_complete_title": "डिवाइस प्रबंधन तैयार!", + "devices_complete_text": "डिवाइसों को व्यवस्थित करने के लिए उन्हें फ़ोल्डरों के बीच खींचें। किसी डिवाइस का विवरण पैनल खोलने के लिए उस पर डबल-क्लिक करें।", + "settings_tabs_title": "सेटिंग्स श्रेणियाँ", + "settings_tabs_text": "सामान्य, सुरक्षा, उपस्थिति और अन्य कॉन्फ़िगरेशन अनुभागों के बीच नेविगेट करें।", + "settings_content_title": "विन्यास", + "settings_content_text": "प्रत्येक अनुभाग में विशिष्ट सर्वर और कंसोल सेटिंग्स शामिल हैं। जब आप सहेजें पर क्लिक करते हैं तो परिवर्तन सहेजे जाते हैं।", + "settings_complete_title": "सेटिंग्स अवलोकन", + "settings_complete_text": "2FA, API कुंजियों और उपयोगकर्ता प्रबंधन के लिए सुरक्षा सेटिंग्स की जाँच करें। कंसोल लुक को कस्टमाइज़ करने के लिए Appearance पर जाएँ।", + "help": "सहायता एवं ट्यूटोरियल", + "tour_console": "कंसोल टूर", + "tour_desktop": "डेस्कटॉप मोड टूर", + "tour_devices": "डिवाइस टूर", + "tour_settings": "सेटिंग टूर", + "reset_all": "सभी ट्यूटोरियल रीसेट करें", + "tour_remote": "दूरस्थ सत्र यात्रा", + "tour_organization": "संगठन सेटअप", + "tour_cdap": "CDAP सिंहावलोकन", + "tour_chat": "चैट की मूल बातें", + "remote_toolbar_title": "रिमोट टूलबार", + "remote_toolbar_text": "टूलबार से डिस्प्ले नियंत्रण, क्लिपबोर्ड सिंक, विशेष कुंजी और गुणवत्ता सेटिंग्स तक पहुंचें। F11 के साथ फुलस्क्रीन टॉगल करें।", + "remote_canvas_title": "रिमोट डिस्प्ले", + "remote_canvas_text": "यह रिमोट स्क्रीन है. रिमोट डिवाइस को नियंत्रित करना शुरू करने के लिए अंदर क्लिक करें। माउस और कीबोर्ड इनपुट स्वचालित रूप से अग्रेषित किए जाते हैं।", + "remote_clipboard_title": "क्लिपबोर्ड सिंक", + "remote_clipboard_text": "अपने कंप्यूटर और रिमोट डिवाइस के बीच टेक्स्ट को कॉपी और पेस्ट करें। रिमोट डिस्प्ले पर ध्यान केंद्रित करते समय सामान्य रूप से Ctrl+C/Ctrl+V का उपयोग करें।", + "remote_complete_title": "दूरस्थ सत्र तैयार!", + "remote_complete_text": "विशेष कुंजियों (Ctrl+Alt+Del, PrintScreen) और मॉनिटर स्विचिंग के लिए टूलबार बटन का उपयोग करें। सत्र समाप्त करने के लिए एस्केप दबाएँ या डिस्कनेक्ट पर क्लिक करें।", + "org_overview_title": "संगठनों", + "org_overview_text": "संगठन आपको उपयोगकर्ताओं, उपकरणों और नीतियों को समूहीकृत करने देते हैं। प्रत्येक संगठन का अपना व्यवस्थापक, ऑपरेटर और सेटिंग्स होती हैं।", + "org_create_title": "संगठन बनाएं", + "org_create_text": "नया संगठन बनाने के लिए यहां क्लिक करें. एक नाम, स्लग और वैकल्पिक विवरण प्रदान करें। आप नये संगठन के स्वामी होंगे।", + "org_members_title": "सदस्यों को प्रबंधित करें", + "org_members_text": "उपयोगकर्ताओं को ईमेल द्वारा आमंत्रित करें, भूमिकाएँ निर्दिष्ट करें (व्यवस्थापक, ऑपरेटर, उपयोगकर्ता), और पहुंच प्रबंधित करें। सदस्य अपने संगठन को सौंपे गए उपकरण देख सकते हैं।", + "org_devices_title": "डिवाइस असाइन करें", + "org_devices_text": "संगठन में उपकरण जोड़ें. यहां असाइन किए गए उपकरण संगठन की नीतियों को प्राप्त करेंगे और इसके सदस्यों को दिखाई देंगे।", + "org_policies_title": "संगठन नीतियाँ", + "org_policies_text": "संगठन के लिए पासवर्ड आवश्यकताएं, सत्र टाइमआउट, 2एफए प्रवर्तन और डिवाइस नामांकन नियम जैसी सुरक्षा नीतियां निर्धारित करें।", + "org_complete_title": "संगठन सेटअप पूर्ण!", + "org_complete_text": "संगठन के दायरे वाले प्रबंधन का उपयोग शुरू करने के लिए अपनी टीम को आमंत्रित करें और डिवाइस असाइन करें। नीतियाँ सभी सदस्यों पर स्वचालित रूप से लागू होती हैं।", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "संपर्क एवं समूह", + "chat_contacts_text": "अपने संपर्क और चैट समूह देखें. वार्तालाप खोलने के लिए किसी भी संपर्क पर क्लिक करें। हरे बिंदु ऑनलाइन उपयोगकर्ताओं को दर्शाते हैं।", + "chat_send_title": "संदेश भेजें", + "chat_send_text": "अपना संदेश टाइप करें और भेजने के लिए Enter दबाएँ। जब दोनों पक्ष E2E का समर्थन करते हैं तो संदेश एंड-टू-एंड एन्क्रिप्टेड होते हैं।", + "chat_file_title": "फ़ाइलें साझा करें", + "chat_file_text": "फ़ाइलें साझा करने के लिए अनुलग्नक आइकन पर क्लिक करें. फ़ाइलें एन्क्रिप्टेड हैं और 50 एमबी तक हो सकती हैं।", + "chat_complete_title": "चैट तैयार!", + "chat_complete_text": "वास्तविक समय में ऑपरेटरों और अंतिम उपयोगकर्ताओं के साथ चैट करें। टीम संचार के लिए समूह बनाएं. सभी संदेश पढ़ने की रसीदों का समर्थन करते हैं।", + "disable_tutorials": "ट्यूटोरियल अक्षम करें", + "enable_tutorials": "ट्यूटोरियल सक्षम करें" + }, + "help_request": { + "title": "सहायता अनुरोध", + "subtitle": "डेस्कटॉप क्लाइंट से आने वाले सहायता अनुरोध प्रबंधित करें", + "new_request": "नया सहायता अनुरोध", + "device": "उपकरण", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "कोई सहायता अनुरोध नहीं", + "notification": "से सहायता अनुरोध प्राप्त हुआ", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "संगठनों", + "create": "संगठन बनाएं", + "edit": "संगठन संपादित करें", + "detail": "संगठन विवरण", + "name": "Name", + "slug": "स्लग (URL-सुरक्षित)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "उपकरण", + "invitations": "Invitations", + "settings": "सेटिंग्स", + "add_user": "Add User", + "assign_device": "डिवाइस असाइन करें", + "create_invitation": "निमंत्रण बनाएँ", + "delete_confirm": "इस संगठन को हटाएं? यह सभी संबद्ध उपयोगकर्ताओं, उपकरणों और सेटिंग्स को हटा देगा।", + "no_orgs": "अभी तक कोई संगठन नहीं", + "no_orgs_hint": "उपकरणों और उपयोगकर्ताओं का प्रबंधन शुरू करने के लिए अपना पहला संगठन बनाएं।", + "connection_policy": "कनेक्शन नीति", + "allow_file_transfer": "फ़ाइल स्थानांतरण की अनुमति दें", + "allow_clipboard": "क्लिपबोर्ड को अनुमति दें", + "max_session_duration": "अधिकतम सत्र अवधि (न्यूनतम)", + "role_owner": "Owner", + "role_admin": "व्यवस्थापक", + "role_operator": "Operator", + "role_user": "सदस्य", + "username": "उपयोगकर्ता नाम", + "password": "पासवर्ड", + "display_name": "प्रदर्शित होने वाला नाम", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "डिवाइस आईडी", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "निर्दिष्ट उपयोगकर्ता", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "इस संगठन में कोई उपयोगकर्ता नहीं.", + "no_devices": "इस संगठन को कोई उपकरण नहीं सौंपा गया है.", + "no_invitations": "कोई निमंत्रण नहीं.", + "user_added": "User added", + "user_removed": "उपयोगकर्ता हटा दिया गया", + "user_updated": "उपयोगकर्ता भूमिका अद्यतन की गई", + "device_assigned": "डिवाइस असाइन किया गया", + "device_unassigned": "डिवाइस अनअसाइन किया गया", + "invitation_created": "निमंत्रण बनाया गया", + "settings_saved": "सेटिंग्स को सहेजा गया", + "org_deleted": "संगठन हटा दिया गया", + "confirm_remove_user": "इस उपयोगकर्ता को संगठन से निकालें?", + "confirm_unassign_device": "क्या आप इस डिवाइस को संगठन से अनअसाइन करना चाहते हैं?", + "confirm_delete_org": "इस संगठन और सभी संबद्ध डेटा को हटाएं?", + "edit_role": "भूमिका संपादित करें", + "raw_settings": "कच्ची सेटिंग्स", + "key": "Key", + "value": "Value", + "save": "सेटिंग्स सेव करें", + "policy_unattended": "अप्राप्य (तत्काल)", + "policy_attended": "उपस्थित हुए (पुष्टि के साथ)", + "policy_ask": "Always ask", + "expires_hours": "समाप्ति (घंटे)", + "loading_failed": "संगठन डेटा लोड करने में विफल", + "name_slug_required": "नाम और स्लग आवश्यक है", + "org_created": "संगठन बनाया गया", + "org_updated": "संगठन अद्यतन किया गया", + "create_new_user": "नया निर्माण", + "add_existing_user": "मौजूदा जोड़ें", + "none_available": "none", + "select_user": "उपयोगकर्ता का चयन करें", + "org_role": "संगठन की भूमिका", + "link_user_hint": "चयनित उपयोगकर्ता को उनके सर्वर खाता क्रेडेंशियल का उपयोग करके इस संगठन से जोड़ा जाएगा।", + "no_available_users": "सभी सर्वर उपयोगकर्ता पहले से ही इस संगठन से जुड़े हुए हैं।", + "user_linked": "उपयोगकर्ता संगठन से जुड़ा हुआ है" + }, + "chat": { + "e2e_enabled": "एंड-टू-एंड एन्क्रिप्टेड", + "e2e_establishing": "सुरक्षित चैनल स्थापित किया जा रहा है...", + "e2e_established": "सुरक्षित चैनल स्थापित", + "e2e_unsupported": "इस ब्राउज़र में E2E एन्क्रिप्शन समर्थित नहीं है", + "typing_indicator": "टाइपिंग...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "फ़ाइल", + "file_too_large": "फ़ाइल बहुत बड़ी है (अधिकतम 50एमबी)", + "file_encrypted": "एन्क्रिप्टेड फ़ाइल स्थानांतरण", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "सुरक्षा कुंजियाँ घुमाई गईं", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "समूह", + "no_contacts": "अभी तक कोई संपर्क नहीं", + "no_groups": "अभी तक कोई समूह नहीं", + "no_messages": "अभी तक कोई संदेश नहीं", + "no_results": "कोई परिणाम नहीं मिला", + "select_conversation": "चैटिंग शुरू करने के लिए एक वार्तालाप चुनें", + "type_message": "एक संदेश टाइप करें...", + "send": "भेजना", + "attach_file": "फ़ाइल जोड़ें", + "emoji": "Emoji", + "search_messages": "संदेश खोजें", + "create_group": "समूह बनाना", + "group_name": "समूह नाम", + "group_members": "सदस्यों", + "cancel": "रद्द करना", + "create": "बनाएं", + "members": "सदस्यों", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "संपर्क एवं संदेश खोजें", + "select_conversation_hint": "संदेश देखने के लिए कोई वार्तालाप चुनें", + "info": "Info", + "group_name_placeholder": "समूह का नाम दर्ज करें" + }, + "toast": { + "device_connected": "डिवाइस कनेक्ट किया गया", + "device_disconnected": "डिवाइस डिस्कनेक्ट किया गया", + "session_started": "दूरस्थ सत्र प्रारंभ हुआ", + "session_ended": "दूरस्थ सत्र समाप्त हो गया", + "file_upload_complete": "फ़ाइल अपलोड पूर्ण", + "settings_saved": "सेटिंग्स को सहेजा गया", + "error_generic": "एक त्रुटि पाई गई", + "connection_lost": "कनेक्शन टूट गया", + "reconnecting": "पुनः कनेक्ट हो रहा है..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "व्यवस्थापक उपयोगिताएँ और निदान उपकरण", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "भेजना", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "पाठ दर्ज करें...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "सर्वर जाओ", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "होस्ट की पहुंच योग्यता और विलंबता की जांच करें", + "tcp_title": "TCP पोर्ट जांच", + "tcp_desc": "TCP पोर्ट कनेक्टिविटी का परीक्षण करें", + "ssl_title": "एसएसएल इंस्पेक्टर", + "ssl_desc": "SSL/TLS प्रमाणपत्र विवरण का निरीक्षण करें", + "http_title": "HTTP स्वास्थ्य जांच", + "http_desc": "HTTP समापन बिंदु स्थिति सत्यापित करें", + "dns_title": "DNS Lookup", + "dns_desc": "होस्टनाम को आईपी पते पर हल करें", + "whois_title": "DNS Records", + "whois_desc": "क्वेरी ए, एएएए, एमएक्स, टीएक्सटी, एनएस रिकॉर्ड", + "speed_title": "Speed Test", + "speed_desc": "डाउनलोड बैंडविड्थ मापें", + "run_speed_test": "स्पीड टेस्ट चलाएँ", + "wol_title": "Wake-on-LAN", + "wol_desc": "किसी डिवाइस को जगाने के लिए जादुई पैकेट भेजें", + "wol_sent": "जादुई पैकेट भेजा गया", + "hash_title": "हैश जेनरेटर", + "hash_desc": "क्रिप्टोग्राफ़िक हैश उत्पन्न करें", + "password_title": "पासवर्ड जेनरेटर", + "password_desc": "एक सुरक्षित यादृच्छिक पासवर्ड उत्पन्न करें", + "jwt_title": "JWT Decoder", + "jwt_desc": "JSON वेब टोकन को डिकोड और निरीक्षण करें", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 डेटा को एनकोड या डीकोड करें", + "url_title": "URL Encoder", + "url_desc": "URL घटकों को एनकोड या डीकोड करें", + "processes_title": "प्रक्रिया सूची", + "processes_desc": "चल रही सिस्टम प्रक्रियाएँ देखें", + "disk_title": "Disk Usage", + "disk_desc": "डिस्क विभाजन उपयोग देखें", + "db_title": "डेटाबेस आँकड़े", + "db_desc": "डेटाबेस तालिका आँकड़े देखें", + "docker_title": "Docker कंटेनर", + "docker_desc": "चल रहे Docker कंटेनर देखें", + "logs_title": "Log Viewer", + "logs_desc": "हालिया लॉग आउटपुट देखें", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "से मान्य", + "valid_to": "मान्य के लिए", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "कोई डेटा मौजूद नहीं", + "no_docker": "कोई Docker कंटेनर नहीं मिला या Docker उपलब्ध नहीं है", + "no_logs": "कोई लॉग लाइन उपलब्ध नहीं है" + }, + "policies": { + "title": "संगठन नीतियाँ", + "subtitle": "अपने संगठनों के लिए सुरक्षा, कनेक्शन और सुविधा नीतियां प्रबंधित करें", + "select_org": "संगठन", + "select_org_placeholder": "एक संगठन चुनें...", + "select_org_first": "पॉलिसी ऑडिट लॉग देखने के लिए एक संगठन का चयन करें।", + "configured": "Configured", + "connection_title": "कनेक्शन नीति", + "connection_desc": "नियंत्रित करें कि दूरस्थ सत्र कैसे स्थापित किए जाते हैं", + "connection_mode": "संपर्क मोड", + "mode_attended": "भाग लिया (उपयोगकर्ता अनुमोदन की आवश्यकता है)", + "mode_unattended": "अप्राप्य (हमेशा अनुमति दें)", + "mode_ask": "Always Ask", + "max_session": "अधिकतम सत्र अवधि (मिनट)", + "idle_lock": "निष्क्रिय लॉक टाइमआउट (मिनट)", + "wallpaper_policy": "सत्र के दौरान वॉलपेपर", + "wallpaper_show": "Show", + "wallpaper_hide_session": "सत्र के दौरान छुपें", + "wallpaper_hide_always": "Always hide", + "features_title": "फ़ीचर नीति", + "features_desc": "उपकरणों के लिए विशिष्ट सुविधाओं को सक्षम या अक्षम करें", + "allow_file_transfer": "फ़ाइल स्थानांतरण की अनुमति दें", + "allow_clipboard": "क्लिपबोर्ड सिंक की अनुमति दें", + "allow_audio": "ऑडियो स्ट्रीमिंग की अनुमति दें", + "allow_recording": "सत्र रिकॉर्डिंग की अनुमति दें", + "security_title": "सुरक्षा नीति", + "security_desc": "संगठन उपकरणों के लिए सुरक्षा आवश्यकताओं को लागू करें", + "require_2fa": "अनअटेंडेड एक्सेस के लिए 2FA की आवश्यकता है", + "password_min_length": "न्यूनतम पासवर्ड लंबाई", + "password_require_special": "विशेष वर्णों की आवश्यकता है", + "password_max_age": "पासवर्ड अधिकतम आयु (दिन, 0=कभी नहीं)", + "allowed_operators": "स्वीकृत ऑपरेटर भूमिकाएँ (अल्पविराम से अलग)", + "network_title": "नेटवर्क नीति", + "network_desc": "रिले सर्वर और सीधे कनेक्शन को नियंत्रित करें", + "block_direct_p2p": "ब्लॉक डायरेक्ट पी2पी (बल रिले)", + "allowed_relays": "अनुमत रिले सर्वर (प्रति पंक्ति एक)", + "ip_allowlist": "आईपी ​​अनुमति सूची (सीआईडीआर, प्रति पंक्ति एक)", + "update_title": "अद्यतन नीति", + "update_desc": "स्वचालित अपडेट और अपडेट चैनल नियंत्रित करें", + "auto_update": "ऑटो-अपडेट सक्षम करें", + "update_channel": "चैनल अपडेट करें", + "audit_title": "नीति परिवर्तन", + "audit_desc": "हालिया नीति परिवर्तन का इतिहास", + "no_audit": "कोई नीति परिवर्तन दर्ज नहीं किया गया.", + "save_success": "नीति सफलतापूर्वक सहेजी गई", + "save_failed": "पॉलिसी सहेजने में विफल", + "load_failed": "नीतियां लोड करने में विफल", + "block_direct_p2p_hint": "इस संगठन के डिवाइस पर लागू होता है। वैश्विक डिफ़ॉल्ट सेटिंग → कनेक्शन रणनीति में है।" + }, + "attestation": { + "title": "डिवाइस सत्यापन", + "subtitle": "डिवाइस पहचान सत्यापन और हार्डवेयर फ़िंगरप्रिंट की निगरानी करें", + "verified": "Verified", + "pending": "Pending", + "failed": "असफल", + "device_list": "डिवाइस सत्यापन रिकॉर्ड", + "device_list_desc": "हार्डवेयर फ़िंगरप्रिंट और पहचान सत्यापन स्थिति", + "col_device": "डिवाइस आईडी", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "कोई प्रमाणित अभिलेख नहीं मिला.", + "verify_success": "डिवाइस को सत्यापित के रूप में चिह्नित किया गया", + "verify_failed": "डिवाइस सत्यापित करने में विफल", + "revoke_success": "डिवाइस सत्यापन निरस्त कर दिया गया", + "revoke_failed": "सत्यापन रद्द करने में विफल" + }, + "fleet": { + "title": "बेड़ा प्रबंधन", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "वर्कफ़्लो बिल्डर", + "tab_compliance": "Compliance", + "res_title": "संसाधन मानचित्रण", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "नेटवर्क ड्राइव", + "res_type_dns": "DNS सर्वर", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "संसाधन जोड़ें", + "res_name": "संसाधन का नाम", + "res_type": "Type", + "res_address": "पता/पथ", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "संगठन", + "res_scope_group": "समूह", + "res_scope_device": "उपकरण", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "कोई संसाधन नहीं मिला. एक बनाने के लिए 'संसाधन जोड़ें' पर क्लिक करें।", + "res_confirm_delete": "क्या आप वाकई इस संसाधन को हटाना चाहते हैं?", + "task_title": "कार्य अनुसूचक", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "असफल", + "task_search": "Search tasks…", + "task_create": "कार्य बनाएँ", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "अद्यतन", + "task_type_restart": "पुनः आरंभ करें", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "डिवाइस आईडी या समूह के नाम, अल्पविराम से अलग किए गए", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "अनुसूची मूल्य", + "task_script": "स्क्रिप्ट/कमांड", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "कोई कार्य नहीं मिला. आरंभ करने के लिए 'कार्य बनाएं' पर क्लिक करें।", + "task_confirm_delete": "क्या आप वाकई इस कार्य को हटाना चाहते हैं?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "विज़ुअल वर्कफ़्लो बिल्डर", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "बचाना", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "इसके गुणों को संपादित करने के लिए एक नोड का चयन करें।", + "builder_node_trigger_manual": "मैनुअल ट्रिगर", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "इवेंट ट्रिगर", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "एसवीसी पुनः आरंभ करें", + "builder_node_action_file_deploy": "फ़ाइल तैनात करें", + "builder_node_action_message": "मेसेज भेजें", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "अलर्ट भेजें", + "builder_node_result_chain": "चेन वर्कफ़्लो", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "वर्कफ़्लो नाम:", + "comp_title": "सॉफ्टवेयर अनुपालन", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "उपकरण", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "इस डिवाइस पर स्वचालित उपचार चलाएँ?", + "comp_no_data": "कोई अनुपालन डेटा उपलब्ध नहीं है. आरंभ करने के लिए स्कैन चलाएँ.", + "save": "बचाना", + "cancel": "रद्द करना", + "close": "बंद करना", + "edit": "संपादन करना", + "delete": "मिटाना", + "actions": "Actions", + "all_orgs": "सभी संगठन", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "नेटवर्क ड्राइव", + "type_dns": "DNS सर्वर", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "संसाधन जोड़ें", + "edit_resource": "संसाधन संपादित करें", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "पता/पथ", + "scope_org": "संगठन", + "scope_group": "समूह", + "scope_device": "उपकरण", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?", + "all_statuses": "सभी क़ानून", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "असफल", + "search_tasks": "Search tasks�", + "create_task": "कार्य बनाएँ", + "edit_task": "कार्य संपादित करें", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "फ़ाइल परिनियोजन", + "task_type_registry": "Registry", + "target_devices": "लक्ष्य उपकरण", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "स्क्रिप्ट/कमांड", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "लोड हो रहा है", + "no_output": "कोई आउटपुट उपलब्ध नहीं है", + "error_loading": "डेटा लोड करने में त्रुटि", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "मैनुअल ट्रिगर", + "node_schedule": "Schedule", + "node_event": "इवेंट ट्रिगर", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "एसवीसी पुनः आरंभ करें", + "node_file_deploy": "फ़ाइल तैनात करें", + "node_send_message": "मेसेज भेजें", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "अलर्ट भेजें", + "node_chain": "चेन वर्कफ़्लो", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "सभी संगठन", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "उपकरण", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "इस डिवाइस पर स्वचालित उपचार चलाएँ?" + }, + "scaling": { + "title": "स्केलिंग एवं रिले प्रबंधन", + "tab_overview": "सिंहावलोकन", + "tab_relays": "Relay Nodes", + "tab_rules": "असाइनमेंट नियम", + "tab_capacity": "क्षमता की योजना बनाना", + "arch_title": "नेटवर्क आर्किटेक्चर", + "arch_loading": "आर्किटेक्चर आरेख लोड हो रहा है...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "कुल उपकरण", + "stat_active_sessions": "सक्रिय सत्र", + "stat_bandwidth": "कुल बैंडविड्थ", + "relay_health": "रिले स्वास्थ्य", + "no_relays": "कोई रिले नोड कॉन्फ़िगर नहीं किया गया. लोड वितरित करने के लिए अपना पहला रिले नोड जोड़ें।", + "relay_search": "रिले खोजें...", + "relay_add": "रिले नोड जोड़ें", + "relay_edit": "रिले नोड संपादित करें", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "उपकरण", + "col_sessions": "सत्र", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "लक्ष्य रिले", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "सक्रिय", + "status_disabled": "अक्षम", + "confirm_delete_relay": "क्या आप वाकई इस रिले नोड को हटाना चाहते हैं?", + "confirm_delete_rule": "क्या आप वाकई इस असाइनमेंट नियम को हटाना चाहते हैं?", + "rules_hint": "असाइनमेंट नियम यह निर्धारित करते हैं कि कौन सा रिले सर्वर विशिष्ट डिवाइस समूहों को संभालता है। नियमों का मूल्यांकन प्राथमिकता (सबसे पहले सबसे कम) के आधार पर किया जाता है।", + "rule_add": "Add Rule", + "rule_edit": "नियम संपादित करें", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "डिवाइस समूह", + "match_tag": "डिवाइस टैग", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "मास्टर सर्वर", + "fallback_nearest": "निकटतम रिले", + "relay_max_sessions": "अधिकतम सत्र", + "relay_max_bandwidth": "अधिकतम बैंडविड्थ (एमबीपीएस)", + "cap_tiers": "क्षमता स्तर", + "cap_loading": "क्षमता डेटा लोड हो रहा है...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "कोई सिफ़ारिशें उपलब्ध नहीं.", + "cap_planning": "बुनियादी ढाँचा योजना", + "cap_config": "विन्यास", + "cap_max_devices": "अधिकतम उपकरण", + "cap_max_sessions": "अधिकतम सत्र", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "डिवाइस की क्षमता", + "cap_tier_sessions": "सत्र क्षमता", + "cap_tier_bandwidth": "बैंडविड्थ क्षमता", + "cap_single_sqlite": "एकल सर्वर (SQLite)", + "cap_single_pg": "एकल सर्वर (PostgreSQL)", + "cap_master_3": "मास्टर + 3 रिले", + "cap_master_10": "मास्टर + 10 रिले", + "rec_no_relays": "कोई रिले नोड कॉन्फ़िगर नहीं किया गया. बेहतर प्रदर्शन और अतिरेक के लिए रिले नोड्स जोड़ने पर विचार करें।", + "rec_devices_high": "डिवाइस का उपयोग अधिक है. लोड वितरित करने के लिए अधिक रिले नोड्स जोड़ने पर विचार करें।", + "rec_sessions_high": "सत्र क्षमता अपनी सीमा के करीब पहुंच रही है. रिले इंफ्रास्ट्रक्चर को अपग्रेड करने पर विचार करें।", + "rec_cpu_high": "कुछ रिले नोड उच्च CPU उपयोग की रिपोर्ट करते हैं। भार संतुलन या क्षमता उन्नयन पर विचार करें।", + "rec_all_good": "सभी सिस्टम सामान्य मापदंडों के भीतर काम कर रहे हैं। किसी कार्रवाई की आवश्यकता नहीं है.", + "save": "बचाना", + "cancel": "रद्द करना", + "edit": "संपादन करना", + "delete": "मिटाना", + "close": "बंद करना", + "no_rules": "कोई असाइनमेंट नियम नहीं.", + "relays_info_banner": "यह सूची सूचनात्मक है. वास्तव में क्लाइंट द्वारा उपयोग किए जाने वाले रिले सर्वर BetterDesk सर्वर पर RELAY_SERVERS पर्यावरण चर के माध्यम से कॉन्फ़िगर किए जाते हैं।", + "relay_name_address_required": "नाम और पता आवश्यक है.", + "relay_save_failed": "रिले नोड सहेजने में विफल.", + "relay_delete_failed": "रिले नोड को हटाने में विफल.", + "relay_saved": "रिले नोड सहेजा गया.", + "relay_deleted": "रिले नोड हटा दिया गया.", + "rule_name_value_required": "नियम का नाम और मिलान मान आवश्यक है.", + "rule_save_failed": "नियम सहेजने में विफल.", + "rule_delete_failed": "नियम हटाने में विफल.", + "rule_saved": "नियम सहेजा गया.", + "rule_deleted": "नियम हटा दिया गया." + }, + "cross_platform": { + "title": "क्रॉस-प्लेटफ़ॉर्म संगतता", + "tab_matrix": "अनुकूलता मैट्रिक्स", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "सभी समर्थित प्लेटफ़ॉर्म पर फ़ीचर समर्थन मैट्रिक्स। हरा = पूर्ण समर्थन, पीला = आंशिक, ग्रे = उपलब्ध नहीं, नीला = नियोजित।", + "col_feature": "Feature", + "legend_full": "पूर्ण समर्थन", + "legend_partial": "आंशिक समर्थन", + "legend_none": "उपलब्ध नहीं है", + "legend_planned": "Planned", + "platform_breakdown": "प्लेटफार्म टूटना", + "arch_breakdown": "वास्तुकला का टूटना", + "version_breakdown": "संस्करण टूटना", + "summary": "Summary", + "total_devices": "कुल उपकरण", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "ग्राहक संस्करण", + "no_devices": "अभी तक कोई डिवाइस पंजीकृत नहीं है.", + "protocols_hint": "प्रोटोकॉल क्षमता वार्ता यह सुनिश्चित करती है कि प्रत्येक ग्राहक को केवल वही सुविधाएँ प्राप्त हों जिनका वह समर्थन करता है। सर्वर रिपोर्ट की गई क्षमताओं के आधार पर व्यवहार को अनुकूलित करता है।", + "capability_negotiation": "क्षमता पर बातचीत", + "codec_support": "कोडेक समर्थन (ऑनलाइन डिवाइस)", + "feature_support": "सुविधा समर्थन (ऑनलाइन उपकरण)", + "no_codec_data": "ऑनलाइन उपकरणों से कोई कोडेक डेटा उपलब्ध नहीं है।", + "no_feature_data": "ऑनलाइन उपकरणों से कोई फीचर डेटा उपलब्ध नहीं है।", + "protobuf_schema": "क्लाइंट क्षमताएँ प्रोटोबफ़ स्कीमा", + "diagram_client": "Client", + "diagram_server": "BetterDesk सर्वर", + "diagram_peer": "दूरस्थ सहकर्मी", + "limitations_hint": "प्रत्येक प्लेटफ़ॉर्म की विशिष्ट सीमाएँ होती हैं जो उपलब्ध सुविधाओं को प्रभावित करती हैं। तैनाती की योजना बनाते समय इन बाधाओं की समीक्षा करें।", + "feat_desktop_client": "डेस्कटॉप क्लाइंट", + "feat_background_agent": "पृष्ठभूमि एजेंट", + "feat_remote_target": "दूरस्थ लक्ष्य", + "feat_screen_capture": "स्क्रीन कैप्चर", + "feat_input_injection": "इनपुट इंजेक्शन", + "feat_file_transfer": "दस्तावेज हस्तांतरण", + "feat_clipboard_sync": "क्लिपबोर्ड सिंक", + "feat_audio_streaming": "ऑडियो स्ट्रीमिंग", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "सुरक्षित डेस्कटॉप पर सेवा स्थापना और इनपुट इंजेक्शन के लिए यूएसी उन्नयन आवश्यक है।", + "limit_win_service": "NSSM सेवा के रूप में चलता है; स्थापना के लिए प्रशासकीय विशेषाधिकारों की आवश्यकता है।", + "limit_win_firewall": "Windows फ़ायरवॉल नियमों को रिले कनेक्शन के लिए पोर्ट 21115-21119 की अनुमति देनी चाहिए।", + "limit_linux_wayland": "वेलैंड कंपोजिटर प्रोग्रामेटिक स्क्रीन कैप्चर को प्रतिबंधित करते हैं; पाइपवायर पोर्टल API आवश्यक है।", + "limit_linux_pipewire": "ऑडियो कैप्चर के लिए पाइपवायर की आवश्यकता होती है; पल्सऑडियो फ़ॉलबैक उपलब्ध है लेकिन सीमित है।", + "limit_linux_arm": "ARM64 बिल्ड उपलब्ध है; कुछ कोडेक्स सॉफ़्टवेयर डिकोडिंग (धीमी) का उपयोग कर सकते हैं।", + "limit_mac_screen": "सिस्टम प्राथमिकताएँ > गोपनीयता और सुरक्षा में स्क्रीन रिकॉर्डिंग की अनुमति आवश्यक है।", + "limit_mac_signing": "वितरण के लिए एजेंट को Apple डेवलपर आईडी के साथ हस्ताक्षरित होना चाहिए।", + "limit_mac_notarize": "macOS गेटकीपर (गैर-ऐप स्टोर वितरण) के लिए नोटरीकरण आवश्यक है।", + "limit_android_projection": "मीडियाप्रोजेक्शन API को प्रत्येक स्क्रीन कैप्चर सत्र के लिए उपयोगकर्ता की सहमति की आवश्यकता होती है।", + "limit_android_accessibility": "इनपुट इंजेक्शन के लिए AccessibilityService की आवश्यकता होती है; Android 14+ में प्रतिबंधित।", + "limit_android_battery": "डोज़ मोड द्वारा सीमित पृष्ठभूमि सेवा; बैटरी अनुकूलन छूट की आवश्यकता हो सकती है।", + "limit_ios_capture": "Apple ने बैकग्राउंड स्क्रीन कैप्चर पर प्रतिबंध लगाया; केवल दर्शक मोड समर्थित.", + "limit_ios_input": "किसी इनपुट इंजेक्शन की अनुमति नहीं; केवल दूर से देखना और चैट करना।", + "limit_ios_appstore": "केवल ऐप स्टोर के माध्यम से वितरण; बीटा परीक्षण के लिए TestFlight।", + "limit_web_https": "WebCodecs API और WebRTC को HTTPS की आवश्यकता है; HTTP JMuxer (सीमित कोडेक्स) पर वापस आ जाता है।", + "limit_web_codec": "कोडेक समर्थन ब्राउज़र पर निर्भर करता है; H.264 व्यापक रूप से समर्थित है, VP9/AV1 भिन्न है।", + "limit_web_performance": "प्रदर्शन ब्राउज़र सैंडबॉक्स द्वारा सीमित; कोई प्रत्यक्ष हार्डवेयर त्वरण नहीं।", + "limit_chrome_crostini": "पूर्ण एजेंट समर्थन केवल क्रॉस्टिनी Linux कंटेनर के अंदर।", + "limit_chrome_pwa": "PWA मोड केवल वेब सुविधाएँ प्रदान करता है; कोई मूल एजेंट क्षमताएं नहीं.", + "limit_chrome_input": "क्रॉस्टिनी कंटेनर के बाहर इनपुट इंजेक्शन समर्थित नहीं है।", + "feat_session_recording": "सत्र रिकॉर्डिंग", + "feat_multi_monitor": "मल्टी-मॉनिटर", + "feat_unattended_access": "अनुपस्थित पहुँच", + "limit_win_virtual_account": "सेवाएं LocalSystem की बजाय अलग वर्चुअल खातों के तहत चलती हैं; कस्टम लॉग पथों को ACL समायोजन की आवश्यकता हो सकती है।", + "limit_linux_unprivileged": "सेवाएं systemd हार्डनिंग (NoNewPrivileges, ProtectSystem=strict) के साथ समर्पित अनधिकृत 'betterdesk' खाते के रूप में चलती हैं।" + }, + "security_audit": { + "title": "सुरक्षा लेखापरीक्षा", + "tab_overview": "सिंहावलोकन", + "tab_events": "लेखापरीक्षा घटनाएँ", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "सुरक्षा स्कोर", + "failed_logins": "विफल लॉगिन (24 घंटे)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "पुरानी कुंजियाँ (>90डी)", + "security_checks": "सुरक्षा जांच", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket सुरक्षित", + "enabled": "सक्रिय", + "disabled": "अक्षम", + "all_events": "All Events", + "event_login_failed": "लॉगिन विफल", + "event_login_success": "लॉगिन की सफलता", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "कॉन्फिग बदला गया", + "event_key_created": "कुंजी बनाई गई", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "कोई ऑडिट इवेंट नहीं मिला.", + "hardening_hint": "आपके BetterDesk परिनियोजन के लिए सुरक्षा सख्त करने की प्राथमिकताएँ। आइटम गंभीरता के आधार पर ऑर्डर किए जाते हैं।", + "no_hardening": "कोई सख्त करने वाली वस्तुएँ उपलब्ध नहीं हैं।", + "vuln_hint": "निर्भरता भेद्यता स्कैन परिणाम। निर्भरता को सुरक्षित रखने के लिए नियमित रूप से एनपीएम ऑडिट चलाएं।", + "no_vulns": "कोई कमज़ोरियाँ नहीं मिलीं. आपकी निर्भरताएँ सुरक्षित हैं." + }, + "languages": { + "title": "भाषा प्रबंधन", + "total_languages": "कुल भाषाएँ", + "fully_translated": "पूरी तरह से अनुवादित", + "needs_review": "समीक्षा की आवश्यकता है", + "reference_keys": "संदर्भ कुंजियाँ", + "no_languages": "कोई भाषा फ़ाइल नहीं मिली.", + "badge_reference": "Reference", + "badge_review": "समीक्षा की आवश्यकता है", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "दृश्य गायब है", + "fix_missing": "Fix Missing", + "missing_keys_for": "के लिए गुम चाबियाँ", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "और {n} और अधिक...", + "all_keys_present": "सभी चाबियाँ मौजूद हैं!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code} में अनुपलब्ध कुंजियों का मैन्युअल रूप से अनुवाद किया जाना चाहिए।", + "no_fix_needed": "ठीक करने के लिए कोई गुम चाबियाँ नहीं।" + }, + "resource_control": { + "title": "संसाधन नियंत्रण", + "tab_overview": "सिंहावलोकन", + "tab_usb": "USB Control", + "tab_optical": "ऑप्टिकल ड्राइव", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "संसाधन कोटा", + "compliance_by_category": "श्रेणी के अनुसार अनुपालन", + "device_compliance": "डिवाइस अनुपालन", + "search_devices": "डिवाइस खोजें...", + "col_device": "उपकरण", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "कुल उपकरण", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "अनुपालन दर", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "कॉन्फ़िगर", + "no_devices": "कोई यंत्र नहीं मिले", + "usb_title": "USB पोर्ट नियंत्रण", + "usb_hint": "चयनित डिवाइस या संगठन-व्यापी डिफ़ॉल्ट नीति के लिए USB स्टोरेज डिवाइस एक्सेस को नियंत्रित करें।", + "usb_storage_policy": "USB भंडारण नीति", + "usb_whitelist": "श्वेतसूचीबद्ध उपकरण (प्रति पंक्ति एक)", + "usb_whitelist_hint": "वीआईडी:पीआईडी ​​(उदा. 0781:5583)", + "usb_audit_log": "USB डिवाइस कनेक्शन लॉग करें", + "optical_title": "ऑप्टिकल ड्राइव नियंत्रण", + "optical_hint": "चयनित डिवाइस के लिए सीडी/डीवीडी/ब्लू-रे ड्राइव एक्सेस को नियंत्रित करें।", + "optical_policy": "ऑप्टिकल ड्राइव नीति", + "optical_audit_log": "ऑप्टिकल ड्राइव एक्सेस लॉग करें", + "monitors_title": "मॉनिटर प्रबंधन", + "monitors_hint": "अधिकतम गिनती, रिज़ॉल्यूशन प्रवर्तन, चमक और पावर शेड्यूल सहित मॉनिटर सेटिंग्स कॉन्फ़िगर करें।", + "monitors_max_count": "अधिकतम मॉनिटर्स (0 = असीमित)", + "monitors_max_hint": "0 का मतलब कोई सीमा नहीं है", + "monitors_resolution": "अधिकतम रिज़ॉल्यूशन", + "monitors_brightness": "चमक सीमा", + "monitors_power_schedule": "पावर शेड्यूल", + "monitors_power_hint": "जैसे बंद:22:00-06:00", + "disks_title": "डिस्क अभिगम नियंत्रण", + "disks_hint": "रीड-ओनली मोड, एन्क्रिप्शन प्रवर्तन और विभाजन दृश्यता सहित डिस्क एक्सेस नीतियों को कॉन्फ़िगर करें।", + "disks_readonly": "केवल-पठन मोड को बाध्य करें", + "disks_encryption": "एन्क्रिप्शन की आवश्यकता है (BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T सक्षम करें निगरानी", + "disks_hidden": "छिपे हुए विभाजन", + "disks_hidden_hint": "अल्पविराम से अलग किए गए ड्राइव अक्षर या माउंट बिंदु", + "quotas_title": "संसाधन कोटा", + "quotas_hint": "चयनित डिवाइस के लिए प्रति उपयोगकर्ता सीपीयू, रैम, बैंडविड्थ और डिस्क कोटा सेट करें।", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "बैंडविड्थ सीमा (एमबीपीएस)", + "quotas_bandwidth_hint": "0 = असीमित", + "quotas_disk_quota": "डिस्क कोटा (जीबी)", + "quotas_disk_hint": "0 = असीमित", + "quotas_process_whitelist": "प्रक्रिया श्वेतसूची (प्रति पंक्ति एक)", + "quotas_process_hint": "जैसे chrome.exe, कोड.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "केवल श्वेतसूची", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "सॉफ़्टवेयर अद्यतन", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "स्थापित संस्करण", + "latest_version": "Latest version", + "status": "Status", + "check_now": "अद्यतन के लिए जाँच", + "checking": "Checking…", + "up_to_date": "अप टू डेट", + "update_available": "उपलब्ध अद्यतन", + "changelog": "Release Notes", + "no_changelog": "कोई रिलीज़ नोट उपलब्ध नहीं है", + "files_changed": "फ़ाइलें बदल गईं", + "files": "फ़ाइलें", + "changes_unavailable": "फ़ाइल परिवर्तन सूची लोड नहीं हो सकी. आप अभी भी अपडेट इंस्टॉल कर सकते हैं.", + "create_backup": "अपडेट करने से पहले बैकअप बनाएं", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "अद्यतन स्थापित किया जा रहा है…", + "creating_backup": "बैकअप बनाया जा रहा है...", + "downloading": "फ़ाइलें डाउनलोड हो रही हैं…", + "install_success": "अपडेट सफलतापूर्वक इंस्टॉल हो गया. कंसोल पुनः प्रारंभ हो रहा है...", + "install_failed": "अद्यतन स्थापना विफल रही", + "restarting": "कंसोल के पुनरारंभ होने की प्रतीक्षा की जा रही है...", + "restart_complete": "कंसोल सफलतापूर्वक पुनः प्रारंभ हुआ", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "कोई अद्यतन संस्करण चयनित नहीं. पहले अपडेट की जांच करें.", + "backups_title": "बैकअप अद्यतन करें", + "backups_desc": "प्रत्येक अपडेट से पहले प्री-अपडेट बैकअप स्वचालित रूप से बनाया जाता है", + "no_backups": "कोई अद्यतन बैकअप नहीं मिला", + "restore": "Restore", + "restore_confirm": "क्या आप वाकई इस बैकअप से पुनर्स्थापित करना चाहते हैं? परिवर्तित फ़ाइलें अधिलेखित कर दी जाएंगी.", + "restore_success": "बैकअप सफलतापूर्वक बहाल हुआ. कंसोल पुनः प्रारंभ हो रहा है...", + "baseline_set": "बेसलाइन सेट", + "commits_behind": "पीछे प्रतिबद्ध है", + "total_files": "कुल फ़ाइलें", + "applied": "Applied", + "failed": "असफल", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "सर्वर जाओ", + "component_agent": "Agent", + "component_scripts": "स्क्रिप्ट और Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "जाँच हो रही है…", + "go_not_found": "जाओ स्थापित मत करो", + "go_check_failed": "गो उपलब्धता की जांच नहीं की जा सकी", + "server_building": "Go server संकलित किया जा रहा है... इसमें कुछ मिनट लग सकते हैं।", + "server_built": "सर्वर बाइनरी संकलित", + "server_build_failed": "सर्वर संकलन विफल रहा", + "server_stale_title": "सर्वर बाइनरी पुराना है", + "server_stale_desc": "Go server स्रोत अद्यतन किया गया था लेकिन चल रहे बाइनरी का पुनर्निर्माण नहीं किया गया था। सुरक्षा और लाइब्रेरी अपडेट लागू करने के लिए इसे अभी पुनर्निर्माण करें।", + "rebuild_server": "सर्वर बाइनरी का पुनर्निर्माण करें", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "सर्वर बाइनरी को फिर से बनाया गया और पुनः प्रारंभ किया गया", + "rebuild_server_failed": "सर्वर बाइनरी पुनर्निर्माण विफल रहा", + "server_deployed": "सर्वर बाइनरी तैनात", + "server_deploy_failed": "सर्वर परिनियोजन विफल", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "सर्वर स्रोत डाउनलोड हो रहा है...", + "delete": "मिटाना", + "delete_confirm": "बैकअप {name} को स्थायी रूप से हटाएं? इसे असंपादित नहीं किया जा सकता है।", + "delete_success": "बैकअप हटा दिया गया", + "delete_failed": "बैकअप हटाने में विफल", + "retention_label": "नवीनतम बैकअप रखें", + "retention_hint": "प्रत्येक अद्यतन के बाद पुराने बैकअप स्वचालित रूप से हटा दिए जाते हैं। सभी बैकअप रखने के लिए 0 का उपयोग करें।", + "retention_saved": "अवधारण सेटिंग सहेजी गई", + "retention_invalid": "अवधारण 0 और 1000 के बीच एक पूर्णांक होना चाहिए", + "retention_required_for_prune": "पहले 0 से अधिक अवधारण मान सेट करें", + "prune_now": "Apply now", + "prune_confirm": "केवल {n} नवीनतम बैकअप रखें और बाकी हटा दें?", + "prune_done": "काटा गया {n} बैकअप", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "अद्यतन विधि", + "strategy_download": "पूर्व-निर्मित बाइनरी डाउनलोड करें", + "strategy_compile": "स्रोत से संकलित करें", + "both_available": "डाउनलोड करें और संकलित करें", + "download_available": "डाउनलोड उपलब्ध है", + "no_method": "कोई अद्यतन विधि नहीं", + "no_release": "No release", + "available": "उपलब्ध", + "server_downloading": "सर्वर बाइनरी डाउनलोड हो रहा है...", + "server_downloaded": "सर्वर बाइनरी डाउनलोड किया गया", + "server_download_failed": "सर्वर बाइनरी डाउनलोड विफल रहा", + "server_download_note": "GitHub रिलीज़ से एक पूर्व-निर्मित बाइनरी डाउनलोड की जाएगी। इसमें आमतौर पर एक मिनट से भी कम समय लगता है।", + "install_go_hint": "संकलन सक्षम करने के लिए https://go.dev/dl/ से गो इंस्टॉल करें, या पूर्व-निर्मित बायनेरिज़ के साथ एक रिलीज़ प्रकाशित करें", + "strategy_install_go": "स्वतः-इंस्टॉल करें और संकलित करें", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "स्वतः पुनर्निर्माण तैयार", + "toolchain_ready": "टूलचेन स्थापित", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "गो टूलचेन डाउनलोड हो रहा है…", + "toolchain_failed": "गो टूलचेन इंस्टॉल विफल रहा", + "modal_title": "अद्यतन स्थापित किया जा रहा है", + "modal_done_title": "अद्यतन पूर्ण", + "modal_close": "बंद करना", + "modal_reload_now": "कंसोल पुनः लोड करें", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "कंसोल फ़ाइलें", + "phase_server": "सर्वर चरण", + "phase_restart": "पुनः आरंभ करें", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "बैकअप छोड़ दिया गया (उपयोगकर्ता की पसंद के अनुसार)", + "server_skipped": "Go server छोड़ दिया गया", + "server_not_selected": "Go server not selected", + "server_processing": "Go server अद्यतन संसाधित हो रहा है…", + "no_restart_needed": "पुनरारंभ की आवश्यकता नहीं है", + "complete": "अद्यतन लागू किया गया", + "complete_summary": "अद्यतन सफलतापूर्वक लागू कर दिया गया है.", + "complete_with_errors": "अद्यतन समाप्त हो गया, लेकिन कुछ चरण विफल रहे। नीचे विवरण देखें.", + "modal_done_with_errors_title": "अद्यतन त्रुटियों के साथ समाप्त हुआ", + "console_will_restart": "कंसोल प्रक्रिया अब पुनः प्रारंभ होगी...", + "restart_complete_msg": "कंसोल पुनः प्रारंभ हो गया। नया संस्करण लोड करने के लिए पुनः लोड करें पर क्लिक करें। पेज 8 सेकंड में स्वचालित रूप से पुनः लोड हो जाएगा।", + "refresh_recommended": "स्थैतिक परिसंपत्तियाँ बदल गईं - नया यूआई देखने के लिए पृष्ठ को पुनः लोड करें।", + "confirm_title": "अद्यतन लागू करें", + "confirm_with_backup": "प्री-अपडेट बैकअप स्वचालित रूप से बनाया जाएगा।", + "confirm_no_backup": "कोई बैकअप नहीं बनाया जाएगा (अपने जोखिम पर आगे बढ़ें)।" + }, + "permissions": { + "title": "अनुमतियां", + "subtitle": "भूमिका-आधारित अनुमतियाँ और कस्टम ओवरराइड प्रबंधित करें", + "info_title": "अनुमतियाँ कैसे काम करती हैं", + "info_desc": "प्रत्येक भूमिका में डिफ़ॉल्ट अनुमतियाँ होती हैं। आप नीचे टॉगल करके प्रत्येक भूमिका के लिए अलग-अलग अनुमतियाँ जोड़ या हटा सकते हैं। कस्टम ओवरराइड्स को हाइलाइट किया जाता है और किसी भी समय डिफ़ॉल्ट पर वापस लाया जा सकता है।", + "select_role": "भूमिका चुनें", + "select_role_placeholder": "कोई भूमिका चुनें...", + "reset_overrides": "सभी ओवरराइड रीसेट करें", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "सर्वर-स्तर", + "custom": "Custom", + "default": "Default", + "revert": "डिफ़ॉल्ट पर वापस लौटें", + "saved": "अनुमति अद्यतन की गई", + "reverted": "डिफ़ॉल्ट पर वापस लाया गया", + "all_reverted": "सभी ओवरराइड वापस कर दिए गए", + "confirm_reset": "इस भूमिका के लिए सभी कस्टम ओवरराइड को डिफ़ॉल्ट पर रीसेट करें?", + "empty_title": "एक भूमिका चुनें", + "empty_desc": "इसकी अनुमतियाँ देखने और प्रबंधित करने के लिए ऊपर दिए गए ड्रॉपडाउन से एक भूमिका चुनें।", + "locked_title": "Super Admin", + "locked_desc": "सुपर एडमिन के पास डिफ़ॉल्ट रूप से सभी अनुमतियाँ हैं और उन्हें अनुकूलित नहीं किया जा सकता है।", + "cat_device": "उपकरण", + "cat_user": "Users", + "cat_server": "सर्वर", + "cat_org": "संगठनों", + "cat_audit": "लेखापरीक्षा एवं निगरानी", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "डिवाइस देखें", + "perm_device_connect": "उपकरणों से कनेक्ट करें", + "perm_device_edit": "उपकरण संपादित करें", + "perm_device_delete": "डिवाइस हटाएं", + "perm_device_ban": "उपकरणों पर प्रतिबंध/प्रतिबंध हटाएँ", + "perm_device_change_id": "डिवाइस आईडी बदलें", + "perm_user_view": "उपयोगकर्ताओं को देखें", + "perm_user_create": "उपयोगकर्ता बनाएं", + "perm_user_edit": "उपयोगकर्ताओं को संपादित करें", + "perm_user_delete": "उपयोगकर्ताओं को हटाएँ", + "perm_server_config": "सर्वर कॉन्फ़िगरेशन", + "perm_server_keys": "API कुंजियाँ प्रबंधित करें", + "perm_org_create": "संगठन बनाएं", + "perm_org_edit": "संगठन संपादित करें", + "perm_org_delete": "संगठनों को हटाएँ", + "perm_org_manage_users": "संगठन उपयोगकर्ताओं को प्रबंधित करें", + "perm_org_manage_devices": "संगठन उपकरण प्रबंधित करें", + "perm_audit_view": "ऑडिट लॉग देखें", + "perm_metrics_view": "मेट्रिक्स देखें", + "perm_blocklist_edit": "ब्लॉकलिस्ट संपादित करें", + "perm_cdap_view": "CDAP डिवाइस देखें", + "perm_cdap_command": "CDAP आदेश भेजें", + "perm_cdap_terminal": "CDAP टर्मिनल पहुंच", + "perm_cdap_files": "CDAP फ़ाइल पहुँच", + "perm_enrollment_manage": "नामांकन प्रबंधित करें", + "perm_enrollment_approve": "नामांकन स्वीकृत करें", + "perm_chat_access": "Chat access", + "perm_branding_edit": "ब्रांडिंग संपादित करें", + "perm_server_attestation": "सर्वर प्रदर्शन प्रमाणीकरण" + }, + "notifications": { + "title": "सूचनाएं", + "empty": "कोई नए संदेश नहीं", + "mark_all_read": "सभी को पढ़ा दिखाएं", + "see_all": "सभी सहायता अनुरोध देखें", + "help_request": "मदद अनुरोध", + "just_now": "just now" + }, + "accessibility": { + "title": "पहुंच योग्यता", + "subtitle": "दृष्टि, गति और पढ़ने की जरूरतों के अनुसार कंसोल समायोजित करें।", + "close": "पहुंच योग्यता मेनू बंद करें", + "profiles": "त्वरित प्रोफाइल", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "बड़ा टेक्स्ट, मजबूत कंट्रास्ट और फोकस।", + "profile_dyslexia": "पढ़ने में आराम", + "profile_dyslexia_hint": "पठनीय फ़ॉन्ट और व्यापक रिक्ति.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "संक्रमण को कम करता है और एनीमेशन को रोकता है।", + "profile_color_assist": "रंग समर्थन", + "profile_color_assist_hint": "रंग फ़िल्टर, लेबल और हाइलाइट किए गए लिंक।", + "reading": "पढ़ना", + "font_size": "टेक्स्ट आकार", + "line_height": "लाइन ऊंचाई", + "letter_spacing": "पत्र अंतराल", + "word_spacing": "शब्द रिक्ति", + "readable_font": "पढ़ने योग्य फ़ॉन्ट", + "readable_font_hint": "विस्तृत, परिचित अक्षर आकृतियों का उपयोग करता है।", + "dyslexia_spacing": "डिस्लेक्सिया रिक्ति", + "dyslexia_spacing_hint": "लंबे पाठ के लिए अतिरिक्त रिक्ति जोड़ता है।", + "visual": "दृश्य", + "contrast": "कंट्रास्ट", + "contrast_normal": "Normal", + "contrast_high_dark": "उच्च कंट्रास्ट अंधेरा", + "contrast_high_light": "उच्च कंट्रास्ट प्रकाश", + "contrast_yellow_black": "काले पर पीला", + "color_filter": "रंग दृष्टि फ़िल्टर", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "रंग संतृप्ति", + "underline_links": "लिंकों को रेखांकित करें", + "underline_links_hint": "रंग पर निर्भर हुए बिना लिंक को दृश्यमान बनाता है।", + "highlight_links": "गतिविधियों को हाइलाइट करें", + "highlight_links_hint": "लिंक और बटन की रूपरेखा.", + "highlight_headings": "शीर्षकों को हाइलाइट करें", + "highlight_headings_hint": "अनुभाग शीर्षकों को रंगीन पट्टी से चिह्नित करें।", + "hide_media": "Dim media", + "hide_media_hint": "छवियाँ, वीडियो और कैनवस मंद कर देता है।", + "interaction": "इंटरैक्शन", + "strong_focus": "मजबूत फोकस", + "strong_focus_hint": "एक बड़ा कीबोर्ड फोकस रिंग दिखाता है।", + "large_cursor": "बड़ा कर्सर", + "large_cursor_hint": "एक बड़े उच्च-कंट्रास्ट सूचक का उपयोग करता है।", + "reduce_motion": "मोशन घटाएं", + "reduce_motion_hint": "ट्रांज़िशन को छोटा करता है और स्क्रॉलिंग को आसान बनाता है।", + "pause_animations": "एनिमेशन रोकें", + "pause_animations_hint": "दृश्य गति को लूप करना बंद कर देता है।", + "reading_guide": "पढ़ने की मार्गदर्शिका", + "reading_guide_hint": "एक चमकदार रेखा के साथ सूचक का अनुसरण करता है।", + "reading_mask": "पढ़ना मुखौटा", + "reading_mask_hint": "पॉइंटर के ऊपर और नीचे की सामग्री को मंद कर देता है।", + "preview": "पूर्वावलोकन", + "preview_title": "ऑपरेटर कार्यक्षेत्र पूर्वावलोकन", + "preview_text": "इस मेनू को बंद करने से पहले जांचें कि टेक्स्ट, लिंक, नियंत्रण और स्थिति लेबल पढ़ने में आरामदायक हैं या नहीं।", + "preview_link": "डिवाइस विवरण लिंक", + "preview_status": "Online", + "preview_button": "प्राथमिक क्रिया", + "preview_secondary": "Secondary", + "reset": "रीसेट", + "done": "पूर्ण" + }, + "server_mgmt": { + "title": "सर्वर प्रबंधन", + "subtitle": "BetterDesk कंसोल होस्ट (बीटा) के लिए कॉकपिट जैसा नियंत्रण विमान।", + "beta_tooltip": "बीटा सुविधा - सक्रिय विकास के तहत।", + "notice_title": "बीटा सुविधा", + "notice_body": "ये उपकरण होस्ट पर चलते हैं जहां BetterDesk कंसोल प्रक्रिया रहती है। सभी कार्यों का ऑडिट किया जाता है। भावी रिलीज़ में फ़ीचर का दायरा विस्तारित होगा।", + "tab_overview": "अवलोकन", + "tab_terminal": "टर्मिनल", + "tab_files": "फ़ाइलें", + "tab_services": "सेवाएं", + "cpu": "CPU", + "memory": "मेमोरी", + "load": "औसत लोड करें", + "disks": "डिस्क", + "history": "इतिहास (अंतिम 60 नमूने)", + "host_info": "Host info", + "cores": "cores", + "uptime": "अपटाइम", + "no_disks": "कोई डिस्क डेटा उपलब्ध नहीं है", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "पीटीवाई उपलब्ध है", + "term_connect": "Connect", + "term_disconnect": "Disconnect", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "संपर्क त्रुटि", + "term_warning": "कमांड उस उपयोगकर्ता के रूप में चलते हैं जो कंसोल प्रक्रिया का स्वामी है। उन्नयन सक्षम करने के लिए एक sudoers नियम जोड़ें।", + "term_hint": "युक्ति: आगे बढ़ने के लिए `sudo -i` टाइप करें (sudoers कॉन्फ़िगरेशन की आवश्यकता है)।", + "term_lib_failed": "टर्मिनल लाइब्रेरी लोड करने में विफल", + "files_up": "एक स्तर ऊपर", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "खाली निर्देशिका", + "files_error": "निर्देशिका सूचीबद्ध करने में विफल", + "read_failed": "फ़ाइल पढ़ने में विफल", + "save_failed": "फ़ाइल सहेजने में विफल", + "rename_failed": "नाम बदलें विफल", + "delete_failed": "हटाना विफल", + "delete_confirm": "यह प्रविष्टि हटाएं?", + "mkdir_prompt": "नये फ़ोल्डर का नाम:", + "mkdir_failed": "फ़ोल्डर बनाने में विफल", + "file_saved": "फ़ाइल सहेजी गई", + "binary_warn": "बाइनरी फ़ाइल - केवल पूर्वावलोकन", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "सेवाएँ खोजें…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "कोई सेवा नहीं मिली", + "svc_load_failed": "सेवाएँ लोड करने में विफल", + "svc_action_failed": "क्रिया: विफल रही है", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "पुनः आरंभ करें", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk एजेंट डाउनलोड करें", + "choose_platform": "अपना मंच चुनें", + "choose_platform_hint": "वह इंस्टॉलर चुनें जो आपके ऑपरेटिंग सिस्टम से मेल खाता हो।", + "download": "डाउनलोड करना", + "building": "इमारत…", + "failed": "निर्माण विफल", + "need_help": "मदद की ज़रूरत है?", + "powered_by": "द्वारा संचालित" + }, + "server_attestation": { + "title": "सर्वर प्रदर्शन प्रमाणीकरण", + "subtitle": "प्रदर्शन बेंचमार्क जो 80% CPU, RAM और डिस्क थ्रेशोल्ड पर समवर्ती दूरस्थ कनेक्शन क्षमता निर्धारित करता है।", + "warning_title": "लोड परीक्षण", + "warning_body": "बेंचमार्क सिग्नल और रिले सर्वर से समानांतर WebSocket कनेक्शन का अनुकरण करता है। ऑफ-पीक घंटों में चलाएं — यह परीक्षण प्रोडक्शन पर लोड डालता है।", + "run_benchmark": "बेंचमार्क चलाएं", + "abort": "रद्द करें", + "download_report": "JSON रिपोर्ट डाउनलोड करें", + "last_test": "अंतिम परीक्षण", + "no_test_yet": "अभी तक कोई बेंचमार्क नहीं चला", + "max_connections": "अधिकतम कनेक्शन", + "threshold_80": "80% थ्रेशोल्ड — अंतिम मेट्रिक्स", + "disk": "डिस्क", + "ramp_chart": "लोड रैम्प चार्ट", + "connections": "कनेक्शन", + "connections_short": "कनेक्शन", + "tier_guide_title": "प्रत्येक स्तर का क्या अर्थ है?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 समवर्ती कनेक्शन — छोटा VPS (1–2 vCPU, 2–4 GB RAM)।", + "tier_iron_desc": "26–75 कनेक्शन — मिड-रेंज सर्वर (2–4 vCPU, 4–8 GB RAM)।", + "tier_platinum_desc": "76–200 कनेक्शन — उच्च-प्रदर्शन सर्वर (4–8 vCPU, 8–16 GB RAM)।", + "tier_titanium_desc": "201–400 कनेक्शन — एंटरप्राइज़ इंफ्रास्ट्रक्चर (8+ vCPU, 16–32 GB RAM)।", + "tier_obsidian_desc": "401+ कनेक्शन — टर्बो क्लास: समर्पित हार्डवेयर, 16+ vCPU, 32+ GB RAM, NVMe।", + "docker_note": "नोट: Docker में, CPU/RAM मेट्रिक्स भौतिक होस्ट के बजाय कंटेनर सीमाओं को दर्शा सकते हैं।", + "badge_tooltip": "BetterDesk Server Attestation — सर्वर प्रदर्शन प्रमाणीकरण", + "confirm_run": "यह बेंचमार्क अनुकृत कनेक्शन के साथ सर्वर का लोड-परीक्षण करेगा। जारी रखें?", + "starting": "शुरू हो रहा है…", + "complete": "बेंचमार्क पूर्ण", + "signal_peers": "सिग्नल पीयर", + "relay_sessions": "रिले सत्र", + "page_error": "सर्वर प्रमाणीकरण पेज लोड करने में विफल", + "mode_estimated": "अनुमानित (WebSocket अपहुँचनीय)", + "incomplete": "बेंचमार्क बिना वैध स्तर के समाप्त हुआ" + }, + "commercialization": { + "title": "व्यावसायीकरण", + "subtitle": "सहायता पैकेज, बillable सत्र और कार्य रिपोर्ट", + "alpha_badge": "ALPHA", + "alpha_tooltip": "प्रारंभिक सुविधा — बिलिंग और पैकेज सक्रिय विकास में हैं।", + "tabs": { + "overview": "अवलोकन", + "packages": "पैकेज और अनुबंध", + "sessions": "सत्र", + "reports": "रिपोर्ट", + "settings": "उन्नत सेटिंग्स" }, - "branding": { - "identity_title": "ब्रांड पहचान", - "identity_desc": "कंसोल पर दिखाए गए एप्लिकेशन नाम और विवरण को कस्टमाइज़ करें", - "app_name": "आवेदन का नाम", - "app_description": "आवेदन विवरण", - "logo_title": "Logo", - "logo_desc": "चुनें कि आपका लोगो साइडबार और लॉगिन पेज पर कैसे दिखाई देगा", - "logo_type_icon": "सामग्री चिह्न", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "सामग्री चिह्न नाम दर्ज करें (उदा. डीएनएस, क्लाउड, सुरक्षा)। फ़ॉन्ट्स.google.com/icons देखें", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "अपना एसवीजी मार्कअप यहां चिपकाएं। पथ और शैलियों के साथ पूर्ण तत्वों का समर्थन करता है।", - "logo_image_upload": "तस्विर अपलोड करना", - "logo_image_choose": "छवि फ़ाइल चुनें", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "अमान्य फ़ाइल प्रकार. पीएनजी, जेपीजी, जीआईएफ, वेबपी या एसवीजी का प्रयोग करें।", - "preview": "Preview", - "colors_title": "रंग योजना", - "colors_desc": "रंग पैलेट को अनुकूलित करें. डिफ़ॉल्ट का उपयोग करने के लिए खाली छोड़ें.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "एक्सेंट रंग", - "colors_borders": "Borders", - "import_export_title": "आयात/निर्यात", - "import_export_desc": "अपनी थीम को JSON फ़ाइल के रूप में सहेजें या किसी अन्य उदाहरण से आयात करें", - "export_theme": "थीम निर्यात करें", - "import_theme": "थीम आयात करें", - "reset_defaults": "डिफ़ॉल्ट पर पुनः सेट करें", - "save_branding": "ब्रांडिंग सहेजें", - "saved": "ब्रांडिंग सफलतापूर्वक सहेजी गई. पुनः लोड हो रहा है...", - "exported": "थीम निर्यात की गई", - "imported": "थीम सफलतापूर्वक आयात की गई. पुनः लोड हो रहा है...", - "import_error": "थीम आयात करने में विफल. अमान्य फाइल प्रारूप।", - "reset_confirm": "क्या आप वाकई ब्रांडिंग को डिफ़ॉल्ट पर रीसेट करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।", - "reset_success": "ब्रांडिंग डिफ़ॉल्ट पर रीसेट हो गई. पुनः लोड हो रहा है...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "प्राथमिक पाठ आपके ब्रांड लोगो के रूप में प्रदर्शित होता है", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "लोगो के नीचे द्वितीयक पाठ (जैसे उत्पाद का नाम या टैगलाइन)", - "logo_upload_success": "लोगो सफलतापूर्वक अपलोड हो गया.", - "typography_title": "Typography", - "typography_desc": "शीर्षकों और मुख्य पाठ के लिए फ़ॉन्ट चुनें. सेल्फ-होस्टिंग के लिए फ़ॉन्ट्स को सर्वर पर डाउनलोड किया जाता है।", - "font_heading": "शीर्षक फ़ॉन्ट", - "font_heading_hint": "शीर्षकों (H1–H6) और टेक्स्ट लोगो के लिए उपयोग किया जाता है", - "font_body": "Body Font", - "font_body_hint": "बॉडी टेक्स्ट और यूआई तत्वों के लिए उपयोग किया जाता है", - "font_search_placeholder": "फ़ॉन्ट खोजें...", - "font_system_default": "प्रणालीगत चूक", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "सर्वर पर फ़ॉन्ट डाउनलोड किए गए", - "powered_by": "द्वारा संचालित", - "background_title": "पृष्ठभूमि और रूप-रंग", - "background_desc": "कंसोल वॉलपेपर, ग्रेडियेंट या ठोस पृष्ठभूमि सेट करें। कार्ड उस पर तैरते हैं।", - "bg_type_none": "कोई नहीं", - "bg_type_color": "ठोस रंग", - "bg_type_gradient": "ग्रेडियेंट", - "bg_type_image": "छवि", - "bg_color": "पृष्ठभूमि रंग", - "bg_gradient": "CSS ग्रेडियेंट", - "bg_gradient_hint": "कोई भी वैध CSS ग्रेडियेंट, जैसे linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "पृष्ठभूमि छवि अपलोड करें", - "bg_image_choose": "छवि फ़ाइल चुनें", - "bg_image_hint": "PNG, JPG, WebP या GIF। अधिकतम 8 MB। सर्वर पर संग्रहीत।", - "bg_image_url": "छवि पथ / URL", - "bg_size": "छवि आकार", - "bg_size_cover": "कवर (स्क्रीन भरें)", - "bg_size_contain": "कंटेन (फ़िट करें)", - "bg_size_auto": "स्वचालित (मूल)", - "bg_blur": "पृष्ठभूमि धुंधलापन", - "bg_overlay": "गहरा ओवरले", - "bg_overlay_hint": "बेहतर पाठ पठनीयता के लिए पृष्ठभूमि को गहरा करता है।", - "bg_image_too_large": "छवि बहुत बड़ी है। अधिकतम आकार 8 MB है।", - "bg_image_invalid_type": "अमान्य फ़ाइल प्रकार। PNG, JPG, WebP या GIF उपयोग करें।", - "bg_upload_success": "पृष्ठभूमि छवि सफलतापूर्वक अपलोड हुई।", - "login_title": "लॉगिन पेज", - "login_desc": "लॉगिन स्क्रीन शीर्षक, उपशीर्षक और पृष्ठभूमि अनुकूलित करें।", - "login_heading": "लॉगिन शीर्षक", - "login_heading_placeholder": "वापस स्वागत है", - "login_subheading": "लॉगिन उपशीर्षक", - "login_subheading_placeholder": "अपने खाते में साइन इन करें", - "login_bg_inherit": "कंसोल जैसा ही", - "agent_title": "एजेंट डाउनलोड पेज", - "agent_desc": "अंत उपयोगकर्ताओं को दिखाया जाने वाला सार्वजनिक एजेंट डाउनलोड पोर्टल अनुकूलित करें।", - "agent_show_powered": "\"Powered by BetterDesk\" दिखाएं", - "agent_show_powered_hint": "डाउनलोड पोर्टल फ़ुटर में BetterDesk का श्रेय दिखाएं।", - "footer_title": "फ़ुटर और कॉपीराइट", - "footer_desc": "लॉगिन स्क्रीन और कंसोल साइडबार पर दिखाई देने वाली कस्टम फ़ुटर लाइन जोड़ें।", - "footer_text": "फ़ुटर पाठ", - "footer_text_hint": "जैसे कॉपीराइट नोटिस या कंपनी का नाम।", - "show_powered": "\"BetterDesk\" श्रेय दिखाएं", - "show_powered_hint": "लॉगिन फ़ुटर और साइडबार में BetterDesk नाम और संस्करण दिखाएं।", - "custom_css_title": "कस्टम CSS", - "custom_css_desc": "उन्नत: कंसोल और लॉगिन पेज पर लागू कस्टम CSS इंजेक्ट करें।", - "custom_css_hint": "सावधानी से उपयोग करें। अमान्य या असुरक्षित नियम साफ़ किए जाएंगे। अधिकतम 20,000 वर्ण।" + "clock": { + "title": "सर्वर समय (NTP)", + "check_now": "अभी जाँचें", + "unsynced": "सर्वर घड़ी सिंक नहीं है — बिल योग्य सत्र अवरुद्ध हो सकते हैं" }, - "device_detail": { - "tab_overview": "सिंहावलोकन", - "tab_tags": "टैग और नोट्स", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "संबंध", - "section_manage": "प्रबंध", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "यह उपकरण प्रतिबंधित है", - "no_reason": "कोई कारण नहीं बताया गया", - "tags": "Tags", - "no_tags": "इस डिवाइस को कोई टैग असाइन नहीं किया गया है", - "tag_placeholder": "एक टैग नाम दर्ज करें...", - "add_tag": "Add", - "tag_exists": "यह टैग पहले से मौजूद है", - "notes": "Notes", - "notes_placeholder": "इस डिवाइस के बारे में नोट्स जोड़ें...", - "danger_zone": "Danger Zone", - "action_connect_web": "वेब रिमोट", - "action_connect_web_desc": "ब्राउज़र रिमोट डेस्कटॉप के माध्यम से कनेक्ट करें", - "action_native_remote": "BetterDesk रिमोट", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "डेस्कटॉप क्लाइंट", - "action_connect_desktop_desc": "डेस्कटॉप क्लाइंट ऐप में खोलें", - "action_change_id_desc": "डिवाइस पंजीकरण आईडी बदलें", - "action_ban_desc": "इस डिवाइस को कनेक्ट होने से रोकें", - "action_unban_desc": "इस डिवाइस को फिर से कनेक्ट होने दें", - "action_delete_desc": "इस उपकरण को स्थायी रूप से हटा दें", - "tab_hardware": "Hardware", - "tab_metrics": "मेट्रिक्स", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "एन्कोडिंग क्षमताएँ", - "section_live_metrics": "लाइव मेट्रिक्स", - "section_current_usage": "वर्तमान उपयोग", - "section_usage_history": "उपयोग इतिहास", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "सीपीयू फ्रीक्वेंसी", - "total_memory": "कुल मेमोरी", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "अद्यतन", - "device_groups": "समूह", - "no_sysinfo": "कोई हार्डवेयर जानकारी उपलब्ध नहीं है", - "no_sysinfo_hint": "डिवाइस द्वारा sysinfo रिपोर्ट भेजने के बाद सिस्टम जानकारी दिखाई देगी", - "no_metrics": "कोई मेट्रिक्स डेटा उपलब्ध नहीं है", - "no_metrics_hint": "डिवाइस द्वारा दिल की धड़कन की रिपोर्ट भेजने के बाद मेट्रिक्स दिखाई देंगे", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "फ़ाइलें", - "agent_lazy_hint": "एजेंट से लाइव डेटा लोड करने के लिए इस टैब पर क्लिक करें", - "agent_offline": "एजेंट ऑफ़लाइन है", - "agent_timeout": "एजेंट ने समय पर जवाब नहीं दिया", - "agent_error": "एजेंट से डेटा लोड करने में विफल", - "service_name": "Name", - "service_display": "प्रदर्शित होने वाला नाम", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "सक्रिय बिल योग्य सत्र" }, - "inventory": { - "title": "Inventory", - "subtitle": "प्रबंधित उपकरणों की हार्डवेयर और सॉफ़्टवेयर सूची", - "device_id": "डिवाइस आईडी", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "कुल मेमोरी", - "memory_used": "Used Memory", - "memory_available": "उपलब्ध मेमोरी", - "memory_usage": "स्मृति प्रयोग", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "नेटवर्क इंटरफेस", - "software": "Software", - "software_count": "स्थापित सॉफ्टवेयर", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "भौतिक कोर", - "logical_cores": "तार्किक कोर", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "उपलब्ध", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "आईपी ​​पते", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "कलेक्टर दौड़ रहा है", - "collector_stopped": "कलेक्टर ने रोका", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "पर एकत्रित किया गया", - "no_data": "अभी तक कोई इन्वेंट्री डेटा उपलब्ध नहीं है. सिस्टम जानकारी इकट्ठा करने के लिए \"अभी एकत्र करें\" पर क्लिक करें।", - "no_devices": "इन्वेंट्री डेटा वाला कोई उपकरण नहीं मिला", - "detail_title": "डिवाइस इन्वेंटरी विवरण", - "telemetry": "Telemetry", - "view_detail": "विस्तार से देखें", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "नया पैकेज", + "name": "नाम", + "included_minutes": "शामिल मिनट", + "overage_rate": "अतिरिक्त दर / घं", + "currency": "मुद्रा", + "heading": "सहायता पैकेज", + "prompt_name": "पैकेज का नाम", + "create_title": "संगठन के लिए नया पैकेज", + "create_submit": "पैकेज बनाएं", + "select_org": "संगठन", + "select_org_placeholder": "संगठन चुनें…" }, - "tickets": { - "title": "Tickets", - "subtitle": "समर्थन टिकट और ट्रैकिंग जारी करें", - "create": "New Ticket", - "edit": "टिकट संपादित करें", - "delete": "टिकट हटाएँ", - "detail": "टिकट विवरण", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "को सौंपना", - "created_by": "के द्वारा बनाई गई", - "device": "उपकरण", - "sla_due": "SLA Due", - "created_at": "बनाया था", - "updated_at": "अद्यतन", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "खुला", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "एक टिप्पणी लिखें...", - "internal_note": "आंतरिक नोट (अंतिम उपयोगकर्ताओं के लिए दृश्यमान नहीं)", - "attachments": "Attachments", - "upload_attachment": "अनुलग्नक अपलोड करें", - "download": "Download", - "connect_device": "डिवाइस से कनेक्ट करें", - "no_tickets": "कोई टिकट नहीं मिला", - "no_comments": "अब तक कोई टिप्पणी नहीं", - "no_attachments": "कोई अनुलग्नक नहीं", - "title_required": "शीर्षक आवश्यक है", - "delete_confirm": "क्या आप वाकई टिकट #{id} हटाना चाहते हैं?", - "delete_success": "टिकट सफलतापूर्वक हटा दिया गया", - "created_success": "टिकट सफलतापूर्वक बनाया गया", - "updated_success": "टिकट सफलतापूर्वक अपडेट किया गया", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "टिकट खोजें...", - "assign_to_me": "मुझे सौंप दो", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "खुला", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "गतिविधि की निगरानी", - "subtitle": "एप्लिकेशन का उपयोग और निष्क्रिय ट्रैकिंग", - "device": "उपकरण", - "hostname": "Hostname", - "sessions": "सत्र", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "शीर्ष अनुप्रयोग", - "app_name": "Application", - "window_title": "विंडो शीर्षक", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "सत्र गणना", - "total_active": "कुल सक्रिय", - "total_idle": "Total Idle", - "detail_count": "विस्तृत रिकार्ड", - "no_data": "कोई गतिविधि डेटा उपलब्ध नहीं है", - "no_sessions": "कोई सत्र नहीं", - "filter_from": "से", - "filter_to": "को", - "filter_apply": "फ़िल्टर लागू करें", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "डिवाइस खोजें...", - "date_range": "Date Range", - "device_id": "डिवाइस आईडी", - "session_start": "सत्र प्रारंभ", - "session_end": "सत्र समाप्ति", - "user": "User", - "no_activity": "कोई गतिविधि दर्ज नहीं की गई", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "कोई आवेदन नहीं" - }, - "automation": { - "title": "स्वचालन एवं अलर्ट", - "subtitle": "अलर्ट नियम, रिमोट कमांड और एसएमटीपी कॉन्फ़िगरेशन", - "rules": "Alert Rules", - "rules_subtitle": "उन स्थितियों को परिभाषित करें जो सूचनाएं ट्रिगर करती हैं", - "alerts": "चेतावनी इतिहास", - "alerts_subtitle": "ट्रिगर अलर्ट देखें और स्वीकार करें", - "commands": "रिमोट कमांड", - "commands_subtitle": "दूरस्थ डिवाइसों पर आदेश भेजें", - "smtp": "एसएमटीपी कॉन्फ़िगरेशन", - "smtp_subtitle": "ईमेल अधिसूचना सेटिंग्स", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "शर्त प्रकार", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "लक्ष्य डिवाइस", - "scope_all": "सभी उपकरणों", - "cooldown": "कूलडाउन (सेकंड)", - "notify_emails": "अधिसूचना ईमेल", - "enabled": "सक्रिय", - "disabled": "अक्षम", - "create_rule": "नियम बनाएं", - "edit_rule": "नियम संपादित करें", - "delete_rule": "नियम हटाएँ", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "पर ट्रिगर किया गया", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "से अधिक", - "op_gte": "अधिक या बराबर", - "op_lt": "Less than", - "op_lte": "कम या बराबर", - "op_eq": "के बराबर", - "op_neq": "असमान", - "type_cpu_usage": "सीपीयू उपयोग (%)", - "type_memory_usage": "स्मृति प्रयोग (%)", - "type_disk_usage": "डिस्क उपयोग (%)", - "type_offline_duration": "ऑफ़लाइन अवधि", - "type_idle_duration": "निष्क्रिय अवधि", - "type_custom": "Custom", - "command_type": "कमांड प्रकार", - "command_payload": "कमांड/स्क्रिप्ट", - "command_result": "Result", - "command_status": "Status", - "send_command": "आदेश भेजें", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "असफल", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "उपयोगकर्ता नाम", - "smtp_pass": "पासवर्ड", - "smtp_from": "इस पते से", - "smtp_test": "परीक्षण कनेक्शन", - "smtp_save": "कॉन्फ़िगरेशन सहेजें", - "smtp_test_success": "कनेक्शन सफल", - "smtp_test_failed": "कनेक्शन विफल", - "no_rules": "कोई चेतावनी नियम कॉन्फ़िगर नहीं किया गया", - "no_alerts": "कोई अलर्ट ट्रिगर नहीं हुआ", - "no_commands": "कोई आदेश नहीं भेजा गया", - "id_payload_required": "डिवाइस आईडी और पेलोड आवश्यक हैं", - "no_commands_sent": "अभी तक कोई आदेश नहीं भेजा गया है" - }, - "file_transfer": { - "title": "दस्तावेज हस्तांतरण", - "transfers": "Transfers", - "new_transfer": "नया स्थानांतरण", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "फ़ाइल का साइज़", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "उपकरण", - "initiated_by": "द्वारा आरंभ किया गया", - "created_at": "पर बनाया गया", - "cancel": "रद्द करना", - "cancel_confirm": "क्या आप वाकई यह स्थानांतरण रद्द करना चाहते हैं?", - "download_file": "डाउनलोड फ़ाइल", - "browse_files": "फ़ाइलों को ब्राउज़ करें", - "select_file": "फ़ाइल चुनें", - "select_device": "डिवाइस का चयन करें", - "no_transfers": "कोई फ़ाइल स्थानांतरण नहीं", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "असफल", - "status_cancelled": "Cancelled", - "bytes_transferred": "बाइट्स स्थानांतरित", - "chunks": "Chunks", - "transfer_started": "स्थानांतरण प्रारंभ हुआ", - "transfer_completed": "स्थानांतरण पूरा हुआ", - "transfer_failed": "स्थानांतरण विफल रहा", - "transfer_cancelled": "स्थानांतरण रद्द कर दिया गया", - "max_file_size": "अधिकतम फ़ाइल आकार: 4 जीबी", - "error_too_large": "फ़ाइल बहुत बड़ी है", - "error_no_device": "कोई उपकरण चयनित नहीं", - "error_no_file": "कोई फ़ाइल चयनित नहीं" - }, - "network": { - "title": "नेटवर्क मॉनिटरिंग", - "targets": "निगरानी लक्ष्य", - "add_target": "Add Target", - "edit_target": "लक्ष्य संपादित करें", - "delete_target": "लक्ष्य हटाएँ", - "delete_confirm": "क्या आप वाकई इस लक्ष्य को हटाना चाहते हैं?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "टाइमआउट (एमएस)", - "interval": "अंतराल (एमएस)", - "enabled": "सक्रिय", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "इतिहास जांचें", - "stats": "Statistics", - "total_targets": "कुल लक्ष्य", - "targets_up": "Targets Up", - "targets_down": "लक्ष्य नीचे", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "नेटवर्क उपकरण", - "ping_tool": "Ping Test", - "tcp_tool": "TCP पोर्ट जांच", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "मॉनिटर प्रारंभ करें", - "monitor_stop": "मॉनिटर बंद करो", - "monitor_running": "मॉनिटर चल रहा है", - "monitor_stopped": "मॉनिटर बंद हो गया है", - "no_targets": "कोई निगरानी लक्ष्य कॉन्फ़िगर नहीं किया गया", - "no_history": "कोई चेक इतिहास उपलब्ध नहीं है", - "error_code": "Error", - "status_code": "HTTP स्थिति कोड", - "search_targets": "लक्ष्य खोजें...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "इतिहास जांचें", - "name_host_required": "नाम और होस्ट आवश्यक हैं", - "uptime": "Uptime", - "response_time": "प्रतिक्रिया समय", - "avg_response": "औसत प्रतिक्रिया", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "प्रतिक्रिया समय (एमएस)", - "uptime_percent": "Uptime %", - "last_24h": "पिछले 24 घंटे", - "last_7d": "Last 7 days", - "last_30d": "पिछले 30 दिन" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "डीएलपी नीतियां", - "add_policy": "नीति जोड़ें", - "edit_policy": "नीति संपादित करें", - "delete_policy": "नीति हटाएँ", - "delete_confirm": "क्या आप वाकई इस नीति को हटाना चाहते हैं?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "सक्रिय", - "disabled": "अक्षम", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB डिवाइस", - "rule_type_file": "फ़ाइल संचालन", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "विक्रेता आईडी (वीआईडी)", - "pid": "उत्पाद आईडी (पीआईडी)", - "serial": "क्रम संख्या", - "device_class": "डिवाइस क्लास", - "drive_type": "Drive Type", - "file_extensions": "फाइल एक्सटेंशन", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "फ़ाइल", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "कोई DLP नीति कॉन्फ़िगर नहीं की गई", - "no_events": "कोई DLP इवेंट रिकॉर्ड नहीं किया गया", - "stats": "Statistics", - "total_events": "कुल घटनाएँ", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "फ़ाइल घटनाक्रम", - "device_id": "डिवाइस आईडी", - "policy_matched": "नीति मेल खाती है", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "कुल नीतियाँ", - "active_policies": "सक्रिय नीतियाँ", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "नीतियों", - "tab_events": "Events", - "search_policies": "नीतियां खोजें...", - "create_policy": "नीति बनाएं", - "policy_type": "पॉलिसी प्रकार", - "scope": "Scope", - "events_count": "Events", - "search_events": "ईवेंट खोजें...", - "event_time": "Event Time", - "device": "उपकरण", - "policy": "नीति", - "detail": "Detail", - "scope_help": "डिवाइस आईडी को अल्पविराम से अलग करें, या सभी के लिए खाली छोड़ दें", - "scope_all": "सभी उपकरणों", - "active": "Active", - "type_file_type": "फ़ाइल प्रकार", - "type_clipboard": "क्लिपबोर्ड", - "type_screen_share": "स्क्रीन शेयर", - "type_file_transfer": "दस्तावेज हस्तांतरण", - "policy_desc": "नीति विवरण", - "type_usb": "USB" + "sessions": { + "device": "डिवाइस", + "operator": "ऑपरेटर", + "duration": "अवधि", + "phase": "चरण", + "amount": "राशि" }, "reports": { - "title": "Reports", - "generate": "रिपोर्ट तैयार करें", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "डिवाइस सारांश", - "type_activity": "गतिविधि सारांश", - "type_security": "सुरक्षा रिपोर्ट", - "type_tickets": "टिकट रिपोर्ट", - "type_network": "नेटवर्क रिपोर्ट", - "type_inventory": "इन्वेंटरी रिपोर्ट", - "type_alerts": "चेतावनी रिपोर्ट", - "saved": "सहेजी गई रिपोर्टें", - "save_report": "रिपोर्ट सहेजें", - "delete_report": "रिपोर्ट हटाएँ", - "delete_confirm": "क्या आप वाकई इस सहेजी गई रिपोर्ट को हटाना चाहते हैं?", - "no_saved": "कोई सहेजी गई रिपोर्ट नहीं", - "report_title": "Title", - "created_by": "के द्वारा बनाई गई", - "created_at": "पर बनाया गया", - "filters": "Filters", - "date_from": "से", - "date_to": "को", - "device_filter": "डिवाइस आईडी", - "generated_at": "पर उत्पन्न", - "section": "डेटा अनुभाग", - "total_devices": "कुल उपकरण", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "प्लेटफार्म वितरण", - "top_applications": "शीर्ष अनुप्रयोग", - "total_active": "कुल सक्रिय समय", - "total_idle": "कुल निष्क्रिय समय", - "dlp_stats": "डीएलपी सांख्यिकी", - "banned_devices": "प्रतिबंधित उपकरण", - "audit_logs": "Audit Logs", - "ticket_stats": "टिकट सांख्यिकी", - "category_distribution": "श्रेणी वितरण", - "priority_distribution": "प्राथमिकता वितरण", - "targets_status": "लक्ष्य स्थिति", - "os_distribution": "ओएस वितरण", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "हालिया अलर्ट", - "tab_generate": "रिपोर्ट तैयार करें", - "tab_saved": "सहेजी गई रिपोर्टें", - "type_devices_desc": "सभी डिवाइस, प्लेटफ़ॉर्म और स्थितियों का अवलोकन", - "type_activity_desc": "एप्लिकेशन उपयोग और निष्क्रिय समय सारांश", - "type_security_desc": "कार्रवाइयों, डीएलपी इवेंट और ऑडिट लॉग पर प्रतिबंध लगाएं", - "type_tickets_desc": "टिकट आँकड़े और एसएलए प्रदर्शन", - "type_network_desc": "नेटवर्क निगरानी लक्ष्य और अपटाइम डेटा", - "type_inventory_desc": "हार्डवेयर और सॉफ्टवेयर इन्वेंट्री सारांश", - "type_alerts_desc": "चेतावनी नियम और ट्रिगर किया गया चेतावनी इतिहास", - "report_name": "Report Name", - "format": "Format", - "save": "रिपोर्ट सहेजें", - "preview": "Preview", - "download": "Download", - "delete_saved": "रिपोर्ट हटाएँ", - "raw_json": "Raw JSON" + "session": "सत्र", + "summary": "सारांश", + "date": "तारीख" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "किरायेदार संपादित करें", - "delete_tenant": "किरायेदार हटाएँ", - "delete_confirm": "क्या आप वाकई इस किरायेदार को हटाना चाहते हैं? सभी डिवाइस और उपयोगकर्ता असाइनमेंट हटा दिए जाएंगे.", - "name": "Name", - "slug": "Slug", - "contact_name": "संपर्क नाम", - "contact_email": "ई - मेल से संपर्क करे", - "max_devices": "अधिकतम उपकरण", - "max_devices_hint": "0 = असीमित", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "उपकरण", - "users": "Users", - "assign_device": "डिवाइस असाइन करें", - "assign_devices": "डिवाइस असाइन करें", - "remove_device": "डिवाइस हटाएँ", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "कोई किरायेदार कॉन्फ़िगर नहीं किया गया", - "no_devices": "इस किरायेदार को कोई उपकरण आवंटित नहीं किया गया", - "no_users": "इस किरायेदार को कोई उपयोगकर्ता निर्दिष्ट नहीं किया गया", - "stats": "किरायेदार सांख्यिकी", - "total_devices": "कुल उपकरण", - "online_devices": "ऑनलाइन उपकरण", - "total_users": "Total Users", - "created_at": "पर बनाया गया", - "updated_at": "पर अद्यतन किया गया", - "slug_exists": "किरायेदार स्लग पहले से मौजूद है", - "total_tenants": "कुल किरायेदार", - "active_tenants": "सक्रिय किरायेदार", - "search": "किरायेदार खोजें...", - "create_tenant": "किरायेदार बनाएँ", - "detail": "किरायेदार विवरण", - "contact": "Contact", - "enabled": "सक्रिय", - "disabled": "अक्षम", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "संगठन अनुबंध", + "new": "पैकेज असाइन करें", + "org": "संगठन", + "package": "पैकेज", + "remaining": "शेष मिनट", + "status": "स्थिति", + "actions": "कार्रवाइयाँ", + "suspend": "निलंबित", + "activate": "सक्रिय", + "select_org": "संगठन चुनें", + "select_package": "पैकेज चुनें", + "no_orgs": "कोई संगठन नहीं मिला", + "no_packages": "पहले एक पैकेज बनाएं" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "डिवाइस आईडी, होस्टनाम या आईपी द्वारा खोजें...", - "no_registrations": "No registration requests", - "col_device_id": "डिवाइस आईडी", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "क्या आप वाकई इस उपकरण को स्वीकृत करना चाहते हैं? यह सर्वर क्रेडेंशियल प्राप्त करेगा और स्वचालित रूप से कनेक्ट हो सकता है।", - "approved_success": "डिवाइस पंजीकरण सफलतापूर्वक स्वीकृत हो गया", - "reject_btn": "Reject", - "reject_title": "पंजीकरण अस्वीकार करें", - "reject_confirm": "क्या आप वाकई इस पंजीकरण अनुरोध को अस्वीकार करना चाहते हैं?", - "reject_reason": "कारण (वैकल्पिक)", - "reject_reason_placeholder": "अस्वीकृति का कारण दर्ज करें...", - "rejected_success": "डिवाइस पंजीकरण अस्वीकृत", - "delete_confirm": "क्या आप वाकई इस पंजीकरण रिकॉर्ड को हटाना चाहते हैं?", - "deleted_success": "पंजीकरण रिकॉर्ड हटा दिया गया", - "enrollment_title": "डिवाइस नामांकन", - "enrollment_subtitle": "BetterDesk डेस्कटॉप क्लाइंट से लंबित नामांकन अनुरोध", - "enrollment_empty": "कोई भी नामांकन अनुरोध लंबित नहीं है", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "प्रदर्शित होने वाला नाम", - "enrollment_display_name_placeholder": "इस डिवाइस के लिए एक नाम दर्ज करें...", - "enrollment_sync_mode": "सिंक मोड", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "डिवाइस नामांकन स्वीकृत", - "enrollment_rejected_success": "डिवाइस नामांकन अस्वीकृत", - "approve_title": "डिवाइस स्वीकृत करें", - "field_name": "डिवाइस नाम", - "field_name_placeholder": "इस डिवाइस के लिए नाम दर्ज करें...", - "field_sync_mode": "सिंक मोड", - "sync_standard": "मानक — संतुलित सिंक", - "sync_silent": "मौन — न्यूनतम टेलीमेट्री", - "sync_turbo": "टर्बो — आक्रामक सिंक", - "field_tags": "टैग", - "field_tags_placeholder": "अल्पविराम से अलग टैग (जैसे कार्यालय, लैपटॉप)...", - "field_tags_existing": "मौजूदा टैग", - "field_tag_add_placeholder": "नया टैग जोड़ें...", - "field_tag_add_btn": "जोड़ें", - "field_groups": "डिवाइस समूह", - "field_folder": "फ़ोल्डर", - "field_folder_none": "कोई फ़ोल्डर नहीं", - "reject_ban_option": "इस डिवाइस को प्रतिबंधित करें", - "reject_ban_hint": "डिवाइस अवरुद्ध हो जाएगा और नए पंजीकरण अनुरोध नहीं भेज सकेगा।", - "banner_open_mode": "नामांकन खुला है — नए RustDesk क्लाइंट बिना ऑपरेटर स्वीकृति के पंजीकृत होते हैं। इस कतार का उपयोग करने के लिए सेटिंग में प्रबंधित मोड सेट करें।", - "banner_locked_mode": "नामांकन लॉक है — केवल टोकन-बाउंड डिवाइस पंजीकृत हो सकते हैं। अज्ञात क्लाइंट के ऑपरेटर अनुमोदन के लिए प्रबंधित मोड आवश्यक है।", - "enrollment_settings_link": "नामांकन सेटिंग" + "export": { + "csv": "CSV निर्यात", + "pdf": "PDF निर्यात", + "sessions_csv": "सत्र CSV निर्यात" }, - "backup": { - "title": "Backup", - "desc": "अपने कंसोल कॉन्फ़िगरेशन, उपयोगकर्ताओं, समूहों और सेटिंग्स का पूर्ण बैकअप डाउनलोड करें। Go server बैकएंड सक्रिय होने पर Go server सहकर्मी डेटा शामिल किया जाता है।", - "restore_title": "Restore", - "restore_desc": "कंसोल कॉन्फ़िगरेशन को पुनर्स्थापित करने के लिए पहले से डाउनलोड की गई बैकअप फ़ाइल अपलोड करें। नीचे चुनें कि किन अनुभागों को पुनर्स्थापित करना है.", - "stat_users": "Users", - "stat_settings": "सेटिंग्स", - "stat_folders": "Folders", - "stat_groups": "समूह", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "बैकअप डाउनलोड करें", - "creating": "बैकअप बनाया जा रहा है...", - "download_success": "बैकअप सफलतापूर्वक डाउनलोड हुआ", - "upload": "बैकअप अपलोड करें", - "restore_confirm": "क्या आप वाकई इस बैकअप से पुनर्स्थापित करना चाहते हैं? चयनित अनुभागों को अधिलेखित कर दिया जाएगा.", - "restore_success": "बैकअप सफलतापूर्वक बहाल हुआ. कुछ परिवर्तनों के लिए पृष्ठ पुनः लोड करने की आवश्यकता हो सकती है।", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "कंसोल सेटिंग्स", - "opt_branding": "ब्रांडिंग/थीम", - "opt_folders": "डिवाइस फ़ोल्डर", - "opt_groups": "उपयोगकर्ता एवं उपकरण समूह", - "opt_addressbooks": "पता पुस्तिकाएँ", - "opt_users": "उपयोगकर्ता खाते", - "opt_users_warning": "विनाशकारी: सभी उपयोगकर्ता खातों को बैकअप डेटा से बदल देता है। आप लॉग आउट हो सकते हैं.", - "no_file": "कोई बैकअप फ़ाइल चयनित नहीं", - "invalid_json": "अमान्य बैकअप फ़ाइल: मान्य JSON नहीं", - "invalid_format": "अमान्य बैकअप फ़ाइल: BetterDesk बैकअप नहीं", - "stat_database": "डेटाबेस इंजन", - "stat_keys": "सर्वर कुंजियाँ शामिल", - "stat_env": "वातावरण फ़ाइल", - "stat_uploads": "ब्रांडिंग फ़ाइलें", - "restart_required": "कुछ पुनर्स्थापित घटकों (कुंजियाँ / .env / Go डेटाबेस) को प्रभावी होने के लिए सेवा पुनः प्रारंभ की आवश्यकता है।", - "security_warning": "इस बैकअप में रहस्य (सर्वर कुंजियाँ, वातावरण फ़ाइल, पासवर्ड हैश और 2FA रहस्य) शामिल हैं। सुरक्षित रखें और कभी साझा न करें।", - "restore_warning": "रहस्यों, वातावरण फ़ाइल या Go सर्वर डेटाबेस को पुनर्स्थापित करने से सर्वर पहचान अधिलेखित होती है और बाद में सेवा पुनः प्रारंभ की आवश्यकता है।", - "opt_database": "डेटाबेस (सभी तालिकाएं)", - "opt_database_hint": "सभी कंसोल डेटा पुनः आयात करता है। सीधे लागू, पुनः प्रारंभ की आवश्यकता नहीं।", - "opt_uploads": "ब्रांडिंग फ़ाइलें", - "opt_uploads_hint": "लोगो और अपलोड की गई छवियाँ।", - "opt_secrets": "सर्वर कुंजियाँ और रहस्य", - "opt_secrets_warning": "Ed25519 सर्वर पहचान, API कुंजी और सत्र रहस्य को अधिलेखित करता है। सेवा पुनः प्रारंभ आवश्यक है।", - "opt_env": "वातावरण फ़ाइल (.env)", - "opt_env_warning": "SESSION_SECRET, API कुंजी, डेटाबेस DSN, पोर्ट और TLS सेटिंग को अधिलेखित करता है। सेवा पुनः प्रारंभ आवश्यक है।", - "opt_godb": "Go सर्वर डेटाबेस", - "opt_godb_warning": "Go सर्वर SQLite डेटाबेस को अधिलेखित करता है (केवल SQLite बैकएंड)। सेवा पुनः प्रारंभ आवश्यक है।" + "report": { + "title": "कार्य रिपोर्ट", + "subtitle": "इस रिमोट सत्र के दौरान किए गए कार्य का वर्णन करें।", + "category": "श्रेणी", + "ticket_ref": "टिकट संदर्भ", + "summary": "किया गया कार्य", + "skip": "अभी छोड़ें", + "submit": "रिपोर्ट भेजें", + "summary_required": "सारांश आवश्यक है", + "saved": "कार्य रिपोर्ट सहेजी गई" }, - "cdap": { - "device_detail": "CDAP डिवाइस", - "loading": "लोड हो रहा है...", - "loading_widgets": "डिवाइस विजेट लोड हो रहा है...", - "load_error": "डिवाइस डेटा लोड करने में विफल", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "डिवाइस अभी ऑफ़लाइन है. विजेट मान पुराने हो सकते हैं.", - "no_widgets": "कोई विजेट उपलब्ध नहीं है", - "no_widgets_desc": "इस डिवाइस ने विजेट परिभाषाओं के साथ CDAP मेनिफेस्ट पंजीकृत नहीं किया है।", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "आदेश की पुष्टि करें", - "select_option": "चुनना", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "आदेश भेजें", - "command_sent": "आदेश सफलतापूर्वक भेजा गया", - "command_failed": "आदेश भेजने में विफल", - "devices_title": "CDAP उपकरण", - "devices_subtitle": "कस्टम डिवाइस एप्लिकेशन प्रोटोकॉल के माध्यम से कनेक्टेड डिवाइस", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "डिवाइस खोजें...", - "no_devices": "कोई डिवाइस कनेक्ट नहीं है", - "no_devices_desc": "वर्तमान में कोई CDAP डिवाइस कनेक्ट नहीं है। गेटवे से कनेक्ट होते ही डिवाइस यहां दिखाई देंगे।", - "gateway_disabled": "CDAP गेटवे अक्षम", - "gateway_disabled_desc": "सर्वर कॉन्फ़िगरेशन में CDAP_ENABLED=true सेट करके CDAP गेटवे सक्षम करें।", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "CDAP अक्षम करें", - "enabled_restart": "CDAP सक्षम। परिवर्तन लागू करने के लिए सर्वर पुनरारंभ आवश्यक है।", - "disabled_restart": "CDAP अक्षम किया गया. परिवर्तन लागू करने के लिए सर्वर पुनरारंभ आवश्यक है।", - "widgets": "विजेट", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "सक्रिय अलर्ट", - "alert_fired": "Alert fired", - "alert_cleared": "अलर्ट साफ़ किया गया", - "no_alerts": "कोई सक्रिय अलर्ट नहीं", - "connect_terminal": "टर्मिनल कनेक्ट करें", - "table_search": "खोज...", - "just_now": "Just now", - "terminal_connecting": "उपकरण से जुड़ रहा है...", - "terminal_disconnected": "Disconnected", - "terminal_error": "टर्मिनल कनेक्शन विफल", - "linked_devices": "जुड़े हुए उपकरण", - "link_device": "डिवाइस लिंक करें", - "unlink_device": "Unlink", - "no_linked_devices": "कोई लिंक्ड डिवाइस नहीं", - "unlink_confirm": "क्या आप वाकई इस डिवाइस को अनलिंक करना चाहते हैं?", - "link_prompt": "इस डिवाइस से लिंक करने के लिए पीयर आईडी दर्ज करें:", - "connect_desktop": "डेस्कटॉप कनेक्ट करें", - "connect_video": "स्ट्रीम कनेक्ट करें", - "connect_files": "फ़ाइलों को ब्राउज़ करें", - "connect_audio": "ऑडियो कनेक्ट करें", - "upload_file": "Upload", - "desktop_connecting": "कनेक्ट हो रहा है...", - "video_connecting": "कनेक्ट हो रहा है...", - "files_connecting": "कनेक्ट हो रहा है...", - "audio_connecting": "कनेक्ट हो रहा है...", - "audio_streaming": "Streaming", - "clipboard_in": "क्लिपबोर्ड प्राप्त हुआ", - "clipboard_out": "क्लिपबोर्ड भेजा गया", - "monitor_select": "मॉनिटर का चयन करें", - "keyframe_request": "मुख्य-फ़्रेम का अनुरोध करें", - "quality_auto": "ऑटो गुणवत्ता" + "empty": { + "packages": "अभी कोई पैकेज नहीं। ऊपर के बटन से एक बनाएं।", + "contracts": "अभी कोई संगठन अनुबंध नहीं। किसी संगठन को पैकेज असाइन करें।", + "sessions": "अभी कोई बिल योग्य सत्र दर्ज नहीं।", + "reports": "अभी कोई कार्य रिपोर्ट नहीं।" }, - "desktop": { - "switch_mode": "डेस्कटॉप मोड", - "console_mode": "कंसोल मोड", - "loading": "लोड हो रहा है...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "बंद करना", - "widgets_mode": "विजेट", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "विजेट जोड़ें", - "remove_widget": "विजेट हटाएँ", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "कॉन्फ़िगर", - "search_widgets": "विजेट खोजें...", - "cat_monitoring": "Monitoring", - "cat_devices": "उपकरण", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "यहां नोट्स लिखें...", - "search_placeholder": "डिवाइस, पेज, सेटिंग्स खोजें...", - "search_pages": "Pages", - "search_devices": "उपकरण", - "search_no_results": "No results", - "exit_desktop": "डेस्कटॉप मोड से बाहर निकलें", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "डिवाइस स्थिति", - "widget_server_health": "सर्वर जानकारी", - "widget_system_stats": "डिवाइस गेज", - "widget_device_list": "डिवाइस सूची", - "widget_quick_actions": "त्वरित कार्रवाई", - "widget_recent_activity": "हाल की गतिविधि", - "widget_notes": "Notes", - "widget_network_monitor": "नेटवर्क मॉनिटर", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP उपकरण", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "डिवाइस ग्रिड", - "widget_multi_gauge": "सर्वर गेज", - "widget_weekly_chart": "साप्ताहिक गतिविधि", - "widget_quick_controls": "त्वरित नियंत्रण", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "कनेक्शन आँकड़े", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "उपयोगकर्ता सत्र", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "कोई उपकरण नहीं", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "खुला", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "कॉन्फ़िगरेशन में URL सेट करें", - "label_server_uptime": "सर्वर अपटाइम", - "label_merged_info": "सर्वर जानकारी विजेट में विलय", - "label_with_notes": "नोट्स के साथ", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "कुल उपकरण", - "label_throughput": "Throughput", - "label_active_relays": "सक्रिय रिले", - "label_total_relayed": "कुल रिले", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "फ़िल्टर डिवाइस...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "कोई CDAP डिवाइस नहीं", - "action_add_widget": "विजेट जोड़ें", - "label_merged_server_info": "सर्वर जानकारी विजेट में विलय", - "wp_images": "Images", - "wp_colors": "ठोस रंग", - "wp_custom_color": "कस्टम रंग", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "इस सर्वर पर वॉलपेपर छवियां स्थापित नहीं हैं।", - "wp_download_hint": "वॉलपेपर चयन को सक्षम करने के लिए पीएनजी छवियों को सार्वजनिक/वॉलपेपर/निर्देशिका में रखें।", - "widget_calendar": "Calendar", - "widget_process_monitor": "प्रक्रिया मॉनिटर", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "डेटाबेस आँकड़े", - "widget_docker_containers": "Docker कंटेनर", - "widget_shell_command": "शैल कमान", - "widget_device_map": "डिवाइस मानचित्र", - "widget_remote_connect": "रिमोट कनेक्ट", - "label_no_online": "कोई ऑनलाइन डिवाइस नहीं", - "label_no_events": "आज कोई कार्यक्रम नहीं", - "label_event_title": "इवेंट का शीर्षक:", - "label_no_data": "कोई डेटा मौजूद नहीं", - "label_download_speed": "डाउनलोड की गति", - "label_latency": "Latency", - "label_server": "सर्वर", - "label_run_test": "Run Test", - "label_testing": "परीक्षण...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "कोई कंटेनर नहीं", - "label_docker_unavailable": "Docker उपलब्ध नहीं है", - "label_no_command": "कोई आदेश कॉन्फ़िगर नहीं किया गया", - "label_no_output": "अभी तक कोई आउटपुट नहीं", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "प्रीसेट सहेजें", - "label_load_preset": "Load Preset", - "label_preset_name": "पूर्व निर्धारित नाम:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "स्वतः व्यवस्थित करें", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 कॉलम (समान)", - "label_2col_wide": "2 कॉलम (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "विजेट समूह", - "ungroup_widgets": "विजेट्स को अनग्रुप करें", - "group_widgets": "समूह चयनित विजेट", - "snap_layouts": "स्नैप लेआउट", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "ऊपर-बाएँ स्नैप करें", - "snap_top_right": "स्नैप टॉप-राइट", - "snap_bottom_left": "नीचे-बाएँ स्नैप करें", - "snap_bottom_right": "स्नैप बॉटम-राइट", - "aero_shake": "दूसरों को छोटा करने के लिए हिलाएँ", - "zone_resize": "क्षेत्रों का आकार बदलने के लिए बॉर्डर खींचें", - "zone_borders": "खींचने योग्य क्षेत्र सीमाएँ", - "app_drawer": "Applications", - "search_apps": "ऐप्स खोजें...", - "edit_shortcuts": "शॉर्टकट संपादित करें", - "widgets": "विजेट", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "मौजूदा पैकेज असाइन करें", + "submit": "असाइन करें" }, - "desktop_login": { - "click_to_sign_in": "साइन इन करने के लिए कहीं भी क्लिक करें या कुंजी दबाएँ", - "username_placeholder": "उपयोगकर्ता नाम", - "password_placeholder": "पासवर्ड", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "दो-कारक प्रमाणीकरण", - "totp_subtitle": "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें", - "back_to_login": "लॉगिन पर वापस जाएं", - "fill_all_fields": "कृपया सभी स्थानों को भरें", - "invalid_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड", - "invalid_code": "अवैध सत्यापन संकेत", - "enter_6_digits": "सभी 6 अंक दर्ज करें", - "network_error": "Network error — check your connection", - "session_expired": "सत्र समाप्त हुआ। कृपया पुनः साइन इन करें." - }, - "tokens": { - "title": "डिवाइस टोकन", - "subtitle": "स्वचालित डिवाइस प्रावधान के लिए नामांकन टोकन प्रबंधित करें", - "enrollment_mode": "नामांकन मोड", - "mode_open": "खुला", - "mode_open_desc": "कोई भी उपकरण बिना टोकन के पंजीकरण कर सकता है", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "कुल टोकन", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "टोकन खोजें...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "थोक में उत्पन्न करें", - "create": "टोकन बनाएं", - "edit": "टोकन संपादित करें", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "बनाया था", - "actions": "Actions", - "name_placeholder": "जैसे ऑफिस पीसी बैच", - "max_uses": "Max Uses", - "max_uses_hint": "0 = असीमित", - "expires_in": "Expires In", - "no_expiration": "कोई समय समाप्ति नहीं", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "इस टोकन के बारे में वैकल्पिक नोट...", - "count": "Count", - "count_range": "उत्पन्न करने के लिए टोकन की संख्या (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "टोकन बनाया गया", - "tokens_generated": "टोकन जनरेट किए गए", - "copy_warning": "अब टोकन कॉपी करें. इसे दोबारा नहीं दिखाया जाएगा.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "क्या आप वाकई इस टोकन को रद्द करना चाहते हैं? इससे पहले से पंजीकृत डिवाइस प्रभावित नहीं होंगे।", - "revoked_success": "टोकन सफलतापूर्वक निरस्त कर दिया गया", - "no_tokens": "कोई टोकन नहीं मिला", - "expired": "Expired", - "never": "Never", - "save": "बचाना", - "cancel": "रद्द करना", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "अगला", - "prev": "Previous", - "skip": "Skip", - "finish": "खत्म करना", - "close": "बंद करना", - "step_of": "{total} का {current}", - "console_sidebar_title": "नेविगेशन साइडबार", - "console_sidebar_text": "यहां से सभी मॉड्यूल तक पहुंचें। उस अनुभाग पर नेविगेट करने के लिए किसी भी आइकन पर क्लिक करें। साइडबार आपके स्क्रीन आकार के अनुरूप होता है।", - "console_expand_title": "साइडबार का विस्तार करें", - "console_expand_text": "साइडबार का विस्तार करने और सभी नेविगेशन आइटमों के लिए पूर्ण लेबल देखने के लिए यहां क्लिक करें। संक्षिप्त करने के लिए पुनः क्लिक करें.", - "console_search_title": "त्वरित खोज", - "console_search_text": "डिवाइस, सेटिंग्स या कार्रवाइयों को शीघ्रता से खोजें। कीबोर्ड शॉर्टकट के लिए Ctrl+K दबाएँ।", - "console_dashboard_title": "डैशबोर्ड", - "console_dashboard_text": "आपका सेंट्रल हब सर्वर स्थिति, ऑनलाइन डिवाइस और त्वरित कार्रवाइयां दिखा रहा है। एक नज़र में महत्वपूर्ण मैट्रिक्स पर नज़र रखें।", - "console_devices_title": "डिवाइस प्रबंधन", - "console_devices_text": "सभी कनेक्टेड डिवाइस देखें, खोजें और प्रबंधित करें। स्थिति के आधार पर फ़िल्टर करें, टैग निर्दिष्ट करें और अलग-अलग डिवाइस सेटिंग्स कॉन्फ़िगर करें।", - "console_settings_title": "सेटिंग्स", - "console_settings_text": "सर्वर व्यवहार, सुरक्षा विकल्प, ब्रांडिंग और उपयोगकर्ता प्रबंधन कॉन्फ़िगर करें। अपनी आवश्यकताओं के अनुरूप BetterDesk को अनुकूलित करें।", - "console_desktop_title": "डेस्कटॉप मोड", - "console_desktop_text": "विजेट्स के साथ विंडो वाले कार्यक्षेत्र के लिए डेस्कटॉप मोड पर स्विच करें। मल्टी-टास्किंग और मॉनिटरिंग डैशबोर्ड के लिए बिल्कुल सही।", - "console_complete_title": "आप तैयार हैं!", - "console_complete_text": "सभी सुविधाओं को खोजने के लिए साइडबार श्रेणियों का अन्वेषण करें। इस गाइड को पुनः आरंभ करने के लिए किसी भी समय सहायता आइकन पर क्लिक करें।", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "शीर्ष बार घड़ी, त्वरित नियंत्रण और ऐप ड्रॉअर तक पहुंच दिखाता है। सभी ऐप्स ब्राउज़ करने के लिए ग्रिड आइकन पर क्लिक करें।", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "किसी भी कंसोल फ़ंक्शन को फ़्लोटिंग विंडो के रूप में खोजने और लॉन्च करने के लिए ऐप ड्रॉअर खोलें। ऐप्स को श्रेणी के अनुसार व्यवस्थित किया जाता है।", - "desktop_widgets_title": "विजेट डैशबोर्ड", - "desktop_widgets_text": "आपका अनुकूलन योग्य कार्यक्षेत्र. विजेट लाइव जानकारी प्रदर्शित करते हैं और सुविधाओं तक त्वरित पहुंच प्रदान करते हैं। पुनर्व्यवस्थित करने के लिए खींचें.", - "desktop_add_widget_title": "विजेट जोड़ें", - "desktop_add_widget_text": "उपलब्ध विजेट ब्राउज़ करने के लिए यहां क्लिक करें। मॉनिटरिंग डिस्प्ले, डिवाइस सूची, नोट्स और बहुत कुछ में से चुनें।", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "खुले ऐप्स यहां दिखाई देते हैं. विंडोज़ को फ़ोकस करने या छोटा करने के लिए क्लिक करें। ऐप लेबल देखने के लिए आइकन पर होवर करें।", - "desktop_snap_title": "स्नैप लेआउट", - "desktop_snap_text": "विंडोज़ को स्थिति में लाने के लिए उन्हें स्क्रीन के किनारों पर खींचें, या लेआउट प्रीसेट के लिए अधिकतम बटन पर होवर करें। एयरो शेक आज़माएँ!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "ऐप्स खींचने योग्य, आकार बदलने योग्य विंडो में खुलते हैं। शीर्षक पट्टी से छोटा करें, अधिकतम करें या बंद करें। विजेट्स के ऊपर Windows परत।", - "desktop_search_title": "त्वरित खोज", - "desktop_search_text": "सभी डिवाइस, पेज और सेटिंग्स में खोजें। तुरंत खोज खोलने के लिए कहीं भी Ctrl+K दबाएँ।", - "desktop_complete_title": "डेस्कटॉप मोड तैयार!", - "desktop_complete_text": "ड्रॉअर से ऐप्स खोलने और विंडोज़ को साथ-साथ व्यवस्थित करने का प्रयास करें। त्वरित डैशबोर्ड लेआउट के लिए विजेट प्रीसेट का उपयोग करें।", - "devices_folders_title": "डिवाइस फ़ोल्डर", - "devices_folders_text": "डिवाइसों को फ़ोल्डरों में व्यवस्थित करें. सूची को फ़िल्टर करने के लिए किसी फ़ोल्डर पर क्लिक करें। नाम बदलने या हटाने के लिए राइट-क्लिक करें।", - "devices_search_title": "खोजें एवं फ़िल्टर करें", - "devices_search_text": "आईडी, होस्टनाम या प्लेटफ़ॉर्म के आधार पर खोजें। स्टेटस पिल्स का उपयोग केवल ऑनलाइन, ऑफलाइन या सभी डिवाइस पर दिखाने के लिए करें।", - "devices_table_title": "डिवाइस सूची", - "devices_table_text": "विवरण के लिए किसी भी डिवाइस पंक्ति पर क्लिक करें। कनेक्ट करने, टैग संपादित करने या हटाने जैसी त्वरित कार्रवाइयों के लिए दाईं ओर कबाब मेनू का उपयोग करें।", - "devices_complete_title": "डिवाइस प्रबंधन तैयार!", - "devices_complete_text": "डिवाइसों को व्यवस्थित करने के लिए उन्हें फ़ोल्डरों के बीच खींचें। किसी डिवाइस का विवरण पैनल खोलने के लिए उस पर डबल-क्लिक करें।", - "settings_tabs_title": "सेटिंग्स श्रेणियाँ", - "settings_tabs_text": "सामान्य, सुरक्षा, उपस्थिति और अन्य कॉन्फ़िगरेशन अनुभागों के बीच नेविगेट करें।", - "settings_content_title": "विन्यास", - "settings_content_text": "प्रत्येक अनुभाग में विशिष्ट सर्वर और कंसोल सेटिंग्स शामिल हैं। जब आप सहेजें पर क्लिक करते हैं तो परिवर्तन सहेजे जाते हैं।", - "settings_complete_title": "सेटिंग्स अवलोकन", - "settings_complete_text": "2FA, API कुंजियों और उपयोगकर्ता प्रबंधन के लिए सुरक्षा सेटिंग्स की जाँच करें। कंसोल लुक को कस्टमाइज़ करने के लिए Appearance पर जाएँ।", - "help": "सहायता एवं ट्यूटोरियल", - "tour_console": "कंसोल टूर", - "tour_desktop": "डेस्कटॉप मोड टूर", - "tour_devices": "डिवाइस टूर", - "tour_settings": "सेटिंग टूर", - "reset_all": "सभी ट्यूटोरियल रीसेट करें", - "tour_remote": "दूरस्थ सत्र यात्रा", - "tour_organization": "संगठन सेटअप", - "tour_cdap": "CDAP सिंहावलोकन", - "tour_chat": "चैट की मूल बातें", - "remote_toolbar_title": "रिमोट टूलबार", - "remote_toolbar_text": "टूलबार से डिस्प्ले नियंत्रण, क्लिपबोर्ड सिंक, विशेष कुंजी और गुणवत्ता सेटिंग्स तक पहुंचें। F11 के साथ फुलस्क्रीन टॉगल करें।", - "remote_canvas_title": "रिमोट डिस्प्ले", - "remote_canvas_text": "यह रिमोट स्क्रीन है. रिमोट डिवाइस को नियंत्रित करना शुरू करने के लिए अंदर क्लिक करें। माउस और कीबोर्ड इनपुट स्वचालित रूप से अग्रेषित किए जाते हैं।", - "remote_clipboard_title": "क्लिपबोर्ड सिंक", - "remote_clipboard_text": "अपने कंप्यूटर और रिमोट डिवाइस के बीच टेक्स्ट को कॉपी और पेस्ट करें। रिमोट डिस्प्ले पर ध्यान केंद्रित करते समय सामान्य रूप से Ctrl+C/Ctrl+V का उपयोग करें।", - "remote_complete_title": "दूरस्थ सत्र तैयार!", - "remote_complete_text": "विशेष कुंजियों (Ctrl+Alt+Del, PrintScreen) और मॉनिटर स्विचिंग के लिए टूलबार बटन का उपयोग करें। सत्र समाप्त करने के लिए एस्केप दबाएँ या डिस्कनेक्ट पर क्लिक करें।", - "org_overview_title": "संगठनों", - "org_overview_text": "संगठन आपको उपयोगकर्ताओं, उपकरणों और नीतियों को समूहीकृत करने देते हैं। प्रत्येक संगठन का अपना व्यवस्थापक, ऑपरेटर और सेटिंग्स होती हैं।", - "org_create_title": "संगठन बनाएं", - "org_create_text": "नया संगठन बनाने के लिए यहां क्लिक करें. एक नाम, स्लग और वैकल्पिक विवरण प्रदान करें। आप नये संगठन के स्वामी होंगे।", - "org_members_title": "सदस्यों को प्रबंधित करें", - "org_members_text": "उपयोगकर्ताओं को ईमेल द्वारा आमंत्रित करें, भूमिकाएँ निर्दिष्ट करें (व्यवस्थापक, ऑपरेटर, उपयोगकर्ता), और पहुंच प्रबंधित करें। सदस्य अपने संगठन को सौंपे गए उपकरण देख सकते हैं।", - "org_devices_title": "डिवाइस असाइन करें", - "org_devices_text": "संगठन में उपकरण जोड़ें. यहां असाइन किए गए उपकरण संगठन की नीतियों को प्राप्त करेंगे और इसके सदस्यों को दिखाई देंगे।", - "org_policies_title": "संगठन नीतियाँ", - "org_policies_text": "संगठन के लिए पासवर्ड आवश्यकताएं, सत्र टाइमआउट, 2एफए प्रवर्तन और डिवाइस नामांकन नियम जैसी सुरक्षा नीतियां निर्धारित करें।", - "org_complete_title": "संगठन सेटअप पूर्ण!", - "org_complete_text": "संगठन के दायरे वाले प्रबंधन का उपयोग शुरू करने के लिए अपनी टीम को आमंत्रित करें और डिवाइस असाइन करें। नीतियाँ सभी सदस्यों पर स्वचालित रूप से लागू होती हैं।", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "संपर्क एवं समूह", - "chat_contacts_text": "अपने संपर्क और चैट समूह देखें. वार्तालाप खोलने के लिए किसी भी संपर्क पर क्लिक करें। हरे बिंदु ऑनलाइन उपयोगकर्ताओं को दर्शाते हैं।", - "chat_send_title": "संदेश भेजें", - "chat_send_text": "अपना संदेश टाइप करें और भेजने के लिए Enter दबाएँ। जब दोनों पक्ष E2E का समर्थन करते हैं तो संदेश एंड-टू-एंड एन्क्रिप्टेड होते हैं।", - "chat_file_title": "फ़ाइलें साझा करें", - "chat_file_text": "फ़ाइलें साझा करने के लिए अनुलग्नक आइकन पर क्लिक करें. फ़ाइलें एन्क्रिप्टेड हैं और 50 एमबी तक हो सकती हैं।", - "chat_complete_title": "चैट तैयार!", - "chat_complete_text": "वास्तविक समय में ऑपरेटरों और अंतिम उपयोगकर्ताओं के साथ चैट करें। टीम संचार के लिए समूह बनाएं. सभी संदेश पढ़ने की रसीदों का समर्थन करते हैं।", - "disable_tutorials": "ट्यूटोरियल अक्षम करें", - "enable_tutorials": "ट्यूटोरियल सक्षम करें" - }, - "help_request": { - "title": "सहायता अनुरोध", - "subtitle": "डेस्कटॉप क्लाइंट से आने वाले सहायता अनुरोध प्रबंधित करें", - "new_request": "नया सहायता अनुरोध", - "device": "उपकरण", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "कोई सहायता अनुरोध नहीं", - "notification": "से सहायता अनुरोध प्राप्त हुआ", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "संगठनों", - "create": "संगठन बनाएं", - "edit": "संगठन संपादित करें", - "detail": "संगठन विवरण", - "name": "Name", - "slug": "स्लग (URL-सुरक्षित)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "उपकरण", - "invitations": "Invitations", - "settings": "सेटिंग्स", - "add_user": "Add User", - "assign_device": "डिवाइस असाइन करें", - "create_invitation": "निमंत्रण बनाएँ", - "delete_confirm": "इस संगठन को हटाएं? यह सभी संबद्ध उपयोगकर्ताओं, उपकरणों और सेटिंग्स को हटा देगा।", - "no_orgs": "अभी तक कोई संगठन नहीं", - "no_orgs_hint": "उपकरणों और उपयोगकर्ताओं का प्रबंधन शुरू करने के लिए अपना पहला संगठन बनाएं।", - "connection_policy": "कनेक्शन नीति", - "allow_file_transfer": "फ़ाइल स्थानांतरण की अनुमति दें", - "allow_clipboard": "क्लिपबोर्ड को अनुमति दें", - "max_session_duration": "अधिकतम सत्र अवधि (न्यूनतम)", - "role_owner": "Owner", - "role_admin": "व्यवस्थापक", - "role_operator": "Operator", - "role_user": "सदस्य", - "username": "उपयोगकर्ता नाम", - "password": "पासवर्ड", - "display_name": "प्रदर्शित होने वाला नाम", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "डिवाइस आईडी", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "निर्दिष्ट उपयोगकर्ता", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "इस संगठन में कोई उपयोगकर्ता नहीं.", - "no_devices": "इस संगठन को कोई उपकरण नहीं सौंपा गया है.", - "no_invitations": "कोई निमंत्रण नहीं.", - "user_added": "User added", - "user_removed": "उपयोगकर्ता हटा दिया गया", - "user_updated": "उपयोगकर्ता भूमिका अद्यतन की गई", - "device_assigned": "डिवाइस असाइन किया गया", - "device_unassigned": "डिवाइस अनअसाइन किया गया", - "invitation_created": "निमंत्रण बनाया गया", - "settings_saved": "सेटिंग्स को सहेजा गया", - "org_deleted": "संगठन हटा दिया गया", - "confirm_remove_user": "इस उपयोगकर्ता को संगठन से निकालें?", - "confirm_unassign_device": "क्या आप इस डिवाइस को संगठन से अनअसाइन करना चाहते हैं?", - "confirm_delete_org": "इस संगठन और सभी संबद्ध डेटा को हटाएं?", - "edit_role": "भूमिका संपादित करें", - "raw_settings": "कच्ची सेटिंग्स", - "key": "Key", - "value": "Value", - "save": "सेटिंग्स सेव करें", - "policy_unattended": "अप्राप्य (तत्काल)", - "policy_attended": "उपस्थित हुए (पुष्टि के साथ)", - "policy_ask": "Always ask", - "expires_hours": "समाप्ति (घंटे)", - "loading_failed": "संगठन डेटा लोड करने में विफल", - "name_slug_required": "नाम और स्लग आवश्यक है", - "org_created": "संगठन बनाया गया", - "org_updated": "संगठन अद्यतन किया गया", - "create_new_user": "नया निर्माण", - "add_existing_user": "मौजूदा जोड़ें", - "none_available": "none", - "select_user": "उपयोगकर्ता का चयन करें", - "org_role": "संगठन की भूमिका", - "link_user_hint": "चयनित उपयोगकर्ता को उनके सर्वर खाता क्रेडेंशियल का उपयोग करके इस संगठन से जोड़ा जाएगा।", - "no_available_users": "सभी सर्वर उपयोगकर्ता पहले से ही इस संगठन से जुड़े हुए हैं।", - "user_linked": "उपयोगकर्ता संगठन से जुड़ा हुआ है" - }, - "chat": { - "e2e_enabled": "एंड-टू-एंड एन्क्रिप्टेड", - "e2e_establishing": "सुरक्षित चैनल स्थापित किया जा रहा है...", - "e2e_established": "सुरक्षित चैनल स्थापित", - "e2e_unsupported": "इस ब्राउज़र में E2E एन्क्रिप्शन समर्थित नहीं है", - "typing_indicator": "टाइपिंग...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "फ़ाइल", - "file_too_large": "फ़ाइल बहुत बड़ी है (अधिकतम 50एमबी)", - "file_encrypted": "एन्क्रिप्टेड फ़ाइल स्थानांतरण", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "सुरक्षा कुंजियाँ घुमाई गईं", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "समूह", - "no_contacts": "अभी तक कोई संपर्क नहीं", - "no_groups": "अभी तक कोई समूह नहीं", - "no_messages": "अभी तक कोई संदेश नहीं", - "no_results": "कोई परिणाम नहीं मिला", - "select_conversation": "चैटिंग शुरू करने के लिए एक वार्तालाप चुनें", - "type_message": "एक संदेश टाइप करें...", - "send": "भेजना", - "attach_file": "फ़ाइल जोड़ें", - "emoji": "Emoji", - "search_messages": "संदेश खोजें", - "create_group": "समूह बनाना", - "group_name": "समूह नाम", - "group_members": "सदस्यों", - "cancel": "रद्द करना", - "create": "बनाएं", - "members": "सदस्यों", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "संपर्क एवं संदेश खोजें", - "select_conversation_hint": "संदेश देखने के लिए कोई वार्तालाप चुनें", - "info": "Info", - "group_name_placeholder": "समूह का नाम दर्ज करें" - }, - "toast": { - "device_connected": "डिवाइस कनेक्ट किया गया", - "device_disconnected": "डिवाइस डिस्कनेक्ट किया गया", - "session_started": "दूरस्थ सत्र प्रारंभ हुआ", - "session_ended": "दूरस्थ सत्र समाप्त हो गया", - "file_upload_complete": "फ़ाइल अपलोड पूर्ण", - "settings_saved": "सेटिंग्स को सहेजा गया", - "error_generic": "एक त्रुटि पाई गई", - "connection_lost": "कनेक्शन टूट गया", - "reconnecting": "पुनः कनेक्ट हो रहा है..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "व्यवस्थापक उपयोगिताएँ और निदान उपकरण", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "भेजना", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "पाठ दर्ज करें...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "सर्वर जाओ", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "होस्ट की पहुंच योग्यता और विलंबता की जांच करें", - "tcp_title": "TCP पोर्ट जांच", - "tcp_desc": "TCP पोर्ट कनेक्टिविटी का परीक्षण करें", - "ssl_title": "एसएसएल इंस्पेक्टर", - "ssl_desc": "SSL/TLS प्रमाणपत्र विवरण का निरीक्षण करें", - "http_title": "HTTP स्वास्थ्य जांच", - "http_desc": "HTTP समापन बिंदु स्थिति सत्यापित करें", - "dns_title": "DNS Lookup", - "dns_desc": "होस्टनाम को आईपी पते पर हल करें", - "whois_title": "DNS Records", - "whois_desc": "क्वेरी ए, एएएए, एमएक्स, टीएक्सटी, एनएस रिकॉर्ड", - "speed_title": "Speed Test", - "speed_desc": "डाउनलोड बैंडविड्थ मापें", - "run_speed_test": "स्पीड टेस्ट चलाएँ", - "wol_title": "Wake-on-LAN", - "wol_desc": "किसी डिवाइस को जगाने के लिए जादुई पैकेट भेजें", - "wol_sent": "जादुई पैकेट भेजा गया", - "hash_title": "हैश जेनरेटर", - "hash_desc": "क्रिप्टोग्राफ़िक हैश उत्पन्न करें", - "password_title": "पासवर्ड जेनरेटर", - "password_desc": "एक सुरक्षित यादृच्छिक पासवर्ड उत्पन्न करें", - "jwt_title": "JWT Decoder", - "jwt_desc": "JSON वेब टोकन को डिकोड और निरीक्षण करें", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 डेटा को एनकोड या डीकोड करें", - "url_title": "URL Encoder", - "url_desc": "URL घटकों को एनकोड या डीकोड करें", - "processes_title": "प्रक्रिया सूची", - "processes_desc": "चल रही सिस्टम प्रक्रियाएँ देखें", - "disk_title": "Disk Usage", - "disk_desc": "डिस्क विभाजन उपयोग देखें", - "db_title": "डेटाबेस आँकड़े", - "db_desc": "डेटाबेस तालिका आँकड़े देखें", - "docker_title": "Docker कंटेनर", - "docker_desc": "चल रहे Docker कंटेनर देखें", - "logs_title": "Log Viewer", - "logs_desc": "हालिया लॉग आउटपुट देखें", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "से मान्य", - "valid_to": "मान्य के लिए", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "कोई डेटा मौजूद नहीं", - "no_docker": "कोई Docker कंटेनर नहीं मिला या Docker उपलब्ध नहीं है", - "no_logs": "कोई लॉग लाइन उपलब्ध नहीं है" - }, - "policies": { - "title": "संगठन नीतियाँ", - "subtitle": "अपने संगठनों के लिए सुरक्षा, कनेक्शन और सुविधा नीतियां प्रबंधित करें", - "select_org": "संगठन", - "select_org_placeholder": "एक संगठन चुनें...", - "select_org_first": "पॉलिसी ऑडिट लॉग देखने के लिए एक संगठन का चयन करें।", - "configured": "Configured", - "connection_title": "कनेक्शन नीति", - "connection_desc": "नियंत्रित करें कि दूरस्थ सत्र कैसे स्थापित किए जाते हैं", - "connection_mode": "संपर्क मोड", - "mode_attended": "भाग लिया (उपयोगकर्ता अनुमोदन की आवश्यकता है)", - "mode_unattended": "अप्राप्य (हमेशा अनुमति दें)", - "mode_ask": "Always Ask", - "max_session": "अधिकतम सत्र अवधि (मिनट)", - "idle_lock": "निष्क्रिय लॉक टाइमआउट (मिनट)", - "wallpaper_policy": "सत्र के दौरान वॉलपेपर", - "wallpaper_show": "Show", - "wallpaper_hide_session": "सत्र के दौरान छुपें", - "wallpaper_hide_always": "Always hide", - "features_title": "फ़ीचर नीति", - "features_desc": "उपकरणों के लिए विशिष्ट सुविधाओं को सक्षम या अक्षम करें", - "allow_file_transfer": "फ़ाइल स्थानांतरण की अनुमति दें", - "allow_clipboard": "क्लिपबोर्ड सिंक की अनुमति दें", - "allow_audio": "ऑडियो स्ट्रीमिंग की अनुमति दें", - "allow_recording": "सत्र रिकॉर्डिंग की अनुमति दें", - "security_title": "सुरक्षा नीति", - "security_desc": "संगठन उपकरणों के लिए सुरक्षा आवश्यकताओं को लागू करें", - "require_2fa": "अनअटेंडेड एक्सेस के लिए 2FA की आवश्यकता है", - "password_min_length": "न्यूनतम पासवर्ड लंबाई", - "password_require_special": "विशेष वर्णों की आवश्यकता है", - "password_max_age": "पासवर्ड अधिकतम आयु (दिन, 0=कभी नहीं)", - "allowed_operators": "स्वीकृत ऑपरेटर भूमिकाएँ (अल्पविराम से अलग)", - "network_title": "नेटवर्क नीति", - "network_desc": "रिले सर्वर और सीधे कनेक्शन को नियंत्रित करें", - "block_direct_p2p": "ब्लॉक डायरेक्ट पी2पी (बल रिले)", - "allowed_relays": "अनुमत रिले सर्वर (प्रति पंक्ति एक)", - "ip_allowlist": "आईपी ​​अनुमति सूची (सीआईडीआर, प्रति पंक्ति एक)", - "update_title": "अद्यतन नीति", - "update_desc": "स्वचालित अपडेट और अपडेट चैनल नियंत्रित करें", - "auto_update": "ऑटो-अपडेट सक्षम करें", - "update_channel": "चैनल अपडेट करें", - "audit_title": "नीति परिवर्तन", - "audit_desc": "हालिया नीति परिवर्तन का इतिहास", - "no_audit": "कोई नीति परिवर्तन दर्ज नहीं किया गया.", - "save_success": "नीति सफलतापूर्वक सहेजी गई", - "save_failed": "पॉलिसी सहेजने में विफल", - "load_failed": "नीतियां लोड करने में विफल", - "block_direct_p2p_hint": "इस संगठन के डिवाइस पर लागू होता है। वैश्विक डिफ़ॉल्ट सेटिंग → कनेक्शन रणनीति में है।" - }, - "attestation": { - "title": "डिवाइस सत्यापन", - "subtitle": "डिवाइस पहचान सत्यापन और हार्डवेयर फ़िंगरप्रिंट की निगरानी करें", - "verified": "Verified", - "pending": "Pending", - "failed": "असफल", - "device_list": "डिवाइस सत्यापन रिकॉर्ड", - "device_list_desc": "हार्डवेयर फ़िंगरप्रिंट और पहचान सत्यापन स्थिति", - "col_device": "डिवाइस आईडी", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "कोई प्रमाणित अभिलेख नहीं मिला.", - "verify_success": "डिवाइस को सत्यापित के रूप में चिह्नित किया गया", - "verify_failed": "डिवाइस सत्यापित करने में विफल", - "revoke_success": "डिवाइस सत्यापन निरस्त कर दिया गया", - "revoke_failed": "सत्यापन रद्द करने में विफल" - }, - "fleet": { - "title": "बेड़ा प्रबंधन", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "वर्कफ़्लो बिल्डर", - "tab_compliance": "Compliance", - "res_title": "संसाधन मानचित्रण", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "नेटवर्क ड्राइव", - "res_type_dns": "DNS सर्वर", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "संसाधन जोड़ें", - "res_name": "संसाधन का नाम", - "res_type": "Type", - "res_address": "पता/पथ", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "संगठन", - "res_scope_group": "समूह", - "res_scope_device": "उपकरण", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "कोई संसाधन नहीं मिला. एक बनाने के लिए 'संसाधन जोड़ें' पर क्लिक करें।", - "res_confirm_delete": "क्या आप वाकई इस संसाधन को हटाना चाहते हैं?", - "task_title": "कार्य अनुसूचक", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "असफल", - "task_search": "Search tasks…", - "task_create": "कार्य बनाएँ", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "अद्यतन", - "task_type_restart": "पुनः आरंभ करें", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "डिवाइस आईडी या समूह के नाम, अल्पविराम से अलग किए गए", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "अनुसूची मूल्य", - "task_script": "स्क्रिप्ट/कमांड", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "कोई कार्य नहीं मिला. आरंभ करने के लिए 'कार्य बनाएं' पर क्लिक करें।", - "task_confirm_delete": "क्या आप वाकई इस कार्य को हटाना चाहते हैं?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "विज़ुअल वर्कफ़्लो बिल्डर", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "बचाना", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "इसके गुणों को संपादित करने के लिए एक नोड का चयन करें।", - "builder_node_trigger_manual": "मैनुअल ट्रिगर", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "इवेंट ट्रिगर", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "एसवीसी पुनः आरंभ करें", - "builder_node_action_file_deploy": "फ़ाइल तैनात करें", - "builder_node_action_message": "मेसेज भेजें", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "अलर्ट भेजें", - "builder_node_result_chain": "चेन वर्कफ़्लो", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "वर्कफ़्लो नाम:", - "comp_title": "सॉफ्टवेयर अनुपालन", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "उपकरण", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "इस डिवाइस पर स्वचालित उपचार चलाएँ?", - "comp_no_data": "कोई अनुपालन डेटा उपलब्ध नहीं है. आरंभ करने के लिए स्कैन चलाएँ.", - "save": "बचाना", - "cancel": "रद्द करना", - "close": "बंद करना", - "edit": "संपादन करना", - "delete": "मिटाना", - "actions": "Actions", - "all_orgs": "सभी संगठन", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "नेटवर्क ड्राइव", - "type_dns": "DNS सर्वर", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "संसाधन जोड़ें", - "edit_resource": "संसाधन संपादित करें", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "पता/पथ", - "scope_org": "संगठन", - "scope_group": "समूह", - "scope_device": "उपकरण", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं?", - "all_statuses": "सभी क़ानून", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "असफल", - "search_tasks": "Search tasks�", - "create_task": "कार्य बनाएँ", - "edit_task": "कार्य संपादित करें", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "फ़ाइल परिनियोजन", - "task_type_registry": "Registry", - "target_devices": "लक्ष्य उपकरण", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "स्क्रिप्ट/कमांड", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "लोड हो रहा है", - "no_output": "कोई आउटपुट उपलब्ध नहीं है", - "error_loading": "डेटा लोड करने में त्रुटि", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "मैनुअल ट्रिगर", - "node_schedule": "Schedule", - "node_event": "इवेंट ट्रिगर", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "एसवीसी पुनः आरंभ करें", - "node_file_deploy": "फ़ाइल तैनात करें", - "node_send_message": "मेसेज भेजें", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "अलर्ट भेजें", - "node_chain": "चेन वर्कफ़्लो", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "सभी संगठन", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "उपकरण", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "इस डिवाइस पर स्वचालित उपचार चलाएँ?" - }, - "scaling": { - "title": "स्केलिंग एवं रिले प्रबंधन", - "tab_overview": "सिंहावलोकन", - "tab_relays": "Relay Nodes", - "tab_rules": "असाइनमेंट नियम", - "tab_capacity": "क्षमता की योजना बनाना", - "arch_title": "नेटवर्क आर्किटेक्चर", - "arch_loading": "आर्किटेक्चर आरेख लोड हो रहा है...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "कुल उपकरण", - "stat_active_sessions": "सक्रिय सत्र", - "stat_bandwidth": "कुल बैंडविड्थ", - "relay_health": "रिले स्वास्थ्य", - "no_relays": "कोई रिले नोड कॉन्फ़िगर नहीं किया गया. लोड वितरित करने के लिए अपना पहला रिले नोड जोड़ें।", - "relay_search": "रिले खोजें...", - "relay_add": "रिले नोड जोड़ें", - "relay_edit": "रिले नोड संपादित करें", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "उपकरण", - "col_sessions": "सत्र", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "लक्ष्य रिले", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "सक्रिय", - "status_disabled": "अक्षम", - "confirm_delete_relay": "क्या आप वाकई इस रिले नोड को हटाना चाहते हैं?", - "confirm_delete_rule": "क्या आप वाकई इस असाइनमेंट नियम को हटाना चाहते हैं?", - "rules_hint": "असाइनमेंट नियम यह निर्धारित करते हैं कि कौन सा रिले सर्वर विशिष्ट डिवाइस समूहों को संभालता है। नियमों का मूल्यांकन प्राथमिकता (सबसे पहले सबसे कम) के आधार पर किया जाता है।", - "rule_add": "Add Rule", - "rule_edit": "नियम संपादित करें", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "डिवाइस समूह", - "match_tag": "डिवाइस टैग", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "मास्टर सर्वर", - "fallback_nearest": "निकटतम रिले", - "relay_max_sessions": "अधिकतम सत्र", - "relay_max_bandwidth": "अधिकतम बैंडविड्थ (एमबीपीएस)", - "cap_tiers": "क्षमता स्तर", - "cap_loading": "क्षमता डेटा लोड हो रहा है...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "कोई सिफ़ारिशें उपलब्ध नहीं.", - "cap_planning": "बुनियादी ढाँचा योजना", - "cap_config": "विन्यास", - "cap_max_devices": "अधिकतम उपकरण", - "cap_max_sessions": "अधिकतम सत्र", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "डिवाइस की क्षमता", - "cap_tier_sessions": "सत्र क्षमता", - "cap_tier_bandwidth": "बैंडविड्थ क्षमता", - "cap_single_sqlite": "एकल सर्वर (SQLite)", - "cap_single_pg": "एकल सर्वर (PostgreSQL)", - "cap_master_3": "मास्टर + 3 रिले", - "cap_master_10": "मास्टर + 10 रिले", - "rec_no_relays": "कोई रिले नोड कॉन्फ़िगर नहीं किया गया. बेहतर प्रदर्शन और अतिरेक के लिए रिले नोड्स जोड़ने पर विचार करें।", - "rec_devices_high": "डिवाइस का उपयोग अधिक है. लोड वितरित करने के लिए अधिक रिले नोड्स जोड़ने पर विचार करें।", - "rec_sessions_high": "सत्र क्षमता अपनी सीमा के करीब पहुंच रही है. रिले इंफ्रास्ट्रक्चर को अपग्रेड करने पर विचार करें।", - "rec_cpu_high": "कुछ रिले नोड उच्च CPU उपयोग की रिपोर्ट करते हैं। भार संतुलन या क्षमता उन्नयन पर विचार करें।", - "rec_all_good": "सभी सिस्टम सामान्य मापदंडों के भीतर काम कर रहे हैं। किसी कार्रवाई की आवश्यकता नहीं है.", - "save": "बचाना", - "cancel": "रद्द करना", - "edit": "संपादन करना", - "delete": "मिटाना", - "close": "बंद करना", - "no_rules": "कोई असाइनमेंट नियम नहीं.", - "relays_info_banner": "यह सूची सूचनात्मक है. वास्तव में क्लाइंट द्वारा उपयोग किए जाने वाले रिले सर्वर BetterDesk सर्वर पर RELAY_SERVERS पर्यावरण चर के माध्यम से कॉन्फ़िगर किए जाते हैं।", - "relay_name_address_required": "नाम और पता आवश्यक है.", - "relay_save_failed": "रिले नोड सहेजने में विफल.", - "relay_delete_failed": "रिले नोड को हटाने में विफल.", - "relay_saved": "रिले नोड सहेजा गया.", - "relay_deleted": "रिले नोड हटा दिया गया.", - "rule_name_value_required": "नियम का नाम और मिलान मान आवश्यक है.", - "rule_save_failed": "नियम सहेजने में विफल.", - "rule_delete_failed": "नियम हटाने में विफल.", - "rule_saved": "नियम सहेजा गया.", - "rule_deleted": "नियम हटा दिया गया." - }, - "cross_platform": { - "title": "क्रॉस-प्लेटफ़ॉर्म संगतता", - "tab_matrix": "अनुकूलता मैट्रिक्स", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "सभी समर्थित प्लेटफ़ॉर्म पर फ़ीचर समर्थन मैट्रिक्स। हरा = पूर्ण समर्थन, पीला = आंशिक, ग्रे = उपलब्ध नहीं, नीला = नियोजित।", - "col_feature": "Feature", - "legend_full": "पूर्ण समर्थन", - "legend_partial": "आंशिक समर्थन", - "legend_none": "उपलब्ध नहीं है", - "legend_planned": "Planned", - "platform_breakdown": "प्लेटफार्म टूटना", - "arch_breakdown": "वास्तुकला का टूटना", - "version_breakdown": "संस्करण टूटना", - "summary": "Summary", - "total_devices": "कुल उपकरण", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "ग्राहक संस्करण", - "no_devices": "अभी तक कोई डिवाइस पंजीकृत नहीं है.", - "protocols_hint": "प्रोटोकॉल क्षमता वार्ता यह सुनिश्चित करती है कि प्रत्येक ग्राहक को केवल वही सुविधाएँ प्राप्त हों जिनका वह समर्थन करता है। सर्वर रिपोर्ट की गई क्षमताओं के आधार पर व्यवहार को अनुकूलित करता है।", - "capability_negotiation": "क्षमता पर बातचीत", - "codec_support": "कोडेक समर्थन (ऑनलाइन डिवाइस)", - "feature_support": "सुविधा समर्थन (ऑनलाइन उपकरण)", - "no_codec_data": "ऑनलाइन उपकरणों से कोई कोडेक डेटा उपलब्ध नहीं है।", - "no_feature_data": "ऑनलाइन उपकरणों से कोई फीचर डेटा उपलब्ध नहीं है।", - "protobuf_schema": "क्लाइंट क्षमताएँ प्रोटोबफ़ स्कीमा", - "diagram_client": "Client", - "diagram_server": "BetterDesk सर्वर", - "diagram_peer": "दूरस्थ सहकर्मी", - "limitations_hint": "प्रत्येक प्लेटफ़ॉर्म की विशिष्ट सीमाएँ होती हैं जो उपलब्ध सुविधाओं को प्रभावित करती हैं। तैनाती की योजना बनाते समय इन बाधाओं की समीक्षा करें।", - "feat_desktop_client": "डेस्कटॉप क्लाइंट", - "feat_background_agent": "पृष्ठभूमि एजेंट", - "feat_remote_target": "दूरस्थ लक्ष्य", - "feat_screen_capture": "स्क्रीन कैप्चर", - "feat_input_injection": "इनपुट इंजेक्शन", - "feat_file_transfer": "दस्तावेज हस्तांतरण", - "feat_clipboard_sync": "क्लिपबोर्ड सिंक", - "feat_audio_streaming": "ऑडियो स्ट्रीमिंग", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "सुरक्षित डेस्कटॉप पर सेवा स्थापना और इनपुट इंजेक्शन के लिए यूएसी उन्नयन आवश्यक है।", - "limit_win_service": "NSSM सेवा के रूप में चलता है; स्थापना के लिए प्रशासकीय विशेषाधिकारों की आवश्यकता है।", - "limit_win_firewall": "Windows फ़ायरवॉल नियमों को रिले कनेक्शन के लिए पोर्ट 21115-21119 की अनुमति देनी चाहिए।", - "limit_linux_wayland": "वेलैंड कंपोजिटर प्रोग्रामेटिक स्क्रीन कैप्चर को प्रतिबंधित करते हैं; पाइपवायर पोर्टल API आवश्यक है।", - "limit_linux_pipewire": "ऑडियो कैप्चर के लिए पाइपवायर की आवश्यकता होती है; पल्सऑडियो फ़ॉलबैक उपलब्ध है लेकिन सीमित है।", - "limit_linux_arm": "ARM64 बिल्ड उपलब्ध है; कुछ कोडेक्स सॉफ़्टवेयर डिकोडिंग (धीमी) का उपयोग कर सकते हैं।", - "limit_mac_screen": "सिस्टम प्राथमिकताएँ > गोपनीयता और सुरक्षा में स्क्रीन रिकॉर्डिंग की अनुमति आवश्यक है।", - "limit_mac_signing": "वितरण के लिए एजेंट को Apple डेवलपर आईडी के साथ हस्ताक्षरित होना चाहिए।", - "limit_mac_notarize": "macOS गेटकीपर (गैर-ऐप स्टोर वितरण) के लिए नोटरीकरण आवश्यक है।", - "limit_android_projection": "मीडियाप्रोजेक्शन API को प्रत्येक स्क्रीन कैप्चर सत्र के लिए उपयोगकर्ता की सहमति की आवश्यकता होती है।", - "limit_android_accessibility": "इनपुट इंजेक्शन के लिए AccessibilityService की आवश्यकता होती है; Android 14+ में प्रतिबंधित।", - "limit_android_battery": "डोज़ मोड द्वारा सीमित पृष्ठभूमि सेवा; बैटरी अनुकूलन छूट की आवश्यकता हो सकती है।", - "limit_ios_capture": "Apple ने बैकग्राउंड स्क्रीन कैप्चर पर प्रतिबंध लगाया; केवल दर्शक मोड समर्थित.", - "limit_ios_input": "किसी इनपुट इंजेक्शन की अनुमति नहीं; केवल दूर से देखना और चैट करना।", - "limit_ios_appstore": "केवल ऐप स्टोर के माध्यम से वितरण; बीटा परीक्षण के लिए TestFlight।", - "limit_web_https": "WebCodecs API और WebRTC को HTTPS की आवश्यकता है; HTTP JMuxer (सीमित कोडेक्स) पर वापस आ जाता है।", - "limit_web_codec": "कोडेक समर्थन ब्राउज़र पर निर्भर करता है; H.264 व्यापक रूप से समर्थित है, VP9/AV1 भिन्न है।", - "limit_web_performance": "प्रदर्शन ब्राउज़र सैंडबॉक्स द्वारा सीमित; कोई प्रत्यक्ष हार्डवेयर त्वरण नहीं।", - "limit_chrome_crostini": "पूर्ण एजेंट समर्थन केवल क्रॉस्टिनी Linux कंटेनर के अंदर।", - "limit_chrome_pwa": "PWA मोड केवल वेब सुविधाएँ प्रदान करता है; कोई मूल एजेंट क्षमताएं नहीं.", - "limit_chrome_input": "क्रॉस्टिनी कंटेनर के बाहर इनपुट इंजेक्शन समर्थित नहीं है।", - "feat_session_recording": "सत्र रिकॉर्डिंग", - "feat_multi_monitor": "मल्टी-मॉनिटर", - "feat_unattended_access": "अनुपस्थित पहुँच", - "limit_win_virtual_account": "सेवाएं LocalSystem की बजाय अलग वर्चुअल खातों के तहत चलती हैं; कस्टम लॉग पथों को ACL समायोजन की आवश्यकता हो सकती है।", - "limit_linux_unprivileged": "सेवाएं systemd हार्डनिंग (NoNewPrivileges, ProtectSystem=strict) के साथ समर्पित अनधिकृत 'betterdesk' खाते के रूप में चलती हैं।" - }, - "security_audit": { - "title": "सुरक्षा लेखापरीक्षा", - "tab_overview": "सिंहावलोकन", - "tab_events": "लेखापरीक्षा घटनाएँ", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "सुरक्षा स्कोर", - "failed_logins": "विफल लॉगिन (24 घंटे)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "पुरानी कुंजियाँ (>90डी)", - "security_checks": "सुरक्षा जांच", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket सुरक्षित", - "enabled": "सक्रिय", - "disabled": "अक्षम", - "all_events": "All Events", - "event_login_failed": "लॉगिन विफल", - "event_login_success": "लॉगिन की सफलता", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "कॉन्फिग बदला गया", - "event_key_created": "कुंजी बनाई गई", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "कोई ऑडिट इवेंट नहीं मिला.", - "hardening_hint": "आपके BetterDesk परिनियोजन के लिए सुरक्षा सख्त करने की प्राथमिकताएँ। आइटम गंभीरता के आधार पर ऑर्डर किए जाते हैं।", - "no_hardening": "कोई सख्त करने वाली वस्तुएँ उपलब्ध नहीं हैं।", - "vuln_hint": "निर्भरता भेद्यता स्कैन परिणाम। निर्भरता को सुरक्षित रखने के लिए नियमित रूप से एनपीएम ऑडिट चलाएं।", - "no_vulns": "कोई कमज़ोरियाँ नहीं मिलीं. आपकी निर्भरताएँ सुरक्षित हैं." - }, - "languages": { - "title": "भाषा प्रबंधन", - "total_languages": "कुल भाषाएँ", - "fully_translated": "पूरी तरह से अनुवादित", - "needs_review": "समीक्षा की आवश्यकता है", - "reference_keys": "संदर्भ कुंजियाँ", - "no_languages": "कोई भाषा फ़ाइल नहीं मिली.", - "badge_reference": "Reference", - "badge_review": "समीक्षा की आवश्यकता है", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "दृश्य गायब है", - "fix_missing": "Fix Missing", - "missing_keys_for": "के लिए गुम चाबियाँ", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "और {n} और अधिक...", - "all_keys_present": "सभी चाबियाँ मौजूद हैं!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code} में अनुपलब्ध कुंजियों का मैन्युअल रूप से अनुवाद किया जाना चाहिए।", - "no_fix_needed": "ठीक करने के लिए कोई गुम चाबियाँ नहीं।" - }, - "resource_control": { - "title": "संसाधन नियंत्रण", - "tab_overview": "सिंहावलोकन", - "tab_usb": "USB Control", - "tab_optical": "ऑप्टिकल ड्राइव", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "संसाधन कोटा", - "compliance_by_category": "श्रेणी के अनुसार अनुपालन", - "device_compliance": "डिवाइस अनुपालन", - "search_devices": "डिवाइस खोजें...", - "col_device": "उपकरण", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "कुल उपकरण", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "अनुपालन दर", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "कॉन्फ़िगर", - "no_devices": "कोई यंत्र नहीं मिले", - "usb_title": "USB पोर्ट नियंत्रण", - "usb_hint": "चयनित डिवाइस या संगठन-व्यापी डिफ़ॉल्ट नीति के लिए USB स्टोरेज डिवाइस एक्सेस को नियंत्रित करें।", - "usb_storage_policy": "USB भंडारण नीति", - "usb_whitelist": "श्वेतसूचीबद्ध उपकरण (प्रति पंक्ति एक)", - "usb_whitelist_hint": "वीआईडी:पीआईडी ​​(उदा. 0781:5583)", - "usb_audit_log": "USB डिवाइस कनेक्शन लॉग करें", - "optical_title": "ऑप्टिकल ड्राइव नियंत्रण", - "optical_hint": "चयनित डिवाइस के लिए सीडी/डीवीडी/ब्लू-रे ड्राइव एक्सेस को नियंत्रित करें।", - "optical_policy": "ऑप्टिकल ड्राइव नीति", - "optical_audit_log": "ऑप्टिकल ड्राइव एक्सेस लॉग करें", - "monitors_title": "मॉनिटर प्रबंधन", - "monitors_hint": "अधिकतम गिनती, रिज़ॉल्यूशन प्रवर्तन, चमक और पावर शेड्यूल सहित मॉनिटर सेटिंग्स कॉन्फ़िगर करें।", - "monitors_max_count": "अधिकतम मॉनिटर्स (0 = असीमित)", - "monitors_max_hint": "0 का मतलब कोई सीमा नहीं है", - "monitors_resolution": "अधिकतम रिज़ॉल्यूशन", - "monitors_brightness": "चमक सीमा", - "monitors_power_schedule": "पावर शेड्यूल", - "monitors_power_hint": "जैसे बंद:22:00-06:00", - "disks_title": "डिस्क अभिगम नियंत्रण", - "disks_hint": "रीड-ओनली मोड, एन्क्रिप्शन प्रवर्तन और विभाजन दृश्यता सहित डिस्क एक्सेस नीतियों को कॉन्फ़िगर करें।", - "disks_readonly": "केवल-पठन मोड को बाध्य करें", - "disks_encryption": "एन्क्रिप्शन की आवश्यकता है (BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T सक्षम करें निगरानी", - "disks_hidden": "छिपे हुए विभाजन", - "disks_hidden_hint": "अल्पविराम से अलग किए गए ड्राइव अक्षर या माउंट बिंदु", - "quotas_title": "संसाधन कोटा", - "quotas_hint": "चयनित डिवाइस के लिए प्रति उपयोगकर्ता सीपीयू, रैम, बैंडविड्थ और डिस्क कोटा सेट करें।", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "बैंडविड्थ सीमा (एमबीपीएस)", - "quotas_bandwidth_hint": "0 = असीमित", - "quotas_disk_quota": "डिस्क कोटा (जीबी)", - "quotas_disk_hint": "0 = असीमित", - "quotas_process_whitelist": "प्रक्रिया श्वेतसूची (प्रति पंक्ति एक)", - "quotas_process_hint": "जैसे chrome.exe, कोड.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "केवल श्वेतसूची", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "सॉफ़्टवेयर अद्यतन", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "स्थापित संस्करण", - "latest_version": "Latest version", - "status": "Status", - "check_now": "अद्यतन के लिए जाँच", - "checking": "Checking…", - "up_to_date": "अप टू डेट", - "update_available": "उपलब्ध अद्यतन", - "changelog": "Release Notes", - "no_changelog": "कोई रिलीज़ नोट उपलब्ध नहीं है", - "files_changed": "फ़ाइलें बदल गईं", - "files": "फ़ाइलें", - "changes_unavailable": "फ़ाइल परिवर्तन सूची लोड नहीं हो सकी. आप अभी भी अपडेट इंस्टॉल कर सकते हैं.", - "create_backup": "अपडेट करने से पहले बैकअप बनाएं", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "अद्यतन स्थापित किया जा रहा है…", - "creating_backup": "बैकअप बनाया जा रहा है...", - "downloading": "फ़ाइलें डाउनलोड हो रही हैं…", - "install_success": "अपडेट सफलतापूर्वक इंस्टॉल हो गया. कंसोल पुनः प्रारंभ हो रहा है...", - "install_failed": "अद्यतन स्थापना विफल रही", - "restarting": "कंसोल के पुनरारंभ होने की प्रतीक्षा की जा रही है...", - "restart_complete": "कंसोल सफलतापूर्वक पुनः प्रारंभ हुआ", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "कोई अद्यतन संस्करण चयनित नहीं. पहले अपडेट की जांच करें.", - "backups_title": "बैकअप अद्यतन करें", - "backups_desc": "प्रत्येक अपडेट से पहले प्री-अपडेट बैकअप स्वचालित रूप से बनाया जाता है", - "no_backups": "कोई अद्यतन बैकअप नहीं मिला", - "restore": "Restore", - "restore_confirm": "क्या आप वाकई इस बैकअप से पुनर्स्थापित करना चाहते हैं? परिवर्तित फ़ाइलें अधिलेखित कर दी जाएंगी.", - "restore_success": "बैकअप सफलतापूर्वक बहाल हुआ. कंसोल पुनः प्रारंभ हो रहा है...", - "baseline_set": "बेसलाइन सेट", - "commits_behind": "पीछे प्रतिबद्ध है", - "total_files": "कुल फ़ाइलें", - "applied": "Applied", - "failed": "असफल", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "सर्वर जाओ", - "component_agent": "Agent", - "component_scripts": "स्क्रिप्ट और Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "जाँच हो रही है…", - "go_not_found": "जाओ स्थापित मत करो", - "go_check_failed": "गो उपलब्धता की जांच नहीं की जा सकी", - "server_building": "Go server संकलित किया जा रहा है... इसमें कुछ मिनट लग सकते हैं।", - "server_built": "सर्वर बाइनरी संकलित", - "server_build_failed": "सर्वर संकलन विफल रहा", - "server_stale_title": "सर्वर बाइनरी पुराना है", - "server_stale_desc": "Go server स्रोत अद्यतन किया गया था लेकिन चल रहे बाइनरी का पुनर्निर्माण नहीं किया गया था। सुरक्षा और लाइब्रेरी अपडेट लागू करने के लिए इसे अभी पुनर्निर्माण करें।", - "rebuild_server": "सर्वर बाइनरी का पुनर्निर्माण करें", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "सर्वर बाइनरी को फिर से बनाया गया और पुनः प्रारंभ किया गया", - "rebuild_server_failed": "सर्वर बाइनरी पुनर्निर्माण विफल रहा", - "server_deployed": "सर्वर बाइनरी तैनात", - "server_deploy_failed": "सर्वर परिनियोजन विफल", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "सर्वर स्रोत डाउनलोड हो रहा है...", - "delete": "मिटाना", - "delete_confirm": "बैकअप {name} को स्थायी रूप से हटाएं? इसे असंपादित नहीं किया जा सकता है।", - "delete_success": "बैकअप हटा दिया गया", - "delete_failed": "बैकअप हटाने में विफल", - "retention_label": "नवीनतम बैकअप रखें", - "retention_hint": "प्रत्येक अद्यतन के बाद पुराने बैकअप स्वचालित रूप से हटा दिए जाते हैं। सभी बैकअप रखने के लिए 0 का उपयोग करें।", - "retention_saved": "अवधारण सेटिंग सहेजी गई", - "retention_invalid": "अवधारण 0 और 1000 के बीच एक पूर्णांक होना चाहिए", - "retention_required_for_prune": "पहले 0 से अधिक अवधारण मान सेट करें", - "prune_now": "Apply now", - "prune_confirm": "केवल {n} नवीनतम बैकअप रखें और बाकी हटा दें?", - "prune_done": "काटा गया {n} बैकअप", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "अद्यतन विधि", - "strategy_download": "पूर्व-निर्मित बाइनरी डाउनलोड करें", - "strategy_compile": "स्रोत से संकलित करें", - "both_available": "डाउनलोड करें और संकलित करें", - "download_available": "डाउनलोड उपलब्ध है", - "no_method": "कोई अद्यतन विधि नहीं", - "no_release": "No release", - "available": "उपलब्ध", - "server_downloading": "सर्वर बाइनरी डाउनलोड हो रहा है...", - "server_downloaded": "सर्वर बाइनरी डाउनलोड किया गया", - "server_download_failed": "सर्वर बाइनरी डाउनलोड विफल रहा", - "server_download_note": "GitHub रिलीज़ से एक पूर्व-निर्मित बाइनरी डाउनलोड की जाएगी। इसमें आमतौर पर एक मिनट से भी कम समय लगता है।", - "install_go_hint": "संकलन सक्षम करने के लिए https://go.dev/dl/ से गो इंस्टॉल करें, या पूर्व-निर्मित बायनेरिज़ के साथ एक रिलीज़ प्रकाशित करें", - "strategy_install_go": "स्वतः-इंस्टॉल करें और संकलित करें", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "स्वतः पुनर्निर्माण तैयार", - "toolchain_ready": "टूलचेन स्थापित", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "गो टूलचेन डाउनलोड हो रहा है…", - "toolchain_failed": "गो टूलचेन इंस्टॉल विफल रहा", - "modal_title": "अद्यतन स्थापित किया जा रहा है", - "modal_done_title": "अद्यतन पूर्ण", - "modal_close": "बंद करना", - "modal_reload_now": "कंसोल पुनः लोड करें", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "कंसोल फ़ाइलें", - "phase_server": "सर्वर चरण", - "phase_restart": "पुनः आरंभ करें", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "बैकअप छोड़ दिया गया (उपयोगकर्ता की पसंद के अनुसार)", - "server_skipped": "Go server छोड़ दिया गया", - "server_not_selected": "Go server not selected", - "server_processing": "Go server अद्यतन संसाधित हो रहा है…", - "no_restart_needed": "पुनरारंभ की आवश्यकता नहीं है", - "complete": "अद्यतन लागू किया गया", - "complete_summary": "अद्यतन सफलतापूर्वक लागू कर दिया गया है.", - "complete_with_errors": "अद्यतन समाप्त हो गया, लेकिन कुछ चरण विफल रहे। नीचे विवरण देखें.", - "modal_done_with_errors_title": "अद्यतन त्रुटियों के साथ समाप्त हुआ", - "console_will_restart": "कंसोल प्रक्रिया अब पुनः प्रारंभ होगी...", - "restart_complete_msg": "कंसोल पुनः प्रारंभ हो गया। नया संस्करण लोड करने के लिए पुनः लोड करें पर क्लिक करें। पेज 8 सेकंड में स्वचालित रूप से पुनः लोड हो जाएगा।", - "refresh_recommended": "स्थैतिक परिसंपत्तियाँ बदल गईं - नया यूआई देखने के लिए पृष्ठ को पुनः लोड करें।", - "confirm_title": "अद्यतन लागू करें", - "confirm_with_backup": "प्री-अपडेट बैकअप स्वचालित रूप से बनाया जाएगा।", - "confirm_no_backup": "कोई बैकअप नहीं बनाया जाएगा (अपने जोखिम पर आगे बढ़ें)।" - }, - "permissions": { - "title": "अनुमतियां", - "subtitle": "भूमिका-आधारित अनुमतियाँ और कस्टम ओवरराइड प्रबंधित करें", - "info_title": "अनुमतियाँ कैसे काम करती हैं", - "info_desc": "प्रत्येक भूमिका में डिफ़ॉल्ट अनुमतियाँ होती हैं। आप नीचे टॉगल करके प्रत्येक भूमिका के लिए अलग-अलग अनुमतियाँ जोड़ या हटा सकते हैं। कस्टम ओवरराइड्स को हाइलाइट किया जाता है और किसी भी समय डिफ़ॉल्ट पर वापस लाया जा सकता है।", - "select_role": "भूमिका चुनें", - "select_role_placeholder": "कोई भूमिका चुनें...", - "reset_overrides": "सभी ओवरराइड रीसेट करें", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "सर्वर-स्तर", - "custom": "Custom", - "default": "Default", - "revert": "डिफ़ॉल्ट पर वापस लौटें", - "saved": "अनुमति अद्यतन की गई", - "reverted": "डिफ़ॉल्ट पर वापस लाया गया", - "all_reverted": "सभी ओवरराइड वापस कर दिए गए", - "confirm_reset": "इस भूमिका के लिए सभी कस्टम ओवरराइड को डिफ़ॉल्ट पर रीसेट करें?", - "empty_title": "एक भूमिका चुनें", - "empty_desc": "इसकी अनुमतियाँ देखने और प्रबंधित करने के लिए ऊपर दिए गए ड्रॉपडाउन से एक भूमिका चुनें।", - "locked_title": "Super Admin", - "locked_desc": "सुपर एडमिन के पास डिफ़ॉल्ट रूप से सभी अनुमतियाँ हैं और उन्हें अनुकूलित नहीं किया जा सकता है।", - "cat_device": "उपकरण", - "cat_user": "Users", - "cat_server": "सर्वर", - "cat_org": "संगठनों", - "cat_audit": "लेखापरीक्षा एवं निगरानी", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "डिवाइस देखें", - "perm_device_connect": "उपकरणों से कनेक्ट करें", - "perm_device_edit": "उपकरण संपादित करें", - "perm_device_delete": "डिवाइस हटाएं", - "perm_device_ban": "उपकरणों पर प्रतिबंध/प्रतिबंध हटाएँ", - "perm_device_change_id": "डिवाइस आईडी बदलें", - "perm_user_view": "उपयोगकर्ताओं को देखें", - "perm_user_create": "उपयोगकर्ता बनाएं", - "perm_user_edit": "उपयोगकर्ताओं को संपादित करें", - "perm_user_delete": "उपयोगकर्ताओं को हटाएँ", - "perm_server_config": "सर्वर कॉन्फ़िगरेशन", - "perm_server_keys": "API कुंजियाँ प्रबंधित करें", - "perm_org_create": "संगठन बनाएं", - "perm_org_edit": "संगठन संपादित करें", - "perm_org_delete": "संगठनों को हटाएँ", - "perm_org_manage_users": "संगठन उपयोगकर्ताओं को प्रबंधित करें", - "perm_org_manage_devices": "संगठन उपकरण प्रबंधित करें", - "perm_audit_view": "ऑडिट लॉग देखें", - "perm_metrics_view": "मेट्रिक्स देखें", - "perm_blocklist_edit": "ब्लॉकलिस्ट संपादित करें", - "perm_cdap_view": "CDAP डिवाइस देखें", - "perm_cdap_command": "CDAP आदेश भेजें", - "perm_cdap_terminal": "CDAP टर्मिनल पहुंच", - "perm_cdap_files": "CDAP फ़ाइल पहुँच", - "perm_enrollment_manage": "नामांकन प्रबंधित करें", - "perm_enrollment_approve": "नामांकन स्वीकृत करें", - "perm_chat_access": "Chat access", - "perm_branding_edit": "ब्रांडिंग संपादित करें", - "perm_server_attestation": "सर्वर प्रदर्शन प्रमाणीकरण" - }, - "notifications": { - "title": "सूचनाएं", - "empty": "कोई नए संदेश नहीं", - "mark_all_read": "सभी को पढ़ा दिखाएं", - "see_all": "सभी सहायता अनुरोध देखें", - "help_request": "मदद अनुरोध", - "just_now": "just now" - }, - "accessibility": { - "title": "पहुंच योग्यता", - "subtitle": "दृष्टि, गति और पढ़ने की जरूरतों के अनुसार कंसोल समायोजित करें।", - "close": "पहुंच योग्यता मेनू बंद करें", - "profiles": "त्वरित प्रोफाइल", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "बड़ा टेक्स्ट, मजबूत कंट्रास्ट और फोकस।", - "profile_dyslexia": "पढ़ने में आराम", - "profile_dyslexia_hint": "पठनीय फ़ॉन्ट और व्यापक रिक्ति.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "संक्रमण को कम करता है और एनीमेशन को रोकता है।", - "profile_color_assist": "रंग समर्थन", - "profile_color_assist_hint": "रंग फ़िल्टर, लेबल और हाइलाइट किए गए लिंक।", - "reading": "पढ़ना", - "font_size": "टेक्स्ट आकार", - "line_height": "लाइन ऊंचाई", - "letter_spacing": "पत्र अंतराल", - "word_spacing": "शब्द रिक्ति", - "readable_font": "पढ़ने योग्य फ़ॉन्ट", - "readable_font_hint": "विस्तृत, परिचित अक्षर आकृतियों का उपयोग करता है।", - "dyslexia_spacing": "डिस्लेक्सिया रिक्ति", - "dyslexia_spacing_hint": "लंबे पाठ के लिए अतिरिक्त रिक्ति जोड़ता है।", - "visual": "दृश्य", - "contrast": "कंट्रास्ट", - "contrast_normal": "Normal", - "contrast_high_dark": "उच्च कंट्रास्ट अंधेरा", - "contrast_high_light": "उच्च कंट्रास्ट प्रकाश", - "contrast_yellow_black": "काले पर पीला", - "color_filter": "रंग दृष्टि फ़िल्टर", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "रंग संतृप्ति", - "underline_links": "लिंकों को रेखांकित करें", - "underline_links_hint": "रंग पर निर्भर हुए बिना लिंक को दृश्यमान बनाता है।", - "highlight_links": "गतिविधियों को हाइलाइट करें", - "highlight_links_hint": "लिंक और बटन की रूपरेखा.", - "highlight_headings": "शीर्षकों को हाइलाइट करें", - "highlight_headings_hint": "अनुभाग शीर्षकों को रंगीन पट्टी से चिह्नित करें।", - "hide_media": "Dim media", - "hide_media_hint": "छवियाँ, वीडियो और कैनवस मंद कर देता है।", - "interaction": "इंटरैक्शन", - "strong_focus": "मजबूत फोकस", - "strong_focus_hint": "एक बड़ा कीबोर्ड फोकस रिंग दिखाता है।", - "large_cursor": "बड़ा कर्सर", - "large_cursor_hint": "एक बड़े उच्च-कंट्रास्ट सूचक का उपयोग करता है।", - "reduce_motion": "मोशन घटाएं", - "reduce_motion_hint": "ट्रांज़िशन को छोटा करता है और स्क्रॉलिंग को आसान बनाता है।", - "pause_animations": "एनिमेशन रोकें", - "pause_animations_hint": "दृश्य गति को लूप करना बंद कर देता है।", - "reading_guide": "पढ़ने की मार्गदर्शिका", - "reading_guide_hint": "एक चमकदार रेखा के साथ सूचक का अनुसरण करता है।", - "reading_mask": "पढ़ना मुखौटा", - "reading_mask_hint": "पॉइंटर के ऊपर और नीचे की सामग्री को मंद कर देता है।", - "preview": "पूर्वावलोकन", - "preview_title": "ऑपरेटर कार्यक्षेत्र पूर्वावलोकन", - "preview_text": "इस मेनू को बंद करने से पहले जांचें कि टेक्स्ट, लिंक, नियंत्रण और स्थिति लेबल पढ़ने में आरामदायक हैं या नहीं।", - "preview_link": "डिवाइस विवरण लिंक", - "preview_status": "Online", - "preview_button": "प्राथमिक क्रिया", - "preview_secondary": "Secondary", - "reset": "रीसेट", - "done": "पूर्ण" - }, - "server_mgmt": { - "title": "सर्वर प्रबंधन", - "subtitle": "BetterDesk कंसोल होस्ट (बीटा) के लिए कॉकपिट जैसा नियंत्रण विमान।", - "beta_tooltip": "बीटा सुविधा - सक्रिय विकास के तहत।", - "notice_title": "बीटा सुविधा", - "notice_body": "ये उपकरण होस्ट पर चलते हैं जहां BetterDesk कंसोल प्रक्रिया रहती है। सभी कार्यों का ऑडिट किया जाता है। भावी रिलीज़ में फ़ीचर का दायरा विस्तारित होगा।", - "tab_overview": "अवलोकन", - "tab_terminal": "टर्मिनल", - "tab_files": "फ़ाइलें", - "tab_services": "सेवाएं", - "cpu": "CPU", - "memory": "मेमोरी", - "load": "औसत लोड करें", - "disks": "डिस्क", - "history": "इतिहास (अंतिम 60 नमूने)", - "host_info": "Host info", - "cores": "cores", - "uptime": "अपटाइम", - "no_disks": "कोई डिस्क डेटा उपलब्ध नहीं है", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "पीटीवाई उपलब्ध है", - "term_connect": "Connect", - "term_disconnect": "Disconnect", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "संपर्क त्रुटि", - "term_warning": "कमांड उस उपयोगकर्ता के रूप में चलते हैं जो कंसोल प्रक्रिया का स्वामी है। उन्नयन सक्षम करने के लिए एक sudoers नियम जोड़ें।", - "term_hint": "युक्ति: आगे बढ़ने के लिए `sudo -i` टाइप करें (sudoers कॉन्फ़िगरेशन की आवश्यकता है)।", - "term_lib_failed": "टर्मिनल लाइब्रेरी लोड करने में विफल", - "files_up": "एक स्तर ऊपर", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "खाली निर्देशिका", - "files_error": "निर्देशिका सूचीबद्ध करने में विफल", - "read_failed": "फ़ाइल पढ़ने में विफल", - "save_failed": "फ़ाइल सहेजने में विफल", - "rename_failed": "नाम बदलें विफल", - "delete_failed": "हटाना विफल", - "delete_confirm": "यह प्रविष्टि हटाएं?", - "mkdir_prompt": "नये फ़ोल्डर का नाम:", - "mkdir_failed": "फ़ोल्डर बनाने में विफल", - "file_saved": "फ़ाइल सहेजी गई", - "binary_warn": "बाइनरी फ़ाइल - केवल पूर्वावलोकन", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "सेवाएँ खोजें…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "कोई सेवा नहीं मिली", - "svc_load_failed": "सेवाएँ लोड करने में विफल", - "svc_action_failed": "क्रिया: विफल रही है", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "पुनः आरंभ करें", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk एजेंट डाउनलोड करें", - "choose_platform": "अपना मंच चुनें", - "choose_platform_hint": "वह इंस्टॉलर चुनें जो आपके ऑपरेटिंग सिस्टम से मेल खाता हो।", - "download": "डाउनलोड करना", - "building": "इमारत…", - "failed": "निर्माण विफल", - "need_help": "मदद की ज़रूरत है?", - "powered_by": "द्वारा संचालित" - }, - "server_attestation": { - "title": "सर्वर प्रदर्शन प्रमाणीकरण", - "subtitle": "प्रदर्शन बेंचमार्क जो 80% CPU, RAM और डिस्क थ्रेशोल्ड पर समवर्ती दूरस्थ कनेक्शन क्षमता निर्धारित करता है।", - "warning_title": "लोड परीक्षण", - "warning_body": "बेंचमार्क सिग्नल और रिले सर्वर से समानांतर WebSocket कनेक्शन का अनुकरण करता है। ऑफ-पीक घंटों में चलाएं — यह परीक्षण प्रोडक्शन पर लोड डालता है।", - "run_benchmark": "बेंचमार्क चलाएं", - "abort": "रद्द करें", - "download_report": "JSON रिपोर्ट डाउनलोड करें", - "last_test": "अंतिम परीक्षण", - "no_test_yet": "अभी तक कोई बेंचमार्क नहीं चला", - "max_connections": "अधिकतम कनेक्शन", - "threshold_80": "80% थ्रेशोल्ड — अंतिम मेट्रिक्स", - "disk": "डिस्क", - "ramp_chart": "लोड रैम्प चार्ट", - "connections": "कनेक्शन", - "connections_short": "कनेक्शन", - "tier_guide_title": "प्रत्येक स्तर का क्या अर्थ है?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 समवर्ती कनेक्शन — छोटा VPS (1–2 vCPU, 2–4 GB RAM)।", - "tier_iron_desc": "26–75 कनेक्शन — मिड-रेंज सर्वर (2–4 vCPU, 4–8 GB RAM)।", - "tier_platinum_desc": "76–200 कनेक्शन — उच्च-प्रदर्शन सर्वर (4–8 vCPU, 8–16 GB RAM)।", - "tier_titanium_desc": "201–400 कनेक्शन — एंटरप्राइज़ इंफ्रास्ट्रक्चर (8+ vCPU, 16–32 GB RAM)।", - "tier_obsidian_desc": "401+ कनेक्शन — टर्बो क्लास: समर्पित हार्डवेयर, 16+ vCPU, 32+ GB RAM, NVMe।", - "docker_note": "नोट: Docker में, CPU/RAM मेट्रिक्स भौतिक होस्ट के बजाय कंटेनर सीमाओं को दर्शा सकते हैं।", - "badge_tooltip": "BetterDesk Server Attestation — सर्वर प्रदर्शन प्रमाणीकरण", - "confirm_run": "यह बेंचमार्क अनुकृत कनेक्शन के साथ सर्वर का लोड-परीक्षण करेगा। जारी रखें?", - "starting": "शुरू हो रहा है…", - "complete": "बेंचमार्क पूर्ण", - "signal_peers": "सिग्नल पीयर", - "relay_sessions": "रिले सत्र", - "page_error": "सर्वर प्रमाणीकरण पेज लोड करने में विफल", - "mode_estimated": "अनुमानित (WebSocket अपहुँचनीय)", - "incomplete": "बेंचमार्क बिना वैध स्तर के समाप्त हुआ" + "form": { + "cancel": "रद्द करें" } + } } diff --git a/web-nodejs/lang/hu.json b/web-nodejs/lang/hu.json index 9133c4a5..9bee1227 100644 --- a/web-nodejs/lang/hu.json +++ b/web-nodejs/lang/hu.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Hungarian", - "native_name": "Magyar", - "flag": "🇭🇺", - "needs_review": true + "_meta": { + "name": "Hungarian", + "native_name": "Magyar", + "flag": "🇭🇺", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Betöltés...", + "confirm": "Erősítse meg", + "alert": "Figyelmeztetés", + "prompt": "Adja meg az értéket", + "copied": "Vágólapra másolva", + "save": "Mentés", + "saved": "Mentve", + "error": "Hiba", + "success": "Siker", + "warning": "Figyelmeztetés", + "info": "Információ", + "all": "Összes", + "cancel": "Mégse", + "delete": "Törölje", + "actions": "Műveletek", + "close": "Bezárás", + "required": "szükséges", + "name_required": "A név megadása kötelező", + "active": "Aktív", + "inactive": "Inaktív", + "invalid_json": "Érvénytelen JSON", + "field_required": "{field} szükséges", + "back": "Vissza", + "edit": "Szerkesztés", + "yes": "Igen", + "no": "Nem" + }, + "nav": { + "main": "Fő", + "tools": "Eszközök", + "system": "Rendszer", + "dashboard": "Irányítópult", + "devices": "Eszközök", + "keys": "Kulcsok", + "generator": "Generátor", + "settings": "Beállítások elemre", + "users": "Felhasználók", + "inventory": "Leltár", + "tickets": "Jegyek", + "help_requests": "Segítségkérések", + "activity": "Tevékenység", + "automation": "Automatizálás", + "file_transfer": "Fájlátvitel", + "network": "Hálózat", + "dataguard": "DataGuard", + "reports": "Jelentések", + "tenants": "Bérlők", + "registrations": "Registrations", + "management": "Menedzsment", + "toggle_sidebar": "Oldalsáv váltása", + "cdap": "CDAP Eszközök", + "fleet": "Flotta", + "scaling": "Méretezés", + "cross_platform": "Platformfüggetlen", + "tokens": "Eszköztokenek", + "organizations": "Szervezetek", + "policies": "Irányelvek", + "attestation": "Tanúsítás", + "remote": "Távoli asztal", + "toolkit": "Eszközkészlet", + "security_audit": "Biztonsági audit", + "languages": "Nyelvek", + "resource_control": "Erőforrás-szabályozás", + "chat": "Chat", + "help": "Súgó", + "expand_sidebar": "Az oldalsáv kibontása", + "toggle_theme": "Téma váltása", + "sdk_studio": "SDK Studio", + "login": "Bejelentkezés", + "permissions": "Engedélyek", + "server_management": "Kiszolgáló-kezelés", + "server_attestation": "Szerver tanúsítás", + "commercialization": "Kereskedelmi modul" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Jelentkezzen be a BetterDesk konzolba", + "username": "Felhasználónév", + "username_placeholder": "Adja meg a felhasználónevet", + "password": "Jelszó", + "password_placeholder": "Írja be a jelszót", + "remember_me": "Remember me", + "login_failed": "Sikertelen bejelentkezés. Kérjük, ellenőrizze a hitelesítő adatait.", + "invalid_credentials": "Érvénytelen felhasználónév vagy jelszó.", + "username_collision": "Már létezik helyi fiók ezzel a felhasználónévvel. Jelentkezzen be a helyi jelszavával, vagy kérje meg a rendszergazdát, hogy nevezze át vagy távolítsa el az ütköző fiókot.", + "fill_all_fields": "Kérjük, töltse ki az összes mezőt", + "logout_confirm": "Biztos, hogy ki akar jelentkezni?", + "change_password": "Jelszó módosítása", + "password_required": "Jelszó szükséges", + "totp_title": "Kéttényezős hitelesítés", + "totp_subtitle": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Használjon helyette helyreállítási kódot", + "totp_use_code": "Ehelyett használjon hitelesítő kódot", + "totp_recovery_code": "Helyreállítási kód", + "totp_back_to_login": "Vissza a bejelentkezéshez", + "totp_invalid_code": "Érvénytelen ellenőrző kód. Kérjük, próbálja újra.", + "totp_enter_code": "Adjon meg egy 6 számjegyű kódot", + "totp_enter_recovery": "Adjon meg egy helyreállítási kódot", + "totp_session_expired": "A munkamenet lejárt. Kérjük, jelentkezzen be újra.", + "totp_already_enabled": "A kéttényezős hitelesítés már engedélyezve van", + "pro_only_account": "Ez a fiók csak a RustDesk asztali klienshez használható. Kérjük, használja a RustDesk alkalmazást a bejelentkezéshez.", + "passwords_mismatch": "A jelszavak nem egyeznek", + "or": "vagy", + "login_sso": "Jelentkezzen be a SSO használatával", + "login_sso_with": "Jelentkezzen be a {{provider}} használatával", + "oidc_denied": "Az identitásszolgáltató megtagadta a hozzáférést.", + "oidc_invalid": "Érvénytelen OIDC visszahívás. Kérjük, próbálja újra.", + "oidc_failed": "A OIDC hitelesítés sikertelen. Kérjük, próbálja újra.", + "oidc_error": "Hiba történt a SSO bejelentkezés során.", + "oidc_no_account": "Fiókja nem található, és az automatikus regisztráció le van tiltva.", + "totp_rate_limited": "Túl sok próbálkozás. Kérjük, próbálja újra később.", + "emergency_mode_banner": "A Go server nem érhető el – vészhelyzeti módban fut (csak rendszergazda, korlátozott funkcionalitás)" + }, + "dashboard": { + "title": "Irányítópult", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Összes eszköz", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktív kapcsolatok", + "offline_devices": "Offline", + "server_status": "Szerver állapota", + "quick_actions": "Gyors műveletek", + "manage_devices": "A csatlakoztatott eszközök kezelése", + "view_keys": "Szerverkulcsok megtekintése", + "generate_config": "Kliens konfiguráció létrehozása", + "server_settings": "Konfigurálja a beállításokat", + "greeting_morning": "Jó reggelt, {name}", + "greeting_afternoon": "Jó napot, {name}", + "greeting_evening": "Jó estét, {name}", + "greeting_night": "Jó éjszakát, {name}", + "health_overview": "Egészségügyi áttekintés", + "devices_online": "Eszközök Online", + "active_alerts": "Aktív riasztások", + "recent_connections": "Összes eszköz", + "server_uptime": "Szerver üzemidő", + "activity_feed": "Legutóbbi tevékenység", + "no_recent_activity": "Nincs közelmúltbeli tevékenység", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Próbálja ki az Asztali módot egy többablakos munkaterülethez megfigyelő widgetekkel.", + "tip_keyboard_shortcuts": "Nyomja meg a Ctrl+K billentyűkombinációt bárhol a gyorskeresési parancspaletta megnyitásához.", + "tip_address_book": "Szinkronizálja címjegyzékét az eszközök között, ha bejelentkezik a RustDesk kliensből.", + "tip_2fa": "A fiók biztonságának növelése érdekében engedélyezze a kéttényezős hitelesítést a Beállításokban.", + "tip_bulk_actions": "Válasszon ki több eszközt, és egyszerre kezelje őket tömeges műveletekkel.", + "tip_theme": "Váltson a Sötét és Világos témák között az oldalsáv beállításaiban.", + "tip_cdap": "Csatlakoztassa az IoT-eszközöket és az ipari érzékelőket a CDAP átjárón keresztül.", + "tip_tutorials": "Kattintson a súgó gombra a jobb alsó sarokban az interaktív oktatóanyagok megtekintéséhez." + }, + "devices": { + "title": "Eszközök", + "id": "ID", + "hostname": "Hostname", + "username": "Felhasználónév", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Létrehozva", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Eszközök keresése...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Szinkronizálás állapota", + "sync_success": "Az állapot sikeresen szinkronizálva", + "empty_title": "Nem találhatók eszközök", + "empty_text": "Egyetlen eszköz sem felel meg a jelenlegi szűrőknek", + "edit_title": "Eszköz részletei", + "delete_title": "Eszköz törlése", + "delete_confirm": "Biztosan törli a {id} eszközt?", + "delete_warning": "Az eszköz végleges törlésére készül:", + "delete_permanent": "Ez a művelet nem vonható vissza. Az eszközhöz kapcsolódó összes adat véglegesen törlődik az adatbázisból.", + "delete_success": "Az eszköz sikeresen törölve", + "revoke_option": "Eszköz visszavonása", + "revoke_hint": "Az eszközazonosító blokkolása és az aktív kapcsolatok bontása", + "revoke_success": "Az eszköz sikeresen visszavonva", + "details": "Eszköz részletei", + "ban_title": "Eszköz tiltása", + "ban_confirm": "Biztosan kitiltja a {id} eszközt?", + "ban_success": "Az eszköz sikeresen kitiltva", + "unban_title": "Eszköz kitiltás��nak feloldása", + "unban_confirm": "Biztosan feloldja a {id} eszköz kitiltását?", + "unban_success": "Az eszköz kitiltása sikeresen feloldva", + "change_id": "Change ID", + "change_id_title": "Eszközazonosító módosítása", + "new_id": "New ID", + "change_id_hint": "Csak 6-16 karakter, betűk, számok, kötőjelek és aláhúzásjelek", + "change_id_success": "Az eszközazonosító sikeresen módosítva", + "id_length_error": "Az azonosító 6-16 karakter hosszú lehet", + "id_format_error": "Az azonosító csak betűket, számokat, kötőjeleket és aláhúzásjeleket tartalmazhat", + "bulk_delete_title": "Több eszköz törlése", + "bulk_delete_confirm": "Biztosan törölni szeretné a {count} eszközöket?", + "bulk_delete_success": "A {count} eszközök sikeresen törölve", + "columns": "Columns", + "toggle_columns": "Váltás a látható oszlopok között", + "not_found": "Az eszköz nem található", + "delete_failed": "Nem sikerült törölni az eszközt", + "change_id_failed": "Nem sikerült módosítani az eszközazonosítót", + "invalid_id": "Érvénytelen eszközazonosító (6-16 karakter szükséges)", + "invalid_id_format": "Érvénytelen azonosító formátum (csak betűk, számok, kötőjelek, aláhúzásjelek)", + "id_exists": "Az eszközazonosító már létezik", + "no_selection": "Nincsenek kiválasztott eszközök", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP csatlakoztatva", + "revoke": "Visszavonás", + "access_policy": "Hozzáférési szabályzat", + "unattended_access": "Felügyelet nélküli hozzáférés", + "enable_unattended": "Engedélyezze a felügyelet nélküli hozzáférést", + "access_password": "Hozzáférési jelszó", + "password_configured": "Jelszó beállítva", + "no_password": "Nincs jelszó", + "new_password": "Új jelszó (az aktuális maradáshoz hagyja üresen)", + "clear_password": "Jelszó törlése", + "access_schedule": "Hozzáférés ütemezése", + "enable_schedule": "Engedélyezze az időalapú hozzáférést", + "allowed_days": "Engedélyezett napok", + "start_time": "Kezdési idő", + "end_time": "Befejezési idő", + "timezone": "Időzóna", + "allowed_operators": "Engedélyezett operátorok", + "all_operators": "Minden operátor (hagyja üresen)", + "operators_hint": "Vesszővel elválasztott felhasználónevek. Hagyja üresen az összes operátor engedélyezéséhez.", + "last_updated_by": "Utoljára frissítette", + "access_policy_saved": "Hozzáférési szabályzat mentve", + "tabs": { + "overview": "Áttekintés", + "hardware": "Hardware", + "metrics": "Metrikák", + "connections": "Kapcsolatok", + "audit": "Audit", + "info": "Info", + "history": "Történelem" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processzor", + "memory": "Memória", + "disk": "Lemez", + "os": "Operációs rendszer", + "hostname": "Állomásnév", + "uptime": "Üzemidő", + "load_avg": "Terhelési átlag", + "network": "Hálózati adapterek", + "no_data": "Nem állnak rendelkezésre hardveradatok", + "title": "Hardverinformációk", + "gpu": "Grafikus kártya" }, - "common": { - "loading": "Betöltés...", - "confirm": "Erősítse meg", - "alert": "Figyelmeztetés", - "prompt": "Adja meg az értéket", - "copied": "Vágólapra másolva", - "save": "Mentés", - "saved": "Mentve", - "error": "Hiba", - "success": "Siker", - "warning": "Figyelmeztetés", - "info": "Információ", - "all": "Összes", - "cancel": "Mégse", - "delete": "Törölje", - "actions": "Műveletek", - "close": "Bezárás", - "required": "szükséges", - "name_required": "A név megadása kötelező", - "active": "Aktív", - "inactive": "Inaktív", - "invalid_json": "Érvénytelen JSON", - "field_required": "{field} szükséges", - "back": "Vissza", - "edit": "Szerkesztés", - "yes": "Igen", - "no": "Nem" - }, - "nav": { - "main": "Fő", - "tools": "Eszközök", - "system": "Rendszer", - "dashboard": "Irányítópult", - "devices": "Eszközök", - "keys": "Kulcsok", - "generator": "Generátor", - "settings": "Beállítások elemre", - "users": "Felhasználók", - "inventory": "Leltár", - "tickets": "Jegyek", - "help_requests": "Segítségkérések", - "activity": "Tevékenység", - "automation": "Automatizálás", - "file_transfer": "Fájlátvitel", - "network": "Hálózat", - "dataguard": "DataGuard", - "reports": "Jelentések", - "tenants": "Bérlők", - "registrations": "Registrations", - "management": "Menedzsment", - "toggle_sidebar": "Oldalsáv váltása", - "cdap": "CDAP Eszközök", - "fleet": "Flotta", - "scaling": "Méretezés", - "cross_platform": "Platformfüggetlen", - "tokens": "Eszköztokenek", - "organizations": "Szervezetek", - "policies": "Irányelvek", - "attestation": "Tanúsítás", - "remote": "Távoli asztal", - "toolkit": "Eszközkészlet", - "security_audit": "Biztonsági audit", - "languages": "Nyelvek", - "resource_control": "Erőforrás-szabályozás", - "chat": "Chat", - "help": "Súgó", - "expand_sidebar": "Az oldalsáv kibontása", - "toggle_theme": "Téma váltása", - "sdk_studio": "SDK Studio", - "login": "Bejelentkezés", - "permissions": "Engedélyek", - "server_management": "Kiszolgáló-kezelés", - "server_attestation": "Szerver tanúsítás" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Jelentkezzen be a BetterDesk konzolba", - "username": "Felhasználónév", - "username_placeholder": "Adja meg a felhasználónevet", - "password": "Jelszó", - "password_placeholder": "Írja be a jelszót", - "remember_me": "Remember me", - "login_failed": "Sikertelen bejelentkezés. Kérjük, ellenőrizze a hitelesítő adatait.", - "invalid_credentials": "Érvénytelen felhasználónév vagy jelszó.", - "username_collision": "Már létezik helyi fiók ezzel a felhasználónévvel. Jelentkezzen be a helyi jelszavával, vagy kérje meg a rendszergazdát, hogy nevezze át vagy távolítsa el az ütköző fiókot.", - "fill_all_fields": "Kérjük, töltse ki az összes mezőt", - "logout_confirm": "Biztos, hogy ki akar jelentkezni?", - "change_password": "Jelszó módosítása", - "password_required": "Jelszó szükséges", - "totp_title": "Kéttényezős hitelesítés", - "totp_subtitle": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Használjon helyette helyreállítási kódot", - "totp_use_code": "Ehelyett használjon hitelesítő kódot", - "totp_recovery_code": "Helyreállítási kód", - "totp_back_to_login": "Vissza a bejelentkezéshez", - "totp_invalid_code": "Érvénytelen ellenőrző kód. Kérjük, próbálja újra.", - "totp_enter_code": "Adjon meg egy 6 számjegyű kódot", - "totp_enter_recovery": "Adjon meg egy helyreállítási kódot", - "totp_session_expired": "A munkamenet lejárt. Kérjük, jelentkezzen be újra.", - "totp_already_enabled": "A kéttényezős hitelesítés már engedélyezve van", - "pro_only_account": "Ez a fiók csak a RustDesk asztali klienshez használható. Kérjük, használja a RustDesk alkalmazást a bejelentkezéshez.", - "passwords_mismatch": "A jelszavak nem egyeznek", - "or": "vagy", - "login_sso": "Jelentkezzen be a SSO használatával", - "login_sso_with": "Jelentkezzen be a {{provider}} használatával", - "oidc_denied": "Az identitásszolgáltató megtagadta a hozzáférést.", - "oidc_invalid": "Érvénytelen OIDC visszahívás. Kérjük, próbálja újra.", - "oidc_failed": "A OIDC hitelesítés sikertelen. Kérjük, próbálja újra.", - "oidc_error": "Hiba történt a SSO bejelentkezés során.", - "oidc_no_account": "Fiókja nem található, és az automatikus regisztráció le van tiltva.", - "totp_rate_limited": "Túl sok próbálkozás. Kérjük, próbálja újra később.", - "emergency_mode_banner": "A Go server nem érhető el – vészhelyzeti módban fut (csak rendszergazda, korlátozott funkcionalitás)" - }, - "dashboard": { - "title": "Irányítópult", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Összes eszköz", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktív kapcsolatok", - "offline_devices": "Offline", - "server_status": "Szerver állapota", - "quick_actions": "Gyors műveletek", - "manage_devices": "A csatlakoztatott eszközök kezelése", - "view_keys": "Szerverkulcsok megtekintése", - "generate_config": "Kliens konfiguráció létrehozása", - "server_settings": "Konfigurálja a beállításokat", - "greeting_morning": "Jó reggelt, {name}", - "greeting_afternoon": "Jó napot, {name}", - "greeting_evening": "Jó estét, {name}", - "greeting_night": "Jó éjszakát, {name}", - "health_overview": "Egészségügyi áttekintés", - "devices_online": "Eszközök Online", - "active_alerts": "Aktív riasztások", - "recent_connections": "Összes eszköz", - "server_uptime": "Szerver üzemidő", - "activity_feed": "Legutóbbi tevékenység", - "no_recent_activity": "Nincs közelmúltbeli tevékenység", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Próbálja ki az Asztali módot egy többablakos munkaterülethez megfigyelő widgetekkel.", - "tip_keyboard_shortcuts": "Nyomja meg a Ctrl+K billentyűkombinációt bárhol a gyorskeresési parancspaletta megnyitásához.", - "tip_address_book": "Szinkronizálja címjegyzékét az eszközök között, ha bejelentkezik a RustDesk kliensből.", - "tip_2fa": "A fiók biztonságának növelése érdekében engedélyezze a kéttényezős hitelesítést a Beállításokban.", - "tip_bulk_actions": "Válasszon ki több eszközt, és egyszerre kezelje őket tömeges műveletekkel.", - "tip_theme": "Váltson a Sötét és Világos témák között az oldalsáv beállításaiban.", - "tip_cdap": "Csatlakoztassa az IoT-eszközöket és az ipari érzékelőket a CDAP átjárón keresztül.", - "tip_tutorials": "Kattintson a súgó gombra a jobb alsó sarokban az interaktív oktatóanyagok megtekintéséhez." - }, - "devices": { - "title": "Eszközök", - "id": "ID", - "hostname": "Hostname", - "username": "Felhasználónév", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Létrehozva", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Eszközök keresése...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Szinkronizálás állapota", - "sync_success": "Az állapot sikeresen szinkronizálva", - "empty_title": "Nem találhatók eszközök", - "empty_text": "Egyetlen eszköz sem felel meg a jelenlegi szűrőknek", - "edit_title": "Eszköz részletei", - "delete_title": "Eszköz törlése", - "delete_confirm": "Biztosan törli a {id} eszközt?", - "delete_warning": "Az eszköz végleges törlésére készül:", - "delete_permanent": "Ez a művelet nem vonható vissza. Az eszközhöz kapcsolódó összes adat véglegesen törlődik az adatbázisból.", - "delete_success": "Az eszköz sikeresen törölve", - "revoke_option": "Eszköz visszavonása", - "revoke_hint": "Az eszközazonosító blokkolása és az aktív kapcsolatok bontása", - "revoke_success": "Az eszköz sikeresen visszavonva", - "details": "Eszköz részletei", - "ban_title": "Eszköz tiltása", - "ban_confirm": "Biztosan kitiltja a {id} eszközt?", - "ban_success": "Az eszköz sikeresen kitiltva", - "unban_title": "Eszköz kitiltás��nak feloldása", - "unban_confirm": "Biztosan feloldja a {id} eszköz kitiltását?", - "unban_success": "Az eszköz kitiltása sikeresen feloldva", - "change_id": "Change ID", - "change_id_title": "Eszközazonosító módosítása", - "new_id": "New ID", - "change_id_hint": "Csak 6-16 karakter, betűk, számok, kötőjelek és aláhúzásjelek", - "change_id_success": "Az eszközazonosító sikeresen módosítva", - "id_length_error": "Az azonosító 6-16 karakter hosszú lehet", - "id_format_error": "Az azonosító csak betűket, számokat, kötőjeleket és aláhúzásjeleket tartalmazhat", - "bulk_delete_title": "Több eszköz törlése", - "bulk_delete_confirm": "Biztosan törölni szeretné a {count} eszközöket?", - "bulk_delete_success": "A {count} eszközök sikeresen törölve", - "columns": "Columns", - "toggle_columns": "Váltás a látható oszlopok között", - "not_found": "Az eszköz nem található", - "delete_failed": "Nem sikerült törölni az eszközt", - "change_id_failed": "Nem sikerült módosítani az eszközazonosítót", - "invalid_id": "Érvénytelen eszközazonosító (6-16 karakter szükséges)", - "invalid_id_format": "Érvénytelen azonosító formátum (csak betűk, számok, kötőjelek, aláhúzásjelek)", - "id_exists": "Az eszközazonosító már létezik", - "no_selection": "Nincsenek kiválasztott eszközök", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP csatlakoztatva", - "revoke": "Visszavonás", - "access_policy": "Hozzáférési szabályzat", - "unattended_access": "Felügyelet nélküli hozzáférés", - "enable_unattended": "Engedélyezze a felügyelet nélküli hozzáférést", - "access_password": "Hozzáférési jelszó", - "password_configured": "Jelszó beállítva", - "no_password": "Nincs jelszó", - "new_password": "Új jelszó (az aktuális maradáshoz hagyja üresen)", - "clear_password": "Jelszó törlése", - "access_schedule": "Hozzáférés ütemezése", - "enable_schedule": "Engedélyezze az időalapú hozzáférést", - "allowed_days": "Engedélyezett napok", - "start_time": "Kezdési idő", - "end_time": "Befejezési idő", - "timezone": "Időzóna", - "allowed_operators": "Engedélyezett operátorok", - "all_operators": "Minden operátor (hagyja üresen)", - "operators_hint": "Vesszővel elválasztott felhasználónevek. Hagyja üresen az összes operátor engedélyezéséhez.", - "last_updated_by": "Utoljára frissítette", - "access_policy_saved": "Hozzáférési szabályzat mentve", - "tabs": { - "overview": "Áttekintés", - "hardware": "Hardware", - "metrics": "Metrikák", - "connections": "Kapcsolatok", - "audit": "Audit", - "info": "Info", - "history": "Történelem" - }, - "hardware": { - "cpu": "Processzor", - "memory": "Memória", - "disk": "Lemez", - "os": "Operációs rendszer", - "hostname": "Állomásnév", - "uptime": "Üzemidő", - "load_avg": "Terhelési átlag", - "network": "Hálózati adapterek", - "no_data": "Nem állnak rendelkezésre hardveradatok", - "title": "Hardverinformációk", - "gpu": "Grafikus kártya" - }, - "display_name": "Megjelenítési név", - "display_name_placeholder": "Egyéni név (felülbírálja a gazdagépnevet)", - "note_placeholder": "Megjegyzések az eszközzel kapcsolatban", - "tags": "Tags", - "filter_by_tags": "Szűrés címkék szerint", - "no_tags": "Nincsenek címkék", - "all_groups": "Minden csoport", - "create_group": "Csoport létrehozása", - "manage_groups": "Csoportok kezelése", - "group_name": "Csoport neve", - "group_name_placeholder": "pl. Média PC-k", - "dynamic_group": "Dinamikus csoport a címkéből", - "dynamic_group_hint": "Az ezzel a címkével rendelkező eszközök automatikusan csatlakoznak.", - "tag_filter": "Címkeszűrő", - "group_allowed_users": "Engedélyezett felhasználók", - "group_allowed_users_hint": "Hagyja üresen, hogy a csoport mindenki számára látható legyen, aki rendelkezik eszközengedéllyel.", - "group_tag_required": "Címkeszűrő szükséges a dinamikus csoportokhoz", - "group_invalid": "Érvénytelen csoportazonosító", - "group_not_found": "Csoport nem található", - "group_saved": "Eszközcsoport mentve", - "groups_saved": "Eszközcsoportok mentve", + "display_name": "Megjelenítési név", + "display_name_placeholder": "Egyéni név (felülbírálja a gazdagépnevet)", + "note_placeholder": "Megjegyzések az eszközzel kapcsolatban", + "tags": "Tags", + "filter_by_tags": "Szűrés címkék szerint", + "no_tags": "Nincsenek címkék", + "all_groups": "Minden csoport", + "create_group": "Csoport létrehozása", + "manage_groups": "Csoportok kezelése", + "group_name": "Csoport neve", + "group_name_placeholder": "pl. Média PC-k", + "dynamic_group": "Dinamikus csoport a címkéből", + "dynamic_group_hint": "Az ezzel a címkével rendelkező eszközök automatikusan csatlakoznak.", + "tag_filter": "Címkeszűrő", + "group_allowed_users": "Engedélyezett felhasználók", + "group_allowed_users_hint": "Hagyja üresen, hogy a csoport mindenki számára látható legyen, aki rendelkezik eszközengedéllyel.", + "group_tag_required": "Címkeszűrő szükséges a dinamikus csoportokhoz", + "group_invalid": "Érvénytelen csoportazonosító", + "group_not_found": "Csoport nem található", + "group_saved": "Eszközcsoport mentve", + "groups_saved": "Eszközcsoportok mentve", "group_membership_added": "Hozzáadva a csoporthoz", "group_membership_removed": "Eltávolítva a csoportból", - "no_groups": "Még nincsenek csoportok", - "manual_groups": "Kézi csoportok", - "dynamic_memberships": "Dinamikus tagságok", - "group_allowed_user_groups": "Engedélyezett felhasználói csoportok", - "group_allowed_user_groups_hint": "A kiválasztott felhasználói csoportokhoz tartozó felhasználók hozzáférhetnek ehhez az eszközcsoporthoz.", - "no_user_groups": "Nincsenek felhasználói csoportok", - "edit_group": "Csoport szerkesztése", - "delete_group": "Csoport törlése", - "delete_group_confirm": "Törli a {name} eszközcsoportot?", - "group_deleted": "Eszközcsoport törölve", - "folder_group_readonly": "A mappaalapú csoportok kezelése mappákból történik.", - "manage_user_groups": "Felhasználói csoportok kezelése", - "restore_failed": "Eszköz konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Az ügyfél nemrég elérte az API-t, de nincs regisztrálva a jelzőszerveren (UDP :21116). A szerver migrációja után indítsa újra az ügyfelet.", - "per_page": "Oldalanként" - }, - "keys": { - "title": "Szerverkulcsok", - "subtitle": "Nyilvános kulcs és konfiguráció RustDesk kliensekhez", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Szerver információ", - "download": "Letöltési kulcs", - "show_qr": "Show QR", - "qr_hint": "Olvassa be ezt a QR-kódot a RustDesk mobilalkalmazással", - "no_key": "Nem található nyilvános kulcs", - "no_key_to_copy": "Nincs másolható kulcs", - "no_qr": "A QR-kód nem elérhető", - "download_success": "Kulcsfájl letöltve", - "not_found": "A kulcs nem található", - "api_not_found": "A API kulcs nem található" - }, - "settings": { - "title": "Beállítások elemre", - "subtitle": "Konzolkonfiguráció és fiókbeállítások", - "tab_general": "General", - "tab_server": "Szerver", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Nyelv", - "change_password": "Jelszó módosítása", - "password_desc": "Frissítse fiókja jelszavát", - "current_password": "Jelenlegi jelszó", - "new_password": "Új jelszó", - "confirm_password": "Jelszó megerősítése", - "save_password": "Jelszó frissítése", - "password_changed": "A jelszó sikeresen megváltozott", - "fill_all_fields": "Kérjük, töltse ki az összes mezőt", - "passwords_not_match": "A jelszavak nem egyeznek", - "password_requirements": "Jelszó követelmények", - "password_requirements_not_met": "A jelszó nem felel meg a követelményeknek", - "req_length": "Legalább 8 karakter", - "req_uppercase": "Legalább egy nagybetű", - "req_lowercase": "Legalább egy kisbetű", - "req_number": "Legalább egy szám", - "server_info": "Szerver információ", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Legutóbbi konzoltevékenység", - "no_audit_logs": "Nem található auditnapló", - "backend_title": "Szerver háttérrendszer", - "backend_desc": "Válassza ki, hogy melyik kiszolgáló háttérrendszerét használja az eszközkezeléshez és a jel/továbbítási szolgáltatásokhoz.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Szabványos RustDesk jel- és közvetítő szerverek (hbbs + hbbr). Alapvető HTTP API korlátozott végpontokkal.", - "backend_betterdesk_desc": "Továbbfejlesztett Go-alapú szerver teljes REST API, JWT hitelesítéssel, blokklistával, címkékkel, valós idejű WebSocket eseményekkel és audit naplózással.", - "backend_feature_signal": "Jelszerver (azonosító regisztráció)", - "backend_feature_relay": "Továbbítószerver (kapcsolatközvetítő)", - "backend_feature_basic_api": "Alap API-felület", - "backend_feature_full_api": "Teljes REST API (34+ végpont)", - "backend_feature_jwt": "JWT hitelesítés és TOTP 2FA", - "backend_feature_blocklist": "IP/ID blokklista kezelése", - "backend_feature_tags": "Eszközcímkék és csoportosítás", - "backend_feature_audit": "Eseménynaplózás ellenőrzése", - "backend_feature_websocket": "Valós idejű WebSocket események", - "backend_connection": "Csatlakozás", - "backend_api_url": "API URL", - "backend_test": "Kapcsolat tesztelése", - "backend_testing": "Tesztelés...", - "backend_save": "Háttérrendszer alkalmazása", - "backend_saved": "A szerver háttérrendszere sikeresen megváltozott. Az eszközadatokat mostantól az új háttérrendszer fogja kezelni.", - "backend_save_failed": "Nem sikerült váltani a szerver hátterét", - "backend_test_success": "Sikeres csatlakozás! A szerver elérhető.", - "backend_test_failed": "A csatlakozás sikertelen. A szerver elérhetetlen.", - "backend_confirm_switch": "Biztos, hogy át akarja váltani a szerver hátterét? Ez megváltoztatja az eszközök kezelésének módját.", - "backend_unreachable": "Nem lehet váltani: a célszerver nem érhető el. Először indítsa el a szervert.", - "invalid_backend": "Érvénytelen háttérválasztás. Válassza a \"rustdesk\" vagy a \"betterdesk\" lehetőséget.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Kéttényezős hitelesítés", - "totp_desc": "Adjon hozzá egy extra biztonsági réteget a TOTP hitelesítő alkalmazásokkal (Google Authenticator, Microsoft Authenticator, Authy stb.)", - "totp_enabled": "2FA engedélyezve", - "totp_enabled_desc": "Fiókját kétlépcsős hitelesítés védi.", - "totp_disabled": "2FA nincs engedélyezve", - "totp_disabled_desc": "Engedélyezze a kéttényezős hitelesítést a fiók további biztonsága érdekében.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Telepítsen egy hitelesítő alkalmazást a telefonjára", - "totp_step2": "Olvassa be az alábbi QR-kódot", - "totp_step3": "Az ellenőrzéshez írja be a 6 számjegyű kódot", - "totp_manual_key": "Manual key", - "totp_enter_code": "Írja be az ellenőrző kódot", - "totp_verify_enable": "Ellenőrzés és engedélyezés", - "totp_enabled_success": "Kéttényezős hitelesítés engedélyezve!", - "totp_recovery_warning": "Mentse el ezeket a helyreállítási kódokat egy biztonságos helyen. Minden kód csak egyszer használható fel. Ha elveszíti hozzáférését hitelesítő alkalmazásához, akkor ezekkel a kódokkal jelentkezhet be.", - "totp_done": "Done", - "totp_disable_warning": "A kéttényezős hitelesítés letiltásával fiókja kevésbé lesz biztonságos. A megerősítéshez adja meg jelszavát.", - "totp_disabled_success": "A kéttényezős hitelesítés letiltva.", - "tutorials_title": "Oktatóanyagok és útmutatók", - "tutorials_desc": "Vezérelje a vezetett körutakat és a konzolon megjelenő súgófedvényeket", - "tutorials_enabled": "Oktatóanyagok engedélyezése", - "tutorials_enabled_hint": "Ha le van tiltva, az oktatóprogramok nem indulnak el automatikusan, és a súgó gomb rejtve lesz", - "tutorials_reset_hint": "Jelölje meg az összes oktatóanyagot nem látottként, hogy újra megjelenhessenek", - "tutorials_enabled_toast": "Oktatóanyagok engedélyezve", - "tutorials_disabled_toast": "Oktatóprogramok letiltva", - "tutorials_reset_toast": "Minden oktatóanyag visszaállt", - "tab_auth": "Hitelesítés", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurálja a külső hitelesítést a LDAP vagy Active Directory segítségével. A felhasználók a domain hitelesítési adataikkal jelentkezhetnek be.", - "ldap_enabled": "Engedélyezze a LDAP hitelesítést", - "ldap_enabled_hint": "Ha engedélyezve van, a felhasználók LDAP/AD hitelesítő adatokkal jelentkezhetnek be. A helyi fiókok továbbra is tartalékként működnek.", - "ldap_connection": "Szerver kapcsolat", - "ldap_host": "Házigazda", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "A TLS ellenőrzés kihagyása", - "ldap_timeout": "Kapcsolódási időtúllépés (ek)", - "ldap_timeout_hint": "Másodpercek várni a LDAP szerver válaszára", - "ldap_bind_mode": "Kötési mód", - "ldap_direct_bind": "Közvetlen kötés", - "ldap_direct_bind_hint": "Köteles közvetlenül egy DN-sablonnal, ahelyett, hogy szolgáltatásfiókot használna a kereséshez.", - "ldap_bind_dn": "DN kötése (szolgáltatási fiók)", - "ldap_bind_dn_hint": "A felhasználók keresésére használt, csak olvasható szolgáltatásfiók megkülönböztetett neve.", - "ldap_bind_password": "Kötési jelszó", - "ldap_base_dn": "DN alap", - "ldap_base_dn_hint": "Keresési alap a felhasználók megtalálásához, pl. dc=example,dc=com", - "ldap_user_filter": "Felhasználói szűrő", - "ldap_user_filter_hint": "LDAP szűrő a felhasználók megtalálásához. A {{username}} használata helyőrzőként. Alapértelmezett: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Közvetlen kötés DN-sablon", - "ldap_direct_bind_dn_hint": "DN sablon közvetlen kötéshez. Helyőrzőként használja a {{username}} értéket, pl. uid={{username}},ou=felhasználók,dc=példa,dc=com", - "ldap_user_attrs": "Felhasználói attribútumok", - "ldap_attr_id": "Felhasználónév attribútum", - "ldap_attr_email": "E-mail attribútum", - "ldap_attr_name": "Megjelenítési név attribútum", - "ldap_group_mapping": "Csoport → Szerepleképezés", - "ldap_group_base_dn": "Csoportbázis DN", - "ldap_group_base_dn_hint": "Hagyja üresen a fő Base DN használatához", - "ldap_group_filter": "Csoportszűrő", - "ldap_group_attr_name": "Csoportnév Attribútum", - "ldap_default_role": "Alapértelmezett szerep", - "ldap_default_role_hint": "Olyan felhasználókhoz rendelt szerepkör, akiknek a LDAP csoportjai nem egyeznek semmilyen leképezéssel", - "ldap_role_viewer": "Néző", - "ldap_role_operator": "Üzemeltető", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Csoport → Szereptérkép", - "ldap_group_role_map_hint": "LDAP csoportok hozzárendelése BetterDesk szerepkörökhöz. Formátum: GroupDN=szerep, amelyet | jel választ el (cső). Példa: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operátor", - "ldap_test_connection": "Kapcsolat tesztelése", - "ldap_testing": "Tesztelés...", - "ldap_test_success": "Sikeres csatlakozás! A LDAP szerver elérhető, és a kötési hitelesítő adatok érvényesek.", - "ldap_test_failed": "A csatlakozás sikertelen", - "ldap_save": "Mentse el a LDAP konfigurációt", - "ldap_saved": "A LDAP konfiguráció sikeresen mentve", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfigurálja az egyszeri bejelentkezést egy OpenID Connect szolgáltatón keresztül (Azure AD, Okta, Google, Keycloak stb.).", - "oidc_enabled": "Engedélyezze a OIDC hitelesítést", - "oidc_enabled_hint": "Lehetővé teszi a felhasználók számára, hogy külső identitásszolgáltatóval jelentkezzenek be", - "oidc_provider": "Személyazonosság-szolgáltató", - "oidc_display_name": "Gomb megjelenített neve", - "oidc_display_name_hint": "A bejelentkezési gombon megjelenő szöveg (pl. Azure AD, Okta)", - "oidc_issuer_url": "Kibocsátó URL", - "oidc_issuer_url_hint": "OpenID Connect kibocsátó URL (a felderítés automatikus lesz)", - "oidc_client_id": "Ügyfél-azonosító", - "oidc_client_secret": "Ügyfél titka", - "oidc_redirect_url": "URL átirányítása (visszahívás)", - "oidc_redirect_url_hint": "Pontosan meg kell egyeznie az IdP-ben konfiguráltal. Általában: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Hatókör", - "oidc_use_pkce": "PKCE használata (ajánlott)", - "oidc_auto_discovery": "Automatikus felfedezés", - "oidc_allow_signup": "Felhasználók automatikus létrehozása", - "oidc_manual_endpoints": "Kézi végpont URL-ek", - "oidc_authorization_url": "Engedélyezési végpont", - "oidc_token_url": "Token végpont", - "oidc_userinfo_url": "Userinfo végpont", - "oidc_claim_mapping": "Igényleképezés", - "oidc_claim_username": "Felhasználónév igény", - "oidc_claim_email": "E-mail követelés", - "oidc_claim_name": "Megjelenített név követelése", - "oidc_claim_groups": "Csoportok követelés", - "oidc_role_mapping": "Szereptérképezés", - "oidc_default_role": "Alapértelmezett szerep", - "oidc_group_role_map": "Csoport → Szerepleképezés", - "oidc_group_role_map_hint": "Soronként egy leképezés: group_name=role (pl. admins=admin, operators=operator)", - "oidc_test_discovery": "Felfedezés tesztje", - "oidc_testing": "Tesztelés...", - "oidc_test_success": "Sikerült a felfedezés! A végpontok megoldva.", - "oidc_test_failed": "A felfedezés nem sikerült", - "oidc_issuer_required": "A URL kibocsátó szükséges a felfedezés teszteléséhez", - "oidc_save": "Mentse el a OIDC konfigurációt", - "oidc_saved": "A OIDC konfiguráció sikeresen mentve", - "connection_mode_title": "Kapcsolati stratégia", - "connection_mode_desc": "Szabályozza, hogyan csatlakoznak a RustDesk asztali kliensek.", - "connection_mode_label": "Alapértelmezett kapcsolati mód", - "connection_mode_p2p_first": "P2P először (ajánlott) — próbáljon közvetlen kapcsolatot, térjen vissza a relére", - "connection_mode_relay_only": "Csak relé — minden munkamenet a relészervert használja", - "connection_mode_advanced": "Speciális beállítások", - "connection_mode_fallback_ms": "P2P tartalék időtúllépés (ms)", - "connection_mode_same_nat_relay": "Kényszerítsen relékemet, ha mindkét peer ugyanazt a nyilvános IP-t osztja meg (NAT hairpin)", - "connection_mode_network_hint": "A P2P megköveteli a 21116-os UDP port elérhetőségét a kliensek között.", - "connection_mode_save": "Mentés", - "connection_mode_save_restart": "Mentés és szerver újraindítása", - "connection_mode_saved": "Kapcsolati mód mentve", - "connection_mode_restart_started": "Szerver újraindítása megkezdve", - "connection_mode_restart_failed": "Szerver újraindítása sikertelen", - "connection_mode_not_configurable": "A kapcsolati mód nem módosítható ezen a telepítésen", - "connection_mode_source_saved": "Mentve itt:", - "connection_mode_source_defaults": "Szerver alapértelmezéseket használ (a panelből nem írható)", - "connection_mode_runtime": "Aktív szerver", - "advanced_title": "Konfigurációs fájlok", - "advanced_desc": "A szerver konfigurációs fájlainak közvetlen szerkesztése. A változtatások a szolgáltatások újraindítását igényelhetik.", - "advanced_warning": "Ezek a fájlok titkokat tartalmaznak. Csak akkor szerkessze, ha tudja mit csinál.", - "advanced_files_label": "Fájlok", - "advanced_select_file": "Válasszon fájlt a listából a tartalom megtekintéséhez vagy szerkesztéséhez.", - "advanced_reload": "Újratöltés", - "advanced_save": "Fájl mentése", - "advanced_apply_restart": "Alkalmaz (szolgáltatás újraindítása)", - "advanced_saved": "Konfigurációs fájl mentve", - "advanced_restart_after_save": "Konfiguráció mentve. Indítsa újra az érintett szolgáltatást most?", - "advanced_restart_confirm": "Újraindítja a kapcsolódó BetterDesk szolgáltatásokat? Az aktív kapcsolatok rövid időre megszakadhatnak.", - "advanced_restart_console_confirm": "Újraindítja a webkonzol szolgáltatást? A böngésző munkamenete rövid időre megszakad.", - "advanced_restart_started": "Szolgáltatás újraindítása megkezdve", - "advanced_restart_done": "Konzol újraindítva — az oldal újratöltése...", - "advanced_restart_polling": "Várakozás a konzol visszatérésére...", - "advanced_restart_timeout": "Az újraindítás elküldve, de a konzol nem válaszolt időben. Ellenőrizze a naplókat és töltse be manuálisan.", - "advanced_restart_failed": "Szolgáltatás újraindítása sikertelen", - "advanced_save_confirm": "Mentse a módosításokat ebbe a fájlba? Az előző verzióról biztonsági másolat készül.", - "advanced_unsaved_confirm": "Nem mentett módosításai vannak. Elveti őket?", - "advanced_no_files": "Ezen a rendszeren nem találhatók konfigurációs fájlok.", - "advanced_readonly": "csak olvasható", - "advanced_missing": "hiányzik", - "advanced_new_file": "Új fájl (mentés előtt nem jön létre)", - "advanced_new_file_hint": "Új fájl — adjon hozzá tartalmat és mentse", - "advanced_backup_created": "biztonsági mentés létrehozva", - "advanced_error_unknown": "Ismeretlen konfigurációs fájl", - "advanced_error_not_found": "A fájl nem létezik", - "advanced_error_too_large": "A fájl meghaladja a maximálisan szerkeszthető méretet (512 KB)", - "advanced_error_binary": "A bináris fájlok nem szerkeszthetők a panelben", - "advanced_error_invalid": "Érvénytelen fájltartalom", - "advanced_error_not_writable": "A fájl nem írható a konzol folyamat által", - "enrollment_title": "Eszközregisztráció (RustDesk)", - "enrollment_desc": "Szabályozza, hogyan regisztrálnak az új RustDesk kliensek.", - "enrollment_require_approval": "Operátor jóváhagyás szükséges (felügyelt mód)", - "enrollment_require_approval_hint": "Ha engedélyezve van, az ismeretlen kliensek sorba kerülnek, amíg egy operátor jóvá nem hagyja őket.", - "enrollment_rich_approve": "Teljes jóváhagyási form (név, mappa, csoportok, címkék)", - "enrollment_rich_approve_hint": "Részletes párbeszédpanelt mutat a regisztrációs kérések jóváhagyásakor.", - "enrollment_tag_picker": "Válasszon meglévő eszközcímkékből", - "enrollment_tag_picker_hint": "Lehetővé teszi az operátoroknak, hogy az Eszközök oldalon használt listából válasszanak.", - "enrollment_open_requests": "Nyitott regisztrációs kérések", - "enrollment_pending_count": "{count} függőben lévő regisztrációs kérés", - "tab_advanced": "Speciális", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Szolgáltatás neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Fájl", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (szolgáltatás-egység)", - "advanced_file_systemd-server": "systemd: betterdesk-server (szolgáltatás-egység)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor konfiguráció)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestráció)", - "advanced_restart_none": "Für diese Fájl ist kein Szolgáltatásneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Bejelentkezés sikertelen", - "action_logout": "Logout", - "action_password_change": "Jelszó megváltozott", - "action_2fa_enable": "2FA engedélyezve", - "action_2fa_disable": "2FA letiltva", - "action_user_create": "Felhasználó létrehozva", - "action_user_update": "Felhasználó frissítve", - "action_user_delete": "Felhasználó törölve", - "action_settings_update": "Beállítások frissítve", - "action_device_ban": "Eszköz kitiltva", - "action_device_unban": "Eszköz tiltva", - "action_device_delete": "Eszköz törölve" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Konfigurációs lehetőségek", - "server_address": "Szerver címe", - "server_address_hint": "A szerver domainje vagy IP-címe", - "custom_port": "Custom Port", - "port_hint": "Alapértelmezés szerint hagyja üresen (21116)", - "relay_server": "Átjátszó szerver", - "relay_placeholder": "Ugyanaz, mint az ID szerver, ha üres", - "relay_hint": "Opcionális: külön továbbítószerver címe", - "include_key": "A nyilvános kulcs szerepeltetése a konfigurációban", - "generate": "Konfiguráció generálása", - "output": "Konfigurációs kimenet", - "usage_title": "Csatlakozás részletei", - "generated": "Konfiguráció generálva", - "server_required": "A szerver címe kötelező", - "nothing_to_copy": "Először generáljon konfigurációt", - "bundles_title": "Ügynökkötegek", - "new_bundle": "Új köteg", - "editor_title": "Bundle szerkesztő", - "empty_state": "Válasszon ki egy csomagot a bal oldalon, vagy hozzon létre egy újat a kezdéshez.", - "loading": "Betöltés…", - "no_bundles": "Még nincsenek csomagok. Hozd létre az elsőt.", - "bundle_name": "A csomag neve", - "bundle_name_hint": "Csak belső címke – nem jelenik meg a végfelhasználók számára.", - "short_link": "Rövid letöltési link", - "short_link_hint": "A nyilvános URL-ben (/d/…) használatos. Csak kisbetűk, számok és kötőjelek (2–32 karakter). Automatikusan kitöltődik a csomag nevéből — rövidítse könnyebb megosztáshoz (pl. acme).", - "branding_section": "Márkaépítés", - "company_name": "Cég/márkanév", - "short_text": "Rövid leírás", - "contact_email": "Kapcsolattartási e-mail", - "contact_phone": "Kapcsolattartó telefonszám", - "contact_url": "Kapcsolatfelvétel a weboldallal", - "logo": "Logó", - "logo_hint": "PNG, JPEG, SVG vagy WebP. Maximum 256 KB.", - "logo_clear": "Távolítsa el a logót", - "primary_color": "Elsődleges szín", - "accent_color": "Fejléc színe", - "default_lang": "Alapértelmezett nyelv", - "allow_unattended": "Engedélyezze a felügyelet nélküli hozzáférést", - "allow_unattended_hint": "Ha engedélyezve van, az ügynök állandó jelszót mutat a kezelői hozzáféréshez.", - "save": "Csomag mentése", - "revoke": "Visszavonás", - "unrevoke": "Engedélyezze újra", - "revoked": "Visszavonva", - "preview_title": "Élő előnézet", - "preview_hint": "A végfelhasználói ügynökablak hozzávetőleges megjelenése.", - "preview_default_name": "BetterDesk támogatás", - "preview_status_ready": "Kész", - "preview_id": "Az Ön személyi igazolványa", - "preview_password": "Jelszó", - "preview_chat": "Csevegés támogatással", - "preview_settings": "Beállítások (csak rendszergazda)", - "preview_quit": "Kilépés (csak rendszergazda)", - "download_link_title": "Letöltési link", - "download_link_hint": "Oszd meg ezt a linket a végfelhasználókkal. Egy márkás letöltési oldalt fognak látni. A régi hex linkek továbbra is működnek a rövid link módosítása után.", - "open_portal": "Nyissa meg", - "created": "Csomag létrehozva", - "saved": "Csomag mentve", - "deleted": "Csomag törölve", - "revoked_ok": "Csomag visszavonva", - "unrevoked_ok": "A csomag újra engedélyezve", - "link_copied": "Link a vágólapra másolva", - "copy_failed": "Nem sikerült automatikusan másolni – kérjük, másolja manuálisan", - "unsaved_confirm": "Elveti a nem mentett módosításokat?", - "confirm_revoke": "Visszavonja ezt a csomagot? A letöltési link nem fog működni.", - "confirm_unrevoke": "Újra engedélyezi ezt a csomagot?", - "confirm_delete": "Véglegesen törli ezt a csomagot? Ezt nem lehet visszavonni.", - "errors": { - "validation_failed": "Az érvényesítés sikertelen", - "name_required": "A csomagnév megadása kötelező", - "company_name_required": "A cégnév megadása kötelező", - "logo_invalid": "Az emblémának érvényes képfájlnak kell lennie", - "logo_too_large": "Az embléma 256 KB vagy kisebb lehet", - "logo_read_failed": "Nem sikerült beolvasni az emblémafájlt", - "primary_color_invalid": "Az elsődleges színnek hexadecimális értéknek kell lennie (pl. #2563eb)", - "accent_color_invalid": "A fejléc színének hexadecimális értéknek kell lennie (pl. #1e293b)", - "contact_url_invalid": "A kapcsolatfelvételi webhelynek érvényes URL-nek kell lennie", - "server_host_required": "A nyilvános szervercím kötelező", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "A rövid link csak kisbetűket, számokat és kötőjeleket tartalmazhat", - "slug_too_short": "A rövid linknek legalább 2 karakterből kell állnia", - "slug_too_long": "A rövid link legfeljebb 32 karakter lehet", - "slug_taken": "Ezt a rövid linket már egy másik csomag használja" - }, - "legacy_title": "Klienskonfiguráció-generátor", - "connection_section": "Szerver kapcsolat", - "server_host": "Nyilvános szervercím", - "server_host_hint": "Domáinnév vagy nyilvános IP, ahol a végfelhasználók elérik a BetterDesk szerverét.", - "use_https": "HTTPS / WSS használata (ajánlott)", - "enrollment_per_device": "Eszközönként — jóváhagyás a Regisztrációkban", - "builds_title": "Kliens buildek", - "rebuild_all": "Összes újraépítése", - "rebuild_confirm": "Újraépíti az összes platformtelepítőt ehhez a csomaghoz?", - "build_status_ready": "Kész", - "build_status_pending": "Várakozó", - "build_status_building": "Építés", - "build_status_failed": "Sikertelen", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Eszközeregistrierung", - "enrollment_token_pending": "Pro Eszköz nach Genehmigung", - "enrollment_token_set": "Pro Eszköz — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Eszköze im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Kész-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} sikertelen", - "build_error_hint": "Build hiba", - "preview_help": "Segítség kérése" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID szerver", - "relay_server": "Átjátszó szerver", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Ellenőrzés...", - "label": "Status", - "no_signal": "Nincs jel" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Csatlakozás Desktop Client segítségével", - "remote_viewer": "Távoli megtekintő", - "web_remote": "Webes távoli elérés", - "details": "Details", - "edit": "Szerkesztés", - "delete": "Törölje", - "ban": "Ban", - "unban": "Unban", - "save": "Mentés", - "cancel": "Mégse", - "confirm": "Erősítse meg", - "close": "Bezárás", - "clear": "Clear", - "ok": "OK", - "saved": "Sikeresen mentve", - "back": "Vissza", - "create": "Létrehozása", - "dismiss": "Dismiss", - "view_all": "Összes megtekintése", - "cdap_viewer": "CDAP Snapshot nézető", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s ezelőtt", - "minutes_ago": "{count}m ezelőtt", - "hours_ago": "{count}h ezelőtt", - "days_ago": "{count}d ezelőtt", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Felhasználókezelés", - "subtitle": "A konzolfelhasználók és engedélyek kezelése", - "add_user": "Add User", - "edit_user": "Felhasználó szerkesztése", - "username": "Felhasználónév", - "username_placeholder": "Adja meg a felhasználónevet", - "username_hint": "Csak 3-32 karakter, betűk, számok és aláhúzás", - "password": "Jelszó", - "password_placeholder": "Írja be a jelszót", - "password_hint": "Legalább 8 karakter vegyes kis- és nagybetűkkel, számokkal és szimbólumokkal", - "password_leave_empty": "Hagyja üresen, hogy az aktuális maradjon", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Létrehozva", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Felhasználó létrehozása", - "edit": "Szerkesztés", - "reset_password": "Jelszó visszaállítása", - "new_password": "Új jelszó", - "delete_title": "Felhasználó törlése", - "delete_confirm": "Biztosan törli a {username} felhasználót?", - "delete_success": "A felhasználó sikeresen törölve", - "user_created": "Felhasználó sikeresen létrehozva", - "user_updated": "A felhasználó sikeresen frissítve", - "password_reset_success": "Sikeres jelszó-visszaállítás", - "empty_title": "Nem található felhasználó", - "empty_text": "Felhasználók hozzáadása a konzolhoz való hozzáférés kezeléséhez", - "fill_required": "Kérjük, töltse ki az összes kötelező mezőt", - "invalid_username": "A felhasználónév 3-32 karakterből állhat, csak betűk, számok és aláhúzás", - "username_exists": "A felhasználónév már létezik", - "weak_password": "A jelszó túl gyenge", - "password_too_short": "A jelszónak legalább 8 karakterből kell állnia", - "invalid_role": "Érvénytelen szerepkör", - "cannot_demote_self": "Nem csökkentheted le magad", - "cannot_delete_self": "Nem törölheti saját fiókját", - "last_admin": "Az utolsó rendszergazda nem törölhető", - "admin_only": "Ez a funkció csak a rendszergazdák számára érhető el", - "password_required": "Jelszó szükséges", - "not_found": "Felhasználó nem található", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Biztonsági bevált gyakorlatok", - "tip_strong_passwords": "Használjon erős, egyedi jelszavakat minden felhasználóhoz", - "tip_unique_accounts": "Hozzon létre egyéni fiókokat minden egyes személy számára", - "tip_viewer_role": "Nézői szerepkör használata olyan felhasználók számára, akiknek csak olvasási hozzáférésre van szükségük", - "tip_operator_role": "Operátori szerepkör használata olyan felhasználók számára, akiknek eszközöket kell kezelniük, de a felhasználókat nem", - "tip_audit_logs": "Rendszeresen tekintse át az auditnaplókat a gyanús tevékenységekért", - "role_pro": "Pro (csak API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Szerver Adminisztrátor", - "role_global_admin": "Globális rendszergazda", - "organizations": "Szervezetek", - "user_organizations": "A {username} szervezetei", - "no_organizations": "A felhasználó nincs hozzárendelve egyetlen szervezethez sem", - "org_removed": "Szervezeti hozzárendelés eltávolítva", - "server_role_label": "Szerver szerepkör", - "server_role_hint": "Meghatározza, hogy a felhasználó mit tehet az egész konzolon (panelelérés, szerverkonfiguráció, audit stb.).", - "org_membership_section": "Szervezeti tagság", - "org_membership_hint": "Egy felhasználó több szervezethez is tartozhat. A szervezeti szerepkör csak a szervezeten belüli engedélyeket szabályozza, és független a fenti kiszolgálói szerepkörtől.", - "column_organizations": "Szervezetek", - "no_orgs_short": "—", - "org_count_one": "{count} szervezet", - "org_count_many": "{count} szervezetek", - "all_orgs_assigned": "A felhasználó már minden szervezet tagja.", - "user_groups": "Felhasználói csoportok", - "user_groups_hint": "A felhasználói csoportok segítségével hozzáférést biztosíthat a kiválasztott eszközcsoportokhoz.", - "loading_user_groups": "Felhasználói csoportok betöltése...", - "no_user_groups": "Nincsenek elérhető felhasználói csoportok", - "create_user_group": "Csoport létrehozása", - "edit_user_group": "Felhasználói csoport szerkesztése", - "delete_user_group": "Felhasználói csoport törlése", - "delete_user_group_confirm": "Törli a {name} felhasználói csoportot? A tagok elveszítik ezen a csoporton keresztül biztosított hozzáférésüket.", - "user_group_created": "Felhasználói csoport létrehozva", - "user_group_updated": "Felhasználói csoport frissítve", - "user_group_deleted": "Felhasználói csoport törölve", - "user_group_not_found": "Felhasználói csoport nem található", - "group_name": "Csoport neve", - "group_name_placeholder": "Üzemeltetők", - "group_note": "Note", - "group_note_placeholder": "Opcionális megjegyzés", - "group_name_required": "A csoportnév megadása kötelező", - "group_members_count": "{count} tagok", - "provider": "Szolgáltató", - "provider_local": "Helyi", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Identitásszolgáltató által kezelt", - "provider_managed_hint": "Ezt a fiókot egy külső identitásszolgáltató (LDAP/AD vagy SSO) kezeli. A jelszót és szerepkört a szolgáltató irányítja." - }, - "folders": { - "title": "Folders", - "create": "Mappa létrehozása", - "edit": "Mappa szerkesztése", - "delete": "Mappa törlése", - "name": "Folder Name", - "name_placeholder": "Adja meg a mappa nevét", - "name_required": "A mappanév megadása kötelező", - "name_too_long": "A mappa neve túl hosszú (max. 50 karakter)", - "color": "Color", - "icon": "Icon", - "not_found": "A mappa nem található", - "delete_confirm": "Biztosan törli ezt a mappát? Az eszközök hozzárendelése megszűnik.", - "delete_success": "A mappa sikeresen törölve", - "created": "A mappa sikeresen létrehozva", - "updated": "A mappa sikeresen frissítve", - "no_devices_selected": "Nincsenek kiválasztott eszközök", - "devices_moved": "Az eszközök sikeresen áthelyezve", - "device_assigned": "A mappához rendelt eszköz", - "unassigned": "Unassigned", - "all_devices": "Minden eszköz", - "drag_hint": "A rendszerezéshez húzza az eszközöket mappákba", - "move_to": "Áthelyezés ide", - "toggle_sidebar": "Oldalsáv váltása" - }, + "no_groups": "Még nincsenek csoportok", + "manual_groups": "Kézi csoportok", + "dynamic_memberships": "Dinamikus tagságok", + "group_allowed_user_groups": "Engedélyezett felhasználói csoportok", + "group_allowed_user_groups_hint": "A kiválasztott felhasználói csoportokhoz tartozó felhasználók hozzáférhetnek ehhez az eszközcsoporthoz.", + "no_user_groups": "Nincsenek felhasználói csoportok", + "edit_group": "Csoport szerkesztése", + "delete_group": "Csoport törlése", + "delete_group_confirm": "Törli a {name} eszközcsoportot?", + "group_deleted": "Eszközcsoport törölve", + "folder_group_readonly": "A mappaalapú csoportok kezelése mappákból történik.", + "manage_user_groups": "Felhasználói csoportok kezelése", + "restore_failed": "Eszköz konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Az ügyfél nemrég elérte az API-t, de nincs regisztrálva a jelzőszerveren (UDP :21116). A szerver migrációja után indítsa újra az ügyfelet.", + "per_page": "Oldalanként" + }, + "keys": { + "title": "Szerverkulcsok", + "subtitle": "Nyilvános kulcs és konfiguráció RustDesk kliensekhez", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Szerver információ", + "download": "Letöltési kulcs", + "show_qr": "Show QR", + "qr_hint": "Olvassa be ezt a QR-kódot a RustDesk mobilalkalmazással", + "no_key": "Nem található nyilvános kulcs", + "no_key_to_copy": "Nincs másolható kulcs", + "no_qr": "A QR-kód nem elérhető", + "download_success": "Kulcsfájl letöltve", + "not_found": "A kulcs nem található", + "api_not_found": "A API kulcs nem található" + }, + "settings": { + "title": "Beállítások elemre", + "subtitle": "Konzolkonfiguráció és fiókbeállítások", + "tab_general": "General", + "tab_server": "Szerver", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Nyelv", + "change_password": "Jelszó módosítása", + "password_desc": "Frissítse fiókja jelszavát", + "current_password": "Jelenlegi jelszó", + "new_password": "Új jelszó", + "confirm_password": "Jelszó megerősítése", + "save_password": "Jelszó frissítése", + "password_changed": "A jelszó sikeresen megváltozott", + "fill_all_fields": "Kérjük, töltse ki az összes mezőt", + "passwords_not_match": "A jelszavak nem egyeznek", + "password_requirements": "Jelszó követelmények", + "password_requirements_not_met": "A jelszó nem felel meg a követelményeknek", + "req_length": "Legalább 8 karakter", + "req_uppercase": "Legalább egy nagybetű", + "req_lowercase": "Legalább egy kisbetű", + "req_number": "Legalább egy szám", + "server_info": "Szerver információ", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Legutóbbi konzoltevékenység", + "no_audit_logs": "Nem található auditnapló", + "backend_title": "Szerver háttérrendszer", + "backend_desc": "Válassza ki, hogy melyik kiszolgáló háttérrendszerét használja az eszközkezeléshez és a jel/továbbítási szolgáltatásokhoz.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Szabványos RustDesk jel- és közvetítő szerverek (hbbs + hbbr). Alapvető HTTP API korlátozott végpontokkal.", + "backend_betterdesk_desc": "Továbbfejlesztett Go-alapú szerver teljes REST API, JWT hitelesítéssel, blokklistával, címkékkel, valós idejű WebSocket eseményekkel és audit naplózással.", + "backend_feature_signal": "Jelszerver (azonosító regisztráció)", + "backend_feature_relay": "Továbbítószerver (kapcsolatközvetítő)", + "backend_feature_basic_api": "Alap API-felület", + "backend_feature_full_api": "Teljes REST API (34+ végpont)", + "backend_feature_jwt": "JWT hitelesítés és TOTP 2FA", + "backend_feature_blocklist": "IP/ID blokklista kezelése", + "backend_feature_tags": "Eszközcímkék és csoportosítás", + "backend_feature_audit": "Eseménynaplózás ellenőrzése", + "backend_feature_websocket": "Valós idejű WebSocket események", + "backend_connection": "Csatlakozás", + "backend_api_url": "API URL", + "backend_test": "Kapcsolat tesztelése", + "backend_testing": "Tesztelés...", + "backend_save": "Háttérrendszer alkalmazása", + "backend_saved": "A szerver háttérrendszere sikeresen megváltozott. Az eszközadatokat mostantól az új háttérrendszer fogja kezelni.", + "backend_save_failed": "Nem sikerült váltani a szerver hátterét", + "backend_test_success": "Sikeres csatlakozás! A szerver elérhető.", + "backend_test_failed": "A csatlakozás sikertelen. A szerver elérhetetlen.", + "backend_confirm_switch": "Biztos, hogy át akarja váltani a szerver hátterét? Ez megváltoztatja az eszközök kezelésének módját.", + "backend_unreachable": "Nem lehet váltani: a célszerver nem érhető el. Először indítsa el a szervert.", + "invalid_backend": "Érvénytelen háttérválasztás. Válassza a \"rustdesk\" vagy a \"betterdesk\" lehetőséget.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Kéttényezős hitelesítés", + "totp_desc": "Adjon hozzá egy extra biztonsági réteget a TOTP hitelesítő alkalmazásokkal (Google Authenticator, Microsoft Authenticator, Authy stb.)", + "totp_enabled": "2FA engedélyezve", + "totp_enabled_desc": "Fiókját kétlépcsős hitelesítés védi.", + "totp_disabled": "2FA nincs engedélyezve", + "totp_disabled_desc": "Engedélyezze a kéttényezős hitelesítést a fiók további biztonsága érdekében.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Telepítsen egy hitelesítő alkalmazást a telefonjára", + "totp_step2": "Olvassa be az alábbi QR-kódot", + "totp_step3": "Az ellenőrzéshez írja be a 6 számjegyű kódot", + "totp_manual_key": "Manual key", + "totp_enter_code": "Írja be az ellenőrző kódot", + "totp_verify_enable": "Ellenőrzés és engedélyezés", + "totp_enabled_success": "Kéttényezős hitelesítés engedélyezve!", + "totp_recovery_warning": "Mentse el ezeket a helyreállítási kódokat egy biztonságos helyen. Minden kód csak egyszer használható fel. Ha elveszíti hozzáférését hitelesítő alkalmazásához, akkor ezekkel a kódokkal jelentkezhet be.", + "totp_done": "Done", + "totp_disable_warning": "A kéttényezős hitelesítés letiltásával fiókja kevésbé lesz biztonságos. A megerősítéshez adja meg jelszavát.", + "totp_disabled_success": "A kéttényezős hitelesítés letiltva.", + "tutorials_title": "Oktatóanyagok és útmutatók", + "tutorials_desc": "Vezérelje a vezetett körutakat és a konzolon megjelenő súgófedvényeket", + "tutorials_enabled": "Oktatóanyagok engedélyezése", + "tutorials_enabled_hint": "Ha le van tiltva, az oktatóprogramok nem indulnak el automatikusan, és a súgó gomb rejtve lesz", + "tutorials_reset_hint": "Jelölje meg az összes oktatóanyagot nem látottként, hogy újra megjelenhessenek", + "tutorials_enabled_toast": "Oktatóanyagok engedélyezve", + "tutorials_disabled_toast": "Oktatóprogramok letiltva", + "tutorials_reset_toast": "Minden oktatóanyag visszaállt", + "tab_auth": "Hitelesítés", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurálja a külső hitelesítést a LDAP vagy Active Directory segítségével. A felhasználók a domain hitelesítési adataikkal jelentkezhetnek be.", + "ldap_enabled": "Engedélyezze a LDAP hitelesítést", + "ldap_enabled_hint": "Ha engedélyezve van, a felhasználók LDAP/AD hitelesítő adatokkal jelentkezhetnek be. A helyi fiókok továbbra is tartalékként működnek.", + "ldap_connection": "Szerver kapcsolat", + "ldap_host": "Házigazda", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "A TLS ellenőrzés kihagyása", + "ldap_timeout": "Kapcsolódási időtúllépés (ek)", + "ldap_timeout_hint": "Másodpercek várni a LDAP szerver válaszára", + "ldap_bind_mode": "Kötési mód", + "ldap_direct_bind": "Közvetlen kötés", + "ldap_direct_bind_hint": "Köteles közvetlenül egy DN-sablonnal, ahelyett, hogy szolgáltatásfiókot használna a kereséshez.", + "ldap_bind_dn": "DN kötése (szolgáltatási fiók)", + "ldap_bind_dn_hint": "A felhasználók keresésére használt, csak olvasható szolgáltatásfiók megkülönböztetett neve.", + "ldap_bind_password": "Kötési jelszó", + "ldap_base_dn": "DN alap", + "ldap_base_dn_hint": "Keresési alap a felhasználók megtalálásához, pl. dc=example,dc=com", + "ldap_user_filter": "Felhasználói szűrő", + "ldap_user_filter_hint": "LDAP szűrő a felhasználók megtalálásához. A {{username}} használata helyőrzőként. Alapértelmezett: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Közvetlen kötés DN-sablon", + "ldap_direct_bind_dn_hint": "DN sablon közvetlen kötéshez. Helyőrzőként használja a {{username}} értéket, pl. uid={{username}},ou=felhasználók,dc=példa,dc=com", + "ldap_user_attrs": "Felhasználói attribútumok", + "ldap_attr_id": "Felhasználónév attribútum", + "ldap_attr_email": "E-mail attribútum", + "ldap_attr_name": "Megjelenítési név attribútum", + "ldap_group_mapping": "Csoport → Szerepleképezés", + "ldap_group_base_dn": "Csoportbázis DN", + "ldap_group_base_dn_hint": "Hagyja üresen a fő Base DN használatához", + "ldap_group_filter": "Csoportszűrő", + "ldap_group_attr_name": "Csoportnév Attribútum", + "ldap_default_role": "Alapértelmezett szerep", + "ldap_default_role_hint": "Olyan felhasználókhoz rendelt szerepkör, akiknek a LDAP csoportjai nem egyeznek semmilyen leképezéssel", + "ldap_role_viewer": "Néző", + "ldap_role_operator": "Üzemeltető", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Csoport → Szereptérkép", + "ldap_group_role_map_hint": "LDAP csoportok hozzárendelése BetterDesk szerepkörökhöz. Formátum: GroupDN=szerep, amelyet | jel választ el (cső). Példa: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operátor", + "ldap_test_connection": "Kapcsolat tesztelése", + "ldap_testing": "Tesztelés...", + "ldap_test_success": "Sikeres csatlakozás! A LDAP szerver elérhető, és a kötési hitelesítő adatok érvényesek.", + "ldap_test_failed": "A csatlakozás sikertelen", + "ldap_save": "Mentse el a LDAP konfigurációt", + "ldap_saved": "A LDAP konfiguráció sikeresen mentve", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfigurálja az egyszeri bejelentkezést egy OpenID Connect szolgáltatón keresztül (Azure AD, Okta, Google, Keycloak stb.).", + "oidc_enabled": "Engedélyezze a OIDC hitelesítést", + "oidc_enabled_hint": "Lehetővé teszi a felhasználók számára, hogy külső identitásszolgáltatóval jelentkezzenek be", + "oidc_provider": "Személyazonosság-szolgáltató", + "oidc_display_name": "Gomb megjelenített neve", + "oidc_display_name_hint": "A bejelentkezési gombon megjelenő szöveg (pl. Azure AD, Okta)", + "oidc_issuer_url": "Kibocsátó URL", + "oidc_issuer_url_hint": "OpenID Connect kibocsátó URL (a felderítés automatikus lesz)", + "oidc_client_id": "Ügyfél-azonosító", + "oidc_client_secret": "Ügyfél titka", + "oidc_redirect_url": "URL átirányítása (visszahívás)", + "oidc_redirect_url_hint": "Pontosan meg kell egyeznie az IdP-ben konfiguráltal. Általában: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Hatókör", + "oidc_use_pkce": "PKCE használata (ajánlott)", + "oidc_auto_discovery": "Automatikus felfedezés", + "oidc_allow_signup": "Felhasználók automatikus létrehozása", + "oidc_manual_endpoints": "Kézi végpont URL-ek", + "oidc_authorization_url": "Engedélyezési végpont", + "oidc_token_url": "Token végpont", + "oidc_userinfo_url": "Userinfo végpont", + "oidc_claim_mapping": "Igényleképezés", + "oidc_claim_username": "Felhasználónév igény", + "oidc_claim_email": "E-mail követelés", + "oidc_claim_name": "Megjelenített név követelése", + "oidc_claim_groups": "Csoportok követelés", + "oidc_role_mapping": "Szereptérképezés", + "oidc_default_role": "Alapértelmezett szerep", + "oidc_group_role_map": "Csoport → Szerepleképezés", + "oidc_group_role_map_hint": "Soronként egy leképezés: group_name=role (pl. admins=admin, operators=operator)", + "oidc_test_discovery": "Felfedezés tesztje", + "oidc_testing": "Tesztelés...", + "oidc_test_success": "Sikerült a felfedezés! A végpontok megoldva.", + "oidc_test_failed": "A felfedezés nem sikerült", + "oidc_issuer_required": "A URL kibocsátó szükséges a felfedezés teszteléséhez", + "oidc_save": "Mentse el a OIDC konfigurációt", + "oidc_saved": "A OIDC konfiguráció sikeresen mentve", + "connection_mode_title": "Kapcsolati stratégia", + "connection_mode_desc": "Szabályozza, hogyan csatlakoznak a RustDesk asztali kliensek.", + "connection_mode_label": "Alapértelmezett kapcsolati mód", + "connection_mode_p2p_first": "P2P először (ajánlott) — próbáljon közvetlen kapcsolatot, térjen vissza a relére", + "connection_mode_relay_only": "Csak relé — minden munkamenet a relészervert használja", + "connection_mode_advanced": "Speciális beállítások", + "connection_mode_fallback_ms": "P2P tartalék időtúllépés (ms)", + "connection_mode_same_nat_relay": "Kényszerítsen relékemet, ha mindkét peer ugyanazt a nyilvános IP-t osztja meg (NAT hairpin)", + "connection_mode_network_hint": "A P2P megköveteli a 21116-os UDP port elérhetőségét a kliensek között.", + "connection_mode_save": "Mentés", + "connection_mode_save_restart": "Mentés és szerver újraindítása", + "connection_mode_saved": "Kapcsolati mód mentve", + "connection_mode_restart_started": "Szerver újraindítása megkezdve", + "connection_mode_restart_failed": "Szerver újraindítása sikertelen", + "connection_mode_not_configurable": "A kapcsolati mód nem módosítható ezen a telepítésen", + "connection_mode_source_saved": "Mentve itt:", + "connection_mode_source_defaults": "Szerver alapértelmezéseket használ (a panelből nem írható)", + "connection_mode_runtime": "Aktív szerver", + "advanced_title": "Konfigurációs fájlok", + "advanced_desc": "A szerver konfigurációs fájlainak közvetlen szerkesztése. A változtatások a szolgáltatások újraindítását igényelhetik.", + "advanced_warning": "Ezek a fájlok titkokat tartalmaznak. Csak akkor szerkessze, ha tudja mit csinál.", + "advanced_files_label": "Fájlok", + "advanced_select_file": "Válasszon fájlt a listából a tartalom megtekintéséhez vagy szerkesztéséhez.", + "advanced_reload": "Újratöltés", + "advanced_save": "Fájl mentése", + "advanced_apply_restart": "Alkalmaz (szolgáltatás újraindítása)", + "advanced_saved": "Konfigurációs fájl mentve", + "advanced_restart_after_save": "Konfiguráció mentve. Indítsa újra az érintett szolgáltatást most?", + "advanced_restart_confirm": "Újraindítja a kapcsolódó BetterDesk szolgáltatásokat? Az aktív kapcsolatok rövid időre megszakadhatnak.", + "advanced_restart_console_confirm": "Újraindítja a webkonzol szolgáltatást? A böngésző munkamenete rövid időre megszakad.", + "advanced_restart_started": "Szolgáltatás újraindítása megkezdve", + "advanced_restart_done": "Konzol újraindítva — az oldal újratöltése...", + "advanced_restart_polling": "Várakozás a konzol visszatérésére...", + "advanced_restart_timeout": "Az újraindítás elküldve, de a konzol nem válaszolt időben. Ellenőrizze a naplókat és töltse be manuálisan.", + "advanced_restart_failed": "Szolgáltatás újraindítása sikertelen", + "advanced_save_confirm": "Mentse a módosításokat ebbe a fájlba? Az előző verzióról biztonsági másolat készül.", + "advanced_unsaved_confirm": "Nem mentett módosításai vannak. Elveti őket?", + "advanced_no_files": "Ezen a rendszeren nem találhatók konfigurációs fájlok.", + "advanced_readonly": "csak olvasható", + "advanced_missing": "hiányzik", + "advanced_new_file": "Új fájl (mentés előtt nem jön létre)", + "advanced_new_file_hint": "Új fájl — adjon hozzá tartalmat és mentse", + "advanced_backup_created": "biztonsági mentés létrehozva", + "advanced_error_unknown": "Ismeretlen konfigurációs fájl", + "advanced_error_not_found": "A fájl nem létezik", + "advanced_error_too_large": "A fájl meghaladja a maximálisan szerkeszthető méretet (512 KB)", + "advanced_error_binary": "A bináris fájlok nem szerkeszthetők a panelben", + "advanced_error_invalid": "Érvénytelen fájltartalom", + "advanced_error_not_writable": "A fájl nem írható a konzol folyamat által", + "enrollment_title": "Eszközregisztráció (RustDesk)", + "enrollment_desc": "Szabályozza, hogyan regisztrálnak az új RustDesk kliensek.", + "enrollment_require_approval": "Operátor jóváhagyás szükséges (felügyelt mód)", + "enrollment_require_approval_hint": "Ha engedélyezve van, az ismeretlen kliensek sorba kerülnek, amíg egy operátor jóvá nem hagyja őket.", + "enrollment_rich_approve": "Teljes jóváhagyási form (név, mappa, csoportok, címkék)", + "enrollment_rich_approve_hint": "Részletes párbeszédpanelt mutat a regisztrációs kérések jóváhagyásakor.", + "enrollment_tag_picker": "Válasszon meglévő eszközcímkékből", + "enrollment_tag_picker_hint": "Lehetővé teszi az operátoroknak, hogy az Eszközök oldalon használt listából válasszanak.", + "enrollment_open_requests": "Nyitott regisztrációs kérések", + "enrollment_pending_count": "{count} függőben lévő regisztrációs kérés", + "tab_advanced": "Speciális", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Szolgáltatás neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Fájl", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (szolgáltatás-egység)", + "advanced_file_systemd-server": "systemd: betterdesk-server (szolgáltatás-egység)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor konfiguráció)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestráció)", + "advanced_restart_none": "Für diese Fájl ist kein Szolgáltatásneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Bejelentkezés sikertelen", + "action_logout": "Logout", + "action_password_change": "Jelszó megváltozott", + "action_2fa_enable": "2FA engedélyezve", + "action_2fa_disable": "2FA letiltva", + "action_user_create": "Felhasználó létrehozva", + "action_user_update": "Felhasználó frissítve", + "action_user_delete": "Felhasználó törölve", + "action_settings_update": "Beállítások frissítve", + "action_device_ban": "Eszköz kitiltva", + "action_device_unban": "Eszköz tiltva", + "action_device_delete": "Eszköz törölve" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Korai funkció — az ügynökcsomag-generátor aktív fejlesztés alatt áll.", + "config_options": "Konfigurációs lehetőségek", + "server_address": "Szerver címe", + "server_address_hint": "A szerver domainje vagy IP-címe", + "custom_port": "Custom Port", + "port_hint": "Alapértelmezés szerint hagyja üresen (21116)", + "relay_server": "Átjátszó szerver", + "relay_placeholder": "Ugyanaz, mint az ID szerver, ha üres", + "relay_hint": "Opcionális: külön továbbítószerver címe", + "include_key": "A nyilvános kulcs szerepeltetése a konfigurációban", + "generate": "Konfiguráció generálása", + "output": "Konfigurációs kimenet", + "usage_title": "Csatlakozás részletei", + "generated": "Konfiguráció generálva", + "server_required": "A szerver címe kötelező", + "nothing_to_copy": "Először generáljon konfigurációt", + "bundles_title": "Ügynökkötegek", + "new_bundle": "Új köteg", + "editor_title": "Bundle szerkesztő", + "empty_state": "Válasszon ki egy csomagot a bal oldalon, vagy hozzon létre egy újat a kezdéshez.", + "loading": "Betöltés…", + "no_bundles": "Még nincsenek csomagok. Hozd létre az elsőt.", + "bundle_name": "A csomag neve", + "bundle_name_hint": "Csak belső címke – nem jelenik meg a végfelhasználók számára.", + "short_link": "Rövid letöltési link", + "short_link_hint": "A nyilvános URL-ben (/d/…) használatos. Csak kisbetűk, számok és kötőjelek (2–32 karakter). Automatikusan kitöltődik a csomag nevéből — rövidítse könnyebb megosztáshoz (pl. acme).", + "branding_section": "Márkaépítés", + "company_name": "Cég/márkanév", + "short_text": "Rövid leírás", + "contact_email": "Kapcsolattartási e-mail", + "contact_phone": "Kapcsolattartó telefonszám", + "contact_url": "Kapcsolatfelvétel a weboldallal", + "logo": "Logó", + "logo_hint": "PNG, JPEG, SVG vagy WebP. Maximum 256 KB.", + "logo_clear": "Távolítsa el a logót", + "primary_color": "Elsődleges szín", + "accent_color": "Fejléc színe", + "default_lang": "Alapértelmezett nyelv", + "allow_unattended": "Engedélyezze a felügyelet nélküli hozzáférést", + "allow_unattended_hint": "Ha engedélyezve van, az ügynök állandó jelszót mutat a kezelői hozzáféréshez.", + "save": "Csomag mentése", + "revoke": "Visszavonás", + "unrevoke": "Engedélyezze újra", + "revoked": "Visszavonva", + "preview_title": "Élő előnézet", + "preview_hint": "A végfelhasználói ügynökablak hozzávetőleges megjelenése.", + "preview_default_name": "BetterDesk támogatás", + "preview_status_ready": "Kész", + "preview_id": "Az Ön személyi igazolványa", + "preview_password": "Jelszó", + "preview_chat": "Csevegés támogatással", + "preview_settings": "Beállítások (csak rendszergazda)", + "preview_quit": "Kilépés (csak rendszergazda)", + "download_link_title": "Letöltési link", + "download_link_hint": "Oszd meg ezt a linket a végfelhasználókkal. Egy márkás letöltési oldalt fognak látni. A régi hex linkek továbbra is működnek a rövid link módosítása után.", + "open_portal": "Nyissa meg", + "created": "Csomag létrehozva", + "saved": "Csomag mentve", + "deleted": "Csomag törölve", + "revoked_ok": "Csomag visszavonva", + "unrevoked_ok": "A csomag újra engedélyezve", + "link_copied": "Link a vágólapra másolva", + "copy_failed": "Nem sikerült automatikusan másolni – kérjük, másolja manuálisan", + "unsaved_confirm": "Elveti a nem mentett módosításokat?", + "confirm_revoke": "Visszavonja ezt a csomagot? A letöltési link nem fog működni.", + "confirm_unrevoke": "Újra engedélyezi ezt a csomagot?", + "confirm_delete": "Véglegesen törli ezt a csomagot? Ezt nem lehet visszavonni.", "errors": { - "forbidden_title": "Hozzáférés megtagadva", - "forbidden_message": "Nincs engedélye az erőforrás elérésére.", - "not_found_title": "Az oldal nem található", - "not_found_message": "A keresett oldal nem létezik, vagy el lett helyezve.", - "server_error_title": "Szerver hiba", - "server_error_message": "Valami elromlott. Kérjük, próbálja újra később.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Nem sikerült betölteni az eszközöket", - "load_key_failed": "Nem sikerült betölteni a kulcsot", - "load_qr_failed": "Nem sikerült betölteni a QR-kódot", - "load_audit_failed": "Nem sikerült betölteni az auditnaplót", - "load_users_failed": "Nem sikerült betölteni a felhasználókat", - "load_folders_failed": "Nem sikerült betölteni a mappákat", - "download_failed": "Letöltés sikertelen", - "logout_failed": "A kijelentkezés sikertelen", - "password_change_failed": "Nem sikerült megváltoztatni a jelszót", - "language_change_failed": "Nem sikerült megváltoztatni a nyelvet", - "ban_failed": "Az eszköz letiltása nem sikerült", - "unban_failed": "Az eszköz kitiltásának feloldása nem sikerült", - "delete_failed": "Nem sikerült törölni az eszközt", - "change_id_failed": "Nem sikerült módosítani az eszközazonosítót", - "bulk_delete_failed": "Nem sikerült törölni az eszközöket", - "sync_failed": "Nem sikerült szinkronizálni az állapotot", - "error": "Error", - "not_found": "Not found", - "server_error": "Szerver hiba", - "load_device_failed": "Nem sikerült betölteni az eszközt", - "load_orgs_failed": "Nem sikerült betölteni a szervezeteket" + "validation_failed": "Az érvényesítés sikertelen", + "name_required": "A csomagnév megadása kötelező", + "company_name_required": "A cégnév megadása kötelező", + "logo_invalid": "Az emblémának érvényes képfájlnak kell lennie", + "logo_too_large": "Az embléma 256 KB vagy kisebb lehet", + "logo_read_failed": "Nem sikerült beolvasni az emblémafájlt", + "primary_color_invalid": "Az elsődleges színnek hexadecimális értéknek kell lennie (pl. #2563eb)", + "accent_color_invalid": "A fejléc színének hexadecimális értéknek kell lennie (pl. #1e293b)", + "contact_url_invalid": "A kapcsolatfelvételi webhelynek érvényes URL-nek kell lennie", + "server_host_required": "A nyilvános szervercím kötelező", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "A rövid link csak kisbetűket, számokat és kötőjeleket tartalmazhat", + "slug_too_short": "A rövid linknek legalább 2 karakterből kell állnia", + "slug_too_long": "A rövid link legfeljebb 32 karakter lehet", + "slug_taken": "Ezt a rövid linket már egy másik csomag használja" }, - "remote": { - "title": "Távoli asztal", - "connecting": "Csatlakozás...", - "waiting_password": "Várakozás a jelszóra", - "authenticating": "Hitelesítés...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Jelszó szükséges", - "enter_password_for": "Adja meg az eszköz jelszavát", - "password_placeholder": "Az eszköz jelszava", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Vissza az Eszközökhöz", - "fullscreen": "Fullscreen", - "toggle_audio": "Hang váltása", - "send_keys": "Kulcsok küldése", - "scale_mode": "Scale Mode", - "scale_fit": "Illesztés az ablakhoz", - "scale_fill": "Fill Window", - "scale_original": "Eredeti méret (1:1)", - "scale_stretch": "Nyújtsa ki a kitöltéshez", - "actions": "Actions", - "lock_screen": "Képernyőzár", - "restart_remote": "Indítsa újra a Távoli eszközt", - "refresh_screen": "Képernyő frissítése", - "clipboard_paste": "Beillesztés a vágólapról", - "block_input": "Block Input", - "display_settings": "Megjelenítési beállítások", - "image_quality": "Képminőség", - "quality_best": "Legjobb (teljes minőség, 60 képkocka/mp)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Távoli kurzor megjelen��tése", - "lock_after_session": "Lezárás a munkamenet után", - "privacy_mode": "Adatvédelmi mód", - "disable_clipboard": "Vágólap letiltása", - "chat": "Chat", - "chat_placeholder": "Írjon be egy üzenetet...", - "record": "Felvételi képernyő", - "view_only": "Csak megtekintés", - "pin_toolbar": "Eszköztár rögzítése", - "monitors": "Monitors", - "select_monitor": "Válassza a Monitor lehetőséget", - "quality_speed": "Sebesség (alacsony minőség, 60 képkocka/mp)", - "quality_quality": "Minőség (legjobb, 30 képkocka/mp)", - "recording_started": "A felvétel elkezdődött", - "recording_stopped": "A felvétel leállt", - "download_recording": "Letöltés Felvétel", - "e2e_encrypted": "Végponttól végpontig titkosított", - "e2e_key_exchange": "Biztonságos csatorna létrehozása...", - "confirm_restart": "Biztosan újra akarja indítani a távoli eszközt?", - "webcodecs_not_supported": "Az Ön böngészője nem támogatja a WebCodecs API fájlt. Kérjük, használja a Chrome 94+ vagy az Edge 94+.", - "webcodecs_insecure_context": "A WebCodecs nem érhető el a HTTP felett. A videó szoftveres tartalékot használ. A legjobb teljesítmény érdekében használja a HTTPS-t.", - "webcodecs_fallback_active": "Szoftveres videó dekóder aktív (korlátozott teljesítmény)", - "click_to_start": "Kattintson a Start gombra", - "autoplay_blocked": "A böngésző felhasználói beavatkozást igényel a video- és hanglejátszás elindításához.", - "start_playback": "Indítsa el a Lejátszást", - "new_connection": "Új kapcsolat", - "device_id_placeholder": "Írja be az eszközazonosítót", - "http_warning": "HTTP mód: H.264 szoftveres dekódolásra korlátozva (~15 FPS). Használja a HTTPS-t a teljes teljesítmény érdekében (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Fájlátvitel", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Ez a mappa üres", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Az átvitel nem sikerült", - "file_show_hidden": "Rejtett fájlok megjelenítése", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Adja meg a mappa nevét:", - "file_parent": "Szülőmappa", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Írja be az új nevet:", - "file_delete_confirm": "Biztosan törli ezt az elemet?", - "file_cancelled": "Az átvitel megszakítva", - "2fa_required": "2FA ellenőrzés szükséges", - "2fa_hint": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", - "2fa_invalid": "Adjon meg egy érvényes 6 számjegyű kódot", - "verify": "Verify", - "use_cdap_fallback": "Használja a CDAP megjelenítőt", - "cdap_fallback_hint": "Nyissa meg a könnyű JPEG-lekérdezési nézetot, amely bd-signal/CDAP-ot használ a RustDesk-relé helyett. Hasznos, ha a peer offline a reléen, de elérhető az agent-kezelési csatornán keresztül.", - "clipboard_empty": "A vágólap üres", - "clipboard_denied": "A vágólaphoz való hozzáférés megtagadva. HTTPS szükséges, vagy engedélyt nem adtak meg.", - "file_loading": "Betöltés...", - "file_timeout": "A távoli eszköz nem válaszolt. Előfordulhat, hogy a fájlátvitel nem támogatott vagy le van tiltva a távoli gépen.", - "codec": "Video Codec", - "codec_auto": "Automatikus (ajánlott)" + "legacy_title": "Klienskonfiguráció-generátor", + "connection_section": "Szerver kapcsolat", + "server_host": "Nyilvános szervercím", + "server_host_hint": "Domáinnév vagy nyilvános IP, ahol a végfelhasználók elérik a BetterDesk szerverét.", + "use_https": "HTTPS / WSS használata (ajánlott)", + "enrollment_per_device": "Eszközönként — jóváhagyás a Regisztrációkban", + "builds_title": "Kliens buildek", + "rebuild_all": "Összes újraépítése", + "rebuild_confirm": "Újraépíti az összes platformtelepítőt ehhez a csomaghoz?", + "build_status_ready": "Kész", + "build_status_pending": "Várakozó", + "build_status_building": "Építés", + "build_status_failed": "Sikertelen", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Eszközeregistrierung", + "enrollment_token_pending": "Pro Eszköz nach Genehmigung", + "enrollment_token_set": "Pro Eszköz — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Eszköze im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Kész-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} sikertelen", + "build_error_hint": "Build hiba", + "preview_help": "Segítség kérése" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID szerver", + "relay_server": "Átjátszó szerver", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Ellenőrzés...", + "label": "Status", + "no_signal": "Nincs jel" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Csatlakozás Desktop Client segítségével", + "remote_viewer": "Távoli megtekintő", + "web_remote": "Webes távoli elérés", + "details": "Details", + "edit": "Szerkesztés", + "delete": "Törölje", + "ban": "Ban", + "unban": "Unban", + "save": "Mentés", + "cancel": "Mégse", + "confirm": "Erősítse meg", + "close": "Bezárás", + "clear": "Clear", + "ok": "OK", + "saved": "Sikeresen mentve", + "back": "Vissza", + "create": "Létrehozása", + "dismiss": "Dismiss", + "view_all": "Összes megtekintése", + "cdap_viewer": "CDAP Snapshot nézető", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s ezelőtt", + "minutes_ago": "{count}m ezelőtt", + "hours_ago": "{count}h ezelőtt", + "days_ago": "{count}d ezelőtt", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Felhasználókezelés", + "subtitle": "A konzolfelhasználók és engedélyek kezelése", + "add_user": "Add User", + "edit_user": "Felhasználó szerkesztése", + "username": "Felhasználónév", + "username_placeholder": "Adja meg a felhasználónevet", + "username_hint": "Csak 3-32 karakter, betűk, számok és aláhúzás", + "password": "Jelszó", + "password_placeholder": "Írja be a jelszót", + "password_hint": "Legalább 8 karakter vegyes kis- és nagybetűkkel, számokkal és szimbólumokkal", + "password_leave_empty": "Hagyja üresen, hogy az aktuális maradjon", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Létrehozva", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Felhasználó létrehozása", + "edit": "Szerkesztés", + "reset_password": "Jelszó visszaállítása", + "new_password": "Új jelszó", + "delete_title": "Felhasználó törlése", + "delete_confirm": "Biztosan törli a {username} felhasználót?", + "delete_success": "A felhasználó sikeresen törölve", + "user_created": "Felhasználó sikeresen létrehozva", + "user_updated": "A felhasználó sikeresen frissítve", + "password_reset_success": "Sikeres jelszó-visszaállítás", + "empty_title": "Nem található felhasználó", + "empty_text": "Felhasználók hozzáadása a konzolhoz való hozzáférés kezeléséhez", + "fill_required": "Kérjük, töltse ki az összes kötelező mezőt", + "invalid_username": "A felhasználónév 3-32 karakterből állhat, csak betűk, számok és aláhúzás", + "username_exists": "A felhasználónév már létezik", + "weak_password": "A jelszó túl gyenge", + "password_too_short": "A jelszónak legalább 8 karakterből kell állnia", + "invalid_role": "Érvénytelen szerepkör", + "cannot_demote_self": "Nem csökkentheted le magad", + "cannot_delete_self": "Nem törölheti saját fiókját", + "last_admin": "Az utolsó rendszergazda nem törölhető", + "admin_only": "Ez a funkció csak a rendszergazdák számára érhető el", + "password_required": "Jelszó szükséges", + "not_found": "Felhasználó nem található", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Biztonsági bevált gyakorlatok", + "tip_strong_passwords": "Használjon erős, egyedi jelszavakat minden felhasználóhoz", + "tip_unique_accounts": "Hozzon létre egyéni fiókokat minden egyes személy számára", + "tip_viewer_role": "Nézői szerepkör használata olyan felhasználók számára, akiknek csak olvasási hozzáférésre van szükségük", + "tip_operator_role": "Operátori szerepkör használata olyan felhasználók számára, akiknek eszközöket kell kezelniük, de a felhasználókat nem", + "tip_audit_logs": "Rendszeresen tekintse át az auditnaplókat a gyanús tevékenységekért", + "role_pro": "Pro (csak API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Szerver Adminisztrátor", + "role_global_admin": "Globális rendszergazda", + "organizations": "Szervezetek", + "user_organizations": "A {username} szervezetei", + "no_organizations": "A felhasználó nincs hozzárendelve egyetlen szervezethez sem", + "org_removed": "Szervezeti hozzárendelés eltávolítva", + "server_role_label": "Szerver szerepkör", + "server_role_hint": "Meghatározza, hogy a felhasználó mit tehet az egész konzolon (panelelérés, szerverkonfiguráció, audit stb.).", + "org_membership_section": "Szervezeti tagság", + "org_membership_hint": "Egy felhasználó több szervezethez is tartozhat. A szervezeti szerepkör csak a szervezeten belüli engedélyeket szabályozza, és független a fenti kiszolgálói szerepkörtől.", + "column_organizations": "Szervezetek", + "no_orgs_short": "—", + "org_count_one": "{count} szervezet", + "org_count_many": "{count} szervezetek", + "all_orgs_assigned": "A felhasználó már minden szervezet tagja.", + "user_groups": "Felhasználói csoportok", + "user_groups_hint": "A felhasználói csoportok segítségével hozzáférést biztosíthat a kiválasztott eszközcsoportokhoz.", + "loading_user_groups": "Felhasználói csoportok betöltése...", + "no_user_groups": "Nincsenek elérhető felhasználói csoportok", + "create_user_group": "Csoport létrehozása", + "edit_user_group": "Felhasználói csoport szerkesztése", + "delete_user_group": "Felhasználói csoport törlése", + "delete_user_group_confirm": "Törli a {name} felhasználói csoportot? A tagok elveszítik ezen a csoporton keresztül biztosított hozzáférésüket.", + "user_group_created": "Felhasználói csoport létrehozva", + "user_group_updated": "Felhasználói csoport frissítve", + "user_group_deleted": "Felhasználói csoport törölve", + "user_group_not_found": "Felhasználói csoport nem található", + "group_name": "Csoport neve", + "group_name_placeholder": "Üzemeltetők", + "group_note": "Note", + "group_note_placeholder": "Opcionális megjegyzés", + "group_name_required": "A csoportnév megadása kötelező", + "group_members_count": "{count} tagok", + "provider": "Szolgáltató", + "provider_local": "Helyi", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Identitásszolgáltató által kezelt", + "provider_managed_hint": "Ezt a fiókot egy külső identitásszolgáltató (LDAP/AD vagy SSO) kezeli. A jelszót és szerepkört a szolgáltató irányítja." + }, + "folders": { + "title": "Folders", + "create": "Mappa létrehozása", + "edit": "Mappa szerkesztése", + "delete": "Mappa törlése", + "name": "Folder Name", + "name_placeholder": "Adja meg a mappa nevét", + "name_required": "A mappanév megadása kötelező", + "name_too_long": "A mappa neve túl hosszú (max. 50 karakter)", + "color": "Color", + "icon": "Icon", + "not_found": "A mappa nem található", + "delete_confirm": "Biztosan törli ezt a mappát? Az eszközök hozzárendelése megszűnik.", + "delete_success": "A mappa sikeresen törölve", + "created": "A mappa sikeresen létrehozva", + "updated": "A mappa sikeresen frissítve", + "no_devices_selected": "Nincsenek kiválasztott eszközök", + "devices_moved": "Az eszközök sikeresen áthelyezve", + "device_assigned": "A mappához rendelt eszköz", + "unassigned": "Unassigned", + "all_devices": "Minden eszköz", + "drag_hint": "A rendszerezéshez húzza az eszközöket mappákba", + "move_to": "Áthelyezés ide", + "toggle_sidebar": "Oldalsáv váltása" + }, + "errors": { + "forbidden_title": "Hozzáférés megtagadva", + "forbidden_message": "Nincs engedélye az erőforrás elérésére.", + "not_found_title": "Az oldal nem található", + "not_found_message": "A keresett oldal nem létezik, vagy el lett helyezve.", + "server_error_title": "Szerver hiba", + "server_error_message": "Valami elromlott. Kérjük, próbálja újra később.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Nem sikerült betölteni az eszközöket", + "load_key_failed": "Nem sikerült betölteni a kulcsot", + "load_qr_failed": "Nem sikerült betölteni a QR-kódot", + "load_audit_failed": "Nem sikerült betölteni az auditnaplót", + "load_users_failed": "Nem sikerült betölteni a felhasználókat", + "load_folders_failed": "Nem sikerült betölteni a mappákat", + "download_failed": "Letöltés sikertelen", + "logout_failed": "A kijelentkezés sikertelen", + "password_change_failed": "Nem sikerült megváltoztatni a jelszót", + "language_change_failed": "Nem sikerült megváltoztatni a nyelvet", + "ban_failed": "Az eszköz letiltása nem sikerült", + "unban_failed": "Az eszköz kitiltásának feloldása nem sikerült", + "delete_failed": "Nem sikerült törölni az eszközt", + "change_id_failed": "Nem sikerült módosítani az eszközazonosítót", + "bulk_delete_failed": "Nem sikerült törölni az eszközöket", + "sync_failed": "Nem sikerült szinkronizálni az állapotot", + "error": "Error", + "not_found": "Not found", + "server_error": "Szerver hiba", + "load_device_failed": "Nem sikerült betölteni az eszközt", + "load_orgs_failed": "Nem sikerült betölteni a szervezeteket" + }, + "remote": { + "title": "Távoli asztal", + "connecting": "Csatlakozás...", + "waiting_password": "Várakozás a jelszóra", + "authenticating": "Hitelesítés...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Jelszó szükséges", + "enter_password_for": "Adja meg az eszköz jelszavát", + "password_placeholder": "Az eszköz jelszava", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Vissza az Eszközökhöz", + "fullscreen": "Fullscreen", + "toggle_audio": "Hang váltása", + "send_keys": "Kulcsok küldése", + "scale_mode": "Scale Mode", + "scale_fit": "Illesztés az ablakhoz", + "scale_fill": "Fill Window", + "scale_original": "Eredeti méret (1:1)", + "scale_stretch": "Nyújtsa ki a kitöltéshez", + "actions": "Actions", + "lock_screen": "Képernyőzár", + "restart_remote": "Indítsa újra a Távoli eszközt", + "refresh_screen": "Képernyő frissítése", + "clipboard_paste": "Beillesztés a vágólapról", + "block_input": "Block Input", + "display_settings": "Megjelenítési beállítások", + "image_quality": "Képminőség", + "quality_best": "Legjobb (teljes minőség, 60 képkocka/mp)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Távoli kurzor megjelen��tése", + "lock_after_session": "Lezárás a munkamenet után", + "privacy_mode": "Adatvédelmi mód", + "disable_clipboard": "Vágólap letiltása", + "chat": "Chat", + "chat_placeholder": "Írjon be egy üzenetet...", + "record": "Felvételi képernyő", + "view_only": "Csak megtekintés", + "pin_toolbar": "Eszköztár rögzítése", + "monitors": "Monitors", + "select_monitor": "Válassza a Monitor lehetőséget", + "quality_speed": "Sebesség (alacsony minőség, 60 képkocka/mp)", + "quality_quality": "Minőség (legjobb, 30 képkocka/mp)", + "recording_started": "A felvétel elkezdődött", + "recording_stopped": "A felvétel leállt", + "download_recording": "Letöltés Felvétel", + "e2e_encrypted": "Végponttól végpontig titkosított", + "e2e_key_exchange": "Biztonságos csatorna létrehozása...", + "confirm_restart": "Biztosan újra akarja indítani a távoli eszközt?", + "webcodecs_not_supported": "Az Ön böngészője nem támogatja a WebCodecs API fájlt. Kérjük, használja a Chrome 94+ vagy az Edge 94+.", + "webcodecs_insecure_context": "A WebCodecs nem érhető el a HTTP felett. A videó szoftveres tartalékot használ. A legjobb teljesítmény érdekében használja a HTTPS-t.", + "webcodecs_fallback_active": "Szoftveres videó dekóder aktív (korlátozott teljesítmény)", + "click_to_start": "Kattintson a Start gombra", + "autoplay_blocked": "A böngésző felhasználói beavatkozást igényel a video- és hanglejátszás elindításához.", + "start_playback": "Indítsa el a Lejátszást", + "new_connection": "Új kapcsolat", + "device_id_placeholder": "Írja be az eszközazonosítót", + "http_warning": "HTTP mód: H.264 szoftveres dekódolásra korlátozva (~15 FPS). Használja a HTTPS-t a teljes teljesítmény érdekében (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Fájlátvitel", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Ez a mappa üres", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Az átvitel nem sikerült", + "file_show_hidden": "Rejtett fájlok megjelenítése", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Adja meg a mappa nevét:", + "file_parent": "Szülőmappa", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Írja be az új nevet:", + "file_delete_confirm": "Biztosan törli ezt az elemet?", + "file_cancelled": "Az átvitel megszakítva", + "2fa_required": "2FA ellenőrzés szükséges", + "2fa_hint": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", + "2fa_invalid": "Adjon meg egy érvényes 6 számjegyű kódot", + "verify": "Verify", + "use_cdap_fallback": "Használja a CDAP megjelenítőt", + "cdap_fallback_hint": "Nyissa meg a könnyű JPEG-lekérdezési nézetot, amely bd-signal/CDAP-ot használ a RustDesk-relé helyett. Hasznos, ha a peer offline a reléen, de elérhető az agent-kezelési csatornán keresztül.", + "clipboard_empty": "A vágólap üres", + "clipboard_denied": "A vágólaphoz való hozzáférés megtagadva. HTTPS szükséges, vagy engedélyt nem adtak meg.", + "file_loading": "Betöltés...", + "file_timeout": "A távoli eszköz nem válaszolt. Előfordulhat, hogy a fájlátvitel nem támogatott vagy le van tiltva a távoli gépen.", + "codec": "Video Codec", + "codec_auto": "Automatikus (ajánlott)" + }, + "branding": { + "identity_title": "Márkaidentitás", + "identity_desc": "Testreszabhatja a konzolon megjelenő alkalmazás nevét és leírását", + "app_name": "Alkalmazás neve", + "app_description": "Alkalmazás leírása", + "logo_title": "Logó", + "logo_desc": "Válassza ki, hogy logója hogyan jelenjen meg az oldalsávon és a bejelentkezési oldalon", + "logo_type_icon": "Anyag ikon", + "logo_type_svg": "SVG kód", + "logo_type_image": "Kép URL", + "logo_icon_name": "Ikon neve", + "logo_icon_hint": "Adja meg az anyagikonok nevét (pl. dns, felhő, biztonság). Lásd: fonts.google.com/icons", + "logo_svg_code": "SVG kód", + "logo_svg_hint": "Illessze be ide az SVG-jelölést. Támogatja a teljes elemeket elérési utakkal és stílusokkal.", + "logo_image_upload": "Kép feltöltése", + "logo_image_choose": "Válasszon képfájlt", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Érvénytelen fájltípus. Használjon PNG, JPG, GIF, WebP vagy SVG formátumot.", + "preview": "Előnézet", + "colors_title": "Színséma", + "colors_desc": "Szabja testre a színpalettát. Hagyja üresen az alapértelmezett értékek használatához.", + "colors_backgrounds": "Háttérszínek", + "colors_text": "Szöveg", + "colors_accents": "Kiemelt színek", + "colors_borders": "Szegélyek", + "import_export_title": "Importálás és exportálás", + "import_export_desc": "Mentse el a témát JSON fájlként, vagy importáljon egyet egy másik példányból", + "export_theme": "Export téma", + "import_theme": "Téma importálása", + "reset_defaults": "Állítsa vissza az alapértelmezett értékeket", + "save_branding": "Mentse a márkaépítést", + "saved": "A márkajelzés sikeresen mentve. Újratöltés...", + "exported": "Téma exportálva", + "imported": "A téma sikeresen importálva. Újratöltés...", + "import_error": "Nem sikerült importálni a témát. Érvénytelen fájlformátum.", + "reset_confirm": "Biztosan vissza szeretné állítani a márkajelzést az alapértelmezett értékekre? Ezt nem lehet visszavonni.", + "reset_success": "A márkaépítés visszaállt az alapértelmezett értékekre. Újratöltés...", + "logo_type_text": "Szöveges logó", + "logo_text": "Logó szöveg", + "logo_text_hint": "A márka logójaként megjelenő elsődleges szöveg", + "logo_text_accent": "Kiegészítő szöveg", + "logo_text_accent_hint": "Másodlagos szöveg a logó alatt (pl. terméknév vagy szlogen)", + "logo_upload_success": "Az embléma sikeresen feltöltve.", + "typography_title": "Tipográfia", + "typography_desc": "Válasszon betűtípusokat a címsorokhoz és a törzsszöveghez. A betűtípusok letöltésre kerülnek a szerverre önkiszolgáló tárolás céljából.", + "font_heading": "Címsor betűtípus", + "font_heading_hint": "Címsorokhoz (H1–H6) és szöveges logóhoz használatos", + "font_body": "Szövegtörzs betűtípusa", + "font_body_hint": "Törzsszövegekhez és felhasználói felület elemeihez használatos", + "font_search_placeholder": "Betűtípusok keresése...", + "font_system_default": "Rendszer alapértelmezett", + "font_clear": "Törlés", + "font_cat_all": "Összes", + "font_downloaded_count": "a szerverre letöltött betűtípusok", + "powered_by": "Hajtóerő:", + "background_title": "Háttér és megjelenés", + "background_desc": "Állítson be konzolhátteret, színátmenetet vagy egyszínű hátteret.", + "bg_type_none": "Nincs", + "bg_type_color": "Egyszínű", + "bg_type_gradient": "Színátmenet", + "bg_type_image": "Kép", + "bg_color": "Háttérszín", + "bg_gradient": "CSS színátmenet", + "bg_gradient_hint": "Bármilyen érvényes CSS színátmenet, pl. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Háttérkép feltöltése", + "bg_image_choose": "Képfájl kiválasztása", + "bg_image_hint": "PNG, JPG, WebP vagy GIF. Max. 8 MB.", + "bg_image_url": "Kép elérési útja / URL", + "bg_size": "Kép méretezése", + "bg_size_cover": "Lefedés (képernyőkitöltés)", + "bg_size_contain": "Beillesztés (fit)", + "bg_size_auto": "Automatikus (eredeti)", + "bg_blur": "Háttér elmosás", + "bg_overlay": "Sötét fedőréteg", + "bg_overlay_hint": "Elsötétíti a hátteret a jobb olvashatóság érdekében.", + "bg_image_too_large": "A kép túl nagy. A maximális méret 8 MB.", + "bg_image_invalid_type": "Érvénytelen fájltípus. Használjon PNG, JPG, WebP vagy GIF fájlt.", + "bg_upload_success": "Háttérkép feltöltve.", + "login_title": "Bejelentkezési oldal", + "login_desc": "Testre szabhatja a bejelentkezési képernyő fejlécét, alcímét és hátterét.", + "login_heading": "Bejelentkezési fejléc", + "login_heading_placeholder": "Üdvözöljük újra", + "login_subheading": "Bejelentkezési alcím", + "login_subheading_placeholder": "Jelentkezzen be fiókjába", + "login_bg_inherit": "Ugyanaz, mint a konzol", + "agent_title": "Agent letöltési oldal", + "agent_desc": "Testre szabhatja a végfelhasználóknak megjelenő nyilvános agent letöltési portált.", + "agent_show_powered": "\"Powered by BetterDesk\" megjelenítése", + "agent_show_powered_hint": "A BetterDesk hivatkozás megjelenítése a letöltési portál láblécében.", + "footer_title": "Lábléc és szerzői jog", + "footer_desc": "Adjon hozzá egyéni láblécsort a bejelentkezési képernyőn és a konzol oldalsávjában.", + "footer_text": "Lábléc szöveg", + "footer_text_hint": "pl. szerzői jogi megjegyzés vagy cégnév.", + "show_powered": "\"BetterDesk\" hivatkozás megjelenítése", + "show_powered_hint": "A BetterDesk neve és verziója megjelenik a bejelentkezési láblécben és az oldalsávban.", + "custom_css_title": "Egyéni CSS", + "custom_css_desc": "Haladó: egyéni CSS befecskendezése a konzolba és a bejelentkezési oldalra.", + "custom_css_hint": "Körültekintően használja. Max. 20 000 karakter." + }, + "device_detail": { + "tab_overview": "Áttekintés", + "tab_tags": "Címkék és megjegyzések", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Csatlakozás", + "section_manage": "Menedzsment", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Ez az eszköz le van tiltva", + "no_reason": "Indoklás nélkül", + "tags": "Tags", + "no_tags": "Nincsenek címkék hozzárendelve ehhez az eszközh��z", + "tag_placeholder": "Adja meg a címke nevét...", + "add_tag": "Add", + "tag_exists": "Ez a címke már létezik", + "notes": "Notes", + "notes_placeholder": "Megjegyzések hozzáadása ehhez az eszközhöz...", + "danger_zone": "Danger Zone", + "action_connect_web": "Csatlakozás böngészőből", + "action_connect_web_desc": "Csatlakozás a böngésző távoli asztalán keresztül", + "action_native_remote": "BetterDesk Távirányító", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Asztali kliens", + "action_connect_desktop_desc": "Nyissa meg az asztali kliens alkalmazásban", + "action_change_id_desc": "Módosítsa az eszköz regisztrációs azonosítóját", + "action_ban_desc": "Az eszköz csatlakozásának letiltása", + "action_unban_desc": "Engedélyezze, hogy az eszköz újra csatlakozzon", + "action_delete_desc": "Véglegesen távolítsa el ezt az eszközt", + "tab_hardware": "Hardware", + "tab_metrics": "Metrikák", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kódolási képességek", + "section_live_metrics": "Élő mérőszámok", + "section_current_usage": "Jelenlegi használat", + "section_usage_history": "Használati előzmények", + "os": "Operációs rendszer", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU frekvencia", + "total_memory": "Teljes memória", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Frissítve", + "device_groups": "Csoportok", + "no_sysinfo": "Nincs hardver információ", + "no_sysinfo_hint": "A rendszeradatok azután jelennek meg, hogy az eszköz elküldi a sysinfo jelentést", + "no_metrics": "Nem állnak rendelkezésre mérőszámok", + "no_metrics_hint": "A mutatók akkor jelennek meg, ha az eszköz szívverésjelentéseket küld", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Fájlok", + "agent_lazy_hint": "Kattintson erre a lapra az élő adatok betöltéséhez az ügynöktől", + "agent_offline": "Az ügynök offline állapotban van", + "agent_timeout": "Az ügynök nem válaszolt időben", + "agent_error": "Nem sikerült betölteni az adatokat az ügynöktől", + "service_name": "Name", + "service_display": "Megjelenítési név", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "A felügyelt eszközök hardver- és szoftverleltárát", + "device_id": "Eszközazonosító", + "hostname": "Hostname", + "os": "Operációs rendszer", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Teljes memória", + "memory_used": "Used Memory", + "memory_available": "Rendelkezésre álló memória", + "memory_usage": "Memóriahasználat", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Hálózati interfészek", + "software": "Software", + "software_count": "Telepített szoftver", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fizikai magok", + "logical_cores": "Logikai magok", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Elérhető", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-címek", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Gyűjtő fut", + "collector_stopped": "Gyűjtő leállt", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Összegyűjtve", + "no_data": "Még nem állnak rendelkezésre leltári adatok. Kattintson a „Gyűjtés most” gombra a rendszerinformációk összegyűjtéséhez.", + "no_devices": "Nem található készletadatokkal rendelkező eszköz", + "detail_title": "Készülékkészlet részletei", + "telemetry": "Telemetry", + "view_detail": "Részletek megtekintése", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Támogatja a jegyeket és a problémakövetést", + "create": "New Ticket", + "edit": "Jegy szerkesztése", + "delete": "Jegy törlése", + "detail": "Jegyrészlet", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Hozzárendelve", + "created_by": "Készítette", + "device": "Eszköz", + "sla_due": "SLA Due", + "created_at": "Létrehozva", + "updated_at": "Frissítve", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Nyissa meg", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Írj megjegyzést...", + "internal_note": "Belső megjegyzés (a végfelhasználók számára nem látható)", + "attachments": "Attachments", + "upload_attachment": "Melléklet feltöltése", + "download": "Download", + "connect_device": "Csatlakozás az eszközhöz", + "no_tickets": "Nem található jegy", + "no_comments": "Még nincsenek megjegyzések", + "no_attachments": "Nincsenek mellékletek", + "title_required": "A cím kötelező", + "delete_confirm": "Biztosan törölni szeretné a #{id} jegyet?", + "delete_success": "A jegy sikeresen törölve", + "created_success": "A jegy sikeresen létrehozva", + "updated_success": "A jegy sikeresen frissítve", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Jegyek keresése...", + "assign_to_me": "Rendelje hozzám", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Nyissa meg", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Tevékenységfigyelés", + "subtitle": "Alkalmazáshasználat és tétlen követés", + "device": "Eszköz", + "hostname": "Hostname", + "sessions": "Munkamenetek", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Legnépszerűbb alkalmazások", + "app_name": "Application", + "window_title": "Ablak címe", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Munkamenetek száma", + "total_active": "Teljesen aktív", + "total_idle": "Total Idle", + "detail_count": "Részlet Feljegyzések", + "no_data": "Nem állnak rendelkezésre tevékenységi adatok", + "no_sessions": "Nincs ülés", + "filter_from": "-tól", + "filter_to": "Eddig", + "filter_apply": "Szűrő alkalmazása", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Eszközök keresése...", + "date_range": "Date Range", + "device_id": "Eszközazonosító", + "session_start": "Munkamenet kezdete", + "session_end": "Munkamenet vége", + "user": "User", + "no_activity": "Nincs rögzített tevékenység", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Nincsenek alkalmazások" + }, + "automation": { + "title": "Automatizálás és riasztások", + "subtitle": "Riasztási szabályok, távoli parancsok és SMTP-konfiguráció", + "rules": "Alert Rules", + "rules_subtitle": "Határozza meg az értesítéseket kiváltó feltételeket", + "alerts": "Riasztási előzmények", + "alerts_subtitle": "A kiváltott riasztások megtekintése és nyugtázása", + "commands": "Távoli parancsok", + "commands_subtitle": "Parancsok küldése távoli eszközökre", + "smtp": "SMTP konfiguráció", + "smtp_subtitle": "E-mail értesítési beállítások", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Állapot típusa", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Céleszköz", + "scope_all": "Minden eszköz", + "cooldown": "Lehűlés (másodperc)", + "notify_emails": "Értesítési e-mailek", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "create_rule": "Szabály létrehozása", + "edit_rule": "Szabály szerkesztése", + "delete_rule": "Szabály törlése", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Kiváltva:", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Nagyobb mint", + "op_gte": "Nagyobb vagy egyenlő", + "op_lt": "Less than", + "op_lte": "Kisebb vagy egyenlő", + "op_eq": "Egyenlő", + "op_neq": "Nem egyenlő", + "type_cpu_usage": "CPU használat (%)", + "type_memory_usage": "Memóriahasználat (%)", + "type_disk_usage": "Lemezhasználat (%)", + "type_offline_duration": "Offline időtartam (ok)", + "type_idle_duration": "Üresjárati időtartam (s)", + "type_custom": "Custom", + "command_type": "Parancs típusa", + "command_payload": "Parancs / Script", + "command_result": "Result", + "command_status": "Status", + "send_command": "Parancs küldése", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Sikertelen", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Felhasználónév", + "smtp_pass": "Jelszó", + "smtp_from": "Címből", + "smtp_test": "Kapcsolat tesztelése", + "smtp_save": "Konfiguráció mentése", + "smtp_test_success": "Sikeres csatlakozás", + "smtp_test_failed": "A csatlakozás sikertelen", + "no_rules": "Nincsenek konfigurálva riasztási szabályok", + "no_alerts": "Nincsenek riasztások", + "no_commands": "Nem küldtek parancsokat", + "id_payload_required": "Eszközazonosító és hasznos teher szükséges", + "no_commands_sent": "Még nem küldtek parancsot" + }, + "file_transfer": { + "title": "Fájlátvitel", + "transfers": "Transfers", + "new_transfer": "Új átvitel", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Fájl mérete", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Eszköz", + "initiated_by": "kezdeményezte", + "created_at": "Létrehozva:", + "cancel": "Mégse", + "cancel_confirm": "Biztosan megszakítja ezt az átvitelt?", + "download_file": "Fájl letöltése", + "browse_files": "Tallózás a fájlok között", + "select_file": "Válassza a Fájl lehetőséget", + "select_device": "Válassza az Eszköz lehetőséget", + "no_transfers": "Nincs fájlátvitel", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Sikertelen", + "status_cancelled": "Cancelled", + "bytes_transferred": "Átvitt bájtok", + "chunks": "Chunks", + "transfer_started": "Az átvitel megkezdődött", + "transfer_completed": "Az átvitel befejeződött", + "transfer_failed": "Az átvitel nem sikerült", + "transfer_cancelled": "Az átvitel megszakítva", + "max_file_size": "Maximális fájlméret: 4 GB", + "error_too_large": "A fájl túl nagy", + "error_no_device": "Nincs kiválasztott eszköz", + "error_no_file": "Nincs kiválasztva fájl" + }, + "network": { + "title": "Hálózatfigyelés", + "targets": "Monitoring Célok", + "add_target": "Add Target", + "edit_target": "Cél szerkesztése", + "delete_target": "Cél törlése", + "delete_confirm": "Biztosan törli ezt a célt?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Időtúllépés (ms)", + "interval": "Időköz (ms)", + "enabled": "Engedélyezve", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Ellenőrizze az előzményeket", + "stats": "Statistics", + "total_targets": "Összes cél", + "targets_up": "Targets Up", + "targets_down": "Célok le", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Hálózati eszközök", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Portellenőrzés", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Indítsa el a Monitort", + "monitor_stop": "Figyelés leállítása", + "monitor_running": "A monitor fut", + "monitor_stopped": "A monitor leállt", + "no_targets": "Nincsenek konfigurálva megfigyelési célok", + "no_history": "Nincs elérhető ellenőrzési előzmény", + "error_code": "Error", + "status_code": "HTTP állapotkód", + "search_targets": "Célok keresése...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Ellenőrizze az előzményeket", + "name_host_required": "A név és a gazdagép megadása kötelező", + "uptime": "Uptime", + "response_time": "Válaszidő", + "avg_response": "Átlagos válasz", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Válaszidő (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Az elmúlt 24 óra", + "last_7d": "Last 7 days", + "last_30d": "Az elmúlt 30 nap" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP-irányelvek", + "add_policy": "Szabályzat hozzáadása elemre", + "edit_policy": "Szabályzat szerkesztése", + "delete_policy": "Irányelv törlése", + "delete_confirm": "Biztosan törli ezt az irányelvet?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB Készülék", + "rule_type_file": "Fájlművelet", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Szolgáltató azonosítója (VID)", + "pid": "Termékazonosító (PID)", + "serial": "Sorozatszám", + "device_class": "Eszköz osztály", + "drive_type": "Drive Type", + "file_extensions": "Fájlkiterjesztések", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Fájl", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Nincsenek beállítva DLP-házirendek", + "no_events": "Nincsenek DLP-események rögzítve", + "stats": "Statistics", + "total_events": "Összes események", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Fájl események", + "device_id": "Eszközazonosító", + "policy_matched": "Szabályzat egyeztetve", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Összes szabályzat", + "active_policies": "Aktív házirendek", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Irányelvek", + "tab_events": "Events", + "search_policies": "Keresési irányelvek...", + "create_policy": "Házirend létrehozása", + "policy_type": "Házirend típusa", + "scope": "Scope", + "events_count": "Events", + "search_events": "Események keresése...", + "event_time": "Event Time", + "device": "Eszköz", + "policy": "Politika", + "detail": "Detail", + "scope_help": "Vesszővel elválasztva az eszközazonosítókat, vagy hagyja üresen mindenkinek", + "scope_all": "Minden eszköz", + "active": "Active", + "type_file_type": "Fájl típusa", + "type_clipboard": "Vágólap", + "type_screen_share": "Képernyőmegosztás", + "type_file_transfer": "Fájlátvitel", + "policy_desc": "Szabályzat leírása", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Jelentés generálása", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Eszköz összefoglaló", + "type_activity": "Tevékenység összefoglaló", + "type_security": "Biztonsági jelentés", + "type_tickets": "Jegyjelentés", + "type_network": "Hálózati jelentés", + "type_inventory": "Leltári jelentés", + "type_alerts": "Riasztási jelentés", + "saved": "Mentett jelentések", + "save_report": "Jelentés mentése", + "delete_report": "Jelentés törlése", + "delete_confirm": "Biztosan törli ezt a mentett jelentést?", + "no_saved": "Nincsenek mentett jelentések", + "report_title": "Title", + "created_by": "Készítette", + "created_at": "Létrehozva:", + "filters": "Filters", + "date_from": "-tól", + "date_to": "Záró dátum", + "device_filter": "Eszközazonosító", + "generated_at": "Létrehozva:", + "section": "Adatok szakasz", + "total_devices": "Összes eszköz", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Platform disztribúció", + "top_applications": "Legnépszerűbb alkalmazások", + "total_active": "Teljes aktív idő", + "total_idle": "Teljes üresjárati idő", + "dlp_stats": "DLP statisztika", + "banned_devices": "Tiltott eszközök", + "audit_logs": "Audit Logs", + "ticket_stats": "Jegystatisztika", + "category_distribution": "Kategória Elosztás", + "priority_distribution": "Elsőbbségi elosztás", + "targets_status": "Célok állapota", + "os_distribution": "OS terjesztése", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Legutóbbi figyelmeztetések", + "tab_generate": "Jelentés generálása", + "tab_saved": "Mentett jelentések", + "type_devices_desc": "Az összes eszköz, platform és állapot áttekintése", + "type_activity_desc": "Alkalmazáshasználat és üresjárati idő összefoglalója", + "type_security_desc": "Tiltási műveletek, DLP-események és auditnaplók", + "type_tickets_desc": "Jegystatisztikák és SLA teljesítmény", + "type_network_desc": "Hálózatfigyelési célok és üzemidő adatok", + "type_inventory_desc": "Hardver- és szoftverleltár összefoglalója", + "type_alerts_desc": "Riasztási szabályok és aktivált riasztási előzmények", + "report_name": "Report Name", + "format": "Format", + "save": "Jelentés mentése", + "preview": "Preview", + "download": "Download", + "delete_saved": "Jelentés törlése", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Bérlő szerkesztése", + "delete_tenant": "Bérlő törlése", + "delete_confirm": "Biztosan törli ezt a bérlőt? Minden eszköz- és felhasználói hozzárendelés el lesz távolítva.", + "name": "Name", + "slug": "Slug", + "contact_name": "Kapcsolattartó neve", + "contact_email": "Kapcsolatfelvételi e-mail", + "max_devices": "Maximális eszközszám", + "max_devices_hint": "0 = korlátlan", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Eszközök", + "users": "Users", + "assign_device": "Eszköz hozzárendelése", + "assign_devices": "Eszközök hozzárendelése", + "remove_device": "Eszköz eltávolítása", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Nincsenek konfigurálva bérlők", + "no_devices": "Nincsenek eszközök hozzárendelve ehhez a bérlőhöz", + "no_users": "Nincsenek felhasználók hozzárendelve ehhez a bérlőhöz", + "stats": "Bérlői statisztika", + "total_devices": "Összes eszköz", + "online_devices": "Online eszközök", + "total_users": "Total Users", + "created_at": "Létrehozva:", + "updated_at": "Frissítve:", + "slug_exists": "A bérlői csiga már létezik", + "total_tenants": "Összes bérlő", + "active_tenants": "Aktív bérlők", + "search": "Bérlők keresése...", + "create_tenant": "Bérlő létrehozása", + "detail": "Bérlő részlete", + "contact": "Contact", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Keresés eszközazonosító, gazdagépnév vagy IP-cím alapján...", + "no_registrations": "No registration requests", + "col_device_id": "Eszközazonosító", + "col_hostname": "Állomásnév", + "col_platform": "Platform", + "col_ip": "IP-cím", + "col_version": "Verzió", + "col_status": "Állapot", + "col_requested": "Kérés időpontja", + "col_actions": "Műveletek", + "status_pending": "Függőben", + "status_approved": "Jóváhagyva", + "status_rejected": "Elutasítva", + "approve_btn": "Jóváhagyás", + "approve_confirm": "Biztosan jóváhagyja ezt az eszközt? Megkapja a szerver hitelesítő adatait, és automatikusan csatlakozhat.", + "approved_success": "Az eszköz regisztrációja sikeresen jóváhagyva", + "reject_btn": "Elutasítás", + "reject_title": "Regisztráció elutasítása", + "reject_confirm": "Biztosan elutasítja ezt a regisztrációs kérelmet?", + "reject_reason": "Ok (nem kötelező)", + "reject_reason_placeholder": "Adja meg az elutasítás okát...", + "rejected_success": "Az eszköz regisztrációja elutasítva", + "delete_confirm": "Biztosan törli ezt a regisztrációs rekordot?", + "deleted_success": "Regisztrációs bejegyzés törölve", + "enrollment_title": "Eszköz regisztráció", + "enrollment_subtitle": "Függőben lévő regisztrációs kérelmek a BetterDesk asztali kliensektől", + "enrollment_empty": "Nincsenek függőben lévő beiratkozási kérelmek", + "enrollment_approve": "Jóváhagyás", + "enrollment_reject": "Elutasítás", + "enrollment_display_name": "Megjelenítési név", + "enrollment_display_name_placeholder": "Adja meg az eszköz nevét...", + "enrollment_sync_mode": "Szinkronizálási mód", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Az eszköz regisztrációja jóváhagyva", + "enrollment_rejected_success": "Az eszköz regisztrációja elutasítva", + "approve_title": "Eszköz jóváhagyása", + "field_name": "Eszköz neve", + "field_name_placeholder": "Adjon meg nevet ennek az eszköznek...", + "field_sync_mode": "Szinkronizálási mód", + "sync_standard": "Szabványos — kiegyensúlyozott szinkronizálás", + "sync_silent": "Csendes — minimális telemetria", + "sync_turbo": "Turbó — agresszív szinkronizálás", + "field_tags": "Címkék", + "field_tags_placeholder": "Vesszővel elválasztott címkék (pl. iroda, laptop)...", + "field_tags_existing": "Meglévő címkék", + "field_tag_add_placeholder": "Új címke hozzáadása...", + "field_tag_add_btn": "Hozzáadás", + "field_groups": "Eszközcsoportok", + "field_folder": "Mappa", + "field_folder_none": "Nincs mappa", + "reject_ban_option": "Az eszköz letiltása", + "reject_ban_hint": "Az eszköz blokkolva lesz és nem küldhet új regisztrációs kéréseket.", + "banner_open_mode": "A regisztráció nyitott — az új RustDesk kliensek operátor jóváhagyása nélkül regisztrálnak.", + "banner_locked_mode": "A regisztráció zárolt — csak token-kötött eszközök regisztrálhatnak.", + "enrollment_settings_link": "Regisztrációs beállítások" + }, + "backup": { + "title": "Biztonsági mentés", + "desc": "Töltse le a teljes biztonsági másolatot a konzol konfigurációjáról, a felhasználókról, a csoportokról és a beállításokról. A Go server társadatok akkor szerepelnek, ha a BetterDesk háttérrendszer aktív.", + "restore_title": "Visszaállítás", + "restore_desc": "A konzolkonfiguráció visszaállításához töltsön fel egy korábban letöltött biztonsági másolatot. Válassza ki a visszaállítani kívánt szakaszokat alább.", + "stat_users": "Felhasználók", + "stat_settings": "Beállítások elemre", + "stat_folders": "Mappák", + "stat_groups": "Csoportok", + "stat_strategies": "Stratégiák", + "stat_backend": "Backend", + "download": "Töltse le a biztonsági másolatot", + "creating": "Biztonsági másolat létrehozása...", + "download_success": "A biztonsági mentés sikeresen letöltve", + "upload": "Biztonsági másolat feltöltése", + "restore_confirm": "Biztosan vissza szeretné állítani ebből a biztonsági másolatból? A kiválasztott szakaszok felülíródnak.", + "restore_success": "A biztonsági mentés sikeresen visszaállítva. Egyes módosításokhoz az oldal újratöltése szükséges.", + "restored": "Visszaállítva", + "skipped": "Kihagyva", + "backup_date": "Biztonsági mentés dátuma", + "opt_settings": "Konzolbeállítások", + "opt_branding": "Márkaépítés / téma", + "opt_folders": "Eszközmappák", + "opt_groups": "Felhasználó- és eszközcsoportok", + "opt_addressbooks": "Címjegyzékek", + "opt_users": "Felhasználói fiókok", + "opt_users_warning": "Pusztító: MINDEN felhasználói fiókot biztonsági másolatra cserél. Lehet, hogy ki vagy jelentkezve.", + "no_file": "Nincs kiválasztva biztonsági mentési fájl", + "invalid_json": "Érvénytelen biztonsági mentési fájl: nem érvényes JSON", + "invalid_format": "Érvénytelen biztonsági mentési fájl: nem BetterDesk biztonsági másolat", + "stat_database": "Adatbázismotor", + "stat_keys": "Szerverkulcsok belefoglalva", + "stat_env": "Környezeti fájl", + "stat_uploads": "Márkaépítési fájlok", + "restart_required": "Egyes visszaállított összetevők (kulcsok / .env / Go-adatbázis) szolgáltatás-újraindítást igényelnek.", + "security_warning": "Ez a biztonsági mentés titkokat tartalmaz. Tárolja biztonságosan és soha ne ossza meg.", + "restore_warning": "Titkok vagy a Go szerver adatbázisának visszaállítása felülírja a szerver identitását és szolgáltatás-újraindítást igényel.", + "opt_database": "Adatbázis (összes tábla)", + "opt_database_hint": "Újraimportálja az összes konzol adatot. Nincs szükség újraindításra.", + "opt_uploads": "Márkaépítési fájlok", + "opt_uploads_hint": "Logók és feltöltött képek.", + "opt_secrets": "Szerverkulcsok és titkok", + "opt_secrets_warning": "Felülírja az Ed25519 szerver identitást, API-kulcsot és munkamenet-titkot. Szolgáltatás-újraindítás szükséges.", + "opt_env": "Környezeti fájl (.env)", + "opt_env_warning": "Felülírja a SESSION_SECRET-et, API-kulcsot, adatbázis DSN-t, portokat és TLS beállításokat. Szolgáltatás-újraindítás szükséges.", + "opt_godb": "Go szerver adatbázis", + "opt_godb_warning": "Felülírja a Go szerver SQLite adatbázisát (csak SQLite backend). Szolgáltatás-újraindítás szükséges." + }, + "cdap": { + "device_detail": "CDAP Készülék", + "loading": "Betöltés...", + "loading_widgets": "Eszközmodulok betöltése...", + "load_error": "Nem sikerült betölteni az eszköz adatait", + "connected": "Csatlakoztatva", + "disconnected": "Szétkapcsolt", + "device_offline_msg": "Az eszköz jelenleg offline állapotban van. Előfordulhat, hogy a modul értékei elavultak.", + "no_widgets": "Nem érhetők el widgetek", + "no_widgets_desc": "Ez az eszköz nem regisztrált egy CDAP jegyzéket widget-definíciókkal.", + "command_log": "Parancsnapló", + "clear_log": "Napló törlése", + "confirm_command": "Erősítse meg a parancsot", + "select_option": "Válassza ki", + "cdap_status": "CDAP-állapot", + "cdap_enabled": "CDAP engedélyezve", + "cdap_disabled": "CDAP letiltva", + "cdap_devices": "CDAP-eszközök", + "cdap_connections": "Aktív kapcsolatok", + "send_command": "Parancs küldése", + "command_sent": "A parancs sikeresen elküldve", + "command_failed": "Nem sikerült elküldeni a parancsot", + "devices_title": "CDAP Eszközök", + "devices_subtitle": "Egyéni eszközalkalmazási protokollon keresztül csatlakoztatott eszközök", + "stat_connected": "Csatlakoztatva", + "stat_port": "Port", + "search_devices": "Eszközök keresése...", + "no_devices": "Nincsenek csatlakoztatott eszközök", + "no_devices_desc": "Jelenleg nincs CDAP eszköz csatlakoztatva. Az eszközök itt jelennek meg, amint csatlakoznak az átjáróhoz.", + "gateway_disabled": "CDAP átjáró letiltva", + "gateway_disabled_desc": "Engedélyezze a CDAP átjárót a CDAP_ENABLED=true beállításával a kiszolgáló konfigurációjában.", + "gateway_active": "Aktív", + "toggle_enable": "CDAP engedélyezése", + "toggle_disable": "CDAP letiltása", + "enabled_restart": "CDAP engedélyezve. A változtatások alkalmazásához a szerver újraindítása szükséges.", + "disabled_restart": "CDAP letiltva. A változtatások alkalmazásához a szerver újraindítása szükséges.", + "widgets": "kütyü", + "type_all": "Összes", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-ügynök", + "type_network": "Hálózat", + "type_camera": "Kamera", + "type_custom": "Egyéni", + "active_alerts": "Aktív riasztások", + "alert_fired": "Riasztás aktiválva", + "alert_cleared": "Figyelmeztetés törölve", + "no_alerts": "Nincsenek aktív figyelmeztetések", + "connect_terminal": "Csatlakoztassa a terminált", + "table_search": "Keresés...", + "just_now": "Épp most", + "terminal_connecting": "Csatlakozás az eszközhöz...", + "terminal_disconnected": "Szétkapcsolt", + "terminal_error": "A terminál csatlakoztatása nem sikerült", + "linked_devices": "Kapcsolt eszközök", + "link_device": "Eszköz összekapcsolása", + "unlink_device": "Szétkapcsolás", + "no_linked_devices": "Nincsenek összekapcsolt eszközök", + "unlink_confirm": "Biztosan leválasztja ezt az eszközt?", + "link_prompt": "Adja meg a társazonosítót az eszközhöz való kapcsoláshoz:", + "connect_desktop": "Csatlakoztassa az asztalt", + "connect_video": "Csatlakozás a Streamhez", + "connect_files": "Tallózás a fájlok között", + "connect_audio": "Audio csatlakoztatása", + "upload_file": "Feltöltés", + "desktop_connecting": "Csatlakozás...", + "video_connecting": "Csatlakozás...", + "files_connecting": "Csatlakozás...", + "audio_connecting": "Csatlakozás...", + "audio_streaming": "Streaming", + "clipboard_in": "Vágólap érkezett", + "clipboard_out": "Vágólap elküldve", + "monitor_select": "Válassza a Monitor lehetőséget", + "keyframe_request": "Kulcskeret kérése", + "quality_auto": "Automatikus minőség" + }, + "desktop": { + "switch_mode": "Asztali mód", + "console_mode": "Konzol mód", + "loading": "Betöltés...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Bezárás", + "widgets_mode": "Widgetek", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Widget hozzáadása", + "remove_widget": "Widget eltávolítása", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurálás", + "search_widgets": "Modulok keresése...", + "cat_monitoring": "Monitoring", + "cat_devices": "Eszközök", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Jegyzeteket írj ide...", + "search_placeholder": "Eszközök, oldalak, beállítások keresése...", + "search_pages": "Pages", + "search_devices": "Eszközök", + "search_no_results": "No results", + "exit_desktop": "Lépjen ki az asztali módból", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Eszköz állapota", + "widget_server_health": "Szerver Info", + "widget_system_stats": "Készülékmérők", + "widget_device_list": "Eszközlista", + "widget_quick_actions": "Gyors műveletek", + "widget_recent_activity": "Legutóbbi tevékenység", + "widget_notes": "Notes", + "widget_network_monitor": "Hálózati monitor", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP Eszközök", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Eszközrács", + "widget_multi_gauge": "Szerver mérők", + "widget_weekly_chart": "Heti tevékenység", + "widget_quick_controls": "Gyors vezérlők", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Csatlakozási statisztika", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Felhasználói munkamenetek", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Nincsenek eszközök", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Nyissa meg", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Állítsa be a URL-t a konfigurációban", + "label_server_uptime": "Szerver üzemidő", + "label_merged_info": "Beolvasztva a Szerverinformáció widgetbe", + "label_with_notes": "Jegyzetekkel", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Összes eszköz", + "label_throughput": "Throughput", + "label_active_relays": "Aktív relék", + "label_total_relayed": "Összesen közvetített", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Eszközök szűrése...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Nincsenek CDAP eszközök", + "action_add_widget": "Widget hozzáadása", + "label_merged_server_info": "Beolvasztva a Szerverinformáció widgetbe", + "wp_images": "Images", + "wp_colors": "Szilárd színek", + "wp_custom_color": "Egyedi szín", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "A háttérképek nincsenek telepítve erre a szerverre.", + "wp_download_hint": "A háttérkép kiválasztásához helyezze el a PNG képeket a nyilvános/háttérképek/ könyvtárba.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Folyamatfigyelő", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Adatbázis statisztika", + "widget_docker_containers": "Docker Konténerek", + "widget_shell_command": "Parancssori utasítás", + "widget_device_map": "Készüléktérkép", + "widget_remote_connect": "Távoli csatlakozás", + "label_no_online": "Nincsenek online eszközök", + "label_no_events": "Ma nincs esemény", + "label_event_title": "Esemény címe:", + "label_no_data": "Nincs adat", + "label_download_speed": "Letöltési sebesség", + "label_latency": "Latency", + "label_server": "Szerver", + "label_run_test": "Run Test", + "label_testing": "Tesztelés...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Nincsenek konténerek", + "label_docker_unavailable": "Docker nem elérhető", + "label_no_command": "Nincs parancs konfigurálva", + "label_no_output": "Még nincs kimenet", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Előbeállítás mentése", + "label_load_preset": "Load Preset", + "label_preset_name": "Előre beállított név:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automatikus rendezés", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 oszlop (egyenlő)", + "label_2col_wide": "2 oszlop (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget csoport", + "ungroup_widgets": "A widgetek csoportosítása", + "group_widgets": "Csoportosítsa a kiválasztott widgeteket", + "snap_layouts": "Illesztési elrendezések", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Pattintsa fel balra", + "snap_top_right": "Pattintsa fel jobbra", + "snap_bottom_left": "Kattints alul-balra", + "snap_bottom_right": "Pattintsa alul-jobbra", + "aero_shake": "Rázza meg a többiek minimalizálása érdekében", + "zone_resize": "Húzza a szegélyt a zónák átméretezéséhez", + "zone_borders": "Húzható zónahatárok", + "app_drawer": "Applications", + "search_apps": "Alkalmazások keresése...", + "edit_shortcuts": "Parancsikonok szerkesztése", + "widgets": "Widgetek", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Kattintson bárhová, vagy nyomjon meg egy billentyűt a bejelentkezéshez", + "username_placeholder": "Felhasználónév", + "password_placeholder": "Jelszó", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Kéttényezős hitelesítés", + "totp_subtitle": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", + "back_to_login": "Vissza a bejelentkezéshez", + "fill_all_fields": "Kérjük, töltse ki az összes mezőt", + "invalid_credentials": "Érvénytelen felhasználónév vagy jelszó", + "invalid_code": "Érvénytelen ellenőrző kód", + "enter_6_digits": "Írja be mind a 6 számjegyet", + "network_error": "Network error — check your connection", + "session_expired": "A munkamenet lejárt. Kérjük, jelentkezzen be újra." + }, + "tokens": { + "title": "Eszköztokenek", + "subtitle": "Az automatikus eszközkiépítéshez szükséges regisztrációs tokenek kezelése", + "enrollment_mode": "Jelentkezési mód", + "mode_open": "Nyissa meg", + "mode_open_desc": "Bármely eszköz regisztrálhat token nélkül", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Összes token", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Tokenek keresése...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Tömeges generálás", + "create": "Token létrehozása", + "edit": "Token szerkesztése", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Létrehozva", + "actions": "Actions", + "name_placeholder": "pl. Irodai PC köteg", + "max_uses": "Max Uses", + "max_uses_hint": "0 = korlátlan", + "expires_in": "Expires In", + "no_expiration": "Nincs lejárat", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Opcionális megjegyzés erről a tokenről...", + "count": "Count", + "count_range": "A létrehozandó tokenek száma (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token létrehozva", + "tokens_generated": "Tokenek generálva", + "copy_warning": "Másolja ki a tokent most. Nem jelenik meg újra.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Biztosan visszavonja ezt a tokent? A már regisztrált eszközöket ez nem érinti.", + "revoked_success": "A token sikeresen visszavonva", + "no_tokens": "Nem található token", + "expired": "Expired", + "never": "Never", + "save": "Mentés", + "cancel": "Mégse", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Következő", + "prev": "Previous", + "skip": "Skip", + "finish": "Befejezés", + "close": "Bezárás", + "step_of": "{current}/{total}", + "console_sidebar_title": "Navigációs oldalsáv", + "console_sidebar_text": "Az összes modul elérése innen. Kattintson bármelyik ikonra az adott szakaszhoz való navigáláshoz. Az oldalsáv a képernyő méretéhez igazodik.", + "console_expand_title": "Bontsa ki az Oldalsávot", + "console_expand_text": "Kattintson ide az oldalsáv kibontásához, és megtekintheti az összes navigációs elem teljes címkéjét. Kattintson újra az összecsukáshoz.", + "console_search_title": "Gyors keresés", + "console_search_text": "Gyorsan kereshet eszközöket, beállításokat vagy műveleteket. Nyomja meg a Ctrl+K billentyűkombinációt a billentyűparancshoz.", + "console_dashboard_title": "Irányítópult", + "console_dashboard_text": "A központi hub, amely a szerver állapotát, az online eszközöket és a gyors műveleteket mutatja. Tartsa szemmel a fontos mutatókat egy pillantással.", + "console_devices_title": "Eszközkezelés", + "console_devices_text": "Az összes csatlakoztatott eszköz megtekintése, keresése és kezelése. Szűrés állapot szerint, címkék hozzárendelése és egyedi eszközbeállítások konfigurálása.", + "console_settings_title": "Beállítások elemre", + "console_settings_text": "Konfigurálja a kiszolgáló viselkedését, a biztonsági beállításokat, a márkaépítést és a felhasználókezelést. A BetterDesk testreszabása az Ön igényei szerint.", + "console_desktop_title": "Asztali mód", + "console_desktop_text": "Váltson asztali módba egy widgetekkel rendelkező ablakos munkaterülethez. Tökéletes többfeladatos munkavégzéshez és irányítópultok figyeléséhez.", + "console_complete_title": "Készen állsz!", + "console_complete_text": "Fedezze fel az oldalsáv kategóriáit az összes funkció felfedezéséhez. Az útmutató újraindításához bármikor kattintson a Súgó ikonra.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "A felső sáv mutatja az órát, a gyorsvezérlőket és az alkalmazásfiókhoz való hozzáférést. Kattintson a rács ikonra az összes alkalmazás tallózásához.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Nyissa meg az alkalmazásfiókot a kereséshez és a konzolfunkciók lebegő ablakként történő elindításához. Az alkalmazások kategóriák szerint vannak rendezve.", + "desktop_widgets_title": "Widget-műszerfal", + "desktop_widgets_text": "Az Ön személyre szabható munkaterülete. A widgetek élő információkat jelenítenek meg, és gyors hozzáférést biztosítanak a funkciókhoz. Húzza az átrendezéshez.", + "desktop_add_widget_title": "Widgetek hozzáadása", + "desktop_add_widget_text": "Kattintson ide az elérhető widgetek böngészéséhez. Válasszon a figyelőképernyők, eszközlisták, jegyzetek és egyebek közül.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Itt jelennek meg a megnyitott alkalmazások. Kattintson az ablakok fókuszálásához vagy kicsinyítéséhez. Mutasson az ikonokra az alkalmazáscímkék megtekintéséhez.", + "desktop_snap_title": "Illesztési elrendezések", + "desktop_snap_text": "Húzza az ablakokat a képernyő széleihez, hogy a helyükre illessze őket, vagy mutasson a nagyítás gombra az elrendezési beállításokhoz. Próbáld ki az Aero Shake-et!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Az alkalmazások húzható, átméretezhető ablakokban nyílnak meg. Minimalizálás, maximalizálás vagy bezárás a címsorból. Windows réteg a widgetek felett.", + "desktop_search_title": "Gyors keresés", + "desktop_search_text": "Keresés eszközök, oldalak és beállítások között. A keresés azonnali megnyitásához bárhol nyomja meg a Ctrl+K billentyűkombinációt.", + "desktop_complete_title": "Asztali mód készen áll!", + "desktop_complete_text": "Próbálja meg megnyitni az alkalmazásokat a fiókból, és az ablakokat egymás mellé rendezni. Használja a widgetek előbeállításait a gyors irányítópult-elrendezésekhez.", + "devices_folders_title": "Eszköz mappái", + "devices_folders_text": "Rendezze az eszközöket mappákba. Kattintson egy mappára a lista szűréséhez. Kattintson a jobb gombbal az átnevezéshez vagy törléshez.", + "devices_search_title": "Keresés és szűrő", + "devices_search_text": "Keresés azonosító, gazdagépnév vagy platform alapján. Az állapotjelző tabletták segítségével csak online, offline vagy minden eszközt jeleníthet meg.", + "devices_table_title": "Eszközlista", + "devices_table_text": "A részletekért kattintson bármelyik eszközsorra. Használja a jobb oldali kebab menüt gyors műveletekhez, például csatlakozáshoz, címkék szerkesztéséhez vagy törléséhez.", + "devices_complete_title": "Készülék az eszközkezelésre!", + "devices_complete_text": "Húzza az eszközöket a mappák között a rendszerezéshez. Kattintson duplán egy eszközre a részletes panel megnyitásához.", + "settings_tabs_title": "Beállítások Kategóriák", + "settings_tabs_text": "Navigáljon az Általános, Biztonság, Megjelenés és egyéb konfigurációs részek között.", + "settings_content_title": "Konfiguráció", + "settings_content_text": "Minden szakasz speciális szerver- és konzolbeállításokat tartalmaz. A módosítások mentése a Mentés gombra kattintva történik.", + "settings_complete_title": "Beállítások áttekintése", + "settings_complete_text": "Ellenőrizze a 2FA, API kulcsok és a felhasználókezelés biztonsági beállításait. Látogasson el a Megjelenés oldalra a konzol megjelenésének testreszabásához.", + "help": "Súgó és oktatóanyagok", + "tour_console": "Konzoltúra", + "tour_desktop": "Asztali mód bemutatója", + "tour_devices": "Eszközök túra", + "tour_settings": "Beállítások túra", + "reset_all": "Állítsa vissza az összes oktatóanyagot", + "tour_remote": "Távoli munkamenet túra", + "tour_organization": "Szervezet beállítása", + "tour_cdap": "CDAP Áttekintés", + "tour_chat": "A csevegés alapjai", + "remote_toolbar_title": "Távoli eszköztár", + "remote_toolbar_text": "Az eszköztárról elérheti a kijelzővezérlőket, a vágólap szinkronizálását, a speciális billentyűket és a minőségi beállításokat. A teljes képernyő váltása az F11 billentyűvel.", + "remote_canvas_title": "Távoli kijelző", + "remote_canvas_text": "Ez a távoli képernyő. Kattintson a belsejébe a távoli eszköz vezérlésének megkezdéséhez. Az egér és a billentyűzet bevitele automatikusan továbbításra kerül.", + "remote_clipboard_title": "Vágólap szinkronizálás", + "remote_clipboard_text": "Szöveg másolása és beillesztése a számítógép és a távoli eszköz között. Használja a Ctrl+C / Ctrl+V billentyűkombinációt a szokásos módon, miközben a távoli kijelzőre fókuszál.", + "remote_complete_title": "Távoli munkamenet készen áll!", + "remote_complete_text": "Használja az eszköztár gombjait a speciális billentyűkhöz (Ctrl+Alt+Del, PrintScreen) és a monitorváltáshoz. Nyomja meg az Escape billentyűt, vagy kattintson a Leválasztás gombra a munkamenet befejezéséhez.", + "org_overview_title": "Szervezetek", + "org_overview_text": "A szervezetek lehetővé teszik a felhasználók, eszközök és házirendek csoportosítását. Minden szervezetnek saját rendszergazdája, operátorai és beállításai vannak.", + "org_create_title": "Szervezet létrehozása", + "org_create_text": "Kattintson ide új szervezet létrehozásához. Adjon meg egy nevet, csigát és opcionális leírást. Ön lesz az új szervezet tulajdonosa.", + "org_members_title": "Tagok kezelése", + "org_members_text": "Hívjon meg felhasználókat e-mailben, rendeljen hozzá szerepeket (rendszergazda, kezelő, felhasznál��), és kezelje a hozzáférést. A tagok láthatják a szervezetükhöz rendelt eszközöket.", + "org_devices_title": "Eszközök hozzárendelése", + "org_devices_text": "Adjon hozzá eszközöket a szervezethez. Az itt hozzárendelt eszközök öröklik a szervezet irányelveit, és láthatók lesznek a tagjai számára.", + "org_policies_title": "Szervezeti szabályzatok", + "org_policies_text": "Állítson be biztonsági házirendeket, például jelszókövetelményeket, munkamenet-időtúllépéseket, 2FA betartatást és eszközregisztrációs szabályokat a szervezet számára.", + "org_complete_title": "A szervezet beállítása kész!", + "org_complete_text": "Hívja meg csapatát, és rendeljen hozzá eszközöket a szervezeti szintű felügyelet használatához. Az irányelvek minden tagra automatikusan vonatkoznak.", + "cdap_devices_title": "CDAP-eszközök", + "cdap_devices_text": "Tekintse meg az összes csatlakoztatott CDAP-eszközt — IoT-érzékelők, PLC-k, hidak és egyéni ügynökök. A zöld jelzők az élő kapcsolatokat mutatják.", + "cdap_widgets_title": "Widget irányítópult", + "cdap_widgets_text": "A widgetek valós idejű adatokat jelenítenek meg az eszközökről. Mérők, kapcsolók, LED-ek, diagramok — minden widgettípus más adatot jelenít meg.", + "cdap_commands_title": "Parancsok küldése", + "cdap_commands_text": "Lépjen kapcsolatba az eszközökkel parancsok küldésével. A parancsnapló tárolja az előzményeket.", + "cdap_terminal_title": "Eszközterminal", + "cdap_terminal_text": "Nyisson terminálmunkamenetet CDAP-ügynökökhöz haladó diagnosztikához vagy manuális konfiguráláshoz.", + "cdap_complete_title": "CDAP áttekintés kész!", + "cdap_complete_text": "Fedezze fel az eszközwidgeteket, küldjön parancsokat, és használja a terminált vagy a fájlböngészőt a mélyebb kezeléshez.", + "chat_contacts_title": "Kapcsolatok és csoportok", + "chat_contacts_text": "Nézze meg névjegyeit és csevegőcsoportjait. A beszélgetés megnyitásához kattintson bármelyik névjegyre. A zöld pontok az online felhasználókat jelzik.", + "chat_send_title": "Üzenetek küldése", + "chat_send_text": "Írja be az üzenetet, és nyomja meg az Enter billentyűt a küldéshez. Az üzenetek végponttól végpontig titkosítva vannak, ha mindkét fél támogatja az E2E-t.", + "chat_file_title": "Fájlok megosztása", + "chat_file_text": "A fájlok megosztásához kattintson a melléklet ikonra. A fájlok titkosítottak, és legfeljebb 50 MB méretűek lehetnek.", + "chat_complete_title": "Chat kész!", + "chat_complete_text": "Csevegés az üzemeltetőkkel és a végfelhasználókkal valós időben. Hozzon létre csoportokat a csapatkommunikációhoz. Minden üzenet támogatja az olvasási visszaigazolást.", + "disable_tutorials": "Oktatóanyagok letiltása", + "enable_tutorials": "Oktatóanyagok engedélyezése" + }, + "help_request": { + "title": "Segítségkérések", + "subtitle": "Kezelje az asztali kliensektől érkező segítségkéréseket", + "new_request": "Új segítségkérés", + "device": "Eszköz", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Nincsenek segítségkérések", + "notification": "Segítségkérés érkezett innen", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Szervezetek", + "create": "Szervezet létrehozása", + "edit": "Szervezet szerkesztése", + "detail": "Szervezet részletei", + "name": "Name", + "slug": "Slug (URL-biztos)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Eszközök", + "invitations": "Invitations", + "settings": "Beállítások elemre", + "add_user": "Add User", + "assign_device": "Eszköz hozzárendelése", + "create_invitation": "Meghívó létrehozása", + "delete_confirm": "Törli ezt a szervezetet? Ezzel eltávolítja az összes társított felhasználót, eszközt és beállítást.", + "no_orgs": "Még nincsenek szervezetek", + "no_orgs_hint": "Hozza létre első szervezetét az eszközök és felhasználók kezeléséhez.", + "connection_policy": "Csatlakozási szabályzat", + "allow_file_transfer": "Fájlátvitel engedélyezése", + "allow_clipboard": "Vágólap engedélyezése", + "max_session_duration": "Munkamenet maximális időtartama (perc)", + "role_owner": "Owner", + "role_admin": "Adminisztrátor", + "role_operator": "Operator", + "role_user": "Tag", + "username": "Felhasználónév", + "password": "Jelszó", + "display_name": "Megjelenítési név", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Eszközazonosító", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Hozzárendelt felhasználó", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Nincsenek felhasználók ebben a szervezetben.", + "no_devices": "Nincsenek eszközök hozzárendelve ehhez a szervezethez.", + "no_invitations": "Nincsenek meghívók.", + "user_added": "User added", + "user_removed": "Felhasználó eltávolítva", + "user_updated": "Felhasználói szerepkör frissítve", + "device_assigned": "Eszköz hozzárendelve", + "device_unassigned": "Az eszköz hozzárendelése visszavonva", + "invitation_created": "Meghívó létrehozva", + "settings_saved": "Beállítások mentve", + "org_deleted": "Szervezet törölve", + "confirm_remove_user": "Eltávolítja ezt a felhasználót a szervezetből?", + "confirm_unassign_device": "Törli az eszköz hozzárendelését a szervezethez?", + "confirm_delete_org": "Törli ezt a szervezetet és az összes kapcsolódó adatot?", + "edit_role": "Szerep szerkesztése", + "raw_settings": "Nyers beállítások", + "key": "Key", + "value": "Value", + "save": "Beállítások mentése", + "policy_unattended": "Felügyelet nélkül (azonnali)", + "policy_attended": "Részt vett (visszaigazolással)", + "policy_ask": "Always ask", + "expires_hours": "Lejárat (óra)", + "loading_failed": "Nem sikerült betölteni a szervezeti adatokat", + "name_slug_required": "A név és a csiga megadása kötelező", + "org_created": "A szervezet létrehozva", + "org_updated": "A szervezet frissítve", + "create_new_user": "Új létrehozása", + "add_existing_user": "Meglévő hozzáadása", + "none_available": "none", + "select_user": "Felhasználó kiválasztása", + "org_role": "Szervezeti szerep", + "link_user_hint": "A kiválasztott felhasználó a szerverfiók hitelesítő adataival lesz összekapcsolva ezzel a szervezettel.", + "no_available_users": "Az összes szerverfelhasználó már kapcsolódik ehhez a szervezethez.", + "user_linked": "Felhasználó a szervezethez kapcsolva" + }, + "chat": { + "e2e_enabled": "Végponttól végpontig titkosítva", + "e2e_establishing": "Biztonságos csatorna létrehozása...", + "e2e_established": "Biztonságos csatorna létrehozva", + "e2e_unsupported": "Ez a böngésző nem támogatja az E2E titkosítást", + "typing_indicator": "gépelés...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Fájl", + "file_too_large": "A fájl túl nagy (max. 50 MB)", + "file_encrypted": "Titkosított fájlátvitel", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "A biztonsági kulcsok elforgatva", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Csoportok", + "no_contacts": "Még nincsenek elérhetőségek", + "no_groups": "Még nincsenek csoportok", + "no_messages": "Még nincsenek üzenetek", + "no_results": "Nincs találat", + "select_conversation": "A csevegés megkezdéséhez válasszon egy beszélgetést", + "type_message": "Írjon be egy üzenetet...", + "send": "Küldés", + "attach_file": "Fájl csatolása", + "emoji": "Emoji", + "search_messages": "Üzenetek keresése", + "create_group": "Csoport létrehozása", + "group_name": "Csoport neve", + "group_members": "tagok", + "cancel": "Mégse", + "create": "Létrehozása", + "members": "tagjai", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Névjegyek és üzenetek keresése", + "select_conversation_hint": "Az üzenetek megtekintéséhez válasszon egy beszélgetést", + "info": "Info", + "group_name_placeholder": "Írja be a csoport nevét" + }, + "toast": { + "device_connected": "Eszköz csatlakoztatva", + "device_disconnected": "Az eszköz leválasztva", + "session_started": "Elindult a távoli munkamenet", + "session_ended": "A távoli munkamenet véget ért", + "file_upload_complete": "A fájl feltöltése befejeződött", + "settings_saved": "Beállítások mentve", + "error_generic": "Hiba történt", + "connection_lost": "Megszakadt a kapcsolat", + "reconnecting": "Újracsatlakozás..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Adminisztrációs segédprogramok és diagnosztikai eszközök", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Küldés", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Írja be a szöveget...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Go-szerver napló", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Ellenőrizze a gazdagép elérhetőségét és késleltetését", + "tcp_title": "TCP Portellenőrzés", + "tcp_desc": "Tesztelje a TCP port csatlakozását", + "ssl_title": "SSL ellenőr", + "ssl_desc": "Ellenőrizze az SSL/TLS tanúsítvány részleteit", + "http_title": "HTTP állapotfelmérés", + "http_desc": "Ellenőrizze a HTTP végpont állapotát", + "dns_title": "DNS Lookup", + "dns_desc": "A gazdagépnév feloldása IP-címre", + "whois_title": "DNS Records", + "whois_desc": "A, AAAA, MX, TXT, NS rekordok lekérdezése", + "speed_title": "Speed Test", + "speed_desc": "Mérje meg a letöltési sávszélességet", + "run_speed_test": "Futtassa a sebességtesztet", + "wol_title": "Wake-on-LAN", + "wol_desc": "Varázscsomag küldése az eszköz felébresztéséhez", + "wol_sent": "Varázscsomag elküldve", + "hash_title": "Hash generátor", + "hash_desc": "Hozzon létre kriptográfiai kivonatokat", + "password_title": "Jelszógenerátor", + "password_desc": "Biztonságos véletlenszerű jelszó létrehozása", + "jwt_title": "JWT Decoder", + "jwt_desc": "Dekódolja és ellenőrizze a JSON webtokeneket", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 adatok kódolása vagy dekódolása", + "url_title": "URL Encoder", + "url_desc": "Kódolja vagy dekódolja a URL összetevőket", + "processes_title": "Folyamatlista", + "processes_desc": "A futó rendszerfolyamatok megtekintése", + "disk_title": "Disk Usage", + "disk_desc": "A lemezpartíció használatának megtekintése", + "db_title": "Adatbázis statisztika", + "db_desc": "Adatbázistábla statisztikáinak megtekintése", + "docker_title": "Docker Konténerek", + "docker_desc": "Futó Docker tárolók megtekintése", + "logs_title": "Log Viewer", + "logs_desc": "A legutóbbi naplókimenet megtekintése", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Érvényes tól", + "valid_to": "Érvényes", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Nincs adat", + "no_docker": "Nem található Docker konténer, vagy a Docker nem érhető el", + "no_logs": "Nem állnak rendelkezésre naplósorok" + }, + "policies": { + "title": "Szervezeti szabályzatok", + "subtitle": "Kezelje szervezetei biztonsági, kapcsolati és szolgáltatási szabályzatait", + "select_org": "Szervezet", + "select_org_placeholder": "Válasszon egy szervezetet...", + "select_org_first": "Válasszon ki egy szervezetet a házirend-napló megtekintéséhez.", + "configured": "Konfigurálva", + "connection_title": "Csatlakozási szabályzat", + "connection_desc": "A távoli munkamenetek létrehozásának szabályozása", + "connection_mode": "Csatlakozási mód", + "mode_attended": "Részt vett (felhasználói jóváhagyás szükséges)", + "mode_unattended": "Felügyelet nélkül (mindig engedélyezve)", + "mode_ask": "Mindig kérdezzen", + "max_session": "Munkamenet maximális időtartama (perc)", + "idle_lock": "Üresjárati zár időkorlátja (perc)", + "wallpaper_policy": "Háttérkép munkamenet közben", + "wallpaper_show": "Megjelenítés", + "wallpaper_hide_session": "Elrejtés munkamenet közben", + "wallpaper_hide_always": "Mindig elrejtés", + "features_title": "Funkciószabályzat", + "features_desc": "Bizonyos funkciók engedélyezése vagy letiltása az eszközökön", + "allow_file_transfer": "Fájlátvitel engedélyezése", + "allow_clipboard": "A vágólap szinkronizálásának engedélyezése", + "allow_audio": "Audio Streaming engedélyezése", + "allow_recording": "Munkamenet rögzítésének engedélyezése", + "security_title": "Biztonsági politika", + "security_desc": "A szervezeti eszközök biztonsági követelményeinek érvényesítése", + "require_2fa": "2FA szükséges a felügyelet nélküli hozzáféréshez", + "password_min_length": "Minimális jelszó hossza", + "password_require_special": "Különleges karakterek szükségesek", + "password_max_age": "Jelszó maximális életkora (nap, 0=soha)", + "allowed_operators": "Engedélyezett operátori szerepkörök (vesszővel elválasztva)", + "network_title": "Hálózati szabályzat", + "network_desc": "Vezérelje a közvetítő szervereket és a közvetlen kapcsolatokat", + "block_direct_p2p": "Közvetlen P2P blokkolása (force relay)", + "allowed_relays": "Engedélyezett közvetítő szerverek (soronként egy)", + "ip_allowlist": "IP engedélyezési lista (CIDR, soronként egy)", + "update_title": "Irányelv frissítése", + "update_desc": "Irányítsd az automatikus frissítéseket és frissítsd a csatornákat", + "auto_update": "Az automatikus frissítés engedélyezése", + "update_channel": "Csatorna frissítése", + "audit_title": "Szabályzati változások", + "audit_desc": "Legutóbbi irányelvváltozások története", + "no_audit": "Nem rögzítették az irányelvváltozásokat.", + "save_success": "A házirend sikeresen mentve", + "save_failed": "Nem sikerült menteni a házirendet", + "load_failed": "Nem sikerült betölteni a házirendeket", + "block_direct_p2p_hint": "Erre a szervezetre vonatkozik." + }, + "attestation": { + "title": "Eszköz tanúsítvány", + "subtitle": "Figyelje az eszköz azonosságának ellenőrzését és a hardver ujjlenyomatait", + "verified": "Verified", + "pending": "Pending", + "failed": "Sikertelen", + "device_list": "Eszköz igazolási rekordok", + "device_list_desc": "Hardveres ujjlenyomatok és személyazonosság-ellenőrzés állapota", + "col_device": "Eszközazonosító", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Nem találhatók tanúsítványok.", + "verify_success": "Az eszköz ellenőrzöttként megjelölve", + "verify_failed": "Nem sikerült ellenőrizni az eszközt", + "revoke_success": "Az eszköz tanúsítványa visszavonva", + "revoke_failed": "A tanúsítvány visszavonása nem sikerült" + }, + "fleet": { + "title": "Flottakezelés", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Munkafolyamat-építő", + "tab_compliance": "Compliance", + "res_title": "Erőforrás-leképezés", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Hálózati meghajtó", + "res_type_dns": "DNS szerver", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Erőforrás hozzáadása", + "res_name": "Erőforrás neve", + "res_type": "Type", + "res_address": "Cím / Elérési út", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Szervezet", + "res_scope_group": "Csoport", + "res_scope_device": "Eszköz", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Nem található forrás. Kattintson az \"Erőforrás hozzáadása\" gombra, hogy létrehozzon egyet.", + "res_confirm_delete": "Biztosan törli ezt az erőforrást?", + "task_title": "Feladatütemező", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Sikertelen", + "task_search": "Search tasks…", + "task_create": "Feladat létrehozása", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Frissítés", + "task_type_restart": "Indítsa újra", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Eszközazonosítók vagy csoportnevek, vesszővel elválasztva", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Ütemezési érték", + "task_script": "Script / Parancs", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Nem található feladat. A kezdéshez kattintson a „Feladat létrehozása” gombra.", + "task_confirm_delete": "Biztosan törli ezt a feladatot?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Munkafolyamat-szerkesztő", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Mentés", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Jelöljön ki egy csomópontot a tulajdonságainak szerkesztéséhez.", + "builder_node_trigger_manual": "Kézi trigger", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Eseményindító", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Indítsa újra az Svc", + "builder_node_action_file_deploy": "Fájl telepítése", + "builder_node_action_message": "Üzenet küldése", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Figyelmeztetés küldése", + "builder_node_result_chain": "Lánc munkafolyamat", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Munkafolyamat neve:", + "comp_title": "Szoftver megfelelőség", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Eszköz", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Futtassa az automatikus javítást ezen az eszközön?", + "comp_no_data": "Nem állnak rendelkezésre megfelelőségi adatok. A kezdéshez futtasson egy vizsgálatot.", + "save": "Mentés", + "cancel": "Mégse", + "close": "Bezárás", + "edit": "Szerkesztés", + "delete": "Törölje", + "actions": "Actions", + "all_orgs": "Minden szervezet", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Hálózati meghajtó", + "type_dns": "DNS szerver", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Erőforrás hozzáadása", + "edit_resource": "Erőforrás szerkesztése", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Cím / Elérési út", + "scope_org": "Szervezet", + "scope_group": "Csoport", + "scope_device": "Eszköz", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Biztosan törli ezt az elemet?", + "all_statuses": "Minden állapot", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Sikertelen", + "search_tasks": "Search tasks�", + "create_task": "Feladat létrehozása", + "edit_task": "Feladat szerkesztése", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Fájl telepítés", + "task_type_registry": "Registry", + "target_devices": "Céleszközök", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / Parancs", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Betöltés", + "no_output": "Nincs elérhető kimenet", + "error_loading": "Hiba az adatok betöltésekor", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Kézi trigger", + "node_schedule": "Schedule", + "node_event": "Eseményindító", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Indítsa újra az Svc", + "node_file_deploy": "Fájl telepítése", + "node_send_message": "Üzenet küldése", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Figyelmeztetés küldése", + "node_chain": "Lánc munkafolyamat", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Minden szervezet", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Eszköz", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Futtassa az automatikus javítást ezen az eszközön?" + }, + "scaling": { + "title": "Skálázás", + "tab_overview": "Áttekintés", + "tab_relays": "Relay Nodes", + "tab_rules": "Hozzárendelési szabályok", + "tab_capacity": "Kapacitástervezés", + "arch_title": "Hálózati architektúra", + "arch_loading": "Építészeti diagram betöltése...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Összes eszköz", + "stat_active_sessions": "Aktív munkamenetek", + "stat_bandwidth": "Teljes sávszélesség", + "relay_health": "Relé egészség", + "no_relays": "Nincsenek konfigurálva közvetítő csomópontok. Adja hozzá az első közvetítő csomópontot a terhelés elosztásához.", + "relay_search": "Relék keresése...", + "relay_add": "Relé csomópont hozzáadása", + "relay_edit": "Relay Node szerkesztése", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Eszközök", + "col_sessions": "Munkamenetek", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Cél relé", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Engedélyezve", + "status_disabled": "Letiltva", + "confirm_delete_relay": "Biztosan törli ezt a közvetítő csomópontot?", + "confirm_delete_rule": "Biztosan törli ezt a hozzárendelési szabályt?", + "rules_hint": "A hozzárendelési szabályok határozzák meg, hogy melyik továbbítószerver kezeli az adott eszközcsoportokat. A szabályokat a rendszer prioritás szerint értékeli (a legalacsonyabb előbb).", + "rule_add": "Add Rule", + "rule_edit": "Szabály szerkesztése", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Eszközcsoport", + "match_tag": "Eszközcímke", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Mester szerver", + "fallback_nearest": "Legközelebbi relé", + "relay_max_sessions": "Maximális átjátszó munkamenetek", + "relay_max_bandwidth": "Maximális sávszélesség (Mbps)", + "cap_tiers": "Kapacitásszintek", + "cap_loading": "Kapacitásadatok betöltése...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Nem állnak rendelkezésre ajánlások.", + "cap_planning": "Infrastruktúra tervezés", + "cap_config": "Konfiguráció", + "cap_max_devices": "Maximális eszközök", + "cap_max_sessions": "Maximális munkamenetek", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Eszköz kapacitása", + "cap_tier_sessions": "Munkamenet kapacitás", + "cap_tier_bandwidth": "Sávszélesség kapacitás", + "cap_single_sqlite": "Egyszerver (SQLite)", + "cap_single_pg": "Egyszerver (PostgreSQL)", + "cap_master_3": "Master + 3 relé", + "cap_master_10": "Master + 10 relé", + "rec_no_relays": "Nincsenek konfigurálva közvetítő csomópontok. Fontolja meg a relé csomópontok hozzáadását a jobb teljesítmény és redundancia érdekében.", + "rec_devices_high": "Az eszköz kihasználtsága magas. Fontolja meg további közvetítő csomópontok hozzáadását a terhelés elosztásához.", + "rec_sessions_high": "A munkamenet kapacitása a határához közeledik. Fontolja meg a közvetítő infrastruktúra frissítését.", + "rec_cpu_high": "Egyes relé csomópontok magas CPU-használatról számolnak be. Fontolja meg a terheléselosztást vagy a kapacitás bővítését.", + "rec_all_good": "Minden rendszer normál paramétereken belül működik. Nincs szükség teendőre.", + "save": "Mentés", + "cancel": "Mégse", + "edit": "Szerkesztés", + "delete": "Törölje", + "close": "Bezárás", + "no_rules": "Nincsenek hozzárendelési szabályok.", + "relays_info_banner": "Ez a lista tájékoztató jellegű. Az ügyfelek által ténylegesen használt közvetítőkiszolgálók a RELAY_SERVERS környezeti változón keresztül vannak konfigurálva a BetterDesk szerveren.", + "relay_name_address_required": "Név és cím megadása kötelező.", + "relay_save_failed": "Nem sikerült menteni a közvetítő csomópontot.", + "relay_delete_failed": "Nem sikerült törölni a közvetítő csomópontot.", + "relay_saved": "Relé csomópont mentve.", + "relay_deleted": "Relé csomópont törölve.", + "rule_name_value_required": "A szabály neve és egyezési értéke kötelező.", + "rule_save_failed": "Nem sikerült menteni a szabályt.", + "rule_delete_failed": "Nem sikerült törölni a szabályt.", + "rule_saved": "Szabály mentve.", + "rule_deleted": "Szabály törölve." + }, + "cross_platform": { + "title": "Platformok közötti kompatibilitás", + "tab_matrix": "Kompatibilitási mátrix", + "tab_distribution": "Eloszlás", + "tab_protocols": "Protokollok", + "tab_limitations": "Korlátozások", + "matrix_hint": "Funkciótámogató mátrix az összes támogatott platformon. Zöld = teljes támogatás, sárga = részleges, szürke = nem elérhető, kék = tervezett.", + "col_feature": "Funkció", + "legend_full": "Teljes támogatás", + "legend_partial": "Részleges támogatás", + "legend_none": "Nem elérhető", + "legend_planned": "Tervezett", + "platform_breakdown": "Platform lebontás", + "arch_breakdown": "Építészeti bontás", + "version_breakdown": "Verzióbontás", + "summary": "Összefoglalás", + "total_devices": "Összes eszköz", + "unique_platforms": "Platformok", + "unique_archs": "Architektúrák", + "unique_versions": "Kliens verziók", + "no_devices": "Még nincs regisztrált eszköz.", + "protocols_hint": "A protokollképesség egyeztetése biztosítja, hogy minden ügyfél csak az általa támogatott szolgáltatásokat kapja meg. A szerver a bejelentett képességek alapján alkalmazkodik a viselkedéshez.", + "capability_negotiation": "Képességi tárgyalás", + "codec_support": "Kodek támogatás (online eszközök)", + "feature_support": "Funkciótámogatás (online eszközök)", + "no_codec_data": "Nem érhetők el kodekadatok az online eszközökről.", + "no_feature_data": "Online eszközökről nem érhetők el funkcióadatok.", + "protobuf_schema": "ClientCapabilities Protobuf séma", + "diagram_client": "Kliens", + "diagram_server": "BetterDesk szerver", + "diagram_peer": "Távoli Peer", + "limitations_hint": "Minden platformnak sajátos korlátozásai vannak, amelyek befolyásolják az elérhető funkciókat. Tekintse át ezeket a korlátozásokat a telepítések tervezésekor.", + "feat_desktop_client": "Asztali kliens", + "feat_background_agent": "Háttér ügynök", + "feat_remote_target": "Távoli célpont", + "feat_screen_capture": "Képernyőfelvétel", + "feat_input_injection": "Bemeneti befecskendezés", + "feat_file_transfer": "Fájlátvitel", + "feat_clipboard_sync": "Vágólap szinkronizálás", + "feat_audio_streaming": "Hangfolyam továbbítása", + "feat_chat": "Chat", + "feat_h264": "H.264 kodek", + "feat_vp9": "VP9 kodek", + "feat_av1": "AV1 kodek", + "feat_cdap_agent": "CDAP agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webböngésző", + "platform_chromeos": "ChromeOS", + "status_production": "Termelés", + "status_testing": "Tesztelés", + "status_planned": "Tervezett", + "status_limited": "Korlátozott", + "status_experimental": "Kísérleti", + "limit_win_uac": "UAC magasság szükséges a szolgáltatás telepítéséhez és a biztonságos asztali számítógépeken történő bevitelhez.", + "limit_win_service": "NSSM szolgáltatásként fut; a telepítéshez rendszergazdai jogosultság szükséges.", + "limit_win_firewall": "Windows A tűzfalszabályoknak engedélyezniük kell a 21115-21119-es portokat a közvetítő kapcsolatokhoz.", + "limit_linux_wayland": "A Wayland összeállítók korlátozzák a programozott képernyőrögzítést; API PipeWire portál szükséges.", + "limit_linux_pipewire": "A hangrögzítéshez PipeWire szükséges; A PulseAudio tartalék elérhető, de korlátozott.", + "limit_linux_arm": "ARM64 buildek állnak rendelkezésre; egyes kodekek szoftveres dekódolást használhatnak (lassabb).", + "limit_mac_screen": "Képernyőrögzítési engedély szükséges a Rendszerbeállítások > Adatvédelem és biztonság menüpontban.", + "limit_mac_signing": "Az ügynököt Apple Developer ID-vel kell aláírni a terjesztéshez.", + "limit_mac_notarize": "A macOS Gatekeeper (nem App Store terjesztés) használatához közjegyzői igazolás szükséges.", + "limit_android_projection": "A MediaProjection API minden képernyőrögzítési munkamenethez felhasználói hozzájárulást igényel.", + "limit_android_accessibility": "Az adatbevitelhez AccessibilityService szükséges; korlátozott Android 14+.", + "limit_android_battery": "A háttérszolgáltatást a szunyókálás mód korlátozza; szükség lehet akkumulátor-optimalizálási mentességre.", + "limit_ios_capture": "Az Apple tiltja a háttérben történő képernyőrögzítést; csak megtekintő mód támogatott.", + "limit_ios_input": "Bemeneti befecskendezés nem megengedett; csak távoli megtekintés és csevegés.", + "limit_ios_appstore": "Csak az App Store-on keresztül történő terjesztés; TestFlight béta teszteléshez.", + "limit_web_https": "WebCodecs A API és a WebRTC HTTPS-t igényel; A HTTP visszaesik a JMuxerre (korlátozott kodekek).", + "limit_web_codec": "A kodek támogatása a böngészőtől függ; A H.264 széles körben támogatott, a VP9/AV1 változó.", + "limit_web_performance": "A teljesítményt korlátozza a böngésző homokozója; nincs közvetlen hardveres gyorsítás.", + "limit_chrome_crostini": "Teljes ügynök-támogatás csak a Crostini Linux tárolón belül.", + "limit_chrome_pwa": "A PWA mód csak webes funkciókat biztosít; nincs natív ügynök képessége.", + "limit_chrome_input": "A bemeneti befecskendezés nem támogatott a Crostini-tartályon kívül.", + "feat_session_recording": "Munkamenet rögzítés", + "feat_multi_monitor": "Több monitor", + "feat_unattended_access": "Felügyelet nélküli hozzáférés", + "limit_win_virtual_account": "Szolgáltatáse laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Szolgáltatáse laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Biztonsági audit", + "tab_overview": "Áttekintés", + "tab_events": "Események ellenőrzése", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Biztonsági pontszám", + "failed_logins": "Sikertelen bejelentkezés (24 óra)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Régi kulcsok (>90 nap)", + "security_checks": "Biztonsági ellenőrzések", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Biztonságos", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "all_events": "All Events", + "event_login_failed": "Bejelentkezés sikertelen", + "event_login_success": "Sikeres bejelentkezés", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfig megváltozott", + "event_key_created": "Kulcs létrehozva", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Nem található ellenőrzési esemény.", + "hardening_hint": "Biztonsági szigorítási prioritások a BetterDesk telepítéséhez. A tételek sorrendje súlyosság szerint történik.", + "no_hardening": "Keményítő elemek nem állnak rendelkezésre.", + "vuln_hint": "A függőségi sérülékenység vizsgálatának eredménye. Futtassa rendszeresen az npm auditot a függőségek biztonságának megőrzése érdekében.", + "no_vulns": "Nem található sebezhetőség. A függőségei biztonságban vannak." + }, + "languages": { + "title": "Nyelvkezelés", + "total_languages": "Összes nyelv", + "fully_translated": "Teljesen lefordítva", + "needs_review": "Felülvizsgálatra szorul", + "reference_keys": "Referenciakulcsok", + "no_languages": "Nem található nyelvi fájl.", + "badge_reference": "Reference", + "badge_review": "Felülvizsgálatra szorul", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Nézet hiányzik", + "fix_missing": "Fix Missing", + "missing_keys_for": "Hiányzó kulcsok ehhez", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "és {n} továbbiak...", + "all_keys_present": "Minden kulcs megvan!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "A(z) {code} hiányzó kulcsait kézzel kell lefordítani.", + "no_fix_needed": "Nincs hiányzó kulcs a javításhoz." + }, + "resource_control": { + "title": "Erőforrás-szabályozás", + "tab_overview": "Áttekintés", + "tab_usb": "USB Control", + "tab_optical": "Optikai meghajtók", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Erőforráskvóták", + "compliance_by_category": "Megfelelés kategóriánként", + "device_compliance": "Az eszköz megfelelősége", + "search_devices": "Eszközök keresése...", + "col_device": "Eszköz", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Összes eszköz", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Megfelelési arány", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurálás", + "no_devices": "Nem találhatók eszközök", + "usb_title": "USB Portvezérlés", + "usb_hint": "A USB tárolóeszköz-hozzáférés szabályozása a kiválasztott eszközhöz vagy a szervezetszintű alapértelmezett házirendhez.", + "usb_storage_policy": "USB Tárolási szabályzat", + "usb_whitelist": "Engedélyezőlistán szereplő eszközök (soronként egy)", + "usb_whitelist_hint": "VID:PID (pl. 0781:5583)", + "usb_audit_log": "A USB eszközkapcsolatok naplózása", + "optical_title": "Optikai meghajtó vezérlés", + "optical_hint": "A CD/DVD/Blu-ray meghajtó hozzáférésének szabályozása a kiválasztott eszközhöz.", + "optical_policy": "Optikai meghajtó házirend", + "optical_audit_log": "Az optikai meghajtó hozzáférésének naplózása", + "monitors_title": "Monitorkezelés", + "monitors_hint": "Konfigurálja a monitor beállításait, beleértve a maximális számot, a felbontás érvényesítését, a fényerőt és az energiaellátás ütemezését.", + "monitors_max_count": "Maximális monitorok (0 = korlátlan)", + "monitors_max_hint": "A 0 azt jelenti, hogy nincs határ", + "monitors_resolution": "Max felbontás", + "monitors_brightness": "Fényerőkorlát", + "monitors_power_schedule": "Energiagazdálkodási ütemterv", + "monitors_power_hint": "pl. off:22:00-06:00", + "disks_title": "Lemezhozzáférés vezérlése", + "disks_hint": "Konfigurálja a lemezelérési házirendeket, beleértve a csak olvashat�� módot, a titkosítás végrehajtását és a partíció láthatóságát.", + "disks_readonly": "Csak olvasható mód kényszerítése", + "disks_encryption": "Titkosítás szükséges (BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T. engedélyezése megfigyelés", + "disks_hidden": "Rejtett partíciók", + "disks_hidden_hint": "Vesszővel elválasztott meghajtóbetűjelek vagy csatlakoztatási pontok", + "quotas_title": "Erőforráskvóták", + "quotas_hint": "Felhasználónkénti CPU, RAM, sávszélesség és lemezkvóták beállítása a kiválasztott eszközhöz.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Sávszélesség-korlát (Mbps)", + "quotas_bandwidth_hint": "0 = korlátlan", + "quotas_disk_quota": "Lemezkvóta (GB)", + "quotas_disk_hint": "0 = korlátlan", + "quotas_process_whitelist": "Folyamat engedélyezőlista (soronként egy)", + "quotas_process_hint": "pl. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Csak fehérlista", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Szoftverfrissítések", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Telepített verzió", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Ellenőrizze a frissítéseket", + "checking": "Checking…", + "up_to_date": "Naprakész", + "update_available": "Frissítés elérhető", + "changelog": "Release Notes", + "no_changelog": "Nem állnak rendelkezésre kiadási megjegyzések", + "files_changed": "A fájlok megváltoztak", + "files": "fájlokat", + "changes_unavailable": "Nem sikerült betölteni a fájlmódosítási listát. Továbbra is telepítheti a frissítést.", + "create_backup": "Frissítés előtt készítsen biztonsági másolatot", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Frissítés telepítése…", + "creating_backup": "Biztonsági másolat létrehozása…", + "downloading": "Fájlok letöltése…", + "install_success": "A frissítés sikeresen telepítve. A konzol újraindul…", + "install_failed": "A frissítés telepítése sikertelen", + "restarting": "Várakozás a konzol újraindítására…", + "restart_complete": "A konzol sikeresen újraindult", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Nincs kiválasztva frissítési verzió. Először ellenőrizze a frissítéseket.", + "backups_title": "Biztonsági másolatok frissítése", + "backups_desc": "Frissítés előtti biztonsági mentések, amelyek minden frissítés előtt automatikusan jönnek létre", + "no_backups": "Nem található frissítési biztonsági másolat", + "restore": "Restore", + "restore_confirm": "Biztosan vissza szeretné állítani ebből a biztonsági másolatból? A módosított fájlok felülíródnak.", + "restore_success": "A biztonsági mentés sikeresen visszaállítva. A konzol újraindul…", + "baseline_set": "Alapvonal készlet", + "commits_behind": "mögött követi el", + "total_files": "Összes fájl", + "applied": "Applied", + "failed": "Sikertelen", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Szerverkomponens", + "component_agent": "Agent", + "component_scripts": "Szkriptek és Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "A Go ellenőrzése…", + "go_not_found": "Go nincs telepítve", + "go_check_failed": "Nem sikerült ellenőrizni a Go elérhetőségét", + "server_building": "Go server fordítása… Ez eltarthat néhány percig.", + "server_built": "A szerver bináris fájlja lefordítva", + "server_build_failed": "A szerver fordítása nem sikerült", + "server_stale_title": "A szerver bináris fájlja elavult", + "server_stale_desc": "A Go server forrás frissítése megtörtént, de a futó bináris fájl nem épült újra. Építse újra most a biztonsági és a könyvtári frissítések alkalmazásához.", + "rebuild_server": "Szerver bináris újraépítése", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "A szerver bináris újraépítése és újraindítása", + "rebuild_server_failed": "A szerver bináris újraépítése nem sikerült", + "server_deployed": "Bináris szerver telepítve", + "server_deploy_failed": "A szerver telepítése sikertelen", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Szerverforrás letöltése…", + "delete": "Törölje", + "delete_confirm": "Véglegesen törli a {name} biztonsági másolatot? Ezt nem lehet visszavonni.", + "delete_success": "Biztonsági másolat törölve", + "delete_failed": "Nem sikerült törölni a biztonsági másolatot", + "retention_label": "Tartson N legutóbbi biztonsági másolatot", + "retention_hint": "A régebbi biztonsági másolatok minden frissítés után automatikusan törlődnek. Használja a 0-t az összes biztonsági másolat megtartásához.", + "retention_saved": "A megőrzési beállítás mentve", + "retention_invalid": "A megőrzésnek 0 és 1000 közötti egész számnak kell lennie", + "retention_required_for_prune": "Először állítson be 0-nál nagyobb megőrzési értéket", + "prune_now": "Apply now", + "prune_confirm": "Csak a {n} legfrissebb biztonsági mentéseit tartja meg, a többit pedig törli?", + "prune_done": "Levágott {n} biztonsági mentés(ek)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Frissítési módszer", + "strategy_download": "Előre elkészített bináris letöltés", + "strategy_compile": "Forrásból fordítsd le", + "both_available": "Letöltés és fordítás", + "download_available": "Letöltés elérhető", + "no_method": "Nincs frissítési módszer", + "no_release": "No release", + "available": "Elérhető", + "server_downloading": "Szerver bináris fájl letöltése…", + "server_downloaded": "A szerver bináris fájlja letöltve", + "server_download_failed": "A szerver bináris letöltése nem sikerült", + "server_download_note": "Egy előre elkészített bináris letöltésre kerül a GitHub Releases oldalról. Ez általában kevesebb mint egy percet vesz igénybe.", + "install_go_hint": "Telepítse a Go-t a https://go.dev/dl/ webhelyről a fordítás engedélyezéséhez, vagy tegyen közzé egy kiadást előre beépített binárisokkal", + "strategy_install_go": "Automatikus telepítés Go és fordítás", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Kész az automatikus újraépítés", + "toolchain_ready": "Szerszámlánc telepítve", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Go eszközlánc letöltése…", + "toolchain_failed": "A Go toolchain telepítése sikertelen", + "modal_title": "Frissítés telepítése", + "modal_done_title": "Frissítés kész", + "modal_close": "Bezárás", + "modal_reload_now": "Töltsd újra a konzolt", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konzol fájlok", + "phase_server": "Szerverfázis", + "phase_restart": "Indítsa újra", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Biztonsági mentés kihagyva (felhasználói választásonként)", + "server_skipped": "Go server kihagyva", + "server_not_selected": "Go server not selected", + "server_processing": "Go server frissítés feldolgozása…", + "no_restart_needed": "Nincs szükség újraindításra", + "complete": "Frissítés alkalmazva", + "complete_summary": "A frissítés sikeresen alkalmazásra került.", + "complete_with_errors": "A frissítés befejeződött, de néhány lépés nem sikerült. Lásd alább a részleteket.", + "modal_done_with_errors_title": "A frissítés hibákkal befejeződött", + "console_will_restart": "A konzol folyamata most újraindul…", + "restart_complete_msg": "A konzol újraindult. Kattintson az újratöltés gombra az új verzió betöltéséhez. Az oldal 8 másodpercen belül automatikusan újratöltődik.", + "refresh_recommended": "A statikus elemek megváltoztak – az új felhasználói felület megtekintéséhez töltse be újra az oldalt.", + "confirm_title": "Frissítés alkalmazása", + "confirm_with_backup": "A frissítés előtti biztonsági másolat automatikusan létrejön.", + "confirm_no_backup": "Nem készül biztonsági másolat (saját felelősségére folytassa)." + }, + "permissions": { + "title": "Engedélyek", + "subtitle": "Szerepalapú engedélyek és egyéni felülírások kezelése", + "info_title": "Hogyan működnek az engedélyek", + "info_desc": "Minden szerepkör alapértelmezett engedélyekkel rendelkezik. Szerepkörenként egyéni engedélyeket adhat hozzá vagy távolíthat el, ha lent váltja őket. Az egyéni felülírások kiemelve jelennek meg, és bármikor visszaállíthatók az alapértelmezettre.", + "select_role": "Válasszon szerepet", + "select_role_placeholder": "Válassz egy szerepet...", + "reset_overrides": "Állítsa vissza az összes felülírást", + "granted": "Megadva", + "overrides": "Felülbírálatok", + "level": "Szint", + "super_admin_tag": "Teljes hozzáférés", + "server_level_tag": "Szerver szintű", + "custom": "Egyéni", + "default": "Alapértelmezett", + "revert": "Visszaállítás az alapértelmezettre", + "saved": "Az engedély frissítve", + "reverted": "Visszaállítva az alapértelmezettre", + "all_reverted": "Minden felülírás visszaállt", + "confirm_reset": "Visszaállítja a szerepkör összes egyéni felülírását az alapértelmezettre?", + "empty_title": "Válasszon egy szerepet", + "empty_desc": "Válasszon egy szerepet a fenti legördülő menüből, hogy megtekinthesse és kezelhesse az engedélyeit.", + "locked_title": "Szuper adminisztrátor", + "locked_desc": "A Super Admin alapértelmezés szerint minden jogosultsággal rendelkezik, és nem testreszabható.", + "cat_device": "Eszközök", + "cat_user": "Felhasználók", + "cat_server": "Szerver", + "cat_org": "Szervezetek", + "cat_audit": "Naplózás és ellenőrzés", + "cat_cdap": "CDAP", + "cat_enrollment": "Regisztráció", + "cat_chat": "Chat", + "cat_branding": "Márkaépítés", + "perm_device_view": "Eszközök megtekintése", + "perm_device_connect": "Csatlakozás eszközökhöz", + "perm_device_edit": "Szerkessze az eszközöket", + "perm_device_delete": "Eszközök törlése", + "perm_device_ban": "Eszközök kitiltása / tiltásának feloldása", + "perm_device_change_id": "Eszközazonosító módosítása", + "perm_user_view": "Felhasználók megtekintése", + "perm_user_create": "Felhasználók létrehozása", + "perm_user_edit": "Felhasználók szerkesztése", + "perm_user_delete": "Felhasználók törlése", + "perm_server_config": "Szerver konfigurációja", + "perm_server_keys": "A API kulcsok kezelése", + "perm_org_create": "Szervezetek létrehozása", + "perm_org_edit": "Szervezetek szerkesztése", + "perm_org_delete": "Szervezetek törlése", + "perm_org_manage_users": "Szervezeti felhasználók kezelése", + "perm_org_manage_devices": "Szervezeti eszközök kezelése", + "perm_audit_view": "Tekintse meg az ellenőrzési naplókat", + "perm_metrics_view": "Mutatók megtekintése", + "perm_blocklist_edit": "Szerkessze a tiltólistát", + "perm_cdap_view": "CDAP eszközök megtekintése", + "perm_cdap_command": "CDAP parancsok küldése", + "perm_cdap_terminal": "CDAP terminál hozzáférés", + "perm_cdap_files": "CDAP fájlhozzáférés", + "perm_enrollment_manage": "Beiratkozás kezelése", + "perm_enrollment_approve": "Beiratkozás jóváhagyása", + "perm_chat_access": "Chat hozzáférés", + "perm_branding_edit": "Márkajelzés szerkesztése", + "perm_server_attestation": "Szerver teljesítmény tanúsítás" + }, + "notifications": { + "title": "Értesítések", + "empty": "Nincsenek új értesítések", + "mark_all_read": "Jelölje meg az összeset olvasottnak", + "see_all": "Tekintse meg az összes segítségkérést", + "help_request": "Segítségkérés", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Állítsa be a konzolt látási, mozgási és olvasási igényeihez.", + "close": "Zárja be a kisegítő lehetőségek menüt", + "profiles": "Gyors profilok", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Nagyobb szöveg, erős kontraszt és fókusz.", + "profile_dyslexia": "Olvasási kényelem", + "profile_dyslexia_hint": "Olvasható betűtípus és nagyobb térköz.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Csökkenti az átmeneteket és szünetelteti az animációt.", + "profile_color_assist": "Szín támogatás", + "profile_color_assist_hint": "Színszűrő, címkék és kiemelt hivatkozások.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Betűköz", + "word_spacing": "Szóköz", + "readable_font": "Olvasható betűtípus", + "readable_font_hint": "Széles, ismerős betűformákat használ.", + "dyslexia_spacing": "Diszlexia távolság", + "dyslexia_spacing_hint": "Extra szóközt ad a hosszú szöveghez.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Nagy kontrasztú sötét", + "contrast_high_light": "Nagy kontrasztú fény", + "contrast_yellow_black": "Sárga a feketén", + "color_filter": "Színlátó szűrő", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Színtelítettség", + "underline_links": "A hivatkozások aláhúzása", + "underline_links_hint": "Láthatóvá teszi a linkeket anélkül, hogy a színekre támaszkodna.", + "highlight_links": "Műveletek kiemelése", + "highlight_links_hint": "Körvonalazza a hivatkozásokat és a gombokat.", + "highlight_headings": "Címsorok kiemelése", + "highlight_headings_hint": "Színsávval jelöli meg a szakaszcímeket.", + "hide_media": "Dim media", + "hide_media_hint": "Elsötétíti a képeket, videókat és vásznakat.", + "interaction": "Interaction", + "strong_focus": "Erős fókusz", + "strong_focus_hint": "A billentyűzet nagyméretű fókuszgyűrűjét mutatja.", + "large_cursor": "Nagy kurzor", + "large_cursor_hint": "Nagyobb, nagy kontrasztú mutatót használ.", + "reduce_motion": "Csökkentse a mozgást", + "reduce_motion_hint": "Lerövidíti az átmeneteket és egyenletes görgetést.", + "pause_animations": "Animációk szüneteltetése", + "pause_animations_hint": "Leállítja a vizuális mozgás hurkolását.", + "reading_guide": "Olvasási útmutató", + "reading_guide_hint": "Világos vonallal követi a mutatót.", + "reading_mask": "Olvasó maszk", + "reading_mask_hint": "Elhalványítja a tartalmat a mutató felett és alatt.", + "preview": "Preview", + "preview_title": "Kezelői munkaterület előnézete", + "preview_text": "A menü bezárása előtt ellenőrizze, hogy a szöveg, a hivatkozások, a vezérlőelemek és az állapotcímkék jól olvashatók-e.", + "preview_link": "Az eszköz részletei link", + "preview_status": "Online", + "preview_button": "Elsődleges intézkedés", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Kiszolgáló-kezelés", + "subtitle": "Pilótafülke-szerű vezérlősík a BetterDesk konzolgazda számára (BETA).", + "beta_tooltip": "Béta funkció – aktív fejlesztés alatt.", + "notice_title": "Béta funkció", + "notice_body": "Ezek az eszközök azon a gazdagépen futnak, ahol a BetterDesk konzolfolyamat él. Minden műveletet auditálnak. A funkciók köre a jövőbeli kiadásokban bővülni fog.", + "tab_overview": "Áttekintés", + "tab_terminal": "Terminál", + "tab_files": "Fájlok", + "tab_services": "Szolgáltatások", + "cpu": "CPU", + "memory": "Memória", + "load": "Terhelési átlag", + "disks": "Lemezek", + "history": "Előzmények (utolsó 60 minta)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Üzemidő", + "no_disks": "Nem állnak rendelkezésre lemezadatok", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY elérhető", + "term_connect": "Csatlakozás", + "term_disconnect": "Lecsatlakozás", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Csatlakozási hiba", + "term_warning": "A parancsok a konzolfolyamat tulajdonosaként futnak. Adjon hozzá egy sudoers szabályt a magasság engedélyezéséhez.", + "term_hint": "Tipp: írja be a `sudo -i` parancsot az eszkalációhoz (sudoers konfigurációja szükséges).", + "term_lib_failed": "Nem sikerült betölteni a terminálkönyvtárat", + "files_up": "Egy szinttel feljebb", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Üres könyvtár", + "files_error": "Nem sikerült listázni a könyvtárat", + "read_failed": "Nem sikerült beolvasni a fájlt", + "save_failed": "Nem sikerült menteni a fájlt", + "rename_failed": "Az átnevezés nem sikerült", + "delete_failed": "A törlés nem sikerült", + "delete_confirm": "Törli ezt a bejegyzést?", + "mkdir_prompt": "Új mappanév:", + "mkdir_failed": "Nem sikerült létrehozni a mappát", + "file_saved": "A fájl mentve", + "binary_warn": "Bináris fájl – csak előnézet", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Keresési szolgáltatások…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Nem található szolgáltatások", + "svc_load_failed": "Nem sikerült betölteni a szolgáltatásokat", + "svc_action_failed": "A művelet nem sikerült", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Indítsa újra", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Töltse le a BetterDesk ügynököt", + "choose_platform": "Válassza ki a platformját", + "choose_platform_hint": "Válassza ki az operációs rendszerének megfelelő telepítőt.", + "download": "Letöltés", + "building": "Épület…", + "failed": "Az építés nem sikerült", + "need_help": "Segítségre van szüksége?", + "powered_by": "Powered by" + }, + "server_attestation": { + "title": "Szerver tanúsítás", + "subtitle": "Teljesítménybenchmark, amely meghatározza az egyidejű távoli kapcsolatok kapacitását 80%-os CPU, RAM és lemez küszöbértéknél.", + "warning_title": "Terhelésteszt", + "warning_body": "A benchmark párhuzamos WebSocket-kapcsolatokat szimulál a jel- és relészerverekhez. Csúcsidőn kívül futtassa — ez a teszt terheli a produkciót.", + "run_benchmark": "Benchmark futtatása", + "abort": "Megszakítás", + "download_report": "JSON-jelentés letöltése", + "last_test": "Utolsó teszt", + "no_test_yet": "Még nem futottak le benchmarkok", + "max_connections": "Maximum kapcsolatok", + "threshold_80": "80%-os küszöb — végső mérések", + "disk": "Lemez", + "ramp_chart": "Terhelési rámpadiagram", + "connections": "Kapcsolatok", + "connections_short": "kapcs.", + "tier_guide_title": "Mit jelent az egyes szintek?", + "tier_bronze": "BRONZ", + "tier_iron": "VAS", + "tier_titanium": "TITÁN", + "tier_platinum": "PLATINA", + "tier_obsidian": "OBSZIDIÁN", + "tier_none": "MINŐSÍTETLEN", + "tier_bronze_desc": "1–25 egyidejű kapcsolat — kis VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 kapcsolat — közepes szerver (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 kapcsolat — nagy teljesítményű szerver (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 kapcsolat — vállalati infrastruktúra (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ kapcsolat — turbó osztály: dedikált hardver, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Megjegyzés: Dockerben a CPU/RAM-mérések a tároló korlátait tükrözhetik, nem a fizikai gazdagépét.", + "badge_tooltip": "BetterDesk Szerver Tanúsítás — szerver teljesítmény tanúsítvány", + "confirm_run": "Ez a benchmark szimulált kapcsolatokkal terheli a szervert. Folytatja?", + "starting": "Indítás...", + "complete": "Benchmark befejezve", + "signal_peers": "Jel peer-ek", + "relay_sessions": "Relé munkamenetek", + "page_error": "A Szerver Tanúsítás oldal betöltése sikertelen", + "mode_estimated": "Becsült (WebSocket nem elérhető)", + "incomplete": "A benchmark érvényes szint nélkül fejeződött be" + }, + "commercialization": { + "title": "Kereskedelmi modul", + "subtitle": "Támogatási csomagok, számlázható munkamenetek és jelentések", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Korai funkció — a számlázás és csomagok aktív fejlesztés alatt állnak.", + "tabs": { + "overview": "Áttekintés", + "packages": "Csomagok és szerződések", + "sessions": "Munkamenetek", + "reports": "Jelentések", + "settings": "Speciális beállítások" }, - "branding": { - "identity_title": "Márkaidentitás", - "identity_desc": "Testreszabhatja a konzolon megjelenő alkalmazás nevét és leírását", - "app_name": "Alkalmazás neve", - "app_description": "Alkalmazás leírása", - "logo_title": "Logó", - "logo_desc": "Válassza ki, hogy logója hogyan jelenjen meg az oldalsávon és a bejelentkezési oldalon", - "logo_type_icon": "Anyag ikon", - "logo_type_svg": "SVG kód", - "logo_type_image": "Kép URL", - "logo_icon_name": "Ikon neve", - "logo_icon_hint": "Adja meg az anyagikonok nevét (pl. dns, felhő, biztonság). Lásd: fonts.google.com/icons", - "logo_svg_code": "SVG kód", - "logo_svg_hint": "Illessze be ide az SVG-jelölést. Támogatja a teljes elemeket elérési utakkal és stílusokkal.", - "logo_image_upload": "Kép feltöltése", - "logo_image_choose": "Válasszon képfájlt", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Érvénytelen fájltípus. Használjon PNG, JPG, GIF, WebP vagy SVG formátumot.", - "preview": "Előnézet", - "colors_title": "Színséma", - "colors_desc": "Szabja testre a színpalettát. Hagyja üresen az alapértelmezett értékek használatához.", - "colors_backgrounds": "Háttérszínek", - "colors_text": "Szöveg", - "colors_accents": "Kiemelt színek", - "colors_borders": "Szegélyek", - "import_export_title": "Importálás és exportálás", - "import_export_desc": "Mentse el a témát JSON fájlként, vagy importáljon egyet egy másik példányból", - "export_theme": "Export téma", - "import_theme": "Téma importálása", - "reset_defaults": "Állítsa vissza az alapértelmezett értékeket", - "save_branding": "Mentse a márkaépítést", - "saved": "A márkajelzés sikeresen mentve. Újratöltés...", - "exported": "Téma exportálva", - "imported": "A téma sikeresen importálva. Újratöltés...", - "import_error": "Nem sikerült importálni a témát. Érvénytelen fájlformátum.", - "reset_confirm": "Biztosan vissza szeretné állítani a márkajelzést az alapértelmezett értékekre? Ezt nem lehet visszavonni.", - "reset_success": "A márkaépítés visszaállt az alapértelmezett értékekre. Újratöltés...", - "logo_type_text": "Szöveges logó", - "logo_text": "Logó szöveg", - "logo_text_hint": "A márka logójaként megjelenő elsődleges szöveg", - "logo_text_accent": "Kiegészítő szöveg", - "logo_text_accent_hint": "Másodlagos szöveg a logó alatt (pl. terméknév vagy szlogen)", - "logo_upload_success": "Az embléma sikeresen feltöltve.", - "typography_title": "Tipográfia", - "typography_desc": "Válasszon betűtípusokat a címsorokhoz és a törzsszöveghez. A betűtípusok letöltésre kerülnek a szerverre önkiszolgáló tárolás céljából.", - "font_heading": "Címsor betűtípus", - "font_heading_hint": "Címsorokhoz (H1–H6) és szöveges logóhoz használatos", - "font_body": "Szövegtörzs betűtípusa", - "font_body_hint": "Törzsszövegekhez és felhasználói felület elemeihez használatos", - "font_search_placeholder": "Betűtípusok keresése...", - "font_system_default": "Rendszer alapértelmezett", - "font_clear": "Törlés", - "font_cat_all": "Összes", - "font_downloaded_count": "a szerverre letöltött betűtípusok", - "powered_by": "Hajtóerő:", - "background_title": "Háttér és megjelenés", - "background_desc": "Állítson be konzolhátteret, színátmenetet vagy egyszínű hátteret.", - "bg_type_none": "Nincs", - "bg_type_color": "Egyszínű", - "bg_type_gradient": "Színátmenet", - "bg_type_image": "Kép", - "bg_color": "Háttérszín", - "bg_gradient": "CSS színátmenet", - "bg_gradient_hint": "Bármilyen érvényes CSS színátmenet, pl. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Háttérkép feltöltése", - "bg_image_choose": "Képfájl kiválasztása", - "bg_image_hint": "PNG, JPG, WebP vagy GIF. Max. 8 MB.", - "bg_image_url": "Kép elérési útja / URL", - "bg_size": "Kép méretezése", - "bg_size_cover": "Lefedés (képernyőkitöltés)", - "bg_size_contain": "Beillesztés (fit)", - "bg_size_auto": "Automatikus (eredeti)", - "bg_blur": "Háttér elmosás", - "bg_overlay": "Sötét fedőréteg", - "bg_overlay_hint": "Elsötétíti a hátteret a jobb olvashatóság érdekében.", - "bg_image_too_large": "A kép túl nagy. A maximális méret 8 MB.", - "bg_image_invalid_type": "Érvénytelen fájltípus. Használjon PNG, JPG, WebP vagy GIF fájlt.", - "bg_upload_success": "Háttérkép feltöltve.", - "login_title": "Bejelentkezési oldal", - "login_desc": "Testre szabhatja a bejelentkezési képernyő fejlécét, alcímét és hátterét.", - "login_heading": "Bejelentkezési fejléc", - "login_heading_placeholder": "Üdvözöljük újra", - "login_subheading": "Bejelentkezési alcím", - "login_subheading_placeholder": "Jelentkezzen be fiókjába", - "login_bg_inherit": "Ugyanaz, mint a konzol", - "agent_title": "Agent letöltési oldal", - "agent_desc": "Testre szabhatja a végfelhasználóknak megjelenő nyilvános agent letöltési portált.", - "agent_show_powered": "\"Powered by BetterDesk\" megjelenítése", - "agent_show_powered_hint": "A BetterDesk hivatkozás megjelenítése a letöltési portál láblécében.", - "footer_title": "Lábléc és szerzői jog", - "footer_desc": "Adjon hozzá egyéni láblécsort a bejelentkezési képernyőn és a konzol oldalsávjában.", - "footer_text": "Lábléc szöveg", - "footer_text_hint": "pl. szerzői jogi megjegyzés vagy cégnév.", - "show_powered": "\"BetterDesk\" hivatkozás megjelenítése", - "show_powered_hint": "A BetterDesk neve és verziója megjelenik a bejelentkezési láblécben és az oldalsávban.", - "custom_css_title": "Egyéni CSS", - "custom_css_desc": "Haladó: egyéni CSS befecskendezése a konzolba és a bejelentkezési oldalra.", - "custom_css_hint": "Körültekintően használja. Max. 20 000 karakter." + "clock": { + "title": "Szerveridő (NTP)", + "check_now": "Ellenőrzés", + "unsynced": "A szerver órája nincs szinkronban — a számlázható munkamenetek blokkolva lehetnek" }, - "device_detail": { - "tab_overview": "Áttekintés", - "tab_tags": "Címkék és megjegyzések", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Csatlakozás", - "section_manage": "Menedzsment", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Ez az eszköz le van tiltva", - "no_reason": "Indoklás nélkül", - "tags": "Tags", - "no_tags": "Nincsenek címkék hozzárendelve ehhez az eszközh��z", - "tag_placeholder": "Adja meg a címke nevét...", - "add_tag": "Add", - "tag_exists": "Ez a címke már létezik", - "notes": "Notes", - "notes_placeholder": "Megjegyzések hozzáadása ehhez az eszközhöz...", - "danger_zone": "Danger Zone", - "action_connect_web": "Csatlakozás böngészőből", - "action_connect_web_desc": "Csatlakozás a böngésző távoli asztalán keresztül", - "action_native_remote": "BetterDesk Távirányító", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Asztali kliens", - "action_connect_desktop_desc": "Nyissa meg az asztali kliens alkalmazásban", - "action_change_id_desc": "Módosítsa az eszköz regisztrációs azonosítóját", - "action_ban_desc": "Az eszköz csatlakozásának letiltása", - "action_unban_desc": "Engedélyezze, hogy az eszköz újra csatlakozzon", - "action_delete_desc": "Véglegesen távolítsa el ezt az eszközt", - "tab_hardware": "Hardware", - "tab_metrics": "Metrikák", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kódolási képességek", - "section_live_metrics": "Élő mérőszámok", - "section_current_usage": "Jelenlegi használat", - "section_usage_history": "Használati előzmények", - "os": "Operációs rendszer", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU frekvencia", - "total_memory": "Teljes memória", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Frissítve", - "device_groups": "Csoportok", - "no_sysinfo": "Nincs hardver információ", - "no_sysinfo_hint": "A rendszeradatok azután jelennek meg, hogy az eszköz elküldi a sysinfo jelentést", - "no_metrics": "Nem állnak rendelkezésre mérőszámok", - "no_metrics_hint": "A mutatók akkor jelennek meg, ha az eszköz szívverésjelentéseket küld", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Fájlok", - "agent_lazy_hint": "Kattintson erre a lapra az élő adatok betöltéséhez az ügynöktől", - "agent_offline": "Az ügynök offline állapotban van", - "agent_timeout": "Az ügynök nem válaszolt időben", - "agent_error": "Nem sikerült betölteni az adatokat az ügynöktől", - "service_name": "Name", - "service_display": "Megjelenítési név", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktív számlázható munkamenetek" }, - "inventory": { - "title": "Inventory", - "subtitle": "A felügyelt eszközök hardver- és szoftverleltárát", - "device_id": "Eszközazonosító", - "hostname": "Hostname", - "os": "Operációs rendszer", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Teljes memória", - "memory_used": "Used Memory", - "memory_available": "Rendelkezésre álló memória", - "memory_usage": "Memóriahasználat", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Hálózati interfészek", - "software": "Software", - "software_count": "Telepített szoftver", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fizikai magok", - "logical_cores": "Logikai magok", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Elérhető", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-címek", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Gyűjtő fut", - "collector_stopped": "Gyűjtő leállt", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Összegyűjtve", - "no_data": "Még nem állnak rendelkezésre leltári adatok. Kattintson a „Gyűjtés most” gombra a rendszerinformációk összegyűjtéséhez.", - "no_devices": "Nem található készletadatokkal rendelkező eszköz", - "detail_title": "Készülékkészlet részletei", - "telemetry": "Telemetry", - "view_detail": "Részletek megtekintése", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Új csomag", + "name": "Név", + "included_minutes": "Tartalmazott percek", + "overage_rate": "Túllépési díj / ó", + "currency": "Pénznem", + "heading": "Támogatási csomagok", + "prompt_name": "Csomag neve", + "create_title": "Új csomag szervezetnek", + "create_submit": "Csomag létrehozása", + "select_org": "Szervezet", + "select_org_placeholder": "Válasszon szervezetet…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Támogatja a jegyeket és a problémakövetést", - "create": "New Ticket", - "edit": "Jegy szerkesztése", - "delete": "Jegy törlése", - "detail": "Jegyrészlet", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Hozzárendelve", - "created_by": "Készítette", - "device": "Eszköz", - "sla_due": "SLA Due", - "created_at": "Létrehozva", - "updated_at": "Frissítve", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Nyissa meg", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Írj megjegyzést...", - "internal_note": "Belső megjegyzés (a végfelhasználók számára nem látható)", - "attachments": "Attachments", - "upload_attachment": "Melléklet feltöltése", - "download": "Download", - "connect_device": "Csatlakozás az eszközhöz", - "no_tickets": "Nem található jegy", - "no_comments": "Még nincsenek megjegyzések", - "no_attachments": "Nincsenek mellékletek", - "title_required": "A cím kötelező", - "delete_confirm": "Biztosan törölni szeretné a #{id} jegyet?", - "delete_success": "A jegy sikeresen törölve", - "created_success": "A jegy sikeresen létrehozva", - "updated_success": "A jegy sikeresen frissítve", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Jegyek keresése...", - "assign_to_me": "Rendelje hozzám", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Nyissa meg", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Tevékenységfigyelés", - "subtitle": "Alkalmazáshasználat és tétlen követés", - "device": "Eszköz", - "hostname": "Hostname", - "sessions": "Munkamenetek", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Legnépszerűbb alkalmazások", - "app_name": "Application", - "window_title": "Ablak címe", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Munkamenetek száma", - "total_active": "Teljesen aktív", - "total_idle": "Total Idle", - "detail_count": "Részlet Feljegyzések", - "no_data": "Nem állnak rendelkezésre tevékenységi adatok", - "no_sessions": "Nincs ülés", - "filter_from": "-tól", - "filter_to": "Eddig", - "filter_apply": "Szűrő alkalmazása", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Eszközök keresése...", - "date_range": "Date Range", - "device_id": "Eszközazonosító", - "session_start": "Munkamenet kezdete", - "session_end": "Munkamenet vége", - "user": "User", - "no_activity": "Nincs rögzített tevékenység", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Nincsenek alkalmazások" - }, - "automation": { - "title": "Automatizálás és riasztások", - "subtitle": "Riasztási szabályok, távoli parancsok és SMTP-konfiguráció", - "rules": "Alert Rules", - "rules_subtitle": "Határozza meg az értesítéseket kiváltó feltételeket", - "alerts": "Riasztási előzmények", - "alerts_subtitle": "A kiváltott riasztások megtekintése és nyugtázása", - "commands": "Távoli parancsok", - "commands_subtitle": "Parancsok küldése távoli eszközökre", - "smtp": "SMTP konfiguráció", - "smtp_subtitle": "E-mail értesítési beállítások", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Állapot típusa", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Céleszköz", - "scope_all": "Minden eszköz", - "cooldown": "Lehűlés (másodperc)", - "notify_emails": "Értesítési e-mailek", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "create_rule": "Szabály létrehozása", - "edit_rule": "Szabály szerkesztése", - "delete_rule": "Szabály törlése", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Kiváltva:", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Nagyobb mint", - "op_gte": "Nagyobb vagy egyenlő", - "op_lt": "Less than", - "op_lte": "Kisebb vagy egyenlő", - "op_eq": "Egyenlő", - "op_neq": "Nem egyenlő", - "type_cpu_usage": "CPU használat (%)", - "type_memory_usage": "Memóriahasználat (%)", - "type_disk_usage": "Lemezhasználat (%)", - "type_offline_duration": "Offline időtartam (ok)", - "type_idle_duration": "Üresjárati időtartam (s)", - "type_custom": "Custom", - "command_type": "Parancs típusa", - "command_payload": "Parancs / Script", - "command_result": "Result", - "command_status": "Status", - "send_command": "Parancs küldése", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Sikertelen", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Felhasználónév", - "smtp_pass": "Jelszó", - "smtp_from": "Címből", - "smtp_test": "Kapcsolat tesztelése", - "smtp_save": "Konfiguráció mentése", - "smtp_test_success": "Sikeres csatlakozás", - "smtp_test_failed": "A csatlakozás sikertelen", - "no_rules": "Nincsenek konfigurálva riasztási szabályok", - "no_alerts": "Nincsenek riasztások", - "no_commands": "Nem küldtek parancsokat", - "id_payload_required": "Eszközazonosító és hasznos teher szükséges", - "no_commands_sent": "Még nem küldtek parancsot" - }, - "file_transfer": { - "title": "Fájlátvitel", - "transfers": "Transfers", - "new_transfer": "Új átvitel", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Fájl mérete", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Eszköz", - "initiated_by": "kezdeményezte", - "created_at": "Létrehozva:", - "cancel": "Mégse", - "cancel_confirm": "Biztosan megszakítja ezt az átvitelt?", - "download_file": "Fájl letöltése", - "browse_files": "Tallózás a fájlok között", - "select_file": "Válassza a Fájl lehetőséget", - "select_device": "Válassza az Eszköz lehetőséget", - "no_transfers": "Nincs fájlátvitel", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Sikertelen", - "status_cancelled": "Cancelled", - "bytes_transferred": "Átvitt bájtok", - "chunks": "Chunks", - "transfer_started": "Az átvitel megkezdődött", - "transfer_completed": "Az átvitel befejeződött", - "transfer_failed": "Az átvitel nem sikerült", - "transfer_cancelled": "Az átvitel megszakítva", - "max_file_size": "Maximális fájlméret: 4 GB", - "error_too_large": "A fájl túl nagy", - "error_no_device": "Nincs kiválasztott eszköz", - "error_no_file": "Nincs kiválasztva fájl" - }, - "network": { - "title": "Hálózatfigyelés", - "targets": "Monitoring Célok", - "add_target": "Add Target", - "edit_target": "Cél szerkesztése", - "delete_target": "Cél törlése", - "delete_confirm": "Biztosan törli ezt a célt?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Időtúllépés (ms)", - "interval": "Időköz (ms)", - "enabled": "Engedélyezve", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Ellenőrizze az előzményeket", - "stats": "Statistics", - "total_targets": "Összes cél", - "targets_up": "Targets Up", - "targets_down": "Célok le", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Hálózati eszközök", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Portellenőrzés", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Indítsa el a Monitort", - "monitor_stop": "Figyelés leállítása", - "monitor_running": "A monitor fut", - "monitor_stopped": "A monitor leállt", - "no_targets": "Nincsenek konfigurálva megfigyelési célok", - "no_history": "Nincs elérhető ellenőrzési előzmény", - "error_code": "Error", - "status_code": "HTTP állapotkód", - "search_targets": "Célok keresése...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Ellenőrizze az előzményeket", - "name_host_required": "A név és a gazdagép megadása kötelező", - "uptime": "Uptime", - "response_time": "Válaszidő", - "avg_response": "Átlagos válasz", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Válaszidő (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Az elmúlt 24 óra", - "last_7d": "Last 7 days", - "last_30d": "Az elmúlt 30 nap" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP-irányelvek", - "add_policy": "Szabályzat hozzáadása elemre", - "edit_policy": "Szabályzat szerkesztése", - "delete_policy": "Irányelv törlése", - "delete_confirm": "Biztosan törli ezt az irányelvet?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB Készülék", - "rule_type_file": "Fájlművelet", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Szolgáltató azonosítója (VID)", - "pid": "Termékazonosító (PID)", - "serial": "Sorozatszám", - "device_class": "Eszköz osztály", - "drive_type": "Drive Type", - "file_extensions": "Fájlkiterjesztések", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Fájl", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Nincsenek beállítva DLP-házirendek", - "no_events": "Nincsenek DLP-események rögzítve", - "stats": "Statistics", - "total_events": "Összes események", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Fájl események", - "device_id": "Eszközazonosító", - "policy_matched": "Szabályzat egyeztetve", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Összes szabályzat", - "active_policies": "Aktív házirendek", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Irányelvek", - "tab_events": "Events", - "search_policies": "Keresési irányelvek...", - "create_policy": "Házirend létrehozása", - "policy_type": "Házirend típusa", - "scope": "Scope", - "events_count": "Events", - "search_events": "Események keresése...", - "event_time": "Event Time", - "device": "Eszköz", - "policy": "Politika", - "detail": "Detail", - "scope_help": "Vesszővel elválasztva az eszközazonosítókat, vagy hagyja üresen mindenkinek", - "scope_all": "Minden eszköz", - "active": "Active", - "type_file_type": "Fájl típusa", - "type_clipboard": "Vágólap", - "type_screen_share": "Képernyőmegosztás", - "type_file_transfer": "Fájlátvitel", - "policy_desc": "Szabályzat leírása", - "type_usb": "USB" + "sessions": { + "device": "Eszköz", + "operator": "Operátor", + "duration": "Időtartam", + "phase": "Fázis", + "amount": "Összeg" }, "reports": { - "title": "Reports", - "generate": "Jelentés generálása", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Eszköz összefoglaló", - "type_activity": "Tevékenység összefoglaló", - "type_security": "Biztonsági jelentés", - "type_tickets": "Jegyjelentés", - "type_network": "Hálózati jelentés", - "type_inventory": "Leltári jelentés", - "type_alerts": "Riasztási jelentés", - "saved": "Mentett jelentések", - "save_report": "Jelentés mentése", - "delete_report": "Jelentés törlése", - "delete_confirm": "Biztosan törli ezt a mentett jelentést?", - "no_saved": "Nincsenek mentett jelentések", - "report_title": "Title", - "created_by": "Készítette", - "created_at": "Létrehozva:", - "filters": "Filters", - "date_from": "-tól", - "date_to": "Záró dátum", - "device_filter": "Eszközazonosító", - "generated_at": "Létrehozva:", - "section": "Adatok szakasz", - "total_devices": "Összes eszköz", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Platform disztribúció", - "top_applications": "Legnépszerűbb alkalmazások", - "total_active": "Teljes aktív idő", - "total_idle": "Teljes üresjárati idő", - "dlp_stats": "DLP statisztika", - "banned_devices": "Tiltott eszközök", - "audit_logs": "Audit Logs", - "ticket_stats": "Jegystatisztika", - "category_distribution": "Kategória Elosztás", - "priority_distribution": "Elsőbbségi elosztás", - "targets_status": "Célok állapota", - "os_distribution": "OS terjesztése", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Legutóbbi figyelmeztetések", - "tab_generate": "Jelentés generálása", - "tab_saved": "Mentett jelentések", - "type_devices_desc": "Az összes eszköz, platform és állapot áttekintése", - "type_activity_desc": "Alkalmazáshasználat és üresjárati idő összefoglalója", - "type_security_desc": "Tiltási műveletek, DLP-események és auditnaplók", - "type_tickets_desc": "Jegystatisztikák és SLA teljesítmény", - "type_network_desc": "Hálózatfigyelési célok és üzemidő adatok", - "type_inventory_desc": "Hardver- és szoftverleltár összefoglalója", - "type_alerts_desc": "Riasztási szabályok és aktivált riasztási előzmények", - "report_name": "Report Name", - "format": "Format", - "save": "Jelentés mentése", - "preview": "Preview", - "download": "Download", - "delete_saved": "Jelentés törlése", - "raw_json": "Raw JSON" + "session": "Munkamenet", + "summary": "Összefoglaló", + "date": "Dátum" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Bérlő szerkesztése", - "delete_tenant": "Bérlő törlése", - "delete_confirm": "Biztosan törli ezt a bérlőt? Minden eszköz- és felhasználói hozzárendelés el lesz távolítva.", - "name": "Name", - "slug": "Slug", - "contact_name": "Kapcsolattartó neve", - "contact_email": "Kapcsolatfelvételi e-mail", - "max_devices": "Maximális eszközszám", - "max_devices_hint": "0 = korlátlan", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Eszközök", - "users": "Users", - "assign_device": "Eszköz hozzárendelése", - "assign_devices": "Eszközök hozzárendelése", - "remove_device": "Eszköz eltávolítása", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Nincsenek konfigurálva bérlők", - "no_devices": "Nincsenek eszközök hozzárendelve ehhez a bérlőhöz", - "no_users": "Nincsenek felhasználók hozzárendelve ehhez a bérlőhöz", - "stats": "Bérlői statisztika", - "total_devices": "Összes eszköz", - "online_devices": "Online eszközök", - "total_users": "Total Users", - "created_at": "Létrehozva:", - "updated_at": "Frissítve:", - "slug_exists": "A bérlői csiga már létezik", - "total_tenants": "Összes bérlő", - "active_tenants": "Aktív bérlők", - "search": "Bérlők keresése...", - "create_tenant": "Bérlő létrehozása", - "detail": "Bérlő részlete", - "contact": "Contact", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Szervezeti szerződések", + "new": "Csomag hozzárendelése", + "org": "Szervezet", + "package": "Csomag", + "remaining": "Hátralévő percek", + "status": "Állapot", + "actions": "Műveletek", + "suspend": "Felfüggesztés", + "activate": "Aktiválás", + "select_org": "Válasszon szervezetet", + "select_package": "Válasszon csomagot", + "no_orgs": "Nem található szervezet", + "no_packages": "Először hozzon létre csomagot" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Keresés eszközazonosító, gazdagépnév vagy IP-cím alapján...", - "no_registrations": "No registration requests", - "col_device_id": "Eszközazonosító", - "col_hostname": "Állomásnév", - "col_platform": "Platform", - "col_ip": "IP-cím", - "col_version": "Verzió", - "col_status": "Állapot", - "col_requested": "Kérés időpontja", - "col_actions": "Műveletek", - "status_pending": "Függőben", - "status_approved": "Jóváhagyva", - "status_rejected": "Elutasítva", - "approve_btn": "Jóváhagyás", - "approve_confirm": "Biztosan jóváhagyja ezt az eszközt? Megkapja a szerver hitelesítő adatait, és automatikusan csatlakozhat.", - "approved_success": "Az eszköz regisztrációja sikeresen jóváhagyva", - "reject_btn": "Elutasítás", - "reject_title": "Regisztráció elutasítása", - "reject_confirm": "Biztosan elutasítja ezt a regisztrációs kérelmet?", - "reject_reason": "Ok (nem kötelező)", - "reject_reason_placeholder": "Adja meg az elutasítás okát...", - "rejected_success": "Az eszköz regisztrációja elutasítva", - "delete_confirm": "Biztosan törli ezt a regisztrációs rekordot?", - "deleted_success": "Regisztrációs bejegyzés törölve", - "enrollment_title": "Eszköz regisztráció", - "enrollment_subtitle": "Függőben lévő regisztrációs kérelmek a BetterDesk asztali kliensektől", - "enrollment_empty": "Nincsenek függőben lévő beiratkozási kérelmek", - "enrollment_approve": "Jóváhagyás", - "enrollment_reject": "Elutasítás", - "enrollment_display_name": "Megjelenítési név", - "enrollment_display_name_placeholder": "Adja meg az eszköz nevét...", - "enrollment_sync_mode": "Szinkronizálási mód", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Az eszköz regisztrációja jóváhagyva", - "enrollment_rejected_success": "Az eszköz regisztrációja elutasítva", - "approve_title": "Eszköz jóváhagyása", - "field_name": "Eszköz neve", - "field_name_placeholder": "Adjon meg nevet ennek az eszköznek...", - "field_sync_mode": "Szinkronizálási mód", - "sync_standard": "Szabványos — kiegyensúlyozott szinkronizálás", - "sync_silent": "Csendes — minimális telemetria", - "sync_turbo": "Turbó — agresszív szinkronizálás", - "field_tags": "Címkék", - "field_tags_placeholder": "Vesszővel elválasztott címkék (pl. iroda, laptop)...", - "field_tags_existing": "Meglévő címkék", - "field_tag_add_placeholder": "Új címke hozzáadása...", - "field_tag_add_btn": "Hozzáadás", - "field_groups": "Eszközcsoportok", - "field_folder": "Mappa", - "field_folder_none": "Nincs mappa", - "reject_ban_option": "Az eszköz letiltása", - "reject_ban_hint": "Az eszköz blokkolva lesz és nem küldhet új regisztrációs kéréseket.", - "banner_open_mode": "A regisztráció nyitott — az új RustDesk kliensek operátor jóváhagyása nélkül regisztrálnak.", - "banner_locked_mode": "A regisztráció zárolt — csak token-kötött eszközök regisztrálhatnak.", - "enrollment_settings_link": "Regisztrációs beállítások" + "export": { + "csv": "CSV export", + "pdf": "PDF export", + "sessions_csv": "Munkamenetek CSV export" }, - "backup": { - "title": "Biztonsági mentés", - "desc": "Töltse le a teljes biztonsági másolatot a konzol konfigurációjáról, a felhasználókról, a csoportokról és a beállításokról. A Go server társadatok akkor szerepelnek, ha a BetterDesk háttérrendszer aktív.", - "restore_title": "Visszaállítás", - "restore_desc": "A konzolkonfiguráció visszaállításához töltsön fel egy korábban letöltött biztonsági másolatot. Válassza ki a visszaállítani kívánt szakaszokat alább.", - "stat_users": "Felhasználók", - "stat_settings": "Beállítások elemre", - "stat_folders": "Mappák", - "stat_groups": "Csoportok", - "stat_strategies": "Stratégiák", - "stat_backend": "Backend", - "download": "Töltse le a biztonsági másolatot", - "creating": "Biztonsági másolat létrehozása...", - "download_success": "A biztonsági mentés sikeresen letöltve", - "upload": "Biztonsági másolat feltöltése", - "restore_confirm": "Biztosan vissza szeretné állítani ebből a biztonsági másolatból? A kiválasztott szakaszok felülíródnak.", - "restore_success": "A biztonsági mentés sikeresen visszaállítva. Egyes módosításokhoz az oldal újratöltése szükséges.", - "restored": "Visszaállítva", - "skipped": "Kihagyva", - "backup_date": "Biztonsági mentés dátuma", - "opt_settings": "Konzolbeállítások", - "opt_branding": "Márkaépítés / téma", - "opt_folders": "Eszközmappák", - "opt_groups": "Felhasználó- és eszközcsoportok", - "opt_addressbooks": "Címjegyzékek", - "opt_users": "Felhasználói fiókok", - "opt_users_warning": "Pusztító: MINDEN felhasználói fiókot biztonsági másolatra cserél. Lehet, hogy ki vagy jelentkezve.", - "no_file": "Nincs kiválasztva biztonsági mentési fájl", - "invalid_json": "Érvénytelen biztonsági mentési fájl: nem érvényes JSON", - "invalid_format": "Érvénytelen biztonsági mentési fájl: nem BetterDesk biztonsági másolat", - "stat_database": "Adatbázismotor", - "stat_keys": "Szerverkulcsok belefoglalva", - "stat_env": "Környezeti fájl", - "stat_uploads": "Márkaépítési fájlok", - "restart_required": "Egyes visszaállított összetevők (kulcsok / .env / Go-adatbázis) szolgáltatás-újraindítást igényelnek.", - "security_warning": "Ez a biztonsági mentés titkokat tartalmaz. Tárolja biztonságosan és soha ne ossza meg.", - "restore_warning": "Titkok vagy a Go szerver adatbázisának visszaállítása felülírja a szerver identitását és szolgáltatás-újraindítást igényel.", - "opt_database": "Adatbázis (összes tábla)", - "opt_database_hint": "Újraimportálja az összes konzol adatot. Nincs szükség újraindításra.", - "opt_uploads": "Márkaépítési fájlok", - "opt_uploads_hint": "Logók és feltöltött képek.", - "opt_secrets": "Szerverkulcsok és titkok", - "opt_secrets_warning": "Felülírja az Ed25519 szerver identitást, API-kulcsot és munkamenet-titkot. Szolgáltatás-újraindítás szükséges.", - "opt_env": "Környezeti fájl (.env)", - "opt_env_warning": "Felülírja a SESSION_SECRET-et, API-kulcsot, adatbázis DSN-t, portokat és TLS beállításokat. Szolgáltatás-újraindítás szükséges.", - "opt_godb": "Go szerver adatbázis", - "opt_godb_warning": "Felülírja a Go szerver SQLite adatbázisát (csak SQLite backend). Szolgáltatás-újraindítás szükséges." + "report": { + "title": "Munkajelentés", + "subtitle": "Írja le a távoli munkamenet során elvégzett munkát.", + "category": "Kategória", + "ticket_ref": "Jegy hivatkozás", + "summary": "Elvégzett munka", + "skip": "Kihagyás most", + "submit": "Jelentés küldése", + "summary_required": "Az összefoglaló kötelező", + "saved": "Munkajelentés mentve" }, - "cdap": { - "device_detail": "CDAP Készülék", - "loading": "Betöltés...", - "loading_widgets": "Eszközmodulok betöltése...", - "load_error": "Nem sikerült betölteni az eszköz adatait", - "connected": "Csatlakoztatva", - "disconnected": "Szétkapcsolt", - "device_offline_msg": "Az eszköz jelenleg offline állapotban van. Előfordulhat, hogy a modul értékei elavultak.", - "no_widgets": "Nem érhetők el widgetek", - "no_widgets_desc": "Ez az eszköz nem regisztrált egy CDAP jegyzéket widget-definíciókkal.", - "command_log": "Parancsnapló", - "clear_log": "Napló törlése", - "confirm_command": "Erősítse meg a parancsot", - "select_option": "Válassza ki", - "cdap_status": "CDAP-állapot", - "cdap_enabled": "CDAP engedélyezve", - "cdap_disabled": "CDAP letiltva", - "cdap_devices": "CDAP-eszközök", - "cdap_connections": "Aktív kapcsolatok", - "send_command": "Parancs küldése", - "command_sent": "A parancs sikeresen elküldve", - "command_failed": "Nem sikerült elküldeni a parancsot", - "devices_title": "CDAP Eszközök", - "devices_subtitle": "Egyéni eszközalkalmazási protokollon keresztül csatlakoztatott eszközök", - "stat_connected": "Csatlakoztatva", - "stat_port": "Port", - "search_devices": "Eszközök keresése...", - "no_devices": "Nincsenek csatlakoztatott eszközök", - "no_devices_desc": "Jelenleg nincs CDAP eszköz csatlakoztatva. Az eszközök itt jelennek meg, amint csatlakoznak az átjáróhoz.", - "gateway_disabled": "CDAP átjáró letiltva", - "gateway_disabled_desc": "Engedélyezze a CDAP átjárót a CDAP_ENABLED=true beállításával a kiszolgáló konfigurációjában.", - "gateway_active": "Aktív", - "toggle_enable": "CDAP engedélyezése", - "toggle_disable": "CDAP letiltása", - "enabled_restart": "CDAP engedélyezve. A változtatások alkalmazásához a szerver újraindítása szükséges.", - "disabled_restart": "CDAP letiltva. A változtatások alkalmazásához a szerver újraindítása szükséges.", - "widgets": "kütyü", - "type_all": "Összes", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-ügynök", - "type_network": "Hálózat", - "type_camera": "Kamera", - "type_custom": "Egyéni", - "active_alerts": "Aktív riasztások", - "alert_fired": "Riasztás aktiválva", - "alert_cleared": "Figyelmeztetés törölve", - "no_alerts": "Nincsenek aktív figyelmeztetések", - "connect_terminal": "Csatlakoztassa a terminált", - "table_search": "Keresés...", - "just_now": "Épp most", - "terminal_connecting": "Csatlakozás az eszközhöz...", - "terminal_disconnected": "Szétkapcsolt", - "terminal_error": "A terminál csatlakoztatása nem sikerült", - "linked_devices": "Kapcsolt eszközök", - "link_device": "Eszköz összekapcsolása", - "unlink_device": "Szétkapcsolás", - "no_linked_devices": "Nincsenek összekapcsolt eszközök", - "unlink_confirm": "Biztosan leválasztja ezt az eszközt?", - "link_prompt": "Adja meg a társazonosítót az eszközhöz való kapcsoláshoz:", - "connect_desktop": "Csatlakoztassa az asztalt", - "connect_video": "Csatlakozás a Streamhez", - "connect_files": "Tallózás a fájlok között", - "connect_audio": "Audio csatlakoztatása", - "upload_file": "Feltöltés", - "desktop_connecting": "Csatlakozás...", - "video_connecting": "Csatlakozás...", - "files_connecting": "Csatlakozás...", - "audio_connecting": "Csatlakozás...", - "audio_streaming": "Streaming", - "clipboard_in": "Vágólap érkezett", - "clipboard_out": "Vágólap elküldve", - "monitor_select": "Válassza a Monitor lehetőséget", - "keyframe_request": "Kulcskeret kérése", - "quality_auto": "Automatikus minőség" + "empty": { + "packages": "Még nincsenek csomagok. Hozzon létre egyet a fenti gombbal.", + "contracts": "Még nincsenek szervezeti szerződések. Rendeljen csomagot szervezethez.", + "sessions": "Még nincsenek rögzített számlázható munkamenetek.", + "reports": "Még nincsenek beküldött munkajelentések." }, - "desktop": { - "switch_mode": "Asztali mód", - "console_mode": "Konzol mód", - "loading": "Betöltés...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Bezárás", - "widgets_mode": "Widgetek", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Widget hozzáadása", - "remove_widget": "Widget eltávolítása", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurálás", - "search_widgets": "Modulok keresése...", - "cat_monitoring": "Monitoring", - "cat_devices": "Eszközök", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Jegyzeteket írj ide...", - "search_placeholder": "Eszközök, oldalak, beállítások keresése...", - "search_pages": "Pages", - "search_devices": "Eszközök", - "search_no_results": "No results", - "exit_desktop": "Lépjen ki az asztali módból", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Eszköz állapota", - "widget_server_health": "Szerver Info", - "widget_system_stats": "Készülékmérők", - "widget_device_list": "Eszközlista", - "widget_quick_actions": "Gyors műveletek", - "widget_recent_activity": "Legutóbbi tevékenység", - "widget_notes": "Notes", - "widget_network_monitor": "Hálózati monitor", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP Eszközök", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Eszközrács", - "widget_multi_gauge": "Szerver mérők", - "widget_weekly_chart": "Heti tevékenység", - "widget_quick_controls": "Gyors vezérlők", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Csatlakozási statisztika", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Felhasználói munkamenetek", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Nincsenek eszközök", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Nyissa meg", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Állítsa be a URL-t a konfigurációban", - "label_server_uptime": "Szerver üzemidő", - "label_merged_info": "Beolvasztva a Szerverinformáció widgetbe", - "label_with_notes": "Jegyzetekkel", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Összes eszköz", - "label_throughput": "Throughput", - "label_active_relays": "Aktív relék", - "label_total_relayed": "Összesen közvetített", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Eszközök szűrése...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Nincsenek CDAP eszközök", - "action_add_widget": "Widget hozzáadása", - "label_merged_server_info": "Beolvasztva a Szerverinformáció widgetbe", - "wp_images": "Images", - "wp_colors": "Szilárd színek", - "wp_custom_color": "Egyedi szín", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "A háttérképek nincsenek telepítve erre a szerverre.", - "wp_download_hint": "A háttérkép kiválasztásához helyezze el a PNG képeket a nyilvános/háttérképek/ könyvtárba.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Folyamatfigyelő", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Adatbázis statisztika", - "widget_docker_containers": "Docker Konténerek", - "widget_shell_command": "Parancssori utasítás", - "widget_device_map": "Készüléktérkép", - "widget_remote_connect": "Távoli csatlakozás", - "label_no_online": "Nincsenek online eszközök", - "label_no_events": "Ma nincs esemény", - "label_event_title": "Esemény címe:", - "label_no_data": "Nincs adat", - "label_download_speed": "Letöltési sebesség", - "label_latency": "Latency", - "label_server": "Szerver", - "label_run_test": "Run Test", - "label_testing": "Tesztelés...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Nincsenek konténerek", - "label_docker_unavailable": "Docker nem elérhető", - "label_no_command": "Nincs parancs konfigurálva", - "label_no_output": "Még nincs kimenet", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Előbeállítás mentése", - "label_load_preset": "Load Preset", - "label_preset_name": "Előre beállított név:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automatikus rendezés", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 oszlop (egyenlő)", - "label_2col_wide": "2 oszlop (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget csoport", - "ungroup_widgets": "A widgetek csoportosítása", - "group_widgets": "Csoportosítsa a kiválasztott widgeteket", - "snap_layouts": "Illesztési elrendezések", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Pattintsa fel balra", - "snap_top_right": "Pattintsa fel jobbra", - "snap_bottom_left": "Kattints alul-balra", - "snap_bottom_right": "Pattintsa alul-jobbra", - "aero_shake": "Rázza meg a többiek minimalizálása érdekében", - "zone_resize": "Húzza a szegélyt a zónák átméretezéséhez", - "zone_borders": "Húzható zónahatárok", - "app_drawer": "Applications", - "search_apps": "Alkalmazások keresése...", - "edit_shortcuts": "Parancsikonok szerkesztése", - "widgets": "Widgetek", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Meglévő csomag hozzárendelése", + "submit": "Hozzárendelés" }, - "desktop_login": { - "click_to_sign_in": "Kattintson bárhová, vagy nyomjon meg egy billentyűt a bejelentkezéshez", - "username_placeholder": "Felhasználónév", - "password_placeholder": "Jelszó", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Kéttényezős hitelesítés", - "totp_subtitle": "Írja be a hatjegyű kódot a hitelesítő alkalmazásból", - "back_to_login": "Vissza a bejelentkezéshez", - "fill_all_fields": "Kérjük, töltse ki az összes mezőt", - "invalid_credentials": "Érvénytelen felhasználónév vagy jelszó", - "invalid_code": "Érvénytelen ellenőrző kód", - "enter_6_digits": "Írja be mind a 6 számjegyet", - "network_error": "Network error — check your connection", - "session_expired": "A munkamenet lejárt. Kérjük, jelentkezzen be újra." - }, - "tokens": { - "title": "Eszköztokenek", - "subtitle": "Az automatikus eszközkiépítéshez szükséges regisztrációs tokenek kezelése", - "enrollment_mode": "Jelentkezési mód", - "mode_open": "Nyissa meg", - "mode_open_desc": "Bármely eszköz regisztrálhat token nélkül", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Összes token", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Tokenek keresése...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Tömeges generálás", - "create": "Token létrehozása", - "edit": "Token szerkesztése", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Létrehozva", - "actions": "Actions", - "name_placeholder": "pl. Irodai PC köteg", - "max_uses": "Max Uses", - "max_uses_hint": "0 = korlátlan", - "expires_in": "Expires In", - "no_expiration": "Nincs lejárat", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Opcionális megjegyzés erről a tokenről...", - "count": "Count", - "count_range": "A létrehozandó tokenek száma (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token létrehozva", - "tokens_generated": "Tokenek generálva", - "copy_warning": "Másolja ki a tokent most. Nem jelenik meg újra.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Biztosan visszavonja ezt a tokent? A már regisztrált eszközöket ez nem érinti.", - "revoked_success": "A token sikeresen visszavonva", - "no_tokens": "Nem található token", - "expired": "Expired", - "never": "Never", - "save": "Mentés", - "cancel": "Mégse", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Következő", - "prev": "Previous", - "skip": "Skip", - "finish": "Befejezés", - "close": "Bezárás", - "step_of": "{current}/{total}", - "console_sidebar_title": "Navigációs oldalsáv", - "console_sidebar_text": "Az összes modul elérése innen. Kattintson bármelyik ikonra az adott szakaszhoz való navigáláshoz. Az oldalsáv a képernyő méretéhez igazodik.", - "console_expand_title": "Bontsa ki az Oldalsávot", - "console_expand_text": "Kattintson ide az oldalsáv kibontásához, és megtekintheti az összes navigációs elem teljes címkéjét. Kattintson újra az összecsukáshoz.", - "console_search_title": "Gyors keresés", - "console_search_text": "Gyorsan kereshet eszközöket, beállításokat vagy műveleteket. Nyomja meg a Ctrl+K billentyűkombinációt a billentyűparancshoz.", - "console_dashboard_title": "Irányítópult", - "console_dashboard_text": "A központi hub, amely a szerver állapotát, az online eszközöket és a gyors műveleteket mutatja. Tartsa szemmel a fontos mutatókat egy pillantással.", - "console_devices_title": "Eszközkezelés", - "console_devices_text": "Az összes csatlakoztatott eszköz megtekintése, keresése és kezelése. Szűrés állapot szerint, címkék hozzárendelése és egyedi eszközbeállítások konfigurálása.", - "console_settings_title": "Beállítások elemre", - "console_settings_text": "Konfigurálja a kiszolgáló viselkedését, a biztonsági beállításokat, a márkaépítést és a felhasználókezelést. A BetterDesk testreszabása az Ön igényei szerint.", - "console_desktop_title": "Asztali mód", - "console_desktop_text": "Váltson asztali módba egy widgetekkel rendelkező ablakos munkaterülethez. Tökéletes többfeladatos munkavégzéshez és irányítópultok figyeléséhez.", - "console_complete_title": "Készen állsz!", - "console_complete_text": "Fedezze fel az oldalsáv kategóriáit az összes funkció felfedezéséhez. Az útmutató újraindításához bármikor kattintson a Súgó ikonra.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "A felső sáv mutatja az órát, a gyorsvezérlőket és az alkalmazásfiókhoz való hozzáférést. Kattintson a rács ikonra az összes alkalmazás tallózásához.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Nyissa meg az alkalmazásfiókot a kereséshez és a konzolfunkciók lebegő ablakként történő elindításához. Az alkalmazások kategóriák szerint vannak rendezve.", - "desktop_widgets_title": "Widget-műszerfal", - "desktop_widgets_text": "Az Ön személyre szabható munkaterülete. A widgetek élő információkat jelenítenek meg, és gyors hozzáférést biztosítanak a funkciókhoz. Húzza az átrendezéshez.", - "desktop_add_widget_title": "Widgetek hozzáadása", - "desktop_add_widget_text": "Kattintson ide az elérhető widgetek böngészéséhez. Válasszon a figyelőképernyők, eszközlisták, jegyzetek és egyebek közül.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Itt jelennek meg a megnyitott alkalmazások. Kattintson az ablakok fókuszálásához vagy kicsinyítéséhez. Mutasson az ikonokra az alkalmazáscímkék megtekintéséhez.", - "desktop_snap_title": "Illesztési elrendezések", - "desktop_snap_text": "Húzza az ablakokat a képernyő széleihez, hogy a helyükre illessze őket, vagy mutasson a nagyítás gombra az elrendezési beállításokhoz. Próbáld ki az Aero Shake-et!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Az alkalmazások húzható, átméretezhető ablakokban nyílnak meg. Minimalizálás, maximalizálás vagy bezárás a címsorból. Windows réteg a widgetek felett.", - "desktop_search_title": "Gyors keresés", - "desktop_search_text": "Keresés eszközök, oldalak és beállítások között. A keresés azonnali megnyitásához bárhol nyomja meg a Ctrl+K billentyűkombinációt.", - "desktop_complete_title": "Asztali mód készen áll!", - "desktop_complete_text": "Próbálja meg megnyitni az alkalmazásokat a fiókból, és az ablakokat egymás mellé rendezni. Használja a widgetek előbeállításait a gyors irányítópult-elrendezésekhez.", - "devices_folders_title": "Eszköz mappái", - "devices_folders_text": "Rendezze az eszközöket mappákba. Kattintson egy mappára a lista szűréséhez. Kattintson a jobb gombbal az átnevezéshez vagy törléshez.", - "devices_search_title": "Keresés és szűrő", - "devices_search_text": "Keresés azonosító, gazdagépnév vagy platform alapján. Az állapotjelző tabletták segítségével csak online, offline vagy minden eszközt jeleníthet meg.", - "devices_table_title": "Eszközlista", - "devices_table_text": "A részletekért kattintson bármelyik eszközsorra. Használja a jobb oldali kebab menüt gyors műveletekhez, például csatlakozáshoz, címkék szerkesztéséhez vagy törléséhez.", - "devices_complete_title": "Készülék az eszközkezelésre!", - "devices_complete_text": "Húzza az eszközöket a mappák között a rendszerezéshez. Kattintson duplán egy eszközre a részletes panel megnyitásához.", - "settings_tabs_title": "Beállítások Kategóriák", - "settings_tabs_text": "Navigáljon az Általános, Biztonság, Megjelenés és egyéb konfigurációs részek között.", - "settings_content_title": "Konfiguráció", - "settings_content_text": "Minden szakasz speciális szerver- és konzolbeállításokat tartalmaz. A módosítások mentése a Mentés gombra kattintva történik.", - "settings_complete_title": "Beállítások áttekintése", - "settings_complete_text": "Ellenőrizze a 2FA, API kulcsok és a felhasználókezelés biztonsági beállításait. Látogasson el a Megjelenés oldalra a konzol megjelenésének testreszabásához.", - "help": "Súgó és oktatóanyagok", - "tour_console": "Konzoltúra", - "tour_desktop": "Asztali mód bemutatója", - "tour_devices": "Eszközök túra", - "tour_settings": "Beállítások túra", - "reset_all": "Állítsa vissza az összes oktatóanyagot", - "tour_remote": "Távoli munkamenet túra", - "tour_organization": "Szervezet beállítása", - "tour_cdap": "CDAP Áttekintés", - "tour_chat": "A csevegés alapjai", - "remote_toolbar_title": "Távoli eszköztár", - "remote_toolbar_text": "Az eszköztárról elérheti a kijelzővezérlőket, a vágólap szinkronizálását, a speciális billentyűket és a minőségi beállításokat. A teljes képernyő váltása az F11 billentyűvel.", - "remote_canvas_title": "Távoli kijelző", - "remote_canvas_text": "Ez a távoli képernyő. Kattintson a belsejébe a távoli eszköz vezérlésének megkezdéséhez. Az egér és a billentyűzet bevitele automatikusan továbbításra kerül.", - "remote_clipboard_title": "Vágólap szinkronizálás", - "remote_clipboard_text": "Szöveg másolása és beillesztése a számítógép és a távoli eszköz között. Használja a Ctrl+C / Ctrl+V billentyűkombinációt a szokásos módon, miközben a távoli kijelzőre fókuszál.", - "remote_complete_title": "Távoli munkamenet készen áll!", - "remote_complete_text": "Használja az eszköztár gombjait a speciális billentyűkhöz (Ctrl+Alt+Del, PrintScreen) és a monitorváltáshoz. Nyomja meg az Escape billentyűt, vagy kattintson a Leválasztás gombra a munkamenet befejezéséhez.", - "org_overview_title": "Szervezetek", - "org_overview_text": "A szervezetek lehetővé teszik a felhasználók, eszközök és házirendek csoportosítását. Minden szervezetnek saját rendszergazdája, operátorai és beállításai vannak.", - "org_create_title": "Szervezet létrehozása", - "org_create_text": "Kattintson ide új szervezet létrehozásához. Adjon meg egy nevet, csigát és opcionális leírást. Ön lesz az új szervezet tulajdonosa.", - "org_members_title": "Tagok kezelése", - "org_members_text": "Hívjon meg felhasználókat e-mailben, rendeljen hozzá szerepeket (rendszergazda, kezelő, felhasznál��), és kezelje a hozzáférést. A tagok láthatják a szervezetükhöz rendelt eszközöket.", - "org_devices_title": "Eszközök hozzárendelése", - "org_devices_text": "Adjon hozzá eszközöket a szervezethez. Az itt hozzárendelt eszközök öröklik a szervezet irányelveit, és láthatók lesznek a tagjai számára.", - "org_policies_title": "Szervezeti szabályzatok", - "org_policies_text": "Állítson be biztonsági házirendeket, például jelszókövetelményeket, munkamenet-időtúllépéseket, 2FA betartatást és eszközregisztrációs szabályokat a szervezet számára.", - "org_complete_title": "A szervezet beállítása kész!", - "org_complete_text": "Hívja meg csapatát, és rendeljen hozzá eszközöket a szervezeti szintű felügyelet használatához. Az irányelvek minden tagra automatikusan vonatkoznak.", - "cdap_devices_title": "CDAP-eszközök", - "cdap_devices_text": "Tekintse meg az összes csatlakoztatott CDAP-eszközt — IoT-érzékelők, PLC-k, hidak és egyéni ügynökök. A zöld jelzők az élő kapcsolatokat mutatják.", - "cdap_widgets_title": "Widget irányítópult", - "cdap_widgets_text": "A widgetek valós idejű adatokat jelenítenek meg az eszközökről. Mérők, kapcsolók, LED-ek, diagramok — minden widgettípus más adatot jelenít meg.", - "cdap_commands_title": "Parancsok küldése", - "cdap_commands_text": "Lépjen kapcsolatba az eszközökkel parancsok küldésével. A parancsnapló tárolja az előzményeket.", - "cdap_terminal_title": "Eszközterminal", - "cdap_terminal_text": "Nyisson terminálmunkamenetet CDAP-ügynökökhöz haladó diagnosztikához vagy manuális konfiguráláshoz.", - "cdap_complete_title": "CDAP áttekintés kész!", - "cdap_complete_text": "Fedezze fel az eszközwidgeteket, küldjön parancsokat, és használja a terminált vagy a fájlböngészőt a mélyebb kezeléshez.", - "chat_contacts_title": "Kapcsolatok és csoportok", - "chat_contacts_text": "Nézze meg névjegyeit és csevegőcsoportjait. A beszélgetés megnyitásához kattintson bármelyik névjegyre. A zöld pontok az online felhasználókat jelzik.", - "chat_send_title": "Üzenetek küldése", - "chat_send_text": "Írja be az üzenetet, és nyomja meg az Enter billentyűt a küldéshez. Az üzenetek végponttól végpontig titkosítva vannak, ha mindkét fél támogatja az E2E-t.", - "chat_file_title": "Fájlok megosztása", - "chat_file_text": "A fájlok megosztásához kattintson a melléklet ikonra. A fájlok titkosítottak, és legfeljebb 50 MB méretűek lehetnek.", - "chat_complete_title": "Chat kész!", - "chat_complete_text": "Csevegés az üzemeltetőkkel és a végfelhasználókkal valós időben. Hozzon létre csoportokat a csapatkommunikációhoz. Minden üzenet támogatja az olvasási visszaigazolást.", - "disable_tutorials": "Oktatóanyagok letiltása", - "enable_tutorials": "Oktatóanyagok engedélyezése" - }, - "help_request": { - "title": "Segítségkérések", - "subtitle": "Kezelje az asztali kliensektől érkező segítségkéréseket", - "new_request": "Új segítségkérés", - "device": "Eszköz", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Nincsenek segítségkérések", - "notification": "Segítségkérés érkezett innen", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Szervezetek", - "create": "Szervezet létrehozása", - "edit": "Szervezet szerkesztése", - "detail": "Szervezet részletei", - "name": "Name", - "slug": "Slug (URL-biztos)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Eszközök", - "invitations": "Invitations", - "settings": "Beállítások elemre", - "add_user": "Add User", - "assign_device": "Eszköz hozzárendelése", - "create_invitation": "Meghívó létrehozása", - "delete_confirm": "Törli ezt a szervezetet? Ezzel eltávolítja az összes társított felhasználót, eszközt és beállítást.", - "no_orgs": "Még nincsenek szervezetek", - "no_orgs_hint": "Hozza létre első szervezetét az eszközök és felhasználók kezeléséhez.", - "connection_policy": "Csatlakozási szabályzat", - "allow_file_transfer": "Fájlátvitel engedélyezése", - "allow_clipboard": "Vágólap engedélyezése", - "max_session_duration": "Munkamenet maximális időtartama (perc)", - "role_owner": "Owner", - "role_admin": "Adminisztrátor", - "role_operator": "Operator", - "role_user": "Tag", - "username": "Felhasználónév", - "password": "Jelszó", - "display_name": "Megjelenítési név", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Eszközazonosító", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Hozzárendelt felhasználó", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Nincsenek felhasználók ebben a szervezetben.", - "no_devices": "Nincsenek eszközök hozzárendelve ehhez a szervezethez.", - "no_invitations": "Nincsenek meghívók.", - "user_added": "User added", - "user_removed": "Felhasználó eltávolítva", - "user_updated": "Felhasználói szerepkör frissítve", - "device_assigned": "Eszköz hozzárendelve", - "device_unassigned": "Az eszköz hozzárendelése visszavonva", - "invitation_created": "Meghívó létrehozva", - "settings_saved": "Beállítások mentve", - "org_deleted": "Szervezet törölve", - "confirm_remove_user": "Eltávolítja ezt a felhasználót a szervezetből?", - "confirm_unassign_device": "Törli az eszköz hozzárendelését a szervezethez?", - "confirm_delete_org": "Törli ezt a szervezetet és az összes kapcsolódó adatot?", - "edit_role": "Szerep szerkesztése", - "raw_settings": "Nyers beállítások", - "key": "Key", - "value": "Value", - "save": "Beállítások mentése", - "policy_unattended": "Felügyelet nélkül (azonnali)", - "policy_attended": "Részt vett (visszaigazolással)", - "policy_ask": "Always ask", - "expires_hours": "Lejárat (óra)", - "loading_failed": "Nem sikerült betölteni a szervezeti adatokat", - "name_slug_required": "A név és a csiga megadása kötelező", - "org_created": "A szervezet létrehozva", - "org_updated": "A szervezet frissítve", - "create_new_user": "Új létrehozása", - "add_existing_user": "Meglévő hozzáadása", - "none_available": "none", - "select_user": "Felhasználó kiválasztása", - "org_role": "Szervezeti szerep", - "link_user_hint": "A kiválasztott felhasználó a szerverfiók hitelesítő adataival lesz összekapcsolva ezzel a szervezettel.", - "no_available_users": "Az összes szerverfelhasználó már kapcsolódik ehhez a szervezethez.", - "user_linked": "Felhasználó a szervezethez kapcsolva" - }, - "chat": { - "e2e_enabled": "Végponttól végpontig titkosítva", - "e2e_establishing": "Biztonságos csatorna létrehozása...", - "e2e_established": "Biztonságos csatorna létrehozva", - "e2e_unsupported": "Ez a böngésző nem támogatja az E2E titkosítást", - "typing_indicator": "gépelés...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Fájl", - "file_too_large": "A fájl túl nagy (max. 50 MB)", - "file_encrypted": "Titkosított fájlátvitel", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "A biztonsági kulcsok elforgatva", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Csoportok", - "no_contacts": "Még nincsenek elérhetőségek", - "no_groups": "Még nincsenek csoportok", - "no_messages": "Még nincsenek üzenetek", - "no_results": "Nincs találat", - "select_conversation": "A csevegés megkezdéséhez válasszon egy beszélgetést", - "type_message": "Írjon be egy üzenetet...", - "send": "Küldés", - "attach_file": "Fájl csatolása", - "emoji": "Emoji", - "search_messages": "Üzenetek keresése", - "create_group": "Csoport létrehozása", - "group_name": "Csoport neve", - "group_members": "tagok", - "cancel": "Mégse", - "create": "Létrehozása", - "members": "tagjai", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Névjegyek és üzenetek keresése", - "select_conversation_hint": "Az üzenetek megtekintéséhez válasszon egy beszélgetést", - "info": "Info", - "group_name_placeholder": "Írja be a csoport nevét" - }, - "toast": { - "device_connected": "Eszköz csatlakoztatva", - "device_disconnected": "Az eszköz leválasztva", - "session_started": "Elindult a távoli munkamenet", - "session_ended": "A távoli munkamenet véget ért", - "file_upload_complete": "A fájl feltöltése befejeződött", - "settings_saved": "Beállítások mentve", - "error_generic": "Hiba történt", - "connection_lost": "Megszakadt a kapcsolat", - "reconnecting": "Újracsatlakozás..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Adminisztrációs segédprogramok és diagnosztikai eszközök", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Küldés", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Írja be a szöveget...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Go-szerver napló", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Ellenőrizze a gazdagép elérhetőségét és késleltetését", - "tcp_title": "TCP Portellenőrzés", - "tcp_desc": "Tesztelje a TCP port csatlakozását", - "ssl_title": "SSL ellenőr", - "ssl_desc": "Ellenőrizze az SSL/TLS tanúsítvány részleteit", - "http_title": "HTTP állapotfelmérés", - "http_desc": "Ellenőrizze a HTTP végpont állapotát", - "dns_title": "DNS Lookup", - "dns_desc": "A gazdagépnév feloldása IP-címre", - "whois_title": "DNS Records", - "whois_desc": "A, AAAA, MX, TXT, NS rekordok lekérdezése", - "speed_title": "Speed Test", - "speed_desc": "Mérje meg a letöltési sávszélességet", - "run_speed_test": "Futtassa a sebességtesztet", - "wol_title": "Wake-on-LAN", - "wol_desc": "Varázscsomag küldése az eszköz felébresztéséhez", - "wol_sent": "Varázscsomag elküldve", - "hash_title": "Hash generátor", - "hash_desc": "Hozzon létre kriptográfiai kivonatokat", - "password_title": "Jelszógenerátor", - "password_desc": "Biztonságos véletlenszerű jelszó létrehozása", - "jwt_title": "JWT Decoder", - "jwt_desc": "Dekódolja és ellenőrizze a JSON webtokeneket", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 adatok kódolása vagy dekódolása", - "url_title": "URL Encoder", - "url_desc": "Kódolja vagy dekódolja a URL összetevőket", - "processes_title": "Folyamatlista", - "processes_desc": "A futó rendszerfolyamatok megtekintése", - "disk_title": "Disk Usage", - "disk_desc": "A lemezpartíció használatának megtekintése", - "db_title": "Adatbázis statisztika", - "db_desc": "Adatbázistábla statisztikáinak megtekintése", - "docker_title": "Docker Konténerek", - "docker_desc": "Futó Docker tárolók megtekintése", - "logs_title": "Log Viewer", - "logs_desc": "A legutóbbi naplókimenet megtekintése", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Érvényes tól", - "valid_to": "Érvényes", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Nincs adat", - "no_docker": "Nem található Docker konténer, vagy a Docker nem érhető el", - "no_logs": "Nem állnak rendelkezésre naplósorok" - }, - "policies": { - "title": "Szervezeti szabályzatok", - "subtitle": "Kezelje szervezetei biztonsági, kapcsolati és szolgáltatási szabályzatait", - "select_org": "Szervezet", - "select_org_placeholder": "Válasszon egy szervezetet...", - "select_org_first": "Válasszon ki egy szervezetet a házirend-napló megtekintéséhez.", - "configured": "Konfigurálva", - "connection_title": "Csatlakozási szabályzat", - "connection_desc": "A távoli munkamenetek létrehozásának szabályozása", - "connection_mode": "Csatlakozási mód", - "mode_attended": "Részt vett (felhasználói jóváhagyás szükséges)", - "mode_unattended": "Felügyelet nélkül (mindig engedélyezve)", - "mode_ask": "Mindig kérdezzen", - "max_session": "Munkamenet maximális időtartama (perc)", - "idle_lock": "Üresjárati zár időkorlátja (perc)", - "wallpaper_policy": "Háttérkép munkamenet közben", - "wallpaper_show": "Megjelenítés", - "wallpaper_hide_session": "Elrejtés munkamenet közben", - "wallpaper_hide_always": "Mindig elrejtés", - "features_title": "Funkciószabályzat", - "features_desc": "Bizonyos funkciók engedélyezése vagy letiltása az eszközökön", - "allow_file_transfer": "Fájlátvitel engedélyezése", - "allow_clipboard": "A vágólap szinkronizálásának engedélyezése", - "allow_audio": "Audio Streaming engedélyezése", - "allow_recording": "Munkamenet rögzítésének engedélyezése", - "security_title": "Biztonsági politika", - "security_desc": "A szervezeti eszközök biztonsági követelményeinek érvényesítése", - "require_2fa": "2FA szükséges a felügyelet nélküli hozzáféréshez", - "password_min_length": "Minimális jelszó hossza", - "password_require_special": "Különleges karakterek szükségesek", - "password_max_age": "Jelszó maximális életkora (nap, 0=soha)", - "allowed_operators": "Engedélyezett operátori szerepkörök (vesszővel elválasztva)", - "network_title": "Hálózati szabályzat", - "network_desc": "Vezérelje a közvetítő szervereket és a közvetlen kapcsolatokat", - "block_direct_p2p": "Közvetlen P2P blokkolása (force relay)", - "allowed_relays": "Engedélyezett közvetítő szerverek (soronként egy)", - "ip_allowlist": "IP engedélyezési lista (CIDR, soronként egy)", - "update_title": "Irányelv frissítése", - "update_desc": "Irányítsd az automatikus frissítéseket és frissítsd a csatornákat", - "auto_update": "Az automatikus frissítés engedélyezése", - "update_channel": "Csatorna frissítése", - "audit_title": "Szabályzati változások", - "audit_desc": "Legutóbbi irányelvváltozások története", - "no_audit": "Nem rögzítették az irányelvváltozásokat.", - "save_success": "A házirend sikeresen mentve", - "save_failed": "Nem sikerült menteni a házirendet", - "load_failed": "Nem sikerült betölteni a házirendeket", - "block_direct_p2p_hint": "Erre a szervezetre vonatkozik." - }, - "attestation": { - "title": "Eszköz tanúsítvány", - "subtitle": "Figyelje az eszköz azonosságának ellenőrzését és a hardver ujjlenyomatait", - "verified": "Verified", - "pending": "Pending", - "failed": "Sikertelen", - "device_list": "Eszköz igazolási rekordok", - "device_list_desc": "Hardveres ujjlenyomatok és személyazonosság-ellenőrzés állapota", - "col_device": "Eszközazonosító", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Nem találhatók tanúsítványok.", - "verify_success": "Az eszköz ellenőrzöttként megjelölve", - "verify_failed": "Nem sikerült ellenőrizni az eszközt", - "revoke_success": "Az eszköz tanúsítványa visszavonva", - "revoke_failed": "A tanúsítvány visszavonása nem sikerült" - }, - "fleet": { - "title": "Flottakezelés", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Munkafolyamat-építő", - "tab_compliance": "Compliance", - "res_title": "Erőforrás-leképezés", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Hálózati meghajtó", - "res_type_dns": "DNS szerver", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Erőforrás hozzáadása", - "res_name": "Erőforrás neve", - "res_type": "Type", - "res_address": "Cím / Elérési út", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Szervezet", - "res_scope_group": "Csoport", - "res_scope_device": "Eszköz", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Nem található forrás. Kattintson az \"Erőforrás hozzáadása\" gombra, hogy létrehozzon egyet.", - "res_confirm_delete": "Biztosan törli ezt az erőforrást?", - "task_title": "Feladatütemező", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Sikertelen", - "task_search": "Search tasks…", - "task_create": "Feladat létrehozása", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Frissítés", - "task_type_restart": "Indítsa újra", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Eszközazonosítók vagy csoportnevek, vesszővel elválasztva", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Ütemezési érték", - "task_script": "Script / Parancs", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Nem található feladat. A kezdéshez kattintson a „Feladat létrehozása” gombra.", - "task_confirm_delete": "Biztosan törli ezt a feladatot?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Munkafolyamat-szerkesztő", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Mentés", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Jelöljön ki egy csomópontot a tulajdonságainak szerkesztéséhez.", - "builder_node_trigger_manual": "Kézi trigger", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Eseményindító", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Indítsa újra az Svc", - "builder_node_action_file_deploy": "Fájl telepítése", - "builder_node_action_message": "Üzenet küldése", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Figyelmeztetés küldése", - "builder_node_result_chain": "Lánc munkafolyamat", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Munkafolyamat neve:", - "comp_title": "Szoftver megfelelőség", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Eszköz", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Futtassa az automatikus javítást ezen az eszközön?", - "comp_no_data": "Nem állnak rendelkezésre megfelelőségi adatok. A kezdéshez futtasson egy vizsgálatot.", - "save": "Mentés", - "cancel": "Mégse", - "close": "Bezárás", - "edit": "Szerkesztés", - "delete": "Törölje", - "actions": "Actions", - "all_orgs": "Minden szervezet", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Hálózati meghajtó", - "type_dns": "DNS szerver", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Erőforrás hozzáadása", - "edit_resource": "Erőforrás szerkesztése", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Cím / Elérési út", - "scope_org": "Szervezet", - "scope_group": "Csoport", - "scope_device": "Eszköz", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Biztosan törli ezt az elemet?", - "all_statuses": "Minden állapot", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Sikertelen", - "search_tasks": "Search tasks�", - "create_task": "Feladat létrehozása", - "edit_task": "Feladat szerkesztése", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Fájl telepítés", - "task_type_registry": "Registry", - "target_devices": "Céleszközök", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / Parancs", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Betöltés", - "no_output": "Nincs elérhető kimenet", - "error_loading": "Hiba az adatok betöltésekor", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Kézi trigger", - "node_schedule": "Schedule", - "node_event": "Eseményindító", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Indítsa újra az Svc", - "node_file_deploy": "Fájl telepítése", - "node_send_message": "Üzenet küldése", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Figyelmeztetés küldése", - "node_chain": "Lánc munkafolyamat", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Minden szervezet", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Eszköz", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Futtassa az automatikus javítást ezen az eszközön?" - }, - "scaling": { - "title": "Skálázás", - "tab_overview": "Áttekintés", - "tab_relays": "Relay Nodes", - "tab_rules": "Hozzárendelési szabályok", - "tab_capacity": "Kapacitástervezés", - "arch_title": "Hálózati architektúra", - "arch_loading": "Építészeti diagram betöltése...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Összes eszköz", - "stat_active_sessions": "Aktív munkamenetek", - "stat_bandwidth": "Teljes sávszélesség", - "relay_health": "Relé egészség", - "no_relays": "Nincsenek konfigurálva közvetítő csomópontok. Adja hozzá az első közvetítő csomópontot a terhelés elosztásához.", - "relay_search": "Relék keresése...", - "relay_add": "Relé csomópont hozzáadása", - "relay_edit": "Relay Node szerkesztése", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Eszközök", - "col_sessions": "Munkamenetek", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Cél relé", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Engedélyezve", - "status_disabled": "Letiltva", - "confirm_delete_relay": "Biztosan törli ezt a közvetítő csomópontot?", - "confirm_delete_rule": "Biztosan törli ezt a hozzárendelési szabályt?", - "rules_hint": "A hozzárendelési szabályok határozzák meg, hogy melyik továbbítószerver kezeli az adott eszközcsoportokat. A szabályokat a rendszer prioritás szerint értékeli (a legalacsonyabb előbb).", - "rule_add": "Add Rule", - "rule_edit": "Szabály szerkesztése", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Eszközcsoport", - "match_tag": "Eszközcímke", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Mester szerver", - "fallback_nearest": "Legközelebbi relé", - "relay_max_sessions": "Maximális átjátszó munkamenetek", - "relay_max_bandwidth": "Maximális sávszélesség (Mbps)", - "cap_tiers": "Kapacitásszintek", - "cap_loading": "Kapacitásadatok betöltése...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Nem állnak rendelkezésre ajánlások.", - "cap_planning": "Infrastruktúra tervezés", - "cap_config": "Konfiguráció", - "cap_max_devices": "Maximális eszközök", - "cap_max_sessions": "Maximális munkamenetek", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Eszköz kapacitása", - "cap_tier_sessions": "Munkamenet kapacitás", - "cap_tier_bandwidth": "Sávszélesség kapacitás", - "cap_single_sqlite": "Egyszerver (SQLite)", - "cap_single_pg": "Egyszerver (PostgreSQL)", - "cap_master_3": "Master + 3 relé", - "cap_master_10": "Master + 10 relé", - "rec_no_relays": "Nincsenek konfigurálva közvetítő csomópontok. Fontolja meg a relé csomópontok hozzáadását a jobb teljesítmény és redundancia érdekében.", - "rec_devices_high": "Az eszköz kihasználtsága magas. Fontolja meg további közvetítő csomópontok hozzáadását a terhelés elosztásához.", - "rec_sessions_high": "A munkamenet kapacitása a határához közeledik. Fontolja meg a közvetítő infrastruktúra frissítését.", - "rec_cpu_high": "Egyes relé csomópontok magas CPU-használatról számolnak be. Fontolja meg a terheléselosztást vagy a kapacitás bővítését.", - "rec_all_good": "Minden rendszer normál paramétereken belül működik. Nincs szükség teendőre.", - "save": "Mentés", - "cancel": "Mégse", - "edit": "Szerkesztés", - "delete": "Törölje", - "close": "Bezárás", - "no_rules": "Nincsenek hozzárendelési szabályok.", - "relays_info_banner": "Ez a lista tájékoztató jellegű. Az ügyfelek által ténylegesen használt közvetítőkiszolgálók a RELAY_SERVERS környezeti változón keresztül vannak konfigurálva a BetterDesk szerveren.", - "relay_name_address_required": "Név és cím megadása kötelező.", - "relay_save_failed": "Nem sikerült menteni a közvetítő csomópontot.", - "relay_delete_failed": "Nem sikerült törölni a közvetítő csomópontot.", - "relay_saved": "Relé csomópont mentve.", - "relay_deleted": "Relé csomópont törölve.", - "rule_name_value_required": "A szabály neve és egyezési értéke kötelező.", - "rule_save_failed": "Nem sikerült menteni a szabályt.", - "rule_delete_failed": "Nem sikerült törölni a szabályt.", - "rule_saved": "Szabály mentve.", - "rule_deleted": "Szabály törölve." - }, - "cross_platform": { - "title": "Platformok közötti kompatibilitás", - "tab_matrix": "Kompatibilitási mátrix", - "tab_distribution": "Eloszlás", - "tab_protocols": "Protokollok", - "tab_limitations": "Korlátozások", - "matrix_hint": "Funkciótámogató mátrix az összes támogatott platformon. Zöld = teljes támogatás, sárga = részleges, szürke = nem elérhető, kék = tervezett.", - "col_feature": "Funkció", - "legend_full": "Teljes támogatás", - "legend_partial": "Részleges támogatás", - "legend_none": "Nem elérhető", - "legend_planned": "Tervezett", - "platform_breakdown": "Platform lebontás", - "arch_breakdown": "Építészeti bontás", - "version_breakdown": "Verzióbontás", - "summary": "Összefoglalás", - "total_devices": "Összes eszköz", - "unique_platforms": "Platformok", - "unique_archs": "Architektúrák", - "unique_versions": "Kliens verziók", - "no_devices": "Még nincs regisztrált eszköz.", - "protocols_hint": "A protokollképesség egyeztetése biztosítja, hogy minden ügyfél csak az általa támogatott szolgáltatásokat kapja meg. A szerver a bejelentett képességek alapján alkalmazkodik a viselkedéshez.", - "capability_negotiation": "Képességi tárgyalás", - "codec_support": "Kodek támogatás (online eszközök)", - "feature_support": "Funkciótámogatás (online eszközök)", - "no_codec_data": "Nem érhetők el kodekadatok az online eszközökről.", - "no_feature_data": "Online eszközökről nem érhetők el funkcióadatok.", - "protobuf_schema": "ClientCapabilities Protobuf séma", - "diagram_client": "Kliens", - "diagram_server": "BetterDesk szerver", - "diagram_peer": "Távoli Peer", - "limitations_hint": "Minden platformnak sajátos korlátozásai vannak, amelyek befolyásolják az elérhető funkciókat. Tekintse át ezeket a korlátozásokat a telepítések tervezésekor.", - "feat_desktop_client": "Asztali kliens", - "feat_background_agent": "Háttér ügynök", - "feat_remote_target": "Távoli célpont", - "feat_screen_capture": "Képernyőfelvétel", - "feat_input_injection": "Bemeneti befecskendezés", - "feat_file_transfer": "Fájlátvitel", - "feat_clipboard_sync": "Vágólap szinkronizálás", - "feat_audio_streaming": "Hangfolyam továbbítása", - "feat_chat": "Chat", - "feat_h264": "H.264 kodek", - "feat_vp9": "VP9 kodek", - "feat_av1": "AV1 kodek", - "feat_cdap_agent": "CDAP agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webböngésző", - "platform_chromeos": "ChromeOS", - "status_production": "Termelés", - "status_testing": "Tesztelés", - "status_planned": "Tervezett", - "status_limited": "Korlátozott", - "status_experimental": "Kísérleti", - "limit_win_uac": "UAC magasság szükséges a szolgáltatás telepítéséhez és a biztonságos asztali számítógépeken történő bevitelhez.", - "limit_win_service": "NSSM szolgáltatásként fut; a telepítéshez rendszergazdai jogosultság szükséges.", - "limit_win_firewall": "Windows A tűzfalszabályoknak engedélyezniük kell a 21115-21119-es portokat a közvetítő kapcsolatokhoz.", - "limit_linux_wayland": "A Wayland összeállítók korlátozzák a programozott képernyőrögzítést; API PipeWire portál szükséges.", - "limit_linux_pipewire": "A hangrögzítéshez PipeWire szükséges; A PulseAudio tartalék elérhető, de korlátozott.", - "limit_linux_arm": "ARM64 buildek állnak rendelkezésre; egyes kodekek szoftveres dekódolást használhatnak (lassabb).", - "limit_mac_screen": "Képernyőrögzítési engedély szükséges a Rendszerbeállítások > Adatvédelem és biztonság menüpontban.", - "limit_mac_signing": "Az ügynököt Apple Developer ID-vel kell aláírni a terjesztéshez.", - "limit_mac_notarize": "A macOS Gatekeeper (nem App Store terjesztés) használatához közjegyzői igazolás szükséges.", - "limit_android_projection": "A MediaProjection API minden képernyőrögzítési munkamenethez felhasználói hozzájárulást igényel.", - "limit_android_accessibility": "Az adatbevitelhez AccessibilityService szükséges; korlátozott Android 14+.", - "limit_android_battery": "A háttérszolgáltatást a szunyókálás mód korlátozza; szükség lehet akkumulátor-optimalizálási mentességre.", - "limit_ios_capture": "Az Apple tiltja a háttérben történő képernyőrögzítést; csak megtekintő mód támogatott.", - "limit_ios_input": "Bemeneti befecskendezés nem megengedett; csak távoli megtekintés és csevegés.", - "limit_ios_appstore": "Csak az App Store-on keresztül történő terjesztés; TestFlight béta teszteléshez.", - "limit_web_https": "WebCodecs A API és a WebRTC HTTPS-t igényel; A HTTP visszaesik a JMuxerre (korlátozott kodekek).", - "limit_web_codec": "A kodek támogatása a böngészőtől függ; A H.264 széles körben támogatott, a VP9/AV1 változó.", - "limit_web_performance": "A teljesítményt korlátozza a böngésző homokozója; nincs közvetlen hardveres gyorsítás.", - "limit_chrome_crostini": "Teljes ügynök-támogatás csak a Crostini Linux tárolón belül.", - "limit_chrome_pwa": "A PWA mód csak webes funkciókat biztosít; nincs natív ügynök képessége.", - "limit_chrome_input": "A bemeneti befecskendezés nem támogatott a Crostini-tartályon kívül.", - "feat_session_recording": "Munkamenet rögzítés", - "feat_multi_monitor": "Több monitor", - "feat_unattended_access": "Felügyelet nélküli hozzáférés", - "limit_win_virtual_account": "Szolgáltatáse laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Szolgáltatáse laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Biztonsági audit", - "tab_overview": "Áttekintés", - "tab_events": "Események ellenőrzése", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Biztonsági pontszám", - "failed_logins": "Sikertelen bejelentkezés (24 óra)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Régi kulcsok (>90 nap)", - "security_checks": "Biztonsági ellenőrzések", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Biztonságos", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "all_events": "All Events", - "event_login_failed": "Bejelentkezés sikertelen", - "event_login_success": "Sikeres bejelentkezés", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfig megváltozott", - "event_key_created": "Kulcs létrehozva", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Nem található ellenőrzési esemény.", - "hardening_hint": "Biztonsági szigorítási prioritások a BetterDesk telepítéséhez. A tételek sorrendje súlyosság szerint történik.", - "no_hardening": "Keményítő elemek nem állnak rendelkezésre.", - "vuln_hint": "A függőségi sérülékenység vizsgálatának eredménye. Futtassa rendszeresen az npm auditot a függőségek biztonságának megőrzése érdekében.", - "no_vulns": "Nem található sebezhetőség. A függőségei biztonságban vannak." - }, - "languages": { - "title": "Nyelvkezelés", - "total_languages": "Összes nyelv", - "fully_translated": "Teljesen lefordítva", - "needs_review": "Felülvizsgálatra szorul", - "reference_keys": "Referenciakulcsok", - "no_languages": "Nem található nyelvi fájl.", - "badge_reference": "Reference", - "badge_review": "Felülvizsgálatra szorul", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Nézet hiányzik", - "fix_missing": "Fix Missing", - "missing_keys_for": "Hiányzó kulcsok ehhez", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "és {n} továbbiak...", - "all_keys_present": "Minden kulcs megvan!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "A(z) {code} hiányzó kulcsait kézzel kell lefordítani.", - "no_fix_needed": "Nincs hiányzó kulcs a javításhoz." - }, - "resource_control": { - "title": "Erőforrás-szabályozás", - "tab_overview": "Áttekintés", - "tab_usb": "USB Control", - "tab_optical": "Optikai meghajtók", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Erőforráskvóták", - "compliance_by_category": "Megfelelés kategóriánként", - "device_compliance": "Az eszköz megfelelősége", - "search_devices": "Eszközök keresése...", - "col_device": "Eszköz", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Összes eszköz", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Megfelelési arány", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurálás", - "no_devices": "Nem találhatók eszközök", - "usb_title": "USB Portvezérlés", - "usb_hint": "A USB tárolóeszköz-hozzáférés szabályozása a kiválasztott eszközhöz vagy a szervezetszintű alapértelmezett házirendhez.", - "usb_storage_policy": "USB Tárolási szabályzat", - "usb_whitelist": "Engedélyezőlistán szereplő eszközök (soronként egy)", - "usb_whitelist_hint": "VID:PID (pl. 0781:5583)", - "usb_audit_log": "A USB eszközkapcsolatok naplózása", - "optical_title": "Optikai meghajtó vezérlés", - "optical_hint": "A CD/DVD/Blu-ray meghajtó hozzáférésének szabályozása a kiválasztott eszközhöz.", - "optical_policy": "Optikai meghajtó házirend", - "optical_audit_log": "Az optikai meghajtó hozzáférésének naplózása", - "monitors_title": "Monitorkezelés", - "monitors_hint": "Konfigurálja a monitor beállításait, beleértve a maximális számot, a felbontás érvényesítését, a fényerőt és az energiaellátás ütemezését.", - "monitors_max_count": "Maximális monitorok (0 = korlátlan)", - "monitors_max_hint": "A 0 azt jelenti, hogy nincs határ", - "monitors_resolution": "Max felbontás", - "monitors_brightness": "Fényerőkorlát", - "monitors_power_schedule": "Energiagazdálkodási ütemterv", - "monitors_power_hint": "pl. off:22:00-06:00", - "disks_title": "Lemezhozzáférés vezérlése", - "disks_hint": "Konfigurálja a lemezelérési házirendeket, beleértve a csak olvashat�� módot, a titkosítás végrehajtását és a partíció láthatóságát.", - "disks_readonly": "Csak olvasható mód kényszerítése", - "disks_encryption": "Titkosítás szükséges (BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T. engedélyezése megfigyelés", - "disks_hidden": "Rejtett partíciók", - "disks_hidden_hint": "Vesszővel elválasztott meghajtóbetűjelek vagy csatlakoztatási pontok", - "quotas_title": "Erőforráskvóták", - "quotas_hint": "Felhasználónkénti CPU, RAM, sávszélesség és lemezkvóták beállítása a kiválasztott eszközhöz.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Sávszélesség-korlát (Mbps)", - "quotas_bandwidth_hint": "0 = korlátlan", - "quotas_disk_quota": "Lemezkvóta (GB)", - "quotas_disk_hint": "0 = korlátlan", - "quotas_process_whitelist": "Folyamat engedélyezőlista (soronként egy)", - "quotas_process_hint": "pl. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Csak fehérlista", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Szoftverfrissítések", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Telepített verzió", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Ellenőrizze a frissítéseket", - "checking": "Checking…", - "up_to_date": "Naprakész", - "update_available": "Frissítés elérhető", - "changelog": "Release Notes", - "no_changelog": "Nem állnak rendelkezésre kiadási megjegyzések", - "files_changed": "A fájlok megváltoztak", - "files": "fájlokat", - "changes_unavailable": "Nem sikerült betölteni a fájlmódosítási listát. Továbbra is telepítheti a frissítést.", - "create_backup": "Frissítés előtt készítsen biztonsági másolatot", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Frissítés telepítése…", - "creating_backup": "Biztonsági másolat létrehozása…", - "downloading": "Fájlok letöltése…", - "install_success": "A frissítés sikeresen telepítve. A konzol újraindul…", - "install_failed": "A frissítés telepítése sikertelen", - "restarting": "Várakozás a konzol újraindítására…", - "restart_complete": "A konzol sikeresen újraindult", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Nincs kiválasztva frissítési verzió. Először ellenőrizze a frissítéseket.", - "backups_title": "Biztonsági másolatok frissítése", - "backups_desc": "Frissítés előtti biztonsági mentések, amelyek minden frissítés előtt automatikusan jönnek létre", - "no_backups": "Nem található frissítési biztonsági másolat", - "restore": "Restore", - "restore_confirm": "Biztosan vissza szeretné állítani ebből a biztonsági másolatból? A módosított fájlok felülíródnak.", - "restore_success": "A biztonsági mentés sikeresen visszaállítva. A konzol újraindul…", - "baseline_set": "Alapvonal készlet", - "commits_behind": "mögött követi el", - "total_files": "Összes fájl", - "applied": "Applied", - "failed": "Sikertelen", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Szerverkomponens", - "component_agent": "Agent", - "component_scripts": "Szkriptek és Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "A Go ellenőrzése…", - "go_not_found": "Go nincs telepítve", - "go_check_failed": "Nem sikerült ellenőrizni a Go elérhetőségét", - "server_building": "Go server fordítása… Ez eltarthat néhány percig.", - "server_built": "A szerver bináris fájlja lefordítva", - "server_build_failed": "A szerver fordítása nem sikerült", - "server_stale_title": "A szerver bináris fájlja elavult", - "server_stale_desc": "A Go server forrás frissítése megtörtént, de a futó bináris fájl nem épült újra. Építse újra most a biztonsági és a könyvtári frissítések alkalmazásához.", - "rebuild_server": "Szerver bináris újraépítése", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "A szerver bináris újraépítése és újraindítása", - "rebuild_server_failed": "A szerver bináris újraépítése nem sikerült", - "server_deployed": "Bináris szerver telepítve", - "server_deploy_failed": "A szerver telepítése sikertelen", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Szerverforrás letöltése…", - "delete": "Törölje", - "delete_confirm": "Véglegesen törli a {name} biztonsági másolatot? Ezt nem lehet visszavonni.", - "delete_success": "Biztonsági másolat törölve", - "delete_failed": "Nem sikerült törölni a biztonsági másolatot", - "retention_label": "Tartson N legutóbbi biztonsági másolatot", - "retention_hint": "A régebbi biztonsági másolatok minden frissítés után automatikusan törlődnek. Használja a 0-t az összes biztonsági másolat megtartásához.", - "retention_saved": "A megőrzési beállítás mentve", - "retention_invalid": "A megőrzésnek 0 és 1000 közötti egész számnak kell lennie", - "retention_required_for_prune": "Először állítson be 0-nál nagyobb megőrzési értéket", - "prune_now": "Apply now", - "prune_confirm": "Csak a {n} legfrissebb biztonsági mentéseit tartja meg, a többit pedig törli?", - "prune_done": "Levágott {n} biztonsági mentés(ek)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Frissítési módszer", - "strategy_download": "Előre elkészített bináris letöltés", - "strategy_compile": "Forrásból fordítsd le", - "both_available": "Letöltés és fordítás", - "download_available": "Letöltés elérhető", - "no_method": "Nincs frissítési módszer", - "no_release": "No release", - "available": "Elérhető", - "server_downloading": "Szerver bináris fájl letöltése…", - "server_downloaded": "A szerver bináris fájlja letöltve", - "server_download_failed": "A szerver bináris letöltése nem sikerült", - "server_download_note": "Egy előre elkészített bináris letöltésre kerül a GitHub Releases oldalról. Ez általában kevesebb mint egy percet vesz igénybe.", - "install_go_hint": "Telepítse a Go-t a https://go.dev/dl/ webhelyről a fordítás engedélyezéséhez, vagy tegyen közzé egy kiadást előre beépített binárisokkal", - "strategy_install_go": "Automatikus telepítés Go és fordítás", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Kész az automatikus újraépítés", - "toolchain_ready": "Szerszámlánc telepítve", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Go eszközlánc letöltése…", - "toolchain_failed": "A Go toolchain telepítése sikertelen", - "modal_title": "Frissítés telepítése", - "modal_done_title": "Frissítés kész", - "modal_close": "Bezárás", - "modal_reload_now": "Töltsd újra a konzolt", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konzol fájlok", - "phase_server": "Szerverfázis", - "phase_restart": "Indítsa újra", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Biztonsági mentés kihagyva (felhasználói választásonként)", - "server_skipped": "Go server kihagyva", - "server_not_selected": "Go server not selected", - "server_processing": "Go server frissítés feldolgozása…", - "no_restart_needed": "Nincs szükség újraindításra", - "complete": "Frissítés alkalmazva", - "complete_summary": "A frissítés sikeresen alkalmazásra került.", - "complete_with_errors": "A frissítés befejeződött, de néhány lépés nem sikerült. Lásd alább a részleteket.", - "modal_done_with_errors_title": "A frissítés hibákkal befejeződött", - "console_will_restart": "A konzol folyamata most újraindul…", - "restart_complete_msg": "A konzol újraindult. Kattintson az újratöltés gombra az új verzió betöltéséhez. Az oldal 8 másodpercen belül automatikusan újratöltődik.", - "refresh_recommended": "A statikus elemek megváltoztak – az új felhasználói felület megtekintéséhez töltse be újra az oldalt.", - "confirm_title": "Frissítés alkalmazása", - "confirm_with_backup": "A frissítés előtti biztonsági másolat automatikusan létrejön.", - "confirm_no_backup": "Nem készül biztonsági másolat (saját felelősségére folytassa)." - }, - "permissions": { - "title": "Engedélyek", - "subtitle": "Szerepalapú engedélyek és egyéni felülírások kezelése", - "info_title": "Hogyan működnek az engedélyek", - "info_desc": "Minden szerepkör alapértelmezett engedélyekkel rendelkezik. Szerepkörenként egyéni engedélyeket adhat hozzá vagy távolíthat el, ha lent váltja őket. Az egyéni felülírások kiemelve jelennek meg, és bármikor visszaállíthatók az alapértelmezettre.", - "select_role": "Válasszon szerepet", - "select_role_placeholder": "Válassz egy szerepet...", - "reset_overrides": "Állítsa vissza az összes felülírást", - "granted": "Megadva", - "overrides": "Felülbírálatok", - "level": "Szint", - "super_admin_tag": "Teljes hozzáférés", - "server_level_tag": "Szerver szintű", - "custom": "Egyéni", - "default": "Alapértelmezett", - "revert": "Visszaállítás az alapértelmezettre", - "saved": "Az engedély frissítve", - "reverted": "Visszaállítva az alapértelmezettre", - "all_reverted": "Minden felülírás visszaállt", - "confirm_reset": "Visszaállítja a szerepkör összes egyéni felülírását az alapértelmezettre?", - "empty_title": "Válasszon egy szerepet", - "empty_desc": "Válasszon egy szerepet a fenti legördülő menüből, hogy megtekinthesse és kezelhesse az engedélyeit.", - "locked_title": "Szuper adminisztrátor", - "locked_desc": "A Super Admin alapértelmezés szerint minden jogosultsággal rendelkezik, és nem testreszabható.", - "cat_device": "Eszközök", - "cat_user": "Felhasználók", - "cat_server": "Szerver", - "cat_org": "Szervezetek", - "cat_audit": "Naplózás és ellenőrzés", - "cat_cdap": "CDAP", - "cat_enrollment": "Regisztráció", - "cat_chat": "Chat", - "cat_branding": "Márkaépítés", - "perm_device_view": "Eszközök megtekintése", - "perm_device_connect": "Csatlakozás eszközökhöz", - "perm_device_edit": "Szerkessze az eszközöket", - "perm_device_delete": "Eszközök törlése", - "perm_device_ban": "Eszközök kitiltása / tiltásának feloldása", - "perm_device_change_id": "Eszközazonosító módosítása", - "perm_user_view": "Felhasználók megtekintése", - "perm_user_create": "Felhasználók létrehozása", - "perm_user_edit": "Felhasználók szerkesztése", - "perm_user_delete": "Felhasználók törlése", - "perm_server_config": "Szerver konfigurációja", - "perm_server_keys": "A API kulcsok kezelése", - "perm_org_create": "Szervezetek létrehozása", - "perm_org_edit": "Szervezetek szerkesztése", - "perm_org_delete": "Szervezetek törlése", - "perm_org_manage_users": "Szervezeti felhasználók kezelése", - "perm_org_manage_devices": "Szervezeti eszközök kezelése", - "perm_audit_view": "Tekintse meg az ellenőrzési naplókat", - "perm_metrics_view": "Mutatók megtekintése", - "perm_blocklist_edit": "Szerkessze a tiltólistát", - "perm_cdap_view": "CDAP eszközök megtekintése", - "perm_cdap_command": "CDAP parancsok küldése", - "perm_cdap_terminal": "CDAP terminál hozzáférés", - "perm_cdap_files": "CDAP fájlhozzáférés", - "perm_enrollment_manage": "Beiratkozás kezelése", - "perm_enrollment_approve": "Beiratkozás jóváhagyása", - "perm_chat_access": "Chat hozzáférés", - "perm_branding_edit": "Márkajelzés szerkesztése", - "perm_server_attestation": "Szerver teljesítmény tanúsítás" - }, - "notifications": { - "title": "Értesítések", - "empty": "Nincsenek új értesítések", - "mark_all_read": "Jelölje meg az összeset olvasottnak", - "see_all": "Tekintse meg az összes segítségkérést", - "help_request": "Segítségkérés", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Állítsa be a konzolt látási, mozgási és olvasási igényeihez.", - "close": "Zárja be a kisegítő lehetőségek menüt", - "profiles": "Gyors profilok", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Nagyobb szöveg, erős kontraszt és fókusz.", - "profile_dyslexia": "Olvasási kényelem", - "profile_dyslexia_hint": "Olvasható betűtípus és nagyobb térköz.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Csökkenti az átmeneteket és szünetelteti az animációt.", - "profile_color_assist": "Szín támogatás", - "profile_color_assist_hint": "Színszűrő, címkék és kiemelt hivatkozások.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Betűköz", - "word_spacing": "Szóköz", - "readable_font": "Olvasható betűtípus", - "readable_font_hint": "Széles, ismerős betűformákat használ.", - "dyslexia_spacing": "Diszlexia távolság", - "dyslexia_spacing_hint": "Extra szóközt ad a hosszú szöveghez.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Nagy kontrasztú sötét", - "contrast_high_light": "Nagy kontrasztú fény", - "contrast_yellow_black": "Sárga a feketén", - "color_filter": "Színlátó szűrő", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Színtelítettség", - "underline_links": "A hivatkozások aláhúzása", - "underline_links_hint": "Láthatóvá teszi a linkeket anélkül, hogy a színekre támaszkodna.", - "highlight_links": "Műveletek kiemelése", - "highlight_links_hint": "Körvonalazza a hivatkozásokat és a gombokat.", - "highlight_headings": "Címsorok kiemelése", - "highlight_headings_hint": "Színsávval jelöli meg a szakaszcímeket.", - "hide_media": "Dim media", - "hide_media_hint": "Elsötétíti a képeket, videókat és vásznakat.", - "interaction": "Interaction", - "strong_focus": "Erős fókusz", - "strong_focus_hint": "A billentyűzet nagyméretű fókuszgyűrűjét mutatja.", - "large_cursor": "Nagy kurzor", - "large_cursor_hint": "Nagyobb, nagy kontrasztú mutatót használ.", - "reduce_motion": "Csökkentse a mozgást", - "reduce_motion_hint": "Lerövidíti az átmeneteket és egyenletes görgetést.", - "pause_animations": "Animációk szüneteltetése", - "pause_animations_hint": "Leállítja a vizuális mozgás hurkolását.", - "reading_guide": "Olvasási útmutató", - "reading_guide_hint": "Világos vonallal követi a mutatót.", - "reading_mask": "Olvasó maszk", - "reading_mask_hint": "Elhalványítja a tartalmat a mutató felett és alatt.", - "preview": "Preview", - "preview_title": "Kezelői munkaterület előnézete", - "preview_text": "A menü bezárása előtt ellenőrizze, hogy a szöveg, a hivatkozások, a vezérlőelemek és az állapotcímkék jól olvashatók-e.", - "preview_link": "Az eszköz részletei link", - "preview_status": "Online", - "preview_button": "Elsődleges intézkedés", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Kiszolgáló-kezelés", - "subtitle": "Pilótafülke-szerű vezérlősík a BetterDesk konzolgazda számára (BETA).", - "beta_tooltip": "Béta funkció – aktív fejlesztés alatt.", - "notice_title": "Béta funkció", - "notice_body": "Ezek az eszközök azon a gazdagépen futnak, ahol a BetterDesk konzolfolyamat él. Minden műveletet auditálnak. A funkciók köre a jövőbeli kiadásokban bővülni fog.", - "tab_overview": "Áttekintés", - "tab_terminal": "Terminál", - "tab_files": "Fájlok", - "tab_services": "Szolgáltatások", - "cpu": "CPU", - "memory": "Memória", - "load": "Terhelési átlag", - "disks": "Lemezek", - "history": "Előzmények (utolsó 60 minta)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Üzemidő", - "no_disks": "Nem állnak rendelkezésre lemezadatok", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY elérhető", - "term_connect": "Csatlakozás", - "term_disconnect": "Lecsatlakozás", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Csatlakozási hiba", - "term_warning": "A parancsok a konzolfolyamat tulajdonosaként futnak. Adjon hozzá egy sudoers szabályt a magasság engedélyezéséhez.", - "term_hint": "Tipp: írja be a `sudo -i` parancsot az eszkalációhoz (sudoers konfigurációja szükséges).", - "term_lib_failed": "Nem sikerült betölteni a terminálkönyvtárat", - "files_up": "Egy szinttel feljebb", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Üres könyvtár", - "files_error": "Nem sikerült listázni a könyvtárat", - "read_failed": "Nem sikerült beolvasni a fájlt", - "save_failed": "Nem sikerült menteni a fájlt", - "rename_failed": "Az átnevezés nem sikerült", - "delete_failed": "A törlés nem sikerült", - "delete_confirm": "Törli ezt a bejegyzést?", - "mkdir_prompt": "Új mappanév:", - "mkdir_failed": "Nem sikerült létrehozni a mappát", - "file_saved": "A fájl mentve", - "binary_warn": "Bináris fájl – csak előnézet", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Keresési szolgáltatások…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Nem található szolgáltatások", - "svc_load_failed": "Nem sikerült betölteni a szolgáltatásokat", - "svc_action_failed": "A művelet nem sikerült", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Indítsa újra", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Töltse le a BetterDesk ügynököt", - "choose_platform": "Válassza ki a platformját", - "choose_platform_hint": "Válassza ki az operációs rendszerének megfelelő telepítőt.", - "download": "Letöltés", - "building": "Épület…", - "failed": "Az építés nem sikerült", - "need_help": "Segítségre van szüksége?", - "powered_by": "Powered by" - }, - "server_attestation": { - "title": "Szerver tanúsítás", - "subtitle": "Teljesítménybenchmark, amely meghatározza az egyidejű távoli kapcsolatok kapacitását 80%-os CPU, RAM és lemez küszöbértéknél.", - "warning_title": "Terhelésteszt", - "warning_body": "A benchmark párhuzamos WebSocket-kapcsolatokat szimulál a jel- és relészerverekhez. Csúcsidőn kívül futtassa — ez a teszt terheli a produkciót.", - "run_benchmark": "Benchmark futtatása", - "abort": "Megszakítás", - "download_report": "JSON-jelentés letöltése", - "last_test": "Utolsó teszt", - "no_test_yet": "Még nem futottak le benchmarkok", - "max_connections": "Maximum kapcsolatok", - "threshold_80": "80%-os küszöb — végső mérések", - "disk": "Lemez", - "ramp_chart": "Terhelési rámpadiagram", - "connections": "Kapcsolatok", - "connections_short": "kapcs.", - "tier_guide_title": "Mit jelent az egyes szintek?", - "tier_bronze": "BRONZ", - "tier_iron": "VAS", - "tier_titanium": "TITÁN", - "tier_platinum": "PLATINA", - "tier_obsidian": "OBSZIDIÁN", - "tier_none": "MINŐSÍTETLEN", - "tier_bronze_desc": "1–25 egyidejű kapcsolat — kis VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 kapcsolat — közepes szerver (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 kapcsolat — nagy teljesítményű szerver (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 kapcsolat — vállalati infrastruktúra (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ kapcsolat — turbó osztály: dedikált hardver, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Megjegyzés: Dockerben a CPU/RAM-mérések a tároló korlátait tükrözhetik, nem a fizikai gazdagépét.", - "badge_tooltip": "BetterDesk Szerver Tanúsítás — szerver teljesítmény tanúsítvány", - "confirm_run": "Ez a benchmark szimulált kapcsolatokkal terheli a szervert. Folytatja?", - "starting": "Indítás...", - "complete": "Benchmark befejezve", - "signal_peers": "Jel peer-ek", - "relay_sessions": "Relé munkamenetek", - "page_error": "A Szerver Tanúsítás oldal betöltése sikertelen", - "mode_estimated": "Becsült (WebSocket nem elérhető)", - "incomplete": "A benchmark érvényes szint nélkül fejeződött be" + "form": { + "cancel": "Mégse" } + } } diff --git a/web-nodejs/lang/id.json b/web-nodejs/lang/id.json index 6c1b0552..a07bb908 100644 --- a/web-nodejs/lang/id.json +++ b/web-nodejs/lang/id.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Indonesian", - "native_name": "Bahasa Indonesia", - "flag": "🇮🇩", - "needs_review": true + "_meta": { + "name": "Indonesian", + "native_name": "Bahasa Indonesia", + "flag": "🇮🇩", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Memuat...", + "confirm": "Konfirmasikan", + "alert": "Alert", + "prompt": "Masukkan nilai", + "copied": "Disalin ke papan klip", + "save": "Simpan", + "saved": "Disimpan", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "Batalkan", + "delete": "Hapus", + "actions": "Actions", + "close": "Tutup", + "required": "diperlukan", + "name_required": "Nama wajib diisi", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "JSON tidak valid", + "field_required": "{field} diperlukan", + "back": "Kembali", + "edit": "Sunting", + "yes": "Ya", + "no": "Tidak" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "Dasbor", + "devices": "Perangkat", + "keys": "Keys", + "generator": "Generator", + "settings": "Pengaturan", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Permintaan Bantuan", + "activity": "Activity", + "automation": "Otomatisasi", + "file_transfer": "Pemindahan Berkas", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "Manajemen", + "toggle_sidebar": "Alihkan bilah sisi", + "cdap": "Perangkat CDAP", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "Token Perangkat", + "organizations": "Organisasi", + "policies": "Kebijakan", + "attestation": "Attestation", + "remote": "Desktop Jarak Jauh", + "toolkit": "Toolkit", + "security_audit": "Audit Keamanan", + "languages": "Languages", + "resource_control": "Kontrol Sumber Daya", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "Luaskan bilah sisi", + "toggle_theme": "Beralih tema", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "Izin", + "server_management": "Manajemen Server", + "server_attestation": "Sertifikasi Server", + "commercialization": "Komersialisasi" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Masuk ke Konsol BetterDesk", + "username": "Nama pengguna", + "username_placeholder": "Masukkan nama pengguna", + "password": "Kata sandi", + "password_placeholder": "Masukkan kata sandi", + "remember_me": "Remember me", + "login_failed": "Gagal masuk. Silakan periksa kredensial Anda.", + "invalid_credentials": "Nama pengguna atau kata sandi tidak valid.", + "username_collision": "Akun lokal dengan nama pengguna ini sudah ada. Masuk dengan kata sandi lokal Anda, atau minta administrator untuk mengganti nama atau menghapus akun yang bentrok.", + "fill_all_fields": "Silakan isi semua kolom", + "logout_confirm": "Apakah Anda yakin ingin logout?", + "change_password": "Ubah Kata Sandi", + "password_required": "Kata sandi diperlukan", + "totp_title": "Otentikasi Dua Faktor", + "totp_subtitle": "Masukkan kode 6 digit dari aplikasi autentikator Anda", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Gunakan kode pemulihan sebagai gantinya", + "totp_use_code": "Gunakan kode autentikator sebagai gantinya", + "totp_recovery_code": "Kode Pemulihan", + "totp_back_to_login": "Kembali untuk masuk", + "totp_invalid_code": "Kode verifikasi tidak valid. Silakan coba lagi.", + "totp_enter_code": "Silakan masukkan kode 6 digit", + "totp_enter_recovery": "Silakan masukkan kode pemulihan", + "totp_session_expired": "Sesi berakhir. Silakan masuk lagi.", + "totp_already_enabled": "Otentikasi dua faktor sudah diaktifkan", + "pro_only_account": "Akun ini hanya untuk klien desktop RustDesk. Silakan gunakan aplikasi RustDesk untuk login.", + "passwords_mismatch": "Kata sandi tidak cocok", + "or": "atau", + "login_sso": "Masuk dengan SSO", + "login_sso_with": "Masuk dengan {{provider}}", + "oidc_denied": "Akses ditolak oleh penyedia identitas.", + "oidc_invalid": "Panggilan balik OIDC tidak valid. Silakan coba lagi.", + "oidc_failed": "Otentikasi OIDC gagal. Silakan coba lagi.", + "oidc_error": "Terjadi kesalahan saat login SSO.", + "oidc_no_account": "Akun Anda tidak ditemukan dan pendaftaran otomatis dinonaktifkan.", + "totp_rate_limited": "Terlalu banyak upaya. Silakan coba lagi nanti.", + "emergency_mode_banner": "Go server tidak dapat dijangkau — berjalan dalam mode darurat (khusus admin, fungsi terbatas)" + }, + "dashboard": { + "title": "Dasbor", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Jumlah Perangkat", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Koneksi Aktif", + "offline_devices": "Offline", + "server_status": "Status Server", + "quick_actions": "Tindakan Cepat", + "manage_devices": "Kelola perangkat yang terhubung", + "view_keys": "Lihat kunci server", + "generate_config": "Hasilkan konfigurasi klien", + "server_settings": "Konfigurasikan pengaturan", + "greeting_morning": "Selamat pagi {name}", + "greeting_afternoon": "Selamat siang, {name}", + "greeting_evening": "Selamat malam {name}", + "greeting_night": "Selamat malam, {name}", + "health_overview": "Ikhtisar Kesehatan", + "devices_online": "Perangkat Daring", + "active_alerts": "Peringatan Aktif", + "recent_connections": "Jumlah Perangkat", + "server_uptime": "Waktu Aktif Server", + "activity_feed": "Aktivitas Terkini", + "no_recent_activity": "Tidak ada aktivitas terkini", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Coba Mode Desktop untuk ruang kerja multi-jendela dengan widget pemantauan.", + "tip_keyboard_shortcuts": "Tekan Ctrl+K di mana saja untuk membuka palet perintah pencarian cepat.", + "tip_address_book": "Sinkronkan buku alamat Anda di seluruh perangkat dengan masuk dari klien RustDesk.", + "tip_2fa": "Aktifkan Otentikasi Dua Faktor di Pengaturan untuk keamanan akun tambahan.", + "tip_bulk_actions": "Pilih beberapa perangkat dan gunakan tindakan massal untuk mengelolanya sekaligus.", + "tip_theme": "Beralih antara tema Gelap dan Terang di pengaturan sidebar.", + "tip_cdap": "Hubungkan perangkat IoT dan sensor industri melalui gateway CDAP.", + "tip_tutorials": "Klik tombol bantuan di sudut kanan bawah untuk tutorial interaktif." + }, + "devices": { + "title": "Perangkat", + "id": "ID", + "hostname": "Hostname", + "username": "Nama pengguna", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Dibuat", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Telusuri perangkat...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Status Sinkronisasi", + "sync_success": "Status berhasil disinkronkan", + "empty_title": "Tidak ada perangkat yang ditemukan", + "empty_text": "Tidak ada perangkat yang cocok dengan filter Anda saat ini", + "edit_title": "Detail Perangkat", + "delete_title": "Hapus Perangkat", + "delete_confirm": "Apakah Anda yakin ingin menghapus perangkat {id}?", + "delete_warning": "Anda akan menghapus perangkat ini secara permanen:", + "delete_permanent": "Tindakan ini tidak dapat dibatalkan. Semua data yang terkait dengan perangkat ini akan dihapus secara permanen dari database.", + "delete_success": "Perangkat berhasil dihapus", + "revoke_option": "Cabut perangkat", + "revoke_hint": "Blokir ID perangkat dan putuskan koneksi aktif", + "revoke_success": "Perangkat berhasil dicabut", + "details": "Detail Perangkat", + "ban_title": "Larangan Perangkat", + "ban_confirm": "Apakah Anda yakin ingin mencekal perangkat {id}?", + "ban_success": "Perangkat berhasil diblokir", + "unban_title": "Batalkan larangan Perangkat", + "unban_confirm": "Apakah Anda yakin ingin membatalkan pemblokiran perangkat {id}?", + "unban_success": "Perangkat berhasil dibatalkan pemblokirannya", + "change_id": "Change ID", + "change_id_title": "Ubah ID Perangkat", + "new_id": "New ID", + "change_id_hint": "6-16 karakter, huruf, angka, tanda hubung, dan garis bawah saja", + "change_id_success": "ID Perangkat berhasil diubah", + "id_length_error": "Panjang ID harus 6-16 karakter", + "id_format_error": "ID hanya boleh berisi huruf, angka, tanda hubung, dan garis bawah", + "bulk_delete_title": "Hapus Beberapa Perangkat", + "bulk_delete_confirm": "Apakah Anda yakin ingin menghapus perangkat {count}?", + "bulk_delete_success": "Perangkat {count} berhasil dihapus", + "columns": "Columns", + "toggle_columns": "Alihkan kolom yang terlihat", + "not_found": "Perangkat tidak ditemukan", + "delete_failed": "Gagal menghapus perangkat", + "change_id_failed": "Gagal mengubah ID perangkat", + "invalid_id": "ID perangkat tidak valid (diperlukan 6-16 karakter)", + "invalid_id_format": "Format ID tidak valid (hanya huruf, angka, tanda hubung, garis bawah)", + "id_exists": "ID Perangkat sudah ada", + "no_selection": "Tidak ada perangkat yang dipilih", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "Kebijakan Akses", + "unattended_access": "Akses Tanpa Pengawasan", + "enable_unattended": "Aktifkan akses tanpa pengawasan", + "access_password": "Akses Kata Sandi", + "password_configured": "Kumpulan kata sandi", + "no_password": "Tidak ada kata sandi", + "new_password": "Kata sandi baru (biarkan kosong agar tetap terkini)", + "clear_password": "Hapus kata sandi", + "access_schedule": "Jadwal Akses", + "enable_schedule": "Aktifkan akses berbasis waktu", + "allowed_days": "Hari yang diperbolehkan", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Operator yang Diizinkan", + "all_operators": "Semua operator (biarkan kosong)", + "operators_hint": "Nama pengguna yang dipisahkan koma. Biarkan kosong untuk mengizinkan semua operator.", + "last_updated_by": "Terakhir diperbarui oleh", + "access_policy_saved": "Kebijakan akses disimpan", + "tabs": { + "overview": "Ikhtisar", + "hardware": "Hardware", + "metrics": "Metrik", + "connections": "Koneksi", + "audit": "Audit", + "info": "Info", + "history": "Sejarah" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Rata-rata Beban", + "network": "Adaptor Jaringan", + "no_data": "Tidak ada data perangkat keras yang tersedia", + "title": "Informasi Perangkat Keras", + "gpu": "Graphics Card" }, - "common": { - "loading": "Memuat...", - "confirm": "Konfirmasikan", - "alert": "Alert", - "prompt": "Masukkan nilai", - "copied": "Disalin ke papan klip", - "save": "Simpan", - "saved": "Disimpan", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "Batalkan", - "delete": "Hapus", - "actions": "Actions", - "close": "Tutup", - "required": "diperlukan", - "name_required": "Nama wajib diisi", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "JSON tidak valid", - "field_required": "{field} diperlukan", - "back": "Kembali", - "edit": "Sunting", - "yes": "Ya", - "no": "Tidak" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "Dasbor", - "devices": "Perangkat", - "keys": "Keys", - "generator": "Generator", - "settings": "Pengaturan", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Permintaan Bantuan", - "activity": "Activity", - "automation": "Otomatisasi", - "file_transfer": "Pemindahan Berkas", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "Manajemen", - "toggle_sidebar": "Alihkan bilah sisi", - "cdap": "Perangkat CDAP", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "Token Perangkat", - "organizations": "Organisasi", - "policies": "Kebijakan", - "attestation": "Attestation", - "remote": "Desktop Jarak Jauh", - "toolkit": "Toolkit", - "security_audit": "Audit Keamanan", - "languages": "Languages", - "resource_control": "Kontrol Sumber Daya", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "Luaskan bilah sisi", - "toggle_theme": "Beralih tema", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "Izin", - "server_management": "Manajemen Server", - "server_attestation": "Sertifikasi Server" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Masuk ke Konsol BetterDesk", - "username": "Nama pengguna", - "username_placeholder": "Masukkan nama pengguna", - "password": "Kata sandi", - "password_placeholder": "Masukkan kata sandi", - "remember_me": "Remember me", - "login_failed": "Gagal masuk. Silakan periksa kredensial Anda.", - "invalid_credentials": "Nama pengguna atau kata sandi tidak valid.", - "username_collision": "Akun lokal dengan nama pengguna ini sudah ada. Masuk dengan kata sandi lokal Anda, atau minta administrator untuk mengganti nama atau menghapus akun yang bentrok.", - "fill_all_fields": "Silakan isi semua kolom", - "logout_confirm": "Apakah Anda yakin ingin logout?", - "change_password": "Ubah Kata Sandi", - "password_required": "Kata sandi diperlukan", - "totp_title": "Otentikasi Dua Faktor", - "totp_subtitle": "Masukkan kode 6 digit dari aplikasi autentikator Anda", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Gunakan kode pemulihan sebagai gantinya", - "totp_use_code": "Gunakan kode autentikator sebagai gantinya", - "totp_recovery_code": "Kode Pemulihan", - "totp_back_to_login": "Kembali untuk masuk", - "totp_invalid_code": "Kode verifikasi tidak valid. Silakan coba lagi.", - "totp_enter_code": "Silakan masukkan kode 6 digit", - "totp_enter_recovery": "Silakan masukkan kode pemulihan", - "totp_session_expired": "Sesi berakhir. Silakan masuk lagi.", - "totp_already_enabled": "Otentikasi dua faktor sudah diaktifkan", - "pro_only_account": "Akun ini hanya untuk klien desktop RustDesk. Silakan gunakan aplikasi RustDesk untuk login.", - "passwords_mismatch": "Kata sandi tidak cocok", - "or": "atau", - "login_sso": "Masuk dengan SSO", - "login_sso_with": "Masuk dengan {{provider}}", - "oidc_denied": "Akses ditolak oleh penyedia identitas.", - "oidc_invalid": "Panggilan balik OIDC tidak valid. Silakan coba lagi.", - "oidc_failed": "Otentikasi OIDC gagal. Silakan coba lagi.", - "oidc_error": "Terjadi kesalahan saat login SSO.", - "oidc_no_account": "Akun Anda tidak ditemukan dan pendaftaran otomatis dinonaktifkan.", - "totp_rate_limited": "Terlalu banyak upaya. Silakan coba lagi nanti.", - "emergency_mode_banner": "Go server tidak dapat dijangkau — berjalan dalam mode darurat (khusus admin, fungsi terbatas)" - }, - "dashboard": { - "title": "Dasbor", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Jumlah Perangkat", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Koneksi Aktif", - "offline_devices": "Offline", - "server_status": "Status Server", - "quick_actions": "Tindakan Cepat", - "manage_devices": "Kelola perangkat yang terhubung", - "view_keys": "Lihat kunci server", - "generate_config": "Hasilkan konfigurasi klien", - "server_settings": "Konfigurasikan pengaturan", - "greeting_morning": "Selamat pagi {name}", - "greeting_afternoon": "Selamat siang, {name}", - "greeting_evening": "Selamat malam {name}", - "greeting_night": "Selamat malam, {name}", - "health_overview": "Ikhtisar Kesehatan", - "devices_online": "Perangkat Daring", - "active_alerts": "Peringatan Aktif", - "recent_connections": "Jumlah Perangkat", - "server_uptime": "Waktu Aktif Server", - "activity_feed": "Aktivitas Terkini", - "no_recent_activity": "Tidak ada aktivitas terkini", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Coba Mode Desktop untuk ruang kerja multi-jendela dengan widget pemantauan.", - "tip_keyboard_shortcuts": "Tekan Ctrl+K di mana saja untuk membuka palet perintah pencarian cepat.", - "tip_address_book": "Sinkronkan buku alamat Anda di seluruh perangkat dengan masuk dari klien RustDesk.", - "tip_2fa": "Aktifkan Otentikasi Dua Faktor di Pengaturan untuk keamanan akun tambahan.", - "tip_bulk_actions": "Pilih beberapa perangkat dan gunakan tindakan massal untuk mengelolanya sekaligus.", - "tip_theme": "Beralih antara tema Gelap dan Terang di pengaturan sidebar.", - "tip_cdap": "Hubungkan perangkat IoT dan sensor industri melalui gateway CDAP.", - "tip_tutorials": "Klik tombol bantuan di sudut kanan bawah untuk tutorial interaktif." - }, - "devices": { - "title": "Perangkat", - "id": "ID", - "hostname": "Hostname", - "username": "Nama pengguna", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Dibuat", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Telusuri perangkat...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Status Sinkronisasi", - "sync_success": "Status berhasil disinkronkan", - "empty_title": "Tidak ada perangkat yang ditemukan", - "empty_text": "Tidak ada perangkat yang cocok dengan filter Anda saat ini", - "edit_title": "Detail Perangkat", - "delete_title": "Hapus Perangkat", - "delete_confirm": "Apakah Anda yakin ingin menghapus perangkat {id}?", - "delete_warning": "Anda akan menghapus perangkat ini secara permanen:", - "delete_permanent": "Tindakan ini tidak dapat dibatalkan. Semua data yang terkait dengan perangkat ini akan dihapus secara permanen dari database.", - "delete_success": "Perangkat berhasil dihapus", - "revoke_option": "Cabut perangkat", - "revoke_hint": "Blokir ID perangkat dan putuskan koneksi aktif", - "revoke_success": "Perangkat berhasil dicabut", - "details": "Detail Perangkat", - "ban_title": "Larangan Perangkat", - "ban_confirm": "Apakah Anda yakin ingin mencekal perangkat {id}?", - "ban_success": "Perangkat berhasil diblokir", - "unban_title": "Batalkan larangan Perangkat", - "unban_confirm": "Apakah Anda yakin ingin membatalkan pemblokiran perangkat {id}?", - "unban_success": "Perangkat berhasil dibatalkan pemblokirannya", - "change_id": "Change ID", - "change_id_title": "Ubah ID Perangkat", - "new_id": "New ID", - "change_id_hint": "6-16 karakter, huruf, angka, tanda hubung, dan garis bawah saja", - "change_id_success": "ID Perangkat berhasil diubah", - "id_length_error": "Panjang ID harus 6-16 karakter", - "id_format_error": "ID hanya boleh berisi huruf, angka, tanda hubung, dan garis bawah", - "bulk_delete_title": "Hapus Beberapa Perangkat", - "bulk_delete_confirm": "Apakah Anda yakin ingin menghapus perangkat {count}?", - "bulk_delete_success": "Perangkat {count} berhasil dihapus", - "columns": "Columns", - "toggle_columns": "Alihkan kolom yang terlihat", - "not_found": "Perangkat tidak ditemukan", - "delete_failed": "Gagal menghapus perangkat", - "change_id_failed": "Gagal mengubah ID perangkat", - "invalid_id": "ID perangkat tidak valid (diperlukan 6-16 karakter)", - "invalid_id_format": "Format ID tidak valid (hanya huruf, angka, tanda hubung, garis bawah)", - "id_exists": "ID Perangkat sudah ada", - "no_selection": "Tidak ada perangkat yang dipilih", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "Kebijakan Akses", - "unattended_access": "Akses Tanpa Pengawasan", - "enable_unattended": "Aktifkan akses tanpa pengawasan", - "access_password": "Akses Kata Sandi", - "password_configured": "Kumpulan kata sandi", - "no_password": "Tidak ada kata sandi", - "new_password": "Kata sandi baru (biarkan kosong agar tetap terkini)", - "clear_password": "Hapus kata sandi", - "access_schedule": "Jadwal Akses", - "enable_schedule": "Aktifkan akses berbasis waktu", - "allowed_days": "Hari yang diperbolehkan", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Operator yang Diizinkan", - "all_operators": "Semua operator (biarkan kosong)", - "operators_hint": "Nama pengguna yang dipisahkan koma. Biarkan kosong untuk mengizinkan semua operator.", - "last_updated_by": "Terakhir diperbarui oleh", - "access_policy_saved": "Kebijakan akses disimpan", - "tabs": { - "overview": "Ikhtisar", - "hardware": "Hardware", - "metrics": "Metrik", - "connections": "Koneksi", - "audit": "Audit", - "info": "Info", - "history": "Sejarah" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Rata-rata Beban", - "network": "Adaptor Jaringan", - "no_data": "Tidak ada data perangkat keras yang tersedia", - "title": "Informasi Perangkat Keras", - "gpu": "Graphics Card" - }, - "display_name": "Nama Tampilan", - "display_name_placeholder": "Nama khusus (menggantikan nama host)", - "note_placeholder": "Catatan tentang perangkat ini", - "tags": "Tags", - "filter_by_tags": "Filter berdasarkan tag", - "no_tags": "No tags", - "all_groups": "Semua kelompok", - "create_group": "Buat grup", - "manage_groups": "Kelola Grup", - "group_name": "Nama grup", - "group_name_placeholder": "misalnya PC media", - "dynamic_group": "Grup dinamis dari tag", - "dynamic_group_hint": "Perangkat dengan tag ini bergabung secara otomatis.", - "tag_filter": "Tag filter", - "group_allowed_users": "Pengguna yang diizinkan", - "group_allowed_users_hint": "Biarkan kosong agar grup tetap terlihat oleh semua orang yang memiliki izin perangkat.", - "group_tag_required": "Filter tag diperlukan untuk grup dinamis", - "group_invalid": "Pengenal grup tidak valid", - "group_not_found": "Grup tidak ditemukan", - "group_saved": "Grup perangkat disimpan", - "groups_saved": "Grup perangkat disimpan", + "display_name": "Nama Tampilan", + "display_name_placeholder": "Nama khusus (menggantikan nama host)", + "note_placeholder": "Catatan tentang perangkat ini", + "tags": "Tags", + "filter_by_tags": "Filter berdasarkan tag", + "no_tags": "No tags", + "all_groups": "Semua kelompok", + "create_group": "Buat grup", + "manage_groups": "Kelola Grup", + "group_name": "Nama grup", + "group_name_placeholder": "misalnya PC media", + "dynamic_group": "Grup dinamis dari tag", + "dynamic_group_hint": "Perangkat dengan tag ini bergabung secara otomatis.", + "tag_filter": "Tag filter", + "group_allowed_users": "Pengguna yang diizinkan", + "group_allowed_users_hint": "Biarkan kosong agar grup tetap terlihat oleh semua orang yang memiliki izin perangkat.", + "group_tag_required": "Filter tag diperlukan untuk grup dinamis", + "group_invalid": "Pengenal grup tidak valid", + "group_not_found": "Grup tidak ditemukan", + "group_saved": "Grup perangkat disimpan", + "groups_saved": "Grup perangkat disimpan", "group_membership_added": "Ditambahkan ke grup", "group_membership_removed": "Dihapus dari grup", - "no_groups": "Belum ada grup", - "manual_groups": "Grup manual", - "dynamic_memberships": "Keanggotaan dinamis", - "group_allowed_user_groups": "Grup pengguna yang diizinkan", - "group_allowed_user_groups_hint": "Pengguna di grup pengguna yang dipilih dapat mengakses grup perangkat ini.", - "no_user_groups": "Tidak ada grup pengguna", - "edit_group": "Sunting grup", - "delete_group": "Hapus grup", - "delete_group_confirm": "Hapus grup perangkat {name}?", - "group_deleted": "Grup perangkat dihapus", - "folder_group_readonly": "Grup yang didukung folder dikelola dari folder.", - "manage_user_groups": "Kelola grup pengguna", - "restore_failed": "Gagal memulihkan perangkat", - "no_signal_tooltip": "Klien baru saja menghubungi API tetapi tidak terdaftar di server sinyal (UDP :21116). Mulai ulang klien setelah migrasi server.", - "per_page": "Per halaman" - }, - "keys": { - "title": "Kunci Server", - "subtitle": "Kunci publik dan konfigurasi untuk klien RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Informasi Server", - "download": "Unduh Kunci", - "show_qr": "Show QR", - "qr_hint": "Pindai kode QR ini dengan aplikasi seluler RustDesk", - "no_key": "Tidak ada kunci publik yang ditemukan", - "no_key_to_copy": "Tidak ada kunci untuk disalin", - "no_qr": "Kode QR tidak tersedia", - "download_success": "File kunci diunduh", - "not_found": "Kunci tidak ditemukan", - "api_not_found": "Kunci API tidak ditemukan" - }, - "settings": { - "title": "Pengaturan", - "subtitle": "Konfigurasi konsol dan pengaturan akun", - "tab_general": "General", - "tab_server": "pelayan", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Bahasa", - "change_password": "Ubah Kata Sandi", - "password_desc": "Perbarui kata sandi akun Anda", - "current_password": "Kata Sandi Saat Ini", - "new_password": "Kata Sandi Baru", - "confirm_password": "Konfirmasi Kata Sandi", - "save_password": "Perbarui Kata Sandi", - "password_changed": "Kata sandi berhasil diubah", - "fill_all_fields": "Silakan isi semua kolom", - "passwords_not_match": "Kata sandi tidak cocok", - "password_requirements": "Persyaratan kata sandi", - "password_requirements_not_met": "Kata sandi tidak memenuhi persyaratan", - "req_length": "Setidaknya 8 karakter", - "req_uppercase": "Setidaknya satu huruf besar", - "req_lowercase": "Setidaknya satu huruf kecil", - "req_number": "Setidaknya satu nomor", - "server_info": "Informasi Server", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Aktivitas konsol terkini", - "no_audit_logs": "Tidak ada log audit yang ditemukan", - "backend_title": "Bagian Belakang Server", - "backend_desc": "Pilih backend server mana yang akan digunakan untuk manajemen perangkat dan layanan sinyal/relai.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Server sinyal dan relai RustDesk standar (hbbs + hbbr). HTTP API dasar dengan titik akhir terbatas.", - "backend_betterdesk_desc": "Server berbasis Go yang ditingkatkan dengan REST API penuh, autentikasi JWT, daftar blokir, tag, peristiwa WebSocket waktu nyata, dan pencatatan audit.", - "backend_feature_signal": "Server sinyal (pendaftaran ID)", - "backend_feature_relay": "Server relai (relai koneksi)", - "backend_feature_basic_api": "REST Dasar API", - "backend_feature_full_api": "REST Penuh API (34+ titik akhir)", - "backend_feature_jwt": "Otentikasi JWT & TOTP 2FA", - "backend_feature_blocklist": "Manajemen daftar blokir IP/ID", - "backend_feature_tags": "Tag & pengelompokan perangkat", - "backend_feature_audit": "Audit pencatatan peristiwa", - "backend_feature_websocket": "Acara WebSocket waktu nyata", - "backend_connection": "Koneksi", - "backend_api_url": "API URL", - "backend_test": "Uji Koneksi", - "backend_testing": "Menguji...", - "backend_save": "Terapkan Backend", - "backend_saved": "Backend server berhasil diubah. Data perangkat sekarang akan dikelola oleh backend baru.", - "backend_save_failed": "Gagal berpindah backend server", - "backend_test_success": "Koneksi berhasil! Server dapat dijangkau.", - "backend_test_failed": "Koneksi gagal. Server tidak dapat dijangkau.", - "backend_confirm_switch": "Apakah Anda yakin ingin mengganti backend server? Ini akan mengubah cara perangkat dikelola.", - "backend_unreachable": "Tidak dapat beralih: server target tidak dapat dijangkau. Mulai servernya terlebih dahulu.", - "invalid_backend": "Pilihan backend tidak valid. Pilih 'rustdesk' atau 'betterdesk'.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Otentikasi Dua Faktor", - "totp_desc": "Tambahkan lapisan keamanan ekstra dengan aplikasi autentikator TOTP (Google Authenticator, Microsoft Authenticator, Authy, dll.)", - "totp_enabled": "2FA Diaktifkan", - "totp_enabled_desc": "Akun Anda dilindungi dengan otentikasi dua faktor.", - "totp_disabled": "2FA Tidak Diaktifkan", - "totp_disabled_desc": "Aktifkan autentikasi dua faktor untuk keamanan akun tambahan.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Instal aplikasi autentikator di ponsel Anda", - "totp_step2": "Pindai kode QR di bawah ini", - "totp_step3": "Masukkan kode 6 digit untuk memverifikasi", - "totp_manual_key": "Manual key", - "totp_enter_code": "Masukkan kode verifikasi", - "totp_verify_enable": "Verifikasi & Aktifkan", - "totp_enabled_success": "Otentikasi dua faktor diaktifkan!", - "totp_recovery_warning": "Simpan kode pemulihan ini di tempat yang aman. Setiap kode hanya dapat digunakan satu kali. Jika Anda kehilangan akses ke aplikasi pengautentikasi, Anda dapat menggunakan kode ini untuk masuk.", - "totp_done": "Done", - "totp_disable_warning": "Menonaktifkan otentikasi dua faktor akan membuat akun Anda kurang aman. Masukkan kata sandi Anda untuk mengonfirmasi.", - "totp_disabled_success": "Otentikasi dua faktor telah dinonaktifkan.", - "tutorials_title": "Tutorial & Panduan", - "tutorials_desc": "Kontrol tur terpandu dan overlay bantuan yang ditampilkan di seluruh konsol", - "tutorials_enabled": "Aktifkan tutorial", - "tutorials_enabled_hint": "Jika dinonaktifkan, tutorial tidak akan dimulai secara otomatis dan tombol bantuan akan disembunyikan", - "tutorials_reset_hint": "Tandai semua tutorial sebagai tidak terlihat sehingga dapat ditampilkan kembali", - "tutorials_enabled_toast": "Tutorial diaktifkan", - "tutorials_disabled_toast": "Tutorial dinonaktifkan", - "tutorials_reset_toast": "Semua tutorial telah diatur ulang", - "tab_auth": "Otentikasi", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurasikan autentikasi eksternal melalui LDAP atau Active Directory. Pengguna akan dapat masuk dengan kredensial domain mereka.", - "ldap_enabled": "Aktifkan Otentikasi LDAP", - "ldap_enabled_hint": "Jika diaktifkan, pengguna dapat masuk dengan kredensial LDAP/AD. Akun lokal masih berfungsi sebagai cadangan.", - "ldap_connection": "Koneksi Server", - "ldap_host": "Tuan rumah", - "ldap_port": "Pelabuhan", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Lewati verifikasi TLS", - "ldap_timeout": "Batas waktu koneksi habis", - "ldap_timeout_hint": "Beberapa detik menunggu respons server LDAP", - "ldap_bind_mode": "Modus Mengikat", - "ldap_direct_bind": "Ikatan Langsung", - "ldap_direct_bind_hint": "Ikat langsung dengan templat DN alih-alih menggunakan akun layanan untuk mencari.", - "ldap_bind_dn": "Ikat DN (akun layanan)", - "ldap_bind_dn_hint": "Nama Khusus akun layanan hanya-baca yang digunakan untuk mencari pengguna.", - "ldap_bind_password": "Ikat Kata Sandi", - "ldap_base_dn": "Basis DN", - "ldap_base_dn_hint": "Basis pencarian untuk menemukan pengguna, mis. dc=contoh,dc=com", - "ldap_user_filter": "Filter Pengguna", - "ldap_user_filter_hint": "Filter LDAP untuk menemukan pengguna. Gunakan {{username}} sebagai pengganti. Bawaan: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Templat DN Pengikatan Langsung", - "ldap_direct_bind_dn_hint": "Templat DN untuk pengikatan langsung. Gunakan {{username}} sebagai placeholder, mis. uid={{username}},ou=pengguna,dc=contoh,dc=com", - "ldap_user_attrs": "Atribut Pengguna", - "ldap_attr_id": "Atribut Nama Pengguna", - "ldap_attr_email": "Atribut Email", - "ldap_attr_name": "Atribut Nama Tampilan", - "ldap_group_mapping": "Grup → Pemetaan Peran", - "ldap_group_base_dn": "Basis Grup DN", - "ldap_group_base_dn_hint": "Biarkan kosong untuk menggunakan Base DN utama", - "ldap_group_filter": "Filter Grup", - "ldap_group_attr_name": "Atribut Nama Grup", - "ldap_default_role": "Peran Default", - "ldap_default_role_hint": "Peran ditetapkan kepada pengguna yang grup LDAP-nya tidak cocok dengan pemetaan apa pun", - "ldap_role_viewer": "Penampil", - "ldap_role_operator": "Operator", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Grup → Peta Peran", - "ldap_group_role_map_hint": "Petakan grup LDAP ke peran BetterDesk. Format: GroupDN=peran dipisahkan oleh | (pipa). Contoh: CN=Admin,DC=contoh,DC=com=admin|CN=Ops,DC=contoh,DC=com=operator", - "ldap_test_connection": "Uji Koneksi", - "ldap_testing": "Menguji...", - "ldap_test_success": "Koneksi berhasil! Server LDAP dapat dijangkau dan kredensial pengikatannya valid.", - "ldap_test_failed": "Koneksi gagal", - "ldap_save": "Simpan Konfigurasi LDAP", - "ldap_saved": "Konfigurasi LDAP berhasil disimpan", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfigurasikan Single Sign-On melalui penyedia OpenID Connect (Azure AD, Okta, Google, Keycloak, dll.).", - "oidc_enabled": "Aktifkan Otentikasi OIDC", - "oidc_enabled_hint": "Izinkan pengguna masuk dengan penyedia identitas eksternal", - "oidc_provider": "Penyedia Identitas", - "oidc_display_name": "Nama Tampilan Tombol", - "oidc_display_name_hint": "Teks yang ditampilkan pada tombol masuk (misalnya Azure AD, Okta)", - "oidc_issuer_url": "Penerbit URL", - "oidc_issuer_url_hint": "Penerbit OpenID Connect URL (penemuan akan otomatis)", - "oidc_client_id": "ID Klien", - "oidc_client_secret": "Rahasia Klien", - "oidc_redirect_url": "Pengalihan URL (Panggilan Balik)", - "oidc_redirect_url_hint": "Harus sama persis dengan apa yang dikonfigurasi di IdP Anda. Biasanya: http://server-Anda:21114/api/auth/oidc/callback", - "oidc_scopes": "Lingkup", - "oidc_use_pkce": "Gunakan PKCE (disarankan)", - "oidc_auto_discovery": "Penemuan otomatis", - "oidc_allow_signup": "Buat pengguna secara otomatis", - "oidc_manual_endpoints": "URL Titik Akhir Manual", - "oidc_authorization_url": "Titik Akhir Otorisasi", - "oidc_token_url": "Titik Akhir Token", - "oidc_userinfo_url": "Titik Akhir Info Pengguna", - "oidc_claim_mapping": "Pemetaan Klaim", - "oidc_claim_username": "Klaim Nama Pengguna", - "oidc_claim_email": "Klaim Email", - "oidc_claim_name": "Klaim Nama Tampilan", - "oidc_claim_groups": "Klaim Grup", - "oidc_role_mapping": "Pemetaan Peran", - "oidc_default_role": "Peran Default", - "oidc_group_role_map": "Grup → Pemetaan Peran", - "oidc_group_role_map_hint": "Satu pemetaan per baris: group_name=role (misalnya admin=admin, operator=operator)", - "oidc_test_discovery": "Uji Penemuan", - "oidc_testing": "Menguji...", - "oidc_test_success": "Penemuan berhasil! Titik akhir terselesaikan.", - "oidc_test_failed": "Penemuan gagal", - "oidc_issuer_required": "Penerbit URL diwajibkan untuk menguji penemuan", - "oidc_save": "Simpan Konfigurasi OIDC", - "oidc_saved": "Konfigurasi OIDC berhasil disimpan", - "tab_advanced": "Lanjutan", - "connection_mode_title": "Strategi koneksi", - "connection_mode_desc": "Kendalikan cara klien desktop RustDesk terhubung: P2P langsung (hole punch) jika memungkinkan, atau selalu melalui relay.", - "connection_mode_label": "Mode koneksi default", - "connection_mode_p2p_first": "P2P terlebih dahulu (disarankan) — coba koneksi langsung, fallback ke relay jika gagal", - "connection_mode_relay_only": "Hanya relay — semua sesi menggunakan server relay", - "connection_mode_advanced": "Opsi lanjutan", - "connection_mode_fallback_ms": "Batas waktu fallback P2P (ms)", - "connection_mode_same_nat_relay": "Paksa relay saat kedua peer berbagi IP publik yang sama (NAT hairpin)", - "connection_mode_network_hint": "P2P memerlukan port UDP 21116 yang dapat dijangkau antar klien. Server harus membuka Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115. Klien browser web selalu menggunakan relay.", - "connection_mode_save": "Simpan", - "connection_mode_save_restart": "Simpan & mulai ulang server", - "connection_mode_saved": "Mode koneksi tersimpan", - "connection_mode_restart_started": "Mulai ulang server dimulai", - "connection_mode_restart_failed": "Mulai ulang server gagal", - "connection_mode_not_configurable": "Mode koneksi tidak dapat diubah pada deployment ini (tidak ada unit systemd atau docker-compose)", - "connection_mode_compose_error": "Tidak dapat menemukan bagian server environment di docker-compose.yml", - "connection_mode_source_saved": "Tersimpan di", - "connection_mode_source_defaults": "Menggunakan default server (tidak bisa ditulis dari panel)", - "connection_mode_runtime": "Server aktif", - "advanced_title": "File konfigurasi", - "advanced_desc": "Edit file konfigurasi server secara langsung. Perubahan mungkin memerlukan restart layanan. Salinan cadangan dibuat sebelum setiap penyimpanan.", - "advanced_warning": "File-file ini berisi rahasia (API key, kata sandi database, session secret). Edit hanya jika Anda memahami dampaknya. Sintaks yang salah dapat mencegah server dari starting.", - "advanced_files_label": "File", - "advanced_select_file": "Pilih file dari daftar untuk melihat atau mengedit isinya.", - "advanced_reload": "Muat ulang", - "advanced_save": "Simpan file", - "advanced_apply_restart": "Terapkan (restart layanan)", - "advanced_saved": "File konfigurasi tersimpan", - "advanced_restart_after_save": "Konfigurasi tersimpan. Restart layanan yang terpengaruh sekarang agar perubahan berlaku?", - "advanced_restart_confirm": "Restart layanan BetterDesk terkait? Koneksi aktif mungkin terganggu sebentar.", - "advanced_restart_console_confirm": "Restart layanan web console? Sesi browser akan terputus sebentar dan halaman akan dimuat ulang saat console kembali.", - "advanced_restart_started": "Restart layanan dimulai", - "advanced_restart_done": "Console di-restart — memuat ulang halaman…", - "advanced_restart_polling": "Menunggu console kembali online…", - "advanced_restart_timeout": "Restart dikirim tetapi console tidak merespons tepat waktu. Periksa log systemd/NSSM dan muat ulang secara manual.", - "advanced_restart_failed": "Restart layanan gagal (hak istimewa tidak cukup atau layanan belum terinstal)", - "advanced_save_confirm": "Simpan perubahan pada file ini? Cadangan versi sebelumnya akan dibuat.", - "advanced_unsaved_confirm": "Anda memiliki perubahan yang belum disimpan. Buang?", - "advanced_no_files": "Tidak ada file konfigurasi yang tersedia di sistem ini.", - "advanced_readonly": "hanya baca", - "advanced_missing": "hilang", - "advanced_new_file": "File baru (belum dibuat sampai Anda menyimpan)", - "advanced_new_file_hint": "File baru — tambahkan konten dan simpan", - "advanced_backup_created": "cadangan dibuat", - "advanced_restart_console": "Restart layanan web console (mis. systemctl restart betterdesk-console) agar perubahan .env berlaku.", - "advanced_restart_goserver": "Restart BetterDesk Go server agar perubahan blocklist dimuat.", - "advanced_restart_systemd": "Setelah mengedit unit systemd, jalankan: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Restart layanan yang terpengaruh agar perubahan berlaku.", - "advanced_error_unknown": "File konfigurasi tidak dikenal", - "advanced_error_not_found": "File tidak ada", - "advanced_error_not_file": "Path bukan file biasa", - "advanced_error_too_large": "File melebihi ukuran yang dapat diedit maksimum (512 KB)", - "advanced_error_binary": "File biner tidak dapat diedit di panel", - "advanced_error_invalid": "Konten file tidak valid", - "advanced_error_not_writable": "Proses console tidak dapat menulis file ini", - "advanced_file_console-env": "Lingkungan console (.env)", - "advanced_file_console-env-local": "Override console (.env.local)", - "advanced_file_go-blocklist": "Daftar blokir server Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unit layanan)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unit layanan)", - "advanced_file_console-session-secret": "Rahasia sesi konsol (.session_secret)", - "advanced_file_go-audit-log": "Log audit server Go (audit.jsonl)", - "advanced_file_build-env": "Lingkungan build agen (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfigurasi supervisor)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrasi)", - "advanced_restart_none": "File ini tidak memerlukan restart layanan.", - "enrollment_title": "Pendaftaran perangkat (RustDesk)", - "enrollment_desc": "Kendalikan cara klien RustDesk baru mendaftar dan cara operator menyetujuinya di halaman permintaan pendaftaran.", - "enrollment_require_approval": "Perlu persetujuan operator (Mode terkelola)", - "enrollment_require_approval_hint": "Jika diaktifkan, klien yang tidak dikenal akan antri sampai operator menyetujuinya di \"Permintaan Pendaftaran\".", - "enrollment_rich_approve": "Formulir persetujuan lengkap (nama, folder, grup, tag)", - "enrollment_rich_approve_hint": "Menampilkan dialog terperinci saat menyetujui permintaan pendaftaran atau pendaftaran LAN.", - "enrollment_tag_picker": "Pilih tag dari tag perangkat yang ada", - "enrollment_tag_picker_hint": "Memungkinkan operator memilih tag dari daftar di halaman Perangkat alih-alih hanya mengetik.", - "enrollment_open_requests": "Buka permintaan pendaftaran", - "enrollment_pending_count": "{count} permintaan pendaftaran tertunda" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Gagal Masuk", - "action_logout": "Logout", - "action_password_change": "Kata Sandi Berubah", - "action_2fa_enable": "2FA Diaktifkan", - "action_2fa_disable": "2FA Dinonaktifkan", - "action_user_create": "Pengguna Dibuat", - "action_user_update": "Pengguna Diperbarui", - "action_user_delete": "Pengguna Dihapus", - "action_settings_update": "Pengaturan Diperbarui", - "action_device_ban": "Perangkat Dilarang", - "action_device_unban": "Perangkat Tidak Diblokir", - "action_device_delete": "Perangkat Dihapus" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Opsi Konfigurasi", - "server_address": "Alamat Server", - "server_address_hint": "Domain atau alamat IP server Anda", - "custom_port": "Custom Port", - "port_hint": "Biarkan kosong untuk default (21116)", - "relay_server": "Server Relai", - "relay_placeholder": "Sama seperti ID server jika kosong", - "relay_hint": "Opsional: alamat server relai terpisah", - "include_key": "Sertakan kunci publik dalam konfigurasi", - "generate": "Hasilkan Konfigurasi", - "output": "Keluaran Konfigurasi", - "usage_title": "Detail Koneksi", - "generated": "Konfigurasi dihasilkan", - "server_required": "Alamat server diperlukan", - "nothing_to_copy": "Buat konfigurasi terlebih dahulu", - "bundles_title": "Paket agen", - "new_bundle": "Bundel baru", - "editor_title": "Editor bundel", - "empty_state": "Pilih paket di sebelah kiri atau buat paket baru untuk memulai.", - "loading": "Memuat…", - "no_bundles": "Belum ada bundel. Buat yang pertama Anda.", - "bundle_name": "Nama bundel", - "bundle_name_hint": "Hanya label internal — tidak ditampilkan kepada pengguna akhir.", - "short_link": "Tautan unduhan pendek", - "short_link_hint": "Digunakan di URL publik (/d/…). Hanya huruf kecil, angka, dan tanda hubung (2–32 karakter). Diisi otomatis dari nama paket — persingkat untuk memudahkan berbagi (mis. acme).", - "branding_section": "merek", - "company_name": "Nama perusahaan/merek", - "short_text": "Deskripsi singkat", - "contact_email": "Hubungi email", - "contact_phone": "Hubungi telepon", - "contact_url": "Hubungi situs web", - "logo": "logo", - "logo_hint": "PNG, JPEG, SVG atau WebP. Maksimum 256 KB.", - "logo_clear": "Hapus logo", - "primary_color": "Warna primer", - "accent_color": "Warna tajuk", - "default_lang": "Bahasa bawaan", - "allow_unattended": "Izinkan akses tanpa pengawasan", - "allow_unattended_hint": "Saat diaktifkan, agen menampilkan kata sandi permanen untuk akses operator.", - "save": "Simpan bundel", - "revoke": "Cabut", - "unrevoke": "Aktifkan kembali", - "revoked": "Dicabut", - "preview_title": "Pratinjau langsung", - "preview_hint": "Perkiraan tampilan jendela agen pengguna akhir.", - "preview_default_name": "Dukungan BetterDesk", - "preview_status_ready": "Siap", - "preview_id": "tanda pengenal Anda", - "preview_password": "Kata sandi", - "preview_chat": "Mengobrol dengan dukungan", - "preview_settings": "Pengaturan (khusus admin)", - "preview_quit": "Keluar (khusus admin)", - "download_link_title": "Tautan unduhan", - "download_link_hint": "Bagikan tautan ini dengan pengguna akhir. Mereka akan melihat halaman unduhan bermerek. Tautan hex lama tetap berfungsi setelah Anda mengubah tautan pendek.", - "open_portal": "Buka", - "created": "Paket dibuat", - "saved": "Paket disimpan", - "deleted": "Paket dihapus", - "revoked_ok": "Bundel dicabut", - "unrevoked_ok": "Paket diaktifkan kembali", - "link_copied": "Tautan disalin ke papan klip", - "copy_failed": "Tidak dapat menyalin secara otomatis — harap salin secara manual", - "unsaved_confirm": "Buang perubahan yang belum disimpan?", - "confirm_revoke": "Cabut paket ini? Tautan unduhan akan berhenti berfungsi.", - "confirm_unrevoke": "Aktifkan kembali paket ini?", - "confirm_delete": "Hapus paket ini secara permanen? Hal ini tidak dapat dibatalkan.", - "errors": { - "validation_failed": "Validasi gagal", - "name_required": "Nama paket wajib diisi", - "company_name_required": "Nama perusahaan wajib diisi", - "logo_invalid": "Logo harus berupa file gambar yang valid", - "logo_too_large": "Logo harus berukuran 256 KB atau lebih kecil", - "logo_read_failed": "Gagal membaca file logo", - "primary_color_invalid": "Warna primer harus berupa nilai hex (misalnya #2563eb)", - "accent_color_invalid": "Warna header harus berupa nilai hex (misalnya #1e293b)", - "contact_url_invalid": "Situs web kontak harus berupa URL yang valid", - "server_host_required": "Alamat server publik wajib diisi", - "server_host_invalid": "Masukkan nama domain atau alamat IPv4 yang valid", - "token_failed": "Tidak dapat membuat enrollment token — periksa konektivitas server", - "rebuild_revoked": "Tidak dapat rebuild bundle yang dicabut — aktifkan kembali terlebih dahulu", - "slug_invalid": "Tautan pendek hanya boleh berisi huruf kecil, angka, dan tanda hubung", - "slug_too_short": "Tautan pendek harus minimal 2 karakter", - "slug_too_long": "Tautan pendek maksimal 32 karakter", - "slug_taken": "Tautan pendek ini sudah digunakan paket lain" - }, - "legacy_title": "Generator Konfigurasi Klien", - "connection_section": "Koneksi server", - "server_host": "Alamat server publik", - "server_host_placeholder": "support.example.com atau 203.0.113.10", - "server_host_hint": "Nama domain atau IP publik tempat pengguna akhir menjangkau server BetterDesk Anda. Port diambil dari konfigurasi console.", - "use_https": "Gunakan HTTPS / WSS (disarankan)", - "enrollment_token": "Pendaftaran perangkat", - "enrollment_token_pending": "Per perangkat setelah persetujuan", - "enrollment_token_set": "Per perangkat — setujui di Registrations", - "enrollment_token_hint": "Setiap instalasi mendaftar sendiri. Setujui perangkat baru di panel Registrations; server kemudian menerbitkan kunci akses unik per komputer.", - "enrollment_per_device": "Per perangkat — setujui di Registrations", - "background_color": "Latar belakang jendela", - "surface_color": "Latar belakang kartu", - "text_color": "Warna teks", - "text_muted_color": "Warna teks redup", - "status_ready_color": "Warna indikator siap", - "header_text_color": "Warna teks header", - "builds_title": "Build klien", - "builds_hint": "Installer yang dikompilasi di server ini untuk setiap platform. Rebuild setelah memperbaiki kesalahan toolchain atau memperbarui sumber agen.", - "builds_loading": "Memuat status build…", - "builds_empty": "Belum ada build dalam antrian — simpan bundle atau klik Rebuild semua.", - "rebuild_all": "Rebuild semua", - "rebuilding_all": "Mengantrekan rebuild…", - "rebuild_queued": "Semua build platform diantrekan", - "rebuild_confirm": "Rebuild semua installer platform untuk bundle ini? Artefak yang sudah siap akan diganti.", - "build_status_ready": "Siap", - "build_status_pending": "Antrian", - "build_status_building": "Membangun", - "build_status_failed": "Gagal", - "builds_summary": "{{ready}} siap · {{pending}} antrian · {{building}} membangun · {{failed}} gagal", - "build_error_hint": "Kesalahan build", - "preview_help": "Minta bantuan" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "Server ID", - "relay_server": "Server Relai", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Memeriksa...", - "label": "Status", - "no_signal": "Tanpa sinyal" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Terhubung melalui Klien Desktop", - "remote_viewer": "Penampil Jarak Jauh", - "web_remote": "Jarak Jauh Web", - "details": "Details", - "edit": "Sunting", - "delete": "Hapus", - "ban": "Ban", - "unban": "Unban", - "save": "Simpan", - "cancel": "Batalkan", - "confirm": "Konfirmasikan", - "close": "Tutup", - "clear": "Clear", - "ok": "OK", - "saved": "Berhasil disimpan", - "back": "Kembali", - "create": "Buat", - "dismiss": "Dismiss", - "view_all": "Lihat Semua", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count} yang lalu", - "minutes_ago": "{count}m yang lalu", - "hours_ago": "{count}h yang lalu", - "days_ago": "{count}d yang lalu", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Manajemen Pengguna", - "subtitle": "Kelola pengguna dan izin konsol", - "add_user": "Add User", - "edit_user": "Sunting Pengguna", - "username": "Nama pengguna", - "username_placeholder": "Masukkan nama pengguna", - "username_hint": "3-32 karakter, huruf, angka dan garis bawah saja", - "password": "Kata sandi", - "password_placeholder": "Masukkan kata sandi", - "password_hint": "Minimal 8 karakter dengan campuran huruf besar-kecil, angka dan simbol", - "password_leave_empty": "Biarkan kosong agar tetap terkini", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Dibuat", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Buat Pengguna", - "edit": "Sunting", - "reset_password": "Atur Ulang Kata Sandi", - "new_password": "Kata Sandi Baru", - "delete_title": "Hapus Pengguna", - "delete_confirm": "Apakah Anda yakin ingin menghapus pengguna {username}?", - "delete_success": "Pengguna berhasil dihapus", - "user_created": "Pengguna berhasil dibuat", - "user_updated": "Pengguna berhasil diperbarui", - "password_reset_success": "Reset kata sandi berhasil", - "empty_title": "Tidak ada pengguna yang ditemukan", - "empty_text": "Tambahkan pengguna untuk mengelola akses konsol", - "fill_required": "Silakan isi semua bidang yang wajib diisi", - "invalid_username": "Nama pengguna harus terdiri dari 3-32 karakter, hanya huruf, angka, dan garis bawah", - "username_exists": "Nama pengguna sudah ada", - "weak_password": "Kata sandi terlalu lemah", - "password_too_short": "Kata sandi minimal harus 8 karakter", - "invalid_role": "Peran tidak valid", - "cannot_demote_self": "Anda tidak dapat menurunkan diri Anda sendiri", - "cannot_delete_self": "Anda tidak dapat menghapus akun Anda sendiri", - "last_admin": "Tidak dapat menghapus administrator terakhir", - "admin_only": "Fitur ini hanya tersedia untuk administrator", - "password_required": "Kata sandi diperlukan", - "not_found": "Pengguna tidak ditemukan", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Praktik Terbaik Keamanan", - "tip_strong_passwords": "Gunakan kata sandi yang kuat dan unik untuk setiap pengguna", - "tip_unique_accounts": "Buat akun individual untuk setiap orang", - "tip_viewer_role": "Gunakan peran pemirsa untuk pengguna yang hanya membutuhkan akses baca", - "tip_operator_role": "Gunakan peran operator untuk pengguna yang perlu mengelola perangkat tetapi bukan pengguna", - "tip_audit_logs": "Tinjau log audit secara teratur untuk mengetahui adanya aktivitas mencurigakan", - "role_pro": "Pro (hanya API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Admin Server", - "role_global_admin": "Admin Sedunia", - "organizations": "Organisasi", - "user_organizations": "Organisasi untuk {username}", - "no_organizations": "Pengguna tidak ditugaskan ke organisasi mana pun", - "org_removed": "Penugasan organisasi dihapus", - "server_role_label": "Peran Server", - "server_role_hint": "Menentukan apa yang dapat dilakukan pengguna di seluruh konsol (akses panel, konfigurasi server, audit, dll.).", - "org_membership_section": "Keanggotaan Organisasi", - "org_membership_hint": "Seorang pengguna dapat menjadi anggota beberapa organisasi. Peran organisasi hanya mengontrol izin di dalam organisasi tersebut dan tidak bergantung pada peran server di atas.", - "column_organizations": "Organisasi", - "no_orgs_short": "—", - "org_count_one": "Organisasi {count}", - "org_count_many": "Organisasi {count}", - "all_orgs_assigned": "Pengguna sudah menjadi anggota setiap organisasi.", - "user_groups": "Kelompok pengguna", - "user_groups_hint": "Grup pengguna dapat digunakan untuk memberikan akses ke grup perangkat yang dipilih.", - "loading_user_groups": "Memuat grup pengguna...", - "no_user_groups": "Tidak ada grup pengguna yang tersedia", - "create_user_group": "Buat grup", - "edit_user_group": "Edit grup pengguna", - "delete_user_group": "Hapus grup pengguna", - "delete_user_group_confirm": "Hapus grup pengguna {name}? Anggota akan kehilangan akses yang diberikan melalui grup ini.", - "user_group_created": "Grup pengguna dibuat", - "user_group_updated": "Grup pengguna diperbarui", - "user_group_deleted": "Grup pengguna dihapus", - "user_group_not_found": "Grup pengguna tidak ditemukan", - "group_name": "Nama grup", - "group_name_placeholder": "Operator", - "group_note": "Note", - "group_note_placeholder": "Catatan opsional", - "group_name_required": "Nama grup wajib diisi", - "group_members_count": "Anggota {count}", - "provider": "Penyedia", - "provider_local": "Lokal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Dikelola oleh penyedia identitas", - "provider_managed_hint": "Akun ini dikelola oleh penyedia identitas eksternal (LDAP/AD atau SSO). Kata sandi dan peran dikendalikan oleh penyedia dan tidak dapat diubah di sini." - }, - "folders": { - "title": "Folders", - "create": "Buat Folder", - "edit": "Sunting Map", - "delete": "Hapus Folder", - "name": "Folder Name", - "name_placeholder": "Masukkan nama folder", - "name_required": "Nama folder wajib diisi", - "name_too_long": "Nama folder terlalu panjang (maks 50 karakter)", - "color": "Color", - "icon": "Icon", - "not_found": "Foldernya tidak ditemukan", - "delete_confirm": "Apakah Anda yakin ingin menghapus folder ini? Penetapan perangkat akan dibatalkan.", - "delete_success": "Folder berhasil dihapus", - "created": "Folder berhasil dibuat", - "updated": "Folder berhasil diperbarui", - "no_devices_selected": "Tidak ada perangkat yang dipilih", - "devices_moved": "Perangkat berhasil dipindahkan", - "device_assigned": "Perangkat ditetapkan ke folder", - "unassigned": "Unassigned", - "all_devices": "Semua Perangkat", - "drag_hint": "Seret perangkat ke folder untuk mengaturnya", - "move_to": "Pindah ke", - "toggle_sidebar": "Alihkan bilah sisi" - }, + "no_groups": "Belum ada grup", + "manual_groups": "Grup manual", + "dynamic_memberships": "Keanggotaan dinamis", + "group_allowed_user_groups": "Grup pengguna yang diizinkan", + "group_allowed_user_groups_hint": "Pengguna di grup pengguna yang dipilih dapat mengakses grup perangkat ini.", + "no_user_groups": "Tidak ada grup pengguna", + "edit_group": "Sunting grup", + "delete_group": "Hapus grup", + "delete_group_confirm": "Hapus grup perangkat {name}?", + "group_deleted": "Grup perangkat dihapus", + "folder_group_readonly": "Grup yang didukung folder dikelola dari folder.", + "manage_user_groups": "Kelola grup pengguna", + "restore_failed": "Gagal memulihkan perangkat", + "no_signal_tooltip": "Klien baru saja menghubungi API tetapi tidak terdaftar di server sinyal (UDP :21116). Mulai ulang klien setelah migrasi server.", + "per_page": "Per halaman" + }, + "keys": { + "title": "Kunci Server", + "subtitle": "Kunci publik dan konfigurasi untuk klien RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Informasi Server", + "download": "Unduh Kunci", + "show_qr": "Show QR", + "qr_hint": "Pindai kode QR ini dengan aplikasi seluler RustDesk", + "no_key": "Tidak ada kunci publik yang ditemukan", + "no_key_to_copy": "Tidak ada kunci untuk disalin", + "no_qr": "Kode QR tidak tersedia", + "download_success": "File kunci diunduh", + "not_found": "Kunci tidak ditemukan", + "api_not_found": "Kunci API tidak ditemukan" + }, + "settings": { + "title": "Pengaturan", + "subtitle": "Konfigurasi konsol dan pengaturan akun", + "tab_general": "General", + "tab_server": "pelayan", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Bahasa", + "change_password": "Ubah Kata Sandi", + "password_desc": "Perbarui kata sandi akun Anda", + "current_password": "Kata Sandi Saat Ini", + "new_password": "Kata Sandi Baru", + "confirm_password": "Konfirmasi Kata Sandi", + "save_password": "Perbarui Kata Sandi", + "password_changed": "Kata sandi berhasil diubah", + "fill_all_fields": "Silakan isi semua kolom", + "passwords_not_match": "Kata sandi tidak cocok", + "password_requirements": "Persyaratan kata sandi", + "password_requirements_not_met": "Kata sandi tidak memenuhi persyaratan", + "req_length": "Setidaknya 8 karakter", + "req_uppercase": "Setidaknya satu huruf besar", + "req_lowercase": "Setidaknya satu huruf kecil", + "req_number": "Setidaknya satu nomor", + "server_info": "Informasi Server", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Aktivitas konsol terkini", + "no_audit_logs": "Tidak ada log audit yang ditemukan", + "backend_title": "Bagian Belakang Server", + "backend_desc": "Pilih backend server mana yang akan digunakan untuk manajemen perangkat dan layanan sinyal/relai.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Server sinyal dan relai RustDesk standar (hbbs + hbbr). HTTP API dasar dengan titik akhir terbatas.", + "backend_betterdesk_desc": "Server berbasis Go yang ditingkatkan dengan REST API penuh, autentikasi JWT, daftar blokir, tag, peristiwa WebSocket waktu nyata, dan pencatatan audit.", + "backend_feature_signal": "Server sinyal (pendaftaran ID)", + "backend_feature_relay": "Server relai (relai koneksi)", + "backend_feature_basic_api": "REST Dasar API", + "backend_feature_full_api": "REST Penuh API (34+ titik akhir)", + "backend_feature_jwt": "Otentikasi JWT & TOTP 2FA", + "backend_feature_blocklist": "Manajemen daftar blokir IP/ID", + "backend_feature_tags": "Tag & pengelompokan perangkat", + "backend_feature_audit": "Audit pencatatan peristiwa", + "backend_feature_websocket": "Acara WebSocket waktu nyata", + "backend_connection": "Koneksi", + "backend_api_url": "API URL", + "backend_test": "Uji Koneksi", + "backend_testing": "Menguji...", + "backend_save": "Terapkan Backend", + "backend_saved": "Backend server berhasil diubah. Data perangkat sekarang akan dikelola oleh backend baru.", + "backend_save_failed": "Gagal berpindah backend server", + "backend_test_success": "Koneksi berhasil! Server dapat dijangkau.", + "backend_test_failed": "Koneksi gagal. Server tidak dapat dijangkau.", + "backend_confirm_switch": "Apakah Anda yakin ingin mengganti backend server? Ini akan mengubah cara perangkat dikelola.", + "backend_unreachable": "Tidak dapat beralih: server target tidak dapat dijangkau. Mulai servernya terlebih dahulu.", + "invalid_backend": "Pilihan backend tidak valid. Pilih 'rustdesk' atau 'betterdesk'.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Otentikasi Dua Faktor", + "totp_desc": "Tambahkan lapisan keamanan ekstra dengan aplikasi autentikator TOTP (Google Authenticator, Microsoft Authenticator, Authy, dll.)", + "totp_enabled": "2FA Diaktifkan", + "totp_enabled_desc": "Akun Anda dilindungi dengan otentikasi dua faktor.", + "totp_disabled": "2FA Tidak Diaktifkan", + "totp_disabled_desc": "Aktifkan autentikasi dua faktor untuk keamanan akun tambahan.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Instal aplikasi autentikator di ponsel Anda", + "totp_step2": "Pindai kode QR di bawah ini", + "totp_step3": "Masukkan kode 6 digit untuk memverifikasi", + "totp_manual_key": "Manual key", + "totp_enter_code": "Masukkan kode verifikasi", + "totp_verify_enable": "Verifikasi & Aktifkan", + "totp_enabled_success": "Otentikasi dua faktor diaktifkan!", + "totp_recovery_warning": "Simpan kode pemulihan ini di tempat yang aman. Setiap kode hanya dapat digunakan satu kali. Jika Anda kehilangan akses ke aplikasi pengautentikasi, Anda dapat menggunakan kode ini untuk masuk.", + "totp_done": "Done", + "totp_disable_warning": "Menonaktifkan otentikasi dua faktor akan membuat akun Anda kurang aman. Masukkan kata sandi Anda untuk mengonfirmasi.", + "totp_disabled_success": "Otentikasi dua faktor telah dinonaktifkan.", + "tutorials_title": "Tutorial & Panduan", + "tutorials_desc": "Kontrol tur terpandu dan overlay bantuan yang ditampilkan di seluruh konsol", + "tutorials_enabled": "Aktifkan tutorial", + "tutorials_enabled_hint": "Jika dinonaktifkan, tutorial tidak akan dimulai secara otomatis dan tombol bantuan akan disembunyikan", + "tutorials_reset_hint": "Tandai semua tutorial sebagai tidak terlihat sehingga dapat ditampilkan kembali", + "tutorials_enabled_toast": "Tutorial diaktifkan", + "tutorials_disabled_toast": "Tutorial dinonaktifkan", + "tutorials_reset_toast": "Semua tutorial telah diatur ulang", + "tab_auth": "Otentikasi", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurasikan autentikasi eksternal melalui LDAP atau Active Directory. Pengguna akan dapat masuk dengan kredensial domain mereka.", + "ldap_enabled": "Aktifkan Otentikasi LDAP", + "ldap_enabled_hint": "Jika diaktifkan, pengguna dapat masuk dengan kredensial LDAP/AD. Akun lokal masih berfungsi sebagai cadangan.", + "ldap_connection": "Koneksi Server", + "ldap_host": "Tuan rumah", + "ldap_port": "Pelabuhan", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Lewati verifikasi TLS", + "ldap_timeout": "Batas waktu koneksi habis", + "ldap_timeout_hint": "Beberapa detik menunggu respons server LDAP", + "ldap_bind_mode": "Modus Mengikat", + "ldap_direct_bind": "Ikatan Langsung", + "ldap_direct_bind_hint": "Ikat langsung dengan templat DN alih-alih menggunakan akun layanan untuk mencari.", + "ldap_bind_dn": "Ikat DN (akun layanan)", + "ldap_bind_dn_hint": "Nama Khusus akun layanan hanya-baca yang digunakan untuk mencari pengguna.", + "ldap_bind_password": "Ikat Kata Sandi", + "ldap_base_dn": "Basis DN", + "ldap_base_dn_hint": "Basis pencarian untuk menemukan pengguna, mis. dc=contoh,dc=com", + "ldap_user_filter": "Filter Pengguna", + "ldap_user_filter_hint": "Filter LDAP untuk menemukan pengguna. Gunakan {{username}} sebagai pengganti. Bawaan: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Templat DN Pengikatan Langsung", + "ldap_direct_bind_dn_hint": "Templat DN untuk pengikatan langsung. Gunakan {{username}} sebagai placeholder, mis. uid={{username}},ou=pengguna,dc=contoh,dc=com", + "ldap_user_attrs": "Atribut Pengguna", + "ldap_attr_id": "Atribut Nama Pengguna", + "ldap_attr_email": "Atribut Email", + "ldap_attr_name": "Atribut Nama Tampilan", + "ldap_group_mapping": "Grup → Pemetaan Peran", + "ldap_group_base_dn": "Basis Grup DN", + "ldap_group_base_dn_hint": "Biarkan kosong untuk menggunakan Base DN utama", + "ldap_group_filter": "Filter Grup", + "ldap_group_attr_name": "Atribut Nama Grup", + "ldap_default_role": "Peran Default", + "ldap_default_role_hint": "Peran ditetapkan kepada pengguna yang grup LDAP-nya tidak cocok dengan pemetaan apa pun", + "ldap_role_viewer": "Penampil", + "ldap_role_operator": "Operator", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Grup → Peta Peran", + "ldap_group_role_map_hint": "Petakan grup LDAP ke peran BetterDesk. Format: GroupDN=peran dipisahkan oleh | (pipa). Contoh: CN=Admin,DC=contoh,DC=com=admin|CN=Ops,DC=contoh,DC=com=operator", + "ldap_test_connection": "Uji Koneksi", + "ldap_testing": "Menguji...", + "ldap_test_success": "Koneksi berhasil! Server LDAP dapat dijangkau dan kredensial pengikatannya valid.", + "ldap_test_failed": "Koneksi gagal", + "ldap_save": "Simpan Konfigurasi LDAP", + "ldap_saved": "Konfigurasi LDAP berhasil disimpan", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfigurasikan Single Sign-On melalui penyedia OpenID Connect (Azure AD, Okta, Google, Keycloak, dll.).", + "oidc_enabled": "Aktifkan Otentikasi OIDC", + "oidc_enabled_hint": "Izinkan pengguna masuk dengan penyedia identitas eksternal", + "oidc_provider": "Penyedia Identitas", + "oidc_display_name": "Nama Tampilan Tombol", + "oidc_display_name_hint": "Teks yang ditampilkan pada tombol masuk (misalnya Azure AD, Okta)", + "oidc_issuer_url": "Penerbit URL", + "oidc_issuer_url_hint": "Penerbit OpenID Connect URL (penemuan akan otomatis)", + "oidc_client_id": "ID Klien", + "oidc_client_secret": "Rahasia Klien", + "oidc_redirect_url": "Pengalihan URL (Panggilan Balik)", + "oidc_redirect_url_hint": "Harus sama persis dengan apa yang dikonfigurasi di IdP Anda. Biasanya: http://server-Anda:21114/api/auth/oidc/callback", + "oidc_scopes": "Lingkup", + "oidc_use_pkce": "Gunakan PKCE (disarankan)", + "oidc_auto_discovery": "Penemuan otomatis", + "oidc_allow_signup": "Buat pengguna secara otomatis", + "oidc_manual_endpoints": "URL Titik Akhir Manual", + "oidc_authorization_url": "Titik Akhir Otorisasi", + "oidc_token_url": "Titik Akhir Token", + "oidc_userinfo_url": "Titik Akhir Info Pengguna", + "oidc_claim_mapping": "Pemetaan Klaim", + "oidc_claim_username": "Klaim Nama Pengguna", + "oidc_claim_email": "Klaim Email", + "oidc_claim_name": "Klaim Nama Tampilan", + "oidc_claim_groups": "Klaim Grup", + "oidc_role_mapping": "Pemetaan Peran", + "oidc_default_role": "Peran Default", + "oidc_group_role_map": "Grup → Pemetaan Peran", + "oidc_group_role_map_hint": "Satu pemetaan per baris: group_name=role (misalnya admin=admin, operator=operator)", + "oidc_test_discovery": "Uji Penemuan", + "oidc_testing": "Menguji...", + "oidc_test_success": "Penemuan berhasil! Titik akhir terselesaikan.", + "oidc_test_failed": "Penemuan gagal", + "oidc_issuer_required": "Penerbit URL diwajibkan untuk menguji penemuan", + "oidc_save": "Simpan Konfigurasi OIDC", + "oidc_saved": "Konfigurasi OIDC berhasil disimpan", + "tab_advanced": "Lanjutan", + "connection_mode_title": "Strategi koneksi", + "connection_mode_desc": "Kendalikan cara klien desktop RustDesk terhubung: P2P langsung (hole punch) jika memungkinkan, atau selalu melalui relay.", + "connection_mode_label": "Mode koneksi default", + "connection_mode_p2p_first": "P2P terlebih dahulu (disarankan) — coba koneksi langsung, fallback ke relay jika gagal", + "connection_mode_relay_only": "Hanya relay — semua sesi menggunakan server relay", + "connection_mode_advanced": "Opsi lanjutan", + "connection_mode_fallback_ms": "Batas waktu fallback P2P (ms)", + "connection_mode_same_nat_relay": "Paksa relay saat kedua peer berbagi IP publik yang sama (NAT hairpin)", + "connection_mode_network_hint": "P2P memerlukan port UDP 21116 yang dapat dijangkau antar klien. Server harus membuka Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115. Klien browser web selalu menggunakan relay.", + "connection_mode_save": "Simpan", + "connection_mode_save_restart": "Simpan & mulai ulang server", + "connection_mode_saved": "Mode koneksi tersimpan", + "connection_mode_restart_started": "Mulai ulang server dimulai", + "connection_mode_restart_failed": "Mulai ulang server gagal", + "connection_mode_not_configurable": "Mode koneksi tidak dapat diubah pada deployment ini (tidak ada unit systemd atau docker-compose)", + "connection_mode_compose_error": "Tidak dapat menemukan bagian server environment di docker-compose.yml", + "connection_mode_source_saved": "Tersimpan di", + "connection_mode_source_defaults": "Menggunakan default server (tidak bisa ditulis dari panel)", + "connection_mode_runtime": "Server aktif", + "advanced_title": "File konfigurasi", + "advanced_desc": "Edit file konfigurasi server secara langsung. Perubahan mungkin memerlukan restart layanan. Salinan cadangan dibuat sebelum setiap penyimpanan.", + "advanced_warning": "File-file ini berisi rahasia (API key, kata sandi database, session secret). Edit hanya jika Anda memahami dampaknya. Sintaks yang salah dapat mencegah server dari starting.", + "advanced_files_label": "File", + "advanced_select_file": "Pilih file dari daftar untuk melihat atau mengedit isinya.", + "advanced_reload": "Muat ulang", + "advanced_save": "Simpan file", + "advanced_apply_restart": "Terapkan (restart layanan)", + "advanced_saved": "File konfigurasi tersimpan", + "advanced_restart_after_save": "Konfigurasi tersimpan. Restart layanan yang terpengaruh sekarang agar perubahan berlaku?", + "advanced_restart_confirm": "Restart layanan BetterDesk terkait? Koneksi aktif mungkin terganggu sebentar.", + "advanced_restart_console_confirm": "Restart layanan web console? Sesi browser akan terputus sebentar dan halaman akan dimuat ulang saat console kembali.", + "advanced_restart_started": "Restart layanan dimulai", + "advanced_restart_done": "Console di-restart — memuat ulang halaman…", + "advanced_restart_polling": "Menunggu console kembali online…", + "advanced_restart_timeout": "Restart dikirim tetapi console tidak merespons tepat waktu. Periksa log systemd/NSSM dan muat ulang secara manual.", + "advanced_restart_failed": "Restart layanan gagal (hak istimewa tidak cukup atau layanan belum terinstal)", + "advanced_save_confirm": "Simpan perubahan pada file ini? Cadangan versi sebelumnya akan dibuat.", + "advanced_unsaved_confirm": "Anda memiliki perubahan yang belum disimpan. Buang?", + "advanced_no_files": "Tidak ada file konfigurasi yang tersedia di sistem ini.", + "advanced_readonly": "hanya baca", + "advanced_missing": "hilang", + "advanced_new_file": "File baru (belum dibuat sampai Anda menyimpan)", + "advanced_new_file_hint": "File baru — tambahkan konten dan simpan", + "advanced_backup_created": "cadangan dibuat", + "advanced_restart_console": "Restart layanan web console (mis. systemctl restart betterdesk-console) agar perubahan .env berlaku.", + "advanced_restart_goserver": "Restart BetterDesk Go server agar perubahan blocklist dimuat.", + "advanced_restart_systemd": "Setelah mengedit unit systemd, jalankan: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Restart layanan yang terpengaruh agar perubahan berlaku.", + "advanced_error_unknown": "File konfigurasi tidak dikenal", + "advanced_error_not_found": "File tidak ada", + "advanced_error_not_file": "Path bukan file biasa", + "advanced_error_too_large": "File melebihi ukuran yang dapat diedit maksimum (512 KB)", + "advanced_error_binary": "File biner tidak dapat diedit di panel", + "advanced_error_invalid": "Konten file tidak valid", + "advanced_error_not_writable": "Proses console tidak dapat menulis file ini", + "advanced_file_console-env": "Lingkungan console (.env)", + "advanced_file_console-env-local": "Override console (.env.local)", + "advanced_file_go-blocklist": "Daftar blokir server Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unit layanan)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unit layanan)", + "advanced_file_console-session-secret": "Rahasia sesi konsol (.session_secret)", + "advanced_file_go-audit-log": "Log audit server Go (audit.jsonl)", + "advanced_file_build-env": "Lingkungan build agen (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfigurasi supervisor)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrasi)", + "advanced_restart_none": "File ini tidak memerlukan restart layanan.", + "enrollment_title": "Pendaftaran perangkat (RustDesk)", + "enrollment_desc": "Kendalikan cara klien RustDesk baru mendaftar dan cara operator menyetujuinya di halaman permintaan pendaftaran.", + "enrollment_require_approval": "Perlu persetujuan operator (Mode terkelola)", + "enrollment_require_approval_hint": "Jika diaktifkan, klien yang tidak dikenal akan antri sampai operator menyetujuinya di \"Permintaan Pendaftaran\".", + "enrollment_rich_approve": "Formulir persetujuan lengkap (nama, folder, grup, tag)", + "enrollment_rich_approve_hint": "Menampilkan dialog terperinci saat menyetujui permintaan pendaftaran atau pendaftaran LAN.", + "enrollment_tag_picker": "Pilih tag dari tag perangkat yang ada", + "enrollment_tag_picker_hint": "Memungkinkan operator memilih tag dari daftar di halaman Perangkat alih-alih hanya mengetik.", + "enrollment_open_requests": "Buka permintaan pendaftaran", + "enrollment_pending_count": "{count} permintaan pendaftaran tertunda" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Gagal Masuk", + "action_logout": "Logout", + "action_password_change": "Kata Sandi Berubah", + "action_2fa_enable": "2FA Diaktifkan", + "action_2fa_disable": "2FA Dinonaktifkan", + "action_user_create": "Pengguna Dibuat", + "action_user_update": "Pengguna Diperbarui", + "action_user_delete": "Pengguna Dihapus", + "action_settings_update": "Pengaturan Diperbarui", + "action_device_ban": "Perangkat Dilarang", + "action_device_unban": "Perangkat Tidak Diblokir", + "action_device_delete": "Perangkat Dihapus" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Fitur awal — generator paket agen sedang dalam pengembangan aktif.", + "config_options": "Opsi Konfigurasi", + "server_address": "Alamat Server", + "server_address_hint": "Domain atau alamat IP server Anda", + "custom_port": "Custom Port", + "port_hint": "Biarkan kosong untuk default (21116)", + "relay_server": "Server Relai", + "relay_placeholder": "Sama seperti ID server jika kosong", + "relay_hint": "Opsional: alamat server relai terpisah", + "include_key": "Sertakan kunci publik dalam konfigurasi", + "generate": "Hasilkan Konfigurasi", + "output": "Keluaran Konfigurasi", + "usage_title": "Detail Koneksi", + "generated": "Konfigurasi dihasilkan", + "server_required": "Alamat server diperlukan", + "nothing_to_copy": "Buat konfigurasi terlebih dahulu", + "bundles_title": "Paket agen", + "new_bundle": "Bundel baru", + "editor_title": "Editor bundel", + "empty_state": "Pilih paket di sebelah kiri atau buat paket baru untuk memulai.", + "loading": "Memuat…", + "no_bundles": "Belum ada bundel. Buat yang pertama Anda.", + "bundle_name": "Nama bundel", + "bundle_name_hint": "Hanya label internal — tidak ditampilkan kepada pengguna akhir.", + "short_link": "Tautan unduhan pendek", + "short_link_hint": "Digunakan di URL publik (/d/…). Hanya huruf kecil, angka, dan tanda hubung (2–32 karakter). Diisi otomatis dari nama paket — persingkat untuk memudahkan berbagi (mis. acme).", + "branding_section": "merek", + "company_name": "Nama perusahaan/merek", + "short_text": "Deskripsi singkat", + "contact_email": "Hubungi email", + "contact_phone": "Hubungi telepon", + "contact_url": "Hubungi situs web", + "logo": "logo", + "logo_hint": "PNG, JPEG, SVG atau WebP. Maksimum 256 KB.", + "logo_clear": "Hapus logo", + "primary_color": "Warna primer", + "accent_color": "Warna tajuk", + "default_lang": "Bahasa bawaan", + "allow_unattended": "Izinkan akses tanpa pengawasan", + "allow_unattended_hint": "Saat diaktifkan, agen menampilkan kata sandi permanen untuk akses operator.", + "save": "Simpan bundel", + "revoke": "Cabut", + "unrevoke": "Aktifkan kembali", + "revoked": "Dicabut", + "preview_title": "Pratinjau langsung", + "preview_hint": "Perkiraan tampilan jendela agen pengguna akhir.", + "preview_default_name": "Dukungan BetterDesk", + "preview_status_ready": "Siap", + "preview_id": "tanda pengenal Anda", + "preview_password": "Kata sandi", + "preview_chat": "Mengobrol dengan dukungan", + "preview_settings": "Pengaturan (khusus admin)", + "preview_quit": "Keluar (khusus admin)", + "download_link_title": "Tautan unduhan", + "download_link_hint": "Bagikan tautan ini dengan pengguna akhir. Mereka akan melihat halaman unduhan bermerek. Tautan hex lama tetap berfungsi setelah Anda mengubah tautan pendek.", + "open_portal": "Buka", + "created": "Paket dibuat", + "saved": "Paket disimpan", + "deleted": "Paket dihapus", + "revoked_ok": "Bundel dicabut", + "unrevoked_ok": "Paket diaktifkan kembali", + "link_copied": "Tautan disalin ke papan klip", + "copy_failed": "Tidak dapat menyalin secara otomatis — harap salin secara manual", + "unsaved_confirm": "Buang perubahan yang belum disimpan?", + "confirm_revoke": "Cabut paket ini? Tautan unduhan akan berhenti berfungsi.", + "confirm_unrevoke": "Aktifkan kembali paket ini?", + "confirm_delete": "Hapus paket ini secara permanen? Hal ini tidak dapat dibatalkan.", "errors": { - "forbidden_title": "Akses Ditolak", - "forbidden_message": "Anda tidak memiliki izin untuk mengakses sumber daya ini.", - "not_found_title": "Halaman Tidak Ditemukan", - "not_found_message": "Halaman yang Anda cari tidak ada atau telah dipindahkan.", - "server_error_title": "Kesalahan Server", - "server_error_message": "Ada yang tidak beres. Silakan coba lagi nanti.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Gagal memuat perangkat", - "load_key_failed": "Gagal memuat kunci", - "load_qr_failed": "Gagal memuat QR", - "load_audit_failed": "Gagal memuat log audit", - "load_users_failed": "Gagal memuat pengguna", - "load_folders_failed": "Gagal memuat folder", - "download_failed": "Pengunduhan gagal", - "logout_failed": "Gagal keluar", - "password_change_failed": "Gagal mengubah kata sandi", - "language_change_failed": "Gagal mengubah bahasa", - "ban_failed": "Gagal memblokir perangkat", - "unban_failed": "Gagal membatalkan pemblokiran perangkat", - "delete_failed": "Gagal menghapus perangkat", - "change_id_failed": "Gagal mengubah ID perangkat", - "bulk_delete_failed": "Gagal menghapus perangkat", - "sync_failed": "Gagal menyinkronkan status", - "error": "Error", - "not_found": "Not found", - "server_error": "Kesalahan server", - "load_device_failed": "Gagal memuat perangkat", - "load_orgs_failed": "Gagal memuat organisasi" + "validation_failed": "Validasi gagal", + "name_required": "Nama paket wajib diisi", + "company_name_required": "Nama perusahaan wajib diisi", + "logo_invalid": "Logo harus berupa file gambar yang valid", + "logo_too_large": "Logo harus berukuran 256 KB atau lebih kecil", + "logo_read_failed": "Gagal membaca file logo", + "primary_color_invalid": "Warna primer harus berupa nilai hex (misalnya #2563eb)", + "accent_color_invalid": "Warna header harus berupa nilai hex (misalnya #1e293b)", + "contact_url_invalid": "Situs web kontak harus berupa URL yang valid", + "server_host_required": "Alamat server publik wajib diisi", + "server_host_invalid": "Masukkan nama domain atau alamat IPv4 yang valid", + "token_failed": "Tidak dapat membuat enrollment token — periksa konektivitas server", + "rebuild_revoked": "Tidak dapat rebuild bundle yang dicabut — aktifkan kembali terlebih dahulu", + "slug_invalid": "Tautan pendek hanya boleh berisi huruf kecil, angka, dan tanda hubung", + "slug_too_short": "Tautan pendek harus minimal 2 karakter", + "slug_too_long": "Tautan pendek maksimal 32 karakter", + "slug_taken": "Tautan pendek ini sudah digunakan paket lain" }, - "remote": { - "title": "Desktop Jarak Jauh", - "connecting": "Menghubungkan...", - "waiting_password": "Menunggu kata sandi", - "authenticating": "Mengautentikasi...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Kata Sandi Diperlukan", - "enter_password_for": "Masukkan kata sandi untuk perangkat", - "password_placeholder": "Kata sandi perangkat", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Kembali ke Perangkat", - "fullscreen": "Fullscreen", - "toggle_audio": "Alihkan Audio", - "send_keys": "Kirim Kunci", - "scale_mode": "Scale Mode", - "scale_fit": "Cocok untuk Jendela", - "scale_fill": "Fill Window", - "scale_original": "Ukuran Asli (1:1)", - "scale_stretch": "Regangkan untuk Mengisi", - "actions": "Actions", - "lock_screen": "Layar Kunci", - "restart_remote": "Mulai ulang Perangkat Jarak Jauh", - "refresh_screen": "Segarkan Layar", - "clipboard_paste": "Tempel dari Papan Klip", - "block_input": "Block Input", - "display_settings": "Pengaturan Tampilan", - "image_quality": "Kualitas Gambar", - "quality_best": "Terbaik (Kualitas Penuh, 60fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Tampilkan Kursor Jarak Jauh", - "lock_after_session": "Kunci Setelah Sesi", - "privacy_mode": "Modus Privasi", - "disable_clipboard": "Nonaktifkan Papan Klip", - "chat": "Chat", - "chat_placeholder": "Ketik pesan...", - "record": "Rekam Layar", - "view_only": "Lihat Saja", - "pin_toolbar": "Sematkan Bilah Alat", - "monitors": "Monitors", - "select_monitor": "Pilih Pantau", - "quality_speed": "Kecepatan (Kualitas Rendah, 60fps)", - "quality_quality": "Kualitas (Terbaik, 30fps)", - "recording_started": "Perekaman dimulai", - "recording_stopped": "Perekaman dihentikan", - "download_recording": "Unduh Rekaman", - "e2e_encrypted": "Dienkripsi Ujung-ke-Ujung", - "e2e_key_exchange": "Membangun saluran aman...", - "confirm_restart": "Apakah Anda yakin ingin memulai ulang perangkat jarak jauh?", - "webcodecs_not_supported": "Browser Anda tidak mendukung WebCodecs API. Silakan gunakan Chrome 94+ atau Edge 94+.", - "webcodecs_insecure_context": "WebCodecs tidak tersedia melalui HTTP. Video menggunakan fallback perangkat lunak. Untuk performa terbaik, gunakan HTTPS.", - "webcodecs_fallback_active": "Dekoder video perangkat lunak aktif (kinerja terbatas)", - "click_to_start": "Klik untuk Memulai", - "autoplay_blocked": "Browser memerlukan interaksi pengguna untuk memulai pemutaran video dan audio.", - "start_playback": "Mulai Pemutaran", - "new_connection": "Koneksi Baru", - "device_id_placeholder": "Masukkan ID Perangkat", - "http_warning": "Mode HTTP: terbatas pada dekode perangkat lunak H.264 (~15 FPS). Gunakan HTTPS untuk performa penuh (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Pemindahan Berkas", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Folder ini kosong", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Transfer gagal", - "file_show_hidden": "Tampilkan file tersembunyi", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Masukkan nama folder:", - "file_parent": "Folder induk", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Masukkan nama baru:", - "file_delete_confirm": "Apakah Anda yakin ingin menghapus item ini?", - "file_cancelled": "Pemindahan dibatalkan", - "2fa_required": "Diperlukan Verifikasi 2FA", - "2fa_hint": "Masukkan kode 6 digit dari aplikasi autentikator Anda", - "2fa_invalid": "Masukkan kode 6 digit yang valid", - "verify": "Verify", - "use_cdap_fallback": "Gunakan penampil CDAP", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "Papan klip kosong", - "clipboard_denied": "Akses papan klip ditolak. HTTPS diperlukan atau izin tidak diberikan.", - "file_loading": "Memuat...", - "file_timeout": "Perangkat jarak jauh tidak merespons. Transfer file mungkin tidak didukung atau dinonaktifkan pada mesin jarak jauh.", - "codec": "Kodek Video", - "codec_auto": "Otomatis (disarankan)" + "legacy_title": "Generator Konfigurasi Klien", + "connection_section": "Koneksi server", + "server_host": "Alamat server publik", + "server_host_placeholder": "support.example.com atau 203.0.113.10", + "server_host_hint": "Nama domain atau IP publik tempat pengguna akhir menjangkau server BetterDesk Anda. Port diambil dari konfigurasi console.", + "use_https": "Gunakan HTTPS / WSS (disarankan)", + "enrollment_token": "Pendaftaran perangkat", + "enrollment_token_pending": "Per perangkat setelah persetujuan", + "enrollment_token_set": "Per perangkat — setujui di Registrations", + "enrollment_token_hint": "Setiap instalasi mendaftar sendiri. Setujui perangkat baru di panel Registrations; server kemudian menerbitkan kunci akses unik per komputer.", + "enrollment_per_device": "Per perangkat — setujui di Registrations", + "background_color": "Latar belakang jendela", + "surface_color": "Latar belakang kartu", + "text_color": "Warna teks", + "text_muted_color": "Warna teks redup", + "status_ready_color": "Warna indikator siap", + "header_text_color": "Warna teks header", + "builds_title": "Build klien", + "builds_hint": "Installer yang dikompilasi di server ini untuk setiap platform. Rebuild setelah memperbaiki kesalahan toolchain atau memperbarui sumber agen.", + "builds_loading": "Memuat status build…", + "builds_empty": "Belum ada build dalam antrian — simpan bundle atau klik Rebuild semua.", + "rebuild_all": "Rebuild semua", + "rebuilding_all": "Mengantrekan rebuild…", + "rebuild_queued": "Semua build platform diantrekan", + "rebuild_confirm": "Rebuild semua installer platform untuk bundle ini? Artefak yang sudah siap akan diganti.", + "build_status_ready": "Siap", + "build_status_pending": "Antrian", + "build_status_building": "Membangun", + "build_status_failed": "Gagal", + "builds_summary": "{{ready}} siap · {{pending}} antrian · {{building}} membangun · {{failed}} gagal", + "build_error_hint": "Kesalahan build", + "preview_help": "Minta bantuan" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "Server ID", + "relay_server": "Server Relai", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Memeriksa...", + "label": "Status", + "no_signal": "Tanpa sinyal" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Terhubung melalui Klien Desktop", + "remote_viewer": "Penampil Jarak Jauh", + "web_remote": "Jarak Jauh Web", + "details": "Details", + "edit": "Sunting", + "delete": "Hapus", + "ban": "Ban", + "unban": "Unban", + "save": "Simpan", + "cancel": "Batalkan", + "confirm": "Konfirmasikan", + "close": "Tutup", + "clear": "Clear", + "ok": "OK", + "saved": "Berhasil disimpan", + "back": "Kembali", + "create": "Buat", + "dismiss": "Dismiss", + "view_all": "Lihat Semua", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count} yang lalu", + "minutes_ago": "{count}m yang lalu", + "hours_ago": "{count}h yang lalu", + "days_ago": "{count}d yang lalu", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Manajemen Pengguna", + "subtitle": "Kelola pengguna dan izin konsol", + "add_user": "Add User", + "edit_user": "Sunting Pengguna", + "username": "Nama pengguna", + "username_placeholder": "Masukkan nama pengguna", + "username_hint": "3-32 karakter, huruf, angka dan garis bawah saja", + "password": "Kata sandi", + "password_placeholder": "Masukkan kata sandi", + "password_hint": "Minimal 8 karakter dengan campuran huruf besar-kecil, angka dan simbol", + "password_leave_empty": "Biarkan kosong agar tetap terkini", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Dibuat", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Buat Pengguna", + "edit": "Sunting", + "reset_password": "Atur Ulang Kata Sandi", + "new_password": "Kata Sandi Baru", + "delete_title": "Hapus Pengguna", + "delete_confirm": "Apakah Anda yakin ingin menghapus pengguna {username}?", + "delete_success": "Pengguna berhasil dihapus", + "user_created": "Pengguna berhasil dibuat", + "user_updated": "Pengguna berhasil diperbarui", + "password_reset_success": "Reset kata sandi berhasil", + "empty_title": "Tidak ada pengguna yang ditemukan", + "empty_text": "Tambahkan pengguna untuk mengelola akses konsol", + "fill_required": "Silakan isi semua bidang yang wajib diisi", + "invalid_username": "Nama pengguna harus terdiri dari 3-32 karakter, hanya huruf, angka, dan garis bawah", + "username_exists": "Nama pengguna sudah ada", + "weak_password": "Kata sandi terlalu lemah", + "password_too_short": "Kata sandi minimal harus 8 karakter", + "invalid_role": "Peran tidak valid", + "cannot_demote_self": "Anda tidak dapat menurunkan diri Anda sendiri", + "cannot_delete_self": "Anda tidak dapat menghapus akun Anda sendiri", + "last_admin": "Tidak dapat menghapus administrator terakhir", + "admin_only": "Fitur ini hanya tersedia untuk administrator", + "password_required": "Kata sandi diperlukan", + "not_found": "Pengguna tidak ditemukan", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Praktik Terbaik Keamanan", + "tip_strong_passwords": "Gunakan kata sandi yang kuat dan unik untuk setiap pengguna", + "tip_unique_accounts": "Buat akun individual untuk setiap orang", + "tip_viewer_role": "Gunakan peran pemirsa untuk pengguna yang hanya membutuhkan akses baca", + "tip_operator_role": "Gunakan peran operator untuk pengguna yang perlu mengelola perangkat tetapi bukan pengguna", + "tip_audit_logs": "Tinjau log audit secara teratur untuk mengetahui adanya aktivitas mencurigakan", + "role_pro": "Pro (hanya API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Admin Server", + "role_global_admin": "Admin Sedunia", + "organizations": "Organisasi", + "user_organizations": "Organisasi untuk {username}", + "no_organizations": "Pengguna tidak ditugaskan ke organisasi mana pun", + "org_removed": "Penugasan organisasi dihapus", + "server_role_label": "Peran Server", + "server_role_hint": "Menentukan apa yang dapat dilakukan pengguna di seluruh konsol (akses panel, konfigurasi server, audit, dll.).", + "org_membership_section": "Keanggotaan Organisasi", + "org_membership_hint": "Seorang pengguna dapat menjadi anggota beberapa organisasi. Peran organisasi hanya mengontrol izin di dalam organisasi tersebut dan tidak bergantung pada peran server di atas.", + "column_organizations": "Organisasi", + "no_orgs_short": "—", + "org_count_one": "Organisasi {count}", + "org_count_many": "Organisasi {count}", + "all_orgs_assigned": "Pengguna sudah menjadi anggota setiap organisasi.", + "user_groups": "Kelompok pengguna", + "user_groups_hint": "Grup pengguna dapat digunakan untuk memberikan akses ke grup perangkat yang dipilih.", + "loading_user_groups": "Memuat grup pengguna...", + "no_user_groups": "Tidak ada grup pengguna yang tersedia", + "create_user_group": "Buat grup", + "edit_user_group": "Edit grup pengguna", + "delete_user_group": "Hapus grup pengguna", + "delete_user_group_confirm": "Hapus grup pengguna {name}? Anggota akan kehilangan akses yang diberikan melalui grup ini.", + "user_group_created": "Grup pengguna dibuat", + "user_group_updated": "Grup pengguna diperbarui", + "user_group_deleted": "Grup pengguna dihapus", + "user_group_not_found": "Grup pengguna tidak ditemukan", + "group_name": "Nama grup", + "group_name_placeholder": "Operator", + "group_note": "Note", + "group_note_placeholder": "Catatan opsional", + "group_name_required": "Nama grup wajib diisi", + "group_members_count": "Anggota {count}", + "provider": "Penyedia", + "provider_local": "Lokal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Dikelola oleh penyedia identitas", + "provider_managed_hint": "Akun ini dikelola oleh penyedia identitas eksternal (LDAP/AD atau SSO). Kata sandi dan peran dikendalikan oleh penyedia dan tidak dapat diubah di sini." + }, + "folders": { + "title": "Folders", + "create": "Buat Folder", + "edit": "Sunting Map", + "delete": "Hapus Folder", + "name": "Folder Name", + "name_placeholder": "Masukkan nama folder", + "name_required": "Nama folder wajib diisi", + "name_too_long": "Nama folder terlalu panjang (maks 50 karakter)", + "color": "Color", + "icon": "Icon", + "not_found": "Foldernya tidak ditemukan", + "delete_confirm": "Apakah Anda yakin ingin menghapus folder ini? Penetapan perangkat akan dibatalkan.", + "delete_success": "Folder berhasil dihapus", + "created": "Folder berhasil dibuat", + "updated": "Folder berhasil diperbarui", + "no_devices_selected": "Tidak ada perangkat yang dipilih", + "devices_moved": "Perangkat berhasil dipindahkan", + "device_assigned": "Perangkat ditetapkan ke folder", + "unassigned": "Unassigned", + "all_devices": "Semua Perangkat", + "drag_hint": "Seret perangkat ke folder untuk mengaturnya", + "move_to": "Pindah ke", + "toggle_sidebar": "Alihkan bilah sisi" + }, + "errors": { + "forbidden_title": "Akses Ditolak", + "forbidden_message": "Anda tidak memiliki izin untuk mengakses sumber daya ini.", + "not_found_title": "Halaman Tidak Ditemukan", + "not_found_message": "Halaman yang Anda cari tidak ada atau telah dipindahkan.", + "server_error_title": "Kesalahan Server", + "server_error_message": "Ada yang tidak beres. Silakan coba lagi nanti.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Gagal memuat perangkat", + "load_key_failed": "Gagal memuat kunci", + "load_qr_failed": "Gagal memuat QR", + "load_audit_failed": "Gagal memuat log audit", + "load_users_failed": "Gagal memuat pengguna", + "load_folders_failed": "Gagal memuat folder", + "download_failed": "Pengunduhan gagal", + "logout_failed": "Gagal keluar", + "password_change_failed": "Gagal mengubah kata sandi", + "language_change_failed": "Gagal mengubah bahasa", + "ban_failed": "Gagal memblokir perangkat", + "unban_failed": "Gagal membatalkan pemblokiran perangkat", + "delete_failed": "Gagal menghapus perangkat", + "change_id_failed": "Gagal mengubah ID perangkat", + "bulk_delete_failed": "Gagal menghapus perangkat", + "sync_failed": "Gagal menyinkronkan status", + "error": "Error", + "not_found": "Not found", + "server_error": "Kesalahan server", + "load_device_failed": "Gagal memuat perangkat", + "load_orgs_failed": "Gagal memuat organisasi" + }, + "remote": { + "title": "Desktop Jarak Jauh", + "connecting": "Menghubungkan...", + "waiting_password": "Menunggu kata sandi", + "authenticating": "Mengautentikasi...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Kata Sandi Diperlukan", + "enter_password_for": "Masukkan kata sandi untuk perangkat", + "password_placeholder": "Kata sandi perangkat", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Kembali ke Perangkat", + "fullscreen": "Fullscreen", + "toggle_audio": "Alihkan Audio", + "send_keys": "Kirim Kunci", + "scale_mode": "Scale Mode", + "scale_fit": "Cocok untuk Jendela", + "scale_fill": "Fill Window", + "scale_original": "Ukuran Asli (1:1)", + "scale_stretch": "Regangkan untuk Mengisi", + "actions": "Actions", + "lock_screen": "Layar Kunci", + "restart_remote": "Mulai ulang Perangkat Jarak Jauh", + "refresh_screen": "Segarkan Layar", + "clipboard_paste": "Tempel dari Papan Klip", + "block_input": "Block Input", + "display_settings": "Pengaturan Tampilan", + "image_quality": "Kualitas Gambar", + "quality_best": "Terbaik (Kualitas Penuh, 60fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Tampilkan Kursor Jarak Jauh", + "lock_after_session": "Kunci Setelah Sesi", + "privacy_mode": "Modus Privasi", + "disable_clipboard": "Nonaktifkan Papan Klip", + "chat": "Chat", + "chat_placeholder": "Ketik pesan...", + "record": "Rekam Layar", + "view_only": "Lihat Saja", + "pin_toolbar": "Sematkan Bilah Alat", + "monitors": "Monitors", + "select_monitor": "Pilih Pantau", + "quality_speed": "Kecepatan (Kualitas Rendah, 60fps)", + "quality_quality": "Kualitas (Terbaik, 30fps)", + "recording_started": "Perekaman dimulai", + "recording_stopped": "Perekaman dihentikan", + "download_recording": "Unduh Rekaman", + "e2e_encrypted": "Dienkripsi Ujung-ke-Ujung", + "e2e_key_exchange": "Membangun saluran aman...", + "confirm_restart": "Apakah Anda yakin ingin memulai ulang perangkat jarak jauh?", + "webcodecs_not_supported": "Browser Anda tidak mendukung WebCodecs API. Silakan gunakan Chrome 94+ atau Edge 94+.", + "webcodecs_insecure_context": "WebCodecs tidak tersedia melalui HTTP. Video menggunakan fallback perangkat lunak. Untuk performa terbaik, gunakan HTTPS.", + "webcodecs_fallback_active": "Dekoder video perangkat lunak aktif (kinerja terbatas)", + "click_to_start": "Klik untuk Memulai", + "autoplay_blocked": "Browser memerlukan interaksi pengguna untuk memulai pemutaran video dan audio.", + "start_playback": "Mulai Pemutaran", + "new_connection": "Koneksi Baru", + "device_id_placeholder": "Masukkan ID Perangkat", + "http_warning": "Mode HTTP: terbatas pada dekode perangkat lunak H.264 (~15 FPS). Gunakan HTTPS untuk performa penuh (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Pemindahan Berkas", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Folder ini kosong", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Transfer gagal", + "file_show_hidden": "Tampilkan file tersembunyi", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Masukkan nama folder:", + "file_parent": "Folder induk", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Masukkan nama baru:", + "file_delete_confirm": "Apakah Anda yakin ingin menghapus item ini?", + "file_cancelled": "Pemindahan dibatalkan", + "2fa_required": "Diperlukan Verifikasi 2FA", + "2fa_hint": "Masukkan kode 6 digit dari aplikasi autentikator Anda", + "2fa_invalid": "Masukkan kode 6 digit yang valid", + "verify": "Verify", + "use_cdap_fallback": "Gunakan penampil CDAP", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "Papan klip kosong", + "clipboard_denied": "Akses papan klip ditolak. HTTPS diperlukan atau izin tidak diberikan.", + "file_loading": "Memuat...", + "file_timeout": "Perangkat jarak jauh tidak merespons. Transfer file mungkin tidak didukung atau dinonaktifkan pada mesin jarak jauh.", + "codec": "Kodek Video", + "codec_auto": "Otomatis (disarankan)" + }, + "branding": { + "identity_title": "Identitas Merek", + "identity_desc": "Sesuaikan nama dan deskripsi aplikasi yang ditampilkan di seluruh konsol", + "app_name": "Nama Aplikasi", + "app_description": "Deskripsi Aplikasi", + "logo_title": "Logo", + "logo_desc": "Pilih bagaimana logo Anda muncul di sidebar dan halaman login", + "logo_type_icon": "Ikon Bahan", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "Masukkan nama Ikon Material (misalnya dns, cloud, keamanan). Lihat font.google.com/icons", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "Tempelkan markup SVG Anda di sini. Mendukung elemen penuh dengan jalur dan gaya.", + "logo_image_upload": "Unggah Gambar", + "logo_image_choose": "Pilih file gambar", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Jenis berkas tidak valid. Gunakan PNG, JPG, GIF, WebP atau SVG.", + "preview": "Preview", + "colors_title": "Skema Warna", + "colors_desc": "Sesuaikan palet warna. Biarkan kosong untuk menggunakan default.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "Warna Aksen", + "colors_borders": "Borders", + "import_export_title": "Impor / Ekspor", + "import_export_desc": "Simpan tema Anda sebagai file JSON atau impor tema dari instance lain", + "export_theme": "Ekspor Tema", + "import_theme": "Impor Tema", + "reset_defaults": "Atur Ulang ke Default", + "save_branding": "Simpan Merek", + "saved": "Pencitraan merek berhasil disimpan. Memuat ulang...", + "exported": "Tema diekspor", + "imported": "Tema berhasil diimpor. Memuat ulang...", + "import_error": "Gagal mengimpor tema. Format berkas tidak valid.", + "reset_confirm": "Apakah Anda yakin ingin menyetel ulang pencitraan merek ke default? Hal ini tidak dapat dibatalkan.", + "reset_success": "Pencitraan merek disetel ulang ke default. Memuat ulang...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Teks utama ditampilkan sebagai logo merek Anda", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Teks sekunder di bawah logo (misalnya nama produk atau tagline)", + "logo_upload_success": "Logo berhasil diunggah.", + "typography_title": "Typography", + "typography_desc": "Pilih font untuk judul dan teks isi. Font diunduh ke server untuk dihosting sendiri.", + "font_heading": "Font Judul", + "font_heading_hint": "Digunakan untuk judul (H1–H6) dan logo teks", + "font_body": "Body Font", + "font_body_hint": "Digunakan untuk teks isi dan elemen UI", + "font_search_placeholder": "Cari font...", + "font_system_default": "Bawaan sistem", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "font diunduh di server", + "powered_by": "Didukung oleh", + "background_title": "Latar Belakang & Tampilan", + "background_desc": "Atur wallpaper console, gradient, atau latar belakang warna solid. Kartu melayang di atasnya.", + "bg_type_none": "Tidak ada", + "bg_type_color": "Warna Solid", + "bg_type_gradient": "Gradient", + "bg_type_image": "Gambar", + "bg_color": "Warna Latar Belakang", + "bg_gradient": "Gradien CSS", + "bg_gradient_hint": "CSS gradient yang valid, mis. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Unggah Gambar Latar Belakang", + "bg_image_choose": "Pilih file gambar", + "bg_image_hint": "PNG, JPG, WebP atau GIF. Maks 8 MB. Disimpan di server.", + "bg_image_url": "Path / URL Gambar", + "bg_size": "Ukuran Gambar", + "bg_size_cover": "Cover (isi layar)", + "bg_size_contain": "Contain (sesuaikan)", + "bg_size_auto": "Otomatis (asli)", + "bg_blur": "Blur Latar Belakang", + "bg_overlay": "Overlay Gelap", + "bg_overlay_hint": "Mempergelap latar belakang untuk keterbacaan teks yang lebih baik.", + "bg_image_too_large": "Gambar terlalu besar. Ukuran maksimum 8 MB.", + "bg_image_invalid_type": "Jenis file tidak valid. Gunakan PNG, JPG, WebP atau GIF.", + "bg_upload_success": "Gambar latar belakang berhasil diunggah.", + "login_title": "Halaman Login", + "login_desc": "Sesuaikan judul, subjudul, dan latar belakang layar login.", + "login_heading": "Judul Login", + "login_heading_placeholder": "Selamat datang kembali", + "login_subheading": "Subjudul Login", + "login_subheading_placeholder": "Masuk ke akun Anda", + "login_bg_inherit": "Sama dengan console", + "agent_title": "Halaman Unduhan Agent", + "agent_desc": "Sesuaikan portal unduhan agent publik yang ditampilkan kepada pengguna akhir.", + "agent_show_powered": "Tampilkan \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Tampilkan atribusi BetterDesk di footer portal unduhan.", + "footer_title": "Footer & Hak Cipta", + "footer_desc": "Tambahkan baris footer kustom yang ditampilkan di layar login dan sidebar console.", + "footer_text": "Teks Footer", + "footer_text_hint": "mis. pemberitahuan hak cipta atau nama perusahaan.", + "show_powered": "Tampilkan atribusi \"BetterDesk\"", + "show_powered_hint": "Tampilkan nama dan versi BetterDesk di footer login dan sidebar.", + "custom_css_title": "CSS Kustom", + "custom_css_desc": "Lanjutan: injeksi CSS kustom yang diterapkan di seluruh console dan halaman login.", + "custom_css_hint": "Gunakan dengan hati-hati. Aturan yang tidak valid atau tidak aman akan dibersihkan. Maks 20.000 karakter." + }, + "device_detail": { + "tab_overview": "Ikhtisar", + "tab_tags": "Tag & Catatan", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Koneksi", + "section_manage": "Manajemen", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Perangkat ini dilarang", + "no_reason": "Tidak ada alasan yang diberikan", + "tags": "Tags", + "no_tags": "Tidak ada tag yang ditetapkan untuk perangkat ini", + "tag_placeholder": "Masukkan nama tag...", + "add_tag": "Add", + "tag_exists": "Tag ini sudah ada", + "notes": "Notes", + "notes_placeholder": "Tambahkan catatan tentang perangkat ini...", + "danger_zone": "Danger Zone", + "action_connect_web": "Jarak Jauh Web", + "action_connect_web_desc": "Terhubung melalui browser desktop jarak jauh", + "action_native_remote": "BetterDesk Jarak Jauh", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Klien Desktop", + "action_connect_desktop_desc": "Buka di aplikasi klien desktop", + "action_change_id_desc": "Ubah ID pendaftaran perangkat", + "action_ban_desc": "Blokir perangkat ini agar tidak terhubung", + "action_unban_desc": "Izinkan perangkat ini terhubung kembali", + "action_delete_desc": "Hapus perangkat ini secara permanen", + "tab_hardware": "Hardware", + "tab_metrics": "Metrik", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kemampuan Pengkodean", + "section_live_metrics": "Metrik Langsung", + "section_current_usage": "Penggunaan Saat Ini", + "section_usage_history": "Riwayat Penggunaan", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "Frekuensi CPU", + "total_memory": "Jumlah Memori", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Diperbarui", + "device_groups": "Grup", + "no_sysinfo": "Tidak ada informasi perangkat keras yang tersedia", + "no_sysinfo_hint": "Info sistem akan muncul setelah perangkat mengirimkan laporan sysinfo", + "no_metrics": "Tidak ada data metrik yang tersedia", + "no_metrics_hint": "Metrik akan muncul setelah perangkat mengirimkan laporan detak jantung", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "File", + "agent_lazy_hint": "Klik tab ini untuk memuat data langsung dari agen", + "agent_offline": "Agen sedang offline", + "agent_timeout": "Agen tidak merespons tepat waktu", + "agent_error": "Gagal memuat data dari agen", + "service_name": "Name", + "service_display": "Nama tampilan", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Inventarisasi perangkat keras dan perangkat lunak dari perangkat yang dikelola", + "device_id": "ID Perangkat", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Jumlah Memori", + "memory_used": "Used Memory", + "memory_available": "Memori yang Tersedia", + "memory_usage": "Penggunaan Memori", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Antarmuka Jaringan", + "software": "Software", + "software_count": "Perangkat Lunak yang Diinstal", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Inti Fisik", + "logical_cores": "Inti Logis", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Tersedia", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "Alamat IP", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Kolektor Berlari", + "collector_stopped": "Kolektor Berhenti", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Dikumpulkan Pada", + "no_data": "Belum ada data inventaris yang tersedia. Klik \"Kumpulkan Sekarang\" untuk mengumpulkan informasi sistem.", + "no_devices": "Tidak ada perangkat dengan data inventaris yang ditemukan", + "detail_title": "Detail Inventaris Perangkat", + "telemetry": "Telemetry", + "view_detail": "Lihat Detil", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Mendukung tiket dan pelacakan masalah", + "create": "New Ticket", + "edit": "Sunting Tiket", + "delete": "Hapus Tiket", + "detail": "Detail Tiket", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Ditugaskan Ke", + "created_by": "Dibuat Oleh", + "device": "Perangkat", + "sla_due": "SLA Due", + "created_at": "Dibuat", + "updated_at": "Diperbarui", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Buka", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Tulis komentar...", + "internal_note": "Catatan internal (tidak terlihat oleh pengguna akhir)", + "attachments": "Attachments", + "upload_attachment": "Unggah Lampiran", + "download": "Download", + "connect_device": "Hubungkan ke Perangkat", + "no_tickets": "Tidak ada tiket yang ditemukan", + "no_comments": "Belum ada komentar", + "no_attachments": "Tidak ada lampiran", + "title_required": "Judul diperlukan", + "delete_confirm": "Apakah Anda yakin ingin menghapus tiket #{id}?", + "delete_success": "Tiket berhasil dihapus", + "created_success": "Tiket berhasil dibuat", + "updated_success": "Tiket berhasil diperbarui", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Cari tiket...", + "assign_to_me": "Tetapkan untuk saya", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Buka", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Pemantauan Aktivitas", + "subtitle": "Penggunaan aplikasi dan pelacakan menganggur", + "device": "Perangkat", + "hostname": "Hostname", + "sessions": "Sesi", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Aplikasi Teratas", + "app_name": "Application", + "window_title": "Judul Jendela", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Jumlah Sesi", + "total_active": "Jumlah Aktif", + "total_idle": "Total Idle", + "detail_count": "Catatan Detil", + "no_data": "Tidak ada data aktivitas yang tersedia", + "no_sessions": "Tidak ada sesi", + "filter_from": "Dari", + "filter_to": "Untuk", + "filter_apply": "Terapkan penyaring", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Telusuri perangkat...", + "date_range": "Date Range", + "device_id": "ID Perangkat", + "session_start": "Sesi Dimulai", + "session_end": "Sesi Berakhir", + "user": "User", + "no_activity": "Tidak ada aktivitas yang tercatat", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Tidak ada aplikasi" + }, + "automation": { + "title": "Otomatisasi & Peringatan", + "subtitle": "Aturan peringatan, perintah jarak jauh, dan konfigurasi SMTP", + "rules": "Alert Rules", + "rules_subtitle": "Tentukan kondisi yang memicu notifikasi", + "alerts": "Riwayat Peringatan", + "alerts_subtitle": "Lihat dan akui peringatan yang dipicu", + "commands": "Perintah Jarak Jauh", + "commands_subtitle": "Kirim perintah ke perangkat jarak jauh", + "smtp": "Konfigurasi SMTP", + "smtp_subtitle": "Pengaturan pemberitahuan email", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Tipe Kondisi", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Perangkat Sasaran", + "scope_all": "Semua Perangkat", + "cooldown": "Waktu tunggu (detik)", + "notify_emails": "Email Pemberitahuan", + "enabled": "Diaktifkan", + "disabled": "Dengan disabilitas", + "create_rule": "Buat Aturan", + "edit_rule": "Sunting Aturan", + "delete_rule": "Hapus Aturan", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Dipicu Pada", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Lebih besar dari", + "op_gte": "Lebih besar atau setara", + "op_lt": "Less than", + "op_lte": "Kurang atau sama", + "op_eq": "Sama dengan", + "op_neq": "Tidak sama dengan", + "type_cpu_usage": "Penggunaan CPU (%)", + "type_memory_usage": "Penggunaan Memori (%)", + "type_disk_usage": "Penggunaan Disk (%)", + "type_offline_duration": "Durasi Offline", + "type_idle_duration": "Durasi Menganggur", + "type_custom": "Custom", + "command_type": "Tipe Perintah", + "command_payload": "Perintah/Skrip", + "command_result": "Result", + "command_status": "Status", + "send_command": "Kirim Perintah", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Gagal", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Nama pengguna", + "smtp_pass": "Kata sandi", + "smtp_from": "Dari Alamat", + "smtp_test": "Uji Koneksi", + "smtp_save": "Simpan Konfigurasi", + "smtp_test_success": "Koneksi berhasil", + "smtp_test_failed": "Koneksi gagal", + "no_rules": "Tidak ada aturan pemberitahuan yang dikonfigurasi", + "no_alerts": "Tidak ada peringatan yang dipicu", + "no_commands": "Tidak ada perintah yang dikirim", + "id_payload_required": "ID perangkat dan payload diperlukan", + "no_commands_sent": "Belum ada perintah yang dikirim" + }, + "file_transfer": { + "title": "Pemindahan Berkas", + "transfers": "Transfers", + "new_transfer": "Pemindahan Baru", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Ukuran Berkas", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Perangkat", + "initiated_by": "Diprakarsai Oleh", + "created_at": "Dibuat Pada", + "cancel": "Batalkan", + "cancel_confirm": "Apakah Anda yakin ingin membatalkan transfer ini?", + "download_file": "Unduh Berkas", + "browse_files": "Jelajahi File", + "select_file": "Pilih File", + "select_device": "Pilih Perangkat", + "no_transfers": "Tidak ada transfer file", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Gagal", + "status_cancelled": "Cancelled", + "bytes_transferred": "Byte Ditransfer", + "chunks": "Chunks", + "transfer_started": "Transfer dimulai", + "transfer_completed": "Transfer selesai", + "transfer_failed": "Transfer gagal", + "transfer_cancelled": "Pemindahan dibatalkan", + "max_file_size": "Ukuran file maksimum: 4 GB", + "error_too_large": "File terlalu besar", + "error_no_device": "Tidak ada perangkat yang dipilih", + "error_no_file": "Tidak ada berkas yang dipilih" + }, + "network": { + "title": "Pemantauan Jaringan", + "targets": "Target Pemantauan", + "add_target": "Add Target", + "edit_target": "Sunting Sasaran", + "delete_target": "Hapus Sasaran", + "delete_confirm": "Apakah Anda yakin ingin menghapus target ini?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Batas waktu (md)", + "interval": "Interval waktu", + "enabled": "Diaktifkan", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Periksa Riwayat", + "stats": "Statistics", + "total_targets": "Jumlah Sasaran", + "targets_up": "Targets Up", + "targets_down": "Target Turun", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Alat Jaringan", + "ping_tool": "Ping Test", + "tcp_tool": "Pemeriksaan Port TCP", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Mulai Memantau", + "monitor_stop": "Hentikan Pemantauan", + "monitor_running": "Monitor sedang berjalan", + "monitor_stopped": "Monitor dihentikan", + "no_targets": "Tidak ada target pemantauan yang dikonfigurasi", + "no_history": "Tidak ada riwayat pemeriksaan yang tersedia", + "error_code": "Error", + "status_code": "Kode Status HTTP", + "search_targets": "Target pencarian...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Periksa Riwayat", + "name_host_required": "Nama dan host diperlukan", + "uptime": "Uptime", + "response_time": "Waktu Respons", + "avg_response": "Respon Rata-Rata", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Waktu Respons (md)", + "uptime_percent": "Uptime %", + "last_24h": "24 jam terakhir", + "last_7d": "Last 7 days", + "last_30d": "30 hari terakhir" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "Kebijakan DLP", + "add_policy": "Tambahkan Kebijakan", + "edit_policy": "Sunting Kebijakan", + "delete_policy": "Hapus Kebijakan", + "delete_confirm": "Apakah Anda yakin ingin menghapus kebijakan ini?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Diaktifkan", + "disabled": "Dengan disabilitas", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "Perangkat USB", + "rule_type_file": "Operasi Berkas", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "ID Vendor (VID)", + "pid": "ID Produk (PID)", + "serial": "Nomor Seri", + "device_class": "Kelas Perangkat", + "drive_type": "Drive Type", + "file_extensions": "Ekstensi File", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Mengajukan", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Tidak ada kebijakan DLP yang dikonfigurasi", + "no_events": "Tidak ada peristiwa DLP yang direkam", + "stats": "Statistics", + "total_events": "Jumlah Acara", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "File Acara", + "device_id": "ID Perangkat", + "policy_matched": "Kebijakan Cocok", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Jumlah Kebijakan", + "active_policies": "Kebijakan Aktif", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Kebijakan", + "tab_events": "Events", + "search_policies": "Kebijakan penelusuran...", + "create_policy": "Buat Kebijakan", + "policy_type": "Jenis Kebijakan", + "scope": "Scope", + "events_count": "Events", + "search_events": "Telusuri acara...", + "event_time": "Event Time", + "device": "Perangkat", + "policy": "Kebijakan", + "detail": "Detail", + "scope_help": "ID perangkat yang dipisahkan koma, atau biarkan kosong untuk semua", + "scope_all": "Semua Perangkat", + "active": "Active", + "type_file_type": "Jenis File", + "type_clipboard": "papan klip", + "type_screen_share": "Berbagi Layar", + "type_file_transfer": "Pemindahan Berkas", + "policy_desc": "Deskripsi Kebijakan", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Hasilkan Laporan", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Ringkasan Perangkat", + "type_activity": "Ringkasan Kegiatan", + "type_security": "Laporan Keamanan", + "type_tickets": "Laporan Tiket", + "type_network": "Laporan Jaringan", + "type_inventory": "Laporan Inventaris", + "type_alerts": "Laporan Peringatan", + "saved": "Laporan Tersimpan", + "save_report": "Simpan Laporan", + "delete_report": "Hapus Laporan", + "delete_confirm": "Apakah Anda yakin ingin menghapus laporan tersimpan ini?", + "no_saved": "Tidak ada laporan tersimpan", + "report_title": "Title", + "created_by": "Dibuat Oleh", + "created_at": "Dibuat Pada", + "filters": "Filters", + "date_from": "Dari", + "date_to": "Untuk", + "device_filter": "ID Perangkat", + "generated_at": "Dihasilkan Pada", + "section": "Bagian Data", + "total_devices": "Jumlah Perangkat", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Distribusi Platform", + "top_applications": "Aplikasi Teratas", + "total_active": "Total Waktu Aktif", + "total_idle": "Total Waktu Menganggur", + "dlp_stats": "Statistik DLP", + "banned_devices": "Perangkat yang Dilarang", + "audit_logs": "Audit Logs", + "ticket_stats": "Statistik Tiket", + "category_distribution": "Distribusi Kategori", + "priority_distribution": "Distribusi Prioritas", + "targets_status": "Status Sasaran", + "os_distribution": "Distribusi OS", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Peringatan Terbaru", + "tab_generate": "Hasilkan Laporan", + "tab_saved": "Laporan Tersimpan", + "type_devices_desc": "Ikhtisar semua perangkat, platform, dan status", + "type_activity_desc": "Ringkasan penggunaan aplikasi dan waktu idle", + "type_security_desc": "Larang tindakan, peristiwa DLP, dan log audit", + "type_tickets_desc": "Statistik tiket dan kinerja SLA", + "type_network_desc": "Target pemantauan jaringan dan data uptime", + "type_inventory_desc": "Ringkasan inventaris perangkat keras dan perangkat lunak", + "type_alerts_desc": "Aturan peringatan dan riwayat peringatan yang dipicu", + "report_name": "Report Name", + "format": "Format", + "save": "Simpan Laporan", + "preview": "Preview", + "download": "Download", + "delete_saved": "Hapus Laporan", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Sunting Penyewa", + "delete_tenant": "Hapus Penyewa", + "delete_confirm": "Apakah Anda yakin ingin menghapus penyewa ini? Semua penetapan perangkat dan pengguna akan dihapus.", + "name": "Name", + "slug": "Slug", + "contact_name": "Nama Kontak", + "contact_email": "Hubungi Email", + "max_devices": "Perangkat Maks", + "max_devices_hint": "0 = tidak terbatas", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Perangkat", + "users": "Users", + "assign_device": "Tetapkan Perangkat", + "assign_devices": "Tetapkan Perangkat", + "remove_device": "Hapus Perangkat", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Tidak ada penyewa yang dikonfigurasi", + "no_devices": "Tidak ada perangkat yang ditetapkan ke penyewa ini", + "no_users": "Tidak ada pengguna yang ditetapkan ke penyewa ini", + "stats": "Statistik Penyewa", + "total_devices": "Jumlah Perangkat", + "online_devices": "Perangkat Daring", + "total_users": "Total Users", + "created_at": "Dibuat Pada", + "updated_at": "Diperbarui Pada", + "slug_exists": "Siput penyewa sudah ada", + "total_tenants": "Jumlah Penyewa", + "active_tenants": "Penyewa Aktif", + "search": "Cari penyewa...", + "create_tenant": "Buat Penyewa", + "detail": "Detail Penyewa", + "contact": "Contact", + "enabled": "Diaktifkan", + "disabled": "Dengan disabilitas", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Cari berdasarkan ID perangkat, nama host atau IP...", + "no_registrations": "No registration requests", + "col_device_id": "ID Perangkat", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "Apakah Anda yakin ingin menyetujui perangkat ini? Ini akan menerima kredensial server dan dapat terhubung secara otomatis.", + "approved_success": "Pendaftaran perangkat berhasil disetujui", + "reject_btn": "Reject", + "reject_title": "Tolak Pendaftaran", + "reject_confirm": "Apakah Anda yakin ingin menolak permintaan pendaftaran ini?", + "reject_reason": "Alasan (opsional)", + "reject_reason_placeholder": "Masukkan alasan penolakan...", + "rejected_success": "Pendaftaran perangkat ditolak", + "delete_confirm": "Apakah Anda yakin ingin menghapus catatan pendaftaran ini?", + "deleted_success": "Catatan pendaftaran dihapus", + "enrollment_title": "Pendaftaran Perangkat", + "enrollment_subtitle": "Permintaan pendaftaran yang tertunda dari klien desktop BetterDesk", + "enrollment_empty": "Tidak ada permintaan pendaftaran yang tertunda", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Nama Tampilan", + "enrollment_display_name_placeholder": "Masukkan nama untuk perangkat ini...", + "enrollment_sync_mode": "Mode Sinkronisasi", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Pendaftaran perangkat disetujui", + "enrollment_rejected_success": "Pendaftaran perangkat ditolak", + "approve_title": "Setujui Perangkat", + "field_name": "Nama perangkat", + "field_name_placeholder": "Masukkan nama untuk perangkat ini...", + "field_sync_mode": "Mode sinkronisasi", + "sync_standard": "Standar — sinkronisasi seimbang", + "sync_silent": "Senyap — telemetri minimal", + "sync_turbo": "Turbo — sinkronisasi agresif", + "field_tags": "Tag", + "field_tags_placeholder": "Tag dipisahkan koma (mis. kantor, laptop)...", + "field_tags_existing": "Tag yang ada", + "field_tag_add_placeholder": "Tambah tag baru...", + "field_tag_add_btn": "Tambah", + "field_groups": "Grup perangkat", + "field_folder": "Folder", + "field_folder_none": "Tidak ada folder", + "reject_ban_option": "Blokir perangkat ini", + "reject_ban_hint": "Perangkat akan diblokir dan tidak dapat mengirim permintaan pendaftaran baru.", + "banner_open_mode": "Pendaftaran terbuka — klien RustDesk baru mendaftar tanpa persetujuan operator. Atur mode Terkelola di Pengaturan untuk menggunakan antrian ini.", + "banner_locked_mode": "Pendaftaran terkunci — hanya perangkat terikat token yang dapat mendaftar. Mode Terkelola diperlukan untuk persetujuan operator atas klien yang tidak dikenal.", + "enrollment_settings_link": "Pengaturan pendaftaran" + }, + "backup": { + "title": "Backup", + "desc": "Unduh cadangan lengkap konfigurasi konsol Anda, pengguna, grup, dan pengaturan. Data rekan Go server disertakan ketika backend BetterDesk aktif.", + "restore_title": "Restore", + "restore_desc": "Unggah file cadangan yang diunduh sebelumnya untuk memulihkan konfigurasi konsol. Pilih bagian mana yang akan dipulihkan di bawah.", + "stat_users": "Users", + "stat_settings": "Pengaturan", + "stat_folders": "Folders", + "stat_groups": "Grup", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "Unduh Cadangan", + "creating": "Membuat cadangan...", + "download_success": "Cadangan berhasil diunduh", + "upload": "Unggah Cadangan", + "restore_confirm": "Apakah Anda yakin ingin memulihkan dari cadangan ini? Bagian yang dipilih akan ditimpa.", + "restore_success": "Cadangan berhasil dipulihkan. Beberapa perubahan mungkin memerlukan pemuatan ulang halaman.", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "Pengaturan konsol", + "opt_branding": "Merek / Tema", + "opt_folders": "Folder perangkat", + "opt_groups": "Grup pengguna & perangkat", + "opt_addressbooks": "Buku alamat", + "opt_users": "Akun pengguna", + "opt_users_warning": "Merusak: menggantikan SEMUA akun pengguna dengan data cadangan. Anda mungkin logout.", + "no_file": "Tidak ada file cadangan yang dipilih", + "invalid_json": "File cadangan tidak valid: JSON tidak valid", + "invalid_format": "File cadangan tidak valid: bukan cadangan BetterDesk", + "stat_database": "Engine database", + "stat_keys": "Server keys disertakan", + "stat_env": "File environment", + "stat_uploads": "File branding", + "restart_required": "Beberapa komponen yang dipulihkan (keys / .env / Go database) memerlukan restart layanan agar berlaku.", + "security_warning": "Cadangan ini berisi rahasia (server keys, file environment, hash kata sandi, dan rahasia 2FA). Simpan dengan aman dan jangan pernah berbagi.", + "restore_warning": "Memulihkan secrets, file environment, atau database Go server akan menimpa identitas server dan memerlukan restart layanan setelahnya.", + "opt_database": "Database (semua tabel)", + "opt_database_hint": "Mengimpor ulang semua data console. Diterapkan langsung, tidak perlu restart.", + "opt_uploads": "File branding", + "opt_uploads_hint": "Logo dan gambar yang diunggah.", + "opt_secrets": "Kunci & rahasia server", + "opt_secrets_warning": "Menimpa identitas server Ed25519, API key, dan session secret. Memerlukan restart layanan.", + "opt_env": "File environment (.env)", + "opt_env_warning": "Menimpa SESSION_SECRET, API key, DSN database, port, dan pengaturan TLS. Memerlukan restart layanan.", + "opt_godb": "Database Go server", + "opt_godb_warning": "Menimpa database SQLite Go server (hanya backend SQLite). Memerlukan restart layanan." + }, + "cdap": { + "device_detail": "Perangkat CDAP", + "loading": "Memuat...", + "loading_widgets": "Memuat widget perangkat...", + "load_error": "Gagal memuat data perangkat", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "Perangkat sedang offline. Nilai widget mungkin sudah basi.", + "no_widgets": "Tidak ada widget yang tersedia", + "no_widgets_desc": "Perangkat ini belum mendaftarkan manifes CDAP dengan definisi widget.", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "Konfirmasikan Perintah", + "select_option": "Pilih", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "Kirim Perintah", + "command_sent": "Perintah berhasil dikirim", + "command_failed": "Gagal mengirim perintah", + "devices_title": "Perangkat CDAP", + "devices_subtitle": "Perangkat yang terhubung melalui Protokol Aplikasi Perangkat Khusus", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "Telusuri perangkat...", + "no_devices": "Tidak ada perangkat yang terhubung", + "no_devices_desc": "Tidak ada perangkat CDAP yang terhubung saat ini. Perangkat akan muncul di sini setelah terhubung ke gateway.", + "gateway_disabled": "Gerbang CDAP Dinonaktifkan", + "gateway_disabled_desc": "Aktifkan gateway CDAP dengan mengatur CDAP_ENABLED=true di konfigurasi server.", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "Nonaktifkan CDAP", + "enabled_restart": "CDAP diaktifkan. Restart server diperlukan untuk menerapkan perubahan.", + "disabled_restart": "CDAP dinonaktifkan. Restart server diperlukan untuk menerapkan perubahan.", + "widgets": "widget", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "Peringatan Aktif", + "alert_fired": "Alert fired", + "alert_cleared": "Peringatan dihapus", + "no_alerts": "Tidak ada peringatan aktif", + "connect_terminal": "Hubungkan Terminal", + "table_search": "Cari...", + "just_now": "Just now", + "terminal_connecting": "Menghubungkan ke perangkat...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Koneksi terminal gagal", + "linked_devices": "Perangkat Tertaut", + "link_device": "Perangkat Tautan", + "unlink_device": "Unlink", + "no_linked_devices": "Tidak ada perangkat yang tertaut", + "unlink_confirm": "Apakah Anda yakin ingin membatalkan tautan perangkat ini?", + "link_prompt": "Masukkan ID Peer untuk ditautkan ke perangkat ini:", + "connect_desktop": "Hubungkan Desktop", + "connect_video": "Hubungkan Aliran", + "connect_files": "Jelajahi File", + "connect_audio": "Hubungkan Audio", + "upload_file": "Upload", + "desktop_connecting": "Menghubungkan...", + "video_connecting": "Menghubungkan...", + "files_connecting": "Menghubungkan...", + "audio_connecting": "Menghubungkan...", + "audio_streaming": "Streaming", + "clipboard_in": "Papan klip diterima", + "clipboard_out": "Papan klip terkirim", + "monitor_select": "Pilih Pantau", + "keyframe_request": "Minta Bingkai Utama", + "quality_auto": "Kualitas Otomatis" + }, + "desktop": { + "switch_mode": "Modus Desktop", + "console_mode": "Mode Konsol", + "loading": "Memuat...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Tutup", + "widgets_mode": "Widget", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Tambahkan Widget", + "remove_widget": "Hapus Widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurasikan", + "search_widgets": "Cari widget...", + "cat_monitoring": "Monitoring", + "cat_devices": "Perangkat", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Tulis catatan di sini...", + "search_placeholder": "Cari perangkat, halaman, pengaturan...", + "search_pages": "Pages", + "search_devices": "Perangkat", + "search_no_results": "No results", + "exit_desktop": "Keluar dari Mode Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Status Perangkat", + "widget_server_health": "Informasi Server", + "widget_system_stats": "Pengukur Perangkat", + "widget_device_list": "Daftar Perangkat", + "widget_quick_actions": "Tindakan Cepat", + "widget_recent_activity": "Aktivitas Terkini", + "widget_notes": "Notes", + "widget_network_monitor": "Pemantau Jaringan", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Perangkat CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Jaringan Perangkat", + "widget_multi_gauge": "Pengukur Server", + "widget_weekly_chart": "Aktivitas Mingguan", + "widget_quick_controls": "Kontrol Cepat", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Statistik Koneksi", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sesi Pengguna", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Tidak ada perangkat", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Buka", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Atur URL di konfigurasi", + "label_server_uptime": "Waktu Aktif Server", + "label_merged_info": "Digabung ke dalam widget Info Server", + "label_with_notes": "Dengan Catatan", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Jumlah Perangkat", + "label_throughput": "Throughput", + "label_active_relays": "Relay Aktif", + "label_total_relayed": "Jumlah yang Disampaikan", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filter perangkat...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Tidak ada perangkat CDAP", + "action_add_widget": "Tambahkan Widget", + "label_merged_server_info": "Digabung ke dalam widget Info Server", + "wp_images": "Images", + "wp_colors": "Warna Padat", + "wp_custom_color": "Warna khusus", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Gambar wallpaper tidak dipasang di server ini.", + "wp_download_hint": "Tempatkan gambar PNG di direktori publik/wallpaper/ untuk mengaktifkan pemilihan wallpaper.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Pemantau Proses", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Statistik Basis Data", + "widget_docker_containers": "Kontainer Docker", + "widget_shell_command": "Komando Kerang", + "widget_device_map": "Peta Perangkat", + "widget_remote_connect": "Koneksi Jarak Jauh", + "label_no_online": "Tidak ada perangkat online", + "label_no_events": "Tidak ada acara hari ini", + "label_event_title": "Judul acara:", + "label_no_data": "Tidak ada data yang tersedia", + "label_download_speed": "Kecepatan Unduh", + "label_latency": "Latency", + "label_server": "pelayan", + "label_run_test": "Run Test", + "label_testing": "Menguji...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Tidak ada wadah", + "label_docker_unavailable": "Docker tidak tersedia", + "label_no_command": "Tidak ada perintah yang dikonfigurasi", + "label_no_output": "Belum ada keluaran", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Simpan Prasetel", + "label_load_preset": "Load Preset", + "label_preset_name": "Nama preset:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Susun Otomatis", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 Kolom (Sama)", + "label_2col_wide": "2 Kolom (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Grup Widget", + "ungroup_widgets": "Pisahkan Widget", + "group_widgets": "Grup Widget yang Dipilih", + "snap_layouts": "Tata Letak Jepret", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Jepret Kiri Atas", + "snap_top_right": "Jepret Kanan Atas", + "snap_bottom_left": "Jepret Kiri Bawah", + "snap_bottom_right": "Jepret Kanan Bawah", + "aero_shake": "Kocok untuk Meminimalkan Lainnya", + "zone_resize": "Seret batas untuk mengubah ukuran zona", + "zone_borders": "Batas Zona yang Dapat Diseret", + "app_drawer": "Applications", + "search_apps": "Telusuri aplikasi...", + "edit_shortcuts": "Edit pintasan", + "widgets": "Widget", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Klik di mana saja atau tekan tombol untuk masuk", + "username_placeholder": "Nama pengguna", + "password_placeholder": "Kata sandi", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Otentikasi Dua Faktor", + "totp_subtitle": "Masukkan kode 6 digit dari aplikasi autentikator Anda", + "back_to_login": "Kembali untuk masuk", + "fill_all_fields": "Silakan isi semua kolom", + "invalid_credentials": "Nama pengguna atau kata sandi tidak valid", + "invalid_code": "Kode verifikasi tidak valid", + "enter_6_digits": "Masukkan semua 6 digit", + "network_error": "Network error — check your connection", + "session_expired": "Sesi berakhir. Silakan masuk lagi." + }, + "tokens": { + "title": "Token Perangkat", + "subtitle": "Kelola token pendaftaran untuk penyediaan perangkat otomatis", + "enrollment_mode": "Modus Pendaftaran", + "mode_open": "Buka", + "mode_open_desc": "Perangkat apa pun dapat mendaftar tanpa token", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Jumlah Token", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Cari token...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Hasilkan Massal", + "create": "Buat Token", + "edit": "Sunting Token", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Dibuat", + "actions": "Actions", + "name_placeholder": "misalnya Kumpulan PC kantor", + "max_uses": "Max Uses", + "max_uses_hint": "0 = tidak terbatas", + "expires_in": "Expires In", + "no_expiration": "Tidak ada kadaluwarsa", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Catatan opsional tentang token ini...", + "count": "Count", + "count_range": "Jumlah token yang akan dihasilkan (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token Dibuat", + "tokens_generated": "Token Dihasilkan", + "copy_warning": "Salin tokennya sekarang. Itu tidak akan ditampilkan lagi.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Apakah Anda yakin ingin mencabut token ini? Perangkat yang sudah terdaftar tidak akan terpengaruh.", + "revoked_success": "Token berhasil dicabut", + "no_tokens": "Tidak ada token yang ditemukan", + "expired": "Expired", + "never": "Never", + "save": "Simpan", + "cancel": "Batalkan", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Selanjutnya", + "prev": "Previous", + "skip": "Skip", + "finish": "Selesai", + "close": "Tutup", + "step_of": "{current} dari {total}", + "console_sidebar_title": "Bilah Sisi Navigasi", + "console_sidebar_text": "Akses semua modul dari sini. Klik ikon mana pun untuk menavigasi ke bagian itu. Sidebar menyesuaikan dengan ukuran layar Anda.", + "console_expand_title": "Perluas Bilah Sisi", + "console_expand_text": "Klik di sini untuk memperluas sidebar dan melihat label lengkap untuk semua item navigasi. Klik lagi untuk menutup.", + "console_search_title": "Pencarian Cepat", + "console_search_text": "Telusuri perangkat, setelan, atau tindakan dengan cepat. Tekan Ctrl+K untuk pintasan keyboard.", + "console_dashboard_title": "Dasbor", + "console_dashboard_text": "Hub pusat Anda menampilkan status server, perangkat online, dan tindakan cepat. Perhatikan sekilas metrik penting.", + "console_devices_title": "Manajemen Perangkat", + "console_devices_text": "Lihat, cari, dan kelola semua perangkat yang terhubung. Filter berdasarkan status, tetapkan tag, dan konfigurasikan pengaturan perangkat individual.", + "console_settings_title": "Pengaturan", + "console_settings_text": "Konfigurasikan perilaku server, opsi keamanan, branding, dan manajemen pengguna. Sesuaikan BetterDesk agar sesuai dengan kebutuhan Anda.", + "console_desktop_title": "Modus Desktop", + "console_desktop_text": "Beralih ke mode desktop untuk ruang kerja berjendela dengan widget. Sempurna untuk dasbor multitugas dan pemantauan.", + "console_complete_title": "Anda Siap!", + "console_complete_text": "Jelajahi kategori sidebar untuk menemukan semua fitur. Klik ikon Bantuan kapan saja untuk memulai ulang panduan ini.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Bilah atas menampilkan jam, kontrol cepat, dan akses ke laci aplikasi. Klik ikon kisi untuk menelusuri semua aplikasi.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Buka laci aplikasi untuk mencari dan meluncurkan fungsi konsol apa pun sebagai jendela mengambang. Aplikasi disusun berdasarkan kategori.", + "desktop_widgets_title": "Dasbor Widget", + "desktop_widgets_text": "Ruang kerja Anda yang dapat disesuaikan. Widget menampilkan informasi langsung dan menyediakan akses cepat ke fitur. Seret untuk mengatur ulang.", + "desktop_add_widget_title": "Tambahkan Widget", + "desktop_add_widget_text": "Klik di sini untuk menelusuri widget yang tersedia. Pilih dari tampilan pemantauan, daftar perangkat, catatan, dan lainnya.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Aplikasi yang terbuka muncul di sini. Klik untuk memfokuskan atau memperkecil jendela. Arahkan ikon untuk melihat label aplikasi.", + "desktop_snap_title": "Tata Letak Jepret", + "desktop_snap_text": "Seret jendela ke tepi layar untuk menempatkannya pada posisinya, atau arahkan tombol maksimalkan untuk pengaturan tata letak. Coba Aero Goyang!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Aplikasi terbuka di jendela yang dapat diseret dan diubah ukurannya. Minimalkan, maksimalkan, atau tutup dari bilah judul. Lapisan Windows di atas widget.", + "desktop_search_title": "Pencarian Cepat", + "desktop_search_text": "Telusuri di seluruh perangkat, halaman, dan pengaturan. Tekan Ctrl+K di mana saja untuk membuka pencarian secara instan.", + "desktop_complete_title": "Mode Desktop Siap!", + "desktop_complete_text": "Coba buka aplikasi dari laci dan atur jendela secara berdampingan. Gunakan preset widget untuk tata letak dasbor cepat.", + "devices_folders_title": "Folder Perangkat", + "devices_folders_text": "Atur perangkat ke dalam folder. Klik folder untuk memfilter daftar. Klik kanan untuk mengganti nama atau menghapus.", + "devices_search_title": "Cari & Filter", + "devices_search_text": "Cari berdasarkan ID, nama host, atau platform. Gunakan pil status untuk hanya menampilkan online, offline, atau semua perangkat.", + "devices_table_title": "Daftar Perangkat", + "devices_table_text": "Klik baris perangkat mana pun untuk mengetahui detailnya. Gunakan menu kebab di sebelah kanan untuk tindakan cepat seperti menghubungkan, mengedit tag, atau menghapus.", + "devices_complete_title": "Manajemen Perangkat Siap!", + "devices_complete_text": "Seret perangkat antar folder untuk mengaturnya. Klik dua kali perangkat untuk membuka panel detailnya.", + "settings_tabs_title": "Kategori Pengaturan", + "settings_tabs_text": "Navigasi antara bagian Umum, Keamanan, Penampilan, dan konfigurasi lainnya.", + "settings_content_title": "Konfigurasi", + "settings_content_text": "Setiap bagian berisi pengaturan server dan konsol tertentu. Perubahan disimpan ketika Anda mengklik Simpan.", + "settings_complete_title": "Ikhtisar Pengaturan", + "settings_complete_text": "Periksa pengaturan Keamanan untuk 2FA, kunci API dan manajemen pengguna. Kunjungi Appearance untuk menyesuaikan tampilan konsol.", + "help": "Bantuan & Tutorial", + "tour_console": "Tur Konsol", + "tour_desktop": "Tur Mode Desktop", + "tour_devices": "Tur Perangkat", + "tour_settings": "Tur Pengaturan", + "reset_all": "Atur Ulang Semua Tutorial", + "tour_remote": "Tur Sesi Jarak Jauh", + "tour_organization": "Pengaturan Organisasi", + "tour_cdap": "Ikhtisar CDAP", + "tour_chat": "Dasar-dasar Obrolan", + "remote_toolbar_title": "Bilah Alat Jarak Jauh", + "remote_toolbar_text": "Akses kontrol tampilan, sinkronisasi clipboard, tombol khusus, dan pengaturan kualitas dari toolbar. Alihkan layar penuh dengan F11.", + "remote_canvas_title": "Tampilan Jarak Jauh", + "remote_canvas_text": "Ini adalah layar jarak jauh. Klik di dalam untuk mulai mengontrol perangkat jarak jauh. Input mouse dan keyboard diteruskan secara otomatis.", + "remote_clipboard_title": "Sinkronisasi Papan Klip", + "remote_clipboard_text": "Salin dan tempel teks antara komputer Anda dan perangkat jarak jauh. Gunakan Ctrl+C / Ctrl+V seperti biasa sambil fokus pada tampilan jarak jauh.", + "remote_complete_title": "Sesi Jarak Jauh Siap!", + "remote_complete_text": "Gunakan tombol toolbar untuk tombol khusus (Ctrl+Alt+Del, PrintScreen) dan peralihan monitor. Tekan Escape atau klik Disconnect untuk mengakhiri sesi.", + "org_overview_title": "Organisasi", + "org_overview_text": "Organisasi memungkinkan Anda mengelompokkan pengguna, perangkat, dan kebijakan. Setiap organisasi memiliki admin, operator, dan pengaturannya sendiri.", + "org_create_title": "Buat Organisasi", + "org_create_text": "Klik di sini untuk membuat organisasi baru. Berikan nama, siput, dan deskripsi opsional. Anda akan menjadi pemilik organisasi baru.", + "org_members_title": "Kelola Anggota", + "org_members_text": "Undang pengguna melalui email, tetapkan peran (admin, operator, pengguna), dan kelola akses. Anggota dapat melihat perangkat yang ditetapkan ke organisasi mereka.", + "org_devices_title": "Tetapkan Perangkat", + "org_devices_text": "Tambahkan perangkat ke organisasi. Perangkat yang ditetapkan di sini akan mewarisi kebijakan organisasi dan dapat dilihat oleh anggotanya.", + "org_policies_title": "Kebijakan Organisasi", + "org_policies_text": "Tetapkan kebijakan keamanan seperti persyaratan kata sandi, batas waktu sesi, penerapan 2FA, dan aturan pendaftaran perangkat untuk organisasi.", + "org_complete_title": "Pengaturan Organisasi Selesai!", + "org_complete_text": "Undang tim Anda dan tetapkan perangkat untuk mulai menggunakan pengelolaan cakupan organisasi. Kebijakan berlaku otomatis untuk semua anggota.", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "Kontak & Grup", + "chat_contacts_text": "Lihat kontak dan grup obrolan Anda. Klik kontak mana pun untuk membuka percakapan. Titik hijau menunjukkan pengguna online.", + "chat_send_title": "Kirim Pesan", + "chat_send_text": "Ketik pesan Anda dan tekan Enter untuk mengirim. Pesan dienkripsi ujung ke ujung ketika kedua belah pihak mendukung E2E.", + "chat_file_title": "Bagikan File", + "chat_file_text": "Klik ikon lampiran untuk berbagi file. File dienkripsi dan ukurannya bisa mencapai 50 MB.", + "chat_complete_title": "Obrolan Siap!", + "chat_complete_text": "Ngobrol dengan operator dan pengguna akhir secara real time. Buat grup untuk komunikasi tim. Semua pesan mendukung tanda terima telah dibaca.", + "disable_tutorials": "Nonaktifkan Tutorial", + "enable_tutorials": "Aktifkan Tutorial" + }, + "help_request": { + "title": "Permintaan Bantuan", + "subtitle": "Kelola permintaan bantuan yang masuk dari klien desktop", + "new_request": "Permintaan Bantuan Baru", + "device": "Perangkat", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Tidak ada permintaan bantuan", + "notification": "Permintaan bantuan diterima dari", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisasi", + "create": "Buat Organisasi", + "edit": "Sunting Organisasi", + "detail": "Detail Organisasi", + "name": "Name", + "slug": "Siput (aman URL)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Perangkat", + "invitations": "Invitations", + "settings": "Pengaturan", + "add_user": "Add User", + "assign_device": "Tetapkan Perangkat", + "create_invitation": "Buat Undangan", + "delete_confirm": "Hapus organisasi ini? Tindakan ini akan menghapus semua pengguna, perangkat, dan pengaturan terkait.", + "no_orgs": "Belum ada organisasi", + "no_orgs_hint": "Buat organisasi pertama Anda untuk mulai mengelola perangkat dan pengguna.", + "connection_policy": "Kebijakan Koneksi", + "allow_file_transfer": "Izinkan Transfer File", + "allow_clipboard": "Izinkan Papan Klip", + "max_session_duration": "Durasi Sesi Maks (mnt)", + "role_owner": "Owner", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Anggota", + "username": "Nama pengguna", + "password": "Kata sandi", + "display_name": "Nama Tampilan", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID Perangkat", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Pengguna yang Ditugaskan", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Tidak ada pengguna di organisasi ini.", + "no_devices": "Tidak ada perangkat yang ditetapkan ke organisasi ini.", + "no_invitations": "Tidak ada undangan.", + "user_added": "User added", + "user_removed": "Pengguna dihapus", + "user_updated": "Peran pengguna diperbarui", + "device_assigned": "Perangkat ditetapkan", + "device_unassigned": "Perangkat tidak ditetapkan", + "invitation_created": "Undangan dibuat", + "settings_saved": "Pengaturan disimpan", + "org_deleted": "Organisasi dihapus", + "confirm_remove_user": "Hapus pengguna ini dari organisasi?", + "confirm_unassign_device": "Batalkan penetapan perangkat ini dari organisasi?", + "confirm_delete_org": "Hapus organisasi ini dan semua data terkait?", + "edit_role": "Sunting Peran", + "raw_settings": "Pengaturan Mentah", + "key": "Key", + "value": "Value", + "save": "Simpan Pengaturan", + "policy_unattended": "Tanpa pengawasan (instan)", + "policy_attended": "Dihadiri (dengan konfirmasi)", + "policy_ask": "Always ask", + "expires_hours": "Kedaluwarsa (jam)", + "loading_failed": "Gagal memuat data organisasi", + "name_slug_required": "Nama dan siput diperlukan", + "org_created": "Organisasi dibuat", + "org_updated": "Organisasi diperbarui", + "create_new_user": "Buat Baru", + "add_existing_user": "Tambahkan Yang Ada", + "none_available": "none", + "select_user": "Pilih pengguna", + "org_role": "Peran Organisasi", + "link_user_hint": "Pengguna yang dipilih akan ditautkan ke organisasi ini menggunakan kredensial akun server mereka.", + "no_available_users": "Semua pengguna server sudah tertaut ke organisasi ini.", + "user_linked": "Pengguna tertaut ke organisasi" + }, + "chat": { + "e2e_enabled": "Dienkripsi ujung ke ujung", + "e2e_establishing": "Membangun saluran aman...", + "e2e_established": "Saluran aman dibuat", + "e2e_unsupported": "Enkripsi E2E tidak didukung di browser ini", + "typing_indicator": "mengetik...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Mengajukan", + "file_too_large": "File terlalu besar (maks 50 MB)", + "file_encrypted": "Transfer file terenkripsi", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Kunci keamanan diputar", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Grup", + "no_contacts": "Belum ada kontak", + "no_groups": "Belum ada grup", + "no_messages": "Belum ada pesan", + "no_results": "Tidak ada hasil yang ditemukan", + "select_conversation": "Pilih percakapan untuk mulai mengobrol", + "type_message": "Ketik pesan...", + "send": "Kirim", + "attach_file": "Lampirkan berkas", + "emoji": "Emoji", + "search_messages": "Cari pesan", + "create_group": "Buat grup", + "group_name": "Nama grup", + "group_members": "Anggota", + "cancel": "Batalkan", + "create": "Buat", + "members": "anggota", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Cari kontak & pesan", + "select_conversation_hint": "Pilih percakapan untuk melihat pesan", + "info": "Info", + "group_name_placeholder": "Masukkan nama grup" + }, + "toast": { + "device_connected": "Perangkat terhubung", + "device_disconnected": "Perangkat terputus", + "session_started": "Sesi jarak jauh dimulai", + "session_ended": "Sesi jarak jauh berakhir", + "file_upload_complete": "Pengunggahan file selesai", + "settings_saved": "Pengaturan disimpan", + "error_generic": "Terjadi kesalahan", + "connection_lost": "Koneksi terputus", + "reconnecting": "Menyambungkan kembali..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Utilitas admin dan alat diagnostik", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Kirim", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Masukkan teks...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Buka Server", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Periksa keterjangkauan dan latensi host", + "tcp_title": "Pemeriksaan Port TCP", + "tcp_desc": "Uji konektivitas port TCP", + "ssl_title": "Inspektur SSL", + "ssl_desc": "Periksa detail sertifikat SSL/TLS", + "http_title": "Pemeriksaan Kesehatan HTTP", + "http_desc": "Verifikasi status titik akhir HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Selesaikan nama host ke alamat IP", + "whois_title": "DNS Records", + "whois_desc": "Catatan kueri A, AAAA, MX, TXT, NS", + "speed_title": "Speed Test", + "speed_desc": "Ukur bandwidth unduhan", + "run_speed_test": "Jalankan Tes Kecepatan", + "wol_title": "Wake-on-LAN", + "wol_desc": "Kirim paket ajaib untuk membangunkan perangkat", + "wol_sent": "Paket ajaib terkirim", + "hash_title": "Pembuat Hash", + "hash_desc": "Hasilkan hash kriptografi", + "password_title": "Pembuat Kata Sandi", + "password_desc": "Hasilkan kata sandi acak yang aman", + "jwt_title": "JWT Decoder", + "jwt_desc": "Dekode dan periksa Token Web JSON", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Menyandikan atau mendekode data Base64", + "url_title": "URL Encoder", + "url_desc": "Mengkodekan atau mendekode komponen URL", + "processes_title": "Daftar Proses", + "processes_desc": "Lihat proses sistem yang sedang berjalan", + "disk_title": "Disk Usage", + "disk_desc": "Lihat penggunaan partisi disk", + "db_title": "Statistik Basis Data", + "db_desc": "Lihat statistik tabel database", + "docker_title": "Kontainer Docker", + "docker_desc": "Lihat kontainer Docker yang sedang berjalan", + "logs_title": "Log Viewer", + "logs_desc": "Lihat keluaran log terbaru", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Berlaku Mulai", + "valid_to": "Berlaku Untuk", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Tidak ada data yang tersedia", + "no_docker": "Kontainer Docker tidak ditemukan atau Docker tidak tersedia", + "no_logs": "Tidak ada baris log yang tersedia" + }, + "policies": { + "title": "Kebijakan Organisasi", + "subtitle": "Kelola kebijakan keamanan, koneksi, dan fitur untuk organisasi Anda", + "select_org": "Organisasi", + "select_org_placeholder": "Pilih organisasi...", + "select_org_first": "Pilih organisasi untuk melihat log audit kebijakan.", + "configured": "Configured", + "connection_title": "Kebijakan Koneksi", + "connection_desc": "Kontrol bagaimana sesi jarak jauh dibuat", + "connection_mode": "Modus Koneksi", + "mode_attended": "Dihadiri (membutuhkan persetujuan pengguna)", + "mode_unattended": "Tanpa pengawasan (selalu izinkan)", + "mode_ask": "Always Ask", + "max_session": "Durasi Sesi Maks (menit)", + "idle_lock": "Batas Waktu Penguncian Idle (menit)", + "wallpaper_policy": "Wallpaper Selama Sesi", + "wallpaper_show": "Show", + "wallpaper_hide_session": "Sembunyikan selama sesi", + "wallpaper_hide_always": "Always hide", + "features_title": "Kebijakan Fitur", + "features_desc": "Mengaktifkan atau menonaktifkan fitur tertentu untuk perangkat", + "allow_file_transfer": "Izinkan Transfer File", + "allow_clipboard": "Izinkan Sinkronisasi Papan Klip", + "allow_audio": "Izinkan Streaming Audio", + "allow_recording": "Izinkan Perekaman Sesi", + "security_title": "Kebijakan Keamanan", + "security_desc": "Menerapkan persyaratan keamanan untuk perangkat organisasi", + "require_2fa": "Memerlukan 2FA untuk Akses Tanpa Pengawasan", + "password_min_length": "Panjang Kata Sandi Minimum", + "password_require_special": "Membutuhkan Karakter Khusus", + "password_max_age": "Usia Maks Kata Sandi (hari, 0=tidak pernah)", + "allowed_operators": "Peran Operator yang Diizinkan (dipisahkan koma)", + "network_title": "Kebijakan Jaringan", + "network_desc": "Kontrol server relai dan koneksi langsung", + "block_direct_p2p": "Blokir P2P Langsung (relai gaya)", + "allowed_relays": "Server Relai yang Diizinkan (satu per baris)", + "ip_allowlist": "Daftar IP yang Diizinkan (CIDR, satu per baris)", + "update_title": "Perbarui Kebijakan", + "update_desc": "Kontrol pembaruan otomatis dan perbarui saluran", + "auto_update": "Aktifkan Pembaruan Otomatis", + "update_channel": "Perbarui Saluran", + "audit_title": "Perubahan Kebijakan", + "audit_desc": "Riwayat perubahan kebijakan terkini", + "no_audit": "Tidak ada perubahan kebijakan yang tercatat.", + "save_success": "Kebijakan berhasil disimpan", + "save_failed": "Gagal menyimpan kebijakan", + "load_failed": "Gagal memuat kebijakan", + "block_direct_p2p_hint": "Berlaku untuk perangkat di organisasi ini. Default global ada di Pengaturan → Strategi koneksi." + }, + "attestation": { + "title": "Pengesahan Perangkat", + "subtitle": "Pantau verifikasi identitas perangkat dan sidik jari perangkat keras", + "verified": "Verified", + "pending": "Pending", + "failed": "Gagal", + "device_list": "Catatan Pengesahan Perangkat", + "device_list_desc": "Sidik jari perangkat keras dan status verifikasi identitas", + "col_device": "ID Perangkat", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Tidak ada catatan pengesahan yang ditemukan.", + "verify_success": "Perangkat ditandai sebagai terverifikasi", + "verify_failed": "Gagal memverifikasi perangkat", + "revoke_success": "Pengesahan perangkat dicabut", + "revoke_failed": "Gagal mencabut pengesahan" + }, + "fleet": { + "title": "Manajemen Armada", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Pembuat Alur Kerja", + "tab_compliance": "Compliance", + "res_title": "Pemetaan Sumber Daya", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Penggerak Jaringan", + "res_type_dns": "Server DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Tambahkan Sumber Daya", + "res_name": "Nama Sumber Daya", + "res_type": "Type", + "res_address": "Alamat / Jalur", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organisasi", + "res_scope_group": "Kelompok", + "res_scope_device": "Perangkat", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Tidak ada sumber daya yang ditemukan. Klik 'Tambahkan Sumber Daya' untuk membuatnya.", + "res_confirm_delete": "Apakah Anda yakin ingin menghapus sumber daya ini?", + "task_title": "Penjadwal Tugas", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Gagal", + "task_search": "Search tasks…", + "task_create": "Buat Tugas", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Pembaruan", + "task_type_restart": "Mulai ulang", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "ID perangkat atau nama grup, dipisahkan koma", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Nilai Jadwal", + "task_script": "Naskah/Perintah", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Tidak ada tugas yang ditemukan. Klik 'Buat Tugas' untuk memulai.", + "task_confirm_delete": "Apakah Anda yakin ingin menghapus tugas ini?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Pembuat Alur Kerja Visual", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Simpan", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Pilih node untuk mengedit propertinya.", + "builder_node_trigger_manual": "Pemicu Manual", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Pemicu Peristiwa", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Mulai ulang Svc", + "builder_node_action_file_deploy": "Menyebarkan Berkas", + "builder_node_action_message": "Kirim Pesan", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Kirim Peringatan", + "builder_node_result_chain": "Alur Kerja Rantai", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Nama alur kerja:", + "comp_title": "Kepatuhan Perangkat Lunak", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Perangkat", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Jalankan remediasi otomatis di perangkat ini?", + "comp_no_data": "Tidak ada data kepatuhan yang tersedia. Jalankan pemindaian untuk memulai.", + "save": "Simpan", + "cancel": "Batalkan", + "close": "Tutup", + "edit": "Sunting", + "delete": "Hapus", + "actions": "Actions", + "all_orgs": "Semua Organisasi", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Penggerak Jaringan", + "type_dns": "Server DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Tambahkan Sumber Daya", + "edit_resource": "Sunting Sumber Daya", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Alamat / Jalur", + "scope_org": "Organisasi", + "scope_group": "Kelompok", + "scope_device": "Perangkat", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Apakah Anda yakin ingin menghapus item ini?", + "all_statuses": "Semua Status", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Gagal", + "search_tasks": "Search tasks�", + "create_task": "Buat Tugas", + "edit_task": "Sunting Tugas", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Penyebaran File", + "task_type_registry": "Registry", + "target_devices": "Perangkat Sasaran", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Naskah/Perintah", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Memuat", + "no_output": "Tidak ada keluaran yang tersedia", + "error_loading": "Terjadi kesalahan saat memuat data", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Pemicu Manual", + "node_schedule": "Schedule", + "node_event": "Pemicu Peristiwa", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Mulai ulang Svc", + "node_file_deploy": "Menyebarkan Berkas", + "node_send_message": "Kirim Pesan", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Kirim Peringatan", + "node_chain": "Alur Kerja Rantai", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Semua Organisasi", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Perangkat", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Jalankan remediasi otomatis di perangkat ini?" + }, + "scaling": { + "title": "Penskalaan & Manajemen Relai", + "tab_overview": "Ikhtisar", + "tab_relays": "Relay Nodes", + "tab_rules": "Aturan Penugasan", + "tab_capacity": "Perencanaan Kapasitas", + "arch_title": "Arsitektur Jaringan", + "arch_loading": "Memuat diagram arsitektur...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Jumlah Perangkat", + "stat_active_sessions": "Sesi Aktif", + "stat_bandwidth": "Jumlah Bandwidth", + "relay_health": "Kesehatan Relai", + "no_relays": "Tidak ada node relai yang dikonfigurasi. Tambahkan node relai pertama Anda untuk mendistribusikan beban.", + "relay_search": "Relai pencarian...", + "relay_add": "Tambahkan Node Relai", + "relay_edit": "Edit Node Relai", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Perangkat", + "col_sessions": "Sesi", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Relai Sasaran", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Diaktifkan", + "status_disabled": "Dengan disabilitas", + "confirm_delete_relay": "Apakah Anda yakin ingin menghapus simpul relai ini?", + "confirm_delete_rule": "Apakah Anda yakin ingin menghapus aturan penetapan ini?", + "rules_hint": "Aturan penugasan menentukan server relai mana yang menangani grup perangkat tertentu. Aturan dievaluasi berdasarkan prioritas (yang terendah terlebih dahulu).", + "rule_add": "Add Rule", + "rule_edit": "Sunting Aturan", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Grup Perangkat", + "match_tag": "Tag Perangkat", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Server Utama", + "fallback_nearest": "Relai terdekat", + "relay_max_sessions": "Sesi Maks", + "relay_max_bandwidth": "Bandwidth Maks (Mbps)", + "cap_tiers": "Tingkat Kapasitas", + "cap_loading": "Memuat data kapasitas...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Tidak ada rekomendasi yang tersedia.", + "cap_planning": "Perencanaan Infrastruktur", + "cap_config": "Konfigurasi", + "cap_max_devices": "Perangkat Maks", + "cap_max_sessions": "Sesi Maks", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Kapasitas Perangkat", + "cap_tier_sessions": "Kapasitas Sesi", + "cap_tier_bandwidth": "Kapasitas Bandwidth", + "cap_single_sqlite": "Server Tunggal (SQLite)", + "cap_single_pg": "Server Tunggal (PostgreSQL)", + "cap_master_3": "Master + 3 Relay", + "cap_master_10": "Master + 10 Relay", + "rec_no_relays": "Tidak ada node relai yang dikonfigurasi. Pertimbangkan untuk menambahkan node relai untuk kinerja dan redundansi yang lebih baik.", + "rec_devices_high": "Pemanfaatan perangkat tinggi. Pertimbangkan untuk menambahkan lebih banyak node relai untuk mendistribusikan beban.", + "rec_sessions_high": "Kapasitas sesi mendekati batasnya. Pertimbangkan untuk meningkatkan infrastruktur relai.", + "rec_cpu_high": "Beberapa node relai melaporkan penggunaan CPU yang tinggi. Pertimbangkan penyeimbangan beban atau peningkatan kapasitas.", + "rec_all_good": "Semua sistem beroperasi dalam parameter normal. Tidak diperlukan tindakan.", + "save": "Simpan", + "cancel": "Batalkan", + "edit": "Sunting", + "delete": "Hapus", + "close": "Tutup", + "no_rules": "Tidak ada aturan penugasan.", + "relays_info_banner": "Daftar ini bersifat informatif. Server relai yang sebenarnya digunakan oleh klien dikonfigurasi melalui variabel lingkungan RELAY_SERVERS di server BetterDesk.", + "relay_name_address_required": "Nama dan alamat diperlukan.", + "relay_save_failed": "Gagal menyimpan simpul relai.", + "relay_delete_failed": "Gagal menghapus simpul relai.", + "relay_saved": "Node relai disimpan.", + "relay_deleted": "Node relai dihapus.", + "rule_name_value_required": "Nama aturan dan nilai kecocokan wajib diisi.", + "rule_save_failed": "Gagal menyimpan aturan.", + "rule_delete_failed": "Gagal menghapus aturan.", + "rule_saved": "Aturan disimpan.", + "rule_deleted": "Aturan dihapus." + }, + "cross_platform": { + "title": "Kompatibilitas Lintas Platform", + "tab_matrix": "Matriks Kompatibilitas", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "Matriks dukungan fitur di semua platform yang didukung. Hijau = dukungan penuh, kuning = sebagian, abu-abu = tidak tersedia, biru = direncanakan.", + "col_feature": "Feature", + "legend_full": "Dukungan penuh", + "legend_partial": "Dukungan parsial", + "legend_none": "Tidak tersedia", + "legend_planned": "Planned", + "platform_breakdown": "Kerusakan Platform", + "arch_breakdown": "Kerusakan Arsitektur", + "version_breakdown": "Perincian Versi", + "summary": "Summary", + "total_devices": "Jumlah Perangkat", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "Versi Klien", + "no_devices": "Belum ada perangkat yang terdaftar.", + "protocols_hint": "Negosiasi kemampuan protokol memastikan setiap klien hanya menerima fitur yang didukungnya. Server mengadaptasi perilaku berdasarkan kemampuan yang dilaporkan.", + "capability_negotiation": "Negosiasi Kemampuan", + "codec_support": "Dukungan Codec (Perangkat Online)", + "feature_support": "Dukungan Fitur (Perangkat Online)", + "no_codec_data": "Tidak ada data codec yang tersedia dari perangkat online.", + "no_feature_data": "Tidak ada data fitur yang tersedia dari perangkat online.", + "protobuf_schema": "Skema Protobuf Kemampuan Klien", + "diagram_client": "Client", + "diagram_server": "Server BetterDesk", + "diagram_peer": "Rekan Jarak Jauh", + "limitations_hint": "Setiap platform memiliki batasan spesifik yang memengaruhi fitur yang tersedia. Tinjau kendala ini saat merencanakan penerapan.", + "feat_desktop_client": "Klien Desktop", + "feat_background_agent": "Agen Latar Belakang", + "feat_remote_target": "Sasaran Jarak Jauh", + "feat_screen_capture": "Tangkapan Layar", + "feat_input_injection": "Injeksi Masukan", + "feat_file_transfer": "Pemindahan Berkas", + "feat_clipboard_sync": "Sinkronisasi Papan Klip", + "feat_audio_streaming": "Streaming Audio", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "Ketinggian UAC diperlukan untuk instalasi layanan dan injeksi input pada desktop yang aman.", + "limit_win_service": "Berjalan sebagai layanan NSSM; memerlukan hak istimewa Administrator untuk instalasi.", + "limit_win_firewall": "Aturan Firewall Windows harus mengizinkan port 21115-21119 untuk koneksi relai.", + "limit_linux_wayland": "Kompositor Wayland membatasi tangkapan layar terprogram; Portal PipeWire API diperlukan.", + "limit_linux_pipewire": "Pengambilan audio memerlukan PipeWire; Penggantian PulseAudio tersedia tetapi terbatas.", + "limit_linux_arm": "Tersedia versi ARM64; beberapa codec mungkin menggunakan decoding perangkat lunak (lebih lambat).", + "limit_mac_screen": "Izin Perekaman Layar diperlukan di System Preferences > Privasi & Keamanan.", + "limit_mac_signing": "Agen harus ditandatangani dengan ID Pengembang Apple untuk distribusi.", + "limit_mac_notarize": "Notaris diperlukan untuk macOS Gatekeeper (distribusi non-App Store).", + "limit_android_projection": "MediaProjection API memerlukan persetujuan pengguna untuk setiap sesi tangkapan layar.", + "limit_android_accessibility": "Injeksi masukan memerlukan AccessibilityService; dibatasi di Android 14+.", + "limit_android_battery": "Layanan latar belakang dibatasi oleh mode Istirahatkan; mungkin memerlukan pengecualian pengoptimalan baterai.", + "limit_ios_capture": "Apple melarang pengambilan layar di latar belakang; mode hanya pemirsa didukung.", + "limit_ios_input": "Tidak ada injeksi masukan yang diizinkan; melihat jarak jauh dan hanya mengobrol.", + "limit_ios_appstore": "Distribusi hanya melalui App Store; TestFlight untuk pengujian beta.", + "limit_web_https": "WebCodecs API dan WebRTC memerlukan HTTPS; HTTP kembali ke JMuxer (codec terbatas).", + "limit_web_codec": "Dukungan codec bergantung pada browser; H.264 didukung secara luas, VP9/AV1 bervariasi.", + "limit_web_performance": "Kinerja dibatasi oleh kotak pasir browser; tidak ada akselerasi perangkat keras langsung.", + "limit_chrome_crostini": "Dukungan agen penuh hanya di dalam wadah Crostini Linux.", + "limit_chrome_pwa": "Mode PWA menyediakan fitur khusus web; tidak ada kemampuan agen asli.", + "limit_chrome_input": "Injeksi masukan tidak didukung di luar wadah Crostini.", + "feat_session_recording": "Perekaman Sesi", + "feat_multi_monitor": "Multi-Monitor", + "feat_unattended_access": "Akses Tanpa Pengawasan", + "limit_win_virtual_account": "Layanan berjalan di bawah akun virtual terisolasi alih-alih LocalSystem; jalur log kustom mungkin memerlukan penyesuaian ACL.", + "limit_linux_unprivileged": "Layanan berjalan sebagai akun 'betterdesk' tanpa hak istimewa khusus dengan penguatan systemd (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Audit Keamanan", + "tab_overview": "Ikhtisar", + "tab_events": "Acara Audit", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Skor Keamanan", + "failed_logins": "Login Gagal (24 jam)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Kunci Lama (>90d)", + "security_checks": "Pemeriksaan Keamanan", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Aman", + "enabled": "Diaktifkan", + "disabled": "Dengan disabilitas", + "all_events": "All Events", + "event_login_failed": "Gagal Masuk", + "event_login_success": "Masuk Berhasil", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfigurasi Berubah", + "event_key_created": "Kunci Dibuat", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Tidak ada peristiwa audit yang ditemukan.", + "hardening_hint": "Prioritas penguatan keamanan untuk penerapan BetterDesk Anda. Barang diurutkan berdasarkan tingkat keparahannya.", + "no_hardening": "Tidak ada item pengerasan yang tersedia.", + "vuln_hint": "Hasil pemindaian kerentanan ketergantungan. Jalankan npm audit secara teratur untuk menjaga keamanan dependensi.", + "no_vulns": "Tidak ada kerentanan yang ditemukan. Dependensi Anda aman." + }, + "languages": { + "title": "Manajemen Bahasa", + "total_languages": "Jumlah Bahasa", + "fully_translated": "Diterjemahkan Sepenuhnya", + "needs_review": "Perlu Peninjauan", + "reference_keys": "Kunci Referensi", + "no_languages": "Tidak ada file bahasa yang ditemukan.", + "badge_reference": "Reference", + "badge_review": "Perlu Peninjauan", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Lihat Hilang", + "fix_missing": "Fix Missing", + "missing_keys_for": "Kunci untuk", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "dan {n} lainnya...", + "all_keys_present": "Semua kunci ada!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Kunci yang hilang di {code} harus diterjemahkan secara manual.", + "no_fix_needed": "Tidak ada kunci yang hilang untuk diperbaiki." + }, + "resource_control": { + "title": "Kontrol Sumber Daya", + "tab_overview": "Ikhtisar", + "tab_usb": "USB Control", + "tab_optical": "Drive Optik", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Kuota Sumber Daya", + "compliance_by_category": "Kepatuhan berdasarkan Kategori", + "device_compliance": "Kepatuhan Perangkat", + "search_devices": "Telusuri perangkat...", + "col_device": "Perangkat", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Jumlah Perangkat", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Tingkat Kepatuhan", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurasikan", + "no_devices": "Tidak ada perangkat yang ditemukan", + "usb_title": "Kontrol Pelabuhan USB", + "usb_hint": "Kontrol akses perangkat penyimpanan USB untuk perangkat yang dipilih atau kebijakan default seluruh organisasi.", + "usb_storage_policy": "Kebijakan Penyimpanan USB", + "usb_whitelist": "Perangkat yang Masuk Daftar Putih (satu per baris)", + "usb_whitelist_hint": "VID:PID (misalnya 0781:5583)", + "usb_audit_log": "Catat koneksi perangkat USB", + "optical_title": "Kontrol Drive Optik", + "optical_hint": "Kontrol akses drive CD/DVD/Blu-ray untuk perangkat yang dipilih.", + "optical_policy": "Kebijakan Drive Optik", + "optical_audit_log": "Catat akses drive optik", + "monitors_title": "Pantau Manajemen", + "monitors_hint": "Konfigurasikan pengaturan monitor termasuk jumlah maksimum, penerapan resolusi, kecerahan, dan jadwal daya.", + "monitors_max_count": "Monitor Maksimum (0 = tidak terbatas)", + "monitors_max_hint": "0 berarti tidak ada batasan", + "monitors_resolution": "Resolusi Maks", + "monitors_brightness": "Batas Kecerahan", + "monitors_power_schedule": "Jadwal Daya", + "monitors_power_hint": "misalnya libur:22:00-06:00", + "disks_title": "Kontrol Akses Disk", + "disks_hint": "Konfigurasikan kebijakan akses disk termasuk mode hanya baca, penerapan enkripsi, dan visibilitas partisi.", + "disks_readonly": "Paksa mode baca-saja", + "disks_encryption": "Memerlukan enkripsi (BitLocker/LUKS)", + "disks_smart": "Aktifkan S.M.A.R.T. pemantauan", + "disks_hidden": "Partisi Tersembunyi", + "disks_hidden_hint": "Huruf drive atau titik pemasangan yang dipisahkan koma", + "quotas_title": "Kuota Sumber Daya", + "quotas_hint": "Tetapkan CPU, RAM, bandwidth, dan kuota disk per pengguna untuk perangkat yang dipilih.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Batas Bandwidth (Mbps)", + "quotas_bandwidth_hint": "0 = tidak terbatas", + "quotas_disk_quota": "Kuota Disk (GB)", + "quotas_disk_hint": "0 = tidak terbatas", + "quotas_process_whitelist": "Proses Daftar Putih (satu per baris)", + "quotas_process_hint": "misalnya chrome.exe, kode.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Hanya Daftar Putih", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Pembaruan Perangkat Lunak", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Versi terinstal", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Periksa pembaruan", + "checking": "Checking…", + "up_to_date": "Terkini", + "update_available": "Pembaruan tersedia", + "changelog": "Release Notes", + "no_changelog": "Tidak ada catatan rilis yang tersedia", + "files_changed": "File diubah", + "files": "file", + "changes_unavailable": "Tidak dapat memuat daftar perubahan file. Anda masih dapat menginstal pembaruan.", + "create_backup": "Buat cadangan sebelum memperbarui", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Menginstal pembaruan…", + "creating_backup": "Membuat cadangan…", + "downloading": "Mengunduh file…", + "install_success": "Pembaruan berhasil diinstal. Konsol dimulai ulang…", + "install_failed": "Penginstalan pembaruan gagal", + "restarting": "Menunggu konsol dimulai ulang…", + "restart_complete": "Konsol berhasil dimulai ulang", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Tidak ada versi pembaruan yang dipilih. Periksa pembaruan terlebih dahulu.", + "backups_title": "Perbarui Cadangan", + "backups_desc": "Cadangan pra-pembaruan dibuat secara otomatis sebelum setiap pembaruan", + "no_backups": "Tidak ada cadangan pembaruan yang ditemukan", + "restore": "Restore", + "restore_confirm": "Apakah Anda yakin ingin memulihkan dari cadangan ini? File yang diubah akan ditimpa.", + "restore_success": "Cadangan berhasil dipulihkan. Konsol dimulai ulang…", + "baseline_set": "Kumpulan dasar", + "commits_behind": "berkomitmen di belakang", + "total_files": "Jumlah file", + "applied": "Applied", + "failed": "Gagal", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Buka Server", + "component_agent": "Agent", + "component_scripts": "Skrip & Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Memeriksa Pergi…", + "go_not_found": "Pergi tidak diinstal", + "go_check_failed": "Tidak dapat memeriksa ketersediaan Go", + "server_building": "Mengkompilasi Go server… Ini mungkin memerlukan waktu beberapa menit.", + "server_built": "Biner server dikompilasi", + "server_build_failed": "Kompilasi server gagal", + "server_stale_title": "Biner server kedaluwarsa", + "server_stale_desc": "Sumber Go server telah diperbarui tetapi biner yang berjalan tidak dibuat ulang. Bangun kembali sekarang untuk menerapkan pembaruan keamanan dan perpustakaan.", + "rebuild_server": "Membangun kembali biner server", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Biner server dibangun kembali dan dimulai ulang", + "rebuild_server_failed": "Pembangunan kembali biner server gagal", + "server_deployed": "Biner server dikerahkan", + "server_deploy_failed": "Penyebaran server gagal", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Mengunduh sumber server…", + "delete": "Hapus", + "delete_confirm": "Hapus cadangan {name} secara permanen? Hal ini tidak dapat dibatalkan.", + "delete_success": "Cadangan dihapus", + "delete_failed": "Gagal menghapus cadangan", + "retention_label": "Simpan N cadangan terbaru", + "retention_hint": "Cadangan lama dihapus secara otomatis setelah setiap pembaruan. Gunakan 0 untuk menyimpan semua cadangan.", + "retention_saved": "Setelan retensi disimpan", + "retention_invalid": "Retensi harus berupa bilangan bulat antara 0 dan 1000", + "retention_required_for_prune": "Tetapkan nilai retensi lebih besar dari 0 terlebih dahulu", + "prune_now": "Apply now", + "prune_confirm": "Simpan hanya cadangan terbaru {n} dan hapus sisanya?", + "prune_done": "Cadangan {n} yang dipangkas", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Metode pembaruan", + "strategy_download": "Unduh biner yang sudah dibuat sebelumnya", + "strategy_compile": "Kompilasi dari sumber", + "both_available": "Unduh & Kompilasi", + "download_available": "Unduhan tersedia", + "no_method": "Tidak ada metode pembaruan", + "no_release": "No release", + "available": "Tersedia", + "server_downloading": "Mengunduh biner server…", + "server_downloaded": "Biner server diunduh", + "server_download_failed": "Pengunduhan biner server gagal", + "server_download_note": "Biner yang sudah dibuat sebelumnya akan diunduh dari GitHub Releases. Ini biasanya memakan waktu kurang dari satu menit.", + "install_go_hint": "Instal Go dari https://go.dev/dl/ untuk mengaktifkan kompilasi, atau publikasikan rilis dengan binari yang telah dibuat sebelumnya", + "strategy_install_go": "Instal otomatis Go dan kompilasi", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Siap dibangun kembali secara otomatis", + "toolchain_ready": "Rantai alat terpasang", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Mengunduh rantai alat Go…", + "toolchain_failed": "Pemasangan toolchain gagal", + "modal_title": "Menginstal pembaruan", + "modal_done_title": "Pembaruan selesai", + "modal_close": "Tutup", + "modal_reload_now": "Muat ulang konsol", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "File konsol", + "phase_server": "Tahap peladen", + "phase_restart": "Mulai ulang", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Pencadangan dilewati (sesuai pilihan pengguna)", + "server_skipped": "Go server dilewati", + "server_not_selected": "Go server not selected", + "server_processing": "Memproses pembaruan Go server…", + "no_restart_needed": "Tidak perlu memulai ulang", + "complete": "Pembaruan diterapkan", + "complete_summary": "Pembaruan telah berhasil diterapkan.", + "complete_with_errors": "Pembaruan selesai, tetapi beberapa langkah gagal. Lihat detailnya di bawah.", + "modal_done_with_errors_title": "Pembaruan selesai dengan kesalahan", + "console_will_restart": "Proses konsol akan dimulai ulang sekarang…", + "restart_complete_msg": "Konsol selesai dimulai ulang. Klik muat ulang untuk memuat versi baru. Halaman akan dimuat ulang secara otomatis dalam 8 detik.", + "refresh_recommended": "Aset statis berubah — muat ulang halaman untuk melihat UI baru.", + "confirm_title": "Terapkan pembaruan", + "confirm_with_backup": "Cadangan pra-pembaruan akan dibuat secara otomatis.", + "confirm_no_backup": "Tidak ada cadangan yang akan dibuat (risiko Anda tanggung sendiri)." + }, + "permissions": { + "title": "Izin", + "subtitle": "Kelola izin berbasis peran dan penggantian khusus", + "info_title": "Cara kerja izin", + "info_desc": "Setiap peran memiliki izin default. Anda dapat menambah atau menghapus izin individual per peran dengan mengalihkannya di bawah. Penggantian khusus disorot dan dapat dikembalikan ke default kapan saja.", + "select_role": "Pilih peran", + "select_role_placeholder": "Pilih peran...", + "reset_overrides": "Setel ulang semua penggantian", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Tingkat server", + "custom": "Custom", + "default": "Default", + "revert": "Kembalikan ke default", + "saved": "Izin diperbarui", + "reverted": "Dikembalikan ke default", + "all_reverted": "Semua penggantian dikembalikan", + "confirm_reset": "Setel ulang semua penggantian khusus untuk peran ini ke default?", + "empty_title": "Pilih peran", + "empty_desc": "Pilih peran dari dropdown di atas untuk melihat dan mengelola izinnya.", + "locked_title": "Super Admin", + "locked_desc": "Admin Super memiliki semua izin secara default dan tidak dapat dikustomisasi.", + "cat_device": "Perangkat", + "cat_user": "Users", + "cat_server": "pelayan", + "cat_org": "Organisasi", + "cat_audit": "Audit & Pemantauan", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Lihat perangkat", + "perm_device_connect": "Hubungkan ke perangkat", + "perm_device_edit": "Sunting perangkat", + "perm_device_delete": "Hapus perangkat", + "perm_device_ban": "Melarang/membatalkan pelarangan perangkat", + "perm_device_change_id": "Ubah ID perangkat", + "perm_user_view": "Lihat pengguna", + "perm_user_create": "Buat pengguna", + "perm_user_edit": "Sunting pengguna", + "perm_user_delete": "Hapus pengguna", + "perm_server_config": "Konfigurasi server", + "perm_server_keys": "Kelola kunci API", + "perm_org_create": "Buat organisasi", + "perm_org_edit": "Sunting organisasi", + "perm_org_delete": "Hapus organisasi", + "perm_org_manage_users": "Kelola pengguna organisasi", + "perm_org_manage_devices": "Kelola perangkat organisasi", + "perm_audit_view": "Lihat log audit", + "perm_metrics_view": "Lihat metrik", + "perm_blocklist_edit": "Edit daftar blokir", + "perm_cdap_view": "Lihat perangkat CDAP", + "perm_cdap_command": "Kirim perintah CDAP", + "perm_cdap_terminal": "Akses terminal CDAP", + "perm_cdap_files": "Akses file CDAP", + "perm_enrollment_manage": "Kelola pendaftaran", + "perm_enrollment_approve": "Menyetujui pendaftaran", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Sunting merek", + "perm_server_attestation": "Sertifikasi kinerja server" + }, + "notifications": { + "title": "Pemberitahuan", + "empty": "Tidak ada notifikasi baru", + "mark_all_read": "Tandai semua telah dibaca", + "see_all": "Lihat semua permintaan bantuan", + "help_request": "Permintaan bantuan", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Sesuaikan konsol dengan kebutuhan penglihatan, gerak, dan membaca Anda.", + "close": "Tutup menu aksesibilitas", + "profiles": "Profil cepat", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Teks lebih besar, kontras dan fokus kuat.", + "profile_dyslexia": "Kenyamanan membaca", + "profile_dyslexia_hint": "Font yang mudah dibaca dan spasi lebih lebar.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Mengurangi transisi dan menjeda animasi.", + "profile_color_assist": "Dukungan warna", + "profile_color_assist_hint": "Filter warna, label, dan tautan yang disorot.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Spasi huruf", + "word_spacing": "Spasi kata", + "readable_font": "Font yang dapat dibaca", + "readable_font_hint": "Menggunakan bentuk huruf yang luas dan familier.", + "dyslexia_spacing": "Jarak disleksia", + "dyslexia_spacing_hint": "Menambahkan spasi ekstra untuk teks panjang.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Gelap kontras tinggi", + "contrast_high_light": "Cahaya kontras tinggi", + "contrast_yellow_black": "Kuning di atas hitam", + "color_filter": "Filter penglihatan warna", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturasi warna", + "underline_links": "Garis bawahi tautan", + "underline_links_hint": "Membuat tautan terlihat tanpa bergantung pada warna.", + "highlight_links": "Sorot tindakan", + "highlight_links_hint": "Menguraikan tautan dan tombol.", + "highlight_headings": "Sorot judul", + "highlight_headings_hint": "Menandai judul bagian dengan bilah warna.", + "hide_media": "Dim media", + "hide_media_hint": "Meredupkan gambar, video, dan kanvas.", + "interaction": "Interaction", + "strong_focus": "Fokus yang kuat", + "strong_focus_hint": "Menampilkan cincin fokus keyboard yang besar.", + "large_cursor": "Kursor besar", + "large_cursor_hint": "Menggunakan penunjuk kontras tinggi yang lebih besar.", + "reduce_motion": "Kurangi gerakan", + "reduce_motion_hint": "Mempersingkat transisi dan pengguliran halus.", + "pause_animations": "Jeda animasi", + "pause_animations_hint": "Menghentikan perulangan gerakan visual.", + "reading_guide": "Panduan membaca", + "reading_guide_hint": "Ikuti penunjuk dengan garis terang.", + "reading_mask": "Masker membaca", + "reading_mask_hint": "Meredupkan konten di atas dan di bawah penunjuk.", + "preview": "Preview", + "preview_title": "Pratinjau ruang kerja operator", + "preview_text": "Periksa apakah teks, tautan, kontrol, dan label status nyaman dibaca sebelum menutup menu ini.", + "preview_link": "Tautan detail perangkat", + "preview_status": "Online", + "preview_button": "Tindakan utama", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Manajemen Server", + "subtitle": "Bidang kendali seperti kokpit untuk host konsol BetterDesk (BETA).", + "beta_tooltip": "Fitur beta — sedang dalam pengembangan aktif.", + "notice_title": "Fitur beta", + "notice_body": "Alat-alat ini berjalan di host tempat proses konsol BetterDesk berada. Semua operasi diaudit. Cakupan fitur akan diperluas pada rilis mendatang.", + "tab_overview": "Ikhtisar", + "tab_terminal": "Terminal", + "tab_files": "Berkas", + "tab_services": "Layanan", + "cpu": "CPU", + "memory": "Memori", + "load": "Rata-rata beban", + "disks": "Disk", + "history": "Sejarah (60 sampel terakhir)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Waktu aktif", + "no_disks": "Tidak ada data disk yang tersedia", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY tersedia", + "term_connect": "Hubungkan", + "term_disconnect": "Putuskan", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Kesalahan koneksi", + "term_warning": "Perintah dijalankan sebagai pengguna yang memiliki proses konsol. Tambahkan aturan sudoers untuk mengaktifkan elevasi.", + "term_hint": "Tip: ketik `sudo -i` untuk melakukan eskalasi (memerlukan konfigurasi sudoers).", + "term_lib_failed": "Gagal memuat perpustakaan terminal", + "files_up": "Naik satu tingkat", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Direktori kosong", + "files_error": "Gagal mencantumkan direktori", + "read_failed": "Gagal membaca file", + "save_failed": "Gagal menyimpan file", + "rename_failed": "Gagal mengganti nama", + "delete_failed": "Penghapusan gagal", + "delete_confirm": "Hapus entri ini?", + "mkdir_prompt": "Nama folder baru:", + "mkdir_failed": "Gagal membuat folder", + "file_saved": "Berkas disimpan", + "binary_warn": "File biner — hanya pratinjau", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Layanan pencarian…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Tidak ada layanan yang ditemukan", + "svc_load_failed": "Gagal memuat layanan", + "svc_action_failed": "Tindakan gagal", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Mulai ulang", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Unduh Agen BetterDesk", + "choose_platform": "Pilih platform Anda", + "choose_platform_hint": "Pilih penginstal yang cocok dengan sistem operasi Anda.", + "download": "Unduh", + "building": "Membangun…", + "failed": "Pembuatan gagal", + "need_help": "Butuh bantuan?", + "powered_by": "Didukung oleh" + }, + "server_attestation": { + "title": "Sertifikasi Kinerja Server", + "subtitle": "Benchmark kinerja yang menentukan kapasitas koneksi jarak jauh bersamaan pada ambang CPU, RAM, dan disk 80%.", + "warning_title": "Uji beban", + "warning_body": "Benchmark mensimulasikan koneksi WebSocket paralel ke server signal dan relay. Jalankan di luar jam sibuk — pengujian ini membebani produksi.", + "run_benchmark": "Jalankan Benchmark", + "abort": "Batalkan", + "download_report": "Unduh laporan JSON", + "last_test": "Pengujian terakhir", + "no_test_yet": "Belum ada benchmark yang dijalankan", + "max_connections": "Koneksi maksimum", + "threshold_80": "Ambang 80% — metrik akhir", + "disk": "Disk", + "ramp_chart": "Grafik ramp beban", + "connections": "Koneksi", + "connections_short": "koneksi", + "tier_guide_title": "Apa arti setiap tingkatan?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 koneksi bersamaan — VPS kecil (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 koneksi — server kelas menengah (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 koneksi — server berperforma tinggi (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 koneksi — infrastruktur enterprise (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ koneksi — kelas turbo: hardware khusus, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Catatan: di Docker, metrik CPU/RAM dapat mencerminkan batas container daripada host fisik.", + "badge_tooltip": "BetterDesk Server Attestation — sertifikasi kinerja server", + "confirm_run": "Benchmark ini akan menguji beban server dengan koneksi simulasi. Lanjutkan?", + "starting": "Memulai…", + "complete": "Benchmark selesai", + "signal_peers": "Peer sinyal", + "relay_sessions": "Sesi relay", + "page_error": "Gagal memuat halaman Server Attestation", + "mode_estimated": "Estimasi (WebSocket tidak dapat dijangkau)", + "incomplete": "Benchmark selesai tanpa tingkatan yang valid" + }, + "commercialization": { + "title": "Komersialisasi", + "subtitle": "Paket dukungan, sesi berbayar, dan laporan kerja", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Fitur awal — penagihan dan paket sedang dalam pengembangan aktif.", + "tabs": { + "overview": "Ikhtisar", + "packages": "Paket & kontrak", + "sessions": "Sesi", + "reports": "Laporan", + "settings": "Pengaturan lanjutan" }, - "branding": { - "identity_title": "Identitas Merek", - "identity_desc": "Sesuaikan nama dan deskripsi aplikasi yang ditampilkan di seluruh konsol", - "app_name": "Nama Aplikasi", - "app_description": "Deskripsi Aplikasi", - "logo_title": "Logo", - "logo_desc": "Pilih bagaimana logo Anda muncul di sidebar dan halaman login", - "logo_type_icon": "Ikon Bahan", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "Masukkan nama Ikon Material (misalnya dns, cloud, keamanan). Lihat font.google.com/icons", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "Tempelkan markup SVG Anda di sini. Mendukung elemen penuh dengan jalur dan gaya.", - "logo_image_upload": "Unggah Gambar", - "logo_image_choose": "Pilih file gambar", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Jenis berkas tidak valid. Gunakan PNG, JPG, GIF, WebP atau SVG.", - "preview": "Preview", - "colors_title": "Skema Warna", - "colors_desc": "Sesuaikan palet warna. Biarkan kosong untuk menggunakan default.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "Warna Aksen", - "colors_borders": "Borders", - "import_export_title": "Impor / Ekspor", - "import_export_desc": "Simpan tema Anda sebagai file JSON atau impor tema dari instance lain", - "export_theme": "Ekspor Tema", - "import_theme": "Impor Tema", - "reset_defaults": "Atur Ulang ke Default", - "save_branding": "Simpan Merek", - "saved": "Pencitraan merek berhasil disimpan. Memuat ulang...", - "exported": "Tema diekspor", - "imported": "Tema berhasil diimpor. Memuat ulang...", - "import_error": "Gagal mengimpor tema. Format berkas tidak valid.", - "reset_confirm": "Apakah Anda yakin ingin menyetel ulang pencitraan merek ke default? Hal ini tidak dapat dibatalkan.", - "reset_success": "Pencitraan merek disetel ulang ke default. Memuat ulang...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Teks utama ditampilkan sebagai logo merek Anda", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Teks sekunder di bawah logo (misalnya nama produk atau tagline)", - "logo_upload_success": "Logo berhasil diunggah.", - "typography_title": "Typography", - "typography_desc": "Pilih font untuk judul dan teks isi. Font diunduh ke server untuk dihosting sendiri.", - "font_heading": "Font Judul", - "font_heading_hint": "Digunakan untuk judul (H1–H6) dan logo teks", - "font_body": "Body Font", - "font_body_hint": "Digunakan untuk teks isi dan elemen UI", - "font_search_placeholder": "Cari font...", - "font_system_default": "Bawaan sistem", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "font diunduh di server", - "powered_by": "Didukung oleh", - "background_title": "Latar Belakang & Tampilan", - "background_desc": "Atur wallpaper console, gradient, atau latar belakang warna solid. Kartu melayang di atasnya.", - "bg_type_none": "Tidak ada", - "bg_type_color": "Warna Solid", - "bg_type_gradient": "Gradient", - "bg_type_image": "Gambar", - "bg_color": "Warna Latar Belakang", - "bg_gradient": "Gradien CSS", - "bg_gradient_hint": "CSS gradient yang valid, mis. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Unggah Gambar Latar Belakang", - "bg_image_choose": "Pilih file gambar", - "bg_image_hint": "PNG, JPG, WebP atau GIF. Maks 8 MB. Disimpan di server.", - "bg_image_url": "Path / URL Gambar", - "bg_size": "Ukuran Gambar", - "bg_size_cover": "Cover (isi layar)", - "bg_size_contain": "Contain (sesuaikan)", - "bg_size_auto": "Otomatis (asli)", - "bg_blur": "Blur Latar Belakang", - "bg_overlay": "Overlay Gelap", - "bg_overlay_hint": "Mempergelap latar belakang untuk keterbacaan teks yang lebih baik.", - "bg_image_too_large": "Gambar terlalu besar. Ukuran maksimum 8 MB.", - "bg_image_invalid_type": "Jenis file tidak valid. Gunakan PNG, JPG, WebP atau GIF.", - "bg_upload_success": "Gambar latar belakang berhasil diunggah.", - "login_title": "Halaman Login", - "login_desc": "Sesuaikan judul, subjudul, dan latar belakang layar login.", - "login_heading": "Judul Login", - "login_heading_placeholder": "Selamat datang kembali", - "login_subheading": "Subjudul Login", - "login_subheading_placeholder": "Masuk ke akun Anda", - "login_bg_inherit": "Sama dengan console", - "agent_title": "Halaman Unduhan Agent", - "agent_desc": "Sesuaikan portal unduhan agent publik yang ditampilkan kepada pengguna akhir.", - "agent_show_powered": "Tampilkan \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Tampilkan atribusi BetterDesk di footer portal unduhan.", - "footer_title": "Footer & Hak Cipta", - "footer_desc": "Tambahkan baris footer kustom yang ditampilkan di layar login dan sidebar console.", - "footer_text": "Teks Footer", - "footer_text_hint": "mis. pemberitahuan hak cipta atau nama perusahaan.", - "show_powered": "Tampilkan atribusi \"BetterDesk\"", - "show_powered_hint": "Tampilkan nama dan versi BetterDesk di footer login dan sidebar.", - "custom_css_title": "CSS Kustom", - "custom_css_desc": "Lanjutan: injeksi CSS kustom yang diterapkan di seluruh console dan halaman login.", - "custom_css_hint": "Gunakan dengan hati-hati. Aturan yang tidak valid atau tidak aman akan dibersihkan. Maks 20.000 karakter." + "clock": { + "title": "Waktu server (NTP)", + "check_now": "Periksa sekarang", + "unsynced": "Jam server tidak tersinkron — sesi berbayar dapat diblokir" }, - "device_detail": { - "tab_overview": "Ikhtisar", - "tab_tags": "Tag & Catatan", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Koneksi", - "section_manage": "Manajemen", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Perangkat ini dilarang", - "no_reason": "Tidak ada alasan yang diberikan", - "tags": "Tags", - "no_tags": "Tidak ada tag yang ditetapkan untuk perangkat ini", - "tag_placeholder": "Masukkan nama tag...", - "add_tag": "Add", - "tag_exists": "Tag ini sudah ada", - "notes": "Notes", - "notes_placeholder": "Tambahkan catatan tentang perangkat ini...", - "danger_zone": "Danger Zone", - "action_connect_web": "Jarak Jauh Web", - "action_connect_web_desc": "Terhubung melalui browser desktop jarak jauh", - "action_native_remote": "BetterDesk Jarak Jauh", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Klien Desktop", - "action_connect_desktop_desc": "Buka di aplikasi klien desktop", - "action_change_id_desc": "Ubah ID pendaftaran perangkat", - "action_ban_desc": "Blokir perangkat ini agar tidak terhubung", - "action_unban_desc": "Izinkan perangkat ini terhubung kembali", - "action_delete_desc": "Hapus perangkat ini secara permanen", - "tab_hardware": "Hardware", - "tab_metrics": "Metrik", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kemampuan Pengkodean", - "section_live_metrics": "Metrik Langsung", - "section_current_usage": "Penggunaan Saat Ini", - "section_usage_history": "Riwayat Penggunaan", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "Frekuensi CPU", - "total_memory": "Jumlah Memori", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Diperbarui", - "device_groups": "Grup", - "no_sysinfo": "Tidak ada informasi perangkat keras yang tersedia", - "no_sysinfo_hint": "Info sistem akan muncul setelah perangkat mengirimkan laporan sysinfo", - "no_metrics": "Tidak ada data metrik yang tersedia", - "no_metrics_hint": "Metrik akan muncul setelah perangkat mengirimkan laporan detak jantung", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "File", - "agent_lazy_hint": "Klik tab ini untuk memuat data langsung dari agen", - "agent_offline": "Agen sedang offline", - "agent_timeout": "Agen tidak merespons tepat waktu", - "agent_error": "Gagal memuat data dari agen", - "service_name": "Name", - "service_display": "Nama tampilan", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Sesi berbayar aktif" }, - "inventory": { - "title": "Inventory", - "subtitle": "Inventarisasi perangkat keras dan perangkat lunak dari perangkat yang dikelola", - "device_id": "ID Perangkat", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Jumlah Memori", - "memory_used": "Used Memory", - "memory_available": "Memori yang Tersedia", - "memory_usage": "Penggunaan Memori", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Antarmuka Jaringan", - "software": "Software", - "software_count": "Perangkat Lunak yang Diinstal", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Inti Fisik", - "logical_cores": "Inti Logis", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Tersedia", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "Alamat IP", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Kolektor Berlari", - "collector_stopped": "Kolektor Berhenti", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Dikumpulkan Pada", - "no_data": "Belum ada data inventaris yang tersedia. Klik \"Kumpulkan Sekarang\" untuk mengumpulkan informasi sistem.", - "no_devices": "Tidak ada perangkat dengan data inventaris yang ditemukan", - "detail_title": "Detail Inventaris Perangkat", - "telemetry": "Telemetry", - "view_detail": "Lihat Detil", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Paket baru", + "name": "Nama", + "included_minutes": "Menit termasuk", + "overage_rate": "Tarif kelebihan / j", + "currency": "Mata uang", + "heading": "Paket dukungan", + "prompt_name": "Nama paket", + "create_title": "Paket baru untuk organisasi", + "create_submit": "Buat paket", + "select_org": "Organisasi", + "select_org_placeholder": "Pilih organisasi…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Mendukung tiket dan pelacakan masalah", - "create": "New Ticket", - "edit": "Sunting Tiket", - "delete": "Hapus Tiket", - "detail": "Detail Tiket", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Ditugaskan Ke", - "created_by": "Dibuat Oleh", - "device": "Perangkat", - "sla_due": "SLA Due", - "created_at": "Dibuat", - "updated_at": "Diperbarui", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Buka", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Tulis komentar...", - "internal_note": "Catatan internal (tidak terlihat oleh pengguna akhir)", - "attachments": "Attachments", - "upload_attachment": "Unggah Lampiran", - "download": "Download", - "connect_device": "Hubungkan ke Perangkat", - "no_tickets": "Tidak ada tiket yang ditemukan", - "no_comments": "Belum ada komentar", - "no_attachments": "Tidak ada lampiran", - "title_required": "Judul diperlukan", - "delete_confirm": "Apakah Anda yakin ingin menghapus tiket #{id}?", - "delete_success": "Tiket berhasil dihapus", - "created_success": "Tiket berhasil dibuat", - "updated_success": "Tiket berhasil diperbarui", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Cari tiket...", - "assign_to_me": "Tetapkan untuk saya", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Buka", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Pemantauan Aktivitas", - "subtitle": "Penggunaan aplikasi dan pelacakan menganggur", - "device": "Perangkat", - "hostname": "Hostname", - "sessions": "Sesi", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Aplikasi Teratas", - "app_name": "Application", - "window_title": "Judul Jendela", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Jumlah Sesi", - "total_active": "Jumlah Aktif", - "total_idle": "Total Idle", - "detail_count": "Catatan Detil", - "no_data": "Tidak ada data aktivitas yang tersedia", - "no_sessions": "Tidak ada sesi", - "filter_from": "Dari", - "filter_to": "Untuk", - "filter_apply": "Terapkan penyaring", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Telusuri perangkat...", - "date_range": "Date Range", - "device_id": "ID Perangkat", - "session_start": "Sesi Dimulai", - "session_end": "Sesi Berakhir", - "user": "User", - "no_activity": "Tidak ada aktivitas yang tercatat", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Tidak ada aplikasi" - }, - "automation": { - "title": "Otomatisasi & Peringatan", - "subtitle": "Aturan peringatan, perintah jarak jauh, dan konfigurasi SMTP", - "rules": "Alert Rules", - "rules_subtitle": "Tentukan kondisi yang memicu notifikasi", - "alerts": "Riwayat Peringatan", - "alerts_subtitle": "Lihat dan akui peringatan yang dipicu", - "commands": "Perintah Jarak Jauh", - "commands_subtitle": "Kirim perintah ke perangkat jarak jauh", - "smtp": "Konfigurasi SMTP", - "smtp_subtitle": "Pengaturan pemberitahuan email", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Tipe Kondisi", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Perangkat Sasaran", - "scope_all": "Semua Perangkat", - "cooldown": "Waktu tunggu (detik)", - "notify_emails": "Email Pemberitahuan", - "enabled": "Diaktifkan", - "disabled": "Dengan disabilitas", - "create_rule": "Buat Aturan", - "edit_rule": "Sunting Aturan", - "delete_rule": "Hapus Aturan", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Dipicu Pada", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Lebih besar dari", - "op_gte": "Lebih besar atau setara", - "op_lt": "Less than", - "op_lte": "Kurang atau sama", - "op_eq": "Sama dengan", - "op_neq": "Tidak sama dengan", - "type_cpu_usage": "Penggunaan CPU (%)", - "type_memory_usage": "Penggunaan Memori (%)", - "type_disk_usage": "Penggunaan Disk (%)", - "type_offline_duration": "Durasi Offline", - "type_idle_duration": "Durasi Menganggur", - "type_custom": "Custom", - "command_type": "Tipe Perintah", - "command_payload": "Perintah/Skrip", - "command_result": "Result", - "command_status": "Status", - "send_command": "Kirim Perintah", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Gagal", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Nama pengguna", - "smtp_pass": "Kata sandi", - "smtp_from": "Dari Alamat", - "smtp_test": "Uji Koneksi", - "smtp_save": "Simpan Konfigurasi", - "smtp_test_success": "Koneksi berhasil", - "smtp_test_failed": "Koneksi gagal", - "no_rules": "Tidak ada aturan pemberitahuan yang dikonfigurasi", - "no_alerts": "Tidak ada peringatan yang dipicu", - "no_commands": "Tidak ada perintah yang dikirim", - "id_payload_required": "ID perangkat dan payload diperlukan", - "no_commands_sent": "Belum ada perintah yang dikirim" - }, - "file_transfer": { - "title": "Pemindahan Berkas", - "transfers": "Transfers", - "new_transfer": "Pemindahan Baru", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Ukuran Berkas", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Perangkat", - "initiated_by": "Diprakarsai Oleh", - "created_at": "Dibuat Pada", - "cancel": "Batalkan", - "cancel_confirm": "Apakah Anda yakin ingin membatalkan transfer ini?", - "download_file": "Unduh Berkas", - "browse_files": "Jelajahi File", - "select_file": "Pilih File", - "select_device": "Pilih Perangkat", - "no_transfers": "Tidak ada transfer file", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Gagal", - "status_cancelled": "Cancelled", - "bytes_transferred": "Byte Ditransfer", - "chunks": "Chunks", - "transfer_started": "Transfer dimulai", - "transfer_completed": "Transfer selesai", - "transfer_failed": "Transfer gagal", - "transfer_cancelled": "Pemindahan dibatalkan", - "max_file_size": "Ukuran file maksimum: 4 GB", - "error_too_large": "File terlalu besar", - "error_no_device": "Tidak ada perangkat yang dipilih", - "error_no_file": "Tidak ada berkas yang dipilih" - }, - "network": { - "title": "Pemantauan Jaringan", - "targets": "Target Pemantauan", - "add_target": "Add Target", - "edit_target": "Sunting Sasaran", - "delete_target": "Hapus Sasaran", - "delete_confirm": "Apakah Anda yakin ingin menghapus target ini?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Batas waktu (md)", - "interval": "Interval waktu", - "enabled": "Diaktifkan", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Periksa Riwayat", - "stats": "Statistics", - "total_targets": "Jumlah Sasaran", - "targets_up": "Targets Up", - "targets_down": "Target Turun", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Alat Jaringan", - "ping_tool": "Ping Test", - "tcp_tool": "Pemeriksaan Port TCP", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Mulai Memantau", - "monitor_stop": "Hentikan Pemantauan", - "monitor_running": "Monitor sedang berjalan", - "monitor_stopped": "Monitor dihentikan", - "no_targets": "Tidak ada target pemantauan yang dikonfigurasi", - "no_history": "Tidak ada riwayat pemeriksaan yang tersedia", - "error_code": "Error", - "status_code": "Kode Status HTTP", - "search_targets": "Target pencarian...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Periksa Riwayat", - "name_host_required": "Nama dan host diperlukan", - "uptime": "Uptime", - "response_time": "Waktu Respons", - "avg_response": "Respon Rata-Rata", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Waktu Respons (md)", - "uptime_percent": "Uptime %", - "last_24h": "24 jam terakhir", - "last_7d": "Last 7 days", - "last_30d": "30 hari terakhir" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "Kebijakan DLP", - "add_policy": "Tambahkan Kebijakan", - "edit_policy": "Sunting Kebijakan", - "delete_policy": "Hapus Kebijakan", - "delete_confirm": "Apakah Anda yakin ingin menghapus kebijakan ini?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Diaktifkan", - "disabled": "Dengan disabilitas", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "Perangkat USB", - "rule_type_file": "Operasi Berkas", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "ID Vendor (VID)", - "pid": "ID Produk (PID)", - "serial": "Nomor Seri", - "device_class": "Kelas Perangkat", - "drive_type": "Drive Type", - "file_extensions": "Ekstensi File", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Mengajukan", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Tidak ada kebijakan DLP yang dikonfigurasi", - "no_events": "Tidak ada peristiwa DLP yang direkam", - "stats": "Statistics", - "total_events": "Jumlah Acara", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "File Acara", - "device_id": "ID Perangkat", - "policy_matched": "Kebijakan Cocok", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Jumlah Kebijakan", - "active_policies": "Kebijakan Aktif", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Kebijakan", - "tab_events": "Events", - "search_policies": "Kebijakan penelusuran...", - "create_policy": "Buat Kebijakan", - "policy_type": "Jenis Kebijakan", - "scope": "Scope", - "events_count": "Events", - "search_events": "Telusuri acara...", - "event_time": "Event Time", - "device": "Perangkat", - "policy": "Kebijakan", - "detail": "Detail", - "scope_help": "ID perangkat yang dipisahkan koma, atau biarkan kosong untuk semua", - "scope_all": "Semua Perangkat", - "active": "Active", - "type_file_type": "Jenis File", - "type_clipboard": "papan klip", - "type_screen_share": "Berbagi Layar", - "type_file_transfer": "Pemindahan Berkas", - "policy_desc": "Deskripsi Kebijakan", - "type_usb": "USB" + "sessions": { + "device": "Perangkat", + "operator": "Operator", + "duration": "Durasi", + "phase": "Fase", + "amount": "Jumlah" }, "reports": { - "title": "Reports", - "generate": "Hasilkan Laporan", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Ringkasan Perangkat", - "type_activity": "Ringkasan Kegiatan", - "type_security": "Laporan Keamanan", - "type_tickets": "Laporan Tiket", - "type_network": "Laporan Jaringan", - "type_inventory": "Laporan Inventaris", - "type_alerts": "Laporan Peringatan", - "saved": "Laporan Tersimpan", - "save_report": "Simpan Laporan", - "delete_report": "Hapus Laporan", - "delete_confirm": "Apakah Anda yakin ingin menghapus laporan tersimpan ini?", - "no_saved": "Tidak ada laporan tersimpan", - "report_title": "Title", - "created_by": "Dibuat Oleh", - "created_at": "Dibuat Pada", - "filters": "Filters", - "date_from": "Dari", - "date_to": "Untuk", - "device_filter": "ID Perangkat", - "generated_at": "Dihasilkan Pada", - "section": "Bagian Data", - "total_devices": "Jumlah Perangkat", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Distribusi Platform", - "top_applications": "Aplikasi Teratas", - "total_active": "Total Waktu Aktif", - "total_idle": "Total Waktu Menganggur", - "dlp_stats": "Statistik DLP", - "banned_devices": "Perangkat yang Dilarang", - "audit_logs": "Audit Logs", - "ticket_stats": "Statistik Tiket", - "category_distribution": "Distribusi Kategori", - "priority_distribution": "Distribusi Prioritas", - "targets_status": "Status Sasaran", - "os_distribution": "Distribusi OS", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Peringatan Terbaru", - "tab_generate": "Hasilkan Laporan", - "tab_saved": "Laporan Tersimpan", - "type_devices_desc": "Ikhtisar semua perangkat, platform, dan status", - "type_activity_desc": "Ringkasan penggunaan aplikasi dan waktu idle", - "type_security_desc": "Larang tindakan, peristiwa DLP, dan log audit", - "type_tickets_desc": "Statistik tiket dan kinerja SLA", - "type_network_desc": "Target pemantauan jaringan dan data uptime", - "type_inventory_desc": "Ringkasan inventaris perangkat keras dan perangkat lunak", - "type_alerts_desc": "Aturan peringatan dan riwayat peringatan yang dipicu", - "report_name": "Report Name", - "format": "Format", - "save": "Simpan Laporan", - "preview": "Preview", - "download": "Download", - "delete_saved": "Hapus Laporan", - "raw_json": "Raw JSON" + "session": "Sesi", + "summary": "Ringkasan", + "date": "Tanggal" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Sunting Penyewa", - "delete_tenant": "Hapus Penyewa", - "delete_confirm": "Apakah Anda yakin ingin menghapus penyewa ini? Semua penetapan perangkat dan pengguna akan dihapus.", - "name": "Name", - "slug": "Slug", - "contact_name": "Nama Kontak", - "contact_email": "Hubungi Email", - "max_devices": "Perangkat Maks", - "max_devices_hint": "0 = tidak terbatas", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Perangkat", - "users": "Users", - "assign_device": "Tetapkan Perangkat", - "assign_devices": "Tetapkan Perangkat", - "remove_device": "Hapus Perangkat", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Tidak ada penyewa yang dikonfigurasi", - "no_devices": "Tidak ada perangkat yang ditetapkan ke penyewa ini", - "no_users": "Tidak ada pengguna yang ditetapkan ke penyewa ini", - "stats": "Statistik Penyewa", - "total_devices": "Jumlah Perangkat", - "online_devices": "Perangkat Daring", - "total_users": "Total Users", - "created_at": "Dibuat Pada", - "updated_at": "Diperbarui Pada", - "slug_exists": "Siput penyewa sudah ada", - "total_tenants": "Jumlah Penyewa", - "active_tenants": "Penyewa Aktif", - "search": "Cari penyewa...", - "create_tenant": "Buat Penyewa", - "detail": "Detail Penyewa", - "contact": "Contact", - "enabled": "Diaktifkan", - "disabled": "Dengan disabilitas", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Kontrak organisasi", + "new": "Tetapkan paket", + "org": "Organisasi", + "package": "Paket", + "remaining": "Menit tersisa", + "status": "Status", + "actions": "Tindakan", + "suspend": "Tangguhkan", + "activate": "Aktifkan", + "select_org": "Pilih organisasi", + "select_package": "Pilih paket", + "no_orgs": "Organisasi tidak ditemukan", + "no_packages": "Buat paket terlebih dahulu" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Cari berdasarkan ID perangkat, nama host atau IP...", - "no_registrations": "No registration requests", - "col_device_id": "ID Perangkat", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "Apakah Anda yakin ingin menyetujui perangkat ini? Ini akan menerima kredensial server dan dapat terhubung secara otomatis.", - "approved_success": "Pendaftaran perangkat berhasil disetujui", - "reject_btn": "Reject", - "reject_title": "Tolak Pendaftaran", - "reject_confirm": "Apakah Anda yakin ingin menolak permintaan pendaftaran ini?", - "reject_reason": "Alasan (opsional)", - "reject_reason_placeholder": "Masukkan alasan penolakan...", - "rejected_success": "Pendaftaran perangkat ditolak", - "delete_confirm": "Apakah Anda yakin ingin menghapus catatan pendaftaran ini?", - "deleted_success": "Catatan pendaftaran dihapus", - "enrollment_title": "Pendaftaran Perangkat", - "enrollment_subtitle": "Permintaan pendaftaran yang tertunda dari klien desktop BetterDesk", - "enrollment_empty": "Tidak ada permintaan pendaftaran yang tertunda", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Nama Tampilan", - "enrollment_display_name_placeholder": "Masukkan nama untuk perangkat ini...", - "enrollment_sync_mode": "Mode Sinkronisasi", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Pendaftaran perangkat disetujui", - "enrollment_rejected_success": "Pendaftaran perangkat ditolak", - "approve_title": "Setujui Perangkat", - "field_name": "Nama perangkat", - "field_name_placeholder": "Masukkan nama untuk perangkat ini...", - "field_sync_mode": "Mode sinkronisasi", - "sync_standard": "Standar — sinkronisasi seimbang", - "sync_silent": "Senyap — telemetri minimal", - "sync_turbo": "Turbo — sinkronisasi agresif", - "field_tags": "Tag", - "field_tags_placeholder": "Tag dipisahkan koma (mis. kantor, laptop)...", - "field_tags_existing": "Tag yang ada", - "field_tag_add_placeholder": "Tambah tag baru...", - "field_tag_add_btn": "Tambah", - "field_groups": "Grup perangkat", - "field_folder": "Folder", - "field_folder_none": "Tidak ada folder", - "reject_ban_option": "Blokir perangkat ini", - "reject_ban_hint": "Perangkat akan diblokir dan tidak dapat mengirim permintaan pendaftaran baru.", - "banner_open_mode": "Pendaftaran terbuka — klien RustDesk baru mendaftar tanpa persetujuan operator. Atur mode Terkelola di Pengaturan untuk menggunakan antrian ini.", - "banner_locked_mode": "Pendaftaran terkunci — hanya perangkat terikat token yang dapat mendaftar. Mode Terkelola diperlukan untuk persetujuan operator atas klien yang tidak dikenal.", - "enrollment_settings_link": "Pengaturan pendaftaran" + "export": { + "csv": "Ekspor CSV", + "pdf": "Ekspor PDF", + "sessions_csv": "Ekspor sesi CSV" }, - "backup": { - "title": "Backup", - "desc": "Unduh cadangan lengkap konfigurasi konsol Anda, pengguna, grup, dan pengaturan. Data rekan Go server disertakan ketika backend BetterDesk aktif.", - "restore_title": "Restore", - "restore_desc": "Unggah file cadangan yang diunduh sebelumnya untuk memulihkan konfigurasi konsol. Pilih bagian mana yang akan dipulihkan di bawah.", - "stat_users": "Users", - "stat_settings": "Pengaturan", - "stat_folders": "Folders", - "stat_groups": "Grup", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "Unduh Cadangan", - "creating": "Membuat cadangan...", - "download_success": "Cadangan berhasil diunduh", - "upload": "Unggah Cadangan", - "restore_confirm": "Apakah Anda yakin ingin memulihkan dari cadangan ini? Bagian yang dipilih akan ditimpa.", - "restore_success": "Cadangan berhasil dipulihkan. Beberapa perubahan mungkin memerlukan pemuatan ulang halaman.", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "Pengaturan konsol", - "opt_branding": "Merek / Tema", - "opt_folders": "Folder perangkat", - "opt_groups": "Grup pengguna & perangkat", - "opt_addressbooks": "Buku alamat", - "opt_users": "Akun pengguna", - "opt_users_warning": "Merusak: menggantikan SEMUA akun pengguna dengan data cadangan. Anda mungkin logout.", - "no_file": "Tidak ada file cadangan yang dipilih", - "invalid_json": "File cadangan tidak valid: JSON tidak valid", - "invalid_format": "File cadangan tidak valid: bukan cadangan BetterDesk", - "stat_database": "Engine database", - "stat_keys": "Server keys disertakan", - "stat_env": "File environment", - "stat_uploads": "File branding", - "restart_required": "Beberapa komponen yang dipulihkan (keys / .env / Go database) memerlukan restart layanan agar berlaku.", - "security_warning": "Cadangan ini berisi rahasia (server keys, file environment, hash kata sandi, dan rahasia 2FA). Simpan dengan aman dan jangan pernah berbagi.", - "restore_warning": "Memulihkan secrets, file environment, atau database Go server akan menimpa identitas server dan memerlukan restart layanan setelahnya.", - "opt_database": "Database (semua tabel)", - "opt_database_hint": "Mengimpor ulang semua data console. Diterapkan langsung, tidak perlu restart.", - "opt_uploads": "File branding", - "opt_uploads_hint": "Logo dan gambar yang diunggah.", - "opt_secrets": "Kunci & rahasia server", - "opt_secrets_warning": "Menimpa identitas server Ed25519, API key, dan session secret. Memerlukan restart layanan.", - "opt_env": "File environment (.env)", - "opt_env_warning": "Menimpa SESSION_SECRET, API key, DSN database, port, dan pengaturan TLS. Memerlukan restart layanan.", - "opt_godb": "Database Go server", - "opt_godb_warning": "Menimpa database SQLite Go server (hanya backend SQLite). Memerlukan restart layanan." + "report": { + "title": "Laporan kerja", + "subtitle": "Jelaskan pekerjaan yang dilakukan selama sesi jarak jauh ini.", + "category": "Kategori", + "ticket_ref": "Referensi tiket", + "summary": "Pekerjaan yang dilakukan", + "skip": "Lewati untuk sekarang", + "submit": "Kirim laporan", + "summary_required": "Ringkasan wajib diisi", + "saved": "Laporan kerja disimpan" }, - "cdap": { - "device_detail": "Perangkat CDAP", - "loading": "Memuat...", - "loading_widgets": "Memuat widget perangkat...", - "load_error": "Gagal memuat data perangkat", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "Perangkat sedang offline. Nilai widget mungkin sudah basi.", - "no_widgets": "Tidak ada widget yang tersedia", - "no_widgets_desc": "Perangkat ini belum mendaftarkan manifes CDAP dengan definisi widget.", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "Konfirmasikan Perintah", - "select_option": "Pilih", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "Kirim Perintah", - "command_sent": "Perintah berhasil dikirim", - "command_failed": "Gagal mengirim perintah", - "devices_title": "Perangkat CDAP", - "devices_subtitle": "Perangkat yang terhubung melalui Protokol Aplikasi Perangkat Khusus", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "Telusuri perangkat...", - "no_devices": "Tidak ada perangkat yang terhubung", - "no_devices_desc": "Tidak ada perangkat CDAP yang terhubung saat ini. Perangkat akan muncul di sini setelah terhubung ke gateway.", - "gateway_disabled": "Gerbang CDAP Dinonaktifkan", - "gateway_disabled_desc": "Aktifkan gateway CDAP dengan mengatur CDAP_ENABLED=true di konfigurasi server.", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "Nonaktifkan CDAP", - "enabled_restart": "CDAP diaktifkan. Restart server diperlukan untuk menerapkan perubahan.", - "disabled_restart": "CDAP dinonaktifkan. Restart server diperlukan untuk menerapkan perubahan.", - "widgets": "widget", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "Peringatan Aktif", - "alert_fired": "Alert fired", - "alert_cleared": "Peringatan dihapus", - "no_alerts": "Tidak ada peringatan aktif", - "connect_terminal": "Hubungkan Terminal", - "table_search": "Cari...", - "just_now": "Just now", - "terminal_connecting": "Menghubungkan ke perangkat...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Koneksi terminal gagal", - "linked_devices": "Perangkat Tertaut", - "link_device": "Perangkat Tautan", - "unlink_device": "Unlink", - "no_linked_devices": "Tidak ada perangkat yang tertaut", - "unlink_confirm": "Apakah Anda yakin ingin membatalkan tautan perangkat ini?", - "link_prompt": "Masukkan ID Peer untuk ditautkan ke perangkat ini:", - "connect_desktop": "Hubungkan Desktop", - "connect_video": "Hubungkan Aliran", - "connect_files": "Jelajahi File", - "connect_audio": "Hubungkan Audio", - "upload_file": "Upload", - "desktop_connecting": "Menghubungkan...", - "video_connecting": "Menghubungkan...", - "files_connecting": "Menghubungkan...", - "audio_connecting": "Menghubungkan...", - "audio_streaming": "Streaming", - "clipboard_in": "Papan klip diterima", - "clipboard_out": "Papan klip terkirim", - "monitor_select": "Pilih Pantau", - "keyframe_request": "Minta Bingkai Utama", - "quality_auto": "Kualitas Otomatis" + "empty": { + "packages": "Belum ada paket. Buat dengan tombol di atas.", + "contracts": "Belum ada kontrak organisasi. Tetapkan paket ke organisasi.", + "sessions": "Belum ada sesi berbayar tercatat.", + "reports": "Belum ada laporan kerja." }, - "desktop": { - "switch_mode": "Modus Desktop", - "console_mode": "Mode Konsol", - "loading": "Memuat...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Tutup", - "widgets_mode": "Widget", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Tambahkan Widget", - "remove_widget": "Hapus Widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurasikan", - "search_widgets": "Cari widget...", - "cat_monitoring": "Monitoring", - "cat_devices": "Perangkat", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Tulis catatan di sini...", - "search_placeholder": "Cari perangkat, halaman, pengaturan...", - "search_pages": "Pages", - "search_devices": "Perangkat", - "search_no_results": "No results", - "exit_desktop": "Keluar dari Mode Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Status Perangkat", - "widget_server_health": "Informasi Server", - "widget_system_stats": "Pengukur Perangkat", - "widget_device_list": "Daftar Perangkat", - "widget_quick_actions": "Tindakan Cepat", - "widget_recent_activity": "Aktivitas Terkini", - "widget_notes": "Notes", - "widget_network_monitor": "Pemantau Jaringan", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Perangkat CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Jaringan Perangkat", - "widget_multi_gauge": "Pengukur Server", - "widget_weekly_chart": "Aktivitas Mingguan", - "widget_quick_controls": "Kontrol Cepat", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Statistik Koneksi", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sesi Pengguna", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Tidak ada perangkat", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Buka", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Atur URL di konfigurasi", - "label_server_uptime": "Waktu Aktif Server", - "label_merged_info": "Digabung ke dalam widget Info Server", - "label_with_notes": "Dengan Catatan", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Jumlah Perangkat", - "label_throughput": "Throughput", - "label_active_relays": "Relay Aktif", - "label_total_relayed": "Jumlah yang Disampaikan", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filter perangkat...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Tidak ada perangkat CDAP", - "action_add_widget": "Tambahkan Widget", - "label_merged_server_info": "Digabung ke dalam widget Info Server", - "wp_images": "Images", - "wp_colors": "Warna Padat", - "wp_custom_color": "Warna khusus", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Gambar wallpaper tidak dipasang di server ini.", - "wp_download_hint": "Tempatkan gambar PNG di direktori publik/wallpaper/ untuk mengaktifkan pemilihan wallpaper.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Pemantau Proses", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Statistik Basis Data", - "widget_docker_containers": "Kontainer Docker", - "widget_shell_command": "Komando Kerang", - "widget_device_map": "Peta Perangkat", - "widget_remote_connect": "Koneksi Jarak Jauh", - "label_no_online": "Tidak ada perangkat online", - "label_no_events": "Tidak ada acara hari ini", - "label_event_title": "Judul acara:", - "label_no_data": "Tidak ada data yang tersedia", - "label_download_speed": "Kecepatan Unduh", - "label_latency": "Latency", - "label_server": "pelayan", - "label_run_test": "Run Test", - "label_testing": "Menguji...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Tidak ada wadah", - "label_docker_unavailable": "Docker tidak tersedia", - "label_no_command": "Tidak ada perintah yang dikonfigurasi", - "label_no_output": "Belum ada keluaran", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Simpan Prasetel", - "label_load_preset": "Load Preset", - "label_preset_name": "Nama preset:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Susun Otomatis", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 Kolom (Sama)", - "label_2col_wide": "2 Kolom (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Grup Widget", - "ungroup_widgets": "Pisahkan Widget", - "group_widgets": "Grup Widget yang Dipilih", - "snap_layouts": "Tata Letak Jepret", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Jepret Kiri Atas", - "snap_top_right": "Jepret Kanan Atas", - "snap_bottom_left": "Jepret Kiri Bawah", - "snap_bottom_right": "Jepret Kanan Bawah", - "aero_shake": "Kocok untuk Meminimalkan Lainnya", - "zone_resize": "Seret batas untuk mengubah ukuran zona", - "zone_borders": "Batas Zona yang Dapat Diseret", - "app_drawer": "Applications", - "search_apps": "Telusuri aplikasi...", - "edit_shortcuts": "Edit pintasan", - "widgets": "Widget", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Tetapkan paket yang ada", + "submit": "Tetapkan" }, - "desktop_login": { - "click_to_sign_in": "Klik di mana saja atau tekan tombol untuk masuk", - "username_placeholder": "Nama pengguna", - "password_placeholder": "Kata sandi", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Otentikasi Dua Faktor", - "totp_subtitle": "Masukkan kode 6 digit dari aplikasi autentikator Anda", - "back_to_login": "Kembali untuk masuk", - "fill_all_fields": "Silakan isi semua kolom", - "invalid_credentials": "Nama pengguna atau kata sandi tidak valid", - "invalid_code": "Kode verifikasi tidak valid", - "enter_6_digits": "Masukkan semua 6 digit", - "network_error": "Network error — check your connection", - "session_expired": "Sesi berakhir. Silakan masuk lagi." - }, - "tokens": { - "title": "Token Perangkat", - "subtitle": "Kelola token pendaftaran untuk penyediaan perangkat otomatis", - "enrollment_mode": "Modus Pendaftaran", - "mode_open": "Buka", - "mode_open_desc": "Perangkat apa pun dapat mendaftar tanpa token", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Jumlah Token", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Cari token...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Hasilkan Massal", - "create": "Buat Token", - "edit": "Sunting Token", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Dibuat", - "actions": "Actions", - "name_placeholder": "misalnya Kumpulan PC kantor", - "max_uses": "Max Uses", - "max_uses_hint": "0 = tidak terbatas", - "expires_in": "Expires In", - "no_expiration": "Tidak ada kadaluwarsa", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Catatan opsional tentang token ini...", - "count": "Count", - "count_range": "Jumlah token yang akan dihasilkan (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token Dibuat", - "tokens_generated": "Token Dihasilkan", - "copy_warning": "Salin tokennya sekarang. Itu tidak akan ditampilkan lagi.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Apakah Anda yakin ingin mencabut token ini? Perangkat yang sudah terdaftar tidak akan terpengaruh.", - "revoked_success": "Token berhasil dicabut", - "no_tokens": "Tidak ada token yang ditemukan", - "expired": "Expired", - "never": "Never", - "save": "Simpan", - "cancel": "Batalkan", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Selanjutnya", - "prev": "Previous", - "skip": "Skip", - "finish": "Selesai", - "close": "Tutup", - "step_of": "{current} dari {total}", - "console_sidebar_title": "Bilah Sisi Navigasi", - "console_sidebar_text": "Akses semua modul dari sini. Klik ikon mana pun untuk menavigasi ke bagian itu. Sidebar menyesuaikan dengan ukuran layar Anda.", - "console_expand_title": "Perluas Bilah Sisi", - "console_expand_text": "Klik di sini untuk memperluas sidebar dan melihat label lengkap untuk semua item navigasi. Klik lagi untuk menutup.", - "console_search_title": "Pencarian Cepat", - "console_search_text": "Telusuri perangkat, setelan, atau tindakan dengan cepat. Tekan Ctrl+K untuk pintasan keyboard.", - "console_dashboard_title": "Dasbor", - "console_dashboard_text": "Hub pusat Anda menampilkan status server, perangkat online, dan tindakan cepat. Perhatikan sekilas metrik penting.", - "console_devices_title": "Manajemen Perangkat", - "console_devices_text": "Lihat, cari, dan kelola semua perangkat yang terhubung. Filter berdasarkan status, tetapkan tag, dan konfigurasikan pengaturan perangkat individual.", - "console_settings_title": "Pengaturan", - "console_settings_text": "Konfigurasikan perilaku server, opsi keamanan, branding, dan manajemen pengguna. Sesuaikan BetterDesk agar sesuai dengan kebutuhan Anda.", - "console_desktop_title": "Modus Desktop", - "console_desktop_text": "Beralih ke mode desktop untuk ruang kerja berjendela dengan widget. Sempurna untuk dasbor multitugas dan pemantauan.", - "console_complete_title": "Anda Siap!", - "console_complete_text": "Jelajahi kategori sidebar untuk menemukan semua fitur. Klik ikon Bantuan kapan saja untuk memulai ulang panduan ini.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Bilah atas menampilkan jam, kontrol cepat, dan akses ke laci aplikasi. Klik ikon kisi untuk menelusuri semua aplikasi.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Buka laci aplikasi untuk mencari dan meluncurkan fungsi konsol apa pun sebagai jendela mengambang. Aplikasi disusun berdasarkan kategori.", - "desktop_widgets_title": "Dasbor Widget", - "desktop_widgets_text": "Ruang kerja Anda yang dapat disesuaikan. Widget menampilkan informasi langsung dan menyediakan akses cepat ke fitur. Seret untuk mengatur ulang.", - "desktop_add_widget_title": "Tambahkan Widget", - "desktop_add_widget_text": "Klik di sini untuk menelusuri widget yang tersedia. Pilih dari tampilan pemantauan, daftar perangkat, catatan, dan lainnya.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Aplikasi yang terbuka muncul di sini. Klik untuk memfokuskan atau memperkecil jendela. Arahkan ikon untuk melihat label aplikasi.", - "desktop_snap_title": "Tata Letak Jepret", - "desktop_snap_text": "Seret jendela ke tepi layar untuk menempatkannya pada posisinya, atau arahkan tombol maksimalkan untuk pengaturan tata letak. Coba Aero Goyang!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Aplikasi terbuka di jendela yang dapat diseret dan diubah ukurannya. Minimalkan, maksimalkan, atau tutup dari bilah judul. Lapisan Windows di atas widget.", - "desktop_search_title": "Pencarian Cepat", - "desktop_search_text": "Telusuri di seluruh perangkat, halaman, dan pengaturan. Tekan Ctrl+K di mana saja untuk membuka pencarian secara instan.", - "desktop_complete_title": "Mode Desktop Siap!", - "desktop_complete_text": "Coba buka aplikasi dari laci dan atur jendela secara berdampingan. Gunakan preset widget untuk tata letak dasbor cepat.", - "devices_folders_title": "Folder Perangkat", - "devices_folders_text": "Atur perangkat ke dalam folder. Klik folder untuk memfilter daftar. Klik kanan untuk mengganti nama atau menghapus.", - "devices_search_title": "Cari & Filter", - "devices_search_text": "Cari berdasarkan ID, nama host, atau platform. Gunakan pil status untuk hanya menampilkan online, offline, atau semua perangkat.", - "devices_table_title": "Daftar Perangkat", - "devices_table_text": "Klik baris perangkat mana pun untuk mengetahui detailnya. Gunakan menu kebab di sebelah kanan untuk tindakan cepat seperti menghubungkan, mengedit tag, atau menghapus.", - "devices_complete_title": "Manajemen Perangkat Siap!", - "devices_complete_text": "Seret perangkat antar folder untuk mengaturnya. Klik dua kali perangkat untuk membuka panel detailnya.", - "settings_tabs_title": "Kategori Pengaturan", - "settings_tabs_text": "Navigasi antara bagian Umum, Keamanan, Penampilan, dan konfigurasi lainnya.", - "settings_content_title": "Konfigurasi", - "settings_content_text": "Setiap bagian berisi pengaturan server dan konsol tertentu. Perubahan disimpan ketika Anda mengklik Simpan.", - "settings_complete_title": "Ikhtisar Pengaturan", - "settings_complete_text": "Periksa pengaturan Keamanan untuk 2FA, kunci API dan manajemen pengguna. Kunjungi Appearance untuk menyesuaikan tampilan konsol.", - "help": "Bantuan & Tutorial", - "tour_console": "Tur Konsol", - "tour_desktop": "Tur Mode Desktop", - "tour_devices": "Tur Perangkat", - "tour_settings": "Tur Pengaturan", - "reset_all": "Atur Ulang Semua Tutorial", - "tour_remote": "Tur Sesi Jarak Jauh", - "tour_organization": "Pengaturan Organisasi", - "tour_cdap": "Ikhtisar CDAP", - "tour_chat": "Dasar-dasar Obrolan", - "remote_toolbar_title": "Bilah Alat Jarak Jauh", - "remote_toolbar_text": "Akses kontrol tampilan, sinkronisasi clipboard, tombol khusus, dan pengaturan kualitas dari toolbar. Alihkan layar penuh dengan F11.", - "remote_canvas_title": "Tampilan Jarak Jauh", - "remote_canvas_text": "Ini adalah layar jarak jauh. Klik di dalam untuk mulai mengontrol perangkat jarak jauh. Input mouse dan keyboard diteruskan secara otomatis.", - "remote_clipboard_title": "Sinkronisasi Papan Klip", - "remote_clipboard_text": "Salin dan tempel teks antara komputer Anda dan perangkat jarak jauh. Gunakan Ctrl+C / Ctrl+V seperti biasa sambil fokus pada tampilan jarak jauh.", - "remote_complete_title": "Sesi Jarak Jauh Siap!", - "remote_complete_text": "Gunakan tombol toolbar untuk tombol khusus (Ctrl+Alt+Del, PrintScreen) dan peralihan monitor. Tekan Escape atau klik Disconnect untuk mengakhiri sesi.", - "org_overview_title": "Organisasi", - "org_overview_text": "Organisasi memungkinkan Anda mengelompokkan pengguna, perangkat, dan kebijakan. Setiap organisasi memiliki admin, operator, dan pengaturannya sendiri.", - "org_create_title": "Buat Organisasi", - "org_create_text": "Klik di sini untuk membuat organisasi baru. Berikan nama, siput, dan deskripsi opsional. Anda akan menjadi pemilik organisasi baru.", - "org_members_title": "Kelola Anggota", - "org_members_text": "Undang pengguna melalui email, tetapkan peran (admin, operator, pengguna), dan kelola akses. Anggota dapat melihat perangkat yang ditetapkan ke organisasi mereka.", - "org_devices_title": "Tetapkan Perangkat", - "org_devices_text": "Tambahkan perangkat ke organisasi. Perangkat yang ditetapkan di sini akan mewarisi kebijakan organisasi dan dapat dilihat oleh anggotanya.", - "org_policies_title": "Kebijakan Organisasi", - "org_policies_text": "Tetapkan kebijakan keamanan seperti persyaratan kata sandi, batas waktu sesi, penerapan 2FA, dan aturan pendaftaran perangkat untuk organisasi.", - "org_complete_title": "Pengaturan Organisasi Selesai!", - "org_complete_text": "Undang tim Anda dan tetapkan perangkat untuk mulai menggunakan pengelolaan cakupan organisasi. Kebijakan berlaku otomatis untuk semua anggota.", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "Kontak & Grup", - "chat_contacts_text": "Lihat kontak dan grup obrolan Anda. Klik kontak mana pun untuk membuka percakapan. Titik hijau menunjukkan pengguna online.", - "chat_send_title": "Kirim Pesan", - "chat_send_text": "Ketik pesan Anda dan tekan Enter untuk mengirim. Pesan dienkripsi ujung ke ujung ketika kedua belah pihak mendukung E2E.", - "chat_file_title": "Bagikan File", - "chat_file_text": "Klik ikon lampiran untuk berbagi file. File dienkripsi dan ukurannya bisa mencapai 50 MB.", - "chat_complete_title": "Obrolan Siap!", - "chat_complete_text": "Ngobrol dengan operator dan pengguna akhir secara real time. Buat grup untuk komunikasi tim. Semua pesan mendukung tanda terima telah dibaca.", - "disable_tutorials": "Nonaktifkan Tutorial", - "enable_tutorials": "Aktifkan Tutorial" - }, - "help_request": { - "title": "Permintaan Bantuan", - "subtitle": "Kelola permintaan bantuan yang masuk dari klien desktop", - "new_request": "Permintaan Bantuan Baru", - "device": "Perangkat", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Tidak ada permintaan bantuan", - "notification": "Permintaan bantuan diterima dari", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisasi", - "create": "Buat Organisasi", - "edit": "Sunting Organisasi", - "detail": "Detail Organisasi", - "name": "Name", - "slug": "Siput (aman URL)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Perangkat", - "invitations": "Invitations", - "settings": "Pengaturan", - "add_user": "Add User", - "assign_device": "Tetapkan Perangkat", - "create_invitation": "Buat Undangan", - "delete_confirm": "Hapus organisasi ini? Tindakan ini akan menghapus semua pengguna, perangkat, dan pengaturan terkait.", - "no_orgs": "Belum ada organisasi", - "no_orgs_hint": "Buat organisasi pertama Anda untuk mulai mengelola perangkat dan pengguna.", - "connection_policy": "Kebijakan Koneksi", - "allow_file_transfer": "Izinkan Transfer File", - "allow_clipboard": "Izinkan Papan Klip", - "max_session_duration": "Durasi Sesi Maks (mnt)", - "role_owner": "Owner", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Anggota", - "username": "Nama pengguna", - "password": "Kata sandi", - "display_name": "Nama Tampilan", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID Perangkat", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Pengguna yang Ditugaskan", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Tidak ada pengguna di organisasi ini.", - "no_devices": "Tidak ada perangkat yang ditetapkan ke organisasi ini.", - "no_invitations": "Tidak ada undangan.", - "user_added": "User added", - "user_removed": "Pengguna dihapus", - "user_updated": "Peran pengguna diperbarui", - "device_assigned": "Perangkat ditetapkan", - "device_unassigned": "Perangkat tidak ditetapkan", - "invitation_created": "Undangan dibuat", - "settings_saved": "Pengaturan disimpan", - "org_deleted": "Organisasi dihapus", - "confirm_remove_user": "Hapus pengguna ini dari organisasi?", - "confirm_unassign_device": "Batalkan penetapan perangkat ini dari organisasi?", - "confirm_delete_org": "Hapus organisasi ini dan semua data terkait?", - "edit_role": "Sunting Peran", - "raw_settings": "Pengaturan Mentah", - "key": "Key", - "value": "Value", - "save": "Simpan Pengaturan", - "policy_unattended": "Tanpa pengawasan (instan)", - "policy_attended": "Dihadiri (dengan konfirmasi)", - "policy_ask": "Always ask", - "expires_hours": "Kedaluwarsa (jam)", - "loading_failed": "Gagal memuat data organisasi", - "name_slug_required": "Nama dan siput diperlukan", - "org_created": "Organisasi dibuat", - "org_updated": "Organisasi diperbarui", - "create_new_user": "Buat Baru", - "add_existing_user": "Tambahkan Yang Ada", - "none_available": "none", - "select_user": "Pilih pengguna", - "org_role": "Peran Organisasi", - "link_user_hint": "Pengguna yang dipilih akan ditautkan ke organisasi ini menggunakan kredensial akun server mereka.", - "no_available_users": "Semua pengguna server sudah tertaut ke organisasi ini.", - "user_linked": "Pengguna tertaut ke organisasi" - }, - "chat": { - "e2e_enabled": "Dienkripsi ujung ke ujung", - "e2e_establishing": "Membangun saluran aman...", - "e2e_established": "Saluran aman dibuat", - "e2e_unsupported": "Enkripsi E2E tidak didukung di browser ini", - "typing_indicator": "mengetik...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Mengajukan", - "file_too_large": "File terlalu besar (maks 50 MB)", - "file_encrypted": "Transfer file terenkripsi", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Kunci keamanan diputar", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Grup", - "no_contacts": "Belum ada kontak", - "no_groups": "Belum ada grup", - "no_messages": "Belum ada pesan", - "no_results": "Tidak ada hasil yang ditemukan", - "select_conversation": "Pilih percakapan untuk mulai mengobrol", - "type_message": "Ketik pesan...", - "send": "Kirim", - "attach_file": "Lampirkan berkas", - "emoji": "Emoji", - "search_messages": "Cari pesan", - "create_group": "Buat grup", - "group_name": "Nama grup", - "group_members": "Anggota", - "cancel": "Batalkan", - "create": "Buat", - "members": "anggota", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Cari kontak & pesan", - "select_conversation_hint": "Pilih percakapan untuk melihat pesan", - "info": "Info", - "group_name_placeholder": "Masukkan nama grup" - }, - "toast": { - "device_connected": "Perangkat terhubung", - "device_disconnected": "Perangkat terputus", - "session_started": "Sesi jarak jauh dimulai", - "session_ended": "Sesi jarak jauh berakhir", - "file_upload_complete": "Pengunggahan file selesai", - "settings_saved": "Pengaturan disimpan", - "error_generic": "Terjadi kesalahan", - "connection_lost": "Koneksi terputus", - "reconnecting": "Menyambungkan kembali..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Utilitas admin dan alat diagnostik", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Kirim", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Masukkan teks...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Buka Server", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Periksa keterjangkauan dan latensi host", - "tcp_title": "Pemeriksaan Port TCP", - "tcp_desc": "Uji konektivitas port TCP", - "ssl_title": "Inspektur SSL", - "ssl_desc": "Periksa detail sertifikat SSL/TLS", - "http_title": "Pemeriksaan Kesehatan HTTP", - "http_desc": "Verifikasi status titik akhir HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Selesaikan nama host ke alamat IP", - "whois_title": "DNS Records", - "whois_desc": "Catatan kueri A, AAAA, MX, TXT, NS", - "speed_title": "Speed Test", - "speed_desc": "Ukur bandwidth unduhan", - "run_speed_test": "Jalankan Tes Kecepatan", - "wol_title": "Wake-on-LAN", - "wol_desc": "Kirim paket ajaib untuk membangunkan perangkat", - "wol_sent": "Paket ajaib terkirim", - "hash_title": "Pembuat Hash", - "hash_desc": "Hasilkan hash kriptografi", - "password_title": "Pembuat Kata Sandi", - "password_desc": "Hasilkan kata sandi acak yang aman", - "jwt_title": "JWT Decoder", - "jwt_desc": "Dekode dan periksa Token Web JSON", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Menyandikan atau mendekode data Base64", - "url_title": "URL Encoder", - "url_desc": "Mengkodekan atau mendekode komponen URL", - "processes_title": "Daftar Proses", - "processes_desc": "Lihat proses sistem yang sedang berjalan", - "disk_title": "Disk Usage", - "disk_desc": "Lihat penggunaan partisi disk", - "db_title": "Statistik Basis Data", - "db_desc": "Lihat statistik tabel database", - "docker_title": "Kontainer Docker", - "docker_desc": "Lihat kontainer Docker yang sedang berjalan", - "logs_title": "Log Viewer", - "logs_desc": "Lihat keluaran log terbaru", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Berlaku Mulai", - "valid_to": "Berlaku Untuk", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Tidak ada data yang tersedia", - "no_docker": "Kontainer Docker tidak ditemukan atau Docker tidak tersedia", - "no_logs": "Tidak ada baris log yang tersedia" - }, - "policies": { - "title": "Kebijakan Organisasi", - "subtitle": "Kelola kebijakan keamanan, koneksi, dan fitur untuk organisasi Anda", - "select_org": "Organisasi", - "select_org_placeholder": "Pilih organisasi...", - "select_org_first": "Pilih organisasi untuk melihat log audit kebijakan.", - "configured": "Configured", - "connection_title": "Kebijakan Koneksi", - "connection_desc": "Kontrol bagaimana sesi jarak jauh dibuat", - "connection_mode": "Modus Koneksi", - "mode_attended": "Dihadiri (membutuhkan persetujuan pengguna)", - "mode_unattended": "Tanpa pengawasan (selalu izinkan)", - "mode_ask": "Always Ask", - "max_session": "Durasi Sesi Maks (menit)", - "idle_lock": "Batas Waktu Penguncian Idle (menit)", - "wallpaper_policy": "Wallpaper Selama Sesi", - "wallpaper_show": "Show", - "wallpaper_hide_session": "Sembunyikan selama sesi", - "wallpaper_hide_always": "Always hide", - "features_title": "Kebijakan Fitur", - "features_desc": "Mengaktifkan atau menonaktifkan fitur tertentu untuk perangkat", - "allow_file_transfer": "Izinkan Transfer File", - "allow_clipboard": "Izinkan Sinkronisasi Papan Klip", - "allow_audio": "Izinkan Streaming Audio", - "allow_recording": "Izinkan Perekaman Sesi", - "security_title": "Kebijakan Keamanan", - "security_desc": "Menerapkan persyaratan keamanan untuk perangkat organisasi", - "require_2fa": "Memerlukan 2FA untuk Akses Tanpa Pengawasan", - "password_min_length": "Panjang Kata Sandi Minimum", - "password_require_special": "Membutuhkan Karakter Khusus", - "password_max_age": "Usia Maks Kata Sandi (hari, 0=tidak pernah)", - "allowed_operators": "Peran Operator yang Diizinkan (dipisahkan koma)", - "network_title": "Kebijakan Jaringan", - "network_desc": "Kontrol server relai dan koneksi langsung", - "block_direct_p2p": "Blokir P2P Langsung (relai gaya)", - "allowed_relays": "Server Relai yang Diizinkan (satu per baris)", - "ip_allowlist": "Daftar IP yang Diizinkan (CIDR, satu per baris)", - "update_title": "Perbarui Kebijakan", - "update_desc": "Kontrol pembaruan otomatis dan perbarui saluran", - "auto_update": "Aktifkan Pembaruan Otomatis", - "update_channel": "Perbarui Saluran", - "audit_title": "Perubahan Kebijakan", - "audit_desc": "Riwayat perubahan kebijakan terkini", - "no_audit": "Tidak ada perubahan kebijakan yang tercatat.", - "save_success": "Kebijakan berhasil disimpan", - "save_failed": "Gagal menyimpan kebijakan", - "load_failed": "Gagal memuat kebijakan", - "block_direct_p2p_hint": "Berlaku untuk perangkat di organisasi ini. Default global ada di Pengaturan → Strategi koneksi." - }, - "attestation": { - "title": "Pengesahan Perangkat", - "subtitle": "Pantau verifikasi identitas perangkat dan sidik jari perangkat keras", - "verified": "Verified", - "pending": "Pending", - "failed": "Gagal", - "device_list": "Catatan Pengesahan Perangkat", - "device_list_desc": "Sidik jari perangkat keras dan status verifikasi identitas", - "col_device": "ID Perangkat", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Tidak ada catatan pengesahan yang ditemukan.", - "verify_success": "Perangkat ditandai sebagai terverifikasi", - "verify_failed": "Gagal memverifikasi perangkat", - "revoke_success": "Pengesahan perangkat dicabut", - "revoke_failed": "Gagal mencabut pengesahan" - }, - "fleet": { - "title": "Manajemen Armada", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Pembuat Alur Kerja", - "tab_compliance": "Compliance", - "res_title": "Pemetaan Sumber Daya", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Penggerak Jaringan", - "res_type_dns": "Server DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Tambahkan Sumber Daya", - "res_name": "Nama Sumber Daya", - "res_type": "Type", - "res_address": "Alamat / Jalur", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organisasi", - "res_scope_group": "Kelompok", - "res_scope_device": "Perangkat", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Tidak ada sumber daya yang ditemukan. Klik 'Tambahkan Sumber Daya' untuk membuatnya.", - "res_confirm_delete": "Apakah Anda yakin ingin menghapus sumber daya ini?", - "task_title": "Penjadwal Tugas", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Gagal", - "task_search": "Search tasks…", - "task_create": "Buat Tugas", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Pembaruan", - "task_type_restart": "Mulai ulang", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "ID perangkat atau nama grup, dipisahkan koma", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Nilai Jadwal", - "task_script": "Naskah/Perintah", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Tidak ada tugas yang ditemukan. Klik 'Buat Tugas' untuk memulai.", - "task_confirm_delete": "Apakah Anda yakin ingin menghapus tugas ini?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Pembuat Alur Kerja Visual", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Simpan", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Pilih node untuk mengedit propertinya.", - "builder_node_trigger_manual": "Pemicu Manual", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Pemicu Peristiwa", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Mulai ulang Svc", - "builder_node_action_file_deploy": "Menyebarkan Berkas", - "builder_node_action_message": "Kirim Pesan", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Kirim Peringatan", - "builder_node_result_chain": "Alur Kerja Rantai", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Nama alur kerja:", - "comp_title": "Kepatuhan Perangkat Lunak", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Perangkat", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Jalankan remediasi otomatis di perangkat ini?", - "comp_no_data": "Tidak ada data kepatuhan yang tersedia. Jalankan pemindaian untuk memulai.", - "save": "Simpan", - "cancel": "Batalkan", - "close": "Tutup", - "edit": "Sunting", - "delete": "Hapus", - "actions": "Actions", - "all_orgs": "Semua Organisasi", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Penggerak Jaringan", - "type_dns": "Server DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Tambahkan Sumber Daya", - "edit_resource": "Sunting Sumber Daya", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Alamat / Jalur", - "scope_org": "Organisasi", - "scope_group": "Kelompok", - "scope_device": "Perangkat", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Apakah Anda yakin ingin menghapus item ini?", - "all_statuses": "Semua Status", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Gagal", - "search_tasks": "Search tasks�", - "create_task": "Buat Tugas", - "edit_task": "Sunting Tugas", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Penyebaran File", - "task_type_registry": "Registry", - "target_devices": "Perangkat Sasaran", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Naskah/Perintah", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Memuat", - "no_output": "Tidak ada keluaran yang tersedia", - "error_loading": "Terjadi kesalahan saat memuat data", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Pemicu Manual", - "node_schedule": "Schedule", - "node_event": "Pemicu Peristiwa", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Mulai ulang Svc", - "node_file_deploy": "Menyebarkan Berkas", - "node_send_message": "Kirim Pesan", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Kirim Peringatan", - "node_chain": "Alur Kerja Rantai", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Semua Organisasi", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Perangkat", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Jalankan remediasi otomatis di perangkat ini?" - }, - "scaling": { - "title": "Penskalaan & Manajemen Relai", - "tab_overview": "Ikhtisar", - "tab_relays": "Relay Nodes", - "tab_rules": "Aturan Penugasan", - "tab_capacity": "Perencanaan Kapasitas", - "arch_title": "Arsitektur Jaringan", - "arch_loading": "Memuat diagram arsitektur...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Jumlah Perangkat", - "stat_active_sessions": "Sesi Aktif", - "stat_bandwidth": "Jumlah Bandwidth", - "relay_health": "Kesehatan Relai", - "no_relays": "Tidak ada node relai yang dikonfigurasi. Tambahkan node relai pertama Anda untuk mendistribusikan beban.", - "relay_search": "Relai pencarian...", - "relay_add": "Tambahkan Node Relai", - "relay_edit": "Edit Node Relai", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Perangkat", - "col_sessions": "Sesi", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Relai Sasaran", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Diaktifkan", - "status_disabled": "Dengan disabilitas", - "confirm_delete_relay": "Apakah Anda yakin ingin menghapus simpul relai ini?", - "confirm_delete_rule": "Apakah Anda yakin ingin menghapus aturan penetapan ini?", - "rules_hint": "Aturan penugasan menentukan server relai mana yang menangani grup perangkat tertentu. Aturan dievaluasi berdasarkan prioritas (yang terendah terlebih dahulu).", - "rule_add": "Add Rule", - "rule_edit": "Sunting Aturan", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Grup Perangkat", - "match_tag": "Tag Perangkat", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Server Utama", - "fallback_nearest": "Relai terdekat", - "relay_max_sessions": "Sesi Maks", - "relay_max_bandwidth": "Bandwidth Maks (Mbps)", - "cap_tiers": "Tingkat Kapasitas", - "cap_loading": "Memuat data kapasitas...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Tidak ada rekomendasi yang tersedia.", - "cap_planning": "Perencanaan Infrastruktur", - "cap_config": "Konfigurasi", - "cap_max_devices": "Perangkat Maks", - "cap_max_sessions": "Sesi Maks", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Kapasitas Perangkat", - "cap_tier_sessions": "Kapasitas Sesi", - "cap_tier_bandwidth": "Kapasitas Bandwidth", - "cap_single_sqlite": "Server Tunggal (SQLite)", - "cap_single_pg": "Server Tunggal (PostgreSQL)", - "cap_master_3": "Master + 3 Relay", - "cap_master_10": "Master + 10 Relay", - "rec_no_relays": "Tidak ada node relai yang dikonfigurasi. Pertimbangkan untuk menambahkan node relai untuk kinerja dan redundansi yang lebih baik.", - "rec_devices_high": "Pemanfaatan perangkat tinggi. Pertimbangkan untuk menambahkan lebih banyak node relai untuk mendistribusikan beban.", - "rec_sessions_high": "Kapasitas sesi mendekati batasnya. Pertimbangkan untuk meningkatkan infrastruktur relai.", - "rec_cpu_high": "Beberapa node relai melaporkan penggunaan CPU yang tinggi. Pertimbangkan penyeimbangan beban atau peningkatan kapasitas.", - "rec_all_good": "Semua sistem beroperasi dalam parameter normal. Tidak diperlukan tindakan.", - "save": "Simpan", - "cancel": "Batalkan", - "edit": "Sunting", - "delete": "Hapus", - "close": "Tutup", - "no_rules": "Tidak ada aturan penugasan.", - "relays_info_banner": "Daftar ini bersifat informatif. Server relai yang sebenarnya digunakan oleh klien dikonfigurasi melalui variabel lingkungan RELAY_SERVERS di server BetterDesk.", - "relay_name_address_required": "Nama dan alamat diperlukan.", - "relay_save_failed": "Gagal menyimpan simpul relai.", - "relay_delete_failed": "Gagal menghapus simpul relai.", - "relay_saved": "Node relai disimpan.", - "relay_deleted": "Node relai dihapus.", - "rule_name_value_required": "Nama aturan dan nilai kecocokan wajib diisi.", - "rule_save_failed": "Gagal menyimpan aturan.", - "rule_delete_failed": "Gagal menghapus aturan.", - "rule_saved": "Aturan disimpan.", - "rule_deleted": "Aturan dihapus." - }, - "cross_platform": { - "title": "Kompatibilitas Lintas Platform", - "tab_matrix": "Matriks Kompatibilitas", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "Matriks dukungan fitur di semua platform yang didukung. Hijau = dukungan penuh, kuning = sebagian, abu-abu = tidak tersedia, biru = direncanakan.", - "col_feature": "Feature", - "legend_full": "Dukungan penuh", - "legend_partial": "Dukungan parsial", - "legend_none": "Tidak tersedia", - "legend_planned": "Planned", - "platform_breakdown": "Kerusakan Platform", - "arch_breakdown": "Kerusakan Arsitektur", - "version_breakdown": "Perincian Versi", - "summary": "Summary", - "total_devices": "Jumlah Perangkat", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "Versi Klien", - "no_devices": "Belum ada perangkat yang terdaftar.", - "protocols_hint": "Negosiasi kemampuan protokol memastikan setiap klien hanya menerima fitur yang didukungnya. Server mengadaptasi perilaku berdasarkan kemampuan yang dilaporkan.", - "capability_negotiation": "Negosiasi Kemampuan", - "codec_support": "Dukungan Codec (Perangkat Online)", - "feature_support": "Dukungan Fitur (Perangkat Online)", - "no_codec_data": "Tidak ada data codec yang tersedia dari perangkat online.", - "no_feature_data": "Tidak ada data fitur yang tersedia dari perangkat online.", - "protobuf_schema": "Skema Protobuf Kemampuan Klien", - "diagram_client": "Client", - "diagram_server": "Server BetterDesk", - "diagram_peer": "Rekan Jarak Jauh", - "limitations_hint": "Setiap platform memiliki batasan spesifik yang memengaruhi fitur yang tersedia. Tinjau kendala ini saat merencanakan penerapan.", - "feat_desktop_client": "Klien Desktop", - "feat_background_agent": "Agen Latar Belakang", - "feat_remote_target": "Sasaran Jarak Jauh", - "feat_screen_capture": "Tangkapan Layar", - "feat_input_injection": "Injeksi Masukan", - "feat_file_transfer": "Pemindahan Berkas", - "feat_clipboard_sync": "Sinkronisasi Papan Klip", - "feat_audio_streaming": "Streaming Audio", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "Ketinggian UAC diperlukan untuk instalasi layanan dan injeksi input pada desktop yang aman.", - "limit_win_service": "Berjalan sebagai layanan NSSM; memerlukan hak istimewa Administrator untuk instalasi.", - "limit_win_firewall": "Aturan Firewall Windows harus mengizinkan port 21115-21119 untuk koneksi relai.", - "limit_linux_wayland": "Kompositor Wayland membatasi tangkapan layar terprogram; Portal PipeWire API diperlukan.", - "limit_linux_pipewire": "Pengambilan audio memerlukan PipeWire; Penggantian PulseAudio tersedia tetapi terbatas.", - "limit_linux_arm": "Tersedia versi ARM64; beberapa codec mungkin menggunakan decoding perangkat lunak (lebih lambat).", - "limit_mac_screen": "Izin Perekaman Layar diperlukan di System Preferences > Privasi & Keamanan.", - "limit_mac_signing": "Agen harus ditandatangani dengan ID Pengembang Apple untuk distribusi.", - "limit_mac_notarize": "Notaris diperlukan untuk macOS Gatekeeper (distribusi non-App Store).", - "limit_android_projection": "MediaProjection API memerlukan persetujuan pengguna untuk setiap sesi tangkapan layar.", - "limit_android_accessibility": "Injeksi masukan memerlukan AccessibilityService; dibatasi di Android 14+.", - "limit_android_battery": "Layanan latar belakang dibatasi oleh mode Istirahatkan; mungkin memerlukan pengecualian pengoptimalan baterai.", - "limit_ios_capture": "Apple melarang pengambilan layar di latar belakang; mode hanya pemirsa didukung.", - "limit_ios_input": "Tidak ada injeksi masukan yang diizinkan; melihat jarak jauh dan hanya mengobrol.", - "limit_ios_appstore": "Distribusi hanya melalui App Store; TestFlight untuk pengujian beta.", - "limit_web_https": "WebCodecs API dan WebRTC memerlukan HTTPS; HTTP kembali ke JMuxer (codec terbatas).", - "limit_web_codec": "Dukungan codec bergantung pada browser; H.264 didukung secara luas, VP9/AV1 bervariasi.", - "limit_web_performance": "Kinerja dibatasi oleh kotak pasir browser; tidak ada akselerasi perangkat keras langsung.", - "limit_chrome_crostini": "Dukungan agen penuh hanya di dalam wadah Crostini Linux.", - "limit_chrome_pwa": "Mode PWA menyediakan fitur khusus web; tidak ada kemampuan agen asli.", - "limit_chrome_input": "Injeksi masukan tidak didukung di luar wadah Crostini.", - "feat_session_recording": "Perekaman Sesi", - "feat_multi_monitor": "Multi-Monitor", - "feat_unattended_access": "Akses Tanpa Pengawasan", - "limit_win_virtual_account": "Layanan berjalan di bawah akun virtual terisolasi alih-alih LocalSystem; jalur log kustom mungkin memerlukan penyesuaian ACL.", - "limit_linux_unprivileged": "Layanan berjalan sebagai akun 'betterdesk' tanpa hak istimewa khusus dengan penguatan systemd (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Audit Keamanan", - "tab_overview": "Ikhtisar", - "tab_events": "Acara Audit", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Skor Keamanan", - "failed_logins": "Login Gagal (24 jam)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Kunci Lama (>90d)", - "security_checks": "Pemeriksaan Keamanan", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Aman", - "enabled": "Diaktifkan", - "disabled": "Dengan disabilitas", - "all_events": "All Events", - "event_login_failed": "Gagal Masuk", - "event_login_success": "Masuk Berhasil", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfigurasi Berubah", - "event_key_created": "Kunci Dibuat", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Tidak ada peristiwa audit yang ditemukan.", - "hardening_hint": "Prioritas penguatan keamanan untuk penerapan BetterDesk Anda. Barang diurutkan berdasarkan tingkat keparahannya.", - "no_hardening": "Tidak ada item pengerasan yang tersedia.", - "vuln_hint": "Hasil pemindaian kerentanan ketergantungan. Jalankan npm audit secara teratur untuk menjaga keamanan dependensi.", - "no_vulns": "Tidak ada kerentanan yang ditemukan. Dependensi Anda aman." - }, - "languages": { - "title": "Manajemen Bahasa", - "total_languages": "Jumlah Bahasa", - "fully_translated": "Diterjemahkan Sepenuhnya", - "needs_review": "Perlu Peninjauan", - "reference_keys": "Kunci Referensi", - "no_languages": "Tidak ada file bahasa yang ditemukan.", - "badge_reference": "Reference", - "badge_review": "Perlu Peninjauan", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Lihat Hilang", - "fix_missing": "Fix Missing", - "missing_keys_for": "Kunci untuk", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "dan {n} lainnya...", - "all_keys_present": "Semua kunci ada!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Kunci yang hilang di {code} harus diterjemahkan secara manual.", - "no_fix_needed": "Tidak ada kunci yang hilang untuk diperbaiki." - }, - "resource_control": { - "title": "Kontrol Sumber Daya", - "tab_overview": "Ikhtisar", - "tab_usb": "USB Control", - "tab_optical": "Drive Optik", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Kuota Sumber Daya", - "compliance_by_category": "Kepatuhan berdasarkan Kategori", - "device_compliance": "Kepatuhan Perangkat", - "search_devices": "Telusuri perangkat...", - "col_device": "Perangkat", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Jumlah Perangkat", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Tingkat Kepatuhan", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurasikan", - "no_devices": "Tidak ada perangkat yang ditemukan", - "usb_title": "Kontrol Pelabuhan USB", - "usb_hint": "Kontrol akses perangkat penyimpanan USB untuk perangkat yang dipilih atau kebijakan default seluruh organisasi.", - "usb_storage_policy": "Kebijakan Penyimpanan USB", - "usb_whitelist": "Perangkat yang Masuk Daftar Putih (satu per baris)", - "usb_whitelist_hint": "VID:PID (misalnya 0781:5583)", - "usb_audit_log": "Catat koneksi perangkat USB", - "optical_title": "Kontrol Drive Optik", - "optical_hint": "Kontrol akses drive CD/DVD/Blu-ray untuk perangkat yang dipilih.", - "optical_policy": "Kebijakan Drive Optik", - "optical_audit_log": "Catat akses drive optik", - "monitors_title": "Pantau Manajemen", - "monitors_hint": "Konfigurasikan pengaturan monitor termasuk jumlah maksimum, penerapan resolusi, kecerahan, dan jadwal daya.", - "monitors_max_count": "Monitor Maksimum (0 = tidak terbatas)", - "monitors_max_hint": "0 berarti tidak ada batasan", - "monitors_resolution": "Resolusi Maks", - "monitors_brightness": "Batas Kecerahan", - "monitors_power_schedule": "Jadwal Daya", - "monitors_power_hint": "misalnya libur:22:00-06:00", - "disks_title": "Kontrol Akses Disk", - "disks_hint": "Konfigurasikan kebijakan akses disk termasuk mode hanya baca, penerapan enkripsi, dan visibilitas partisi.", - "disks_readonly": "Paksa mode baca-saja", - "disks_encryption": "Memerlukan enkripsi (BitLocker/LUKS)", - "disks_smart": "Aktifkan S.M.A.R.T. pemantauan", - "disks_hidden": "Partisi Tersembunyi", - "disks_hidden_hint": "Huruf drive atau titik pemasangan yang dipisahkan koma", - "quotas_title": "Kuota Sumber Daya", - "quotas_hint": "Tetapkan CPU, RAM, bandwidth, dan kuota disk per pengguna untuk perangkat yang dipilih.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Batas Bandwidth (Mbps)", - "quotas_bandwidth_hint": "0 = tidak terbatas", - "quotas_disk_quota": "Kuota Disk (GB)", - "quotas_disk_hint": "0 = tidak terbatas", - "quotas_process_whitelist": "Proses Daftar Putih (satu per baris)", - "quotas_process_hint": "misalnya chrome.exe, kode.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Hanya Daftar Putih", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Pembaruan Perangkat Lunak", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Versi terinstal", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Periksa pembaruan", - "checking": "Checking…", - "up_to_date": "Terkini", - "update_available": "Pembaruan tersedia", - "changelog": "Release Notes", - "no_changelog": "Tidak ada catatan rilis yang tersedia", - "files_changed": "File diubah", - "files": "file", - "changes_unavailable": "Tidak dapat memuat daftar perubahan file. Anda masih dapat menginstal pembaruan.", - "create_backup": "Buat cadangan sebelum memperbarui", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Menginstal pembaruan…", - "creating_backup": "Membuat cadangan…", - "downloading": "Mengunduh file…", - "install_success": "Pembaruan berhasil diinstal. Konsol dimulai ulang…", - "install_failed": "Penginstalan pembaruan gagal", - "restarting": "Menunggu konsol dimulai ulang…", - "restart_complete": "Konsol berhasil dimulai ulang", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Tidak ada versi pembaruan yang dipilih. Periksa pembaruan terlebih dahulu.", - "backups_title": "Perbarui Cadangan", - "backups_desc": "Cadangan pra-pembaruan dibuat secara otomatis sebelum setiap pembaruan", - "no_backups": "Tidak ada cadangan pembaruan yang ditemukan", - "restore": "Restore", - "restore_confirm": "Apakah Anda yakin ingin memulihkan dari cadangan ini? File yang diubah akan ditimpa.", - "restore_success": "Cadangan berhasil dipulihkan. Konsol dimulai ulang…", - "baseline_set": "Kumpulan dasar", - "commits_behind": "berkomitmen di belakang", - "total_files": "Jumlah file", - "applied": "Applied", - "failed": "Gagal", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Buka Server", - "component_agent": "Agent", - "component_scripts": "Skrip & Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Memeriksa Pergi…", - "go_not_found": "Pergi tidak diinstal", - "go_check_failed": "Tidak dapat memeriksa ketersediaan Go", - "server_building": "Mengkompilasi Go server… Ini mungkin memerlukan waktu beberapa menit.", - "server_built": "Biner server dikompilasi", - "server_build_failed": "Kompilasi server gagal", - "server_stale_title": "Biner server kedaluwarsa", - "server_stale_desc": "Sumber Go server telah diperbarui tetapi biner yang berjalan tidak dibuat ulang. Bangun kembali sekarang untuk menerapkan pembaruan keamanan dan perpustakaan.", - "rebuild_server": "Membangun kembali biner server", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Biner server dibangun kembali dan dimulai ulang", - "rebuild_server_failed": "Pembangunan kembali biner server gagal", - "server_deployed": "Biner server dikerahkan", - "server_deploy_failed": "Penyebaran server gagal", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Mengunduh sumber server…", - "delete": "Hapus", - "delete_confirm": "Hapus cadangan {name} secara permanen? Hal ini tidak dapat dibatalkan.", - "delete_success": "Cadangan dihapus", - "delete_failed": "Gagal menghapus cadangan", - "retention_label": "Simpan N cadangan terbaru", - "retention_hint": "Cadangan lama dihapus secara otomatis setelah setiap pembaruan. Gunakan 0 untuk menyimpan semua cadangan.", - "retention_saved": "Setelan retensi disimpan", - "retention_invalid": "Retensi harus berupa bilangan bulat antara 0 dan 1000", - "retention_required_for_prune": "Tetapkan nilai retensi lebih besar dari 0 terlebih dahulu", - "prune_now": "Apply now", - "prune_confirm": "Simpan hanya cadangan terbaru {n} dan hapus sisanya?", - "prune_done": "Cadangan {n} yang dipangkas", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Metode pembaruan", - "strategy_download": "Unduh biner yang sudah dibuat sebelumnya", - "strategy_compile": "Kompilasi dari sumber", - "both_available": "Unduh & Kompilasi", - "download_available": "Unduhan tersedia", - "no_method": "Tidak ada metode pembaruan", - "no_release": "No release", - "available": "Tersedia", - "server_downloading": "Mengunduh biner server…", - "server_downloaded": "Biner server diunduh", - "server_download_failed": "Pengunduhan biner server gagal", - "server_download_note": "Biner yang sudah dibuat sebelumnya akan diunduh dari GitHub Releases. Ini biasanya memakan waktu kurang dari satu menit.", - "install_go_hint": "Instal Go dari https://go.dev/dl/ untuk mengaktifkan kompilasi, atau publikasikan rilis dengan binari yang telah dibuat sebelumnya", - "strategy_install_go": "Instal otomatis Go dan kompilasi", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Siap dibangun kembali secara otomatis", - "toolchain_ready": "Rantai alat terpasang", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Mengunduh rantai alat Go…", - "toolchain_failed": "Pemasangan toolchain gagal", - "modal_title": "Menginstal pembaruan", - "modal_done_title": "Pembaruan selesai", - "modal_close": "Tutup", - "modal_reload_now": "Muat ulang konsol", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "File konsol", - "phase_server": "Tahap peladen", - "phase_restart": "Mulai ulang", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Pencadangan dilewati (sesuai pilihan pengguna)", - "server_skipped": "Go server dilewati", - "server_not_selected": "Go server not selected", - "server_processing": "Memproses pembaruan Go server…", - "no_restart_needed": "Tidak perlu memulai ulang", - "complete": "Pembaruan diterapkan", - "complete_summary": "Pembaruan telah berhasil diterapkan.", - "complete_with_errors": "Pembaruan selesai, tetapi beberapa langkah gagal. Lihat detailnya di bawah.", - "modal_done_with_errors_title": "Pembaruan selesai dengan kesalahan", - "console_will_restart": "Proses konsol akan dimulai ulang sekarang…", - "restart_complete_msg": "Konsol selesai dimulai ulang. Klik muat ulang untuk memuat versi baru. Halaman akan dimuat ulang secara otomatis dalam 8 detik.", - "refresh_recommended": "Aset statis berubah — muat ulang halaman untuk melihat UI baru.", - "confirm_title": "Terapkan pembaruan", - "confirm_with_backup": "Cadangan pra-pembaruan akan dibuat secara otomatis.", - "confirm_no_backup": "Tidak ada cadangan yang akan dibuat (risiko Anda tanggung sendiri)." - }, - "permissions": { - "title": "Izin", - "subtitle": "Kelola izin berbasis peran dan penggantian khusus", - "info_title": "Cara kerja izin", - "info_desc": "Setiap peran memiliki izin default. Anda dapat menambah atau menghapus izin individual per peran dengan mengalihkannya di bawah. Penggantian khusus disorot dan dapat dikembalikan ke default kapan saja.", - "select_role": "Pilih peran", - "select_role_placeholder": "Pilih peran...", - "reset_overrides": "Setel ulang semua penggantian", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Tingkat server", - "custom": "Custom", - "default": "Default", - "revert": "Kembalikan ke default", - "saved": "Izin diperbarui", - "reverted": "Dikembalikan ke default", - "all_reverted": "Semua penggantian dikembalikan", - "confirm_reset": "Setel ulang semua penggantian khusus untuk peran ini ke default?", - "empty_title": "Pilih peran", - "empty_desc": "Pilih peran dari dropdown di atas untuk melihat dan mengelola izinnya.", - "locked_title": "Super Admin", - "locked_desc": "Admin Super memiliki semua izin secara default dan tidak dapat dikustomisasi.", - "cat_device": "Perangkat", - "cat_user": "Users", - "cat_server": "pelayan", - "cat_org": "Organisasi", - "cat_audit": "Audit & Pemantauan", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Lihat perangkat", - "perm_device_connect": "Hubungkan ke perangkat", - "perm_device_edit": "Sunting perangkat", - "perm_device_delete": "Hapus perangkat", - "perm_device_ban": "Melarang/membatalkan pelarangan perangkat", - "perm_device_change_id": "Ubah ID perangkat", - "perm_user_view": "Lihat pengguna", - "perm_user_create": "Buat pengguna", - "perm_user_edit": "Sunting pengguna", - "perm_user_delete": "Hapus pengguna", - "perm_server_config": "Konfigurasi server", - "perm_server_keys": "Kelola kunci API", - "perm_org_create": "Buat organisasi", - "perm_org_edit": "Sunting organisasi", - "perm_org_delete": "Hapus organisasi", - "perm_org_manage_users": "Kelola pengguna organisasi", - "perm_org_manage_devices": "Kelola perangkat organisasi", - "perm_audit_view": "Lihat log audit", - "perm_metrics_view": "Lihat metrik", - "perm_blocklist_edit": "Edit daftar blokir", - "perm_cdap_view": "Lihat perangkat CDAP", - "perm_cdap_command": "Kirim perintah CDAP", - "perm_cdap_terminal": "Akses terminal CDAP", - "perm_cdap_files": "Akses file CDAP", - "perm_enrollment_manage": "Kelola pendaftaran", - "perm_enrollment_approve": "Menyetujui pendaftaran", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Sunting merek", - "perm_server_attestation": "Sertifikasi kinerja server" - }, - "notifications": { - "title": "Pemberitahuan", - "empty": "Tidak ada notifikasi baru", - "mark_all_read": "Tandai semua telah dibaca", - "see_all": "Lihat semua permintaan bantuan", - "help_request": "Permintaan bantuan", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Sesuaikan konsol dengan kebutuhan penglihatan, gerak, dan membaca Anda.", - "close": "Tutup menu aksesibilitas", - "profiles": "Profil cepat", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Teks lebih besar, kontras dan fokus kuat.", - "profile_dyslexia": "Kenyamanan membaca", - "profile_dyslexia_hint": "Font yang mudah dibaca dan spasi lebih lebar.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Mengurangi transisi dan menjeda animasi.", - "profile_color_assist": "Dukungan warna", - "profile_color_assist_hint": "Filter warna, label, dan tautan yang disorot.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Spasi huruf", - "word_spacing": "Spasi kata", - "readable_font": "Font yang dapat dibaca", - "readable_font_hint": "Menggunakan bentuk huruf yang luas dan familier.", - "dyslexia_spacing": "Jarak disleksia", - "dyslexia_spacing_hint": "Menambahkan spasi ekstra untuk teks panjang.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Gelap kontras tinggi", - "contrast_high_light": "Cahaya kontras tinggi", - "contrast_yellow_black": "Kuning di atas hitam", - "color_filter": "Filter penglihatan warna", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturasi warna", - "underline_links": "Garis bawahi tautan", - "underline_links_hint": "Membuat tautan terlihat tanpa bergantung pada warna.", - "highlight_links": "Sorot tindakan", - "highlight_links_hint": "Menguraikan tautan dan tombol.", - "highlight_headings": "Sorot judul", - "highlight_headings_hint": "Menandai judul bagian dengan bilah warna.", - "hide_media": "Dim media", - "hide_media_hint": "Meredupkan gambar, video, dan kanvas.", - "interaction": "Interaction", - "strong_focus": "Fokus yang kuat", - "strong_focus_hint": "Menampilkan cincin fokus keyboard yang besar.", - "large_cursor": "Kursor besar", - "large_cursor_hint": "Menggunakan penunjuk kontras tinggi yang lebih besar.", - "reduce_motion": "Kurangi gerakan", - "reduce_motion_hint": "Mempersingkat transisi dan pengguliran halus.", - "pause_animations": "Jeda animasi", - "pause_animations_hint": "Menghentikan perulangan gerakan visual.", - "reading_guide": "Panduan membaca", - "reading_guide_hint": "Ikuti penunjuk dengan garis terang.", - "reading_mask": "Masker membaca", - "reading_mask_hint": "Meredupkan konten di atas dan di bawah penunjuk.", - "preview": "Preview", - "preview_title": "Pratinjau ruang kerja operator", - "preview_text": "Periksa apakah teks, tautan, kontrol, dan label status nyaman dibaca sebelum menutup menu ini.", - "preview_link": "Tautan detail perangkat", - "preview_status": "Online", - "preview_button": "Tindakan utama", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Manajemen Server", - "subtitle": "Bidang kendali seperti kokpit untuk host konsol BetterDesk (BETA).", - "beta_tooltip": "Fitur beta — sedang dalam pengembangan aktif.", - "notice_title": "Fitur beta", - "notice_body": "Alat-alat ini berjalan di host tempat proses konsol BetterDesk berada. Semua operasi diaudit. Cakupan fitur akan diperluas pada rilis mendatang.", - "tab_overview": "Ikhtisar", - "tab_terminal": "Terminal", - "tab_files": "Berkas", - "tab_services": "Layanan", - "cpu": "CPU", - "memory": "Memori", - "load": "Rata-rata beban", - "disks": "Disk", - "history": "Sejarah (60 sampel terakhir)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Waktu aktif", - "no_disks": "Tidak ada data disk yang tersedia", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY tersedia", - "term_connect": "Hubungkan", - "term_disconnect": "Putuskan", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Kesalahan koneksi", - "term_warning": "Perintah dijalankan sebagai pengguna yang memiliki proses konsol. Tambahkan aturan sudoers untuk mengaktifkan elevasi.", - "term_hint": "Tip: ketik `sudo -i` untuk melakukan eskalasi (memerlukan konfigurasi sudoers).", - "term_lib_failed": "Gagal memuat perpustakaan terminal", - "files_up": "Naik satu tingkat", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Direktori kosong", - "files_error": "Gagal mencantumkan direktori", - "read_failed": "Gagal membaca file", - "save_failed": "Gagal menyimpan file", - "rename_failed": "Gagal mengganti nama", - "delete_failed": "Penghapusan gagal", - "delete_confirm": "Hapus entri ini?", - "mkdir_prompt": "Nama folder baru:", - "mkdir_failed": "Gagal membuat folder", - "file_saved": "Berkas disimpan", - "binary_warn": "File biner — hanya pratinjau", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Layanan pencarian…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Tidak ada layanan yang ditemukan", - "svc_load_failed": "Gagal memuat layanan", - "svc_action_failed": "Tindakan gagal", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Mulai ulang", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Unduh Agen BetterDesk", - "choose_platform": "Pilih platform Anda", - "choose_platform_hint": "Pilih penginstal yang cocok dengan sistem operasi Anda.", - "download": "Unduh", - "building": "Membangun…", - "failed": "Pembuatan gagal", - "need_help": "Butuh bantuan?", - "powered_by": "Didukung oleh" - }, - "server_attestation": { - "title": "Sertifikasi Kinerja Server", - "subtitle": "Benchmark kinerja yang menentukan kapasitas koneksi jarak jauh bersamaan pada ambang CPU, RAM, dan disk 80%.", - "warning_title": "Uji beban", - "warning_body": "Benchmark mensimulasikan koneksi WebSocket paralel ke server signal dan relay. Jalankan di luar jam sibuk — pengujian ini membebani produksi.", - "run_benchmark": "Jalankan Benchmark", - "abort": "Batalkan", - "download_report": "Unduh laporan JSON", - "last_test": "Pengujian terakhir", - "no_test_yet": "Belum ada benchmark yang dijalankan", - "max_connections": "Koneksi maksimum", - "threshold_80": "Ambang 80% — metrik akhir", - "disk": "Disk", - "ramp_chart": "Grafik ramp beban", - "connections": "Koneksi", - "connections_short": "koneksi", - "tier_guide_title": "Apa arti setiap tingkatan?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 koneksi bersamaan — VPS kecil (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 koneksi — server kelas menengah (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 koneksi — server berperforma tinggi (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 koneksi — infrastruktur enterprise (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ koneksi — kelas turbo: hardware khusus, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Catatan: di Docker, metrik CPU/RAM dapat mencerminkan batas container daripada host fisik.", - "badge_tooltip": "BetterDesk Server Attestation — sertifikasi kinerja server", - "confirm_run": "Benchmark ini akan menguji beban server dengan koneksi simulasi. Lanjutkan?", - "starting": "Memulai…", - "complete": "Benchmark selesai", - "signal_peers": "Peer sinyal", - "relay_sessions": "Sesi relay", - "page_error": "Gagal memuat halaman Server Attestation", - "mode_estimated": "Estimasi (WebSocket tidak dapat dijangkau)", - "incomplete": "Benchmark selesai tanpa tingkatan yang valid" + "form": { + "cancel": "Batal" } + } } diff --git a/web-nodejs/lang/it.json b/web-nodejs/lang/it.json index 9b97d7bd..bb634643 100644 --- a/web-nodejs/lang/it.json +++ b/web-nodejs/lang/it.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "it", - "name": "Italian", - "native_name": "Italiano", - "direction": "ltr" + "meta": { + "lang": "it", + "name": "Italian", + "native_name": "Italiano", + "direction": "ltr" + }, + "common": { + "loading": "Caricamento...", + "confirm": "Conferma", + "alert": "Avviso", + "prompt": "Inserisci valore", + "copied": "Copiato negli appunti", + "save": "Salva", + "saved": "Salvato", + "error": "Errore", + "success": "Successo", + "warning": "Attenzione", + "info": "Informazione", + "all": "Tutti", + "cancel": "Annulla", + "delete": "Elimina", + "actions": "Azioni", + "close": "Chiudi", + "required": "Obbligatorio", + "name_required": "Il nome è obbligatorio", + "active": "Attivo", + "inactive": "Inattivo", + "invalid_json": "Formato JSON non valido", + "field_required": "Il campo {field} è obbligatorio", + "back": "Indietro", + "edit": "Modifica", + "yes": "Sì", + "no": "No" + }, + "nav": { + "main": "Principale", + "tools": "Strumenti", + "system": "Sistema", + "dashboard": "Panoramica", + "devices": "Dispositivi", + "keys": "Chiavi", + "generator": "Generatore", + "settings": "Impostazioni", + "users": "Utenti", + "inventory": "Inventario", + "tickets": "Ticket", + "help_requests": "Richieste di aiuto", + "activity": "Attività", + "automation": "Automazione", + "file_transfer": "Trasferimento file", + "network": "Rete", + "dataguard": "DataGuard", + "reports": "Report", + "tenants": "Tenant", + "registrations": "Registrazioni", + "management": "Gestione", + "toggle_sidebar": "Attiva/disattiva barra laterale", + "cdap": "CDAP", + "fleet": "Flotta", + "scaling": "Scalabilità", + "cross_platform": "Multipiattaforma", + "tokens": "Token di accesso", + "organizations": "Organizzazioni", + "policies": "Criteri", + "attestation": "Attestazione", + "remote": "Accesso remoto", + "toolkit": "Toolkit", + "security_audit": "Audit di Sicurezza", + "languages": "Lingue", + "resource_control": "Controllo risorse", + "chat": "Chat", + "help": "Aiuto", + "expand_sidebar": "Espandi barra laterale", + "toggle_theme": "Cambia tema", + "sdk_studio": "SDK Studio", + "login": "Accedi", + "permissions": "Permessi", + "server_management": "Gestione server", + "server_attestation": "Attestazione server", + "commercialization": "Commercializzazione" + }, + "auth": { + "login": "Accedi", + "logout": "Esci", + "login_title": "Accedi", + "login_subtitle": "Accedi alla console BetterDesk", + "username": "Nome utente", + "username_placeholder": "Inserisci il nome utente", + "password": "Parola d’accesso", + "password_placeholder": "Inserisci la password", + "remember_me": "Ricordami", + "login_failed": "Accesso fallito. Verifica le tue credenziali.", + "invalid_credentials": "Nome utente o password non validi.", + "username_collision": "Esiste già un account locale con questo nome utente. Accedi con la password locale oppure chiedi a un amministratore di rinominare o rimuovere l'account in conflitto.", + "fill_all_fields": "Compila tutti i campi", + "logout_confirm": "Sei sicuro di voler uscire?", + "change_password": "Cambia password", + "password_required": "La password è obbligatoria", + "totp_title": "Autenticazione a due fattori", + "totp_subtitle": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", + "totp_code": "Codice di verifica", + "totp_verify": "Verifica", + "totp_use_recovery": "Usa un codice di recupero", + "totp_use_code": "Usa il codice dell'autenticatore", + "totp_recovery_code": "Codice di recupero", + "totp_back_to_login": "Torna all'accesso", + "totp_invalid_code": "Codice di verifica non valido. Riprova.", + "totp_enter_code": "Inserisci un codice a 6 cifre", + "totp_enter_recovery": "Inserisci un codice di recupero", + "totp_session_expired": "Sessione scaduta. Accedi di nuovo.", + "totp_already_enabled": "L'autenticazione a due fattori è già attiva", + "pro_only_account": "Questo account e riservato solo al client desktop RustDesk. Usa l'app RustDesk per accedere.", + "passwords_mismatch": "Le password non coincidono", + "or": "oppure", + "login_sso": "Accedi con SSO", + "login_sso_with": "Accedi con {{provider}}", + "oidc_denied": "Accesso negato dal provider di identità.", + "oidc_invalid": "Callback OIDC non valida. Riprova.", + "oidc_failed": "Autenticazione OIDC non riuscita. Riprova.", + "oidc_error": "Si è verificato un errore durante l’accesso SSO.", + "oidc_no_account": "Account non trovato e registrazione automatica disabilitata.", + "totp_rate_limited": "Troppi tentativi. Riprova più tardi.", + "emergency_mode_banner": "Server Go non raggiungibile — modalità di emergenza attiva (solo amministratore, funzionalità limitate)" + }, + "dashboard": { + "title": "Panoramica", + "subtitle": "Panoramica del tuo server RustDesk", + "total_devices": "Dispositivi totali", + "online_now": "Online ora", + "banned": "Bannati", + "active_connections": "Connessioni attive", + "offline_devices": "Offline", + "server_status": "Stato del server", + "quick_actions": "Azioni rapide", + "manage_devices": "Gestisci dispositivi connessi", + "view_keys": "Visualizza chiavi del server", + "generate_config": "Genera configurazione client", + "server_settings": "Configura impostazioni", + "greeting_morning": "Buongiorno, {name}", + "greeting_afternoon": "Buon pomeriggio, {name}", + "greeting_evening": "Buonasera, {name}", + "greeting_night": "Buonanotte, {name}", + "health_overview": "Panoramica stato", + "devices_online": "Dispositivi online", + "active_alerts": "Avvisi attivi", + "recent_connections": "Dispositivi totali", + "server_uptime": "Uptime del server", + "activity_feed": "Attivita recenti", + "no_recent_activity": "Nessuna attivita recente", + "just_now": "proprio ora", + "ago": "fa", + "tip_desktop_mode": "Prova la Modalita Desktop per uno spazio di lavoro multi-finestra con widget di monitoraggio.", + "tip_keyboard_shortcuts": "Premi Ctrl+K ovunque per aprire la tavolozza dei comandi di ricerca rapida.", + "tip_address_book": "Sincronizza la rubrica tra i dispositivi effettuando l'accesso dal client RustDesk.", + "tip_2fa": "Abilita l'autenticazione a due fattori nelle Impostazioni per una maggiore sicurezza dell'account.", + "tip_bulk_actions": "Seleziona piu dispositivi e usa le azioni di massa per gestirli contemporaneamente.", + "tip_theme": "Passa tra tema chiaro e scuro nelle impostazioni della barra laterale.", + "tip_cdap": "Collega dispositivi IoT e sensori industriali tramite il gateway CDAP.", + "tip_tutorials": "Fai clic sul pulsante di aiuto in basso a destra per i tutorial interattivi." + }, + "devices": { + "title": "Dispositivi", + "id": "ID", + "hostname": "Nome host", + "username": "Nome utente", + "platform": "Piattaforma", + "version": "Versione", + "ip_address": "Indirizzo IP", + "note": "Nota", + "last_seen": "Ultimo avvistamento", + "last_online": "Ultima connessione", + "first_seen": "Prima apparizione", + "created": "Creato", + "status": "Stato", + "ban_reason": "Motivo del ban", + "actions": "Azioni", + "search_placeholder": "Cerca dispositivi...", + "filter_all": "Tutti", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Bannati", + "selected": "selezionato/i", + "showing": "Visualizzazione", + "of": "di", + "sync_status": "Stato sincronizzazione", + "sync_success": "Stato sincronizzato con successo", + "empty_title": "Nessun dispositivo trovato", + "empty_text": "Nessun dispositivo corrisponde ai filtri attuali", + "edit_title": "Dettagli dispositivo", + "delete_title": "Elimina dispositivo", + "delete_confirm": "Sei sicuro di voler eliminare il dispositivo {id}?", + "delete_warning": "Stai per eliminare permanentemente questo dispositivo:", + "delete_permanent": "Questa azione non può essere annullata. Tutti i dati associati a questo dispositivo verranno rimossi permanentemente dal database.", + "delete_success": "Dispositivo eliminato con successo", + "revoke_option": "Revoca dispositivo", + "revoke_hint": "Blocca dispositivo e disconnetti connessioni attive", + "revoke_success": "Dispositivo revocato con successo", + "details": "Dettagli dispositivo", + "ban_title": "Banna dispositivo", + "ban_confirm": "Sei sicuro di voler bannare il dispositivo {id}?", + "ban_success": "Dispositivo bannato con successo", + "unban_title": "Sbanna dispositivo", + "unban_confirm": "Sei sicuro di voler sbannare il dispositivo {id}?", + "unban_success": "Dispositivo sbannato con successo", + "change_id": "Cambia ID", + "change_id_title": "Cambia ID dispositivo", + "new_id": "Nuovo ID", + "change_id_hint": "6-16 caratteri, solo lettere, numeri, trattini e underscore", + "change_id_success": "ID dispositivo cambiato con successo", + "id_length_error": "L'ID deve essere lungo 6-16 caratteri", + "id_format_error": "L'ID può contenere solo lettere, numeri, trattini e underscore", + "bulk_delete_title": "Elimina più dispositivi", + "bulk_delete_confirm": "Sei sicuro di voler eliminare {count} dispositivi?", + "bulk_delete_success": "{count} dispositivi eliminati con successo", + "columns": "Colonne", + "toggle_columns": "Attiva/disattiva colonne visibili", + "not_found": "Dispositivo non trovato", + "delete_failed": "Impossibile eliminare il dispositivo", + "change_id_failed": "Impossibile cambiare l’ID dispositivo", + "invalid_id": "ID dispositivo non valido", + "invalid_id_format": "Formato ID non valido", + "id_exists": "Questo ID dispositivo esiste già", + "no_selection": "Nessun dispositivo selezionato", + "device_type": "Tipo di dispositivo", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP connesso", + "revoke": "Revoca", + "access_policy": "Criterio di accesso", + "unattended_access": "Accesso non presidiato", + "enable_unattended": "Abilita accesso non presidiato", + "access_password": "Password di accesso", + "password_configured": "Password configurata", + "no_password": "Nessuna password impostata", + "new_password": "Nuova password", + "clear_password": "Cancella password", + "access_schedule": "Pianificazione accesso", + "enable_schedule": "Abilita pianificazione", + "allowed_days": "Giorni consentiti", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Operatori consentiti", + "all_operators": "Tutti gli operatori", + "operators_hint": "Lascia vuoto per consentire l’accesso a tutti gli operatori.", + "last_updated_by": "Ultimo aggiornamento da", + "access_policy_saved": "Criterio di accesso salvato", + "tabs": { + "overview": "Panoramica", + "hardware": "Hardware", + "metrics": "Metriche", + "connections": "Connessioni", + "audit": "Audit", + "info": "Info", + "history": "Cronologia" }, - "common": { - "loading": "Caricamento...", - "confirm": "Conferma", - "alert": "Avviso", - "prompt": "Inserisci valore", - "copied": "Copiato negli appunti", - "save": "Salva", - "saved": "Salvato", - "error": "Errore", - "success": "Successo", - "warning": "Attenzione", - "info": "Informazione", - "all": "Tutti", - "cancel": "Annulla", - "delete": "Elimina", - "actions": "Azioni", - "close": "Chiudi", - "required": "Obbligatorio", - "name_required": "Il nome è obbligatorio", - "active": "Attivo", - "inactive": "Inattivo", - "invalid_json": "Formato JSON non valido", - "field_required": "Il campo {field} è obbligatorio", - "back": "Indietro", - "edit": "Modifica", - "yes": "Sì", - "no": "No" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Carico medio", + "network": "Rete", + "no_data": "Nessun dato hardware disponibile", + "title": "Hardware", + "gpu": "Graphics Card" }, - "nav": { - "main": "Principale", - "tools": "Strumenti", - "system": "Sistema", - "dashboard": "Panoramica", - "devices": "Dispositivi", - "keys": "Chiavi", - "generator": "Generatore", - "settings": "Impostazioni", - "users": "Utenti", - "inventory": "Inventario", - "tickets": "Ticket", - "help_requests": "Richieste di aiuto", - "activity": "Attività", - "automation": "Automazione", - "file_transfer": "Trasferimento file", - "network": "Rete", - "dataguard": "DataGuard", - "reports": "Report", - "tenants": "Tenant", - "registrations": "Registrazioni", - "management": "Gestione", - "toggle_sidebar": "Attiva/disattiva barra laterale", - "cdap": "CDAP", - "fleet": "Flotta", - "scaling": "Scalabilità", - "cross_platform": "Multipiattaforma", - "tokens": "Token di accesso", - "organizations": "Organizzazioni", - "policies": "Criteri", - "attestation": "Attestazione", - "remote": "Accesso remoto", - "toolkit": "Toolkit", - "security_audit": "Audit di Sicurezza", - "languages": "Lingue", - "resource_control": "Controllo risorse", - "chat": "Chat", - "help": "Aiuto", - "expand_sidebar": "Espandi barra laterale", - "toggle_theme": "Cambia tema", - "sdk_studio": "SDK Studio", - "login": "Accedi", - "permissions": "Permessi", - "server_management": "Gestione server", - "server_attestation": "Attestazione server" - }, - "auth": { - "login": "Accedi", - "logout": "Esci", - "login_title": "Accedi", - "login_subtitle": "Accedi alla console BetterDesk", - "username": "Nome utente", - "username_placeholder": "Inserisci il nome utente", - "password": "Parola d’accesso", - "password_placeholder": "Inserisci la password", - "remember_me": "Ricordami", - "login_failed": "Accesso fallito. Verifica le tue credenziali.", - "invalid_credentials": "Nome utente o password non validi.", - "username_collision": "Esiste già un account locale con questo nome utente. Accedi con la password locale oppure chiedi a un amministratore di rinominare o rimuovere l'account in conflitto.", - "fill_all_fields": "Compila tutti i campi", - "logout_confirm": "Sei sicuro di voler uscire?", - "change_password": "Cambia password", - "password_required": "La password è obbligatoria", - "totp_title": "Autenticazione a due fattori", - "totp_subtitle": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", - "totp_code": "Codice di verifica", - "totp_verify": "Verifica", - "totp_use_recovery": "Usa un codice di recupero", - "totp_use_code": "Usa il codice dell'autenticatore", - "totp_recovery_code": "Codice di recupero", - "totp_back_to_login": "Torna all'accesso", - "totp_invalid_code": "Codice di verifica non valido. Riprova.", - "totp_enter_code": "Inserisci un codice a 6 cifre", - "totp_enter_recovery": "Inserisci un codice di recupero", - "totp_session_expired": "Sessione scaduta. Accedi di nuovo.", - "totp_already_enabled": "L'autenticazione a due fattori è già attiva", - "pro_only_account": "Questo account e riservato solo al client desktop RustDesk. Usa l'app RustDesk per accedere.", - "passwords_mismatch": "Le password non coincidono", - "or": "oppure", - "login_sso": "Accedi con SSO", - "login_sso_with": "Accedi con {{provider}}", - "oidc_denied": "Accesso negato dal provider di identità.", - "oidc_invalid": "Callback OIDC non valida. Riprova.", - "oidc_failed": "Autenticazione OIDC non riuscita. Riprova.", - "oidc_error": "Si è verificato un errore durante l’accesso SSO.", - "oidc_no_account": "Account non trovato e registrazione automatica disabilitata.", - "totp_rate_limited": "Troppi tentativi. Riprova più tardi.", - "emergency_mode_banner": "Server Go non raggiungibile — modalità di emergenza attiva (solo amministratore, funzionalità limitate)" - }, - "dashboard": { - "title": "Panoramica", - "subtitle": "Panoramica del tuo server RustDesk", - "total_devices": "Dispositivi totali", - "online_now": "Online ora", - "banned": "Bannati", - "active_connections": "Connessioni attive", - "offline_devices": "Offline", - "server_status": "Stato del server", - "quick_actions": "Azioni rapide", - "manage_devices": "Gestisci dispositivi connessi", - "view_keys": "Visualizza chiavi del server", - "generate_config": "Genera configurazione client", - "server_settings": "Configura impostazioni", - "greeting_morning": "Buongiorno, {name}", - "greeting_afternoon": "Buon pomeriggio, {name}", - "greeting_evening": "Buonasera, {name}", - "greeting_night": "Buonanotte, {name}", - "health_overview": "Panoramica stato", - "devices_online": "Dispositivi online", - "active_alerts": "Avvisi attivi", - "recent_connections": "Dispositivi totali", - "server_uptime": "Uptime del server", - "activity_feed": "Attivita recenti", - "no_recent_activity": "Nessuna attivita recente", - "just_now": "proprio ora", - "ago": "fa", - "tip_desktop_mode": "Prova la Modalita Desktop per uno spazio di lavoro multi-finestra con widget di monitoraggio.", - "tip_keyboard_shortcuts": "Premi Ctrl+K ovunque per aprire la tavolozza dei comandi di ricerca rapida.", - "tip_address_book": "Sincronizza la rubrica tra i dispositivi effettuando l'accesso dal client RustDesk.", - "tip_2fa": "Abilita l'autenticazione a due fattori nelle Impostazioni per una maggiore sicurezza dell'account.", - "tip_bulk_actions": "Seleziona piu dispositivi e usa le azioni di massa per gestirli contemporaneamente.", - "tip_theme": "Passa tra tema chiaro e scuro nelle impostazioni della barra laterale.", - "tip_cdap": "Collega dispositivi IoT e sensori industriali tramite il gateway CDAP.", - "tip_tutorials": "Fai clic sul pulsante di aiuto in basso a destra per i tutorial interattivi." - }, - "devices": { - "title": "Dispositivi", - "id": "ID", - "hostname": "Nome host", - "username": "Nome utente", - "platform": "Piattaforma", - "version": "Versione", - "ip_address": "Indirizzo IP", - "note": "Nota", - "last_seen": "Ultimo avvistamento", - "last_online": "Ultima connessione", - "first_seen": "Prima apparizione", - "created": "Creato", - "status": "Stato", - "ban_reason": "Motivo del ban", - "actions": "Azioni", - "search_placeholder": "Cerca dispositivi...", - "filter_all": "Tutti", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Bannati", - "selected": "selezionato/i", - "showing": "Visualizzazione", - "of": "di", - "sync_status": "Stato sincronizzazione", - "sync_success": "Stato sincronizzato con successo", - "empty_title": "Nessun dispositivo trovato", - "empty_text": "Nessun dispositivo corrisponde ai filtri attuali", - "edit_title": "Dettagli dispositivo", - "delete_title": "Elimina dispositivo", - "delete_confirm": "Sei sicuro di voler eliminare il dispositivo {id}?", - "delete_warning": "Stai per eliminare permanentemente questo dispositivo:", - "delete_permanent": "Questa azione non può essere annullata. Tutti i dati associati a questo dispositivo verranno rimossi permanentemente dal database.", - "delete_success": "Dispositivo eliminato con successo", - "revoke_option": "Revoca dispositivo", - "revoke_hint": "Blocca dispositivo e disconnetti connessioni attive", - "revoke_success": "Dispositivo revocato con successo", - "details": "Dettagli dispositivo", - "ban_title": "Banna dispositivo", - "ban_confirm": "Sei sicuro di voler bannare il dispositivo {id}?", - "ban_success": "Dispositivo bannato con successo", - "unban_title": "Sbanna dispositivo", - "unban_confirm": "Sei sicuro di voler sbannare il dispositivo {id}?", - "unban_success": "Dispositivo sbannato con successo", - "change_id": "Cambia ID", - "change_id_title": "Cambia ID dispositivo", - "new_id": "Nuovo ID", - "change_id_hint": "6-16 caratteri, solo lettere, numeri, trattini e underscore", - "change_id_success": "ID dispositivo cambiato con successo", - "id_length_error": "L'ID deve essere lungo 6-16 caratteri", - "id_format_error": "L'ID può contenere solo lettere, numeri, trattini e underscore", - "bulk_delete_title": "Elimina più dispositivi", - "bulk_delete_confirm": "Sei sicuro di voler eliminare {count} dispositivi?", - "bulk_delete_success": "{count} dispositivi eliminati con successo", - "columns": "Colonne", - "toggle_columns": "Attiva/disattiva colonne visibili", - "not_found": "Dispositivo non trovato", - "delete_failed": "Impossibile eliminare il dispositivo", - "change_id_failed": "Impossibile cambiare l’ID dispositivo", - "invalid_id": "ID dispositivo non valido", - "invalid_id_format": "Formato ID non valido", - "id_exists": "Questo ID dispositivo esiste già", - "no_selection": "Nessun dispositivo selezionato", - "device_type": "Tipo di dispositivo", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP connesso", - "revoke": "Revoca", - "access_policy": "Criterio di accesso", - "unattended_access": "Accesso non presidiato", - "enable_unattended": "Abilita accesso non presidiato", - "access_password": "Password di accesso", - "password_configured": "Password configurata", - "no_password": "Nessuna password impostata", - "new_password": "Nuova password", - "clear_password": "Cancella password", - "access_schedule": "Pianificazione accesso", - "enable_schedule": "Abilita pianificazione", - "allowed_days": "Giorni consentiti", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Operatori consentiti", - "all_operators": "Tutti gli operatori", - "operators_hint": "Lascia vuoto per consentire l’accesso a tutti gli operatori.", - "last_updated_by": "Ultimo aggiornamento da", - "access_policy_saved": "Criterio di accesso salvato", - "tabs": { - "overview": "Panoramica", - "hardware": "Hardware", - "metrics": "Metriche", - "connections": "Connessioni", - "audit": "Audit", - "info": "Info", - "history": "Cronologia" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Carico medio", - "network": "Rete", - "no_data": "Nessun dato hardware disponibile", - "title": "Hardware", - "gpu": "Graphics Card" - }, - "display_name": "Nome visualizzato", - "display_name_placeholder": "Inserisci un nome visualizzato...", - "note_placeholder": "Inserisci una nota...", - "tags": "Tags", - "filter_by_tags": "Filtra per tag", - "no_tags": "No tags", - "all_groups": "Tutti i gruppi", - "create_group": "Crea gruppo", - "manage_groups": "Gestisci gruppi", - "group_name": "Nome gruppo", - "group_name_placeholder": "es. PC multimediali", - "dynamic_group": "Gruppo dinamico basato su tag", - "dynamic_group_hint": "I dispositivi con questo tag verranno aggiunti automaticamente.", - "tag_filter": "Tag filter", - "group_allowed_users": "Utenti consentiti", - "group_allowed_users_hint": "Lascia vuoto per rendere il gruppo visibile a chiunque abbia permessi sui dispositivi.", - "group_tag_required": "Il filtro tag è obbligatorio per i gruppi dinamici", - "group_invalid": "ID gruppo non valido", - "group_not_found": "Gruppo non trovato", - "group_saved": "Gruppo dispositivi salvato", - "groups_saved": "Gruppi dispositivi salvati", + "display_name": "Nome visualizzato", + "display_name_placeholder": "Inserisci un nome visualizzato...", + "note_placeholder": "Inserisci una nota...", + "tags": "Tags", + "filter_by_tags": "Filtra per tag", + "no_tags": "No tags", + "all_groups": "Tutti i gruppi", + "create_group": "Crea gruppo", + "manage_groups": "Gestisci gruppi", + "group_name": "Nome gruppo", + "group_name_placeholder": "es. PC multimediali", + "dynamic_group": "Gruppo dinamico basato su tag", + "dynamic_group_hint": "I dispositivi con questo tag verranno aggiunti automaticamente.", + "tag_filter": "Tag filter", + "group_allowed_users": "Utenti consentiti", + "group_allowed_users_hint": "Lascia vuoto per rendere il gruppo visibile a chiunque abbia permessi sui dispositivi.", + "group_tag_required": "Il filtro tag è obbligatorio per i gruppi dinamici", + "group_invalid": "ID gruppo non valido", + "group_not_found": "Gruppo non trovato", + "group_saved": "Gruppo dispositivi salvato", + "groups_saved": "Gruppi dispositivi salvati", "group_membership_added": "Aggiunto al gruppo", "group_membership_removed": "Rimosso dal gruppo", - "no_groups": "Ancora nessun gruppo", - "manual_groups": "Gruppi manuali", - "dynamic_memberships": "Appartenenze dinamiche", - "group_allowed_user_groups": "Gruppi utente consentiti", - "group_allowed_user_groups_hint": "Gli utenti nei gruppi selezionati avranno accesso a questo gruppo di dispositivi.", - "no_user_groups": "Nessun gruppo utente", - "edit_group": "Modifica gruppo", - "delete_group": "Elimina gruppo", - "delete_group_confirm": "Eliminare il gruppo dispositivi {name}?", - "group_deleted": "Gruppo dispositivi eliminato", - "folder_group_readonly": "I gruppi basati su cartelle sono gestiti tramite Cartelle.", - "manage_user_groups": "Gestisci gruppi utente", - "restore_failed": "Èchec de la restauration de il dispositivo", - "no_signal_tooltip": "Il client ha contattato l'API di recente ma non è registrato sul server di segnale (UDP :21116). Riavvia il client dopo la migrazione del server.", - "per_page": "Per pagina" - }, - "keys": { - "title": "Chiavi del server", - "subtitle": "Chiave pubblica e configurazione per client RustDesk", - "public_key": "Chiave pubblica", - "qr_code": "Codice QR", - "server_info": "Informazioni server", - "download": "Scarica chiave", - "show_qr": "Mostra QR", - "qr_hint": "Scansiona questo codice QR con l'app mobile RustDesk", - "no_key": "Nessuna chiave pubblica trovata", - "no_key_to_copy": "Nessuna chiave da copiare", - "no_qr": "Codice QR non disponibile", - "download_success": "File chiave scaricato", - "not_found": "Chiave non trovata", - "api_not_found": "Chiave API non trovata" - }, - "settings": { - "title": "Impostazioni", - "subtitle": "Configurazione console e impostazioni account", - "tab_general": "Generale", - "tab_server": "Impostazioni server", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Lingua", - "change_password": "Cambia password", - "password_desc": "Aggiorna la password del tuo account", - "current_password": "Password attuale", - "new_password": "Nuova password", - "confirm_password": "Conferma password", - "save_password": "Aggiorna password", - "password_changed": "Password cambiata con successo", - "fill_all_fields": "Compila tutti i campi", - "passwords_not_match": "Le password non corrispondono", - "password_requirements": "Requisiti della password", - "password_requirements_not_met": "La password non soddisfa i requisiti", - "req_length": "Almeno 8 caratteri", - "req_uppercase": "Almeno una lettera maiuscola", - "req_lowercase": "Almeno una lettera minuscola", - "req_number": "Almeno un numero", - "server_info": "Informazioni server", - "version": "Versione", - "database": "Database", - "uptime": "Tempo di attività", - "audit_log": "Registro di audit", - "audit_desc": "Attività recente della console", - "no_audit_logs": "Nessun registro di audit trovato", - "backend_title": "Backend del server", - "backend_desc": "Scegli il backend del server per la gestione dei dispositivi e i servizi di segnale/relay.", - "backend_original": "Originale", - "backend_enhanced": "Migliorato", - "backend_rustdesk_desc": "Server di segnale e relay standard RustDesk (hbbs + hbbr). API HTTP base con endpoint limitati.", - "backend_betterdesk_desc": "Server migliorato basato su Go con API REST completa, autenticazione JWT, blacklist, tag, eventi WebSocket in tempo reale e registrazione audit.", - "backend_feature_signal": "Server di segnale (registrazione ID)", - "backend_feature_relay": "Server relay (inoltro connessioni)", - "backend_feature_basic_api": "API REST base", - "backend_feature_full_api": "API REST completa (34+ endpoint)", - "backend_feature_jwt": "Autenticazione JWT e TOTP 2FA", - "backend_feature_blocklist": "Gestione blacklist IP/ID", - "backend_feature_tags": "Tag e raggruppamento dispositivi", - "backend_feature_audit": "Registrazione eventi di audit", - "backend_feature_websocket": "Eventi WebSocket in tempo reale", - "backend_connection": "Connessione", - "backend_api_url": "URL API", - "backend_test": "Testa connessione", - "backend_testing": "Test in corso...", - "backend_save": "Applica backend", - "backend_saved": "Backend del server cambiato con successo. I dati dei dispositivi saranno ora gestiti dal nuovo backend.", - "backend_save_failed": "Cambio del backend del server fallito", - "backend_test_success": "Connessione riuscita! Il server è raggiungibile.", - "backend_test_failed": "Connessione fallita. Il server non è raggiungibile.", - "backend_confirm_switch": "Sei sicuro di voler cambiare il backend del server? Questo cambierà la gestione dei dispositivi.", - "backend_unreachable": "Impossibile cambiare: il server di destinazione non è raggiungibile. Avvia prima il server.", - "invalid_backend": "Selezione backend non valida. Scegli 'rustdesk' o 'betterdesk'.", - "backend_status_running": "Connesso", - "backend_status_unreachable": "Non raggiungibile", - "backend_status_error": "Errore", - "backend_status_unknown": "Sconosciuto", - "totp_title": "Autenticazione a due fattori", - "totp_desc": "Aggiungi un livello extra di sicurezza con le app di autenticazione TOTP (Google Authenticator, Microsoft Authenticator, Authy, ecc.)", - "totp_enabled": "2FA attiva", - "totp_enabled_desc": "Il tuo account è protetto dall'autenticazione a due fattori.", - "totp_disabled": "2FA non attiva", - "totp_disabled_desc": "Attiva l'autenticazione a due fattori per una maggiore sicurezza dell'account.", - "totp_setup": "Attiva 2FA", - "totp_disable": "Disattiva 2FA", - "totp_step1": "Installa un'app di autenticazione sul tuo telefono", - "totp_step2": "Scansiona il codice QR qui sotto", - "totp_step3": "Inserisci il codice a 6 cifre per verificare", - "totp_manual_key": "Chiave manuale", - "totp_enter_code": "Inserisci il codice di verifica", - "totp_verify_enable": "Verifica e attiva", - "totp_enabled_success": "Autenticazione a due fattori attivata!", - "totp_recovery_warning": "Conserva questi codici di recupero in un luogo sicuro. Ogni codice può essere usato una sola volta. Se perdi l'accesso alla tua app di autenticazione, puoi usare questi codici per accedere.", - "totp_done": "Fatto", - "totp_disable_warning": "Disattivare l'autenticazione a due fattori renderà il tuo account meno sicuro. Inserisci la password per confermare.", - "totp_disabled_success": "L'autenticazione a due fattori è stata disattivata.", - "tutorials_title": "Tour interattivi", - "tutorials_desc": "Mostra brevi suggerimenti guidati per parti nuove o modificate della console.", - "tutorials_enabled": "Abilita tour", - "tutorials_enabled_hint": "Quando sono abilitati, i tour appaiono automaticamente per le parti non ancora completate.", - "tutorials_reset_hint": "Cancella tutti i progressi salvati per mostrare di nuovo i tour.", - "tutorials_enabled_toast": "Tour abilitati", - "tutorials_disabled_toast": "Tour disabilitati", - "tutorials_reset_toast": "Progressi dei tour reimpostati", - "tab_auth": "Autenticazione", - "ldap_title": "Integrazione LDAP / Active Directory", - "ldap_desc": "Configura l’autenticazione esterna tramite LDAP o Active Directory. Gli utenti potranno accedere con le credenziali di dominio.", - "ldap_enabled": "Abilita autenticazione LDAP", - "ldap_enabled_hint": "Quando è abilitata, gli utenti possono accedere con credenziali LDAP/AD. Gli account locali restano disponibili come fallback.", - "ldap_connection": "Connessione al server", - "ldap_host": "Nome host", - "ldap_port": "Porta", - "ldap_use_tls": "LDAPS su TLS", - "ldap_start_tls": "Usa StartTLS", - "ldap_skip_verify": "Salta verifica TLS", - "ldap_timeout": "Timeout connessione (s)", - "ldap_timeout_hint": "Secondi di attesa per la risposta del server LDAP", - "ldap_bind_mode": "Modalità bind", - "ldap_direct_bind": "Bind diretto", - "ldap_direct_bind_hint": "Esegui il bind direttamente con un modello DN invece di usare un account di servizio per la ricerca.", - "ldap_bind_dn": "DN di bind (account di servizio)", - "ldap_bind_dn_hint": "Distinguished Name di un account di servizio in sola lettura usato per cercare gli utenti.", - "ldap_bind_password": "Password di bind", - "ldap_base_dn": "DN di base", - "ldap_base_dn_hint": "Base di ricerca per trovare gli utenti, ad es. dc=example,dc=com", - "ldap_user_filter": "Filtro utente", - "ldap_user_filter_hint": "Filtro LDAP per trovare utenti. Usa {{username}} come segnaposto. Predefinito: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Modello DN per bind diretto", - "ldap_direct_bind_dn_hint": "Modello DN per bind diretto. Usa {{username}} come segnaposto, ad es. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Attributi utente", - "ldap_attr_id": "Attributo nome utente", - "ldap_attr_email": "Attributo email", - "ldap_attr_name": "Attributo nome visualizzato", - "ldap_group_mapping": "Mappatura gruppo → ruolo", - "ldap_group_base_dn": "DN di base gruppi", - "ldap_group_base_dn_hint": "Lascia vuoto per usare il DN di base principale", - "ldap_group_filter": "Filtro gruppi", - "ldap_group_attr_name": "Attributo nome gruppo", - "ldap_default_role": "Ruolo predefinito", - "ldap_default_role_hint": "Ruolo per utenti i cui gruppi LDAP non corrispondono a nessuna mappatura", - "ldap_role_viewer": "Visualizzatore", - "ldap_role_operator": "Operatore", - "ldap_role_admin": "Amministratore", - "ldap_group_role_map": "Mappa gruppo → ruolo", - "ldap_group_role_map_hint": "Mappa i gruppi LDAP ai ruoli BetterDesk. Formato: GroupDN=ruolo separati da | (pipe). Esempio: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Testa connessione", - "ldap_testing": "Test in corso...", - "ldap_test_success": "Connessione riuscita! Il server LDAP è raggiungibile e le credenziali di bind sono valide.", - "ldap_test_failed": "Connessione non riuscita", - "ldap_save": "Salva configurazione LDAP", - "ldap_saved": "Configurazione LDAP salvata correttamente", - "oidc_title": "Accesso OIDC / OAuth2 (SSO)", - "oidc_desc": "Configura il single sign-on tramite un provider OpenID Connect (Azure AD, Okta, Google, Keycloak ecc.).", - "oidc_enabled": "Abilita autenticazione OIDC", - "oidc_enabled_hint": "Consenti agli utenti di accedere con un provider di identità esterno", - "oidc_provider": "Provider di identità", - "oidc_display_name": "Nome visualizzato del pulsante", - "oidc_display_name_hint": "Testo mostrato sul pulsante di accesso (ad es. Azure AD, Okta)", - "oidc_issuer_url": "URL issuer", - "oidc_issuer_url_hint": "URL issuer OpenID Connect (discovery automatica)", - "oidc_client_id": "ID client", - "oidc_client_secret": "Segreto client", - "oidc_redirect_url": "URL di reindirizzamento (callback)", - "oidc_redirect_url_hint": "Deve corrispondere esattamente alla configurazione nel provider IdP. Di solito: http(s)://tuo-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Ambiti", - "oidc_use_pkce": "Usa PKCE (consigliato)", - "oidc_auto_discovery": "Discovery automatica", - "oidc_allow_signup": "Crea utenti automaticamente", - "oidc_manual_endpoints": "URL endpoint manuali", - "oidc_authorization_url": "Endpoint autorizzazione", - "oidc_token_url": "Endpoint token", - "oidc_userinfo_url": "Endpoint UserInfo", - "oidc_claim_mapping": "Mappatura claim", - "oidc_claim_username": "Claim nome utente", - "oidc_claim_email": "Claim email", - "oidc_claim_name": "Claim nome visualizzato", - "oidc_claim_groups": "Claim gruppi", - "oidc_role_mapping": "Mappatura ruoli", - "oidc_default_role": "Ruolo predefinito", - "oidc_group_role_map": "Mappatura gruppo → ruolo", - "oidc_group_role_map_hint": "Una mappatura per riga: nome_gruppo=ruolo (ad es. admins=admin, operators=operator)", - "oidc_test_discovery": "Testa discovery", - "oidc_testing": "Test in corso...", - "oidc_test_success": "Discovery riuscita! Endpoint risolti.", - "oidc_test_failed": "Discovery non riuscita", - "oidc_issuer_required": "L’URL issuer è obbligatorio per testare la discovery", - "oidc_save": "Salva configurazione OIDC", - "oidc_saved": "Configurazione OIDC salvata correttamente", - "tab_advanced": "Avancè", - "connection_mode_title": "Stratègie de connessione", - "connection_mode_desc": "Contrôlez comment les clients de bureau RustDesk se connectent : P2P direct (hole punch) si possible, ou toujours via relay.", - "connection_mode_label": "Modalità de connessione par dèfaut", - "connection_mode_p2p_first": "P2P en premier (recommandè) — prova la connessione diretta, se rabattre sur le relay", - "connection_mode_relay_only": "Relay uniquement — toutes les sessions utilisent le serveur relay", - "connection_mode_advanced": "Opzioni avancèes", - "connection_mode_fallback_ms": "Dèlai d'expiration de basculement P2P (ms)", - "connection_mode_same_nat_relay": "Forza le relay lorsque les deux pairs condividono la mème IP pubblico (NAT hairpin)", - "connection_mode_network_hint": "P2P nècessite que le port UDP 21116 soit accessible entre les clients. Signal TCP 21116, relay TCP 21117, test NAT 21115 doivent ètre ouverts sur le serveur. Les navigateurs web utilisent toujours le relay.", - "connection_mode_save": "Salva", - "connection_mode_save_restart": "Salva et redèmarrer le serveur", - "connection_mode_saved": "Modalità de connessione enregistrè", - "connection_mode_restart_started": "Redèmarrage du serveur initiè", - "connection_mode_restart_failed": "Èchec du redèmarrage du serveur", - "connection_mode_not_configurable": "Le modalità de connessione ne peut pas ètre modifiè sur ce dèploiement (nessunoe unitè systemd ou docker-compose trouvè)", - "connection_mode_compose_error": "Impossibile de trouver la sezione d'ambiente del server dans docker-compose.yml", - "connection_mode_source_saved": "Enregistrè dans", - "connection_mode_source_defaults": "Utilisation des valeurs par dèfaut du serveur (non modificabiles depuis le pannello)", - "connection_mode_runtime": "Server attivo", - "advanced_title": "Files de configurazione", - "advanced_desc": "Modifiez direttament les files de configurazione du serveur. Le modifiche peuvent nècessiter un redèmarrage des servizios. Une copia di backup est crèèe avant chaque enregistrement.", - "advanced_warning": "Ces files contengono segreti (clès API, mots de passe de base de donnèes, secrets de session). Ne modifiez que si vous sai cosa stai facendo. Une sintassi errata peut empècher le serveur de dèmarrer.", - "advanced_files_label": "File", - "advanced_select_file": "Sèlectionnez un file dall'elenco pour mostra ou modifica son contenuto.", - "advanced_reload": "Ricarica", - "advanced_save": "Salva le file", - "advanced_apply_restart": "Applica (redèmarrer le servizio)", - "advanced_saved": "File de configurazione enregistrè", - "advanced_restart_after_save": "Configurazione enregistrèe. Redèmarrer le servizio concernè maintenant pour que le modifiche entrino in vigore ?", - "advanced_restart_confirm": "Redèmarrer le(s) servizio(s) BetterDesk concernè(s) ? Les connessiones actives peuvent ètre brevemente interrotte.", - "advanced_restart_console_confirm": "Redèmarrer le servizio de console web ? Votre session de navigateur se dèconnectera brevemente et la page se ricaricaa lorsque la console sera de indietro.", - "advanced_restart_started": "Redèmarrage du servizio initiè", - "advanced_restart_done": "Console redèmarrèe — recaricamento de la page…", - "advanced_restart_polling": "En attesa du indietro en ligne de la console…", - "advanced_restart_timeout": "Le redèmarrage a ètè envoyè mais la console n'a pas rèpondu in tempo. Vèrifiez les journaux systemd/NSSM et rechargez manualmente.", - "advanced_restart_failed": "Èchec du redèmarrage du servizio (privilegi insufficienti ou servizio non installè)", - "advanced_save_confirm": "Salva le modifiche de ce file ? Une sauvegarde de la version prècèdente sera crèèe.", - "advanced_unsaved_confirm": "Vous avez des modifiche non enregistrèes. Les ignorer ?", - "advanced_no_files": "Nessuno file de configurazione disponibile sur ce système.", - "advanced_readonly": "sola lettura", - "advanced_missing": "mancante", - "advanced_new_file": "Nouveau file (non crèè jusqu'à l'enregistrement)", - "advanced_new_file_hint": "Nouveau file — aggiungi contenutoto et enregistrez", - "advanced_backup_created": "sauvegarde crèèe", - "advanced_restart_console": "Redèmarrez le servizio de console web (p. ex. systemctl restart betterdesk-console) pour que le modifiche .env entrino in vigore.", - "advanced_restart_goserver": "Redèmarrez le serveur Go BetterDesk pour que le modifiche de la lista di blocco soient chargèes.", - "advanced_restart_systemd": "Après avoir modifiè des unitès systemd, exècutez : systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Redèmarrez le servizio concernè pour que le modifiche entrino in vigore.", - "advanced_error_unknown": "File de configurazione sconosciuto", - "advanced_error_not_found": "Le file non esiste", - "advanced_error_not_file": "Le percorso n'est pas un file ordinaire", - "advanced_error_too_large": "Le file dèpasse la dimensione massima modificabile (512 Ko)", - "advanced_error_binary": "Les files binari ne peuvent pas ètre modifiès dans le pannello", - "advanced_error_invalid": "Contenu de file invalide", - "advanced_error_not_writable": "Le file n'est pas accessible en ècriture par le processus de console", - "advanced_file_console-env": "Ambiente console (.env)", - "advanced_file_console-env-local": "Override console (.env.local)", - "advanced_file_go-blocklist": "Liste de blocage du serveur Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unità di servizio)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unità di servizio)", - "advanced_file_console-session-secret": "Secret de session de la console (.session_secret)", - "advanced_file_go-audit-log": "Journal d'audit du serveur Go (audit.jsonl)", - "advanced_file_build-env": "Environnement de compilation de l'agent (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (configurazione supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestrazione)", - "advanced_restart_none": "Nessuno redèmarrage de servizio è richiesto pour ce file.", - "enrollment_title": "Inscription de il dispositivo (RustDesk)", - "enrollment_desc": "Contrôlez comment les nuovi client RustDesk si registrano et comment les opèrateurs li approvant dans la page des demandes d'inscription.", - "enrollment_require_approval": "Approbation de l'opèrateur requise (modalità gèrè)", - "enrollment_require_approval_hint": "Lorsqu'activè, les clients sconosciutos vengono messi in coda d'attesa jusqu'à ce qu'un opèrateur li approva dans les demandes d'inscription.", - "enrollment_rich_approve": "Formulaire d'approbation complet (nome, cartella, groupes, tags)", - "enrollment_rich_approve_hint": "Affiche un dialogue dètaillè lors de l'approbation des demandes d'inscription ou d'enregistrement LAN.", - "enrollment_tag_picker": "Sèlectionner des tags parmi les tags d'dispositivi existants", - "enrollment_tag_picker_hint": "Permet aux opèrateurs de sèlectionner des tags dall'elenco utilisèe sur la page Dispositivi plutôt que de les saisir uniquement.", - "enrollment_open_requests": "Demandes d'inscription ouvertes", - "enrollment_pending_count": "{count} demande(s) d'inscription en attesa" - }, - "audit": { - "time": "Ora", - "user": "Utente", - "action": "Azione", - "details": "Dettagli", - "action_login": "Login", - "action_login_failed": "Accesso non riuscito", - "action_logout": "Logout", - "action_password_change": "Password cambiata", - "action_2fa_enable": "2FA abilitata", - "action_2fa_disable": "2FA disabilitata", - "action_user_create": "Utente creato", - "action_user_update": "Utente aggiornato", - "action_user_delete": "Utente eliminato", - "action_settings_update": "Impostazioni aggiornate", - "action_device_ban": "Dispositivo bloccato", - "action_device_unban": "Blocco dispositivo rimosso", - "action_device_delete": "Dispositivo eliminato" - }, - "generator": { - "title": "Generatore configurazione client", - "subtitle": "Genera configurazione per client RustDesk", - "config_options": "Opzioni di configurazione", - "server_address": "Indirizzo server", - "server_address_hint": "Dominio o indirizzo IP del tuo server", - "custom_port": "Porta personalizzata", - "port_hint": "Lascia vuoto per impostazione predefinita (21116)", - "relay_server": "Server relay", - "relay_placeholder": "Uguale al server ID se vuoto", - "relay_hint": "Opzionale: indirizzo server relay separato", - "include_key": "Includi chiave pubblica nella configurazione", - "generate": "Genera configurazione", - "output": "Output configurazione", - "usage_title": "Dettagli connessione", - "generated": "Configurazione generata", - "server_required": "L'indirizzo server è obbligatorio", - "nothing_to_copy": "Genera prima una configurazione", - "bundles_title": "Pacchetti agente", - "new_bundle": "Nuovo pacchetto", - "editor_title": "Editor pacchetto", - "empty_state": "Seleziona un pacchetto a sinistra oppure creane uno nuovo per iniziare.", - "loading": "Caricamento…", - "no_bundles": "Nessun pacchetto. Crea il primo pacchetto.", - "bundle_name": "Nome pacchetto", - "bundle_name_hint": "Solo etichetta interna — non viene mostrata agli utenti finali.", - "short_link": "Link di download breve", - "short_link_hint": "Usato nell’URL pubblico (/d/…). Solo lettere minuscole, numeri e trattini (2–32 caratteri). Compilato automaticamente dal nome del pacchetto — abbrevialo per condividerlo più facilmente (es. acme).", - "branding_section": "Branding", - "company_name": "Nome azienda/marchio", - "short_text": "Descrizione breve", - "contact_email": "Email di contatto", - "contact_phone": "Telefono di contatto", - "contact_url": "Sito web di contatto", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG o WebP. Massimo 256 KB.", - "logo_clear": "Rimuovi logo", - "primary_color": "Colore primario", - "accent_color": "Colore intestazione", - "default_lang": "Lingua predefinita", - "allow_unattended": "Consenti accesso non presidiato", - "allow_unattended_hint": "Quando è attivo, l’agente mostra una password persistente per l’accesso operatore.", - "save": "Salva pacchetto", - "revoke": "Revoca", - "unrevoke": "Riattiva", - "revoked": "Revocato", - "preview_title": "Anteprima live", - "preview_hint": "Vista approssimativa della finestra agente per gli utenti finali.", - "preview_default_name": "Supporto BetterDesk", - "preview_status_ready": "Pronto", - "preview_id": "Il tuo ID", - "preview_password": "Parola d’accesso", - "preview_chat": "Chatta con il supporto", - "preview_settings": "Impostazioni (solo admin)", - "preview_quit": "Esci (solo admin)", - "download_link_title": "Link di download", - "download_link_hint": "Condividi questo link con gli utenti finali. Vedranno una pagina di download con il tuo branding. I vecchi link hex continuano a funzionare dopo la modifica del link breve.", - "open_portal": "Apri", - "created": "Pacchetto creato", - "saved": "Pacchetto salvato", - "deleted": "Pacchetto eliminato", - "revoked_ok": "Pacchetto revocato", - "unrevoked_ok": "Pacchetto riattivato", - "link_copied": "Link copiato negli appunti", - "copy_failed": "Copia automatica non riuscita — copia manualmente", - "unsaved_confirm": "Eliminare le modifiche non salvate?", - "confirm_revoke": "Revocare questo pacchetto? Il link di download smetterà di funzionare.", - "confirm_unrevoke": "Riattivare questo pacchetto?", - "confirm_delete": "Eliminare definitivamente questo pacchetto? L’azione non può essere annullata.", - "errors": { - "validation_failed": "Validazione non riuscita", - "name_required": "Il nome del pacchetto è obbligatorio", - "company_name_required": "Il nome azienda è obbligatorio", - "logo_invalid": "Il logo deve essere un file immagine valido", - "logo_too_large": "Il logo può essere al massimo 256 KB", - "logo_read_failed": "Impossibile leggere il file logo", - "primary_color_invalid": "Il colore primario deve essere un valore hex (ad es. #2563eb)", - "accent_color_invalid": "Il colore intestazione deve essere un valore hex (ad es. #1e293b)", - "contact_url_invalid": "Il sito web di contatto deve essere un URL valido", - "server_host_required": "L'adresse pubblico du serveur è obbligatorio", - "server_host_invalid": "Entrez un nome de domaine ou une indirizzo IPv4 valido", - "token_failed": "Impossibile de gènèrer le token di registrazione — vèrifiez la connectivitè du serveur", - "rebuild_revoked": "Impossibile de reconstruire un paquet rèvoquè — rèactivez-le d'abord", - "slug_invalid": "Il link breve può contenere solo lettere minuscole, numeri e trattini", - "slug_too_short": "Il link breve deve avere almeno 2 caratteri", - "slug_too_long": "Il link breve può avere al massimo 32 caratteri", - "slug_taken": "Questo link breve è già usato da un altro pacchetto" - }, - "legacy_title": "Generatore configurazione client", - "connection_section": "Connessione au serveur", - "server_host": "Adresse pubblico du serveur", - "server_host_placeholder": "support.example.com ou 203.0.113.10", - "server_host_hint": "Nome de domaine ou IP pubblico où les utenti finaux joignent votre serveur BetterDesk. Le port est pris dans la configurazione de la console.", - "use_https": "Utiliser HTTPS / WSS (recommandè)", - "enrollment_token": "Enregistrement de il dispositivo", - "enrollment_token_pending": "Per dispositivo après approbation", - "enrollment_token_set": "Per dispositivo — approva in Registrazioni", - "enrollment_token_hint": "Ogni installazione s'enregistre d'elle-mème. Approuvez les nouveaux dispositivi dans le pannello Inscriptions ; le serveur dèlivre ensuite une clè d'accès unique per computer.", - "enrollment_per_device": "Per dispositivo — approva in Registrazioni", - "background_color": "Sfondo de la fenètre", - "surface_color": "Sfondo de la carte", - "text_color": "Colore du texte", - "text_muted_color": "Colore du texte attènuè", - "status_ready_color": "Colore de l'indicateur prèt", - "header_text_color": "Colore du texte d'en-tète", - "builds_title": "Compilations client", - "builds_hint": "Installateurs compilès sur ce serveur pour chaque plateforme. Reconstruire après avoir corrigè les erreurs de la chaîne d'outils ou mis à jour les sources de l'agent.", - "builds_loading": "Caricamento de l'ètat de compilation…", - "builds_empty": "Nessuno build en file d'attesa — enregistrez le paquet ou cliquez sur Reconstruire tout.", - "rebuild_all": "Reconstruire tout", - "rebuilding_all": "Mise en file d'attesa des reconstructions…", - "rebuild_queued": "Toutes les compilations de plateformes mises en file d'attesa", - "rebuild_confirm": "Ricompila tutti les installer di piattaforma pour ce paquet ? Les artefacts prèts existants seront remplacès.", - "build_status_ready": "Prèt", - "build_status_pending": "En file d'attesa", - "build_status_building": "En cours de compilation", - "build_status_failed": "Èchouè", - "builds_summary": "{{ready}} prèt · {{pending}} en file d'attesa · {{building}} en compilation · {{failed}} èchouè", - "build_error_hint": "Erreur de compilation", - "preview_help": "Richiedi aiuto" - }, - "server": { - "port": "Porta", - "api_port": "Porta API", - "id_server": "Server ID", - "relay_server": "Server relay", - "api_key": "Chiave API" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Bannato", - "running": "In esecuzione", - "stopped": "Fermato", - "unknown": "Sconosciuto", - "checking": "Verifica...", - "label": "Status", - "no_signal": "Nessun segnale" - }, - "actions": { - "refresh": "Aggiorna", - "copy": "Copia", - "connect": "Connetti", - "connect_desktop": "Connetti tramite client desktop", - "remote_viewer": "Visualizzatore remoto", - "web_remote": "Desktop remoto web", - "details": "Dettagli", - "edit": "Modifica", - "delete": "Elimina", - "ban": "Banna", - "unban": "Sbanna", - "save": "Salva", - "cancel": "Annulla", - "confirm": "Conferma", - "close": "Chiudi", - "clear": "Cancella", - "ok": "OK", - "saved": "Salvato con successo", - "back": "Indietro", - "create": "Crea", - "dismiss": "Ignora", - "view_all": "Vedi tutto", - "cdap_viewer": "Visualizzatore snapshot CDAP", - "add": "Aggiungi", - "remove": "Rimuovi" - }, - "time": { - "just_now": "Proprio ora", - "seconds_ago": "{count} secondo/i fa", - "minutes_ago": "{count} minuto/i fa", - "hours_ago": "{count} ora/e fa", - "days_ago": "{count} giorno/i fa", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Gestione utenti", - "subtitle": "Gestisci utenti e permessi della console", - "add_user": "Aggiungi utente", - "edit_user": "Modifica utente", - "username": "Nome utente", - "username_placeholder": "Inserisci il nome utente", - "username_hint": "3-32 caratteri, solo lettere, numeri e underscore", - "password": "Parola d’accesso", - "password_placeholder": "Inserisci la password", - "password_hint": "Minimo 8 caratteri con maiuscole, minuscole, numeri e simboli", - "password_leave_empty": "Lascia vuoto per mantenere quella attuale", - "role": "Ruolo", - "role_admin": "Amministratore", - "role_operator": "Operatore", - "role_viewer": "Osservatore", - "role_hint": "Gli osservatori possono solo visualizzare i dati, gli operatori possono gestire i dispositivi, gli amministratori hanno accesso completo", - "created": "Creato", - "last_login": "Ultimo accesso", - "never": "Mai", - "actions": "Azioni", - "create": "Crea utente", - "edit": "Modifica", - "reset_password": "Reimposta password", - "new_password": "Nuova password", - "delete_title": "Elimina utente", - "delete_confirm": "Sei sicuro di voler eliminare l'utente {username}?", - "delete_success": "Utente eliminato con successo", - "user_created": "Utente creato con successo", - "user_updated": "Utente aggiornato con successo", - "password_reset_success": "Password reimpostata con successo", - "empty_title": "Nessun utente trovato", - "empty_text": "Aggiungi utenti per gestire l'accesso alla console", - "fill_required": "Compila tutti i campi obbligatori", - "invalid_username": "Il nome utente deve essere di 3-32 caratteri, solo lettere, numeri e underscore", - "username_exists": "Il nome utente esiste già", - "weak_password": "La password è troppo debole", - "password_too_short": "La password deve avere almeno 8 caratteri", - "invalid_role": "Ruolo non valido", - "cannot_demote_self": "Non puoi declassare te stesso", - "cannot_delete_self": "Non puoi eliminare il tuo account", - "last_admin": "Non è possibile eliminare l'ultimo amministratore", - "admin_only": "Questa funzione è disponibile solo per gli amministratori", - "password_required": "La password è obbligatoria", - "not_found": "Utente non trovato", - "strength_weak": "Debole", - "strength_medium": "Media", - "strength_strong": "Forte", - "security_tips_title": "Best practice di sicurezza", - "tip_strong_passwords": "Usa password forti e uniche per ogni utente", - "tip_unique_accounts": "Crea account individuali per ogni persona", - "tip_viewer_role": "Usa il ruolo osservatore per gli utenti che necessitano solo di accesso in lettura", - "tip_operator_role": "Usa il ruolo operatore per gli utenti che devono gestire i dispositivi ma non gli utenti", - "tip_audit_logs": "Controlla regolarmente i registri di audit per attività sospette", - "role_pro": "Professionale", - "role_super_admin": "Super Admin", - "role_server_admin": "Amministratore server", - "role_global_admin": "Amministratore globale", - "organizations": "Organizzazioni", - "user_organizations": "Organizzazioni per {username}", - "no_organizations": "Nessuna organizzazione", - "org_removed": "Utente rimosso dall’organizzazione", - "server_role_label": "Ruolo server", - "server_role_hint": "Definisce cosa può fare l’utente nell’intera console (accesso al pannello, configurazione server, audit e altro).", - "org_membership_section": "Appartenenza organizzazioni", - "org_membership_hint": "Un utente può appartenere a più organizzazioni. Il ruolo organizzativo definisce i permessi solo dentro quella organizzazione ed è separato dal ruolo server sopra.", - "column_organizations": "Organizzazioni", - "no_orgs_short": "—", - "org_count_one": "{count} organizzazione", - "org_count_many": "{count} organizzazioni", - "all_orgs_assigned": "L’utente appartiene già a tutte le organizzazioni.", - "user_groups": "Gruppi utente", - "user_groups_hint": "I gruppi utente possono concedere accesso ai gruppi di dispositivi selezionati.", - "loading_user_groups": "Caricamento gruppi utente...", - "no_user_groups": "Nessun gruppo utente disponibile", - "create_user_group": "Crea gruppo", - "edit_user_group": "Modifica gruppo utente", - "delete_user_group": "Elimina gruppo utente", - "delete_user_group_confirm": "Eliminare il gruppo utente {name}? I membri perderanno l’accesso concesso tramite questo gruppo.", - "user_group_created": "Gruppo utente creato", - "user_group_updated": "Gruppo utente aggiornato", - "user_group_deleted": "Gruppo utente eliminato", - "user_group_not_found": "Gruppo utente non trovato", - "group_name": "Nome gruppo", - "group_name_placeholder": "Gruppo operatori", - "group_note": "Note", - "group_note_placeholder": "Nota opzionale", - "group_name_required": "Il nome gruppo è obbligatorio", - "group_members_count": "{count} membri", - "provider": "Provider", - "provider_local": "Local", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Gèrè par le provider d'identitè", - "provider_managed_hint": "Ce compte est gèrè par un provider d'identitè esterno (LDAP/AD ou SSO). Le password et le rôle sont contrôlès par le provider et ne peuvent pas ètre modifiès ici." - }, - "folders": { - "title": "Cartelle", - "create": "Crea cartella", - "edit": "Modifica cartella", - "delete": "Elimina cartella", - "name": "Nome cartella", - "name_placeholder": "Inserisci il nome della cartella", - "name_required": "Il nome della cartella è obbligatorio", - "name_too_long": "Il nome della cartella è troppo lungo (max 50 caratteri)", - "color": "Colore", - "icon": "Icona", - "not_found": "Cartella non trovata", - "delete_confirm": "Sei sicuro di voler eliminare questa cartella? I dispositivi verranno disassegnati.", - "delete_success": "Cartella eliminata con successo", - "created": "Cartella creata con successo", - "updated": "Cartella aggiornata con successo", - "no_devices_selected": "Nessun dispositivo selezionato", - "devices_moved": "Dispositivi spostati con successo", - "device_assigned": "Dispositivo assegnato alla cartella", - "unassigned": "Non assegnato", - "all_devices": "Tutti i dispositivi", - "drag_hint": "Trascina i dispositivi nelle cartelle per organizzarli", - "move_to": "Sposta in", - "toggle_sidebar": "Attiva/disattiva barra laterale" - }, + "no_groups": "Ancora nessun gruppo", + "manual_groups": "Gruppi manuali", + "dynamic_memberships": "Appartenenze dinamiche", + "group_allowed_user_groups": "Gruppi utente consentiti", + "group_allowed_user_groups_hint": "Gli utenti nei gruppi selezionati avranno accesso a questo gruppo di dispositivi.", + "no_user_groups": "Nessun gruppo utente", + "edit_group": "Modifica gruppo", + "delete_group": "Elimina gruppo", + "delete_group_confirm": "Eliminare il gruppo dispositivi {name}?", + "group_deleted": "Gruppo dispositivi eliminato", + "folder_group_readonly": "I gruppi basati su cartelle sono gestiti tramite Cartelle.", + "manage_user_groups": "Gestisci gruppi utente", + "restore_failed": "Èchec de la restauration de il dispositivo", + "no_signal_tooltip": "Il client ha contattato l'API di recente ma non è registrato sul server di segnale (UDP :21116). Riavvia il client dopo la migrazione del server.", + "per_page": "Per pagina" + }, + "keys": { + "title": "Chiavi del server", + "subtitle": "Chiave pubblica e configurazione per client RustDesk", + "public_key": "Chiave pubblica", + "qr_code": "Codice QR", + "server_info": "Informazioni server", + "download": "Scarica chiave", + "show_qr": "Mostra QR", + "qr_hint": "Scansiona questo codice QR con l'app mobile RustDesk", + "no_key": "Nessuna chiave pubblica trovata", + "no_key_to_copy": "Nessuna chiave da copiare", + "no_qr": "Codice QR non disponibile", + "download_success": "File chiave scaricato", + "not_found": "Chiave non trovata", + "api_not_found": "Chiave API non trovata" + }, + "settings": { + "title": "Impostazioni", + "subtitle": "Configurazione console e impostazioni account", + "tab_general": "Generale", + "tab_server": "Impostazioni server", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Lingua", + "change_password": "Cambia password", + "password_desc": "Aggiorna la password del tuo account", + "current_password": "Password attuale", + "new_password": "Nuova password", + "confirm_password": "Conferma password", + "save_password": "Aggiorna password", + "password_changed": "Password cambiata con successo", + "fill_all_fields": "Compila tutti i campi", + "passwords_not_match": "Le password non corrispondono", + "password_requirements": "Requisiti della password", + "password_requirements_not_met": "La password non soddisfa i requisiti", + "req_length": "Almeno 8 caratteri", + "req_uppercase": "Almeno una lettera maiuscola", + "req_lowercase": "Almeno una lettera minuscola", + "req_number": "Almeno un numero", + "server_info": "Informazioni server", + "version": "Versione", + "database": "Database", + "uptime": "Tempo di attività", + "audit_log": "Registro di audit", + "audit_desc": "Attività recente della console", + "no_audit_logs": "Nessun registro di audit trovato", + "backend_title": "Backend del server", + "backend_desc": "Scegli il backend del server per la gestione dei dispositivi e i servizi di segnale/relay.", + "backend_original": "Originale", + "backend_enhanced": "Migliorato", + "backend_rustdesk_desc": "Server di segnale e relay standard RustDesk (hbbs + hbbr). API HTTP base con endpoint limitati.", + "backend_betterdesk_desc": "Server migliorato basato su Go con API REST completa, autenticazione JWT, blacklist, tag, eventi WebSocket in tempo reale e registrazione audit.", + "backend_feature_signal": "Server di segnale (registrazione ID)", + "backend_feature_relay": "Server relay (inoltro connessioni)", + "backend_feature_basic_api": "API REST base", + "backend_feature_full_api": "API REST completa (34+ endpoint)", + "backend_feature_jwt": "Autenticazione JWT e TOTP 2FA", + "backend_feature_blocklist": "Gestione blacklist IP/ID", + "backend_feature_tags": "Tag e raggruppamento dispositivi", + "backend_feature_audit": "Registrazione eventi di audit", + "backend_feature_websocket": "Eventi WebSocket in tempo reale", + "backend_connection": "Connessione", + "backend_api_url": "URL API", + "backend_test": "Testa connessione", + "backend_testing": "Test in corso...", + "backend_save": "Applica backend", + "backend_saved": "Backend del server cambiato con successo. I dati dei dispositivi saranno ora gestiti dal nuovo backend.", + "backend_save_failed": "Cambio del backend del server fallito", + "backend_test_success": "Connessione riuscita! Il server è raggiungibile.", + "backend_test_failed": "Connessione fallita. Il server non è raggiungibile.", + "backend_confirm_switch": "Sei sicuro di voler cambiare il backend del server? Questo cambierà la gestione dei dispositivi.", + "backend_unreachable": "Impossibile cambiare: il server di destinazione non è raggiungibile. Avvia prima il server.", + "invalid_backend": "Selezione backend non valida. Scegli 'rustdesk' o 'betterdesk'.", + "backend_status_running": "Connesso", + "backend_status_unreachable": "Non raggiungibile", + "backend_status_error": "Errore", + "backend_status_unknown": "Sconosciuto", + "totp_title": "Autenticazione a due fattori", + "totp_desc": "Aggiungi un livello extra di sicurezza con le app di autenticazione TOTP (Google Authenticator, Microsoft Authenticator, Authy, ecc.)", + "totp_enabled": "2FA attiva", + "totp_enabled_desc": "Il tuo account è protetto dall'autenticazione a due fattori.", + "totp_disabled": "2FA non attiva", + "totp_disabled_desc": "Attiva l'autenticazione a due fattori per una maggiore sicurezza dell'account.", + "totp_setup": "Attiva 2FA", + "totp_disable": "Disattiva 2FA", + "totp_step1": "Installa un'app di autenticazione sul tuo telefono", + "totp_step2": "Scansiona il codice QR qui sotto", + "totp_step3": "Inserisci il codice a 6 cifre per verificare", + "totp_manual_key": "Chiave manuale", + "totp_enter_code": "Inserisci il codice di verifica", + "totp_verify_enable": "Verifica e attiva", + "totp_enabled_success": "Autenticazione a due fattori attivata!", + "totp_recovery_warning": "Conserva questi codici di recupero in un luogo sicuro. Ogni codice può essere usato una sola volta. Se perdi l'accesso alla tua app di autenticazione, puoi usare questi codici per accedere.", + "totp_done": "Fatto", + "totp_disable_warning": "Disattivare l'autenticazione a due fattori renderà il tuo account meno sicuro. Inserisci la password per confermare.", + "totp_disabled_success": "L'autenticazione a due fattori è stata disattivata.", + "tutorials_title": "Tour interattivi", + "tutorials_desc": "Mostra brevi suggerimenti guidati per parti nuove o modificate della console.", + "tutorials_enabled": "Abilita tour", + "tutorials_enabled_hint": "Quando sono abilitati, i tour appaiono automaticamente per le parti non ancora completate.", + "tutorials_reset_hint": "Cancella tutti i progressi salvati per mostrare di nuovo i tour.", + "tutorials_enabled_toast": "Tour abilitati", + "tutorials_disabled_toast": "Tour disabilitati", + "tutorials_reset_toast": "Progressi dei tour reimpostati", + "tab_auth": "Autenticazione", + "ldap_title": "Integrazione LDAP / Active Directory", + "ldap_desc": "Configura l’autenticazione esterna tramite LDAP o Active Directory. Gli utenti potranno accedere con le credenziali di dominio.", + "ldap_enabled": "Abilita autenticazione LDAP", + "ldap_enabled_hint": "Quando è abilitata, gli utenti possono accedere con credenziali LDAP/AD. Gli account locali restano disponibili come fallback.", + "ldap_connection": "Connessione al server", + "ldap_host": "Nome host", + "ldap_port": "Porta", + "ldap_use_tls": "LDAPS su TLS", + "ldap_start_tls": "Usa StartTLS", + "ldap_skip_verify": "Salta verifica TLS", + "ldap_timeout": "Timeout connessione (s)", + "ldap_timeout_hint": "Secondi di attesa per la risposta del server LDAP", + "ldap_bind_mode": "Modalità bind", + "ldap_direct_bind": "Bind diretto", + "ldap_direct_bind_hint": "Esegui il bind direttamente con un modello DN invece di usare un account di servizio per la ricerca.", + "ldap_bind_dn": "DN di bind (account di servizio)", + "ldap_bind_dn_hint": "Distinguished Name di un account di servizio in sola lettura usato per cercare gli utenti.", + "ldap_bind_password": "Password di bind", + "ldap_base_dn": "DN di base", + "ldap_base_dn_hint": "Base di ricerca per trovare gli utenti, ad es. dc=example,dc=com", + "ldap_user_filter": "Filtro utente", + "ldap_user_filter_hint": "Filtro LDAP per trovare utenti. Usa {{username}} come segnaposto. Predefinito: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Modello DN per bind diretto", + "ldap_direct_bind_dn_hint": "Modello DN per bind diretto. Usa {{username}} come segnaposto, ad es. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Attributi utente", + "ldap_attr_id": "Attributo nome utente", + "ldap_attr_email": "Attributo email", + "ldap_attr_name": "Attributo nome visualizzato", + "ldap_group_mapping": "Mappatura gruppo → ruolo", + "ldap_group_base_dn": "DN di base gruppi", + "ldap_group_base_dn_hint": "Lascia vuoto per usare il DN di base principale", + "ldap_group_filter": "Filtro gruppi", + "ldap_group_attr_name": "Attributo nome gruppo", + "ldap_default_role": "Ruolo predefinito", + "ldap_default_role_hint": "Ruolo per utenti i cui gruppi LDAP non corrispondono a nessuna mappatura", + "ldap_role_viewer": "Visualizzatore", + "ldap_role_operator": "Operatore", + "ldap_role_admin": "Amministratore", + "ldap_group_role_map": "Mappa gruppo → ruolo", + "ldap_group_role_map_hint": "Mappa i gruppi LDAP ai ruoli BetterDesk. Formato: GroupDN=ruolo separati da | (pipe). Esempio: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Testa connessione", + "ldap_testing": "Test in corso...", + "ldap_test_success": "Connessione riuscita! Il server LDAP è raggiungibile e le credenziali di bind sono valide.", + "ldap_test_failed": "Connessione non riuscita", + "ldap_save": "Salva configurazione LDAP", + "ldap_saved": "Configurazione LDAP salvata correttamente", + "oidc_title": "Accesso OIDC / OAuth2 (SSO)", + "oidc_desc": "Configura il single sign-on tramite un provider OpenID Connect (Azure AD, Okta, Google, Keycloak ecc.).", + "oidc_enabled": "Abilita autenticazione OIDC", + "oidc_enabled_hint": "Consenti agli utenti di accedere con un provider di identità esterno", + "oidc_provider": "Provider di identità", + "oidc_display_name": "Nome visualizzato del pulsante", + "oidc_display_name_hint": "Testo mostrato sul pulsante di accesso (ad es. Azure AD, Okta)", + "oidc_issuer_url": "URL issuer", + "oidc_issuer_url_hint": "URL issuer OpenID Connect (discovery automatica)", + "oidc_client_id": "ID client", + "oidc_client_secret": "Segreto client", + "oidc_redirect_url": "URL di reindirizzamento (callback)", + "oidc_redirect_url_hint": "Deve corrispondere esattamente alla configurazione nel provider IdP. Di solito: http(s)://tuo-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Ambiti", + "oidc_use_pkce": "Usa PKCE (consigliato)", + "oidc_auto_discovery": "Discovery automatica", + "oidc_allow_signup": "Crea utenti automaticamente", + "oidc_manual_endpoints": "URL endpoint manuali", + "oidc_authorization_url": "Endpoint autorizzazione", + "oidc_token_url": "Endpoint token", + "oidc_userinfo_url": "Endpoint UserInfo", + "oidc_claim_mapping": "Mappatura claim", + "oidc_claim_username": "Claim nome utente", + "oidc_claim_email": "Claim email", + "oidc_claim_name": "Claim nome visualizzato", + "oidc_claim_groups": "Claim gruppi", + "oidc_role_mapping": "Mappatura ruoli", + "oidc_default_role": "Ruolo predefinito", + "oidc_group_role_map": "Mappatura gruppo → ruolo", + "oidc_group_role_map_hint": "Una mappatura per riga: nome_gruppo=ruolo (ad es. admins=admin, operators=operator)", + "oidc_test_discovery": "Testa discovery", + "oidc_testing": "Test in corso...", + "oidc_test_success": "Discovery riuscita! Endpoint risolti.", + "oidc_test_failed": "Discovery non riuscita", + "oidc_issuer_required": "L’URL issuer è obbligatorio per testare la discovery", + "oidc_save": "Salva configurazione OIDC", + "oidc_saved": "Configurazione OIDC salvata correttamente", + "tab_advanced": "Avancè", + "connection_mode_title": "Stratègie de connessione", + "connection_mode_desc": "Contrôlez comment les clients de bureau RustDesk se connectent : P2P direct (hole punch) si possible, ou toujours via relay.", + "connection_mode_label": "Modalità de connessione par dèfaut", + "connection_mode_p2p_first": "P2P en premier (recommandè) — prova la connessione diretta, se rabattre sur le relay", + "connection_mode_relay_only": "Relay uniquement — toutes les sessions utilisent le serveur relay", + "connection_mode_advanced": "Opzioni avancèes", + "connection_mode_fallback_ms": "Dèlai d'expiration de basculement P2P (ms)", + "connection_mode_same_nat_relay": "Forza le relay lorsque les deux pairs condividono la mème IP pubblico (NAT hairpin)", + "connection_mode_network_hint": "P2P nècessite que le port UDP 21116 soit accessible entre les clients. Signal TCP 21116, relay TCP 21117, test NAT 21115 doivent ètre ouverts sur le serveur. Les navigateurs web utilisent toujours le relay.", + "connection_mode_save": "Salva", + "connection_mode_save_restart": "Salva et redèmarrer le serveur", + "connection_mode_saved": "Modalità de connessione enregistrè", + "connection_mode_restart_started": "Redèmarrage du serveur initiè", + "connection_mode_restart_failed": "Èchec du redèmarrage du serveur", + "connection_mode_not_configurable": "Le modalità de connessione ne peut pas ètre modifiè sur ce dèploiement (nessunoe unitè systemd ou docker-compose trouvè)", + "connection_mode_compose_error": "Impossibile de trouver la sezione d'ambiente del server dans docker-compose.yml", + "connection_mode_source_saved": "Enregistrè dans", + "connection_mode_source_defaults": "Utilisation des valeurs par dèfaut du serveur (non modificabiles depuis le pannello)", + "connection_mode_runtime": "Server attivo", + "advanced_title": "Files de configurazione", + "advanced_desc": "Modifiez direttament les files de configurazione du serveur. Le modifiche peuvent nècessiter un redèmarrage des servizios. Une copia di backup est crèèe avant chaque enregistrement.", + "advanced_warning": "Ces files contengono segreti (clès API, mots de passe de base de donnèes, secrets de session). Ne modifiez que si vous sai cosa stai facendo. Une sintassi errata peut empècher le serveur de dèmarrer.", + "advanced_files_label": "File", + "advanced_select_file": "Sèlectionnez un file dall'elenco pour mostra ou modifica son contenuto.", + "advanced_reload": "Ricarica", + "advanced_save": "Salva le file", + "advanced_apply_restart": "Applica (redèmarrer le servizio)", + "advanced_saved": "File de configurazione enregistrè", + "advanced_restart_after_save": "Configurazione enregistrèe. Redèmarrer le servizio concernè maintenant pour que le modifiche entrino in vigore ?", + "advanced_restart_confirm": "Redèmarrer le(s) servizio(s) BetterDesk concernè(s) ? Les connessiones actives peuvent ètre brevemente interrotte.", + "advanced_restart_console_confirm": "Redèmarrer le servizio de console web ? Votre session de navigateur se dèconnectera brevemente et la page se ricaricaa lorsque la console sera de indietro.", + "advanced_restart_started": "Redèmarrage du servizio initiè", + "advanced_restart_done": "Console redèmarrèe — recaricamento de la page…", + "advanced_restart_polling": "En attesa du indietro en ligne de la console…", + "advanced_restart_timeout": "Le redèmarrage a ètè envoyè mais la console n'a pas rèpondu in tempo. Vèrifiez les journaux systemd/NSSM et rechargez manualmente.", + "advanced_restart_failed": "Èchec du redèmarrage du servizio (privilegi insufficienti ou servizio non installè)", + "advanced_save_confirm": "Salva le modifiche de ce file ? Une sauvegarde de la version prècèdente sera crèèe.", + "advanced_unsaved_confirm": "Vous avez des modifiche non enregistrèes. Les ignorer ?", + "advanced_no_files": "Nessuno file de configurazione disponibile sur ce système.", + "advanced_readonly": "sola lettura", + "advanced_missing": "mancante", + "advanced_new_file": "Nouveau file (non crèè jusqu'à l'enregistrement)", + "advanced_new_file_hint": "Nouveau file — aggiungi contenutoto et enregistrez", + "advanced_backup_created": "sauvegarde crèèe", + "advanced_restart_console": "Redèmarrez le servizio de console web (p. ex. systemctl restart betterdesk-console) pour que le modifiche .env entrino in vigore.", + "advanced_restart_goserver": "Redèmarrez le serveur Go BetterDesk pour que le modifiche de la lista di blocco soient chargèes.", + "advanced_restart_systemd": "Après avoir modifiè des unitès systemd, exècutez : systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Redèmarrez le servizio concernè pour que le modifiche entrino in vigore.", + "advanced_error_unknown": "File de configurazione sconosciuto", + "advanced_error_not_found": "Le file non esiste", + "advanced_error_not_file": "Le percorso n'est pas un file ordinaire", + "advanced_error_too_large": "Le file dèpasse la dimensione massima modificabile (512 Ko)", + "advanced_error_binary": "Les files binari ne peuvent pas ètre modifiès dans le pannello", + "advanced_error_invalid": "Contenu de file invalide", + "advanced_error_not_writable": "Le file n'est pas accessible en ècriture par le processus de console", + "advanced_file_console-env": "Ambiente console (.env)", + "advanced_file_console-env-local": "Override console (.env.local)", + "advanced_file_go-blocklist": "Liste de blocage du serveur Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unità di servizio)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unità di servizio)", + "advanced_file_console-session-secret": "Secret de session de la console (.session_secret)", + "advanced_file_go-audit-log": "Journal d'audit du serveur Go (audit.jsonl)", + "advanced_file_build-env": "Environnement de compilation de l'agent (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (configurazione supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestrazione)", + "advanced_restart_none": "Nessuno redèmarrage de servizio è richiesto pour ce file.", + "enrollment_title": "Inscription de il dispositivo (RustDesk)", + "enrollment_desc": "Contrôlez comment les nuovi client RustDesk si registrano et comment les opèrateurs li approvant dans la page des demandes d'inscription.", + "enrollment_require_approval": "Approbation de l'opèrateur requise (modalità gèrè)", + "enrollment_require_approval_hint": "Lorsqu'activè, les clients sconosciutos vengono messi in coda d'attesa jusqu'à ce qu'un opèrateur li approva dans les demandes d'inscription.", + "enrollment_rich_approve": "Formulaire d'approbation complet (nome, cartella, groupes, tags)", + "enrollment_rich_approve_hint": "Affiche un dialogue dètaillè lors de l'approbation des demandes d'inscription ou d'enregistrement LAN.", + "enrollment_tag_picker": "Sèlectionner des tags parmi les tags d'dispositivi existants", + "enrollment_tag_picker_hint": "Permet aux opèrateurs de sèlectionner des tags dall'elenco utilisèe sur la page Dispositivi plutôt que de les saisir uniquement.", + "enrollment_open_requests": "Demandes d'inscription ouvertes", + "enrollment_pending_count": "{count} demande(s) d'inscription en attesa" + }, + "audit": { + "time": "Ora", + "user": "Utente", + "action": "Azione", + "details": "Dettagli", + "action_login": "Login", + "action_login_failed": "Accesso non riuscito", + "action_logout": "Logout", + "action_password_change": "Password cambiata", + "action_2fa_enable": "2FA abilitata", + "action_2fa_disable": "2FA disabilitata", + "action_user_create": "Utente creato", + "action_user_update": "Utente aggiornato", + "action_user_delete": "Utente eliminato", + "action_settings_update": "Impostazioni aggiornate", + "action_device_ban": "Dispositivo bloccato", + "action_device_unban": "Blocco dispositivo rimosso", + "action_device_delete": "Dispositivo eliminato" + }, + "generator": { + "title": "Generatore configurazione client", + "subtitle": "Genera configurazione per client RustDesk", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Funzione anticipata — il generatore di bundle agente è in sviluppo attivo.", + "config_options": "Opzioni di configurazione", + "server_address": "Indirizzo server", + "server_address_hint": "Dominio o indirizzo IP del tuo server", + "custom_port": "Porta personalizzata", + "port_hint": "Lascia vuoto per impostazione predefinita (21116)", + "relay_server": "Server relay", + "relay_placeholder": "Uguale al server ID se vuoto", + "relay_hint": "Opzionale: indirizzo server relay separato", + "include_key": "Includi chiave pubblica nella configurazione", + "generate": "Genera configurazione", + "output": "Output configurazione", + "usage_title": "Dettagli connessione", + "generated": "Configurazione generata", + "server_required": "L'indirizzo server è obbligatorio", + "nothing_to_copy": "Genera prima una configurazione", + "bundles_title": "Pacchetti agente", + "new_bundle": "Nuovo pacchetto", + "editor_title": "Editor pacchetto", + "empty_state": "Seleziona un pacchetto a sinistra oppure creane uno nuovo per iniziare.", + "loading": "Caricamento…", + "no_bundles": "Nessun pacchetto. Crea il primo pacchetto.", + "bundle_name": "Nome pacchetto", + "bundle_name_hint": "Solo etichetta interna — non viene mostrata agli utenti finali.", + "short_link": "Link di download breve", + "short_link_hint": "Usato nell’URL pubblico (/d/…). Solo lettere minuscole, numeri e trattini (2–32 caratteri). Compilato automaticamente dal nome del pacchetto — abbrevialo per condividerlo più facilmente (es. acme).", + "branding_section": "Branding", + "company_name": "Nome azienda/marchio", + "short_text": "Descrizione breve", + "contact_email": "Email di contatto", + "contact_phone": "Telefono di contatto", + "contact_url": "Sito web di contatto", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG o WebP. Massimo 256 KB.", + "logo_clear": "Rimuovi logo", + "primary_color": "Colore primario", + "accent_color": "Colore intestazione", + "default_lang": "Lingua predefinita", + "allow_unattended": "Consenti accesso non presidiato", + "allow_unattended_hint": "Quando è attivo, l’agente mostra una password persistente per l’accesso operatore.", + "save": "Salva pacchetto", + "revoke": "Revoca", + "unrevoke": "Riattiva", + "revoked": "Revocato", + "preview_title": "Anteprima live", + "preview_hint": "Vista approssimativa della finestra agente per gli utenti finali.", + "preview_default_name": "Supporto BetterDesk", + "preview_status_ready": "Pronto", + "preview_id": "Il tuo ID", + "preview_password": "Parola d’accesso", + "preview_chat": "Chatta con il supporto", + "preview_settings": "Impostazioni (solo admin)", + "preview_quit": "Esci (solo admin)", + "download_link_title": "Link di download", + "download_link_hint": "Condividi questo link con gli utenti finali. Vedranno una pagina di download con il tuo branding. I vecchi link hex continuano a funzionare dopo la modifica del link breve.", + "open_portal": "Apri", + "created": "Pacchetto creato", + "saved": "Pacchetto salvato", + "deleted": "Pacchetto eliminato", + "revoked_ok": "Pacchetto revocato", + "unrevoked_ok": "Pacchetto riattivato", + "link_copied": "Link copiato negli appunti", + "copy_failed": "Copia automatica non riuscita — copia manualmente", + "unsaved_confirm": "Eliminare le modifiche non salvate?", + "confirm_revoke": "Revocare questo pacchetto? Il link di download smetterà di funzionare.", + "confirm_unrevoke": "Riattivare questo pacchetto?", + "confirm_delete": "Eliminare definitivamente questo pacchetto? L’azione non può essere annullata.", "errors": { - "forbidden_title": "Accesso negato", - "forbidden_message": "Non hai i permessi per accedere a questa pagina.", - "not_found_title": "Pagina non trovata", - "not_found_message": "La pagina che cerchi non esiste o è stata spostata.", - "server_error_title": "Errore del server", - "server_error_message": "Qualcosa è andato storto. Riprova più tardi.", - "go_home": "Vai alla home", - "try_again": "Riprova", - "load_devices_failed": "Caricamento dispositivi fallito", - "load_key_failed": "Caricamento chiave fallito", - "load_qr_failed": "Caricamento QR fallito", - "load_audit_failed": "Caricamento registro di audit fallito", - "load_users_failed": "Caricamento utenti fallito", - "load_folders_failed": "Caricamento cartelle fallito", - "download_failed": "Download fallito", - "logout_failed": "Disconnessione fallita", - "password_change_failed": "Cambio password fallito", - "language_change_failed": "Cambio lingua fallito", - "ban_failed": "Ban del dispositivo fallito", - "unban_failed": "Sban del dispositivo fallito", - "delete_failed": "Eliminazione dispositivo fallita", - "change_id_failed": "Cambio ID dispositivo fallito", - "bulk_delete_failed": "Eliminazione dispositivi fallita", - "sync_failed": "Sincronizzazione fallita", - "error": "Errore", - "not_found": "Non trovato", - "server_error": "Errore del server", - "load_device_failed": "Impossibile caricare il dispositivo", - "load_orgs_failed": "Impossibile caricare le organizzazioni" + "validation_failed": "Validazione non riuscita", + "name_required": "Il nome del pacchetto è obbligatorio", + "company_name_required": "Il nome azienda è obbligatorio", + "logo_invalid": "Il logo deve essere un file immagine valido", + "logo_too_large": "Il logo può essere al massimo 256 KB", + "logo_read_failed": "Impossibile leggere il file logo", + "primary_color_invalid": "Il colore primario deve essere un valore hex (ad es. #2563eb)", + "accent_color_invalid": "Il colore intestazione deve essere un valore hex (ad es. #1e293b)", + "contact_url_invalid": "Il sito web di contatto deve essere un URL valido", + "server_host_required": "L'adresse pubblico du serveur è obbligatorio", + "server_host_invalid": "Entrez un nome de domaine ou une indirizzo IPv4 valido", + "token_failed": "Impossibile de gènèrer le token di registrazione — vèrifiez la connectivitè du serveur", + "rebuild_revoked": "Impossibile de reconstruire un paquet rèvoquè — rèactivez-le d'abord", + "slug_invalid": "Il link breve può contenere solo lettere minuscole, numeri e trattini", + "slug_too_short": "Il link breve deve avere almeno 2 caratteri", + "slug_too_long": "Il link breve può avere al massimo 32 caratteri", + "slug_taken": "Questo link breve è già usato da un altro pacchetto" }, - "remote": { - "title": "Desktop remoto", - "connecting": "Connessione...", - "waiting_password": "In attesa della password", - "authenticating": "Autenticazione...", - "streaming": "Connesso", - "disconnected": "Disconnesso", - "error": "Errore", - "status_idle": "Inattivo", - "password_required": "Password richiesta", - "enter_password_for": "Inserisci la password per il dispositivo", - "password_placeholder": "Password dispositivo", - "connect": "Connetti", - "reconnect": "Riconnetti", - "disconnect": "Disconnetti", - "back_to_devices": "Torna ai dispositivi", - "fullscreen": "Schermo intero", - "toggle_audio": "Attiva/disattiva audio", - "send_keys": "Invia tasti", - "scale_mode": "Modalità scala", - "scale_fit": "Adatta alla finestra", - "scale_fill": "Riempi finestra", - "scale_original": "Dimensione originale (1:1)", - "scale_stretch": "Allunga", - "actions": "Azioni", - "lock_screen": "Blocca schermo", - "restart_remote": "Riavvia dispositivo remoto", - "refresh_screen": "Aggiorna schermo", - "clipboard_paste": "Incolla dagli appunti", - "block_input": "Blocca input", - "display_settings": "Impostazioni schermo", - "image_quality": "Qualità immagine", - "quality_best": "Migliore qualità", - "quality_balanced": "Bilanciata", - "quality_low": "Prestazioni", - "show_cursor": "Mostra cursore remoto", - "lock_after_session": "Blocca dopo la sessione", - "privacy_mode": "Modalità privacy", - "disable_clipboard": "Disattiva appunti", - "chat": "Chat", - "chat_placeholder": "Scrivi un messaggio...", - "record": "Registra schermo", - "view_only": "Solo visualizzazione", - "pin_toolbar": "Fissa barra strumenti", - "monitors": "Monitors", - "select_monitor": "Seleziona monitor", - "quality_speed": "Velocità", - "quality_quality": "Qualità", - "recording_started": "Registrazione avviata", - "recording_stopped": "Registrazione interrotta", - "download_recording": "Scarica registrazione", - "e2e_encrypted": "Crittografia end-to-end attiva", - "e2e_key_exchange": "Scambio chiavi in corso...", - "confirm_restart": "Sei sicuro di voler riavviare il dispositivo remoto?", - "webcodecs_not_supported": "Il tuo browser non supporta l'API WebCodecs. Usa Chrome 94+ o Edge 94+.", - "webcodecs_insecure_context": "WebCodecs non disponibile su HTTP. Il video usa il decoder software. Per prestazioni migliori, usa HTTPS.", - "webcodecs_fallback_active": "Decoder video software attivo (prestazioni limitate)", - "click_to_start": "Clicca per avviare", - "autoplay_blocked": "Il browser richiede l'interazione dell'utente per avviare video e audio.", - "start_playback": "Avvia riproduzione", - "new_connection": "Nuova connessione", - "device_id_placeholder": "Inserire ID dispositivo", - "http_warning": "Modalità HTTP: limitata alla decodifica software H.264 (~15 FPS). Usa HTTPS per prestazioni complete (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Trasferimento file", - "file_upload": "Carica", - "file_download": "Scarica", - "file_empty": "Questa cartella è vuota", - "file_transfers": "Trasferimenti", - "file_complete": "Completato", - "file_error": "Trasferimento fallito", - "file_show_hidden": "Mostra file nascosti", - "file_new_folder": "Nuova cartella", - "file_new_folder_prompt": "Inserisci nome cartella:", - "file_parent": "Cartella superiore", - "file_root": "Radice", - "file_rename": "Rinomina", - "file_rename_prompt": "Inserisci nuovo nome:", - "file_delete_confirm": "Sei sicuro di voler eliminare questo elemento?", - "file_cancelled": "Trasferimento annullato", - "2fa_required": "Codice a due fattori richiesto", - "2fa_hint": "Inserisci il codice TOTP a sei cifre per continuare la sessione.", - "2fa_invalid": "Codice 2FA non valido", - "verify": "Verify", - "use_cdap_fallback": "Usa visualizzatore CDAP", - "cdap_fallback_hint": "Apri il visualizzatore leggero JPEG-polling che usa bd-signal/CDAP invece del relay RustDesk. Utile quando il peer è offline sul relay ma raggiungibile tramite il canale di gestione dell'agente.", - "clipboard_empty": "Gli appunti sono vuoti", - "clipboard_denied": "Accesso agli appunti negato. È richiesto HTTPS oppure il permesso non è stato concesso.", - "file_loading": "Caricamento...", - "file_timeout": "Il dispositivo remoto non ha risposto in tempo. Il trasferimento file potrebbe non essere supportato o potrebbe essere disabilitato.", - "codec": "Codec video", - "codec_auto": "Automatico (consigliato)" + "legacy_title": "Generatore configurazione client", + "connection_section": "Connessione au serveur", + "server_host": "Adresse pubblico du serveur", + "server_host_placeholder": "support.example.com ou 203.0.113.10", + "server_host_hint": "Nome de domaine ou IP pubblico où les utenti finaux joignent votre serveur BetterDesk. Le port est pris dans la configurazione de la console.", + "use_https": "Utiliser HTTPS / WSS (recommandè)", + "enrollment_token": "Enregistrement de il dispositivo", + "enrollment_token_pending": "Per dispositivo après approbation", + "enrollment_token_set": "Per dispositivo — approva in Registrazioni", + "enrollment_token_hint": "Ogni installazione s'enregistre d'elle-mème. Approuvez les nouveaux dispositivi dans le pannello Inscriptions ; le serveur dèlivre ensuite une clè d'accès unique per computer.", + "enrollment_per_device": "Per dispositivo — approva in Registrazioni", + "background_color": "Sfondo de la fenètre", + "surface_color": "Sfondo de la carte", + "text_color": "Colore du texte", + "text_muted_color": "Colore du texte attènuè", + "status_ready_color": "Colore de l'indicateur prèt", + "header_text_color": "Colore du texte d'en-tète", + "builds_title": "Compilations client", + "builds_hint": "Installateurs compilès sur ce serveur pour chaque plateforme. Reconstruire après avoir corrigè les erreurs de la chaîne d'outils ou mis à jour les sources de l'agent.", + "builds_loading": "Caricamento de l'ètat de compilation…", + "builds_empty": "Nessuno build en file d'attesa — enregistrez le paquet ou cliquez sur Reconstruire tout.", + "rebuild_all": "Reconstruire tout", + "rebuilding_all": "Mise en file d'attesa des reconstructions…", + "rebuild_queued": "Toutes les compilations de plateformes mises en file d'attesa", + "rebuild_confirm": "Ricompila tutti les installer di piattaforma pour ce paquet ? Les artefacts prèts existants seront remplacès.", + "build_status_ready": "Prèt", + "build_status_pending": "En file d'attesa", + "build_status_building": "En cours de compilation", + "build_status_failed": "Èchouè", + "builds_summary": "{{ready}} prèt · {{pending}} en file d'attesa · {{building}} en compilation · {{failed}} èchouè", + "build_error_hint": "Erreur de compilation", + "preview_help": "Richiedi aiuto" + }, + "server": { + "port": "Porta", + "api_port": "Porta API", + "id_server": "Server ID", + "relay_server": "Server relay", + "api_key": "Chiave API" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Bannato", + "running": "In esecuzione", + "stopped": "Fermato", + "unknown": "Sconosciuto", + "checking": "Verifica...", + "label": "Status", + "no_signal": "Nessun segnale" + }, + "actions": { + "refresh": "Aggiorna", + "copy": "Copia", + "connect": "Connetti", + "connect_desktop": "Connetti tramite client desktop", + "remote_viewer": "Visualizzatore remoto", + "web_remote": "Desktop remoto web", + "details": "Dettagli", + "edit": "Modifica", + "delete": "Elimina", + "ban": "Banna", + "unban": "Sbanna", + "save": "Salva", + "cancel": "Annulla", + "confirm": "Conferma", + "close": "Chiudi", + "clear": "Cancella", + "ok": "OK", + "saved": "Salvato con successo", + "back": "Indietro", + "create": "Crea", + "dismiss": "Ignora", + "view_all": "Vedi tutto", + "cdap_viewer": "Visualizzatore snapshot CDAP", + "add": "Aggiungi", + "remove": "Rimuovi" + }, + "time": { + "just_now": "Proprio ora", + "seconds_ago": "{count} secondo/i fa", + "minutes_ago": "{count} minuto/i fa", + "hours_ago": "{count} ora/e fa", + "days_ago": "{count} giorno/i fa", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Gestione utenti", + "subtitle": "Gestisci utenti e permessi della console", + "add_user": "Aggiungi utente", + "edit_user": "Modifica utente", + "username": "Nome utente", + "username_placeholder": "Inserisci il nome utente", + "username_hint": "3-32 caratteri, solo lettere, numeri e underscore", + "password": "Parola d’accesso", + "password_placeholder": "Inserisci la password", + "password_hint": "Minimo 8 caratteri con maiuscole, minuscole, numeri e simboli", + "password_leave_empty": "Lascia vuoto per mantenere quella attuale", + "role": "Ruolo", + "role_admin": "Amministratore", + "role_operator": "Operatore", + "role_viewer": "Osservatore", + "role_hint": "Gli osservatori possono solo visualizzare i dati, gli operatori possono gestire i dispositivi, gli amministratori hanno accesso completo", + "created": "Creato", + "last_login": "Ultimo accesso", + "never": "Mai", + "actions": "Azioni", + "create": "Crea utente", + "edit": "Modifica", + "reset_password": "Reimposta password", + "new_password": "Nuova password", + "delete_title": "Elimina utente", + "delete_confirm": "Sei sicuro di voler eliminare l'utente {username}?", + "delete_success": "Utente eliminato con successo", + "user_created": "Utente creato con successo", + "user_updated": "Utente aggiornato con successo", + "password_reset_success": "Password reimpostata con successo", + "empty_title": "Nessun utente trovato", + "empty_text": "Aggiungi utenti per gestire l'accesso alla console", + "fill_required": "Compila tutti i campi obbligatori", + "invalid_username": "Il nome utente deve essere di 3-32 caratteri, solo lettere, numeri e underscore", + "username_exists": "Il nome utente esiste già", + "weak_password": "La password è troppo debole", + "password_too_short": "La password deve avere almeno 8 caratteri", + "invalid_role": "Ruolo non valido", + "cannot_demote_self": "Non puoi declassare te stesso", + "cannot_delete_self": "Non puoi eliminare il tuo account", + "last_admin": "Non è possibile eliminare l'ultimo amministratore", + "admin_only": "Questa funzione è disponibile solo per gli amministratori", + "password_required": "La password è obbligatoria", + "not_found": "Utente non trovato", + "strength_weak": "Debole", + "strength_medium": "Media", + "strength_strong": "Forte", + "security_tips_title": "Best practice di sicurezza", + "tip_strong_passwords": "Usa password forti e uniche per ogni utente", + "tip_unique_accounts": "Crea account individuali per ogni persona", + "tip_viewer_role": "Usa il ruolo osservatore per gli utenti che necessitano solo di accesso in lettura", + "tip_operator_role": "Usa il ruolo operatore per gli utenti che devono gestire i dispositivi ma non gli utenti", + "tip_audit_logs": "Controlla regolarmente i registri di audit per attività sospette", + "role_pro": "Professionale", + "role_super_admin": "Super Admin", + "role_server_admin": "Amministratore server", + "role_global_admin": "Amministratore globale", + "organizations": "Organizzazioni", + "user_organizations": "Organizzazioni per {username}", + "no_organizations": "Nessuna organizzazione", + "org_removed": "Utente rimosso dall’organizzazione", + "server_role_label": "Ruolo server", + "server_role_hint": "Definisce cosa può fare l’utente nell’intera console (accesso al pannello, configurazione server, audit e altro).", + "org_membership_section": "Appartenenza organizzazioni", + "org_membership_hint": "Un utente può appartenere a più organizzazioni. Il ruolo organizzativo definisce i permessi solo dentro quella organizzazione ed è separato dal ruolo server sopra.", + "column_organizations": "Organizzazioni", + "no_orgs_short": "—", + "org_count_one": "{count} organizzazione", + "org_count_many": "{count} organizzazioni", + "all_orgs_assigned": "L’utente appartiene già a tutte le organizzazioni.", + "user_groups": "Gruppi utente", + "user_groups_hint": "I gruppi utente possono concedere accesso ai gruppi di dispositivi selezionati.", + "loading_user_groups": "Caricamento gruppi utente...", + "no_user_groups": "Nessun gruppo utente disponibile", + "create_user_group": "Crea gruppo", + "edit_user_group": "Modifica gruppo utente", + "delete_user_group": "Elimina gruppo utente", + "delete_user_group_confirm": "Eliminare il gruppo utente {name}? I membri perderanno l’accesso concesso tramite questo gruppo.", + "user_group_created": "Gruppo utente creato", + "user_group_updated": "Gruppo utente aggiornato", + "user_group_deleted": "Gruppo utente eliminato", + "user_group_not_found": "Gruppo utente non trovato", + "group_name": "Nome gruppo", + "group_name_placeholder": "Gruppo operatori", + "group_note": "Note", + "group_note_placeholder": "Nota opzionale", + "group_name_required": "Il nome gruppo è obbligatorio", + "group_members_count": "{count} membri", + "provider": "Provider", + "provider_local": "Local", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Gèrè par le provider d'identitè", + "provider_managed_hint": "Ce compte est gèrè par un provider d'identitè esterno (LDAP/AD ou SSO). Le password et le rôle sont contrôlès par le provider et ne peuvent pas ètre modifiès ici." + }, + "folders": { + "title": "Cartelle", + "create": "Crea cartella", + "edit": "Modifica cartella", + "delete": "Elimina cartella", + "name": "Nome cartella", + "name_placeholder": "Inserisci il nome della cartella", + "name_required": "Il nome della cartella è obbligatorio", + "name_too_long": "Il nome della cartella è troppo lungo (max 50 caratteri)", + "color": "Colore", + "icon": "Icona", + "not_found": "Cartella non trovata", + "delete_confirm": "Sei sicuro di voler eliminare questa cartella? I dispositivi verranno disassegnati.", + "delete_success": "Cartella eliminata con successo", + "created": "Cartella creata con successo", + "updated": "Cartella aggiornata con successo", + "no_devices_selected": "Nessun dispositivo selezionato", + "devices_moved": "Dispositivi spostati con successo", + "device_assigned": "Dispositivo assegnato alla cartella", + "unassigned": "Non assegnato", + "all_devices": "Tutti i dispositivi", + "drag_hint": "Trascina i dispositivi nelle cartelle per organizzarli", + "move_to": "Sposta in", + "toggle_sidebar": "Attiva/disattiva barra laterale" + }, + "errors": { + "forbidden_title": "Accesso negato", + "forbidden_message": "Non hai i permessi per accedere a questa pagina.", + "not_found_title": "Pagina non trovata", + "not_found_message": "La pagina che cerchi non esiste o è stata spostata.", + "server_error_title": "Errore del server", + "server_error_message": "Qualcosa è andato storto. Riprova più tardi.", + "go_home": "Vai alla home", + "try_again": "Riprova", + "load_devices_failed": "Caricamento dispositivi fallito", + "load_key_failed": "Caricamento chiave fallito", + "load_qr_failed": "Caricamento QR fallito", + "load_audit_failed": "Caricamento registro di audit fallito", + "load_users_failed": "Caricamento utenti fallito", + "load_folders_failed": "Caricamento cartelle fallito", + "download_failed": "Download fallito", + "logout_failed": "Disconnessione fallita", + "password_change_failed": "Cambio password fallito", + "language_change_failed": "Cambio lingua fallito", + "ban_failed": "Ban del dispositivo fallito", + "unban_failed": "Sban del dispositivo fallito", + "delete_failed": "Eliminazione dispositivo fallita", + "change_id_failed": "Cambio ID dispositivo fallito", + "bulk_delete_failed": "Eliminazione dispositivi fallita", + "sync_failed": "Sincronizzazione fallita", + "error": "Errore", + "not_found": "Non trovato", + "server_error": "Errore del server", + "load_device_failed": "Impossibile caricare il dispositivo", + "load_orgs_failed": "Impossibile caricare le organizzazioni" + }, + "remote": { + "title": "Desktop remoto", + "connecting": "Connessione...", + "waiting_password": "In attesa della password", + "authenticating": "Autenticazione...", + "streaming": "Connesso", + "disconnected": "Disconnesso", + "error": "Errore", + "status_idle": "Inattivo", + "password_required": "Password richiesta", + "enter_password_for": "Inserisci la password per il dispositivo", + "password_placeholder": "Password dispositivo", + "connect": "Connetti", + "reconnect": "Riconnetti", + "disconnect": "Disconnetti", + "back_to_devices": "Torna ai dispositivi", + "fullscreen": "Schermo intero", + "toggle_audio": "Attiva/disattiva audio", + "send_keys": "Invia tasti", + "scale_mode": "Modalità scala", + "scale_fit": "Adatta alla finestra", + "scale_fill": "Riempi finestra", + "scale_original": "Dimensione originale (1:1)", + "scale_stretch": "Allunga", + "actions": "Azioni", + "lock_screen": "Blocca schermo", + "restart_remote": "Riavvia dispositivo remoto", + "refresh_screen": "Aggiorna schermo", + "clipboard_paste": "Incolla dagli appunti", + "block_input": "Blocca input", + "display_settings": "Impostazioni schermo", + "image_quality": "Qualità immagine", + "quality_best": "Migliore qualità", + "quality_balanced": "Bilanciata", + "quality_low": "Prestazioni", + "show_cursor": "Mostra cursore remoto", + "lock_after_session": "Blocca dopo la sessione", + "privacy_mode": "Modalità privacy", + "disable_clipboard": "Disattiva appunti", + "chat": "Chat", + "chat_placeholder": "Scrivi un messaggio...", + "record": "Registra schermo", + "view_only": "Solo visualizzazione", + "pin_toolbar": "Fissa barra strumenti", + "monitors": "Monitors", + "select_monitor": "Seleziona monitor", + "quality_speed": "Velocità", + "quality_quality": "Qualità", + "recording_started": "Registrazione avviata", + "recording_stopped": "Registrazione interrotta", + "download_recording": "Scarica registrazione", + "e2e_encrypted": "Crittografia end-to-end attiva", + "e2e_key_exchange": "Scambio chiavi in corso...", + "confirm_restart": "Sei sicuro di voler riavviare il dispositivo remoto?", + "webcodecs_not_supported": "Il tuo browser non supporta l'API WebCodecs. Usa Chrome 94+ o Edge 94+.", + "webcodecs_insecure_context": "WebCodecs non disponibile su HTTP. Il video usa il decoder software. Per prestazioni migliori, usa HTTPS.", + "webcodecs_fallback_active": "Decoder video software attivo (prestazioni limitate)", + "click_to_start": "Clicca per avviare", + "autoplay_blocked": "Il browser richiede l'interazione dell'utente per avviare video e audio.", + "start_playback": "Avvia riproduzione", + "new_connection": "Nuova connessione", + "device_id_placeholder": "Inserire ID dispositivo", + "http_warning": "Modalità HTTP: limitata alla decodifica software H.264 (~15 FPS). Usa HTTPS per prestazioni complete (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Trasferimento file", + "file_upload": "Carica", + "file_download": "Scarica", + "file_empty": "Questa cartella è vuota", + "file_transfers": "Trasferimenti", + "file_complete": "Completato", + "file_error": "Trasferimento fallito", + "file_show_hidden": "Mostra file nascosti", + "file_new_folder": "Nuova cartella", + "file_new_folder_prompt": "Inserisci nome cartella:", + "file_parent": "Cartella superiore", + "file_root": "Radice", + "file_rename": "Rinomina", + "file_rename_prompt": "Inserisci nuovo nome:", + "file_delete_confirm": "Sei sicuro di voler eliminare questo elemento?", + "file_cancelled": "Trasferimento annullato", + "2fa_required": "Codice a due fattori richiesto", + "2fa_hint": "Inserisci il codice TOTP a sei cifre per continuare la sessione.", + "2fa_invalid": "Codice 2FA non valido", + "verify": "Verify", + "use_cdap_fallback": "Usa visualizzatore CDAP", + "cdap_fallback_hint": "Apri il visualizzatore leggero JPEG-polling che usa bd-signal/CDAP invece del relay RustDesk. Utile quando il peer è offline sul relay ma raggiungibile tramite il canale di gestione dell'agente.", + "clipboard_empty": "Gli appunti sono vuoti", + "clipboard_denied": "Accesso agli appunti negato. È richiesto HTTPS oppure il permesso non è stato concesso.", + "file_loading": "Caricamento...", + "file_timeout": "Il dispositivo remoto non ha risposto in tempo. Il trasferimento file potrebbe non essere supportato o potrebbe essere disabilitato.", + "codec": "Codec video", + "codec_auto": "Automatico (consigliato)" + }, + "branding": { + "identity_title": "Identità del marchio", + "identity_desc": "Personalizza il nome e la descrizione dell'applicazione mostrati nella console", + "app_name": "Nome applicazione", + "app_description": "Descrizione applicazione", + "logo_title": "Logo", + "logo_desc": "Scegli come appare il tuo logo nella barra laterale e nella pagina di accesso", + "logo_type_icon": "Icona Material", + "logo_type_svg": "Codice SVG", + "logo_type_image": "URL immagine", + "logo_icon_name": "Nome icona", + "logo_icon_hint": "Inserisci un nome Material Icons (es: dns, cloud, security). Vedi fonts.google.com/icons", + "logo_svg_code": "Codice SVG", + "logo_svg_hint": "Incolla il tuo markup SVG qui. Supporta elementi completi con percorsi e stili.", + "logo_image_upload": "Carica immagine", + "logo_image_choose": "Scegli file immagine", + "logo_image_hint": "PNG, JPG, GIF, WebP o SVG. Max 1,5 MB. L'immagine viene salvata come dati base64.", + "logo_image_url": "Dati / URL immagine", + "logo_image_url_hint": "Compilato automaticamente al caricamento o incolla un URL manualmente.", + "logo_image_too_large": "L'immagine è troppo grande. Dimensione massima: 1,5 MB.", + "logo_image_invalid_type": "Tipo di file non valido. Usa PNG, JPG, GIF, WebP o SVG.", + "preview": "Anteprima", + "colors_title": "Schema colori", + "colors_desc": "Personalizza la palette dei colori. Lascia vuoto per i valori predefiniti.", + "colors_backgrounds": "Sfondi", + "colors_text": "Testo", + "colors_accents": "Colori accento", + "colors_borders": "Bordi", + "import_export_title": "Importa / Esporta", + "import_export_desc": "Salva il tuo tema come file JSON o importane uno da un'altra istanza", + "export_theme": "Esporta tema", + "import_theme": "Importa tema", + "reset_defaults": "Ripristina impostazioni predefinite", + "save_branding": "Salva branding", + "saved": "Branding salvato con successo. Ricaricamento...", + "exported": "Tema esportato", + "imported": "Tema importato con successo. Ricaricamento...", + "import_error": "Importazione tema fallita. Formato file non valido.", + "reset_confirm": "Sei sicuro di voler ripristinare il branding alle impostazioni predefinite? Questa azione non può essere annullata.", + "reset_success": "Branding ripristinato alle impostazioni predefinite. Ricaricamento...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Testo principale mostrato come logo del marchio", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Testo secondario sotto il logo (ad es. nome prodotto o slogan)", + "logo_upload_success": "Logo caricato correttamente.", + "typography_title": "Typography", + "typography_desc": "Scegli i font per titoli e testo. I font vengono scaricati sul server per l’hosting locale.", + "font_heading": "Font titoli", + "font_heading_hint": "Usato per titoli (H1-H6) e logo testuale", + "font_body": "Body Font", + "font_body_hint": "Usato per testo e componenti UI", + "font_search_placeholder": "Cerca font...", + "font_system_default": "Predefinito di sistema", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "Font scaricati sul server", + "powered_by": "Propulsè par", + "background_title": "Sfondo et apparence", + "background_desc": "Dèfinissez un fond d'ècran, un dègradè ou un fond uni pour la console. Les cartes flottent au-dessus.", + "bg_type_none": "Nessuno", + "bg_type_color": "Colore unie", + "bg_type_gradient": "Dègradè", + "bg_type_image": "Immagine", + "bg_color": "Colore d'sfondo", + "bg_gradient": "Dègradè CSS", + "bg_gradient_hint": "Tout dègradè CSS valide, p. ex. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Tèlècharger l'immagine d'sfondo", + "bg_image_choose": "Choisir un file immagine", + "bg_image_hint": "PNG, JPG, WebP ou GIF. 8 Mo maximum. Stockè sur le serveur.", + "bg_image_url": "Percorso de l'immagine / URL", + "bg_size": "Dimensionnement de l'immagine", + "bg_size_cover": "Copri (remplir l'ècran)", + "bg_size_contain": "Contenu (ajuster)", + "bg_size_auto": "Automatico (originale)", + "bg_blur": "Sfocatura d'sfondo", + "bg_overlay": "Sovrapposizione sombre", + "bg_overlay_hint": "Scurisce l'sfondo pour une meilleure lisibilitè du texte.", + "bg_image_too_large": "L'immagine est trop grande. La dimensione massima est de 8 Mo.", + "bg_image_invalid_type": "Type de file invalide. Utilisez PNG, JPG, WebP ou GIF.", + "bg_upload_success": "Immagine d'sfondo tèlèchargèe avec succès.", + "login_title": "Page de connessione", + "login_desc": "Personalizza le titolo, le sous-titolo et l'sfondo de l'ècran de connessione.", + "login_heading": "Titolo de connessione", + "login_heading_placeholder": "Bon indietro", + "login_subheading": "Sous-titolo de connessione", + "login_subheading_placeholder": "Accedi à votre compte", + "login_bg_inherit": "Come la console", + "agent_title": "Page de tèlècaricamento de l'agent", + "agent_desc": "Personalizza le portail de tèlècaricamento d'agent public affichè aux utenti finaux.", + "agent_show_powered": "Mostra « Propulsè par BetterDesk »", + "agent_show_powered_hint": "Mostra l'attribuzione BetterDesk dans le piè di pagina du portail de tèlècaricamento.", + "footer_title": "Piè di pagina et copyright", + "footer_desc": "Ajoutez une ligne de piè di pagina personnalisèe affichèe sur l'ècran de connessione et dans la barre latèrale de la console.", + "footer_text": "Texte du piè di pagina", + "footer_text_hint": "p. ex. une mention de droit d'auteur ou le nome de l'entreprise.", + "show_powered": "Mostra l'attribuzione « BetterDesk »", + "show_powered_hint": "Mostra le nome et la version de BetterDesk dans le piè di pagina de connessione et la barre latèrale.", + "custom_css_title": "CSS personnalisè", + "custom_css_desc": "Avancè : injectez du CSS personnalisè appliquè dans toute la console et la page de connessione.", + "custom_css_hint": "À utiliser avec prècaution. Les règles invalides ou non sècurisèes sont nettoyèes. Maximum 20 000 caractères." + }, + "device_detail": { + "tab_overview": "Panoramica", + "tab_tags": "Tag e note", + "tab_actions": "Azioni", + "section_identity": "Identità", + "section_network": "Rete", + "section_timestamps": "Marcature temporali", + "section_connect": "Connessione", + "section_manage": "Gestione", + "folder": "Cartella", + "status_tier": "Livello stato", + "device_banned": "Questo dispositivo è bannato", + "no_reason": "Nessun motivo fornito", + "tags": "Tag", + "no_tags": "Nessun tag assegnato a questo dispositivo", + "tag_placeholder": "Inserisci un nome tag...", + "add_tag": "Aggiungi", + "tag_exists": "Questo tag esiste già", + "notes": "Note", + "notes_placeholder": "Aggiungi note su questo dispositivo...", + "danger_zone": "Zona pericolosa", + "action_connect_web": "Remoto web", + "action_connect_web_desc": "Connetti tramite desktop remoto del browser", + "action_native_remote": "BetterDesk remoto", + "action_native_remote_desc": "Stream JPEG nativo — nessun plugin richiesto", + "action_connect_desktop": "Client desktop", + "action_connect_desktop_desc": "Apri nell'app client desktop", + "action_change_id_desc": "Cambia l'ID di registrazione del dispositivo", + "action_ban_desc": "Impedisci a questo dispositivo di connettersi", + "action_unban_desc": "Permetti a questo dispositivo di connettersi di nuovo", + "action_delete_desc": "Rimuovi permanentemente questo dispositivo", + "tab_hardware": "Hardware", + "tab_metrics": "Metriche", + "section_system": "Sistema", + "section_cpu": "Processore", + "section_memory": "Memoria", + "section_displays": "Schermi", + "section_encoding": "Capacità di codifica", + "section_live_metrics": "Metriche in tempo reale", + "section_current_usage": "Utilizzo attuale", + "section_usage_history": "Storico utilizzo", + "os": "Sistema operativo", + "version": "Versione client", + "cpu_model": "Modello CPU", + "cpu_cores": "Core CPU", + "cpu_freq": "Frequenza CPU", + "total_memory": "Memoria totale", + "metric_memory": "Memoria", + "metric_disk": "Disco", + "metrics_updated": "Aggiornato", + "device_groups": "Gruppi", + "no_sysinfo": "Nessuna informazione hardware disponibile", + "no_sysinfo_hint": "Le informazioni di sistema appariranno dopo che il dispositivo avrà inviato un report sysinfo", + "no_metrics": "Nessun dato metrica disponibile", + "no_metrics_hint": "Le metriche appariranno dopo che il dispositivo avrà inviato report heartbeat", + "chart_oldest": "← Più vecchio", + "chart_newest": "Più recente →", + "tab_services": "Servizi", + "tab_processes": "Processi", + "tab_events": "Eventi", + "tab_activity": "Attività", + "tab_files": "File", + "agent_lazy_hint": "Fai clic su questa scheda per caricare dati live dall’agente", + "agent_offline": "Agente non online", + "agent_timeout": "L’agente non ha risposto in tempo", + "agent_error": "Impossibile caricare i dati dell’agente", + "service_name": "Nome", + "service_display": "Nome visualizzato", + "service_status": "Stato", + "service_start": "Modalità avvio", + "process_name": "Nome", + "process_user": "Utente", + "process_memory": "Memoria" + }, + "inventory": { + "title": "Inventario", + "subtitle": "Inventario hardware e software dei dispositivi gestiti", + "device_id": "ID dispositivo", + "hostname": "Nome host", + "os": "Sistema operativo", + "cpu": "CPU", + "cpu_cores": "Core CPU", + "cpu_usage": "Utilizzo CPU", + "memory": "Memoria", + "memory_total": "Memoria totale", + "memory_used": "Memoria usata", + "memory_available": "Memoria disponibile", + "memory_usage": "Utilizzo memoria", + "swap": "Swap", + "disks": "Dischi", + "disk_count": "Numero dischi", + "network": "Rete", + "network_interfaces": "Interfacce di rete", + "software": "Software", + "software_count": "Software installato", + "system": "Sistema", + "kernel": "Kernel", + "architecture": "Architettura", + "uptime": "Tempo di attività", + "frequency": "Frequenza", + "physical_cores": "Core fisici", + "logical_cores": "Core logici", + "model": "Modello", + "usage": "Utilizzo", + "total": "Totale", + "used": "Usato", + "available": "Disponibile", + "mount_point": "Punto di montaggio", + "removable": "Rimovibile", + "mac_address": "Indirizzo MAC", + "ip_addresses": "Indirizzi IP", + "traffic": "Traffico", + "collect_now": "Raccogli ora", + "collector_running": "Raccolta in corso", + "collector_stopped": "Raccolta fermata", + "last_upload": "Ultimo caricamento", + "total_uploads": "Totale", + "last_seen": "Ultimo avvistamento", + "collected_at": "Raccolto il", + "no_data": "Nessun dato inventario disponibile. Clicca \"Raccogli ora\" per ottenere informazioni di sistema.", + "no_devices": "Nessun dispositivo con dati inventario trovato", + "detail_title": "Dettaglio inventario dispositivo", + "telemetry": "Telemetria", + "view_detail": "Vedi dettaglio", + "export": "Esporta", + "refresh": "Aggiorna" + }, + "tickets": { + "title": "Helpdesk", + "subtitle": "Ticket di supporto e tracciamento problemi", + "create": "Nuovo ticket", + "edit": "Modifica ticket", + "delete": "Elimina ticket", + "detail": "Dettaglio ticket", + "ticket_id": "ID ticket", + "ticket_title": "Titolo", + "description": "Descrizione", + "status": "Stato", + "priority": "Priorità", + "category": "Categoria", + "assigned_to": "Assegnato a", + "created_by": "Creato da", + "device": "Dispositivo", + "sla_due": "Scadenza SLA", + "created_at": "Creato", + "updated_at": "Aggiornato", + "resolved_at": "Risolto", + "closed_at": "Chiuso", + "status_open": "Aperto", + "status_in_progress": "In corso", + "status_resolved": "Risolto", + "status_closed": "Chiuso", + "priority_low": "Bassa", + "priority_medium": "Media", + "priority_high": "Alta", + "priority_critical": "Critica", + "category_general": "Generale", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Rete", + "category_access": "Accesso", + "category_other": "Altro", + "comments": "Commenti", + "add_comment": "Aggiungi commento", + "comment_placeholder": "Scrivi un commento...", + "internal_note": "Nota interna (non visibile agli utenti finali)", + "attachments": "Allegati", + "upload_attachment": "Carica allegato", + "download": "Scarica", + "connect_device": "Connetti al dispositivo", + "no_tickets": "Nessun ticket trovato", + "no_comments": "Nessun commento", + "no_attachments": "Nessun allegato", + "title_required": "Il titolo è obbligatorio", + "delete_confirm": "Sei sicuro di voler eliminare il ticket #{id}?", + "delete_success": "Ticket eliminato con successo", + "created_success": "Ticket creato con successo", + "updated_success": "Ticket aggiornato con successo", + "sla_overdue": "SLA scaduto", + "filter_all": "Tutti", + "search_placeholder": "Cerca ticket...", + "assign_to_me": "Assegna a me", + "unassign": "Rimuovi assegnazione", + "stats_total": "Totale", + "stats_open": "Aperti", + "stats_in_progress": "In corso", + "stats_resolved": "Risolti", + "stats_closed": "Chiusi" + }, + "activity": { + "title": "Monitoraggio attività", + "subtitle": "Utilizzo applicazioni e tracciamento inattività", + "device": "Dispositivo", + "hostname": "Nome host", + "sessions": "Sessioni", + "idle_time": "Tempo di inattività", + "active_time": "Tempo attivo", + "last_report": "Ultimo report", + "top_apps": "Applicazioni principali", + "app_name": "Applicazione", + "window_title": "Titolo finestra", + "category": "Categoria", + "duration": "Durata", + "started_at": "Iniziato", + "ended_at": "Terminato", + "session_count": "Numero sessioni", + "total_active": "Totale attivo", + "total_idle": "Totale inattivo", + "detail_count": "Record dettagliati", + "no_data": "Nessun dato attività disponibile", + "no_sessions": "Nessuna sessione registrata", + "filter_from": "Da", + "filter_to": "A", + "filter_apply": "Applica filtro", + "hours": "ore", + "minutes": "minuti", + "seconds": "secondi", + "category_browser": "Browser", + "category_productivity": "Produttività", + "category_communication": "Comunicazione", + "category_development": "Sviluppo", + "category_media": "Media", + "category_gaming": "Giochi", + "category_system": "Sistema", + "category_other": "Altro", + "summary": "Riepilogo", + "details": "Dettagli", + "refresh": "Aggiorna", + "search": "Cerca dispositivi...", + "date_range": "Intervallo date", + "device_id": "ID dispositivo", + "session_start": "Inizio sessione", + "session_end": "Fine sessione", + "user": "Utente", + "no_activity": "Nessuna attività registrata", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Nessuna applicazione" + }, + "automation": { + "title": "Automazione e avvisi", + "subtitle": "Regole di allarme, comandi remoti e configurazione SMTP", + "rules": "Regole di allarme", + "rules_subtitle": "Definisci condizioni che attivano notifiche", + "alerts": "Storico avvisi", + "alerts_subtitle": "Visualizza e conferma gli avvisi attivati", + "commands": "Comandi remoti", + "commands_subtitle": "Invia comandi ai dispositivi remoti", + "smtp": "Configurazione SMTP", + "smtp_subtitle": "Impostazioni notifiche e-mail", + "rule_name": "Nome regola", + "description": "Descrizione", + "condition_type": "Tipo condizione", + "condition_op": "Operatore", + "condition_value": "Soglia", + "severity": "Gravità", + "scope_device": "Dispositivo target", + "scope_all": "Tutti i dispositivi", + "cooldown": "Tempo di recupero (secondi)", + "notify_emails": "E-mail di notifica", + "enabled": "Attivo", + "disabled": "Disattivo", + "create_rule": "Crea regola", + "edit_rule": "Modifica regola", + "delete_rule": "Elimina regola", + "acknowledge": "Conferma", + "acknowledged": "Confermato", + "unacknowledged": "Non confermato", + "triggered_at": "Attivato il", + "severity_info": "Informazione", + "severity_warning": "Attenzione", + "severity_critical": "Critico", + "op_gt": "Maggiore di", + "op_gte": "Maggiore o uguale", + "op_lt": "Minore di", + "op_lte": "Minore o uguale", + "op_eq": "Uguale a", + "op_neq": "Diverso da", + "type_cpu_usage": "Utilizzo CPU (%)", + "type_memory_usage": "Utilizzo memoria (%)", + "type_disk_usage": "Utilizzo disco (%)", + "type_offline_duration": "Durata offline (s)", + "type_idle_duration": "Durata inattività (s)", + "type_custom": "Personalizzato", + "command_type": "Tipo comando", + "command_payload": "Comando / Script", + "command_result": "Risultato", + "command_status": "Stato", + "send_command": "Invia comando", + "status_pending": "In attesa", + "status_running": "In esecuzione", + "status_completed": "Completato", + "status_failed": "Fallito", + "smtp_host": "Host SMTP", + "smtp_port": "Porta", + "smtp_secure": "Usa TLS", + "smtp_user": "Nome utente", + "smtp_pass": "Segreto SMTP", + "smtp_from": "Indirizzo mittente", + "smtp_test": "Testa connessione", + "smtp_save": "Salva configurazione", + "smtp_test_success": "Connessione riuscita", + "smtp_test_failed": "Connessione fallita", + "no_rules": "Nessuna regola di allarme configurata", + "no_alerts": "Nessun avviso attivato", + "no_commands": "Nessun comando inviato", + "id_payload_required": "ID dispositivo e payload sono obbligatori", + "no_commands_sent": "Nessun comando ancora inviato" + }, + "file_transfer": { + "title": "Trasferimento file", + "transfers": "Trasferimenti", + "new_transfer": "Nuovo trasferimento", + "upload": "Carica", + "download": "Scarica", + "direction": "Direzione", + "filename": "Nome file", + "file_size": "Dimensione file", + "mime_type": "Tipo MIME", + "progress": "Progresso", + "status": "Stato", + "device": "Dispositivo", + "initiated_by": "Iniziato da", + "created_at": "Creato il", + "cancel": "Annulla", + "cancel_confirm": "Sei sicuro di voler annullare questo trasferimento?", + "download_file": "Scarica file", + "browse_files": "Sfoglia file", + "select_file": "Seleziona file", + "select_device": "Seleziona dispositivo", + "no_transfers": "Nessun trasferimento file", + "status_pending": "In attesa", + "status_active": "Attivo", + "status_completed": "Completato", + "status_failed": "Fallito", + "status_cancelled": "Annullato", + "bytes_transferred": "Byte trasferiti", + "chunks": "Blocchi", + "transfer_started": "Trasferimento avviato", + "transfer_completed": "Trasferimento completato", + "transfer_failed": "Trasferimento fallito", + "transfer_cancelled": "Trasferimento annullato", + "max_file_size": "Dimensione massima file: 4 GB", + "error_too_large": "Il file è troppo grande", + "error_no_device": "Nessun dispositivo selezionato", + "error_no_file": "Nessun file selezionato" + }, + "network": { + "title": "Monitoraggio rete", + "targets": "Obiettivi di monitoraggio", + "add_target": "Aggiungi obiettivo", + "edit_target": "Modifica obiettivo", + "delete_target": "Elimina obiettivo", + "delete_confirm": "Sei sicuro di voler eliminare questo obiettivo?", + "target_name": "Nome", + "host": "Host", + "port": "Porta", + "url": "URL", + "check_type": "Tipo di controllo", + "timeout": "Timeout", + "interval": "Intervallo", + "enabled": "Attivo", + "status": "Stato", + "last_check": "Ultimo controllo", + "last_rtt": "Ultimo RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Raggiungibile", + "status_down": "Non raggiungibile", + "status_unknown": "Sconosciuto", + "check_now": "Controlla ora", + "history": "Storico controlli", + "stats": "Statistiche", + "total_targets": "Totale obiettivi", + "targets_up": "Obiettivi raggiungibili", + "targets_down": "Obiettivi non raggiungibili", + "type_ping": "Ping (ICMP)", + "type_tcp": "Porta TCP", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Strumenti di rete", + "ping_tool": "Test Ping", + "tcp_tool": "Controllo porta TCP", + "http_tool": "Controllo HTTP", + "dns_tool": "Risoluzione DNS", + "monitor_start": "Avvia monitoraggio", + "monitor_stop": "Ferma monitoraggio", + "monitor_running": "Monitoraggio in corso", + "monitor_stopped": "Monitoraggio fermato", + "no_targets": "Nessun obiettivo di monitoraggio configurato", + "no_history": "Nessuno storico controlli disponibile", + "error_code": "Errore", + "status_code": "Codice stato HTTP", + "search_targets": "Cerca destinazioni...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Cronologia controlli", + "name_host_required": "Nome e host sono obbligatori", + "uptime": "Tempo di attività", + "response_time": "Tempo di risposta", + "avg_response": "Risposta media", + "charts": "Grafici", + "realtime": "Tempo reale", + "response_time_ms": "Tempo di risposta (ms)", + "uptime_percent": "Tempo di attività %", + "last_24h": "Ultime 24 ore", + "last_7d": "Ultimi 7 giorni", + "last_30d": "Ultimi 30 giorni" + }, + "dataguard": { + "title": "DataGuard", + "policies": "Policy DLP", + "add_policy": "Aggiungi policy", + "edit_policy": "Modifica policy", + "delete_policy": "Elimina policy", + "delete_confirm": "Sei sicuro di voler eliminare questa policy?", + "policy_name": "Nome", + "policy_description": "Descrizione", + "status": "Status", + "enabled": "Attivo", + "disabled": "Disattivo", + "rules": "Regole", + "add_rule": "Aggiungi regola", + "rule_type": "Tipo regola", + "rule_type_usb": "Dispositivo USB", + "rule_type_file": "Operazione file", + "action": "Azione", + "action_allow": "Consenti", + "action_block": "Blocca", + "action_log": "Solo registrazione", + "filter": "Filtro", + "vid": "ID venditore (VID)", + "pid": "ID prodotto (PID)", + "serial": "Numero di serie", + "device_class": "Classe dispositivo", + "drive_type": "Tipo unità", + "file_extensions": "Estensioni file", + "events": "Eventi DLP", + "event_source": "Origine", + "event_source_usb": "USB", + "event_source_file": "File sorgente", + "event_type": "Tipo evento", + "event_details": "Dettagli", + "no_policies": "Nessuna policy DLP configurata", + "no_events": "Nessun evento DLP registrato", + "stats": "Statistiche", + "total_events": "Totale eventi", + "blocked_events": "Bloccati", + "logged_events": "Registrati", + "usb_events": "Eventi USB", + "file_events": "Eventi file", + "device_id": "ID dispositivo", + "policy_matched": "Policy corrispondente", + "timestamp": "Marca temporale", + "drive_removable": "Rimovibile", + "drive_fixed": "Fisso", + "drive_network": "Rete", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Sconosciuto", + "total_policies": "Criteri totali", + "active_policies": "Criteri attivi", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Criteri", + "tab_events": "Events", + "search_policies": "Cerca criteri...", + "create_policy": "Crea criterio", + "policy_type": "Tipo criterio", + "scope": "Scope", + "events_count": "Events", + "search_events": "Cerca eventi...", + "event_time": "Event Time", + "device": "Dispositivo", + "policy": "Criterio", + "detail": "Detail", + "scope_help": "ID dispositivo separati da virgola oppure vuoto per tutti i dispositivi", + "scope_all": "Tutti", + "active": "Active", + "type_file_type": "Tipo file", + "type_clipboard": "Appunti", + "type_screen_share": "Condivisione schermo", + "type_file_transfer": "Trasferimento file", + "policy_desc": "Descrizione criterio", + "type_usb": "USB" + }, + "reports": { + "title": "Report", + "generate": "Genera report", + "generate_csv": "Esporta CSV", + "report_type": "Tipo di report", + "type_devices": "Riepilogo dispositivi", + "type_activity": "Riepilogo attività", + "type_security": "Report sicurezza", + "type_tickets": "Report ticket", + "type_network": "Report rete", + "type_inventory": "Report inventario", + "type_alerts": "Report avvisi", + "saved": "Report salvati", + "save_report": "Salva report", + "delete_report": "Elimina report", + "delete_confirm": "Sei sicuro di voler eliminare questo report salvato?", + "no_saved": "Nessun report salvato", + "report_title": "Titolo", + "created_by": "Creato da", + "created_at": "Creato il", + "filters": "Filtri", + "date_from": "Da", + "date_to": "A", + "device_filter": "ID dispositivo", + "generated_at": "Generato il", + "section": "Sezione dati", + "total_devices": "Totale dispositivi", + "online": "Online", + "offline": "Offline", + "banned": "Bannati", + "platform_distribution": "Distribuzione piattaforme", + "top_applications": "Applicazioni principali", + "total_active": "Tempo totale attivo", + "total_idle": "Tempo totale inattivo", + "dlp_stats": "Statistiche DLP", + "banned_devices": "Dispositivi bannati", + "audit_logs": "Registri di audit", + "ticket_stats": "Statistiche ticket", + "category_distribution": "Distribuzione categorie", + "priority_distribution": "Distribuzione priorità", + "targets_status": "Stato obiettivi", + "os_distribution": "Distribuzione SO", + "avg_ram": "RAM media", + "alert_rules": "Regole di allarme", + "recent_alerts": "Avvisi recenti", + "tab_generate": "Genera report", + "tab_saved": "Report salvati", + "type_devices_desc": "Panoramica di tutti i dispositivi, piattaforme e stati", + "type_activity_desc": "Riepilogo utilizzo applicazioni e tempo di inattività", + "type_security_desc": "Azioni di ban, eventi DLP e log di audit", + "type_tickets_desc": "Statistiche ticket e performance SLA", + "type_network_desc": "Obiettivi di monitoraggio rete e dati di disponibilità", + "type_inventory_desc": "Riepilogo inventario hardware e software", + "type_alerts_desc": "Regole di allarme e storico degli avvisi attivati", + "report_name": "Nome report", + "format": "Formato", + "save": "Salva report", + "preview": "Anteprima", + "download": "Scarica", + "delete_saved": "Elimina report", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Multi-tenancy", + "list": "Tenant", + "add_tenant": "Aggiungi tenant", + "edit_tenant": "Modifica tenant", + "delete_tenant": "Elimina tenant", + "delete_confirm": "Sei sicuro di voler eliminare questo tenant? Tutte le assegnazioni di dispositivi e utenti verranno rimosse.", + "name": "Nome", + "slug": "Slug", + "contact_name": "Nome contatto", + "contact_email": "E-mail contatto", + "max_devices": "Max dispositivi", + "max_devices_hint": "0 = illimitato", + "notes": "Note", + "active": "Attivo", + "inactive": "Inattivo", + "devices": "Dispositivi", + "users": "Utenti", + "assign_device": "Assegna dispositivo", + "assign_devices": "Assegna dispositivi", + "remove_device": "Rimuovi dispositivo", + "assign_user": "Assegna utente", + "remove_user": "Rimuovi utente", + "no_tenants": "Nessun tenant configurato", + "no_devices": "Nessun dispositivo assegnato a questo tenant", + "no_users": "Nessun utente assegnato a questo tenant", + "stats": "Statistiche tenant", + "total_devices": "Totale dispositivi", + "online_devices": "Dispositivi online", + "total_users": "Totale utenti", + "created_at": "Creato il", + "updated_at": "Aggiornato il", + "slug_exists": "Lo slug del tenant esiste già", + "total_tenants": "Totale tenant", + "active_tenants": "Tenant attivi", + "search": "Cerca tenant...", + "create_tenant": "Crea tenant", + "detail": "Dettaglio tenant", + "contact": "Contatto", + "enabled": "Abilitato", + "disabled": "Tenant disabilitati", + "max": "Max", + "info": "Informazioni tenant", + "status": "Stato" + }, + "registrations": { + "title": "Registrazioni dispositivi", + "subtitle": "Gestisci le richieste di registrazione dai dispositivi scoperti tramite LAN", + "search_placeholder": "Cerca per ID dispositivo, nome host o IP...", + "no_registrations": "Nessuna richiesta di registrazione", + "col_device_id": "ID dispositivo", + "col_hostname": "Nome host", + "col_platform": "Piattaforma", + "col_ip": "Indirizzo IP", + "col_version": "Versione", + "col_status": "Stato", + "col_requested": "Richiesto", + "col_actions": "Azioni", + "status_pending": "In attesa", + "status_approved": "Approvato", + "status_rejected": "Rifiutato", + "approve_btn": "Approva", + "approve_confirm": "Sei sicuro di voler approvare questo dispositivo? Riceverà le credenziali del server e potrà connettersi automaticamente.", + "approved_success": "Registrazione dispositivo approvata con successo", + "reject_btn": "Rifiuta", + "reject_title": "Rifiuta registrazione", + "reject_confirm": "Sei sicuro di voler rifiutare questa richiesta di registrazione?", + "reject_reason": "Motivo (opzionale)", + "reject_reason_placeholder": "Inserisci il motivo del rifiuto...", + "rejected_success": "Registrazione dispositivo rifiutata", + "delete_confirm": "Sei sicuro di voler eliminare questo record di registrazione?", + "deleted_success": "Record di registrazione eliminato", + "enrollment_title": "Registrazione dispositivi", + "enrollment_subtitle": "Richieste di registrazione in sospeso dai client desktop BetterDesk", + "enrollment_empty": "Nessuna richiesta di registrazione in sospeso", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Nome visualizzato", + "enrollment_display_name_placeholder": "Inserisci un nome per questo dispositivo...", + "enrollment_sync_mode": "Modalità sincronizzazione", + "enrollment_sync_silent": "Silenziosa — telemetria minima", + "enrollment_sync_standard": "Standard — sincronizzazione bilanciata", + "enrollment_sync_turbo": "Turbo — sincronizzazione aggressiva", + "enrollment_approved_success": "Registrazione dispositivo approvata", + "enrollment_rejected_success": "Registrazione dispositivo rifiutata", + "approve_title": "Approuver il dispositivo", + "field_name": "Nome de il dispositivo", + "field_name_placeholder": "Entrez un nome pour cet appareil...", + "field_sync_mode": "Modalità de synchronisation", + "sync_standard": "Standard — synchronisation èquilibrèe", + "sync_silent": "Silencieux — tèlèmètrie minimale", + "sync_turbo": "Turbo — sincronizzazione aggressiva", + "field_tags": "Tags", + "field_tags_placeholder": "Tags sèparès par des virgules (p. ex. bureau, ordinateur portable)...", + "field_tags_existing": "Tags existants", + "field_tag_add_placeholder": "Aggiungi un nouveau tag...", + "field_tag_add_btn": "Aggiungi", + "field_groups": "Groupes d'dispositivi", + "field_folder": "Cartella", + "field_folder_none": "Nessuno cartella", + "reject_ban_option": "Banna questo dispositivo", + "reject_ban_hint": "L'appareil sera bloquè et ne pourra plus envoyer de nuove richieste d'inscription.", + "banner_open_mode": "L'inscription est ouverte — les nuovi client RustDesk si registrano sans approbation de l'opèrateur. Dèfinissez le modalità gèrè dans les impostazioni per usare questa coda d'attesa.", + "banner_locked_mode": "L'inscription est verrouillèe — seuls les dispositivi liès à un jeton peuvent s'inscrire. Le modalità gèrè est richiesto per approvazione des clients sconosciutos par l'opèrateur.", + "enrollment_settings_link": "Impostazioni d'inscription" + }, + "backup": { + "title": "Backup", + "desc": "Scarica un backup completo della configurazione della console, utenti, gruppi e impostazioni. I dati peer del server Go sono inclusi quando il backend BetterDesk è attivo.", + "restore_title": "Ripristina", + "restore_desc": "Carica un file di backup scaricato in precedenza per ripristinare la configurazione della console. Seleziona quali sezioni ripristinare di seguito.", + "stat_users": "Utenti", + "stat_settings": "Impostazioni", + "stat_folders": "Cartelle", + "stat_groups": "Gruppi", + "stat_strategies": "Strategie", + "stat_backend": "Backend", + "download": "Scarica backup", + "creating": "Creazione backup...", + "download_success": "Backup scaricato con successo", + "upload": "Carica backup", + "restore_confirm": "Sei sicuro di voler ripristinare da questo backup? Le sezioni selezionate verranno sovrascritte.", + "restore_success": "Backup ripristinato con successo. Alcune modifiche potrebbero richiedere un ricaricamento della pagina.", + "restored": "Ripristinato", + "skipped": "Saltato", + "backup_date": "Data backup", + "opt_settings": "Impostazioni della console", + "opt_branding": "Branding / Tema", + "opt_folders": "Cartelle dispositivi", + "opt_groups": "Gruppi utenti e dispositivi", + "opt_addressbooks": "Rubriche", + "opt_users": "Account utenti", + "opt_users_warning": "Distruttivo: sostituisce TUTTI gli account utenti con i dati del backup. Potresti essere disconnesso.", + "no_file": "Nessun file di backup selezionato", + "invalid_json": "File di backup non valido: JSON non valido", + "invalid_format": "File di backup non valido: non è un backup BetterDesk", + "stat_database": "Moteur de base de donnèes", + "stat_keys": "Clès serveur incluses", + "stat_env": "File d'environnement", + "stat_uploads": "Files de marque", + "restart_required": "Alcuni composants restaurès (clès / .env / base de donnèes Go) nècessitent un redèmarrage du servizio pour entrare in vigore.", + "security_warning": "Cette sauvegarde contient des secrets (clès serveur, file d'environnement, hash delle password et secret 2FA). Conservez-la en sècuritè et ne la partagez jamais.", + "restore_warning": "La restauration des secrets, du file d'environnement ou de la base de donnèes du serveur Go ècrase l'identitè du serveur et nècessite un redèmarrage du servizio par la suite.", + "opt_database": "Base de donnèes (toutes les tabelle)", + "opt_database_hint": "Rèimporte toutes les donnèes de la console. Appliquè en direct, nessuno redèmarrage nècessaire.", + "opt_uploads": "Files de marque", + "opt_uploads_hint": "Logos et immagines tèlèchargèes.", + "opt_secrets": "Clès et secrets du serveur", + "opt_secrets_warning": "Ècrase l'identitè du serveur Ed25519, la clè API et le secret di sessione. Nècessite un redèmarrage du servizio.", + "opt_env": "File d'environnement (.env)", + "opt_env_warning": "Ècrase SESSION_SECRET, la clè API, le DSN de la base de donnèes, les ports et les impostazioni TLS. Nècessite un redèmarrage du servizio.", + "opt_godb": "Base de donnèes du serveur Go", + "opt_godb_warning": "Ècrase la base de donnèes SQLite du serveur Go (backend SQLite uniquement). Nècessite un redèmarrage du servizio." + }, + "cdap": { + "device_detail": "Dettagli dispositivo", + "loading": "Caricamento...", + "loading_widgets": "Caricamento widget dispositivo...", + "load_error": "Impossibile caricare i dettagli del dispositivo", + "connected": "Connesso", + "disconnected": "Disconnesso", + "device_offline_msg": "Il dispositivo è attualmente offline. I valori dei widget potrebbero essere obsoleti.", + "no_widgets": "Nessun widget disponibile", + "no_widgets_desc": "Questo dispositivo non ha registrato un manifest CDAP con definizioni widget.", + "command_log": "Registro comandi", + "clear_log": "Cancella log", + "confirm_command": "Conferma comando", + "select_option": "Seleziona", + "cdap_status": "Stato CDAP", + "cdap_enabled": "CDAP abilitato", + "cdap_disabled": "CDAP disabilitato", + "cdap_devices": "Dispositivi CDAP", + "cdap_connections": "Connessioni attive", + "send_command": "Invia comando", + "command_sent": "Comando inviato con successo", + "command_failed": "Impossibile inviare il comando", + "devices_title": "Dispositivi CDAP", + "devices_subtitle": "Dispositivi connessi tramite Custom Device Application Protocol", + "stat_connected": "Connesso", + "stat_port": "Porta", + "search_devices": "Cerca dispositivi...", + "no_devices": "Nessun dispositivo", + "no_devices_desc": "Nessun dispositivo CDAP è attualmente connesso. I dispositivi appariranno qui dopo la connessione al gateway.", + "gateway_disabled": "Gateway disabilitato", + "gateway_disabled_desc": "Abilita il gateway CDAP impostando CDAP_ENABLED=true nella configurazione server.", + "gateway_active": "Attivo", + "toggle_enable": "Abilita CDAP", + "toggle_disable": "Disabilita CDAP", + "enabled_restart": "CDAP abilitato. È necessario riavviare il server per applicare le modifiche.", + "disabled_restart": "CDAP disabilitato. È necessario riavviare il server per applicare le modifiche.", + "widgets": "Widget", + "type_all": "Tutti", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agente OS", + "type_network": "Rete", + "type_camera": "Telecamera", + "type_custom": "Personalizzato", + "active_alerts": "Avvisi attivi", + "alert_fired": "Avviso scattato", + "alert_cleared": "Avviso cancellato", + "no_alerts": "Nessun avviso", + "connect_terminal": "Connetti terminale", + "table_search": "Cerca...", + "just_now": "Proprio ora", + "terminal_connecting": "Connessione al dispositivo...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Connessione terminale non riuscita", + "linked_devices": "Dispositivi collegati", + "link_device": "Collega dispositivo", + "unlink_device": "Scollega", + "no_linked_devices": "Nessun dispositivo collegato", + "unlink_confirm": "Vuoi davvero scollegare questo dispositivo?", + "link_prompt": "Inserisci l’ID peer da collegare a questo dispositivo:", + "connect_desktop": "Connetti desktop", + "connect_video": "Connetti stream", + "connect_files": "Sfoglia file", + "connect_audio": "Connetti audio", + "upload_file": "Upload", + "desktop_connecting": "Connessione desktop...", + "video_connecting": "Connessione...", + "files_connecting": "Connessione...", + "audio_connecting": "Connessione audio...", + "audio_streaming": "Audio in streaming", + "clipboard_in": "Appunti in entrata", + "clipboard_out": "Appunti in uscita", + "monitor_select": "Seleziona monitor", + "keyframe_request": "Richiedi keyframe", + "quality_auto": "Qualità automatica" + }, + "desktop": { + "switch_mode": "Cambia modalità", + "console_mode": "Modalità console", + "loading": "Caricamento", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Chiudi", + "widgets_mode": "Modalità widget", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Aggiungi widget", + "remove_widget": "Rimuovi widget", + "configure": "Configura", + "search_widgets": "Cerca widget...", + "cat_monitoring": "Monitoring", + "cat_devices": "Dispositivi", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Note...", + "search_placeholder": "Cerca...", + "search_pages": "Pages", + "search_devices": "Cerca dispositivi", + "search_no_results": "No results", + "exit_desktop": "Exit Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Stato dispositivi", + "widget_server_health": "Salute server", + "widget_system_stats": "Statistiche sistema", + "widget_device_list": "Elenco dispositivi", + "widget_quick_actions": "Azioni rapide", + "widget_recent_activity": "Attività recente", + "widget_notes": "Notes", + "widget_network_monitor": "Monitor rete", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Dispositivi CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Griglia dispositivi", + "widget_multi_gauge": "Misuratore multiplo", + "widget_weekly_chart": "Grafico settimanale", + "widget_quick_controls": "Controlli rapidi", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Statistiche connessioni", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sessioni utente", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Nessun dispositivo", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Apri", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Imposta URL", + "label_server_uptime": "Uptime server", + "label_merged_info": "Informazioni unite", + "label_with_notes": "Con note", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Dispositivi totali", + "label_throughput": "Throughput", + "label_active_relays": "Relay attivi", + "label_total_relayed": "Totale inoltrato", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtra dispositivi", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Nessun dispositivo CDAP", + "action_add_widget": "Aggiungi widget", + "label_merged_server_info": "Informazioni server unite", + "wp_images": "Immagini", + "wp_colors": "Colori solidi", + "wp_custom_color": "Colore personalizzato", + "wp_fit_style": "Stile", + "wp_fill": "Riempi", + "wp_fit": "Adatta", + "wp_stretch": "Estendi", + "wp_center": "Centra", + "widget_calendar": "Calendar", + "widget_process_monitor": "Monitor processi", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Statistiche database", + "widget_docker_containers": "Container Docker", + "widget_shell_command": "Comando shell", + "widget_device_map": "Mappa dispositivi", + "widget_remote_connect": "Connessione remota", + "label_no_online": "Nessun dispositivo online", + "label_no_events": "Nessun evento", + "label_event_title": "Titolo evento", + "label_no_data": "Nessun dato", + "label_download_speed": "Velocità download", + "label_latency": "Latency", + "label_server": "Istanza server", + "label_run_test": "Run Test", + "label_testing": "Test in corso", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Nessun container", + "label_docker_unavailable": "Docker non disponibile", + "label_no_command": "Nessun comando", + "label_no_output": "Nessun output", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Salva preset", + "label_load_preset": "Load Preset", + "label_preset_name": "Nome preset", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Disponi automaticamente", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 colonne uguali", + "label_2col_wide": "2 colonne ampie", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Gruppo widget", + "ungroup_widgets": "Separa widget", + "group_widgets": "Raggruppa widget", + "snap_layouts": "Layout snap", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Aggancia in alto a sinistra", + "snap_top_right": "Aggancia in alto a destra", + "snap_bottom_left": "Aggancia in basso a sinistra", + "snap_bottom_right": "Aggancia in basso a destra", + "aero_shake": "Scuoti finestra", + "zone_resize": "Ridimensiona zona", + "zone_borders": "Bordi zona", + "app_drawer": "Applications", + "search_apps": "Cerca app", + "edit_shortcuts": "Modifica scorciatoie", + "widgets": "Elenco widget", + "theme": "Theme", + "fullscreen": "Schermo intero", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "wp_unavailable": "Sfondi non disponibili", + "wp_download_hint": "Scarica gli sfondi per usarli qui.", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Fai clic per accedere", + "username_placeholder": "Nome utente", + "password_placeholder": "Parola d’accesso", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Codice di verifica richiesto", + "totp_subtitle": "Inserisci il codice a sei cifre dalla tua app di autenticazione.", + "back_to_login": "Torna all’accesso", + "fill_all_fields": "Compila tutti i campi", + "invalid_credentials": "Nome utente o password non validi", + "invalid_code": "Codice di verifica non valido", + "enter_6_digits": "Inserisci 6 cifre", + "network_error": "Errore di rete. Riprova.", + "session_expired": "La sessione è scaduta. Accedi di nuovo." + }, + "tokens": { + "title": "Token di accesso", + "subtitle": "Gestisci i token di accesso API per integrazioni e automazione", + "enrollment_mode": "Modalità registrazione", + "mode_open": "Registrazione aperta", + "mode_open_desc": "Qualsiasi client valido può richiedere la registrazione.", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Totale", + "active": "Active", + "used": "Used", + "revoked": "Token revocato con successo", + "search_placeholder": "Cerca token...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Genera in blocco", + "create": "Crea token", + "edit": "Modifica", + "token": "Token", + "name": "Nome token", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Token creato con successo", + "actions": "Actions", + "name_placeholder": "Inserisci il nome del token", + "max_uses": "Max Uses", + "max_uses_hint": "Numero massimo di utilizzi consentiti per questo token.", + "expires_in": "Expires In", + "no_expiration": "Nessuna scadenza", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Nota opzionale", + "count": "Count", + "count_range": "Il conteggio deve essere tra 1 e 100", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token creato", + "tokens_generated": "Token generati", + "copy_warning": "Copia questo token adesso. Non potrai vederlo di nuovo!", + "copy_token": "Copia token", + "copied": "Token copiato negli appunti", + "revoke": "Revoca", + "revoke_confirm": "Sei sicuro di voler revocare questo token? Questa azione non può essere annullata.", + "revoked_success": "Token revocato correttamente", + "no_tokens": "Nessun token creato", + "expired": "Scaduto", + "never": "Never", + "save": "Salva", + "cancel": "Annulla", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Avanti", + "prev": "Precedente", + "skip": "Salta tour", + "finish": "Fine", + "close": "Chiudi", + "step_of": "Passo {current} di {total}", + "console_sidebar_title": "Navigazione console", + "console_sidebar_text": "Usa la barra laterale per passare tra dispositivi, utenti, impostazioni e strumenti.", + "console_expand_title": "Espandi barra laterale", + "console_expand_text": "Apri la barra laterale per vedere tutte le sezioni e gli strumenti della console.", + "console_search_title": "Ricerca rapida", + "console_search_text": "Usa la ricerca per trovare più rapidamente dispositivi, impostazioni e azioni.", + "console_dashboard_title": "Controlla panoramica", + "console_dashboard_text": "La panoramica riassume stato server, dispositivi e attività recente.", + "console_devices_title": "Elenco dispositivi", + "console_devices_text": "Qui puoi cercare, filtrare e gestire tutti i dispositivi registrati.", + "console_settings_title": "Impostazioni", + "console_settings_text": "Gestisci sicurezza, autenticazione, aggiornamenti e integrazioni.", + "console_desktop_title": "Modalità desktop", + "console_desktop_text": "Passa al desktop widget per creare una vista operativa personalizzata.", + "console_complete_title": "Console pronta", + "console_complete_text": "Ora conosci le parti principali della console BetterDesk.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "La barra superiore contiene controlli finestra, ricerca e scorciatoie.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Apri il selettore widget per posizionare nuove schede sul desktop.", + "desktop_widgets_title": "Widget", + "desktop_widgets_text": "I widget mostrano dati operativi live e azioni rapide.", + "desktop_add_widget_title": "Aggiungi widget", + "desktop_add_widget_text": "Scegli un widget e posizionalo dove serve.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "Layout snap", + "desktop_snap_text": "Usa i layout snap per organizzare rapidamente i widget in zone.", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Sposta, raggruppa e ridimensiona finestre come su un desktop moderno.", + "desktop_search_title": "Cerca app", + "desktop_search_text": "Cerca widget e strumenti disponibili dal launcher.", + "desktop_complete_title": "Desktop pronto", + "desktop_complete_text": "La modalità desktop è configurata e pronta per essere personalizzata.", + "devices_folders_title": "Cartelle e gruppi", + "devices_folders_text": "Organizza i dispositivi in cartelle o gruppi dinamici.", + "devices_search_title": "Cerca dispositivi", + "devices_search_text": "Filtra per ID, nome host, piattaforma, utente o tag.", + "devices_table_title": "Tabella dispositivi", + "devices_table_text": "Apri le azioni dal menu di ogni riga o fai doppio clic per i dettagli.", + "devices_complete_title": "Gestione dispositivi pronta", + "devices_complete_text": "Ora puoi cercare, raggruppare e gestire dispositivi.", + "settings_tabs_title": "Sezioni impostazioni", + "settings_tabs_text": "Passa tra impostazioni server, sicurezza, autenticazione e interfaccia.", + "settings_content_title": "Modifica configurazione", + "settings_content_text": "Salva le modifiche per sezione per mantenere la configurazione ordinata.", + "settings_complete_title": "Impostazioni pronte", + "settings_complete_text": "Ora conosci le sezioni principali della configurazione.", + "help": "Aiuto", + "tour_console": "Tour console", + "tour_desktop": "Tour desktop", + "tour_devices": "Tour dispositivi", + "tour_settings": "Tour impostazioni", + "reset_all": "Reimposta tutti i tour", + "tour_remote": "Tour remoto", + "tour_organization": "Tour organizzazione", + "tour_cdap": "Tour CDAP", + "tour_chat": "Tour chat", + "remote_toolbar_title": "Barra strumenti remota", + "remote_toolbar_text": "Gestisci qualità, monitor, appunti, registrazione e azioni sessione.", + "remote_canvas_title": "Schermo remoto", + "remote_canvas_text": "Fai clic nell’area dello schermo per inviare tastiera e mouse al dispositivo.", + "remote_clipboard_title": "Appunti", + "remote_clipboard_text": "Sincronizza testo in modo sicuro tra browser e dispositivo remoto.", + "remote_complete_title": "Sessione remota pronta", + "remote_complete_text": "Ora puoi controllare e monitorare una sessione.", + "org_overview_title": "Panoramica organizzazione", + "org_overview_text": "Visualizza membri, dispositivi e criteri dell’organizzazione in un’unica vista.", + "org_create_title": "Crea organizzazione", + "org_create_text": "Crea una nuova organizzazione per separare dispositivi e utenti.", + "org_members_title": "Gestisci membri", + "org_members_text": "Assegna utenti e imposta ruoli specifici per l’organizzazione.", + "org_devices_title": "Assegna dispositivi", + "org_devices_text": "Assegna dispositivi a un’organizzazione per mantenere i dati nel giusto ambito.", + "org_policies_title": "Configura criteri", + "org_policies_text": "Gestisci regole di accesso, trasferimento file e limiti sessione.", + "org_complete_title": "Organizzazione pronta", + "org_complete_text": "L’organizzazione è pronta per utenti, dispositivi e criteri.", + "cdap_devices_title": "Dispositivi CDAP", + "cdap_devices_text": "Visualizza tutti i dispositivi CDAP connessi — sensori IoT, PLC, bridge e agenti personalizzati. Gli indicatori verdi mostrano le connessioni attive.", + "cdap_widgets_title": "Dashboard widget", + "cdap_widgets_text": "I widget mostrano dati in tempo reale dai dispositivi. Misuratori, interruttori, LED, grafici — ogni tipo di widget visualizza un diverso tipo di dato.", + "cdap_commands_title": "Invia comandi", + "cdap_commands_text": "Interagisci con i dispositivi inviando comandi. Alcuni comandi richiedono conferma. Il log comandi conserva la cronologia di tutti i comandi inviati.", + "cdap_terminal_title": "Terminale dispositivo", + "cdap_terminal_text": "Apri una sessione terminale agli agenti CDAP per diagnosi avanzate o configurazione manuale. Digita i comandi direttamente.", + "cdap_complete_title": "Panoramica CDAP completata!", + "cdap_complete_text": "Esplora i widget dei dispositivi, invia comandi e usa il terminale o il browser file per una gestione approfondita. Gli agenti CDAP inviano metriche automaticamente.", + "chat_contacts_title": "Contatti", + "chat_contacts_text": "Seleziona operatori, agenti o gruppi per una conversazione.", + "chat_send_title": "Invia messaggi", + "chat_send_text": "Scrivi messaggi, invia file e usa conferme di lettura.", + "chat_file_title": "Condivisione file", + "chat_file_text": "I file vengono trasferiti cifrati quando è attiva la crittografia end-to-end.", + "chat_complete_title": "Chat pronta", + "chat_complete_text": "Ora puoi comunicare in sicurezza con utenti e operatori.", + "disable_tutorials": "Disabilita tour", + "enable_tutorials": "Abilita tour" + }, + "help_request": { + "title": "Richieste di aiuto", + "subtitle": "Richieste di supporto dagli utenti finali", + "new_request": "Nuova richiesta di aiuto", + "device": "Dispositivo", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Nessuna richiesta di aiuto", + "notification": "Notifica richiesta di aiuto", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organizzazioni", + "create": "Crea", + "edit": "Modifica", + "detail": "Dettagli", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Dispositivi", + "invitations": "Invitations", + "settings": "Impostazioni", + "add_user": "Add User", + "assign_device": "Assegna dispositivo", + "create_invitation": "Crea invito", + "delete_confirm": "Eliminare questa organizzazione?", + "no_orgs": "Nessuna organizzazione", + "no_orgs_hint": "Crea un’organizzazione per gestire utenti e dispositivi separatamente.", + "connection_policy": "Criterio connessione", + "allow_file_transfer": "Consenti trasferimento file", + "allow_clipboard": "Consenti appunti", + "max_session_duration": "Durata massima sessione", + "role_owner": "Owner", + "role_admin": "Amministratore", + "role_operator": "Operator", + "role_user": "Membro", + "username": "Nome utente", + "password": "Parola d’accesso", + "display_name": "Nome visualizzato", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID dispositivo", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Utente assegnato", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Nessun utente", + "no_devices": "Nessun dispositivo", + "no_invitations": "Nessun invito", + "user_added": "User added", + "user_removed": "Utente rimosso", + "user_updated": "Utente aggiornato", + "device_assigned": "Dispositivo assegnato", + "device_unassigned": "Assegnazione dispositivo rimossa", + "invitation_created": "Invito creato", + "settings_saved": "Impostazioni organizzazione salvate", + "org_deleted": "Organizzazione eliminata", + "confirm_remove_user": "Rimuovere questo utente dall’organizzazione?", + "confirm_unassign_device": "Rimuovere questo dispositivo dall’organizzazione?", + "confirm_delete_org": "Eliminare definitivamente questa organizzazione?", + "edit_role": "Modifica ruolo", + "raw_settings": "Impostazioni grezze", + "key": "Key", + "value": "Value", + "save": "Salva", + "policy_unattended": "Accesso non presidiato", + "policy_attended": "Accesso presidiato", + "policy_ask": "Always ask", + "expires_hours": "Scade tra ore", + "loading_failed": "Impossibile caricare le organizzazioni", + "name_slug_required": "Nome e slug sono obbligatori", + "org_created": "Organizzazione creata", + "org_updated": "Organizzazione aggiornata", + "create_new_user": "Crea nuovo utente", + "add_existing_user": "Aggiungi utente esistente", + "none_available": "none", + "select_user": "Seleziona utente", + "org_role": "Ruolo organizzazione", + "link_user_hint": "Collega un utente esistente a questa organizzazione.", + "no_available_users": "Nessun utente disponibile", + "user_linked": "Utente collegato" + }, + "chat": { + "e2e_enabled": "Crittografia end-to-end", + "e2e_establishing": "Creazione canale sicuro...", + "e2e_established": "Canale sicuro stabilito", + "e2e_unsupported": "Crittografia E2E non supportata in questo browser", + "typing_indicator": "sta scrivendo...", + "read_receipt": "Letto", + "delivered": "Consegnato", + "file_share": "Condivisione file", + "file_too_large": "File troppo grande (max 50MB)", + "file_encrypted": "Trasferimento file crittografato", + "presence_online": "Online", + "presence_away": "Assente", + "presence_busy": "Occupato", + "presence_offline": "Offline", + "key_rotation": "Chiavi di sicurezza rinnovate", + "new_message": "Nuovo messaggio", + "title": "Chat", + "contacts": "Contatti", + "groups": "Gruppi", + "no_contacts": "Nessun contatto ancora", + "no_groups": "Nessun gruppo ancora", + "no_messages": "Nessun messaggio ancora", + "no_results": "Nessun risultato trovato", + "select_conversation": "Seleziona una conversazione per iniziare a chattare", + "type_message": "Scrivi un messaggio...", + "send": "Invia", + "attach_file": "Allega file", + "emoji": "Emoji", + "search_messages": "Cerca messaggi", + "create_group": "Crea gruppo", + "group_name": "Nome del gruppo", + "group_members": "Membri", + "cancel": "Annulla", + "create": "Crea", + "members": "membri", + "today": "Oggi", + "yesterday": "Ieri", + "react": "Reagisci", + "my_presence": "Il mio stato", + "search_placeholder": "Cerca contatti e messaggi", + "select_conversation_hint": "Seleziona una conversazione per visualizzare i messaggi", + "info": "Informazioni", + "group_name_placeholder": "Inserisci il nome del gruppo" + }, + "toast": { + "device_connected": "Dispositivo connesso", + "device_disconnected": "Dispositivo disconnesso", + "session_started": "Sessione avviata", + "session_ended": "Sessione terminata", + "file_upload_complete": "Caricamento file completato", + "settings_saved": "Impostazioni salvate", + "error_generic": "Si è verificato un errore", + "connection_lost": "Connessione persa", + "reconnecting": "Riconnessione in corso" + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Strumenti diagnostici e attività operative per operatori BetterDesk.", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Invia", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Inserisci testo", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Log server Go", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Controlla raggiungibilità ICMP e perdita pacchetti.", + "tcp_title": "Test porta TCP", + "tcp_desc": "Verifica se una porta TCP è raggiungibile dal server.", + "ssl_title": "Controllo certificato TLS", + "ssl_desc": "Ispeziona catena certificati, scadenza e corrispondenza nome host.", + "http_title": "Richiesta HTTP", + "http_desc": "Esegui un semplice controllo HTTP(S) e visualizza codice stato e header.", + "dns_title": "DNS Lookup", + "dns_desc": "Risolvi record DNS dall’ambiente server.", + "whois_title": "DNS Records", + "whois_desc": "Consulta dati di registrazione dominio e rete.", + "speed_title": "Speed Test", + "speed_desc": "Misura la velocità grezza di download dalla console.", + "run_speed_test": "Esegui test velocità", + "wol_title": "Wake-on-LAN", + "wol_desc": "Invia un magic packet Wake-on-LAN a un dispositivo.", + "wol_sent": "Pacchetto Wake-on-LAN inviato", + "hash_title": "Calcola hash", + "hash_desc": "Calcola SHA-256 o altri hash per testo inserito.", + "password_title": "Generatore credenziali", + "password_desc": "Genera password casuali robuste per attività amministrative.", + "jwt_title": "JWT Decoder", + "jwt_desc": "Decodifica header e payload JWT senza verificare la firma.", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Codifica o decodifica Base64.", + "url_title": "URL Encoder", + "url_desc": "Codifica o decodifica valori URL.", + "processes_title": "Processi", + "processes_desc": "Mostra processi server attivi e uso risorse.", + "disk_title": "Disk Usage", + "disk_desc": "Visualizza uso disco e spazio libero.", + "db_title": "Controllo database", + "db_desc": "Visualizza statistiche database e salute di base.", + "docker_title": "Container Docker", + "docker_desc": "Mostra container locali e relativo stato.", + "logs_title": "Log Viewer", + "logs_desc": "Visualizza log recenti di console e server.", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Valido da", + "valid_to": "Valido fino a", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Nessun dato", + "no_docker": "Docker non disponibile oppure nessun container presente.", + "no_logs": "Nessun log disponibile" + }, + "policies": { + "title": "Criteri organizzazione", + "subtitle": "Gestisci criteri di sicurezza, connessione e funzionalità per le organizzazioni", + "select_org": "Organizzazione", + "select_org_placeholder": "Seleziona un'organizzazione...", + "select_org_first": "Seleziona un'organizzazione per visualizzare il registro di audit dei criteri.", + "configured": "Configurato", + "connection_title": "Criterio di connessione", + "connection_desc": "Controlla come vengono stabilite le sessioni remote", + "connection_mode": "Modalità connessione", + "mode_attended": "Assistita (richiede approvazione utente)", + "mode_unattended": "Non assistita (consenti sempre)", + "mode_ask": "Chiedi sempre", + "max_session": "Durata max. sessione (minuti)", + "idle_lock": "Blocco inattività (minuti)", + "wallpaper_policy": "Sfondo durante sessione", + "wallpaper_show": "Mostra", + "wallpaper_hide_session": "Nascondi durante sessione", + "wallpaper_hide_always": "Nascondi sempre", + "features_title": "Criterio funzionalità", + "features_desc": "Abilita o disabilita funzionalità specifiche per i dispositivi", + "allow_file_transfer": "Consenti trasferimento file", + "allow_clipboard": "Consenti sincronizzazione appunti", + "allow_audio": "Consenti streaming audio", + "allow_recording": "Consenti registrazione sessione", + "security_title": "Criterio di sicurezza", + "security_desc": "Applica requisiti di sicurezza per i dispositivi dell'organizzazione", + "require_2fa": "Richiedi 2FA per accesso non assistito", + "password_min_length": "Lunghezza minima password", + "password_require_special": "Richiedi caratteri speciali", + "password_max_age": "Età max. password (giorni, 0=mai)", + "allowed_operators": "Ruoli operatore consentiti (separati da virgola)", + "network_title": "Criterio di rete", + "network_desc": "Controlla server relay e connessioni dirette", + "block_direct_p2p": "Blocca P2P diretto (forza relay)", + "allowed_relays": "Server relay consentiti (uno per riga)", + "ip_allowlist": "Whitelist IP (CIDR, uno per riga)", + "update_title": "Criterio aggiornamento", + "update_desc": "Controlla aggiornamenti automatici e canali di aggiornamento", + "auto_update": "Abilita aggiornamento automatico", + "update_channel": "Canale aggiornamento", + "audit_title": "Modifiche criteri", + "audit_desc": "Cronologia recente delle modifiche ai criteri", + "no_audit": "Nessuna modifica ai criteri registrata.", + "save_success": "Criterio salvato", + "save_failed": "Impossibile salvare il criterio", + "load_failed": "Impossibile caricare i criteri", + "block_direct_p2p_hint": "S'applique aux dispositivi di questa organizzazione. La valeur par dèfaut globale est sous Impostazioni → Stratègie de connessione." + }, + "attestation": { + "title": "Attestazione dispositivi", + "subtitle": "Monitora verifica identità dispositivi e impronte hardware", + "verified": "Verificato", + "pending": "In attesa", + "failed": "Fallito", + "device_list": "Registri di attestazione", + "device_list_desc": "Impronte hardware e stato verifica identità", + "col_device": "ID dispositivo", + "col_hostname": "Nome host", + "col_fingerprint": "Impronta", + "col_status": "Stato", + "col_last_check": "Ultimo controllo", + "col_actions": "Azioni", + "no_records": "Nessun record di attestazione trovato.", + "verify_success": "Attestazione verificata correttamente", + "verify_failed": "Verifica attestazione non riuscita", + "revoke_success": "Attestazione revocata", + "revoke_failed": "Impossibile revocare l’attestazione" + }, + "fleet": { + "title": "Gestione flotta", + "tab_resources": "Risorse", + "tab_tasks": "Attività", + "tab_builder": "Costruttore", + "tab_compliance": "Conformità", + "res_title": "Mappatura risorse", + "res_all_types": "Tutti i tipi", + "res_type_printer": "Stampante", + "res_type_network_drive": "Unità di rete", + "res_type_dns": "Server DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Aggiungi risorsa", + "res_name": "Nome risorsa", + "res_type": "Tipo", + "res_address": "Indirizzo / Percorso", + "res_target": "Destinazione", + "res_scope": "Ambito", + "res_scope_org": "Organizzazione", + "res_scope_group": "Gruppo", + "res_scope_device": "Dispositivo", + "res_scope_value": "Valore ambito", + "res_status": "Stato", + "res_active": "Attivo", + "res_inactive": "Inattivo", + "res_no_data": "Nessuna risorsa trovata. Clicca su 'Aggiungi'.", + "res_confirm_delete": "Sei sicuro di voler eliminare questa risorsa?", + "task_title": "Pianificatore attività", + "task_all_status": "Tutti gli stati", + "task_status_pending": "In attesa", + "task_status_running": "In esecuzione", + "task_status_success": "Completato", + "task_status_failed": "Fallito", + "task_search": "Cerca attività…", + "task_create": "Crea attività", + "task_name": "Nome attività", + "task_type": "Tipo", + "task_type_script": "Script", + "task_type_install": "Installazione", + "task_type_update": "Aggiornamento", + "task_type_restart": "Riavvio", + "task_type_deploy": "Distribuzione", + "task_type_scan": "Scansione", + "task_targets": "Destinazioni", + "task_targets_help": "ID dispositivi o nomi gruppi, separati da virgole", + "task_schedule": "Pianificazione", + "task_schedule_once": "Una volta", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Intervallo", + "task_schedule_value": "Valore pianificazione", + "task_script": "Script / Comando", + "task_retries": "Tentativi", + "task_timeout": "Timeout (s)", + "task_last_run": "Ultima esecuzione", + "task_no_data": "Nessuna attività trovata. Crea una nuova attività.", + "task_confirm_delete": "Sei sicuro di voler eliminare questa attività?", + "task_output": "Output attività", + "task_retry": "Riprova", + "builder_title": "Costruttore di workflow visuale", + "builder_select_workflow": "Seleziona workflow…", + "builder_new": "Nuovo", + "builder_save": "Salva", + "builder_export": "Esporta", + "builder_execute": "Esegui", + "builder_dry_run": "Simulazione", + "builder_triggers": "Trigger", + "builder_conditions": "Condizioni", + "builder_actions": "Azioni", + "builder_results": "Risultati", + "builder_transforms": "Trasformazioni", + "builder_properties": "Proprietà", + "builder_no_selection": "Seleziona un nodo per modificarne le proprietà.", + "workflow_name": "Nome workflow:", + "comp_title": "Conformità software", + "comp_compliant": "Conforme", + "comp_warning": "Avviso", + "comp_critical": "Critico", + "comp_score": "Punteggio medio", + "comp_device": "Dispositivo", + "comp_hostname": "Nome host", + "comp_os": "SO", + "comp_score_col": "Punteggio", + "comp_issues": "Problemi", + "comp_last_scan": "Ultima scansione", + "comp_scan": "Scansiona", + "comp_scan_all": "Scansiona tutto", + "comp_remediate": "Rimediare", + "comp_remediate_confirm": "Eseguire auto-rimedio su questo dispositivo?", + "comp_no_data": "Nessun dato di conformità. Esegui una scansione.", + "save": "Salva", + "cancel": "Annulla", + "close": "Chiudi", + "edit": "Modifica", + "delete": "Elimina", + "actions": "Azioni", + "all_orgs": "Tutte le organizzazioni", + "builder_node_trigger_manual": "Trigger manuale", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Trigger evento", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Riavvia dispositivo", + "builder_node_action_file_deploy": "Distribuisci file", + "builder_node_action_message": "Invia messaggio", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Crea avviso", + "builder_node_result_chain": "Concatena azione successiva", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "Seleziona organizzazione...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Unità di rete", + "type_dns": "Record DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Aggiungi risorsa", + "edit_resource": "Modifica risorsa", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Indirizzo", + "scope_org": "Organizzazione", + "scope_group": "Gruppo", + "scope_device": "Dispositivo", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Eliminare questo elemento?", + "all_statuses": "Tutti gli stati", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Non riuscito", + "search_tasks": "Cerca attività...", + "create_task": "Crea attività", + "edit_task": "Modifica attività", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Distribuzione file", + "task_type_registry": "Registry", + "target_devices": "Dispositivi destinazione", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Contenuto script", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Caricamento...", + "no_output": "Nessun output", + "error_loading": "Caricamento non riuscito", + "select_workflow": "Seleziona workflow", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuale", + "node_schedule": "Schedule", + "node_event": "Evento", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Riavvio", + "node_file_deploy": "Distribuzione file", + "node_send_message": "Invia messaggio", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Invia avviso", + "node_chain": "Catena", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Tutte le organizzazioni", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Dispositivo", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Avviare la correzione per questo elemento?" + }, + "scaling": { + "title": "Scalabilità e gestione relay", + "tab_overview": "Panoramica", + "tab_relays": "Nodi relay", + "tab_rules": "Regole di assegnazione", + "tab_capacity": "Pianificazione capacità", + "arch_title": "Architettura di rete", + "arch_loading": "Caricamento diagramma architettura...", + "stat_relay_nodes": "Nodi relay", + "stat_total_devices": "Dispositivi totali", + "stat_active_sessions": "Sessioni attive", + "stat_bandwidth": "Larghezza di banda totale", + "relay_health": "Stato relay", + "no_relays": "Nessun nodo relay configurato. Aggiungi il primo nodo per distribuire il carico.", + "relay_search": "Cerca relay...", + "relay_add": "Aggiungi nodo relay", + "relay_edit": "Modifica nodo relay", + "col_name": "Nome", + "col_address": "Indirizzo", + "col_location": "Posizione", + "col_devices": "Dispositivi", + "col_sessions": "Sessioni", + "col_bandwidth": "Larghezza di banda", + "col_status": "Stato", + "col_actions": "Azioni", + "col_priority": "Priorità", + "col_rule_name": "Nome regola", + "col_match": "Corrispondenza", + "col_target_relay": "Relay destinazione", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degradato", + "status_offline": "Offline", + "status_enabled": "Abilitato", + "status_disabled": "Disabilitato", + "confirm_delete_relay": "Sei sicuro di voler eliminare questo nodo relay?", + "confirm_delete_rule": "Sei sicuro di voler eliminare questa regola di assegnazione?", + "rules_hint": "Le regole di assegnazione determinano quale server relay gestisce gruppi di dispositivi specifici. Le regole vengono valutate per priorità (la più bassa prima).", + "rule_add": "Aggiungi regola", + "rule_edit": "Modifica regola", + "rule_match_type": "Tipo di corrispondenza", + "match_subnet": "Sottorete", + "match_group": "Gruppo dispositivi", + "match_tag": "Tag dispositivo", + "match_location": "Posizione", + "rule_match_value": "Valore di corrispondenza", + "fallback_master": "Server master", + "fallback_nearest": "Relay più vicino", + "relay_max_sessions": "Max sessioni", + "relay_max_bandwidth": "Max larghezza di banda (Mbps)", + "cap_tiers": "Livelli di capacità", + "cap_loading": "Caricamento dati capacità...", + "cap_recommendations": "Raccomandazioni", + "cap_no_recs": "Nessuna raccomandazione disponibile.", + "cap_planning": "Pianificazione infrastruttura", + "cap_config": "Configurazione", + "cap_max_devices": "Max dispositivi", + "cap_max_sessions": "Max sessioni", + "cap_current": "Attuale", + "cap_utilization": "Utilizzo", + "cap_tier_devices": "Capacità dispositivi", + "cap_tier_sessions": "Capacità sessioni", + "cap_tier_bandwidth": "Capacità larghezza di banda", + "cap_single_sqlite": "Server singolo (SQLite)", + "cap_single_pg": "Server singolo (PostgreSQL)", + "cap_master_3": "Master + 3 relay", + "cap_master_10": "Master + 10 relay", + "rec_no_relays": "Nessun nodo configurato. Considera l'aggiunta di relay per migliori prestazioni e ridondanza.", + "rec_devices_high": "L'utilizzo dei dispositivi è elevato. Considera l'aggiunta di più nodi relay.", + "rec_sessions_high": "La capacità delle sessioni si avvicina al limite. Considera l'aggiornamento dell'infrastruttura.", + "rec_cpu_high": "Alcuni nodi relay segnalano un utilizzo CPU elevato. Considera il bilanciamento del carico.", + "rec_all_good": "Tutti i sistemi operano entro parametri normali. Nessuna azione richiesta.", + "save": "Salva", + "cancel": "Annulla", + "edit": "Modifica", + "delete": "Elimina", + "close": "Chiudi", + "no_rules": "Nessuna regola di assegnazione.", + "relays_info_banner": "I nodi relay aiutano a distribuire le sessioni su più posizioni di rete. Salva le modifiche e riavvia i servizi se necessario.", + "relay_name_address_required": "Nome relay e indirizzo sono obbligatori", + "relay_save_failed": "Impossibile salvare il relay", + "relay_delete_failed": "Impossibile eliminare il relay", + "relay_saved": "Relay salvato", + "relay_deleted": "Relay eliminato", + "rule_name_value_required": "Nome regola e valore sono obbligatori", + "rule_save_failed": "Impossibile salvare la regola", + "rule_delete_failed": "Impossibile eliminare la regola", + "rule_saved": "Regola salvata", + "rule_deleted": "Regola eliminata" + }, + "cross_platform": { + "title": "Compatibilità multipiattaforma", + "tab_matrix": "Matrice di compatibilità", + "tab_distribution": "Distribuzione", + "tab_protocols": "Protocolli", + "tab_limitations": "Limitazioni", + "matrix_hint": "Matrice di supporto funzionalità per tutte le piattaforme supportate. Verde = supporto completo, Giallo = parziale, Grigio = non disponibile, Blu = pianificato.", + "col_feature": "Funzionalità", + "legend_full": "Supporto completo", + "legend_partial": "Supporto parziale", + "legend_none": "Non disponibile", + "legend_planned": "Pianificato", + "platform_breakdown": "Distribuzione per piattaforma", + "arch_breakdown": "Distribuzione per architettura", + "version_breakdown": "Distribuzione per versione", + "summary": "Riepilogo", + "total_devices": "Totale dispositivi", + "unique_platforms": "Piattaforme", + "unique_archs": "Architetture", + "unique_versions": "Versioni client", + "no_devices": "Nessun dispositivo ancora registrato.", + "protocols_hint": "La negoziazione delle capacità del protocollo garantisce che ogni client riceva solo le funzionalità supportate. Il server adatta il suo comportamento in base alle capacità segnalate.", + "capability_negotiation": "Negoziazione delle capacità", + "codec_support": "Supporto codec (dispositivi online)", + "feature_support": "Supporto funzionalità (dispositivi online)", + "no_codec_data": "Nessun dato codec dai dispositivi online.", + "no_feature_data": "Nessun dato funzionalità dai dispositivi online.", + "protobuf_schema": "Schema Protobuf ClientCapabilities", + "diagram_client": "Client", + "diagram_server": "Server BetterDesk", + "diagram_peer": "Peer remoto", + "limitations_hint": "Ogni piattaforma ha limitazioni specifiche che influenzano le funzionalità disponibili. Verificale quando pianifichi le distribuzioni.", + "feat_desktop_client": "Client desktop", + "feat_background_agent": "Agente in background", + "feat_remote_target": "Destinazione remota", + "feat_screen_capture": "Cattura schermo", + "feat_input_injection": "Iniezione di input", + "feat_file_transfer": "Trasferimento file", + "feat_clipboard_sync": "Sincronizzazione appunti", + "feat_audio_streaming": "Streaming audio", + "feat_chat": "Chat", + "feat_h264": "Codec H.264", + "feat_vp9": "Codec VP9", + "feat_av1": "Codec AV1", + "feat_cdap_agent": "Agente CDAP", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Browser web", + "platform_chromeos": "ChromeOS", + "status_production": "Produzione", + "status_testing": "Test", + "status_planned": "Pianificato", + "status_limited": "Limitato", + "status_experimental": "Sperimentale", + "limit_win_uac": "Elevazione UAC necessaria per l'installazione del servizio e l'iniezione di input sui desktop sicuri.", + "limit_win_service": "Funziona come servizio NSSM; richiede diritti di amministratore per l'installazione.", + "limit_win_firewall": "Le regole del Windows Firewall devono consentire le porte 21115-21119 per le connessioni relay.", + "limit_linux_wayland": "I compositori Wayland limitano la cattura programmatica dello schermo; richiesta API portale PipeWire.", + "limit_linux_pipewire": "La cattura audio richiede PipeWire; fallback PulseAudio disponibile ma limitato.", + "limit_linux_arm": "Build ARM64 disponibili; alcuni codec potrebbero usare la decodifica software (più lento).", + "limit_mac_screen": "Autorizzazione registrazione schermo necessaria in Impostazioni di Sistema > Privacy e Sicurezza.", + "limit_mac_signing": "L'agente deve essere firmato con Apple Developer ID per la distribuzione.", + "limit_mac_notarize": "Notarizzazione necessaria per macOS Gatekeeper (distribuzione fuori App Store).", + "limit_android_projection": "L'API MediaProjection richiede il consenso dell'utente per ogni sessione di cattura.", + "limit_android_accessibility": "L'iniezione di input richiede AccessibilityService; limitato da Android 14+.", + "limit_android_battery": "Servizio in background limitato dalla modalità Doze; potrebbe necessitare esenzione ottimizzazione batteria.", + "limit_ios_capture": "Apple vieta la cattura dello schermo in background; supportata solo la modalità visualizzatore.", + "limit_ios_input": "Nessuna iniezione di input consentita; solo visualizzazione remota e chat.", + "limit_ios_appstore": "Distribuzione solo tramite App Store; TestFlight per test beta.", + "limit_web_https": "API WebCodecs e WebRTC richiedono HTTPS; HTTP ricorre a JMuxer (codec limitati).", + "limit_web_codec": "Supporto codec dipendente dal browser; H.264 ampiamente supportato, VP9/AV1 variabile.", + "limit_web_performance": "Prestazioni limitate dal sandbox del browser; nessuna accelerazione hardware diretta.", + "limit_chrome_crostini": "Supporto completo dell'agente solo all'interno del container Linux Crostini.", + "limit_chrome_pwa": "La modalità PWA fornisce solo funzionalità web; nessuna funzione agente nativa.", + "limit_chrome_input": "Iniezione di input fuori dal container Crostini non supportata.", + "feat_session_recording": "Registrazione sessione", + "feat_multi_monitor": "Multi-ècran", + "feat_unattended_access": "Accesso unattended", + "limit_win_virtual_account": "Les servizios fonctionnent sous des comptes virtuels isolès invece di LocalSystem ; les percorsos de journaux personnalisès peuvent nècessiter des ajustements ACL.", + "limit_linux_unprivileged": "Les servizios fonctionnent sous le compte non privilègiè dèdiè « betterdesk » avec hardening systemd (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Audit sicurezza", + "tab_overview": "Panoramica", + "tab_events": "Eventi di audit", + "tab_hardening": "Rafforzamento", + "tab_vulnerabilities": "Vulnerabilità", + "security_score": "Punteggio di sicurezza", + "failed_logins": "Accessi falliti (24h)", + "active_bans": "Ban attivi", + "api_keys": "Chiavi API", + "old_keys": "Chiavi vecchie (>90g)", + "security_checks": "Controlli di sicurezza", + "tls_status": "Stato TLS", + "pass": "OK", + "warning": "Avviso", + "fail": "Errore", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "TLS e WSS", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "all_events": "Tutti gli eventi", + "event_login_failed": "Accesso fallito", + "event_login_success": "Accesso riuscito", + "event_peer_banned": "Dispositivo bannato", + "event_ip_banned": "IP bannato", + "event_config_changed": "Configurazione modificata", + "event_key_created": "Chiave creata", + "refresh": "Aggiorna", + "col_time": "Ora", + "col_action": "Azione", + "col_actor": "Attore", + "col_target": "Obiettivo", + "col_ip": "Indirizzo IP", + "col_details": "Dettagli", + "no_events": "Nessun evento di audit trovato.", + "hardening_hint": "Priorità di rafforzamento sicurezza per la distribuzione BetterDesk. Ordinati per gravità.", + "no_hardening": "Nessun elemento di rafforzamento disponibile.", + "vuln_hint": "Risultati della scansione vulnerabilità delle dipendenze. Esegui npm audit regolarmente.", + "no_vulns": "Nessuna vulnerabilità trovata. Le dipendenze sono sicure." + }, + "languages": { + "title": "Gestione lingue", + "total_languages": "Lingue totali", + "fully_translated": "Tradotte completamente", + "needs_review": "Da rivedere", + "reference_keys": "Chiavi di riferimento", + "no_languages": "Nessuna lingua trovata", + "badge_reference": "Riferimento", + "badge_review": "Revisione", + "badge_complete": "Completo", + "coverage": "copertura", + "keys": "chiavi", + "missing": "mancanti", + "extra": "extra", + "view_missing": "Mostra chiavi mancanti", + "fix_missing": "Fix Missing", + "missing_keys_for": "Chiavi mancanti per", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "e altri {n}...", + "all_keys_present": "Tutte le chiavi presenti", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Le chiavi mancanti in {code} devono essere tradotte manualmente.", + "no_fix_needed": "Nessuna correzione necessaria" + }, + "resource_control": { + "title": "Controllo risorse", + "tab_overview": "Panoramica", + "tab_usb": "USB Control", + "tab_optical": "Unità ottiche", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Quote", + "compliance_by_category": "Conformità per categoria", + "device_compliance": "Conformità dispositivi", + "search_devices": "Cerca dispositivi...", + "col_device": "Dispositivo", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Dispositivi totali", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Tasso di conformità", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configura", + "no_devices": "Nessun dispositivo trovato", + "usb_title": "Archiviazione USB", + "usb_hint": "Gestisci criteri per archiviazione USB rimovibile.", + "usb_storage_policy": "Criterio archiviazione USB", + "usb_whitelist": "Elenco USB consentiti", + "usb_whitelist_hint": "Un ID dispositivo o numero seriale per riga.", + "usb_audit_log": "Log audit USB", + "optical_title": "Unità ottiche", + "optical_hint": "Gestisci accesso a unità CD/DVD/Blu-ray.", + "optical_policy": "Criterio unità ottiche", + "optical_audit_log": "Log audit unità ottiche", + "monitors_title": "Monitor", + "monitors_hint": "Limita numero di schermi e impostazioni display.", + "monitors_max_count": "Numero massimo monitor", + "monitors_max_hint": "0 significa nessun limite.", + "monitors_resolution": "Limite risoluzione", + "monitors_brightness": "Limite luminosità", + "monitors_power_schedule": "Pianificazione alimentazione monitor", + "monitors_power_hint": "Pianificazione opzionale per spegnimento o attenuazione automatica.", + "disks_title": "Dischi", + "disks_hint": "Limita dispositivi di archiviazione e monitora salute disco.", + "disks_readonly": "Forza modalità sola lettura", + "disks_encryption": "Richiedi cifratura", + "disks_smart": "Controlla salute SMART", + "disks_hidden": "Percorsi nascosti", + "disks_hidden_hint": "Percorsi da nascondere al browser file e al trasferimento file.", + "quotas_title": "Quote e limiti", + "quotas_hint": "Limita larghezza di banda, archiviazione e processi.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Limite larghezza di banda", + "quotas_bandwidth_hint": "Velocità massima di trasferimento per sessione.", + "quotas_disk_quota": "Quota disco", + "quotas_disk_hint": "Spazio massimo che le funzioni BetterDesk possono usare.", + "quotas_process_whitelist": "Elenco processi consentiti", + "quotas_process_hint": "Un nome processo per riga.", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Elenco consentiti", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Gestione aggiornamenti", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Versione corrente", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Controlla ora", + "checking": "Checking…", + "up_to_date": "Tutto aggiornato", + "update_available": "Aggiornamento disponibile", + "changelog": "Release Notes", + "no_changelog": "Nessun changelog disponibile", + "files_changed": "File modificati", + "files": "File coinvolti", + "changes_unavailable": "Modifiche non disponibili", + "create_backup": "Crea backup", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installazione...", + "creating_backup": "Creazione backup...", + "downloading": "Download...", + "install_success": "Aggiornamento installato correttamente", + "install_failed": "Installazione aggiornamento non riuscita", + "restarting": "Riavvio servizi...", + "restart_complete": "Riavvio completato", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Informazioni versione non disponibili", + "backups_title": "Backup", + "backups_desc": "Ripristina o gestisci backup creati prima degli aggiornamenti.", + "no_backups": "Nessun backup trovato", + "restore": "Restore", + "restore_confirm": "Ripristinare questo backup?", + "restore_success": "Backup ripristinato correttamente", + "baseline_set": "Baseline impostata", + "commits_behind": "Commit indietro", + "total_files": "File totali", + "applied": "Applied", + "failed": "Non riuscito", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Server Go", + "component_agent": "Agent", + "component_scripts": "Script installazione", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Controllo toolchain Go...", + "go_not_found": "Go non trovato", + "go_check_failed": "Controllo Go non riuscito", + "server_building": "Compilazione binary server...", + "server_built": "Binary server compilato", + "server_build_failed": "Build server non riuscita", + "server_stale_title": "Binary server obsoleto", + "server_stale_desc": "Il codice sorgente del server Go è stato aggiornato, ma il binary attivo non è stato ricompilato. Ricompilalo ora per applicare aggiornamenti di sicurezza e librerie.", + "rebuild_server": "Ricompila binary server", + "rebuilding_server": "Ricompilazione server...", + "rebuild_server_success": "Binary server ricompilato e riavviato", + "rebuild_server_failed": "Impossibile ricompilare il binary server", + "server_deployed": "Binary server distribuito", + "server_deploy_failed": "Impossibile distribuire il binary server", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Download sorgente server...", + "delete": "Elimina", + "delete_confirm": "Eliminare definitivamente il backup {name}? Questa azione non può essere annullata.", + "delete_success": "Backup eliminato", + "delete_failed": "Impossibile eliminare il backup", + "retention_label": "Periodo conservazione", + "retention_hint": "Numero di giorni per conservare i backup degli aggiornamenti.", + "retention_saved": "Periodo di conservazione salvato", + "retention_invalid": "Periodo di conservazione non valido", + "retention_required_for_prune": "Il periodo di conservazione è richiesto per la pulizia", + "prune_now": "Apply now", + "prune_confirm": "Conservare solo i {n} backup più recenti ed eliminare gli altri?", + "prune_done": "Eliminati {n} backup", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Strategia aggiornamento", + "strategy_download": "Scarica binary precompilato", + "strategy_compile": "Compila localmente", + "both_available": "Download e compilazione disponibili", + "download_available": "Download disponibile", + "no_method": "Nessun metodo di aggiornamento disponibile", + "no_release": "No release", + "available": "Disponibile", + "server_downloading": "Download binary server...", + "server_downloaded": "Binary server scaricato", + "server_download_failed": "Impossibile scaricare il binary server", + "server_download_note": "Se non è disponibile una release binary, compila il server localmente con Go.", + "install_go_hint": "Installa Go per compilare localmente il binary server.", + "strategy_install_go": "Installa Go e compila", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Aggiornamento automatico disponibile", + "toolchain_ready": "Toolchain pronta", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Download toolchain...", + "toolchain_failed": "Installazione toolchain non riuscita", + "modal_title": "Installa aggiornamento", + "modal_done_title": "Aggiornamento completato", + "modal_close": "Chiudi", + "modal_reload_now": "Ricarica ora", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Aggiorna console web", + "phase_server": "Aggiorna componente server", + "phase_restart": "Riavvia servizi", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Backup saltato", + "server_skipped": "Aggiornamento server saltato", + "server_not_selected": "Go server not selected", + "server_processing": "Elaborazione componente server...", + "no_restart_needed": "Nessun riavvio necessario", + "complete": "Completato", + "complete_summary": "Processo di aggiornamento completato.", + "complete_with_errors": "Aggiornamento completato con avvisi", + "modal_done_with_errors_title": "Aggiornamento completato con elementi da controllare", + "console_will_restart": "La console web verrà riavviata.", + "restart_complete_msg": "Riavvio completato. Aggiorna la pagina se necessario.", + "refresh_recommended": "Aggiornamento pagina consigliato", + "confirm_title": "Conferma aggiornamento", + "confirm_with_backup": "Prima di installare l’aggiornamento verrà creato un backup.", + "confirm_no_backup": "L’aggiornamento verrà installato senza backup." + }, + "permissions": { + "title": "Permessi", + "subtitle": "Gestisci permessi granulari per ogni ruolo server.", + "info_title": "Permessi basati sui ruoli", + "info_desc": "I ruoli predefiniti hanno permessi integrati. Puoi sovrascrivere singoli permessi per ruolo senza modificare la gerarchia.", + "select_role": "Seleziona ruolo", + "select_role_placeholder": "Scegli un ruolo...", + "reset_overrides": "Reimposta override", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Livello server", + "custom": "Custom", + "default": "Default", + "revert": "Ripristina", + "saved": "Permesso salvato", + "reverted": "Permesso ripristinato", + "all_reverted": "Tutti gli override sono stati ripristinati", + "confirm_reset": "Rimuovere tutti gli override dei permessi per questo ruolo?", + "empty_title": "Seleziona un ruolo", + "empty_desc": "Scegli un ruolo a sinistra per visualizzarne i permessi.", + "locked_title": "Super Admin", + "locked_desc": "Questo ruolo eredita il comportamento base dalla gerarchia di sicurezza integrata.", + "cat_device": "Dispositivi", + "cat_user": "Users", + "cat_server": "Sistema server", + "cat_org": "Organizzazioni", + "cat_audit": "Audit e osservabilità", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Visualizzare dispositivi", + "perm_device_connect": "Connettersi ai dispositivi", + "perm_device_edit": "Modificare dispositivi", + "perm_device_delete": "Eliminare dispositivi", + "perm_device_ban": "Bloccare dispositivi", + "perm_device_change_id": "Cambiare ID dispositivo", + "perm_user_view": "Visualizzare utenti", + "perm_user_create": "Creare utenti", + "perm_user_edit": "Modificare utenti", + "perm_user_delete": "Eliminare utenti", + "perm_server_config": "Configurare server", + "perm_server_keys": "Gestire chiavi server", + "perm_org_create": "Creare organizzazioni", + "perm_org_edit": "Modificare organizzazioni", + "perm_org_delete": "Eliminare organizzazioni", + "perm_org_manage_users": "Gestire utenti organizzazione", + "perm_org_manage_devices": "Gestire dispositivi organizzazione", + "perm_audit_view": "Visualizzare log audit", + "perm_metrics_view": "Visualizzare metriche", + "perm_blocklist_edit": "Modificare lista blocchi", + "perm_cdap_view": "Visualizzare CDAP", + "perm_cdap_command": "Eseguire comandi CDAP", + "perm_cdap_terminal": "Aprire terminale CDAP", + "perm_cdap_files": "Gestire file CDAP", + "perm_enrollment_manage": "Gestire registrazioni", + "perm_enrollment_approve": "Approvare registrazioni", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Modificare branding", + "perm_server_attestation": "Attestazione prestazioni du serveur" + }, + "notifications": { + "title": "Notifiche", + "empty": "Nessuna nuova notifica", + "mark_all_read": "Segna tutto come letto", + "see_all": "Vedi tutte le richieste di aiuto", + "help_request": "Richiesta di aiuto", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibilità", + "subtitle": "Adatta la console a vista, movimento e lettura.", + "close": "Chiudi menu accessibilità", + "profiles": "Profili rapidi", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Testo più grande, contrasto più forte e indicatori di focus più evidenti.", + "profile_dyslexia": "Adatto alla dislessia", + "profile_dyslexia_hint": "Font leggibile, spaziatura più ampia e blocchi di testo più tranquilli.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Riduce il movimento e disattiva le animazioni non essenziali.", + "profile_color_assist": "Supporto colori", + "profile_color_assist_hint": "Regola i colori ed evidenzia link e titoli per un riconoscimento migliore.", + "reading": "Lettura", + "font_size": "Dimensione testo", + "line_height": "Altezza riga", + "letter_spacing": "Spaziatura lettere", + "word_spacing": "Spaziatura parole", + "readable_font": "Font leggibile", + "readable_font_hint": "Usa un font più facile da leggere per testi lunghi.", + "dyslexia_spacing": "Spaziatura per dislessia", + "dyslexia_spacing_hint": "Aumenta interlinea, spaziatura parole e lettere per una lettura più confortevole.", + "visual": "Visivo", + "contrast": "Contrasto", + "contrast_normal": "Normal", + "contrast_high_dark": "Alto contrasto scuro", + "contrast_high_light": "Alto contrasto chiaro", + "contrast_yellow_black": "Giallo su nero", + "color_filter": "Filtro colore", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturazione", + "underline_links": "Sottolinea link", + "underline_links_hint": "Rendi i link riconoscibili senza affidarti solo al colore.", + "highlight_links": "Evidenzia link", + "highlight_links_hint": "Aggiungi uno sfondo leggero ai link cliccabili.", + "highlight_headings": "Evidenzia titoli", + "highlight_headings_hint": "Rendi più visibili i titoli delle sezioni.", + "hide_media": "Dim media", + "hide_media_hint": "Nascondi immagini decorative e media non essenziali.", + "interaction": "Interazione", + "strong_focus": "Bordo focus marcato", + "strong_focus_hint": "Mostra un bordo evidente intorno all’elemento attivo.", + "large_cursor": "Cursore grande", + "large_cursor_hint": "Ingrandisci gli indicatori del cursore nelle viste interattive.", + "reduce_motion": "Riduci movimento", + "reduce_motion_hint": "Limita transizioni, parallasse ed effetti in movimento.", + "pause_animations": "Metti in pausa animazioni", + "pause_animations_hint": "Ferma le animazioni non essenziali mentre questa opzione è attiva.", + "reading_guide": "Guida di lettura", + "reading_guide_hint": "Mostra una guida orizzontale che segue la riga corrente.", + "reading_mask": "Maschera di lettura", + "reading_mask_hint": "Oscura il contenuto fuori dall’area di lettura attiva.", + "preview": "Anteprima", + "preview_title": "Titolo anteprima", + "preview_text": "Questa anteprima mostra come appaiono testo, link e pulsanti con le impostazioni di accessibilità correnti.", + "preview_link": "Link di anteprima", + "preview_status": "Online", + "preview_button": "Pulsante di anteprima", + "preview_secondary": "Secondary", + "reset": "Ripristina", + "done": "Fine" + }, + "server_mgmt": { + "title": "Gestione server", + "subtitle": "Pannello in stile Cockpit per l'host della console BetterDesk (BETA).", + "beta_tooltip": "Queste funzioni di gestione server sono ancora in beta.", + "notice_title": "Gestione server", + "notice_body": "Usa questi strumenti con cautela. Le modifiche possono influenzare i servizi attivi.", + "tab_overview": "Panoramica", + "tab_terminal": "Terminale", + "tab_files": "File", + "tab_services": "Servizi", + "cpu": "CPU", + "memory": "Memoria", + "load": "Carico medio", + "disks": "Dischi", + "history": "Cronologia", + "host_info": "Host info", + "cores": "cores", + "uptime": "Tempo di attività", + "no_disks": "Nessun disco trovato", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "Terminale PTY interattivo disponibile", + "term_connect": "Connetti", + "term_disconnect": "Disconnetti", + "term_clear": "Pulisci", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connesso", + "term_disconnected": "Disconnesso", + "term_error": "Errore terminale", + "term_warning": "Avviso terminale", + "term_hint": "Esegui comandi con la stessa attenzione che useresti sul server.", + "term_lib_failed": "Impossibile caricare la libreria terminale", + "files_up": "Su", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Nome", + "files_size": "Dimensione", + "files_perms": "Mode", + "files_mtime": "Modificato", + "files_rename": "Rinomina", + "files_rename_prompt": "New name:", + "files_empty": "Questa cartella è vuota", + "files_error": "Impossibile caricare i file", + "read_failed": "Impossibile leggere il file", + "save_failed": "Impossibile salvare il file", + "rename_failed": "Rinomina non riuscita", + "delete_failed": "Eliminazione non riuscita", + "delete_confirm": "Eliminare questo elemento?", + "mkdir_prompt": "Nome nuova cartella", + "mkdir_failed": "Impossibile creare la cartella", + "file_saved": "File salvato", + "binary_warn": "Questo sembra un file binario. La modifica potrebbe danneggiarlo.", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Cerca servizi...", + "svc_name": "Servizio", + "svc_state": "Stato", + "svc_description": "Description", + "svc_empty": "Nessun servizio trovato", + "svc_load_failed": "Impossibile caricare i servizi", + "svc_action_failed": "Azione servizio non riuscita", + "svc_confirm": "Run", + "svc_start": "Avvia", + "svc_stop": "Ferma", + "svc_restart": "Riavvia", + "svc_reload": "Reload", + "svc_enable": "Abilita", + "svc_disable": "Disabilita", + "svc_status": "Status" + }, + "download": { + "title": "Scarica BetterDesk Agent", + "choose_platform": "Scegli piattaforma", + "choose_platform_hint": "Seleziona il programma di installazione adatto al tuo sistema operativo.", + "download": "Scarica", + "building": "Compilazione…", + "failed": "Build non riuscita", + "need_help": "Hai bisogno di aiuto?", + "powered_by": "Basato su" + }, + "server_attestation": { + "title": "Attestazione server", + "subtitle": "Benchmark di prestazioni che determina la capacità di connessioni remote simultanee all'80% di soglia CPU, RAM e disco.", + "warning_title": "Test di carico", + "warning_body": "Il benchmark simula connessioni WebSocket parallele ai server signal e relay. Esegui nelle ore di bassa affluenza — questo test carica la produzione.", + "run_benchmark": "Esegui benchmark", + "abort": "Interrompi", + "download_report": "Scarica report JSON", + "last_test": "Ultimo test", + "no_test_yet": "Nessun benchmark eseguito finora", + "max_connections": "Connessioni massime", + "threshold_80": "Soglia 80% — metriche finali", + "disk": "Disco", + "ramp_chart": "Grafico rampa di carico", + "connections": "Connessioni", + "connections_short": "conn.", + "tier_guide_title": "Cosa significa ogni livello?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "NON CLASSIFICATO", + "tier_bronze_desc": "1–25 connessioni simultanee — VPS piccolo (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 connessioni — server di fascia media (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 connessioni — server ad alte prestazioni (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 connessioni — infrastruttura enterprise (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ connessioni — classe turbo: hardware dedicato, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Nota: in Docker, le metriche CPU/RAM possono riflettere i limiti del container anziché l'host fisico.", + "badge_tooltip": "Attestazione server BetterDesk — certificazione prestazioni server", + "confirm_run": "Questo benchmark effettuerà un test di carico sul server con connessioni simulate. Continuare?", + "starting": "Avvio...", + "complete": "Benchmark completato", + "signal_peers": "Peer signal", + "relay_sessions": "Sessioni relay", + "page_error": "Èchec du caricamento de la page d'attestazione server", + "mode_estimated": "Estimè (WebSocket inaccessible)", + "incomplete": "Benchmark terminè sans niveau valide" + }, + "commercialization": { + "title": "Commercializzazione", + "subtitle": "Pacchetti supporto, sessioni fatturabili e report", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Funzione anticipata — fatturazione e pacchetti in sviluppo attivo.", + "tabs": { + "overview": "Panoramica", + "packages": "Pacchetti e contratti", + "sessions": "Sessioni", + "reports": "Report", + "settings": "Impostazioni avanzate" }, - "branding": { - "identity_title": "Identità del marchio", - "identity_desc": "Personalizza il nome e la descrizione dell'applicazione mostrati nella console", - "app_name": "Nome applicazione", - "app_description": "Descrizione applicazione", - "logo_title": "Logo", - "logo_desc": "Scegli come appare il tuo logo nella barra laterale e nella pagina di accesso", - "logo_type_icon": "Icona Material", - "logo_type_svg": "Codice SVG", - "logo_type_image": "URL immagine", - "logo_icon_name": "Nome icona", - "logo_icon_hint": "Inserisci un nome Material Icons (es: dns, cloud, security). Vedi fonts.google.com/icons", - "logo_svg_code": "Codice SVG", - "logo_svg_hint": "Incolla il tuo markup SVG qui. Supporta elementi completi con percorsi e stili.", - "logo_image_upload": "Carica immagine", - "logo_image_choose": "Scegli file immagine", - "logo_image_hint": "PNG, JPG, GIF, WebP o SVG. Max 1,5 MB. L'immagine viene salvata come dati base64.", - "logo_image_url": "Dati / URL immagine", - "logo_image_url_hint": "Compilato automaticamente al caricamento o incolla un URL manualmente.", - "logo_image_too_large": "L'immagine è troppo grande. Dimensione massima: 1,5 MB.", - "logo_image_invalid_type": "Tipo di file non valido. Usa PNG, JPG, GIF, WebP o SVG.", - "preview": "Anteprima", - "colors_title": "Schema colori", - "colors_desc": "Personalizza la palette dei colori. Lascia vuoto per i valori predefiniti.", - "colors_backgrounds": "Sfondi", - "colors_text": "Testo", - "colors_accents": "Colori accento", - "colors_borders": "Bordi", - "import_export_title": "Importa / Esporta", - "import_export_desc": "Salva il tuo tema come file JSON o importane uno da un'altra istanza", - "export_theme": "Esporta tema", - "import_theme": "Importa tema", - "reset_defaults": "Ripristina impostazioni predefinite", - "save_branding": "Salva branding", - "saved": "Branding salvato con successo. Ricaricamento...", - "exported": "Tema esportato", - "imported": "Tema importato con successo. Ricaricamento...", - "import_error": "Importazione tema fallita. Formato file non valido.", - "reset_confirm": "Sei sicuro di voler ripristinare il branding alle impostazioni predefinite? Questa azione non può essere annullata.", - "reset_success": "Branding ripristinato alle impostazioni predefinite. Ricaricamento...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Testo principale mostrato come logo del marchio", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Testo secondario sotto il logo (ad es. nome prodotto o slogan)", - "logo_upload_success": "Logo caricato correttamente.", - "typography_title": "Typography", - "typography_desc": "Scegli i font per titoli e testo. I font vengono scaricati sul server per l’hosting locale.", - "font_heading": "Font titoli", - "font_heading_hint": "Usato per titoli (H1-H6) e logo testuale", - "font_body": "Body Font", - "font_body_hint": "Usato per testo e componenti UI", - "font_search_placeholder": "Cerca font...", - "font_system_default": "Predefinito di sistema", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "Font scaricati sul server", - "powered_by": "Propulsè par", - "background_title": "Sfondo et apparence", - "background_desc": "Dèfinissez un fond d'ècran, un dègradè ou un fond uni pour la console. Les cartes flottent au-dessus.", - "bg_type_none": "Nessuno", - "bg_type_color": "Colore unie", - "bg_type_gradient": "Dègradè", - "bg_type_image": "Immagine", - "bg_color": "Colore d'sfondo", - "bg_gradient": "Dègradè CSS", - "bg_gradient_hint": "Tout dègradè CSS valide, p. ex. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Tèlècharger l'immagine d'sfondo", - "bg_image_choose": "Choisir un file immagine", - "bg_image_hint": "PNG, JPG, WebP ou GIF. 8 Mo maximum. Stockè sur le serveur.", - "bg_image_url": "Percorso de l'immagine / URL", - "bg_size": "Dimensionnement de l'immagine", - "bg_size_cover": "Copri (remplir l'ècran)", - "bg_size_contain": "Contenu (ajuster)", - "bg_size_auto": "Automatico (originale)", - "bg_blur": "Sfocatura d'sfondo", - "bg_overlay": "Sovrapposizione sombre", - "bg_overlay_hint": "Scurisce l'sfondo pour une meilleure lisibilitè du texte.", - "bg_image_too_large": "L'immagine est trop grande. La dimensione massima est de 8 Mo.", - "bg_image_invalid_type": "Type de file invalide. Utilisez PNG, JPG, WebP ou GIF.", - "bg_upload_success": "Immagine d'sfondo tèlèchargèe avec succès.", - "login_title": "Page de connessione", - "login_desc": "Personalizza le titolo, le sous-titolo et l'sfondo de l'ècran de connessione.", - "login_heading": "Titolo de connessione", - "login_heading_placeholder": "Bon indietro", - "login_subheading": "Sous-titolo de connessione", - "login_subheading_placeholder": "Accedi à votre compte", - "login_bg_inherit": "Come la console", - "agent_title": "Page de tèlècaricamento de l'agent", - "agent_desc": "Personalizza le portail de tèlècaricamento d'agent public affichè aux utenti finaux.", - "agent_show_powered": "Mostra « Propulsè par BetterDesk »", - "agent_show_powered_hint": "Mostra l'attribuzione BetterDesk dans le piè di pagina du portail de tèlècaricamento.", - "footer_title": "Piè di pagina et copyright", - "footer_desc": "Ajoutez une ligne de piè di pagina personnalisèe affichèe sur l'ècran de connessione et dans la barre latèrale de la console.", - "footer_text": "Texte du piè di pagina", - "footer_text_hint": "p. ex. une mention de droit d'auteur ou le nome de l'entreprise.", - "show_powered": "Mostra l'attribuzione « BetterDesk »", - "show_powered_hint": "Mostra le nome et la version de BetterDesk dans le piè di pagina de connessione et la barre latèrale.", - "custom_css_title": "CSS personnalisè", - "custom_css_desc": "Avancè : injectez du CSS personnalisè appliquè dans toute la console et la page de connessione.", - "custom_css_hint": "À utiliser avec prècaution. Les règles invalides ou non sècurisèes sont nettoyèes. Maximum 20 000 caractères." + "clock": { + "title": "Ora server (NTP)", + "check_now": "Controlla ora", + "unsynced": "L'orologio del server non è sincronizzato — le sessioni fatturabili possono essere bloccate" }, - "device_detail": { - "tab_overview": "Panoramica", - "tab_tags": "Tag e note", - "tab_actions": "Azioni", - "section_identity": "Identità", - "section_network": "Rete", - "section_timestamps": "Marcature temporali", - "section_connect": "Connessione", - "section_manage": "Gestione", - "folder": "Cartella", - "status_tier": "Livello stato", - "device_banned": "Questo dispositivo è bannato", - "no_reason": "Nessun motivo fornito", - "tags": "Tag", - "no_tags": "Nessun tag assegnato a questo dispositivo", - "tag_placeholder": "Inserisci un nome tag...", - "add_tag": "Aggiungi", - "tag_exists": "Questo tag esiste già", - "notes": "Note", - "notes_placeholder": "Aggiungi note su questo dispositivo...", - "danger_zone": "Zona pericolosa", - "action_connect_web": "Remoto web", - "action_connect_web_desc": "Connetti tramite desktop remoto del browser", - "action_native_remote": "BetterDesk remoto", - "action_native_remote_desc": "Stream JPEG nativo — nessun plugin richiesto", - "action_connect_desktop": "Client desktop", - "action_connect_desktop_desc": "Apri nell'app client desktop", - "action_change_id_desc": "Cambia l'ID di registrazione del dispositivo", - "action_ban_desc": "Impedisci a questo dispositivo di connettersi", - "action_unban_desc": "Permetti a questo dispositivo di connettersi di nuovo", - "action_delete_desc": "Rimuovi permanentemente questo dispositivo", - "tab_hardware": "Hardware", - "tab_metrics": "Metriche", - "section_system": "Sistema", - "section_cpu": "Processore", - "section_memory": "Memoria", - "section_displays": "Schermi", - "section_encoding": "Capacità di codifica", - "section_live_metrics": "Metriche in tempo reale", - "section_current_usage": "Utilizzo attuale", - "section_usage_history": "Storico utilizzo", - "os": "Sistema operativo", - "version": "Versione client", - "cpu_model": "Modello CPU", - "cpu_cores": "Core CPU", - "cpu_freq": "Frequenza CPU", - "total_memory": "Memoria totale", - "metric_memory": "Memoria", - "metric_disk": "Disco", - "metrics_updated": "Aggiornato", - "device_groups": "Gruppi", - "no_sysinfo": "Nessuna informazione hardware disponibile", - "no_sysinfo_hint": "Le informazioni di sistema appariranno dopo che il dispositivo avrà inviato un report sysinfo", - "no_metrics": "Nessun dato metrica disponibile", - "no_metrics_hint": "Le metriche appariranno dopo che il dispositivo avrà inviato report heartbeat", - "chart_oldest": "← Più vecchio", - "chart_newest": "Più recente →", - "tab_services": "Servizi", - "tab_processes": "Processi", - "tab_events": "Eventi", - "tab_activity": "Attività", - "tab_files": "File", - "agent_lazy_hint": "Fai clic su questa scheda per caricare dati live dall’agente", - "agent_offline": "Agente non online", - "agent_timeout": "L’agente non ha risposto in tempo", - "agent_error": "Impossibile caricare i dati dell’agente", - "service_name": "Nome", - "service_display": "Nome visualizzato", - "service_status": "Stato", - "service_start": "Modalità avvio", - "process_name": "Nome", - "process_user": "Utente", - "process_memory": "Memoria" + "stats": { + "active_sessions": "Sessioni fatturabili attive" }, - "inventory": { - "title": "Inventario", - "subtitle": "Inventario hardware e software dei dispositivi gestiti", - "device_id": "ID dispositivo", - "hostname": "Nome host", - "os": "Sistema operativo", - "cpu": "CPU", - "cpu_cores": "Core CPU", - "cpu_usage": "Utilizzo CPU", - "memory": "Memoria", - "memory_total": "Memoria totale", - "memory_used": "Memoria usata", - "memory_available": "Memoria disponibile", - "memory_usage": "Utilizzo memoria", - "swap": "Swap", - "disks": "Dischi", - "disk_count": "Numero dischi", - "network": "Rete", - "network_interfaces": "Interfacce di rete", - "software": "Software", - "software_count": "Software installato", - "system": "Sistema", - "kernel": "Kernel", - "architecture": "Architettura", - "uptime": "Tempo di attività", - "frequency": "Frequenza", - "physical_cores": "Core fisici", - "logical_cores": "Core logici", - "model": "Modello", - "usage": "Utilizzo", - "total": "Totale", - "used": "Usato", - "available": "Disponibile", - "mount_point": "Punto di montaggio", - "removable": "Rimovibile", - "mac_address": "Indirizzo MAC", - "ip_addresses": "Indirizzi IP", - "traffic": "Traffico", - "collect_now": "Raccogli ora", - "collector_running": "Raccolta in corso", - "collector_stopped": "Raccolta fermata", - "last_upload": "Ultimo caricamento", - "total_uploads": "Totale", - "last_seen": "Ultimo avvistamento", - "collected_at": "Raccolto il", - "no_data": "Nessun dato inventario disponibile. Clicca \"Raccogli ora\" per ottenere informazioni di sistema.", - "no_devices": "Nessun dispositivo con dati inventario trovato", - "detail_title": "Dettaglio inventario dispositivo", - "telemetry": "Telemetria", - "view_detail": "Vedi dettaglio", - "export": "Esporta", - "refresh": "Aggiorna" + "packages": { + "new": "Nuovo pacchetto", + "name": "Nome", + "included_minutes": "Minuti inclusi", + "overage_rate": "Tariffa extra / h", + "currency": "Valuta", + "heading": "Pacchetti di supporto", + "prompt_name": "Nome pacchetto", + "create_title": "Nuovo pacchetto per organizzazione", + "create_submit": "Crea pacchetto", + "select_org": "Organizzazione", + "select_org_placeholder": "Seleziona organizzazione…" }, - "tickets": { - "title": "Helpdesk", - "subtitle": "Ticket di supporto e tracciamento problemi", - "create": "Nuovo ticket", - "edit": "Modifica ticket", - "delete": "Elimina ticket", - "detail": "Dettaglio ticket", - "ticket_id": "ID ticket", - "ticket_title": "Titolo", - "description": "Descrizione", - "status": "Stato", - "priority": "Priorità", - "category": "Categoria", - "assigned_to": "Assegnato a", - "created_by": "Creato da", - "device": "Dispositivo", - "sla_due": "Scadenza SLA", - "created_at": "Creato", - "updated_at": "Aggiornato", - "resolved_at": "Risolto", - "closed_at": "Chiuso", - "status_open": "Aperto", - "status_in_progress": "In corso", - "status_resolved": "Risolto", - "status_closed": "Chiuso", - "priority_low": "Bassa", - "priority_medium": "Media", - "priority_high": "Alta", - "priority_critical": "Critica", - "category_general": "Generale", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Rete", - "category_access": "Accesso", - "category_other": "Altro", - "comments": "Commenti", - "add_comment": "Aggiungi commento", - "comment_placeholder": "Scrivi un commento...", - "internal_note": "Nota interna (non visibile agli utenti finali)", - "attachments": "Allegati", - "upload_attachment": "Carica allegato", - "download": "Scarica", - "connect_device": "Connetti al dispositivo", - "no_tickets": "Nessun ticket trovato", - "no_comments": "Nessun commento", - "no_attachments": "Nessun allegato", - "title_required": "Il titolo è obbligatorio", - "delete_confirm": "Sei sicuro di voler eliminare il ticket #{id}?", - "delete_success": "Ticket eliminato con successo", - "created_success": "Ticket creato con successo", - "updated_success": "Ticket aggiornato con successo", - "sla_overdue": "SLA scaduto", - "filter_all": "Tutti", - "search_placeholder": "Cerca ticket...", - "assign_to_me": "Assegna a me", - "unassign": "Rimuovi assegnazione", - "stats_total": "Totale", - "stats_open": "Aperti", - "stats_in_progress": "In corso", - "stats_resolved": "Risolti", - "stats_closed": "Chiusi" - }, - "activity": { - "title": "Monitoraggio attività", - "subtitle": "Utilizzo applicazioni e tracciamento inattività", - "device": "Dispositivo", - "hostname": "Nome host", - "sessions": "Sessioni", - "idle_time": "Tempo di inattività", - "active_time": "Tempo attivo", - "last_report": "Ultimo report", - "top_apps": "Applicazioni principali", - "app_name": "Applicazione", - "window_title": "Titolo finestra", - "category": "Categoria", - "duration": "Durata", - "started_at": "Iniziato", - "ended_at": "Terminato", - "session_count": "Numero sessioni", - "total_active": "Totale attivo", - "total_idle": "Totale inattivo", - "detail_count": "Record dettagliati", - "no_data": "Nessun dato attività disponibile", - "no_sessions": "Nessuna sessione registrata", - "filter_from": "Da", - "filter_to": "A", - "filter_apply": "Applica filtro", - "hours": "ore", - "minutes": "minuti", - "seconds": "secondi", - "category_browser": "Browser", - "category_productivity": "Produttività", - "category_communication": "Comunicazione", - "category_development": "Sviluppo", - "category_media": "Media", - "category_gaming": "Giochi", - "category_system": "Sistema", - "category_other": "Altro", - "summary": "Riepilogo", - "details": "Dettagli", - "refresh": "Aggiorna", - "search": "Cerca dispositivi...", - "date_range": "Intervallo date", - "device_id": "ID dispositivo", - "session_start": "Inizio sessione", - "session_end": "Fine sessione", - "user": "Utente", - "no_activity": "Nessuna attività registrata", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Nessuna applicazione" - }, - "automation": { - "title": "Automazione e avvisi", - "subtitle": "Regole di allarme, comandi remoti e configurazione SMTP", - "rules": "Regole di allarme", - "rules_subtitle": "Definisci condizioni che attivano notifiche", - "alerts": "Storico avvisi", - "alerts_subtitle": "Visualizza e conferma gli avvisi attivati", - "commands": "Comandi remoti", - "commands_subtitle": "Invia comandi ai dispositivi remoti", - "smtp": "Configurazione SMTP", - "smtp_subtitle": "Impostazioni notifiche e-mail", - "rule_name": "Nome regola", - "description": "Descrizione", - "condition_type": "Tipo condizione", - "condition_op": "Operatore", - "condition_value": "Soglia", - "severity": "Gravità", - "scope_device": "Dispositivo target", - "scope_all": "Tutti i dispositivi", - "cooldown": "Tempo di recupero (secondi)", - "notify_emails": "E-mail di notifica", - "enabled": "Attivo", - "disabled": "Disattivo", - "create_rule": "Crea regola", - "edit_rule": "Modifica regola", - "delete_rule": "Elimina regola", - "acknowledge": "Conferma", - "acknowledged": "Confermato", - "unacknowledged": "Non confermato", - "triggered_at": "Attivato il", - "severity_info": "Informazione", - "severity_warning": "Attenzione", - "severity_critical": "Critico", - "op_gt": "Maggiore di", - "op_gte": "Maggiore o uguale", - "op_lt": "Minore di", - "op_lte": "Minore o uguale", - "op_eq": "Uguale a", - "op_neq": "Diverso da", - "type_cpu_usage": "Utilizzo CPU (%)", - "type_memory_usage": "Utilizzo memoria (%)", - "type_disk_usage": "Utilizzo disco (%)", - "type_offline_duration": "Durata offline (s)", - "type_idle_duration": "Durata inattività (s)", - "type_custom": "Personalizzato", - "command_type": "Tipo comando", - "command_payload": "Comando / Script", - "command_result": "Risultato", - "command_status": "Stato", - "send_command": "Invia comando", - "status_pending": "In attesa", - "status_running": "In esecuzione", - "status_completed": "Completato", - "status_failed": "Fallito", - "smtp_host": "Host SMTP", - "smtp_port": "Porta", - "smtp_secure": "Usa TLS", - "smtp_user": "Nome utente", - "smtp_pass": "Segreto SMTP", - "smtp_from": "Indirizzo mittente", - "smtp_test": "Testa connessione", - "smtp_save": "Salva configurazione", - "smtp_test_success": "Connessione riuscita", - "smtp_test_failed": "Connessione fallita", - "no_rules": "Nessuna regola di allarme configurata", - "no_alerts": "Nessun avviso attivato", - "no_commands": "Nessun comando inviato", - "id_payload_required": "ID dispositivo e payload sono obbligatori", - "no_commands_sent": "Nessun comando ancora inviato" - }, - "file_transfer": { - "title": "Trasferimento file", - "transfers": "Trasferimenti", - "new_transfer": "Nuovo trasferimento", - "upload": "Carica", - "download": "Scarica", - "direction": "Direzione", - "filename": "Nome file", - "file_size": "Dimensione file", - "mime_type": "Tipo MIME", - "progress": "Progresso", - "status": "Stato", - "device": "Dispositivo", - "initiated_by": "Iniziato da", - "created_at": "Creato il", - "cancel": "Annulla", - "cancel_confirm": "Sei sicuro di voler annullare questo trasferimento?", - "download_file": "Scarica file", - "browse_files": "Sfoglia file", - "select_file": "Seleziona file", - "select_device": "Seleziona dispositivo", - "no_transfers": "Nessun trasferimento file", - "status_pending": "In attesa", - "status_active": "Attivo", - "status_completed": "Completato", - "status_failed": "Fallito", - "status_cancelled": "Annullato", - "bytes_transferred": "Byte trasferiti", - "chunks": "Blocchi", - "transfer_started": "Trasferimento avviato", - "transfer_completed": "Trasferimento completato", - "transfer_failed": "Trasferimento fallito", - "transfer_cancelled": "Trasferimento annullato", - "max_file_size": "Dimensione massima file: 4 GB", - "error_too_large": "Il file è troppo grande", - "error_no_device": "Nessun dispositivo selezionato", - "error_no_file": "Nessun file selezionato" - }, - "network": { - "title": "Monitoraggio rete", - "targets": "Obiettivi di monitoraggio", - "add_target": "Aggiungi obiettivo", - "edit_target": "Modifica obiettivo", - "delete_target": "Elimina obiettivo", - "delete_confirm": "Sei sicuro di voler eliminare questo obiettivo?", - "target_name": "Nome", - "host": "Host", - "port": "Porta", - "url": "URL", - "check_type": "Tipo di controllo", - "timeout": "Timeout", - "interval": "Intervallo", - "enabled": "Attivo", - "status": "Stato", - "last_check": "Ultimo controllo", - "last_rtt": "Ultimo RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Raggiungibile", - "status_down": "Non raggiungibile", - "status_unknown": "Sconosciuto", - "check_now": "Controlla ora", - "history": "Storico controlli", - "stats": "Statistiche", - "total_targets": "Totale obiettivi", - "targets_up": "Obiettivi raggiungibili", - "targets_down": "Obiettivi non raggiungibili", - "type_ping": "Ping (ICMP)", - "type_tcp": "Porta TCP", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Strumenti di rete", - "ping_tool": "Test Ping", - "tcp_tool": "Controllo porta TCP", - "http_tool": "Controllo HTTP", - "dns_tool": "Risoluzione DNS", - "monitor_start": "Avvia monitoraggio", - "monitor_stop": "Ferma monitoraggio", - "monitor_running": "Monitoraggio in corso", - "monitor_stopped": "Monitoraggio fermato", - "no_targets": "Nessun obiettivo di monitoraggio configurato", - "no_history": "Nessuno storico controlli disponibile", - "error_code": "Errore", - "status_code": "Codice stato HTTP", - "search_targets": "Cerca destinazioni...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Cronologia controlli", - "name_host_required": "Nome e host sono obbligatori", - "uptime": "Tempo di attività", - "response_time": "Tempo di risposta", - "avg_response": "Risposta media", - "charts": "Grafici", - "realtime": "Tempo reale", - "response_time_ms": "Tempo di risposta (ms)", - "uptime_percent": "Tempo di attività %", - "last_24h": "Ultime 24 ore", - "last_7d": "Ultimi 7 giorni", - "last_30d": "Ultimi 30 giorni" - }, - "dataguard": { - "title": "DataGuard", - "policies": "Policy DLP", - "add_policy": "Aggiungi policy", - "edit_policy": "Modifica policy", - "delete_policy": "Elimina policy", - "delete_confirm": "Sei sicuro di voler eliminare questa policy?", - "policy_name": "Nome", - "policy_description": "Descrizione", - "status": "Status", - "enabled": "Attivo", - "disabled": "Disattivo", - "rules": "Regole", - "add_rule": "Aggiungi regola", - "rule_type": "Tipo regola", - "rule_type_usb": "Dispositivo USB", - "rule_type_file": "Operazione file", - "action": "Azione", - "action_allow": "Consenti", - "action_block": "Blocca", - "action_log": "Solo registrazione", - "filter": "Filtro", - "vid": "ID venditore (VID)", - "pid": "ID prodotto (PID)", - "serial": "Numero di serie", - "device_class": "Classe dispositivo", - "drive_type": "Tipo unità", - "file_extensions": "Estensioni file", - "events": "Eventi DLP", - "event_source": "Origine", - "event_source_usb": "USB", - "event_source_file": "File sorgente", - "event_type": "Tipo evento", - "event_details": "Dettagli", - "no_policies": "Nessuna policy DLP configurata", - "no_events": "Nessun evento DLP registrato", - "stats": "Statistiche", - "total_events": "Totale eventi", - "blocked_events": "Bloccati", - "logged_events": "Registrati", - "usb_events": "Eventi USB", - "file_events": "Eventi file", - "device_id": "ID dispositivo", - "policy_matched": "Policy corrispondente", - "timestamp": "Marca temporale", - "drive_removable": "Rimovibile", - "drive_fixed": "Fisso", - "drive_network": "Rete", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Sconosciuto", - "total_policies": "Criteri totali", - "active_policies": "Criteri attivi", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Criteri", - "tab_events": "Events", - "search_policies": "Cerca criteri...", - "create_policy": "Crea criterio", - "policy_type": "Tipo criterio", - "scope": "Scope", - "events_count": "Events", - "search_events": "Cerca eventi...", - "event_time": "Event Time", - "device": "Dispositivo", - "policy": "Criterio", - "detail": "Detail", - "scope_help": "ID dispositivo separati da virgola oppure vuoto per tutti i dispositivi", - "scope_all": "Tutti", - "active": "Active", - "type_file_type": "Tipo file", - "type_clipboard": "Appunti", - "type_screen_share": "Condivisione schermo", - "type_file_transfer": "Trasferimento file", - "policy_desc": "Descrizione criterio", - "type_usb": "USB" + "sessions": { + "device": "Dispositivo", + "operator": "Operatore", + "duration": "Durata", + "phase": "Fase", + "amount": "Importo" }, "reports": { - "title": "Report", - "generate": "Genera report", - "generate_csv": "Esporta CSV", - "report_type": "Tipo di report", - "type_devices": "Riepilogo dispositivi", - "type_activity": "Riepilogo attività", - "type_security": "Report sicurezza", - "type_tickets": "Report ticket", - "type_network": "Report rete", - "type_inventory": "Report inventario", - "type_alerts": "Report avvisi", - "saved": "Report salvati", - "save_report": "Salva report", - "delete_report": "Elimina report", - "delete_confirm": "Sei sicuro di voler eliminare questo report salvato?", - "no_saved": "Nessun report salvato", - "report_title": "Titolo", - "created_by": "Creato da", - "created_at": "Creato il", - "filters": "Filtri", - "date_from": "Da", - "date_to": "A", - "device_filter": "ID dispositivo", - "generated_at": "Generato il", - "section": "Sezione dati", - "total_devices": "Totale dispositivi", - "online": "Online", - "offline": "Offline", - "banned": "Bannati", - "platform_distribution": "Distribuzione piattaforme", - "top_applications": "Applicazioni principali", - "total_active": "Tempo totale attivo", - "total_idle": "Tempo totale inattivo", - "dlp_stats": "Statistiche DLP", - "banned_devices": "Dispositivi bannati", - "audit_logs": "Registri di audit", - "ticket_stats": "Statistiche ticket", - "category_distribution": "Distribuzione categorie", - "priority_distribution": "Distribuzione priorità", - "targets_status": "Stato obiettivi", - "os_distribution": "Distribuzione SO", - "avg_ram": "RAM media", - "alert_rules": "Regole di allarme", - "recent_alerts": "Avvisi recenti", - "tab_generate": "Genera report", - "tab_saved": "Report salvati", - "type_devices_desc": "Panoramica di tutti i dispositivi, piattaforme e stati", - "type_activity_desc": "Riepilogo utilizzo applicazioni e tempo di inattività", - "type_security_desc": "Azioni di ban, eventi DLP e log di audit", - "type_tickets_desc": "Statistiche ticket e performance SLA", - "type_network_desc": "Obiettivi di monitoraggio rete e dati di disponibilità", - "type_inventory_desc": "Riepilogo inventario hardware e software", - "type_alerts_desc": "Regole di allarme e storico degli avvisi attivati", - "report_name": "Nome report", - "format": "Formato", - "save": "Salva report", - "preview": "Anteprima", - "download": "Scarica", - "delete_saved": "Elimina report", - "raw_json": "Raw JSON" + "session": "Sessione", + "summary": "Riepilogo", + "date": "Data" }, - "tenants": { - "title": "Multi-tenancy", - "list": "Tenant", - "add_tenant": "Aggiungi tenant", - "edit_tenant": "Modifica tenant", - "delete_tenant": "Elimina tenant", - "delete_confirm": "Sei sicuro di voler eliminare questo tenant? Tutte le assegnazioni di dispositivi e utenti verranno rimosse.", - "name": "Nome", - "slug": "Slug", - "contact_name": "Nome contatto", - "contact_email": "E-mail contatto", - "max_devices": "Max dispositivi", - "max_devices_hint": "0 = illimitato", - "notes": "Note", - "active": "Attivo", - "inactive": "Inattivo", - "devices": "Dispositivi", - "users": "Utenti", - "assign_device": "Assegna dispositivo", - "assign_devices": "Assegna dispositivi", - "remove_device": "Rimuovi dispositivo", - "assign_user": "Assegna utente", - "remove_user": "Rimuovi utente", - "no_tenants": "Nessun tenant configurato", - "no_devices": "Nessun dispositivo assegnato a questo tenant", - "no_users": "Nessun utente assegnato a questo tenant", - "stats": "Statistiche tenant", - "total_devices": "Totale dispositivi", - "online_devices": "Dispositivi online", - "total_users": "Totale utenti", - "created_at": "Creato il", - "updated_at": "Aggiornato il", - "slug_exists": "Lo slug del tenant esiste già", - "total_tenants": "Totale tenant", - "active_tenants": "Tenant attivi", - "search": "Cerca tenant...", - "create_tenant": "Crea tenant", - "detail": "Dettaglio tenant", - "contact": "Contatto", - "enabled": "Abilitato", - "disabled": "Tenant disabilitati", - "max": "Max", - "info": "Informazioni tenant", - "status": "Stato" + "contracts": { + "title": "Contratti organizzazione", + "new": "Assegna pacchetto", + "org": "Organizzazione", + "package": "Pacchetto", + "remaining": "Minuti rimanenti", + "status": "Stato", + "actions": "Azioni", + "suspend": "Sospendi", + "activate": "Attiva", + "select_org": "Seleziona organizzazione", + "select_package": "Seleziona pacchetto", + "no_orgs": "Nessuna organizzazione trovata", + "no_packages": "Crea prima un pacchetto" }, - "registrations": { - "title": "Registrazioni dispositivi", - "subtitle": "Gestisci le richieste di registrazione dai dispositivi scoperti tramite LAN", - "search_placeholder": "Cerca per ID dispositivo, nome host o IP...", - "no_registrations": "Nessuna richiesta di registrazione", - "col_device_id": "ID dispositivo", - "col_hostname": "Nome host", - "col_platform": "Piattaforma", - "col_ip": "Indirizzo IP", - "col_version": "Versione", - "col_status": "Stato", - "col_requested": "Richiesto", - "col_actions": "Azioni", - "status_pending": "In attesa", - "status_approved": "Approvato", - "status_rejected": "Rifiutato", - "approve_btn": "Approva", - "approve_confirm": "Sei sicuro di voler approvare questo dispositivo? Riceverà le credenziali del server e potrà connettersi automaticamente.", - "approved_success": "Registrazione dispositivo approvata con successo", - "reject_btn": "Rifiuta", - "reject_title": "Rifiuta registrazione", - "reject_confirm": "Sei sicuro di voler rifiutare questa richiesta di registrazione?", - "reject_reason": "Motivo (opzionale)", - "reject_reason_placeholder": "Inserisci il motivo del rifiuto...", - "rejected_success": "Registrazione dispositivo rifiutata", - "delete_confirm": "Sei sicuro di voler eliminare questo record di registrazione?", - "deleted_success": "Record di registrazione eliminato", - "enrollment_title": "Registrazione dispositivi", - "enrollment_subtitle": "Richieste di registrazione in sospeso dai client desktop BetterDesk", - "enrollment_empty": "Nessuna richiesta di registrazione in sospeso", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Nome visualizzato", - "enrollment_display_name_placeholder": "Inserisci un nome per questo dispositivo...", - "enrollment_sync_mode": "Modalità sincronizzazione", - "enrollment_sync_silent": "Silenziosa — telemetria minima", - "enrollment_sync_standard": "Standard — sincronizzazione bilanciata", - "enrollment_sync_turbo": "Turbo — sincronizzazione aggressiva", - "enrollment_approved_success": "Registrazione dispositivo approvata", - "enrollment_rejected_success": "Registrazione dispositivo rifiutata", - "approve_title": "Approuver il dispositivo", - "field_name": "Nome de il dispositivo", - "field_name_placeholder": "Entrez un nome pour cet appareil...", - "field_sync_mode": "Modalità de synchronisation", - "sync_standard": "Standard — synchronisation èquilibrèe", - "sync_silent": "Silencieux — tèlèmètrie minimale", - "sync_turbo": "Turbo — sincronizzazione aggressiva", - "field_tags": "Tags", - "field_tags_placeholder": "Tags sèparès par des virgules (p. ex. bureau, ordinateur portable)...", - "field_tags_existing": "Tags existants", - "field_tag_add_placeholder": "Aggiungi un nouveau tag...", - "field_tag_add_btn": "Aggiungi", - "field_groups": "Groupes d'dispositivi", - "field_folder": "Cartella", - "field_folder_none": "Nessuno cartella", - "reject_ban_option": "Banna questo dispositivo", - "reject_ban_hint": "L'appareil sera bloquè et ne pourra plus envoyer de nuove richieste d'inscription.", - "banner_open_mode": "L'inscription est ouverte — les nuovi client RustDesk si registrano sans approbation de l'opèrateur. Dèfinissez le modalità gèrè dans les impostazioni per usare questa coda d'attesa.", - "banner_locked_mode": "L'inscription est verrouillèe — seuls les dispositivi liès à un jeton peuvent s'inscrire. Le modalità gèrè est richiesto per approvazione des clients sconosciutos par l'opèrateur.", - "enrollment_settings_link": "Impostazioni d'inscription" + "export": { + "csv": "Esporta CSV", + "pdf": "Esporta PDF", + "sessions_csv": "Esporta sessioni CSV" }, - "backup": { - "title": "Backup", - "desc": "Scarica un backup completo della configurazione della console, utenti, gruppi e impostazioni. I dati peer del server Go sono inclusi quando il backend BetterDesk è attivo.", - "restore_title": "Ripristina", - "restore_desc": "Carica un file di backup scaricato in precedenza per ripristinare la configurazione della console. Seleziona quali sezioni ripristinare di seguito.", - "stat_users": "Utenti", - "stat_settings": "Impostazioni", - "stat_folders": "Cartelle", - "stat_groups": "Gruppi", - "stat_strategies": "Strategie", - "stat_backend": "Backend", - "download": "Scarica backup", - "creating": "Creazione backup...", - "download_success": "Backup scaricato con successo", - "upload": "Carica backup", - "restore_confirm": "Sei sicuro di voler ripristinare da questo backup? Le sezioni selezionate verranno sovrascritte.", - "restore_success": "Backup ripristinato con successo. Alcune modifiche potrebbero richiedere un ricaricamento della pagina.", - "restored": "Ripristinato", - "skipped": "Saltato", - "backup_date": "Data backup", - "opt_settings": "Impostazioni della console", - "opt_branding": "Branding / Tema", - "opt_folders": "Cartelle dispositivi", - "opt_groups": "Gruppi utenti e dispositivi", - "opt_addressbooks": "Rubriche", - "opt_users": "Account utenti", - "opt_users_warning": "Distruttivo: sostituisce TUTTI gli account utenti con i dati del backup. Potresti essere disconnesso.", - "no_file": "Nessun file di backup selezionato", - "invalid_json": "File di backup non valido: JSON non valido", - "invalid_format": "File di backup non valido: non è un backup BetterDesk", - "stat_database": "Moteur de base de donnèes", - "stat_keys": "Clès serveur incluses", - "stat_env": "File d'environnement", - "stat_uploads": "Files de marque", - "restart_required": "Alcuni composants restaurès (clès / .env / base de donnèes Go) nècessitent un redèmarrage du servizio pour entrare in vigore.", - "security_warning": "Cette sauvegarde contient des secrets (clès serveur, file d'environnement, hash delle password et secret 2FA). Conservez-la en sècuritè et ne la partagez jamais.", - "restore_warning": "La restauration des secrets, du file d'environnement ou de la base de donnèes du serveur Go ècrase l'identitè du serveur et nècessite un redèmarrage du servizio par la suite.", - "opt_database": "Base de donnèes (toutes les tabelle)", - "opt_database_hint": "Rèimporte toutes les donnèes de la console. Appliquè en direct, nessuno redèmarrage nècessaire.", - "opt_uploads": "Files de marque", - "opt_uploads_hint": "Logos et immagines tèlèchargèes.", - "opt_secrets": "Clès et secrets du serveur", - "opt_secrets_warning": "Ècrase l'identitè du serveur Ed25519, la clè API et le secret di sessione. Nècessite un redèmarrage du servizio.", - "opt_env": "File d'environnement (.env)", - "opt_env_warning": "Ècrase SESSION_SECRET, la clè API, le DSN de la base de donnèes, les ports et les impostazioni TLS. Nècessite un redèmarrage du servizio.", - "opt_godb": "Base de donnèes du serveur Go", - "opt_godb_warning": "Ècrase la base de donnèes SQLite du serveur Go (backend SQLite uniquement). Nècessite un redèmarrage du servizio." + "report": { + "title": "Report di lavoro", + "subtitle": "Descrivi il lavoro svolto durante questa sessione remota.", + "category": "Categoria", + "ticket_ref": "Riferimento ticket", + "summary": "Lavoro svolto", + "skip": "Salta per ora", + "submit": "Invia report", + "summary_required": "Il riepilogo è obbligatorio", + "saved": "Report di lavoro salvato" }, - "cdap": { - "device_detail": "Dettagli dispositivo", - "loading": "Caricamento...", - "loading_widgets": "Caricamento widget dispositivo...", - "load_error": "Impossibile caricare i dettagli del dispositivo", - "connected": "Connesso", - "disconnected": "Disconnesso", - "device_offline_msg": "Il dispositivo è attualmente offline. I valori dei widget potrebbero essere obsoleti.", - "no_widgets": "Nessun widget disponibile", - "no_widgets_desc": "Questo dispositivo non ha registrato un manifest CDAP con definizioni widget.", - "command_log": "Registro comandi", - "clear_log": "Cancella log", - "confirm_command": "Conferma comando", - "select_option": "Seleziona", - "cdap_status": "Stato CDAP", - "cdap_enabled": "CDAP abilitato", - "cdap_disabled": "CDAP disabilitato", - "cdap_devices": "Dispositivi CDAP", - "cdap_connections": "Connessioni attive", - "send_command": "Invia comando", - "command_sent": "Comando inviato con successo", - "command_failed": "Impossibile inviare il comando", - "devices_title": "Dispositivi CDAP", - "devices_subtitle": "Dispositivi connessi tramite Custom Device Application Protocol", - "stat_connected": "Connesso", - "stat_port": "Porta", - "search_devices": "Cerca dispositivi...", - "no_devices": "Nessun dispositivo", - "no_devices_desc": "Nessun dispositivo CDAP è attualmente connesso. I dispositivi appariranno qui dopo la connessione al gateway.", - "gateway_disabled": "Gateway disabilitato", - "gateway_disabled_desc": "Abilita il gateway CDAP impostando CDAP_ENABLED=true nella configurazione server.", - "gateway_active": "Attivo", - "toggle_enable": "Abilita CDAP", - "toggle_disable": "Disabilita CDAP", - "enabled_restart": "CDAP abilitato. È necessario riavviare il server per applicare le modifiche.", - "disabled_restart": "CDAP disabilitato. È necessario riavviare il server per applicare le modifiche.", - "widgets": "Widget", - "type_all": "Tutti", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agente OS", - "type_network": "Rete", - "type_camera": "Telecamera", - "type_custom": "Personalizzato", - "active_alerts": "Avvisi attivi", - "alert_fired": "Avviso scattato", - "alert_cleared": "Avviso cancellato", - "no_alerts": "Nessun avviso", - "connect_terminal": "Connetti terminale", - "table_search": "Cerca...", - "just_now": "Proprio ora", - "terminal_connecting": "Connessione al dispositivo...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Connessione terminale non riuscita", - "linked_devices": "Dispositivi collegati", - "link_device": "Collega dispositivo", - "unlink_device": "Scollega", - "no_linked_devices": "Nessun dispositivo collegato", - "unlink_confirm": "Vuoi davvero scollegare questo dispositivo?", - "link_prompt": "Inserisci l’ID peer da collegare a questo dispositivo:", - "connect_desktop": "Connetti desktop", - "connect_video": "Connetti stream", - "connect_files": "Sfoglia file", - "connect_audio": "Connetti audio", - "upload_file": "Upload", - "desktop_connecting": "Connessione desktop...", - "video_connecting": "Connessione...", - "files_connecting": "Connessione...", - "audio_connecting": "Connessione audio...", - "audio_streaming": "Audio in streaming", - "clipboard_in": "Appunti in entrata", - "clipboard_out": "Appunti in uscita", - "monitor_select": "Seleziona monitor", - "keyframe_request": "Richiedi keyframe", - "quality_auto": "Qualità automatica" + "empty": { + "packages": "Nessun pacchetto ancora. Creane uno con il pulsante sopra.", + "contracts": "Nessun contratto organizzazione ancora. Assegna un pacchetto a un'organizzazione.", + "sessions": "Nessuna sessione fatturabile registrata.", + "reports": "Nessun report di lavoro inviato." }, - "desktop": { - "switch_mode": "Cambia modalità", - "console_mode": "Modalità console", - "loading": "Caricamento", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Chiudi", - "widgets_mode": "Modalità widget", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Aggiungi widget", - "remove_widget": "Rimuovi widget", - "configure": "Configura", - "search_widgets": "Cerca widget...", - "cat_monitoring": "Monitoring", - "cat_devices": "Dispositivi", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Note...", - "search_placeholder": "Cerca...", - "search_pages": "Pages", - "search_devices": "Cerca dispositivi", - "search_no_results": "No results", - "exit_desktop": "Exit Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Stato dispositivi", - "widget_server_health": "Salute server", - "widget_system_stats": "Statistiche sistema", - "widget_device_list": "Elenco dispositivi", - "widget_quick_actions": "Azioni rapide", - "widget_recent_activity": "Attività recente", - "widget_notes": "Notes", - "widget_network_monitor": "Monitor rete", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Dispositivi CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Griglia dispositivi", - "widget_multi_gauge": "Misuratore multiplo", - "widget_weekly_chart": "Grafico settimanale", - "widget_quick_controls": "Controlli rapidi", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Statistiche connessioni", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sessioni utente", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Nessun dispositivo", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Apri", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Imposta URL", - "label_server_uptime": "Uptime server", - "label_merged_info": "Informazioni unite", - "label_with_notes": "Con note", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Dispositivi totali", - "label_throughput": "Throughput", - "label_active_relays": "Relay attivi", - "label_total_relayed": "Totale inoltrato", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtra dispositivi", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Nessun dispositivo CDAP", - "action_add_widget": "Aggiungi widget", - "label_merged_server_info": "Informazioni server unite", - "wp_images": "Immagini", - "wp_colors": "Colori solidi", - "wp_custom_color": "Colore personalizzato", - "wp_fit_style": "Stile", - "wp_fill": "Riempi", - "wp_fit": "Adatta", - "wp_stretch": "Estendi", - "wp_center": "Centra", - "widget_calendar": "Calendar", - "widget_process_monitor": "Monitor processi", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Statistiche database", - "widget_docker_containers": "Container Docker", - "widget_shell_command": "Comando shell", - "widget_device_map": "Mappa dispositivi", - "widget_remote_connect": "Connessione remota", - "label_no_online": "Nessun dispositivo online", - "label_no_events": "Nessun evento", - "label_event_title": "Titolo evento", - "label_no_data": "Nessun dato", - "label_download_speed": "Velocità download", - "label_latency": "Latency", - "label_server": "Istanza server", - "label_run_test": "Run Test", - "label_testing": "Test in corso", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Nessun container", - "label_docker_unavailable": "Docker non disponibile", - "label_no_command": "Nessun comando", - "label_no_output": "Nessun output", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Salva preset", - "label_load_preset": "Load Preset", - "label_preset_name": "Nome preset", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Disponi automaticamente", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 colonne uguali", - "label_2col_wide": "2 colonne ampie", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Gruppo widget", - "ungroup_widgets": "Separa widget", - "group_widgets": "Raggruppa widget", - "snap_layouts": "Layout snap", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Aggancia in alto a sinistra", - "snap_top_right": "Aggancia in alto a destra", - "snap_bottom_left": "Aggancia in basso a sinistra", - "snap_bottom_right": "Aggancia in basso a destra", - "aero_shake": "Scuoti finestra", - "zone_resize": "Ridimensiona zona", - "zone_borders": "Bordi zona", - "app_drawer": "Applications", - "search_apps": "Cerca app", - "edit_shortcuts": "Modifica scorciatoie", - "widgets": "Elenco widget", - "theme": "Theme", - "fullscreen": "Schermo intero", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "wp_unavailable": "Sfondi non disponibili", - "wp_download_hint": "Scarica gli sfondi per usarli qui.", - "help": "Help" + "assign": { + "title": "Assegna pacchetto esistente", + "submit": "Assegna" }, - "desktop_login": { - "click_to_sign_in": "Fai clic per accedere", - "username_placeholder": "Nome utente", - "password_placeholder": "Parola d’accesso", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Codice di verifica richiesto", - "totp_subtitle": "Inserisci il codice a sei cifre dalla tua app di autenticazione.", - "back_to_login": "Torna all’accesso", - "fill_all_fields": "Compila tutti i campi", - "invalid_credentials": "Nome utente o password non validi", - "invalid_code": "Codice di verifica non valido", - "enter_6_digits": "Inserisci 6 cifre", - "network_error": "Errore di rete. Riprova.", - "session_expired": "La sessione è scaduta. Accedi di nuovo." - }, - "tokens": { - "title": "Token di accesso", - "subtitle": "Gestisci i token di accesso API per integrazioni e automazione", - "enrollment_mode": "Modalità registrazione", - "mode_open": "Registrazione aperta", - "mode_open_desc": "Qualsiasi client valido può richiedere la registrazione.", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Totale", - "active": "Active", - "used": "Used", - "revoked": "Token revocato con successo", - "search_placeholder": "Cerca token...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Genera in blocco", - "create": "Crea token", - "edit": "Modifica", - "token": "Token", - "name": "Nome token", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Token creato con successo", - "actions": "Actions", - "name_placeholder": "Inserisci il nome del token", - "max_uses": "Max Uses", - "max_uses_hint": "Numero massimo di utilizzi consentiti per questo token.", - "expires_in": "Expires In", - "no_expiration": "Nessuna scadenza", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Nota opzionale", - "count": "Count", - "count_range": "Il conteggio deve essere tra 1 e 100", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token creato", - "tokens_generated": "Token generati", - "copy_warning": "Copia questo token adesso. Non potrai vederlo di nuovo!", - "copy_token": "Copia token", - "copied": "Token copiato negli appunti", - "revoke": "Revoca", - "revoke_confirm": "Sei sicuro di voler revocare questo token? Questa azione non può essere annullata.", - "revoked_success": "Token revocato correttamente", - "no_tokens": "Nessun token creato", - "expired": "Scaduto", - "never": "Never", - "save": "Salva", - "cancel": "Annulla", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Avanti", - "prev": "Precedente", - "skip": "Salta tour", - "finish": "Fine", - "close": "Chiudi", - "step_of": "Passo {current} di {total}", - "console_sidebar_title": "Navigazione console", - "console_sidebar_text": "Usa la barra laterale per passare tra dispositivi, utenti, impostazioni e strumenti.", - "console_expand_title": "Espandi barra laterale", - "console_expand_text": "Apri la barra laterale per vedere tutte le sezioni e gli strumenti della console.", - "console_search_title": "Ricerca rapida", - "console_search_text": "Usa la ricerca per trovare più rapidamente dispositivi, impostazioni e azioni.", - "console_dashboard_title": "Controlla panoramica", - "console_dashboard_text": "La panoramica riassume stato server, dispositivi e attività recente.", - "console_devices_title": "Elenco dispositivi", - "console_devices_text": "Qui puoi cercare, filtrare e gestire tutti i dispositivi registrati.", - "console_settings_title": "Impostazioni", - "console_settings_text": "Gestisci sicurezza, autenticazione, aggiornamenti e integrazioni.", - "console_desktop_title": "Modalità desktop", - "console_desktop_text": "Passa al desktop widget per creare una vista operativa personalizzata.", - "console_complete_title": "Console pronta", - "console_complete_text": "Ora conosci le parti principali della console BetterDesk.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "La barra superiore contiene controlli finestra, ricerca e scorciatoie.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Apri il selettore widget per posizionare nuove schede sul desktop.", - "desktop_widgets_title": "Widget", - "desktop_widgets_text": "I widget mostrano dati operativi live e azioni rapide.", - "desktop_add_widget_title": "Aggiungi widget", - "desktop_add_widget_text": "Scegli un widget e posizionalo dove serve.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "Layout snap", - "desktop_snap_text": "Usa i layout snap per organizzare rapidamente i widget in zone.", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Sposta, raggruppa e ridimensiona finestre come su un desktop moderno.", - "desktop_search_title": "Cerca app", - "desktop_search_text": "Cerca widget e strumenti disponibili dal launcher.", - "desktop_complete_title": "Desktop pronto", - "desktop_complete_text": "La modalità desktop è configurata e pronta per essere personalizzata.", - "devices_folders_title": "Cartelle e gruppi", - "devices_folders_text": "Organizza i dispositivi in cartelle o gruppi dinamici.", - "devices_search_title": "Cerca dispositivi", - "devices_search_text": "Filtra per ID, nome host, piattaforma, utente o tag.", - "devices_table_title": "Tabella dispositivi", - "devices_table_text": "Apri le azioni dal menu di ogni riga o fai doppio clic per i dettagli.", - "devices_complete_title": "Gestione dispositivi pronta", - "devices_complete_text": "Ora puoi cercare, raggruppare e gestire dispositivi.", - "settings_tabs_title": "Sezioni impostazioni", - "settings_tabs_text": "Passa tra impostazioni server, sicurezza, autenticazione e interfaccia.", - "settings_content_title": "Modifica configurazione", - "settings_content_text": "Salva le modifiche per sezione per mantenere la configurazione ordinata.", - "settings_complete_title": "Impostazioni pronte", - "settings_complete_text": "Ora conosci le sezioni principali della configurazione.", - "help": "Aiuto", - "tour_console": "Tour console", - "tour_desktop": "Tour desktop", - "tour_devices": "Tour dispositivi", - "tour_settings": "Tour impostazioni", - "reset_all": "Reimposta tutti i tour", - "tour_remote": "Tour remoto", - "tour_organization": "Tour organizzazione", - "tour_cdap": "Tour CDAP", - "tour_chat": "Tour chat", - "remote_toolbar_title": "Barra strumenti remota", - "remote_toolbar_text": "Gestisci qualità, monitor, appunti, registrazione e azioni sessione.", - "remote_canvas_title": "Schermo remoto", - "remote_canvas_text": "Fai clic nell’area dello schermo per inviare tastiera e mouse al dispositivo.", - "remote_clipboard_title": "Appunti", - "remote_clipboard_text": "Sincronizza testo in modo sicuro tra browser e dispositivo remoto.", - "remote_complete_title": "Sessione remota pronta", - "remote_complete_text": "Ora puoi controllare e monitorare una sessione.", - "org_overview_title": "Panoramica organizzazione", - "org_overview_text": "Visualizza membri, dispositivi e criteri dell’organizzazione in un’unica vista.", - "org_create_title": "Crea organizzazione", - "org_create_text": "Crea una nuova organizzazione per separare dispositivi e utenti.", - "org_members_title": "Gestisci membri", - "org_members_text": "Assegna utenti e imposta ruoli specifici per l’organizzazione.", - "org_devices_title": "Assegna dispositivi", - "org_devices_text": "Assegna dispositivi a un’organizzazione per mantenere i dati nel giusto ambito.", - "org_policies_title": "Configura criteri", - "org_policies_text": "Gestisci regole di accesso, trasferimento file e limiti sessione.", - "org_complete_title": "Organizzazione pronta", - "org_complete_text": "L’organizzazione è pronta per utenti, dispositivi e criteri.", - "cdap_devices_title": "Dispositivi CDAP", - "cdap_devices_text": "Visualizza tutti i dispositivi CDAP connessi — sensori IoT, PLC, bridge e agenti personalizzati. Gli indicatori verdi mostrano le connessioni attive.", - "cdap_widgets_title": "Dashboard widget", - "cdap_widgets_text": "I widget mostrano dati in tempo reale dai dispositivi. Misuratori, interruttori, LED, grafici — ogni tipo di widget visualizza un diverso tipo di dato.", - "cdap_commands_title": "Invia comandi", - "cdap_commands_text": "Interagisci con i dispositivi inviando comandi. Alcuni comandi richiedono conferma. Il log comandi conserva la cronologia di tutti i comandi inviati.", - "cdap_terminal_title": "Terminale dispositivo", - "cdap_terminal_text": "Apri una sessione terminale agli agenti CDAP per diagnosi avanzate o configurazione manuale. Digita i comandi direttamente.", - "cdap_complete_title": "Panoramica CDAP completata!", - "cdap_complete_text": "Esplora i widget dei dispositivi, invia comandi e usa il terminale o il browser file per una gestione approfondita. Gli agenti CDAP inviano metriche automaticamente.", - "chat_contacts_title": "Contatti", - "chat_contacts_text": "Seleziona operatori, agenti o gruppi per una conversazione.", - "chat_send_title": "Invia messaggi", - "chat_send_text": "Scrivi messaggi, invia file e usa conferme di lettura.", - "chat_file_title": "Condivisione file", - "chat_file_text": "I file vengono trasferiti cifrati quando è attiva la crittografia end-to-end.", - "chat_complete_title": "Chat pronta", - "chat_complete_text": "Ora puoi comunicare in sicurezza con utenti e operatori.", - "disable_tutorials": "Disabilita tour", - "enable_tutorials": "Abilita tour" - }, - "help_request": { - "title": "Richieste di aiuto", - "subtitle": "Richieste di supporto dagli utenti finali", - "new_request": "Nuova richiesta di aiuto", - "device": "Dispositivo", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Nessuna richiesta di aiuto", - "notification": "Notifica richiesta di aiuto", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organizzazioni", - "create": "Crea", - "edit": "Modifica", - "detail": "Dettagli", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Dispositivi", - "invitations": "Invitations", - "settings": "Impostazioni", - "add_user": "Add User", - "assign_device": "Assegna dispositivo", - "create_invitation": "Crea invito", - "delete_confirm": "Eliminare questa organizzazione?", - "no_orgs": "Nessuna organizzazione", - "no_orgs_hint": "Crea un’organizzazione per gestire utenti e dispositivi separatamente.", - "connection_policy": "Criterio connessione", - "allow_file_transfer": "Consenti trasferimento file", - "allow_clipboard": "Consenti appunti", - "max_session_duration": "Durata massima sessione", - "role_owner": "Owner", - "role_admin": "Amministratore", - "role_operator": "Operator", - "role_user": "Membro", - "username": "Nome utente", - "password": "Parola d’accesso", - "display_name": "Nome visualizzato", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID dispositivo", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Utente assegnato", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Nessun utente", - "no_devices": "Nessun dispositivo", - "no_invitations": "Nessun invito", - "user_added": "User added", - "user_removed": "Utente rimosso", - "user_updated": "Utente aggiornato", - "device_assigned": "Dispositivo assegnato", - "device_unassigned": "Assegnazione dispositivo rimossa", - "invitation_created": "Invito creato", - "settings_saved": "Impostazioni organizzazione salvate", - "org_deleted": "Organizzazione eliminata", - "confirm_remove_user": "Rimuovere questo utente dall’organizzazione?", - "confirm_unassign_device": "Rimuovere questo dispositivo dall’organizzazione?", - "confirm_delete_org": "Eliminare definitivamente questa organizzazione?", - "edit_role": "Modifica ruolo", - "raw_settings": "Impostazioni grezze", - "key": "Key", - "value": "Value", - "save": "Salva", - "policy_unattended": "Accesso non presidiato", - "policy_attended": "Accesso presidiato", - "policy_ask": "Always ask", - "expires_hours": "Scade tra ore", - "loading_failed": "Impossibile caricare le organizzazioni", - "name_slug_required": "Nome e slug sono obbligatori", - "org_created": "Organizzazione creata", - "org_updated": "Organizzazione aggiornata", - "create_new_user": "Crea nuovo utente", - "add_existing_user": "Aggiungi utente esistente", - "none_available": "none", - "select_user": "Seleziona utente", - "org_role": "Ruolo organizzazione", - "link_user_hint": "Collega un utente esistente a questa organizzazione.", - "no_available_users": "Nessun utente disponibile", - "user_linked": "Utente collegato" - }, - "chat": { - "e2e_enabled": "Crittografia end-to-end", - "e2e_establishing": "Creazione canale sicuro...", - "e2e_established": "Canale sicuro stabilito", - "e2e_unsupported": "Crittografia E2E non supportata in questo browser", - "typing_indicator": "sta scrivendo...", - "read_receipt": "Letto", - "delivered": "Consegnato", - "file_share": "Condivisione file", - "file_too_large": "File troppo grande (max 50MB)", - "file_encrypted": "Trasferimento file crittografato", - "presence_online": "Online", - "presence_away": "Assente", - "presence_busy": "Occupato", - "presence_offline": "Offline", - "key_rotation": "Chiavi di sicurezza rinnovate", - "new_message": "Nuovo messaggio", - "title": "Chat", - "contacts": "Contatti", - "groups": "Gruppi", - "no_contacts": "Nessun contatto ancora", - "no_groups": "Nessun gruppo ancora", - "no_messages": "Nessun messaggio ancora", - "no_results": "Nessun risultato trovato", - "select_conversation": "Seleziona una conversazione per iniziare a chattare", - "type_message": "Scrivi un messaggio...", - "send": "Invia", - "attach_file": "Allega file", - "emoji": "Emoji", - "search_messages": "Cerca messaggi", - "create_group": "Crea gruppo", - "group_name": "Nome del gruppo", - "group_members": "Membri", - "cancel": "Annulla", - "create": "Crea", - "members": "membri", - "today": "Oggi", - "yesterday": "Ieri", - "react": "Reagisci", - "my_presence": "Il mio stato", - "search_placeholder": "Cerca contatti e messaggi", - "select_conversation_hint": "Seleziona una conversazione per visualizzare i messaggi", - "info": "Informazioni", - "group_name_placeholder": "Inserisci il nome del gruppo" - }, - "toast": { - "device_connected": "Dispositivo connesso", - "device_disconnected": "Dispositivo disconnesso", - "session_started": "Sessione avviata", - "session_ended": "Sessione terminata", - "file_upload_complete": "Caricamento file completato", - "settings_saved": "Impostazioni salvate", - "error_generic": "Si è verificato un errore", - "connection_lost": "Connessione persa", - "reconnecting": "Riconnessione in corso" - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Strumenti diagnostici e attività operative per operatori BetterDesk.", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Invia", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Inserisci testo", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Log server Go", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Controlla raggiungibilità ICMP e perdita pacchetti.", - "tcp_title": "Test porta TCP", - "tcp_desc": "Verifica se una porta TCP è raggiungibile dal server.", - "ssl_title": "Controllo certificato TLS", - "ssl_desc": "Ispeziona catena certificati, scadenza e corrispondenza nome host.", - "http_title": "Richiesta HTTP", - "http_desc": "Esegui un semplice controllo HTTP(S) e visualizza codice stato e header.", - "dns_title": "DNS Lookup", - "dns_desc": "Risolvi record DNS dall’ambiente server.", - "whois_title": "DNS Records", - "whois_desc": "Consulta dati di registrazione dominio e rete.", - "speed_title": "Speed Test", - "speed_desc": "Misura la velocità grezza di download dalla console.", - "run_speed_test": "Esegui test velocità", - "wol_title": "Wake-on-LAN", - "wol_desc": "Invia un magic packet Wake-on-LAN a un dispositivo.", - "wol_sent": "Pacchetto Wake-on-LAN inviato", - "hash_title": "Calcola hash", - "hash_desc": "Calcola SHA-256 o altri hash per testo inserito.", - "password_title": "Generatore credenziali", - "password_desc": "Genera password casuali robuste per attività amministrative.", - "jwt_title": "JWT Decoder", - "jwt_desc": "Decodifica header e payload JWT senza verificare la firma.", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Codifica o decodifica Base64.", - "url_title": "URL Encoder", - "url_desc": "Codifica o decodifica valori URL.", - "processes_title": "Processi", - "processes_desc": "Mostra processi server attivi e uso risorse.", - "disk_title": "Disk Usage", - "disk_desc": "Visualizza uso disco e spazio libero.", - "db_title": "Controllo database", - "db_desc": "Visualizza statistiche database e salute di base.", - "docker_title": "Container Docker", - "docker_desc": "Mostra container locali e relativo stato.", - "logs_title": "Log Viewer", - "logs_desc": "Visualizza log recenti di console e server.", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Valido da", - "valid_to": "Valido fino a", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Nessun dato", - "no_docker": "Docker non disponibile oppure nessun container presente.", - "no_logs": "Nessun log disponibile" - }, - "policies": { - "title": "Criteri organizzazione", - "subtitle": "Gestisci criteri di sicurezza, connessione e funzionalità per le organizzazioni", - "select_org": "Organizzazione", - "select_org_placeholder": "Seleziona un'organizzazione...", - "select_org_first": "Seleziona un'organizzazione per visualizzare il registro di audit dei criteri.", - "configured": "Configurato", - "connection_title": "Criterio di connessione", - "connection_desc": "Controlla come vengono stabilite le sessioni remote", - "connection_mode": "Modalità connessione", - "mode_attended": "Assistita (richiede approvazione utente)", - "mode_unattended": "Non assistita (consenti sempre)", - "mode_ask": "Chiedi sempre", - "max_session": "Durata max. sessione (minuti)", - "idle_lock": "Blocco inattività (minuti)", - "wallpaper_policy": "Sfondo durante sessione", - "wallpaper_show": "Mostra", - "wallpaper_hide_session": "Nascondi durante sessione", - "wallpaper_hide_always": "Nascondi sempre", - "features_title": "Criterio funzionalità", - "features_desc": "Abilita o disabilita funzionalità specifiche per i dispositivi", - "allow_file_transfer": "Consenti trasferimento file", - "allow_clipboard": "Consenti sincronizzazione appunti", - "allow_audio": "Consenti streaming audio", - "allow_recording": "Consenti registrazione sessione", - "security_title": "Criterio di sicurezza", - "security_desc": "Applica requisiti di sicurezza per i dispositivi dell'organizzazione", - "require_2fa": "Richiedi 2FA per accesso non assistito", - "password_min_length": "Lunghezza minima password", - "password_require_special": "Richiedi caratteri speciali", - "password_max_age": "Età max. password (giorni, 0=mai)", - "allowed_operators": "Ruoli operatore consentiti (separati da virgola)", - "network_title": "Criterio di rete", - "network_desc": "Controlla server relay e connessioni dirette", - "block_direct_p2p": "Blocca P2P diretto (forza relay)", - "allowed_relays": "Server relay consentiti (uno per riga)", - "ip_allowlist": "Whitelist IP (CIDR, uno per riga)", - "update_title": "Criterio aggiornamento", - "update_desc": "Controlla aggiornamenti automatici e canali di aggiornamento", - "auto_update": "Abilita aggiornamento automatico", - "update_channel": "Canale aggiornamento", - "audit_title": "Modifiche criteri", - "audit_desc": "Cronologia recente delle modifiche ai criteri", - "no_audit": "Nessuna modifica ai criteri registrata.", - "save_success": "Criterio salvato", - "save_failed": "Impossibile salvare il criterio", - "load_failed": "Impossibile caricare i criteri", - "block_direct_p2p_hint": "S'applique aux dispositivi di questa organizzazione. La valeur par dèfaut globale est sous Impostazioni → Stratègie de connessione." - }, - "attestation": { - "title": "Attestazione dispositivi", - "subtitle": "Monitora verifica identità dispositivi e impronte hardware", - "verified": "Verificato", - "pending": "In attesa", - "failed": "Fallito", - "device_list": "Registri di attestazione", - "device_list_desc": "Impronte hardware e stato verifica identità", - "col_device": "ID dispositivo", - "col_hostname": "Nome host", - "col_fingerprint": "Impronta", - "col_status": "Stato", - "col_last_check": "Ultimo controllo", - "col_actions": "Azioni", - "no_records": "Nessun record di attestazione trovato.", - "verify_success": "Attestazione verificata correttamente", - "verify_failed": "Verifica attestazione non riuscita", - "revoke_success": "Attestazione revocata", - "revoke_failed": "Impossibile revocare l’attestazione" - }, - "fleet": { - "title": "Gestione flotta", - "tab_resources": "Risorse", - "tab_tasks": "Attività", - "tab_builder": "Costruttore", - "tab_compliance": "Conformità", - "res_title": "Mappatura risorse", - "res_all_types": "Tutti i tipi", - "res_type_printer": "Stampante", - "res_type_network_drive": "Unità di rete", - "res_type_dns": "Server DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Aggiungi risorsa", - "res_name": "Nome risorsa", - "res_type": "Tipo", - "res_address": "Indirizzo / Percorso", - "res_target": "Destinazione", - "res_scope": "Ambito", - "res_scope_org": "Organizzazione", - "res_scope_group": "Gruppo", - "res_scope_device": "Dispositivo", - "res_scope_value": "Valore ambito", - "res_status": "Stato", - "res_active": "Attivo", - "res_inactive": "Inattivo", - "res_no_data": "Nessuna risorsa trovata. Clicca su 'Aggiungi'.", - "res_confirm_delete": "Sei sicuro di voler eliminare questa risorsa?", - "task_title": "Pianificatore attività", - "task_all_status": "Tutti gli stati", - "task_status_pending": "In attesa", - "task_status_running": "In esecuzione", - "task_status_success": "Completato", - "task_status_failed": "Fallito", - "task_search": "Cerca attività…", - "task_create": "Crea attività", - "task_name": "Nome attività", - "task_type": "Tipo", - "task_type_script": "Script", - "task_type_install": "Installazione", - "task_type_update": "Aggiornamento", - "task_type_restart": "Riavvio", - "task_type_deploy": "Distribuzione", - "task_type_scan": "Scansione", - "task_targets": "Destinazioni", - "task_targets_help": "ID dispositivi o nomi gruppi, separati da virgole", - "task_schedule": "Pianificazione", - "task_schedule_once": "Una volta", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Intervallo", - "task_schedule_value": "Valore pianificazione", - "task_script": "Script / Comando", - "task_retries": "Tentativi", - "task_timeout": "Timeout (s)", - "task_last_run": "Ultima esecuzione", - "task_no_data": "Nessuna attività trovata. Crea una nuova attività.", - "task_confirm_delete": "Sei sicuro di voler eliminare questa attività?", - "task_output": "Output attività", - "task_retry": "Riprova", - "builder_title": "Costruttore di workflow visuale", - "builder_select_workflow": "Seleziona workflow…", - "builder_new": "Nuovo", - "builder_save": "Salva", - "builder_export": "Esporta", - "builder_execute": "Esegui", - "builder_dry_run": "Simulazione", - "builder_triggers": "Trigger", - "builder_conditions": "Condizioni", - "builder_actions": "Azioni", - "builder_results": "Risultati", - "builder_transforms": "Trasformazioni", - "builder_properties": "Proprietà", - "builder_no_selection": "Seleziona un nodo per modificarne le proprietà.", - "workflow_name": "Nome workflow:", - "comp_title": "Conformità software", - "comp_compliant": "Conforme", - "comp_warning": "Avviso", - "comp_critical": "Critico", - "comp_score": "Punteggio medio", - "comp_device": "Dispositivo", - "comp_hostname": "Nome host", - "comp_os": "SO", - "comp_score_col": "Punteggio", - "comp_issues": "Problemi", - "comp_last_scan": "Ultima scansione", - "comp_scan": "Scansiona", - "comp_scan_all": "Scansiona tutto", - "comp_remediate": "Rimediare", - "comp_remediate_confirm": "Eseguire auto-rimedio su questo dispositivo?", - "comp_no_data": "Nessun dato di conformità. Esegui una scansione.", - "save": "Salva", - "cancel": "Annulla", - "close": "Chiudi", - "edit": "Modifica", - "delete": "Elimina", - "actions": "Azioni", - "all_orgs": "Tutte le organizzazioni", - "builder_node_trigger_manual": "Trigger manuale", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Trigger evento", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Riavvia dispositivo", - "builder_node_action_file_deploy": "Distribuisci file", - "builder_node_action_message": "Invia messaggio", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Crea avviso", - "builder_node_result_chain": "Concatena azione successiva", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "Seleziona organizzazione...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Unità di rete", - "type_dns": "Record DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Aggiungi risorsa", - "edit_resource": "Modifica risorsa", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Indirizzo", - "scope_org": "Organizzazione", - "scope_group": "Gruppo", - "scope_device": "Dispositivo", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Eliminare questo elemento?", - "all_statuses": "Tutti gli stati", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Non riuscito", - "search_tasks": "Cerca attività...", - "create_task": "Crea attività", - "edit_task": "Modifica attività", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Distribuzione file", - "task_type_registry": "Registry", - "target_devices": "Dispositivi destinazione", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Contenuto script", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Caricamento...", - "no_output": "Nessun output", - "error_loading": "Caricamento non riuscito", - "select_workflow": "Seleziona workflow", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuale", - "node_schedule": "Schedule", - "node_event": "Evento", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Riavvio", - "node_file_deploy": "Distribuzione file", - "node_send_message": "Invia messaggio", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Invia avviso", - "node_chain": "Catena", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Tutte le organizzazioni", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Dispositivo", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Avviare la correzione per questo elemento?" - }, - "scaling": { - "title": "Scalabilità e gestione relay", - "tab_overview": "Panoramica", - "tab_relays": "Nodi relay", - "tab_rules": "Regole di assegnazione", - "tab_capacity": "Pianificazione capacità", - "arch_title": "Architettura di rete", - "arch_loading": "Caricamento diagramma architettura...", - "stat_relay_nodes": "Nodi relay", - "stat_total_devices": "Dispositivi totali", - "stat_active_sessions": "Sessioni attive", - "stat_bandwidth": "Larghezza di banda totale", - "relay_health": "Stato relay", - "no_relays": "Nessun nodo relay configurato. Aggiungi il primo nodo per distribuire il carico.", - "relay_search": "Cerca relay...", - "relay_add": "Aggiungi nodo relay", - "relay_edit": "Modifica nodo relay", - "col_name": "Nome", - "col_address": "Indirizzo", - "col_location": "Posizione", - "col_devices": "Dispositivi", - "col_sessions": "Sessioni", - "col_bandwidth": "Larghezza di banda", - "col_status": "Stato", - "col_actions": "Azioni", - "col_priority": "Priorità", - "col_rule_name": "Nome regola", - "col_match": "Corrispondenza", - "col_target_relay": "Relay destinazione", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degradato", - "status_offline": "Offline", - "status_enabled": "Abilitato", - "status_disabled": "Disabilitato", - "confirm_delete_relay": "Sei sicuro di voler eliminare questo nodo relay?", - "confirm_delete_rule": "Sei sicuro di voler eliminare questa regola di assegnazione?", - "rules_hint": "Le regole di assegnazione determinano quale server relay gestisce gruppi di dispositivi specifici. Le regole vengono valutate per priorità (la più bassa prima).", - "rule_add": "Aggiungi regola", - "rule_edit": "Modifica regola", - "rule_match_type": "Tipo di corrispondenza", - "match_subnet": "Sottorete", - "match_group": "Gruppo dispositivi", - "match_tag": "Tag dispositivo", - "match_location": "Posizione", - "rule_match_value": "Valore di corrispondenza", - "fallback_master": "Server master", - "fallback_nearest": "Relay più vicino", - "relay_max_sessions": "Max sessioni", - "relay_max_bandwidth": "Max larghezza di banda (Mbps)", - "cap_tiers": "Livelli di capacità", - "cap_loading": "Caricamento dati capacità...", - "cap_recommendations": "Raccomandazioni", - "cap_no_recs": "Nessuna raccomandazione disponibile.", - "cap_planning": "Pianificazione infrastruttura", - "cap_config": "Configurazione", - "cap_max_devices": "Max dispositivi", - "cap_max_sessions": "Max sessioni", - "cap_current": "Attuale", - "cap_utilization": "Utilizzo", - "cap_tier_devices": "Capacità dispositivi", - "cap_tier_sessions": "Capacità sessioni", - "cap_tier_bandwidth": "Capacità larghezza di banda", - "cap_single_sqlite": "Server singolo (SQLite)", - "cap_single_pg": "Server singolo (PostgreSQL)", - "cap_master_3": "Master + 3 relay", - "cap_master_10": "Master + 10 relay", - "rec_no_relays": "Nessun nodo configurato. Considera l'aggiunta di relay per migliori prestazioni e ridondanza.", - "rec_devices_high": "L'utilizzo dei dispositivi è elevato. Considera l'aggiunta di più nodi relay.", - "rec_sessions_high": "La capacità delle sessioni si avvicina al limite. Considera l'aggiornamento dell'infrastruttura.", - "rec_cpu_high": "Alcuni nodi relay segnalano un utilizzo CPU elevato. Considera il bilanciamento del carico.", - "rec_all_good": "Tutti i sistemi operano entro parametri normali. Nessuna azione richiesta.", - "save": "Salva", - "cancel": "Annulla", - "edit": "Modifica", - "delete": "Elimina", - "close": "Chiudi", - "no_rules": "Nessuna regola di assegnazione.", - "relays_info_banner": "I nodi relay aiutano a distribuire le sessioni su più posizioni di rete. Salva le modifiche e riavvia i servizi se necessario.", - "relay_name_address_required": "Nome relay e indirizzo sono obbligatori", - "relay_save_failed": "Impossibile salvare il relay", - "relay_delete_failed": "Impossibile eliminare il relay", - "relay_saved": "Relay salvato", - "relay_deleted": "Relay eliminato", - "rule_name_value_required": "Nome regola e valore sono obbligatori", - "rule_save_failed": "Impossibile salvare la regola", - "rule_delete_failed": "Impossibile eliminare la regola", - "rule_saved": "Regola salvata", - "rule_deleted": "Regola eliminata" - }, - "cross_platform": { - "title": "Compatibilità multipiattaforma", - "tab_matrix": "Matrice di compatibilità", - "tab_distribution": "Distribuzione", - "tab_protocols": "Protocolli", - "tab_limitations": "Limitazioni", - "matrix_hint": "Matrice di supporto funzionalità per tutte le piattaforme supportate. Verde = supporto completo, Giallo = parziale, Grigio = non disponibile, Blu = pianificato.", - "col_feature": "Funzionalità", - "legend_full": "Supporto completo", - "legend_partial": "Supporto parziale", - "legend_none": "Non disponibile", - "legend_planned": "Pianificato", - "platform_breakdown": "Distribuzione per piattaforma", - "arch_breakdown": "Distribuzione per architettura", - "version_breakdown": "Distribuzione per versione", - "summary": "Riepilogo", - "total_devices": "Totale dispositivi", - "unique_platforms": "Piattaforme", - "unique_archs": "Architetture", - "unique_versions": "Versioni client", - "no_devices": "Nessun dispositivo ancora registrato.", - "protocols_hint": "La negoziazione delle capacità del protocollo garantisce che ogni client riceva solo le funzionalità supportate. Il server adatta il suo comportamento in base alle capacità segnalate.", - "capability_negotiation": "Negoziazione delle capacità", - "codec_support": "Supporto codec (dispositivi online)", - "feature_support": "Supporto funzionalità (dispositivi online)", - "no_codec_data": "Nessun dato codec dai dispositivi online.", - "no_feature_data": "Nessun dato funzionalità dai dispositivi online.", - "protobuf_schema": "Schema Protobuf ClientCapabilities", - "diagram_client": "Client", - "diagram_server": "Server BetterDesk", - "diagram_peer": "Peer remoto", - "limitations_hint": "Ogni piattaforma ha limitazioni specifiche che influenzano le funzionalità disponibili. Verificale quando pianifichi le distribuzioni.", - "feat_desktop_client": "Client desktop", - "feat_background_agent": "Agente in background", - "feat_remote_target": "Destinazione remota", - "feat_screen_capture": "Cattura schermo", - "feat_input_injection": "Iniezione di input", - "feat_file_transfer": "Trasferimento file", - "feat_clipboard_sync": "Sincronizzazione appunti", - "feat_audio_streaming": "Streaming audio", - "feat_chat": "Chat", - "feat_h264": "Codec H.264", - "feat_vp9": "Codec VP9", - "feat_av1": "Codec AV1", - "feat_cdap_agent": "Agente CDAP", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Browser web", - "platform_chromeos": "ChromeOS", - "status_production": "Produzione", - "status_testing": "Test", - "status_planned": "Pianificato", - "status_limited": "Limitato", - "status_experimental": "Sperimentale", - "limit_win_uac": "Elevazione UAC necessaria per l'installazione del servizio e l'iniezione di input sui desktop sicuri.", - "limit_win_service": "Funziona come servizio NSSM; richiede diritti di amministratore per l'installazione.", - "limit_win_firewall": "Le regole del Windows Firewall devono consentire le porte 21115-21119 per le connessioni relay.", - "limit_linux_wayland": "I compositori Wayland limitano la cattura programmatica dello schermo; richiesta API portale PipeWire.", - "limit_linux_pipewire": "La cattura audio richiede PipeWire; fallback PulseAudio disponibile ma limitato.", - "limit_linux_arm": "Build ARM64 disponibili; alcuni codec potrebbero usare la decodifica software (più lento).", - "limit_mac_screen": "Autorizzazione registrazione schermo necessaria in Impostazioni di Sistema > Privacy e Sicurezza.", - "limit_mac_signing": "L'agente deve essere firmato con Apple Developer ID per la distribuzione.", - "limit_mac_notarize": "Notarizzazione necessaria per macOS Gatekeeper (distribuzione fuori App Store).", - "limit_android_projection": "L'API MediaProjection richiede il consenso dell'utente per ogni sessione di cattura.", - "limit_android_accessibility": "L'iniezione di input richiede AccessibilityService; limitato da Android 14+.", - "limit_android_battery": "Servizio in background limitato dalla modalità Doze; potrebbe necessitare esenzione ottimizzazione batteria.", - "limit_ios_capture": "Apple vieta la cattura dello schermo in background; supportata solo la modalità visualizzatore.", - "limit_ios_input": "Nessuna iniezione di input consentita; solo visualizzazione remota e chat.", - "limit_ios_appstore": "Distribuzione solo tramite App Store; TestFlight per test beta.", - "limit_web_https": "API WebCodecs e WebRTC richiedono HTTPS; HTTP ricorre a JMuxer (codec limitati).", - "limit_web_codec": "Supporto codec dipendente dal browser; H.264 ampiamente supportato, VP9/AV1 variabile.", - "limit_web_performance": "Prestazioni limitate dal sandbox del browser; nessuna accelerazione hardware diretta.", - "limit_chrome_crostini": "Supporto completo dell'agente solo all'interno del container Linux Crostini.", - "limit_chrome_pwa": "La modalità PWA fornisce solo funzionalità web; nessuna funzione agente nativa.", - "limit_chrome_input": "Iniezione di input fuori dal container Crostini non supportata.", - "feat_session_recording": "Registrazione sessione", - "feat_multi_monitor": "Multi-ècran", - "feat_unattended_access": "Accesso unattended", - "limit_win_virtual_account": "Les servizios fonctionnent sous des comptes virtuels isolès invece di LocalSystem ; les percorsos de journaux personnalisès peuvent nècessiter des ajustements ACL.", - "limit_linux_unprivileged": "Les servizios fonctionnent sous le compte non privilègiè dèdiè « betterdesk » avec hardening systemd (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Audit sicurezza", - "tab_overview": "Panoramica", - "tab_events": "Eventi di audit", - "tab_hardening": "Rafforzamento", - "tab_vulnerabilities": "Vulnerabilità", - "security_score": "Punteggio di sicurezza", - "failed_logins": "Accessi falliti (24h)", - "active_bans": "Ban attivi", - "api_keys": "Chiavi API", - "old_keys": "Chiavi vecchie (>90g)", - "security_checks": "Controlli di sicurezza", - "tls_status": "Stato TLS", - "pass": "OK", - "warning": "Avviso", - "fail": "Errore", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "TLS e WSS", - "enabled": "Abilitato", - "disabled": "Disabilitato", - "all_events": "Tutti gli eventi", - "event_login_failed": "Accesso fallito", - "event_login_success": "Accesso riuscito", - "event_peer_banned": "Dispositivo bannato", - "event_ip_banned": "IP bannato", - "event_config_changed": "Configurazione modificata", - "event_key_created": "Chiave creata", - "refresh": "Aggiorna", - "col_time": "Ora", - "col_action": "Azione", - "col_actor": "Attore", - "col_target": "Obiettivo", - "col_ip": "Indirizzo IP", - "col_details": "Dettagli", - "no_events": "Nessun evento di audit trovato.", - "hardening_hint": "Priorità di rafforzamento sicurezza per la distribuzione BetterDesk. Ordinati per gravità.", - "no_hardening": "Nessun elemento di rafforzamento disponibile.", - "vuln_hint": "Risultati della scansione vulnerabilità delle dipendenze. Esegui npm audit regolarmente.", - "no_vulns": "Nessuna vulnerabilità trovata. Le dipendenze sono sicure." - }, - "languages": { - "title": "Gestione lingue", - "total_languages": "Lingue totali", - "fully_translated": "Tradotte completamente", - "needs_review": "Da rivedere", - "reference_keys": "Chiavi di riferimento", - "no_languages": "Nessuna lingua trovata", - "badge_reference": "Riferimento", - "badge_review": "Revisione", - "badge_complete": "Completo", - "coverage": "copertura", - "keys": "chiavi", - "missing": "mancanti", - "extra": "extra", - "view_missing": "Mostra chiavi mancanti", - "fix_missing": "Fix Missing", - "missing_keys_for": "Chiavi mancanti per", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "e altri {n}...", - "all_keys_present": "Tutte le chiavi presenti", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Le chiavi mancanti in {code} devono essere tradotte manualmente.", - "no_fix_needed": "Nessuna correzione necessaria" - }, - "resource_control": { - "title": "Controllo risorse", - "tab_overview": "Panoramica", - "tab_usb": "USB Control", - "tab_optical": "Unità ottiche", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Quote", - "compliance_by_category": "Conformità per categoria", - "device_compliance": "Conformità dispositivi", - "search_devices": "Cerca dispositivi...", - "col_device": "Dispositivo", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Dispositivi totali", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Tasso di conformità", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configura", - "no_devices": "Nessun dispositivo trovato", - "usb_title": "Archiviazione USB", - "usb_hint": "Gestisci criteri per archiviazione USB rimovibile.", - "usb_storage_policy": "Criterio archiviazione USB", - "usb_whitelist": "Elenco USB consentiti", - "usb_whitelist_hint": "Un ID dispositivo o numero seriale per riga.", - "usb_audit_log": "Log audit USB", - "optical_title": "Unità ottiche", - "optical_hint": "Gestisci accesso a unità CD/DVD/Blu-ray.", - "optical_policy": "Criterio unità ottiche", - "optical_audit_log": "Log audit unità ottiche", - "monitors_title": "Monitor", - "monitors_hint": "Limita numero di schermi e impostazioni display.", - "monitors_max_count": "Numero massimo monitor", - "monitors_max_hint": "0 significa nessun limite.", - "monitors_resolution": "Limite risoluzione", - "monitors_brightness": "Limite luminosità", - "monitors_power_schedule": "Pianificazione alimentazione monitor", - "monitors_power_hint": "Pianificazione opzionale per spegnimento o attenuazione automatica.", - "disks_title": "Dischi", - "disks_hint": "Limita dispositivi di archiviazione e monitora salute disco.", - "disks_readonly": "Forza modalità sola lettura", - "disks_encryption": "Richiedi cifratura", - "disks_smart": "Controlla salute SMART", - "disks_hidden": "Percorsi nascosti", - "disks_hidden_hint": "Percorsi da nascondere al browser file e al trasferimento file.", - "quotas_title": "Quote e limiti", - "quotas_hint": "Limita larghezza di banda, archiviazione e processi.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Limite larghezza di banda", - "quotas_bandwidth_hint": "Velocità massima di trasferimento per sessione.", - "quotas_disk_quota": "Quota disco", - "quotas_disk_hint": "Spazio massimo che le funzioni BetterDesk possono usare.", - "quotas_process_whitelist": "Elenco processi consentiti", - "quotas_process_hint": "Un nome processo per riga.", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Elenco consentiti", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Gestione aggiornamenti", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Versione corrente", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Controlla ora", - "checking": "Checking…", - "up_to_date": "Tutto aggiornato", - "update_available": "Aggiornamento disponibile", - "changelog": "Release Notes", - "no_changelog": "Nessun changelog disponibile", - "files_changed": "File modificati", - "files": "File coinvolti", - "changes_unavailable": "Modifiche non disponibili", - "create_backup": "Crea backup", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installazione...", - "creating_backup": "Creazione backup...", - "downloading": "Download...", - "install_success": "Aggiornamento installato correttamente", - "install_failed": "Installazione aggiornamento non riuscita", - "restarting": "Riavvio servizi...", - "restart_complete": "Riavvio completato", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Informazioni versione non disponibili", - "backups_title": "Backup", - "backups_desc": "Ripristina o gestisci backup creati prima degli aggiornamenti.", - "no_backups": "Nessun backup trovato", - "restore": "Restore", - "restore_confirm": "Ripristinare questo backup?", - "restore_success": "Backup ripristinato correttamente", - "baseline_set": "Baseline impostata", - "commits_behind": "Commit indietro", - "total_files": "File totali", - "applied": "Applied", - "failed": "Non riuscito", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Server Go", - "component_agent": "Agent", - "component_scripts": "Script installazione", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Controllo toolchain Go...", - "go_not_found": "Go non trovato", - "go_check_failed": "Controllo Go non riuscito", - "server_building": "Compilazione binary server...", - "server_built": "Binary server compilato", - "server_build_failed": "Build server non riuscita", - "server_stale_title": "Binary server obsoleto", - "server_stale_desc": "Il codice sorgente del server Go è stato aggiornato, ma il binary attivo non è stato ricompilato. Ricompilalo ora per applicare aggiornamenti di sicurezza e librerie.", - "rebuild_server": "Ricompila binary server", - "rebuilding_server": "Ricompilazione server...", - "rebuild_server_success": "Binary server ricompilato e riavviato", - "rebuild_server_failed": "Impossibile ricompilare il binary server", - "server_deployed": "Binary server distribuito", - "server_deploy_failed": "Impossibile distribuire il binary server", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Download sorgente server...", - "delete": "Elimina", - "delete_confirm": "Eliminare definitivamente il backup {name}? Questa azione non può essere annullata.", - "delete_success": "Backup eliminato", - "delete_failed": "Impossibile eliminare il backup", - "retention_label": "Periodo conservazione", - "retention_hint": "Numero di giorni per conservare i backup degli aggiornamenti.", - "retention_saved": "Periodo di conservazione salvato", - "retention_invalid": "Periodo di conservazione non valido", - "retention_required_for_prune": "Il periodo di conservazione è richiesto per la pulizia", - "prune_now": "Apply now", - "prune_confirm": "Conservare solo i {n} backup più recenti ed eliminare gli altri?", - "prune_done": "Eliminati {n} backup", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Strategia aggiornamento", - "strategy_download": "Scarica binary precompilato", - "strategy_compile": "Compila localmente", - "both_available": "Download e compilazione disponibili", - "download_available": "Download disponibile", - "no_method": "Nessun metodo di aggiornamento disponibile", - "no_release": "No release", - "available": "Disponibile", - "server_downloading": "Download binary server...", - "server_downloaded": "Binary server scaricato", - "server_download_failed": "Impossibile scaricare il binary server", - "server_download_note": "Se non è disponibile una release binary, compila il server localmente con Go.", - "install_go_hint": "Installa Go per compilare localmente il binary server.", - "strategy_install_go": "Installa Go e compila", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Aggiornamento automatico disponibile", - "toolchain_ready": "Toolchain pronta", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Download toolchain...", - "toolchain_failed": "Installazione toolchain non riuscita", - "modal_title": "Installa aggiornamento", - "modal_done_title": "Aggiornamento completato", - "modal_close": "Chiudi", - "modal_reload_now": "Ricarica ora", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Aggiorna console web", - "phase_server": "Aggiorna componente server", - "phase_restart": "Riavvia servizi", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Backup saltato", - "server_skipped": "Aggiornamento server saltato", - "server_not_selected": "Go server not selected", - "server_processing": "Elaborazione componente server...", - "no_restart_needed": "Nessun riavvio necessario", - "complete": "Completato", - "complete_summary": "Processo di aggiornamento completato.", - "complete_with_errors": "Aggiornamento completato con avvisi", - "modal_done_with_errors_title": "Aggiornamento completato con elementi da controllare", - "console_will_restart": "La console web verrà riavviata.", - "restart_complete_msg": "Riavvio completato. Aggiorna la pagina se necessario.", - "refresh_recommended": "Aggiornamento pagina consigliato", - "confirm_title": "Conferma aggiornamento", - "confirm_with_backup": "Prima di installare l’aggiornamento verrà creato un backup.", - "confirm_no_backup": "L’aggiornamento verrà installato senza backup." - }, - "permissions": { - "title": "Permessi", - "subtitle": "Gestisci permessi granulari per ogni ruolo server.", - "info_title": "Permessi basati sui ruoli", - "info_desc": "I ruoli predefiniti hanno permessi integrati. Puoi sovrascrivere singoli permessi per ruolo senza modificare la gerarchia.", - "select_role": "Seleziona ruolo", - "select_role_placeholder": "Scegli un ruolo...", - "reset_overrides": "Reimposta override", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Livello server", - "custom": "Custom", - "default": "Default", - "revert": "Ripristina", - "saved": "Permesso salvato", - "reverted": "Permesso ripristinato", - "all_reverted": "Tutti gli override sono stati ripristinati", - "confirm_reset": "Rimuovere tutti gli override dei permessi per questo ruolo?", - "empty_title": "Seleziona un ruolo", - "empty_desc": "Scegli un ruolo a sinistra per visualizzarne i permessi.", - "locked_title": "Super Admin", - "locked_desc": "Questo ruolo eredita il comportamento base dalla gerarchia di sicurezza integrata.", - "cat_device": "Dispositivi", - "cat_user": "Users", - "cat_server": "Sistema server", - "cat_org": "Organizzazioni", - "cat_audit": "Audit e osservabilità", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Visualizzare dispositivi", - "perm_device_connect": "Connettersi ai dispositivi", - "perm_device_edit": "Modificare dispositivi", - "perm_device_delete": "Eliminare dispositivi", - "perm_device_ban": "Bloccare dispositivi", - "perm_device_change_id": "Cambiare ID dispositivo", - "perm_user_view": "Visualizzare utenti", - "perm_user_create": "Creare utenti", - "perm_user_edit": "Modificare utenti", - "perm_user_delete": "Eliminare utenti", - "perm_server_config": "Configurare server", - "perm_server_keys": "Gestire chiavi server", - "perm_org_create": "Creare organizzazioni", - "perm_org_edit": "Modificare organizzazioni", - "perm_org_delete": "Eliminare organizzazioni", - "perm_org_manage_users": "Gestire utenti organizzazione", - "perm_org_manage_devices": "Gestire dispositivi organizzazione", - "perm_audit_view": "Visualizzare log audit", - "perm_metrics_view": "Visualizzare metriche", - "perm_blocklist_edit": "Modificare lista blocchi", - "perm_cdap_view": "Visualizzare CDAP", - "perm_cdap_command": "Eseguire comandi CDAP", - "perm_cdap_terminal": "Aprire terminale CDAP", - "perm_cdap_files": "Gestire file CDAP", - "perm_enrollment_manage": "Gestire registrazioni", - "perm_enrollment_approve": "Approvare registrazioni", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Modificare branding", - "perm_server_attestation": "Attestazione prestazioni du serveur" - }, - "notifications": { - "title": "Notifiche", - "empty": "Nessuna nuova notifica", - "mark_all_read": "Segna tutto come letto", - "see_all": "Vedi tutte le richieste di aiuto", - "help_request": "Richiesta di aiuto", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibilità", - "subtitle": "Adatta la console a vista, movimento e lettura.", - "close": "Chiudi menu accessibilità", - "profiles": "Profili rapidi", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Testo più grande, contrasto più forte e indicatori di focus più evidenti.", - "profile_dyslexia": "Adatto alla dislessia", - "profile_dyslexia_hint": "Font leggibile, spaziatura più ampia e blocchi di testo più tranquilli.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Riduce il movimento e disattiva le animazioni non essenziali.", - "profile_color_assist": "Supporto colori", - "profile_color_assist_hint": "Regola i colori ed evidenzia link e titoli per un riconoscimento migliore.", - "reading": "Lettura", - "font_size": "Dimensione testo", - "line_height": "Altezza riga", - "letter_spacing": "Spaziatura lettere", - "word_spacing": "Spaziatura parole", - "readable_font": "Font leggibile", - "readable_font_hint": "Usa un font più facile da leggere per testi lunghi.", - "dyslexia_spacing": "Spaziatura per dislessia", - "dyslexia_spacing_hint": "Aumenta interlinea, spaziatura parole e lettere per una lettura più confortevole.", - "visual": "Visivo", - "contrast": "Contrasto", - "contrast_normal": "Normal", - "contrast_high_dark": "Alto contrasto scuro", - "contrast_high_light": "Alto contrasto chiaro", - "contrast_yellow_black": "Giallo su nero", - "color_filter": "Filtro colore", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturazione", - "underline_links": "Sottolinea link", - "underline_links_hint": "Rendi i link riconoscibili senza affidarti solo al colore.", - "highlight_links": "Evidenzia link", - "highlight_links_hint": "Aggiungi uno sfondo leggero ai link cliccabili.", - "highlight_headings": "Evidenzia titoli", - "highlight_headings_hint": "Rendi più visibili i titoli delle sezioni.", - "hide_media": "Dim media", - "hide_media_hint": "Nascondi immagini decorative e media non essenziali.", - "interaction": "Interazione", - "strong_focus": "Bordo focus marcato", - "strong_focus_hint": "Mostra un bordo evidente intorno all’elemento attivo.", - "large_cursor": "Cursore grande", - "large_cursor_hint": "Ingrandisci gli indicatori del cursore nelle viste interattive.", - "reduce_motion": "Riduci movimento", - "reduce_motion_hint": "Limita transizioni, parallasse ed effetti in movimento.", - "pause_animations": "Metti in pausa animazioni", - "pause_animations_hint": "Ferma le animazioni non essenziali mentre questa opzione è attiva.", - "reading_guide": "Guida di lettura", - "reading_guide_hint": "Mostra una guida orizzontale che segue la riga corrente.", - "reading_mask": "Maschera di lettura", - "reading_mask_hint": "Oscura il contenuto fuori dall’area di lettura attiva.", - "preview": "Anteprima", - "preview_title": "Titolo anteprima", - "preview_text": "Questa anteprima mostra come appaiono testo, link e pulsanti con le impostazioni di accessibilità correnti.", - "preview_link": "Link di anteprima", - "preview_status": "Online", - "preview_button": "Pulsante di anteprima", - "preview_secondary": "Secondary", - "reset": "Ripristina", - "done": "Fine" - }, - "server_mgmt": { - "title": "Gestione server", - "subtitle": "Pannello in stile Cockpit per l'host della console BetterDesk (BETA).", - "beta_tooltip": "Queste funzioni di gestione server sono ancora in beta.", - "notice_title": "Gestione server", - "notice_body": "Usa questi strumenti con cautela. Le modifiche possono influenzare i servizi attivi.", - "tab_overview": "Panoramica", - "tab_terminal": "Terminale", - "tab_files": "File", - "tab_services": "Servizi", - "cpu": "CPU", - "memory": "Memoria", - "load": "Carico medio", - "disks": "Dischi", - "history": "Cronologia", - "host_info": "Host info", - "cores": "cores", - "uptime": "Tempo di attività", - "no_disks": "Nessun disco trovato", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "Terminale PTY interattivo disponibile", - "term_connect": "Connetti", - "term_disconnect": "Disconnetti", - "term_clear": "Pulisci", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connesso", - "term_disconnected": "Disconnesso", - "term_error": "Errore terminale", - "term_warning": "Avviso terminale", - "term_hint": "Esegui comandi con la stessa attenzione che useresti sul server.", - "term_lib_failed": "Impossibile caricare la libreria terminale", - "files_up": "Su", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Nome", - "files_size": "Dimensione", - "files_perms": "Mode", - "files_mtime": "Modificato", - "files_rename": "Rinomina", - "files_rename_prompt": "New name:", - "files_empty": "Questa cartella è vuota", - "files_error": "Impossibile caricare i file", - "read_failed": "Impossibile leggere il file", - "save_failed": "Impossibile salvare il file", - "rename_failed": "Rinomina non riuscita", - "delete_failed": "Eliminazione non riuscita", - "delete_confirm": "Eliminare questo elemento?", - "mkdir_prompt": "Nome nuova cartella", - "mkdir_failed": "Impossibile creare la cartella", - "file_saved": "File salvato", - "binary_warn": "Questo sembra un file binario. La modifica potrebbe danneggiarlo.", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Cerca servizi...", - "svc_name": "Servizio", - "svc_state": "Stato", - "svc_description": "Description", - "svc_empty": "Nessun servizio trovato", - "svc_load_failed": "Impossibile caricare i servizi", - "svc_action_failed": "Azione servizio non riuscita", - "svc_confirm": "Run", - "svc_start": "Avvia", - "svc_stop": "Ferma", - "svc_restart": "Riavvia", - "svc_reload": "Reload", - "svc_enable": "Abilita", - "svc_disable": "Disabilita", - "svc_status": "Status" - }, - "download": { - "title": "Scarica BetterDesk Agent", - "choose_platform": "Scegli piattaforma", - "choose_platform_hint": "Seleziona il programma di installazione adatto al tuo sistema operativo.", - "download": "Scarica", - "building": "Compilazione…", - "failed": "Build non riuscita", - "need_help": "Hai bisogno di aiuto?", - "powered_by": "Basato su" - }, - "server_attestation": { - "title": "Attestazione server", - "subtitle": "Benchmark di prestazioni che determina la capacità di connessioni remote simultanee all'80% di soglia CPU, RAM e disco.", - "warning_title": "Test di carico", - "warning_body": "Il benchmark simula connessioni WebSocket parallele ai server signal e relay. Esegui nelle ore di bassa affluenza — questo test carica la produzione.", - "run_benchmark": "Esegui benchmark", - "abort": "Interrompi", - "download_report": "Scarica report JSON", - "last_test": "Ultimo test", - "no_test_yet": "Nessun benchmark eseguito finora", - "max_connections": "Connessioni massime", - "threshold_80": "Soglia 80% — metriche finali", - "disk": "Disco", - "ramp_chart": "Grafico rampa di carico", - "connections": "Connessioni", - "connections_short": "conn.", - "tier_guide_title": "Cosa significa ogni livello?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "NON CLASSIFICATO", - "tier_bronze_desc": "1–25 connessioni simultanee — VPS piccolo (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 connessioni — server di fascia media (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 connessioni — server ad alte prestazioni (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 connessioni — infrastruttura enterprise (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ connessioni — classe turbo: hardware dedicato, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Nota: in Docker, le metriche CPU/RAM possono riflettere i limiti del container anziché l'host fisico.", - "badge_tooltip": "Attestazione server BetterDesk — certificazione prestazioni server", - "confirm_run": "Questo benchmark effettuerà un test di carico sul server con connessioni simulate. Continuare?", - "starting": "Avvio...", - "complete": "Benchmark completato", - "signal_peers": "Peer signal", - "relay_sessions": "Sessioni relay", - "page_error": "Èchec du caricamento de la page d'attestazione server", - "mode_estimated": "Estimè (WebSocket inaccessible)", - "incomplete": "Benchmark terminè sans niveau valide" + "form": { + "cancel": "Annulla" } + } } diff --git a/web-nodejs/lang/ja.json b/web-nodejs/lang/ja.json index d452ac4b..5324d548 100644 --- a/web-nodejs/lang/ja.json +++ b/web-nodejs/lang/ja.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "ja", - "name": "Japanese", - "native_name": "日本語", - "direction": "ltr" + "meta": { + "lang": "ja", + "name": "Japanese", + "native_name": "日本語", + "direction": "ltr" + }, + "common": { + "loading": "読み込み中...", + "confirm": "確認", + "alert": "アラート", + "prompt": "値を入力", + "copied": "クリップボードにコピーしました", + "save": "保存", + "saved": "保存しました", + "error": "エラー", + "success": "成功", + "warning": "警告", + "info": "情報", + "all": "すべて", + "cancel": "キャンセル", + "delete": "削除", + "actions": "アクション", + "close": "閉じる", + "required": "必須", + "name_required": "名前は必須です", + "active": "アクティブ", + "inactive": "非アクティブ", + "invalid_json": "無効なJSON", + "field_required": "{field}は必須です", + "back": "戻る", + "edit": "編集", + "yes": "はい", + "no": "いいえ" + }, + "nav": { + "main": "メイン", + "tools": "ツール", + "system": "システム", + "dashboard": "ダッシュボード", + "devices": "デバイス", + "keys": "キー", + "generator": "ジェネレーター", + "settings": "設定", + "users": "ユーザー", + "inventory": "インベントリ", + "tickets": "チケット", + "help_requests": "ヘルプリクエスト", + "activity": "アクティビティ", + "automation": "自動化", + "file_transfer": "ファイル転送", + "network": "ネットワーク", + "dataguard": "DataGuard", + "reports": "レポート", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "管理", + "toggle_sidebar": "サイドバーの切り替え", + "cdap": "CDAP デバイス", + "fleet": "フリート", + "scaling": "スケーリング", + "cross_platform": "クロスプラットフォーム", + "tokens": "デバイストークン", + "organizations": "組織", + "policies": "ポリシー", + "attestation": "証明", + "remote": "リモートデスクトップ", + "toolkit": "Toolkit", + "security_audit": "セキュリティ監査", + "languages": "言語", + "resource_control": "リソース制御", + "chat": "チャット", + "help": "Help", + "expand_sidebar": "サイドバーを展開する", + "toggle_theme": "テーマの切り替え", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "権限", + "server_management": "サーバー管理", + "server_attestation": "サーバー性能認定", + "commercialization": "商用化" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "BetterDesk コンソールにサインインする", + "username": "ユーザー名", + "username_placeholder": "ユーザー名を入力してください", + "password": "パスワード", + "password_placeholder": "パスワードを入力してください", + "remember_me": "Remember me", + "login_failed": "ログインに失敗しました。資格情報を確認してください。", + "invalid_credentials": "ユーザー名またはパスワードが無効です。", + "username_collision": "同じユーザー名のローカルアカウントが既に存在します。ローカルパスワードでサインインするか、管理者に競合するアカウントの名前変更または削除を依頼してください。", + "fill_all_fields": "すべてのフィールドに入力してください", + "logout_confirm": "ログアウトしてもよろしいですか?", + "change_password": "パスワードの変更", + "password_required": "パスワードが必要です", + "totp_title": "二要素認証", + "totp_subtitle": "認証アプリから 6 桁のコードを入力してください", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "代わりにリカバリーコードを使用してください", + "totp_use_code": "代わりに認証コードを使用してください", + "totp_recovery_code": "リカバリーコード", + "totp_back_to_login": "ログインに戻る", + "totp_invalid_code": "無効な認証コードです。もう一度お試しください。", + "totp_enter_code": "6 桁のコードを入力してください", + "totp_enter_recovery": "リカバリーコードを入力してください", + "totp_session_expired": "セッションの有効期限が切れました。再度ログインしてください。", + "totp_already_enabled": "二要素認証はすでに有効です", + "pro_only_account": "このアカウントは RustDesk デスクトップクライアント専用です。ログインには RustDesk アプリを使用してください。", + "passwords_mismatch": "パスワードが一致しません", + "or": "または", + "login_sso": "SSO でサインインする", + "login_sso_with": "{{provider}} でサインインする", + "oidc_denied": "ID プロバイダーによってアクセスが拒否されました。", + "oidc_invalid": "無効な OIDC コールバック。もう一度試してください。", + "oidc_failed": "OIDC 認証に失敗しました。もう一度試してください。", + "oidc_error": "SSO ログイン中にエラーが発生しました。", + "oidc_no_account": "アカウントが見つからなかったため、自動登録が無効になっています。", + "totp_rate_limited": "試行回数が多すぎます。後でもう一度試してください。", + "emergency_mode_banner": "Go server 到達不能 — 緊急モードで実行中 (管理者のみ、機能が制限されています)" + }, + "dashboard": { + "title": "ダッシュボード", + "subtitle": "Overview of your RustDesk server", + "total_devices": "総デバイス数", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "アクティブな接続", + "offline_devices": "Offline", + "server_status": "サーバーステータス", + "quick_actions": "クイックアクション", + "manage_devices": "接続されたデバイスを管理", + "view_keys": "サーバーキーを表示", + "generate_config": "クライアント設定を生成", + "server_settings": "設定を構成", + "greeting_morning": "おはようございます、{name}", + "greeting_afternoon": "こんにちは、{name}", + "greeting_evening": "こんばんは、{name}", + "greeting_night": "おやすみなさい、{name}", + "health_overview": "ヘルス概要", + "devices_online": "オンラインデバイス", + "active_alerts": "アクティブなアラート", + "recent_connections": "総デバイス数", + "server_uptime": "サーバー稼働時間", + "activity_feed": "最近のアクティビティ", + "no_recent_activity": "最近のアクティビティはありません", + "just_now": "たった今", + "ago": "前", + "tip_desktop_mode": "監視ウィジェット付きのマルチウィンドウ作業空間にはデスクトップモードをお試しください。", + "tip_keyboard_shortcuts": "どこからでも Ctrl+K を押してクイック検索コマンドパレットを開けます。", + "tip_address_book": "RustDesk クライアントからログインして、デバイス間でアドレス帳を同期します。", + "tip_2fa": "アカウントの安全性を高めるため、設定で二要素認証を有効にしてください。", + "tip_bulk_actions": "複数のデバイスを選択し、一括操作でまとめて管理できます。", + "tip_theme": "サイドバー設定でダークテーマとライトテーマを切り替えられます。", + "tip_cdap": "CDAP ゲートウェイ経由で IoT デバイスや産業用センサーを接続します。", + "tip_tutorials": "右下のヘルプボタンをクリックするとインタラクティブチュートリアルを表示できます。" + }, + "devices": { + "title": "デバイス", + "id": "ID", + "hostname": "Hostname", + "username": "ユーザー名", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "作成されました", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "デバイスを検索...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "同期ステータス", + "sync_success": "ステータスは正常に同期されました", + "empty_title": "デバイスが見つかりません", + "empty_text": "現在のフィルターに一致するデバイスはありません", + "edit_title": "デバイスの詳細", + "delete_title": "デバイスの削除", + "delete_confirm": "デバイス {id} を削除してもよろしいですか?", + "delete_warning": "このデバイスを完全に削除しようとしています:", + "delete_permanent": "この操作は元に戻すことができません。このデバイスに関連付けられたすべてのデータはデータベースから永久に削除されます。", + "delete_success": "デバイスは正常に削除されました", + "revoke_option": "デバイスを取り消します", + "revoke_hint": "デバイス ID をブロックし、アクティブな接続を切断します", + "revoke_success": "デバイスは正常に取り消されました", + "details": "デバイスの詳細", + "ban_title": "禁止デバイス", + "ban_confirm": "デバイス {id} を禁止してもよろしいですか?", + "ban_success": "デバイスは正常に禁止されました", + "unban_title": "デバイスの禁止を解除する", + "unban_confirm": "デバイス {id} の禁止を解除してもよろしいですか?", + "unban_success": "デバイスの禁止が正常に解除されました", + "change_id": "Change ID", + "change_id_title": "デバイスIDの変更", + "new_id": "New ID", + "change_id_hint": "6 ~ 16 文字、文字、数字、ダッシュ、アンダースコアのみ", + "change_id_success": "デバイスIDが正常に変更されました", + "id_length_error": "ID の長さは 6 ~ 16 文字���ある必要があります", + "id_format_error": "ID には文字、数字、ダッシュ、アンダースコアのみを含めることができます", + "bulk_delete_title": "複数のデバイスの削除", + "bulk_delete_confirm": "{count} デバイスを削除してもよろしいですか?", + "bulk_delete_success": "{count} デバイスは正常に削除されました", + "columns": "Columns", + "toggle_columns": "表示される列を切り替えます", + "not_found": "デバイスが見つかりません", + "delete_failed": "デバイスの削除に失敗しました", + "change_id_failed": "デバイスIDの変更に失敗しました", + "invalid_id": "無効なデバイス ID (6 ~ 16 文字が必要)", + "invalid_id_format": "無効な ID 形式 (文字、数字、ダッシュ、アンダースコアのみ)", + "id_exists": "デバイスIDはすでに存在します", + "no_selection": "デバイスが選択されていません", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "アクセスポリシー", + "unattended_access": "無人アクセス", + "enable_unattended": "無人アクセス���有効にする", + "access_password": "アクセスパスワード", + "password_configured": "パスワード設定", + "no_password": "パスワードがありません", + "new_password": "新しいパスワード (最新のパスワードを維持するには空のままにしておきます)", + "clear_password": "パスワードをクリア", + "access_schedule": "アクセススケジュール", + "enable_schedule": "時間ベースのアクセスを有効にする", + "allowed_days": "許可日", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "許可される演算子", + "all_operators": "すべての演算子 (空のままにします)", + "operators_hint": "カンマ区切りのユーザー名。すべての演算子を許可するには、空のままにします。", + "last_updated_by": "最終更新者", + "access_policy_saved": "アクセスポリシーが保存されました", + "tabs": { + "overview": "概要", + "hardware": "Hardware", + "metrics": "メトリクス", + "connections": "接続", + "audit": "Audit", + "info": "Info", + "history": "歴史" }, - "common": { - "loading": "読み込み中...", - "confirm": "確認", - "alert": "アラート", - "prompt": "値を入力", - "copied": "クリップボードにコピーしました", - "save": "保存", - "saved": "保存しました", - "error": "エラー", - "success": "成功", - "warning": "警告", - "info": "情報", - "all": "すべて", - "cancel": "キャンセル", - "delete": "削除", - "actions": "アクション", - "close": "閉じる", - "required": "必須", - "name_required": "名前は必須です", - "active": "アクティブ", - "inactive": "非アクティブ", - "invalid_json": "無効なJSON", - "field_required": "{field}は必須です", - "back": "戻る", - "edit": "編集", - "yes": "はい", - "no": "いいえ" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "負荷平均", + "network": "ネットワークア���プター", + "no_data": "利用可能なハードウェア データがありません", + "title": "ハードウェア情報", + "gpu": "Graphics Card" }, - "nav": { - "main": "メイン", - "tools": "ツール", - "system": "システム", - "dashboard": "ダッシュボード", - "devices": "デバイス", - "keys": "キー", - "generator": "ジェネレーター", - "settings": "設定", - "users": "ユーザー", - "inventory": "インベントリ", - "tickets": "チケット", - "help_requests": "ヘルプリクエスト", - "activity": "アクティビティ", - "automation": "自動化", - "file_transfer": "ファイル転送", - "network": "ネットワーク", - "dataguard": "DataGuard", - "reports": "レポート", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "管理", - "toggle_sidebar": "サイドバーの切り替え", - "cdap": "CDAP デバイス", - "fleet": "フリート", - "scaling": "スケーリング", - "cross_platform": "クロスプラットフォーム", - "tokens": "デバイストークン", - "organizations": "組織", - "policies": "ポリシー", - "attestation": "証明", - "remote": "リモートデスクトップ", - "toolkit": "Toolkit", - "security_audit": "セキュリティ監査", - "languages": "言語", - "resource_control": "リソース制御", - "chat": "チャット", - "help": "Help", - "expand_sidebar": "サイドバーを展開する", - "toggle_theme": "テーマの切り替え", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "権限", - "server_management": "サーバー管理", - "server_attestation": "サーバー性能認定" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "BetterDesk コンソールにサインインする", - "username": "ユーザー名", - "username_placeholder": "ユーザー名を入力してください", - "password": "パスワード", - "password_placeholder": "パスワードを入力してください", - "remember_me": "Remember me", - "login_failed": "ログインに失敗しました。資格情報を確認してください。", - "invalid_credentials": "ユーザー名またはパスワードが無効です。", - "username_collision": "同じユーザー名のローカルアカウントが既に存在します。ローカルパスワードでサインインするか、管理者に競合するアカウントの名前変更または削除を依頼してください。", - "fill_all_fields": "すべてのフィールドに入力してください", - "logout_confirm": "ログアウトしてもよろしいですか?", - "change_password": "パスワードの変更", - "password_required": "パスワードが必要です", - "totp_title": "二要素認証", - "totp_subtitle": "認証アプリから 6 桁のコードを入力してください", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "代わりにリカバリーコードを使用してください", - "totp_use_code": "代わりに認証コードを使用してください", - "totp_recovery_code": "リカバリーコード", - "totp_back_to_login": "ログインに戻る", - "totp_invalid_code": "無効な認証コードです。もう一度お試しください。", - "totp_enter_code": "6 桁のコードを入力してください", - "totp_enter_recovery": "リカバリーコードを入力してください", - "totp_session_expired": "セッションの有効期限が切れました。再度ログインしてください。", - "totp_already_enabled": "二要素認証はすでに有効です", - "pro_only_account": "このアカウントは RustDesk デスクトップクライアント専用です。ログインには RustDesk アプリを使用してください。", - "passwords_mismatch": "パスワードが一致しません", - "or": "または", - "login_sso": "SSO でサインインする", - "login_sso_with": "{{provider}} でサインインする", - "oidc_denied": "ID プロバイダーによってアクセスが拒否されました。", - "oidc_invalid": "無効な OIDC コールバック。もう一度試してください。", - "oidc_failed": "OIDC 認証に失敗しました。もう一度試してください。", - "oidc_error": "SSO ログイン中にエラーが発生しました。", - "oidc_no_account": "アカウントが見つからなかったため、自動登録が無効になっています。", - "totp_rate_limited": "試行回数が多すぎます。後でもう一度試してください。", - "emergency_mode_banner": "Go server 到達不能 — 緊急モードで実行中 (管理者のみ、機能が制限されています)" - }, - "dashboard": { - "title": "ダッシュボード", - "subtitle": "Overview of your RustDesk server", - "total_devices": "総デバイス数", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "アクティブな接続", - "offline_devices": "Offline", - "server_status": "サーバーステータス", - "quick_actions": "クイックアクション", - "manage_devices": "接続されたデバイスを管理", - "view_keys": "サーバーキーを表示", - "generate_config": "クライアント設定を生成", - "server_settings": "設定を構成", - "greeting_morning": "おはようございます、{name}", - "greeting_afternoon": "こんにちは、{name}", - "greeting_evening": "こんばんは、{name}", - "greeting_night": "おやすみなさい、{name}", - "health_overview": "ヘルス概要", - "devices_online": "オンラインデバイス", - "active_alerts": "アクティブなアラート", - "recent_connections": "総デバイス数", - "server_uptime": "サーバー稼働時間", - "activity_feed": "最近のアクティビティ", - "no_recent_activity": "最近のアクティビティはありません", - "just_now": "たった今", - "ago": "前", - "tip_desktop_mode": "監視ウィジェット付きのマルチウィンドウ作業空間にはデスクトップモードをお試しください。", - "tip_keyboard_shortcuts": "どこからでも Ctrl+K を押してクイック検索コマンドパレットを開けます。", - "tip_address_book": "RustDesk クライアントからログインして、デバイス間でアドレス帳を同期します。", - "tip_2fa": "アカウントの安全性を高めるため、設定で二要素認証を有効にしてください。", - "tip_bulk_actions": "複数のデバイスを選択し、一括操作でまとめて管理できます。", - "tip_theme": "サイドバー設定でダークテーマとライトテーマを切り替えられます。", - "tip_cdap": "CDAP ゲートウェイ経由で IoT デバイスや産業用センサーを接続します。", - "tip_tutorials": "右下のヘルプボタンをクリックするとインタラクティブチュートリアルを表示できます。" - }, - "devices": { - "title": "デバイス", - "id": "ID", - "hostname": "Hostname", - "username": "ユーザー名", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "作成されました", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "デバイスを検索...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "同期ステータス", - "sync_success": "ステータスは正常に同期されました", - "empty_title": "デバイスが見つかりません", - "empty_text": "現在のフィルターに一致するデバイスはありません", - "edit_title": "デバイスの詳細", - "delete_title": "デバイスの削除", - "delete_confirm": "デバイス {id} を削除してもよろしいですか?", - "delete_warning": "このデバイスを完全に削除しようとしています:", - "delete_permanent": "この操作は元に戻すことができません。このデバイスに関連付けられたすべてのデータはデータベースから永久に削除されます。", - "delete_success": "デバイスは正常に削除されました", - "revoke_option": "デバイスを取り消します", - "revoke_hint": "デバイス ID をブロックし、アクティブな接続を切断します", - "revoke_success": "デバイスは正常に取り消されました", - "details": "デバイスの詳細", - "ban_title": "禁止デバイス", - "ban_confirm": "デバイス {id} を禁止してもよろしいですか?", - "ban_success": "デバイスは正常に禁止されました", - "unban_title": "デバイスの禁止を解除する", - "unban_confirm": "デバイス {id} の禁止を解除してもよろしいですか?", - "unban_success": "デバイスの禁止が正常に解除されました", - "change_id": "Change ID", - "change_id_title": "デバイスIDの変更", - "new_id": "New ID", - "change_id_hint": "6 ~ 16 文字、文字、数字、ダッシュ、アンダースコアのみ", - "change_id_success": "デバイスIDが正常に変更されました", - "id_length_error": "ID の長さは 6 ~ 16 文字���ある必要があります", - "id_format_error": "ID には文字、数字、ダッシュ、アンダースコアのみを含めることができます", - "bulk_delete_title": "複数のデバイスの削除", - "bulk_delete_confirm": "{count} デバイスを削除してもよろしいですか?", - "bulk_delete_success": "{count} デバイスは正常に削除されました", - "columns": "Columns", - "toggle_columns": "表示される列を切り替えます", - "not_found": "デバイスが見つかりません", - "delete_failed": "デバイスの削除に失敗しました", - "change_id_failed": "デバイスIDの変更に失敗しました", - "invalid_id": "無効なデバイス ID (6 ~ 16 文字が必要)", - "invalid_id_format": "無効な ID 形式 (文字、数字、ダッシュ、アンダースコアのみ)", - "id_exists": "デバイスIDはすでに存在します", - "no_selection": "デバイスが選択されていません", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "アクセスポリシー", - "unattended_access": "無人アクセス", - "enable_unattended": "無人アクセス���有効にする", - "access_password": "アクセスパスワード", - "password_configured": "パスワード設定", - "no_password": "パスワードがありません", - "new_password": "新しいパスワード (最新のパスワードを維持するには空のままにしておきます)", - "clear_password": "パスワードをクリア", - "access_schedule": "アクセススケジュール", - "enable_schedule": "時間ベースのアクセスを有効にする", - "allowed_days": "許可日", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "許可される演算子", - "all_operators": "すべての演算子 (空のままにします)", - "operators_hint": "カンマ区切りのユーザー名。すべての演算子を許可するには、空のままにします。", - "last_updated_by": "最終更新者", - "access_policy_saved": "アクセスポリシーが保存されました", - "tabs": { - "overview": "概要", - "hardware": "Hardware", - "metrics": "メトリクス", - "connections": "接続", - "audit": "Audit", - "info": "Info", - "history": "歴史" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "負荷平均", - "network": "ネットワークア���プター", - "no_data": "利用可能なハードウェア データがありません", - "title": "ハードウェア情報", - "gpu": "Graphics Card" - }, - "display_name": "表示名", - "display_name_placeholder": "カスタム名 (ホスト名をオーバーライド)", - "note_placeholder": "この装置に関する注意事項", - "tags": "Tags", - "filter_by_tags": "タグでフィルタリングする", - "no_tags": "No tags", - "all_groups": "すべてのグループ", - "create_group": "グループの作成", - "manage_groups": "グループの管理", - "group_name": "グループ名", - "group_name_placeholder": "例:メディアPC", - "dynamic_group": "タグからの動的グループ", - "dynamic_group_hint": "このタグが付いたデバイスは自動的に参加します。", - "tag_filter": "Tag filter", - "group_allowed_users": "許可されたユーザー", - "group_allowed_users_hint": "デバイス権限を持つすべてのユーザーにグループが表示されるようにするには、空のままにします。", - "group_tag_required": "動的グループにはタグフィルターが必要です", - "group_invalid": "無効なグループ識別子", - "group_not_found": "グループが見つかりません", - "group_saved": "デバイスグループが保存されました", - "groups_saved": "デバイスグループが保存されました", + "display_name": "表示名", + "display_name_placeholder": "カスタム名 (ホスト名をオーバーライド)", + "note_placeholder": "この装置に関する注意事項", + "tags": "Tags", + "filter_by_tags": "タグでフィルタリングする", + "no_tags": "No tags", + "all_groups": "すべてのグループ", + "create_group": "グループの作成", + "manage_groups": "グループの管理", + "group_name": "グループ名", + "group_name_placeholder": "例:メディアPC", + "dynamic_group": "タグからの動的グループ", + "dynamic_group_hint": "このタグが付いたデバイスは自動的に参加します。", + "tag_filter": "Tag filter", + "group_allowed_users": "許可されたユーザー", + "group_allowed_users_hint": "デバイス権限を持つすべてのユーザーにグループが表示されるようにするには、空のままにします。", + "group_tag_required": "動的グループにはタグフィルターが必要です", + "group_invalid": "無効なグループ識別子", + "group_not_found": "グループが見つかりません", + "group_saved": "デバイスグループが保存されました", + "groups_saved": "デバイスグループが保存されました", "group_membership_added": "グループに追加しました", "group_membership_removed": "グループから削除しました", - "no_groups": "まだグループがありません", - "manual_groups": "マニュアルグループ", - "dynamic_memberships": "動的メンバーシップ", - "group_allowed_user_groups": "許可されたユーザーグループ", - "group_allowed_user_groups_hint": "選択したユーザー グループのユーザーは、このデバイス グループにアクセスできます。", - "no_user_groups": "ユーザーグループがありません", - "edit_group": "グループの編集", - "delete_group": "グループの削除", - "delete_group_confirm": "デバイスグループ{name}を削除しますか?", - "group_deleted": "デバイスグループが削除されました", - "folder_group_readonly": "フォルダーベースのグループはフォルダーから管理されます。", - "manage_user_groups": "ユーザーグループの管理", - "restore_failed": "デバイスの復元に失敗しました", - "no_signal_tooltip": "クライアントは最近 API に接続しましたが、シグナルサーバー (UDP :21116) に登録されていません。サーバー移行後にクライアントを再起動してください。", - "per_page": "1ページあたり" - }, - "keys": { - "title": "サーバーキー", - "subtitle": "RustDesk クライアントの公開鍵と構成", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "サーバー情報", - "download": "ダウンロードキー", - "show_qr": "Show QR", - "qr_hint": "RustDesk モバイル アプリでこの QR コードをスキャンします", - "no_key": "公開鍵が見つかりません", - "no_key_to_copy": "コピーするキーがありません", - "no_qr": "QRコードは利用できません", - "download_success": "キーファイルがダウンロードされました", - "not_found": "キーが見つかりません", - "api_not_found": "API キーが見つかりません" - }, - "settings": { - "title": "設定", - "subtitle": "コンソールの構成とアカウント設定", - "tab_general": "General", - "tab_server": "サーバー", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "言語", - "change_password": "パスワードの変更", - "password_desc": "アカウントのパスワードを更新する", - "current_password": "現在のパスワード", - "new_password": "新しいパスワード", - "confirm_password": "パスワードの確認", - "save_password": "パスワードを更新", - "password_changed": "パスワードが正常に変更されました", - "fill_all_fields": "すべての項目を入力してください", - "passwords_not_match": "パスワードが一致しません", - "password_requirements": "パスワード要件", - "password_requirements_not_met": "パスワードが要件を満たしていません", - "req_length": "8 文字以上", - "req_uppercase": "英大文字を少なくとも 1 文字含めてください", - "req_lowercase": "英小文字を少なくとも 1 文字含めてください", - "req_number": "数字を少なくとも 1 文字含めてください", - "server_info": "サーバー情報", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "最近のコンソールアクティビティ", - "no_audit_logs": "監査ログが見つかりません", - "backend_title": "サーバーバックエンド", - "backend_desc": "デバイス管理および信号/リレー サービスに使用するサーバー バックエンドを選択します。", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "標準 RustDesk 信号および中継サーバー (hbbs + hbbr)。基本的な HTTP API (エンドポイントが制限されている)。", - "backend_betterdesk_desc": "完全な REST API、JWT 認証、ブロックリスト、タグ、リアルタイム WebSocket イベント、および監査ログを備えた強化された Go ベースのサーバー。", - "backend_feature_signal": "シグナルサーバー(ID登録)", - "backend_feature_relay": "中継サーバー(接続中継)", - "backend_feature_basic_api": "基本的な REST API", - "backend_feature_full_api": "フル REST API (34 個以上のエンドポイント)", - "backend_feature_jwt": "JWT 認証 & TOTP 2FA", - "backend_feature_blocklist": "IP/IDブロックリスト管理", - "backend_feature_tags": "デバイスのタグとグループ化", - "backend_feature_audit": "監査イベントのログ記録", - "backend_feature_websocket": "リアルタイム WebSocket イベント", - "backend_connection": "接続", - "backend_api_url": "API URL", - "backend_test": "テスト接続", - "backend_testing": "テスト中...", - "backend_save": "バックエンドの適用", - "backend_saved": "サーバー バックエンドが正常に変更されました。デバイス データは新しいバックエンドによって管理されるようになります。", - "backend_save_failed": "サーバーバックエンドの切り替えに失敗しました", - "backend_test_success": "接続成功!サーバーに到達可能です。", - "backend_test_failed": "接続に失敗しました。サーバーに到達できません。", - "backend_confirm_switch": "サーバー バックエンドを切り替えてもよろしいですか?これにより、デバイスの管理方法が変わります。", - "backend_unreachable": "切り替えできません: ターゲット サーバーに到達できません。まずサーバーを起動します。", - "invalid_backend": "バックエンドの選択が無効です。 「rustdesk」または「betterdesk」を選択します。", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "二要素認証", - "totp_desc": "TOTP 認証アプリ (Google Authenticator、Microsoft Authenticator、Authy など) を使用してセキュリティ層を追加します。", - "totp_enabled": "2FA 有効", - "totp_enabled_desc": "あなたのアカウントは二要素認証で保護されています。", - "totp_disabled": "2FA が有効になっていません", - "totp_disabled_desc": "アカウントのセキュリティを強化するために 2 要素認証を有効にします。", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "携帯電話に認証アプリをインストールする", - "totp_step2": "以下の QR コードをスキャンしてください", - "totp_step3": "6桁のコードを入力して確認してください", - "totp_manual_key": "Manual key", - "totp_enter_code": "確認コードを入力してください", - "totp_verify_enable": "確認して有効にする", - "totp_enabled_success": "二要素認証が有効になり��した!", - "totp_recovery_warning": "これらのリカバリ コードを安全な場所に保存してください。各コードは 1 回のみ使用できます。認証アプリにアクセスできなくなった場合は、これらのコードを使用してログインできます。", - "totp_done": "Done", - "totp_disable_warning": "2 要素認証を無効にすると、アカウントの安全性が低下します。確認のためにパスワードを入力��てください。", - "totp_disabled_success": "二要素認証が無効になっています。", - "tutorials_title": "チュートリアルとガイド", - "tutorials_desc": "コンソール全体に表示されるガイド付きツアーとヘルプ オーバーレイを制御します", - "tutorials_enabled": "チュートリアルを有効にする", - "tutorials_enabled_hint": "無���にすると、チュートリアルは自動的に開始されず、ヘルプ ボタンが非表示になります。", - "tutorials_reset_hint": "すべてのチュートリアルを未表示としてマークして、再度表示できるようにします", - "tutorials_enabled_toast": "チュートリアルが有効になっています", - "tutorials_disabled_toast": "チュートリアルが無効になっています", - "tutorials_reset_toast": "すべてのチュートリアルがリセットされました", - "tab_auth": "認証", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "LDAP または Active Directory を介して外部認証を構成します。ユーザーはドメイン資格情報を使用してサインインできるようになります。", - "ldap_enabled": "LDAP 認証を有効にする", - "ldap_enabled_hint": "有効にすると、ユーザーは LDAP/AD 資格情報を使用してサインインできます。ローカル アカウントは引き続きフォールバックとして機能します。", - "ldap_connection": "サーバー接続", - "ldap_host": "ホスト", - "ldap_port": "港", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "TLS 検証をスキップ", - "ldap_timeout": "接続タイムアウト (秒)", - "ldap_timeout_hint": "LDAP サーバーの応答を待つ秒数", - "ldap_bind_mode": "バインドモード", - "ldap_direct_bind": "ダイレクトバインド", - "ldap_direct_bind_hint": "検索にサービス アカウントを使用するのではなく、DN テンプレートに直接バインドします。", - "ldap_bind_dn": "バインドDN (サービスアカウント)", - "ldap_bind_dn_hint": "ユーザーの検索に使用される読み取り専用サービス アカウントの識別名。", - "ldap_bind_password": "バインドパスワード", - "ldap_base_dn": "ベースDN", - "ldap_base_dn_hint": "ユーザーを見つけるための検索ベース。例: dc=例,dc=com", - "ldap_user_filter": "ユーザーフィルター", - "ldap_user_filter_hint": "ユーザーを検索するための LDAP フィルター。 {{username}} をプレースホルダーとして使用します。デフォルト: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "ダイレクトバインドDNテンプレート", - "ldap_direct_bind_dn_hint": "ダイレクトバインド用のDNテンプレート。プレースホルダーとして {{username}} を使用し��す。例: uid={{username}}、ou=ユーザー、dc=example、dc=com", - "ldap_user_attrs": "ユーザー属性", - "ldap_attr_id": "ユーザー名の属性", - "ldap_attr_email": "電子メールの属性", - "ldap_attr_name": "表示名の属性", - "ldap_group_mapping": "グループ → ロールマッピング", - "ldap_group_base_dn": "グループベースDN", - "ldap_group_base_dn_hint": "メインのベース DN を使用するには、空のままにしておきます。", - "ldap_group_filter": "グループフィルター", - "ldap_group_attr_name": "グループ名属性", - "ldap_default_role": "デフォルトの役割", - "ldap_default_role_hint": "LDAP グループがどのマッピングにも一致しないユーザーに割り当てられたロール", - "ldap_role_viewer": "ビューア", - "ldap_role_operator": "オペレーター", - "ldap_role_admin": "管理者", - "ldap_group_role_map": "グループ → 役割マップ", - "ldap_group_role_map_hint": "LDAP グループを BetterDesk ロールにマップします。形式: GroupDN=ロールを | で区切ります。 (パ���プ)。例: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "テスト接続", - "ldap_testing": "テスト中...", - "ldap_test_success": "接続成功! LDAP サーバーに到達可能であり、バインド資格情報が有効です。", - "ldap_test_failed": "接続に失敗しました", - "ldap_save": "LDAP 構成の保存", - "ldap_saved": "LDAP 構成が正常に保存されました", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "OpenID Connect プロバイダー (Azure AD、Okta、Google、Keycloak など) を介してシングル サインオンを構成します。", - "oidc_enabled": "OIDC 認証を有効にする", - "oidc_enabled_hint": "ユーザーが外部 ID プロバイダーを使用してサインインできるようにする", - "oidc_provider": "アイデンティティプロバイダー", - "oidc_display_name": "ボタンの表示名", - "oidc_display_name_hint": "ログイン ボタンに表示されるテキスト (例: Azure AD、Okta)", - "oidc_issuer_url": "発行者 URL", - "oidc_issuer_url_hint": "OpenID Connect 発行者 URL (検出は自動的に行われます)", - "oidc_client_id": "クライアントID", - "oidc_client_secret": "クライアントシークレット", - "oidc_redirect_url": "URL リダイレクト (コールバック)", - "oidc_redirect_url_hint": "IdP で構成されている内容と正確に一致する必要があります。通常: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "スコープ", - "oidc_use_pkce": "PKCE を使用します (推奨)", - "oidc_auto_discovery": "自動検出", - "oidc_allow_signup": "ユーザーの自動作成", - "oidc_manual_endpoints": "手動エンドポイント URL", - "oidc_authorization_url": "認可エンドポイント", - "oidc_token_url": "トークンエンドポイント", - "oidc_userinfo_url": "ユーザー情報エンドポイント", - "oidc_claim_mapping": "クレームマッピング", - "oidc_claim_username": "ユーザー名の要求", - "oidc_claim_email": "電子メールによる請求", - "oidc_claim_name": "表示名の申し立て", - "oidc_claim_groups": "グループの主張", - "oidc_role_mapping": "役割のマッピング", - "oidc_default_role": "デフォルトの役割", - "oidc_group_role_map": "グループ → ロールマッピング", - "oidc_group_role_map_hint": "1 行に 1 つのマッピング: group_name=role (例: admins=admin、operators=operator)", - "oidc_test_discovery": "テストディスカバリー", - "oidc_testing": "テスト中...", - "oidc_test_success": "発見成功!エンドポイントが解決されました。", - "oidc_test_failed": "検出に失敗しました", - "oidc_issuer_required": "ディスカバリーをテストするには発行者 URL が必要です", - "oidc_save": "OIDC 構成の保存", - "oidc_saved": "OIDC 構成が正常に保存されました", - "tab_advanced": "詳細設定", - "connection_mode_title": "接続戦略", - "connection_mode_desc": "RustDesk デスクトップクライアントの接続方法を制御します。可能な場合は直接 P2P(ホールパンチ)、または常にリレー経由。", - "connection_mode_label": "デフォルト接続モード", - "connection_mode_p2p_first": "P2P 優先(推奨)— 直接接続を試み、失敗時はリレーにフォールバック", - "connection_mode_relay_only": "リレーのみ — すべてのセッションをリレーサーバー経由で接続", - "connection_mode_advanced": "詳細オプション", - "connection_mode_fallback_ms": "P2P フォールバックタイムアウト(ミリ秒)", - "connection_mode_same_nat_relay": "両者が同じパブリック IP を共有する場合にリレーを強制(NAT ヘアピン)", - "connection_mode_network_hint": "P2P にはクライアント間で UDP 21116 ポートが到達可能であることが必要です。サーバーでシグナル TCP 21116、リレー TCP 21117、NAT テスト TCP 21115 を開放してください。Webブラウザークライアントは常にリレーを使用します。", - "connection_mode_save": "保存", - "connection_mode_save_restart": "保存してサーバーを再起動", - "connection_mode_saved": "接続モードを保存しました", - "connection_mode_restart_started": "サーバーの再起動を開始しました", - "connection_mode_restart_failed": "サーバーの再起動に失敗しました", - "connection_mode_not_configurable": "このデプロイでは接続モードを変更できません(systemd ユニットまたは docker-compose が見つかりません)", - "connection_mode_compose_error": "docker-compose.yml にサーバー環境セクションが見つかりません", - "connection_mode_source_saved": "保存先", - "connection_mode_source_defaults": "サーバーのデフォルトを使用中(パネルから書き込み不可)", - "connection_mode_runtime": "アクティブサーバー", - "advanced_title": "設定ファイル", - "advanced_desc": "サーバー設定ファイルを直接編集します。変更にはサービスの再起動が必要な場合があります。保存前にバックアップコピーが作成されます。", - "advanced_warning": "これらのファイルには機密情報(API キー、データベースパスワード、セッションシークレット)が含まれています。影響を理解した上でのみ編集してください。構文エラーによりサーバーが起動しなくなる場合があります。", - "advanced_files_label": "ファイル", - "advanced_select_file": "リストからファイルを選択して内容を表示または編集します。", - "advanced_reload": "再読み込み", - "advanced_save": "ファイルを保存", - "advanced_apply_restart": "適用(サービスを再起動)", - "advanced_saved": "設定ファイルを保存しました", - "advanced_restart_after_save": "設定を保存しました。変更を有効にするために影響するサービスを今すぐ再起動しますか?", - "advanced_restart_confirm": "関連する BetterDesk サービスを再起動しますか?アクティブな接続が一時的に中断される場合があります。", - "advanced_restart_console_confirm": "Webコンソールサービスを再起動しますか?ブラウザーセッションが一時的に切断され、コンソールが復帰するとページが再読み込みされます。", - "advanced_restart_started": "サービスの再起動を開始しました", - "advanced_restart_done": "コンソールを再起動しました — ページを再読み込み中…", - "advanced_restart_polling": "コンソールがオンラインに戻るまで待機中…", - "advanced_restart_timeout": "再起動コマンドを送信しましたが、コンソールが時間内に応答しませんでした。systemd/NSSM ログを確認して手動で再読み込みしてください。", - "advanced_restart_failed": "サービスの再起動に失敗しました(権限不足またはサービス未インストール)", - "advanced_save_confirm": "このファイルへの変更を保存しますか?以前のバージョンのバックアップが作成されます。", - "advanced_unsaved_confirm": "未保存の変更があります。破棄しますか?", - "advanced_no_files": "このシステムで利用可能な設定ファイルはありません。", - "advanced_readonly": "読み取り専用", - "advanced_missing": "不足", - "advanced_new_file": "新しいファイル(保存するまで作成されません)", - "advanced_new_file_hint": "新しいファイル — コンテンツを追加して保存", - "advanced_backup_created": "バックアップを作成しました", - "advanced_restart_console": ".env の変更を有効にするには、Webコンソールサービスを再起動してください(例: systemctl restart betterdesk-console)。", - "advanced_restart_goserver": "ブロックリストの変更を読み込むには BetterDesk Go サーバーを再起動してください。", - "advanced_restart_systemd": "systemd ユニットを編集した後、実行: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "変更を有効にするには影響するサービスを再起動してください。", - "advanced_error_unknown": "不明な設定ファイル", - "advanced_error_not_found": "ファイルが存在しません", - "advanced_error_not_file": "パスは通常ファイルではありません", - "advanced_error_too_large": "ファイルが編集可能な最大サイズ(512 KB)を超えています", - "advanced_error_binary": "バイナリファイルはパネルで編集できません", - "advanced_error_invalid": "ファイルの内容が無効です", - "advanced_error_not_writable": "コンソールプロセスはこのファイルに書き込めません", - "advanced_file_console-env": "コンソール環境(.env)", - "advanced_file_console-env-local": "コンソールオーバーライド(.env.local)", - "advanced_file_go-blocklist": "Go サーバーブロックリスト(blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console(サービスユニット)", - "advanced_file_systemd-server": "systemd: betterdesk-server(サービスユニット)", - "advanced_file_console-session-secret": "コンソールセッションシークレット(.session_secret)", - "advanced_file_go-audit-log": "Go サーバー監査ログ(audit.jsonl)", - "advanced_file_build-env": "エージェントビルド環境(/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 設定)", - "advanced_file_docker-compose": "Docker: docker-compose.yml(オーケストレーション)", - "advanced_restart_none": "このファイルにはサービスの再起動は不要です。", - "enrollment_title": "デバイス登録(RustDesk)", - "enrollment_desc": "新しい RustDesk クライアントの登録方法と、オペレーターが登録リクエストページで承認する方法を制御します。", - "enrollment_require_approval": "オペレーターの承認が必要(マネージドモード)", - "enrollment_require_approval_hint": "有効にすると、未知のクライアントはオペレーターが「登録リクエスト」で承認するまでキューに入れられます。", - "enrollment_rich_approve": "完全な承認フォーム(名前、フォルダー、グループ、タグ)", - "enrollment_rich_approve_hint": "登録または LAN 登録リクエストを承認する際に詳細ダイアログを表示します。", - "enrollment_tag_picker": "既存のデバイスタグからタグを選択", - "enrollment_tag_picker_hint": "オペレーターがデバイスページで使用されるタグリストから選択できます(手動入力のみに限定されません)。", - "enrollment_open_requests": "登録リクエストを開く", - "enrollment_pending_count": "{count} 件の保留中の登録リクエスト" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "ログインに失敗しました", - "action_logout": "Logout", - "action_password_change": "パスワードが変更されました", - "action_2fa_enable": "2FA 有効", - "action_2fa_disable": "2FA 無効", - "action_user_create": "ユーザーが作成しました", - "action_user_update": "ユーザーが更新されました", - "action_user_delete": "ユーザーが削除されました", - "action_settings_update": "設定が更新されました", - "action_device_ban": "禁止されたデバイス", - "action_device_unban": "デバイスの禁止が解除されました", - "action_device_delete": "デバイスが削除されました" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "構成オプション", - "server_address": "サーバーアドレス", - "server_address_hint": "サーバーのドメインまたはIPアドレス", - "custom_port": "Custom Port", - "port_hint": "デフォルトでは空のままにしておきます (21116)", - "relay_server": "中継サーバー", - "relay_placeholder": "空の場合はIDサーバーと同じ", - "relay_hint": "オプション: 別のリレーサーバーアドレス", - "include_key": "構成に公開キーを含める", - "generate": "構成の生成", - "output": "設定出力", - "usage_title": "接続の詳細", - "generated": "生成された構成", - "server_required": "サーバーアドレスは必須です", - "nothing_to_copy": "最初に構成を生成する", - "bundles_title": "エージェントバンドル", - "new_bundle": "新しいバンドル", - "editor_title": "バンドルエディター", - "empty_state": "左側でバンドルを選択するか、新しいバンドルを作成して開始します。", - "loading": "読み込み中…", - "no_bundles": "まだバンドルはありません。最初のものを作成します。", - "bundle_name": "バンドル名", - "bundle_name_hint": "内部ラベルのみ - エンドユーザーには表示されません。", - "short_link": "短いダウンロードリンク", - "short_link_hint": "公開 URL (/d/…) で使用されます。小文字、数字、ハイフンのみ(2〜32 文字)。バンドル名から自動入力 — 共有しやすくするため短くできます(例: acme)。", - "branding_section": "ブランディング", - "company_name": "会社名・ブランド名", - "short_text": "簡単な説明", - "contact_email": "連絡先メールアドレス", - "contact_phone": "連絡先電話番号", - "contact_url": "お問い合わせウェブサイト", - "logo": "ロゴ", - "logo_hint": "PNG、JPEG、SVG、または WebP。最大256KB。", - "logo_clear": "ロゴを削除する", - "primary_color": "原色", - "accent_color": "ヘッダーの色", - "default_lang": "デフォルトの言語", - "allow_unattended": "無人アクセスを許可する", - "allow_unattended_hint": "有効にすると、エージェントはオペレーターアクセス用の永続的なパスワードを表示します。", - "save": "バンドルの保存", - "revoke": "取り消し", - "unrevoke": "再度有効にする", - "revoked": "取り消されました", - "preview_title": "ライブプレビュー", - "preview_hint": "エンドユーザー エージェント ウィンドウのおおよその外観。", - "preview_default_name": "BetterDeskのサポート", - "preview_status_ready": "準備完了", - "preview_id": "あなたのID", - "preview_password": "パスワード", - "preview_chat": "サポートとチャットする", - "preview_settings": "設定 (管理者のみ)", - "preview_quit": "終了 (管理者のみ)", - "download_link_title": "ダウンロードリンク", - "download_link_hint": "このリンクをエンド ユーザーと共有します。ブランドのダウンロード ページが表示されます。 短いリンクを変更しても、古い hex リンクは引き続き利用できます。", - "open_portal": "開く", - "created": "バンドルが作成されました", - "saved": "バンドルが保存されました", - "deleted": "バンドルが削除されました", - "revoked_ok": "バンドルが取り消されました", - "unrevoked_ok": "バンドルが再び有効になりました", - "link_copied": "リンクがクリップボードにコピーされました", - "copy_failed": "自動的にコピーできませんでした - 手動でコピーしてください", - "unsaved_confirm": "保存されていない変更を破棄しますか?", - "confirm_revoke": "このバ��ドルを取り消しますか?ダウンロード リンクは機能しなくなります。", - "confirm_unrevoke": "このバンドルを再度有効にしますか?", - "confirm_delete": "このバンドルを完全に削除しますか?これを元に戻すことはできません。", - "errors": { - "validation_failed": "検証に失敗しました", - "name_required": "バンドル名は必須です", - "company_name_required": "会社名は必須です", - "logo_invalid": "ロゴは有効な画像ファイルである必要があります", - "logo_too_large": "ロゴは 256 KB 以下である必要があります", - "logo_read_failed": "ロゴファイルの読み込みに失敗しました", - "primary_color_invalid": "原色は 16 進数値でなければなりません (例: #2563eb)", - "accent_color_invalid": "ヘッダーの色は 16 進値である必要があります (例: #1e293b)", - "contact_url_invalid": "連絡先 Web サイトは有効な URL である必要があります", - "server_host_required": "パブリックサーバーアドレスは必須です", - "server_host_invalid": "有効なドメイン名または IPv4 アドレスを入力してください", - "token_failed": "登録トークンを生成できません — サーバーの接続を確認してください", - "rebuild_revoked": "失効したバンドルは再ビルドできません — 先に再有効化してください", - "slug_invalid": "短いリンクには小文字、数字、ハイフンのみ使用できます", - "slug_too_short": "短いリンクは 2 文字以上必要です", - "slug_too_long": "短いリンクは最大 32 文字です", - "slug_taken": "この短いリンクは別のバンドルで既に使用されています" - }, - "legacy_title": "クライアント構成ジェネレーター", - "connection_section": "サーバー接続", - "server_host": "パブリックサーバーアドレス", - "server_host_placeholder": "support.example.com または 203.0.113.10", - "server_host_hint": "エンドユーザーが BetterDesk サーバーに接続するドメイン名またはパブリック IP。ポートはコンソール設定から取得されます。", - "use_https": "HTTPS / WSS を使用(推奨)", - "enrollment_token": "デバイス登録", - "enrollment_token_pending": "デバイスごとに承認後割り当て", - "enrollment_token_set": "デバイスごと — 登録で承認", - "enrollment_token_hint": "各インストールが個別に登録されます。登録パネルで新しいデバイスを承認すると、サーバーがコンピューターごとに一意のアクセスキーを発行します。", - "enrollment_per_device": "デバイスごと — 登録で承認", - "background_color": "ウィンドウ背景色", - "surface_color": "カード背景色", - "text_color": "テキスト色", - "text_muted_color": "ミュートテキスト色", - "status_ready_color": "準備完了インジケーター色", - "header_text_color": "ヘッダーテキスト色", - "builds_title": "クライアントビルド", - "builds_hint": "各プラットフォーム向けにこのサーバーでコンパイルされたインストーラー。ツールチェーンエラーの修正またはエージェントソースの更新後に再ビルドします。", - "builds_loading": "ビルドステータスを読み込み中…", - "builds_empty": "まだビルドがキューにありません — バンドルを保存するか「すべて再ビルド」をクリックしてください。", - "rebuild_all": "すべて再ビルド", - "rebuilding_all": "再ビルドをキュー中…", - "rebuild_queued": "すべてのプラットフォームビルドをキューに追加しました", - "rebuild_confirm": "このバンドルのすべてのプラットフォームインストーラーを再ビルドしますか?既存の準備完了アーティファクトは置き換えられます。", - "build_status_ready": "準備完了", - "build_status_pending": "キュー中", - "build_status_building": "ビルド中", - "build_status_failed": "失敗", - "builds_summary": "{{ready}} 準備完了 · {{pending}} キュー中 · {{building}} ビルド中 · {{failed}} 失敗", - "build_error_hint": "ビルドエラー", - "preview_help": "ヘルプを依頼" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "IDサーバー", - "relay_server": "中継サーバー", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "確認中...", - "label": "Status", - "no_signal": "シグナルなし" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "デスクトップクライアント経由で接続する", - "remote_viewer": "リモートビューア", - "web_remote": "Webリモート", - "details": "Details", - "edit": "編集", - "delete": "削除", - "ban": "Ban", - "unban": "Unban", - "save": "保存", - "cancel": "キャンセル", - "confirm": "確認", - "close": "閉じる", - "clear": "クリア", - "ok": "OK", - "saved": "保存しました", - "back": "戻る", - "create": "作成", - "dismiss": "閉じる", - "view_all": "すべて表示", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}数前", - "minutes_ago": "{count}分前", - "hours_ago": "{count}時間前", - "days_ago": "{count}d 日前", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "ユーザー管理", - "subtitle": "コンソールのユーザーと権限を管理する", - "add_user": "Add User", - "edit_user": "ユーザーの編集", - "username": "ユーザー名", - "username_placeholder": "ユーザー名を入力してください", - "username_hint": "3 ~ 32 文字、文字、数字、アンダースコアのみ", - "password": "パスワード", - "password_placeholder": "パスワードを入力してください", - "password_hint": "大文字と小文字を混合した少なくとも 8 文字、数字、記号", - "password_leave_empty": "最新の状態を維持するには空のままにしておきます", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "作成されました", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "ユーザーの作成", - "edit": "編集", - "reset_password": "パスワードのリセット", - "new_password": "新しいパスワード", - "delete_title": "ユーザーの削除", - "delete_confirm": "ユーザー {username} を削除してもよろしいですか?", - "delete_success": "ユーザーは正常に削除されました", - "user_created": "ユーザーが正常に作成されました", - "user_updated": "ユーザーは正常に更新されました", - "password_reset_success": "パスワードが正常にリセ���トされました", - "empty_title": "ユーザーが見つかりませんでした", - "empty_text": "コンソールアクセスを管理するユーザーを追加する", - "fill_required": "すべての必須フィールドに入力してください", - "invalid_username": "ユーザー名は 3 ~ 32 文字、文字、数字、アンダースコアのみである必要があります", - "username_exists": "ユーザー名はすでに存在します", - "weak_password": "パスワードが弱すぎます", - "password_too_short": "パスワードは8文字以上である必要があります", - "invalid_role": "無効な役割", - "cannot_demote_self": "自分自身を降格させることはできません", - "cannot_delete_self": "自分のアカウントを削除することはできません", - "last_admin": "最後の管理者を削除できません", - "admin_only": "この機能は管理者のみが利用できます", - "password_required": "パスワードが必要です", - "not_found": "ユーザーが見つかりません", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "セキュリティのベストプラクティス", - "tip_strong_passwords": "ユーザーごとに強力で一意のパスワードを使用する", - "tip_unique_accounts": "各人に個別のアカウントを作成する", - "tip_viewer_role": "読み取りアクセスのみが必要なユーザーには閲覧者ロールを使用します", - "tip_operator_role": "ユーザーではなくデバイスを管理する必要があるユーザーにはオペレーターの役割を使用します。", - "tip_audit_logs": "監査ログを定期的に確認して、不審なアクティビティがないか確認する", - "role_pro": "プロ (API のみ)", - "role_super_admin": "Super Admin", - "role_server_admin": "サーバー管理者", - "role_global_admin": "グローバル管理者", - "organizations": "組織", - "user_organizations": "{username} の組織", - "no_organizations": "ユーザーはどの組織にも割り当てられていません", - "org_removed": "組織の割り当てが削除されました", - "server_role_label": "サーバーの役割", - "server_role_hint": "ユーザーがコンソール全体で実行できる内容 (パネルアクセス、サーバー構成、監査など) を決定します。", - "org_membership_section": "組織のメンバーシップ", - "org_membership_hint": "ユーザーは複数の組織に所属できます。組織ロールは、その組織内のアクセス許可のみを制御し、上記のサーバー ロールとは独立しています。", - "column_organizations": "組織", - "no_orgs_short": "—", - "org_count_one": "{count}組織", - "org_count_many": "{count}組織", - "all_orgs_assigned": "ユーザーはすでにすべての組織のメンバーです。", - "user_groups": "ユーザーグループ", - "user_groups_hint": "ユーザー グループを使用して、選択したデバイス グループへのアクセスを許可できます。", - "loading_user_groups": "ユーザーグループをロード中...", - "no_user_groups": "使用可能なユーザー グループがありません", - "create_user_group": "グループの作成", - "edit_user_group": "ユーザーグループの編集", - "delete_user_group": "ユーザーグループの削除", - "delete_user_group_confirm": "ユーザーグループ{name}を削除しますか?メンバーは、このグループを通じて付与されたアクセス権を失います。", - "user_group_created": "ユーザーグループが作成されました", - "user_group_updated": "ユーザーグループが更新されました", - "user_group_deleted": "ユーザーグループが削除されました", - "user_group_not_found": "ユーザーグループが見つかりません", - "group_name": "グループ名", - "group_name_placeholder": "オペレーター", - "group_note": "Note", - "group_note_placeholder": "オプションのメモ", - "group_name_required": "グループ名は必須です", - "group_members_count": "{count} メンバー", - "provider": "プロバイダー", - "provider_local": "ローカル", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "IDプロバイダーによって管理されています", - "provider_managed_hint": "このアカウントは外部 IDプロバイダー(LDAP/AD または SSO)によって管理されています。パスワードとロールはプロバイダーが制御しており、ここでは変更できません。" - }, - "folders": { - "title": "Folders", - "create": "フォルダーの作成", - "edit": "フォルダーの編集", - "delete": "フォルダーの削除", - "name": "Folder Name", - "name_placeholder": "フォルダ名を入力してください", - "name_required": "フォルダ名は必須です", - "name_too_long": "フォルダー名が長すぎます (最大 50 文字)", - "color": "Color", - "icon": "Icon", - "not_found": "フォルダーが見つかりません", - "delete_confirm": "このフォルダを削除してもよろしいですか?デバイスの割り当てが解除されます。", - "delete_success": "フォルダが正常に削除されました", - "created": "フォルダーが正常に作成されました", - "updated": "フォルダーが正常に更新されました", - "no_devices_selected": "デバイスが選択されていません", - "devices_moved": "デバイスは正常に移動されました", - "device_assigned": "フォルダーに割り当てられたデバイス", - "unassigned": "Unassigned", - "all_devices": "すべてのデバイス", - "drag_hint": "デバイスをフォルダにドラッグして整理します", - "move_to": "に移動します", - "toggle_sidebar": "サイドバーの切り替え" - }, + "no_groups": "まだグループがありません", + "manual_groups": "マニュアルグループ", + "dynamic_memberships": "動的メンバーシップ", + "group_allowed_user_groups": "許可されたユーザーグループ", + "group_allowed_user_groups_hint": "選択したユーザー グループのユーザーは、このデバイス グループにアクセスできます。", + "no_user_groups": "ユーザーグループがありません", + "edit_group": "グループの編集", + "delete_group": "グループの削除", + "delete_group_confirm": "デバイスグループ{name}を削除しますか?", + "group_deleted": "デバイスグループが削除されました", + "folder_group_readonly": "フォルダーベースのグループはフォルダーから管理されます。", + "manage_user_groups": "ユーザーグループの管理", + "restore_failed": "デバイスの復元に失敗しました", + "no_signal_tooltip": "クライアントは最近 API に接続しましたが、シグナルサーバー (UDP :21116) に登録されていません。サーバー移行後にクライアントを再起動してください。", + "per_page": "1ページあたり" + }, + "keys": { + "title": "サーバーキー", + "subtitle": "RustDesk クライアントの公開鍵と構成", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "サーバー情報", + "download": "ダウンロードキー", + "show_qr": "Show QR", + "qr_hint": "RustDesk モバイル アプリでこの QR コードをスキャンします", + "no_key": "公開鍵が見つかりません", + "no_key_to_copy": "コピーするキーがありません", + "no_qr": "QRコードは利用できません", + "download_success": "キーファイルがダウンロードされました", + "not_found": "キーが見つかりません", + "api_not_found": "API キーが見つかりません" + }, + "settings": { + "title": "設定", + "subtitle": "コンソールの構成とアカウント設定", + "tab_general": "General", + "tab_server": "サーバー", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "言語", + "change_password": "パスワードの変更", + "password_desc": "アカウントのパスワードを更新する", + "current_password": "現在のパスワード", + "new_password": "新しいパスワード", + "confirm_password": "パスワードの確認", + "save_password": "パスワードを更新", + "password_changed": "パスワードが正常に変更されました", + "fill_all_fields": "すべての項目を入力してください", + "passwords_not_match": "パスワードが一致しません", + "password_requirements": "パスワード要件", + "password_requirements_not_met": "パスワードが要件を満たしていません", + "req_length": "8 文字以上", + "req_uppercase": "英大文字を少なくとも 1 文字含めてください", + "req_lowercase": "英小文字を少なくとも 1 文字含めてください", + "req_number": "数字を少なくとも 1 文字含めてください", + "server_info": "サーバー情報", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "最近のコンソールアクティビティ", + "no_audit_logs": "監査ログが見つかりません", + "backend_title": "サーバーバックエンド", + "backend_desc": "デバイス管理および信号/リレー サービスに使用するサーバー バックエンドを選択します。", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "標準 RustDesk 信号および中継サーバー (hbbs + hbbr)。基本的な HTTP API (エンドポイントが制限されている)。", + "backend_betterdesk_desc": "完全な REST API、JWT 認証、ブロックリスト、タグ、リアルタイム WebSocket イベント、および監査ログを備えた強化された Go ベースのサーバー。", + "backend_feature_signal": "シグナルサーバー(ID登録)", + "backend_feature_relay": "中継サーバー(接続中継)", + "backend_feature_basic_api": "基本的な REST API", + "backend_feature_full_api": "フル REST API (34 個以上のエンドポイント)", + "backend_feature_jwt": "JWT 認証 & TOTP 2FA", + "backend_feature_blocklist": "IP/IDブロックリスト管理", + "backend_feature_tags": "デバイスのタグとグループ化", + "backend_feature_audit": "監査イベントのログ記録", + "backend_feature_websocket": "リアルタイム WebSocket イベント", + "backend_connection": "接続", + "backend_api_url": "API URL", + "backend_test": "テスト接続", + "backend_testing": "テスト中...", + "backend_save": "バックエンドの適用", + "backend_saved": "サーバー バックエンドが正常に変更されました。デバイス データは新しいバックエンドによって管理されるようになります。", + "backend_save_failed": "サーバーバックエンドの切り替えに失敗しました", + "backend_test_success": "接続成功!サーバーに到達可能です。", + "backend_test_failed": "接続に失敗しました。サーバーに到達できません。", + "backend_confirm_switch": "サーバー バックエンドを切り替えてもよろしいですか?これにより、デバイスの管理方法が変わります。", + "backend_unreachable": "切り替えできません: ターゲット サーバーに到達できません。まずサーバーを起動します。", + "invalid_backend": "バックエンドの選択が無効です。 「rustdesk」または「betterdesk」を選択します。", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "二要素認証", + "totp_desc": "TOTP 認証アプリ (Google Authenticator、Microsoft Authenticator、Authy など) を使用してセキュリティ層を追加します。", + "totp_enabled": "2FA 有効", + "totp_enabled_desc": "あなたのアカウントは二要素認証で保護されています。", + "totp_disabled": "2FA が有効になっていません", + "totp_disabled_desc": "アカウントのセキュリティを強化するために 2 要素認証を有効にします。", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "携帯電話に認証アプリをインストールする", + "totp_step2": "以下の QR コードをスキャンしてください", + "totp_step3": "6桁のコードを入力して確認してください", + "totp_manual_key": "Manual key", + "totp_enter_code": "確認コードを入力してください", + "totp_verify_enable": "確認して有効にする", + "totp_enabled_success": "二要素認証が有効になり��した!", + "totp_recovery_warning": "これらのリカバリ コードを安全な場所に保存してください。各コードは 1 回のみ使用できます。認証アプリにアクセスできなくなった場合は、これらのコードを使用してログインできます。", + "totp_done": "Done", + "totp_disable_warning": "2 要素認証を無効にすると、アカウントの安全性が低下します。確認のためにパスワードを入力��てください。", + "totp_disabled_success": "二要素認証が無効になっています。", + "tutorials_title": "チュートリアルとガイド", + "tutorials_desc": "コンソール全体に表示されるガイド付きツアーとヘルプ オーバーレイを制御します", + "tutorials_enabled": "チュートリアルを有効にする", + "tutorials_enabled_hint": "無���にすると、チュートリアルは自動的に開始されず、ヘルプ ボタンが非表示になります。", + "tutorials_reset_hint": "すべてのチュートリアルを未表示としてマークして、再度表示できるようにします", + "tutorials_enabled_toast": "チュートリアルが有効になっています", + "tutorials_disabled_toast": "チュートリアルが無効になっています", + "tutorials_reset_toast": "すべてのチュートリアルがリセットされました", + "tab_auth": "認証", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "LDAP または Active Directory を介して外部認証を構成します。ユーザーはドメイン資格情報を使用してサインインできるようになります。", + "ldap_enabled": "LDAP 認証を有効にする", + "ldap_enabled_hint": "有効にすると、ユーザーは LDAP/AD 資格情報を使用してサインインできます。ローカル アカウントは引き続きフォールバックとして機能します。", + "ldap_connection": "サーバー接続", + "ldap_host": "ホスト", + "ldap_port": "港", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "TLS 検証をスキップ", + "ldap_timeout": "接続タイムアウト (秒)", + "ldap_timeout_hint": "LDAP サーバーの応答を待つ秒数", + "ldap_bind_mode": "バインドモード", + "ldap_direct_bind": "ダイレクトバインド", + "ldap_direct_bind_hint": "検索にサービス アカウントを使用するのではなく、DN テンプレートに直接バインドします。", + "ldap_bind_dn": "バインドDN (サービスアカウント)", + "ldap_bind_dn_hint": "ユーザーの検索に使用される読み取り専用サービス アカウントの識別名。", + "ldap_bind_password": "バインドパスワード", + "ldap_base_dn": "ベースDN", + "ldap_base_dn_hint": "ユーザーを見つけるための検索ベース。例: dc=例,dc=com", + "ldap_user_filter": "ユーザーフィルター", + "ldap_user_filter_hint": "ユーザーを検索するための LDAP フィルター。 {{username}} をプレースホルダーとして使用します。デフォルト: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "ダイレクトバインドDNテンプレート", + "ldap_direct_bind_dn_hint": "ダイレクトバインド用のDNテンプレート。プレースホルダーとして {{username}} を使用し��す。例: uid={{username}}、ou=ユーザー、dc=example、dc=com", + "ldap_user_attrs": "ユーザー属性", + "ldap_attr_id": "ユーザー名の属性", + "ldap_attr_email": "電子メールの属性", + "ldap_attr_name": "表示名の属性", + "ldap_group_mapping": "グループ → ロールマッピング", + "ldap_group_base_dn": "グループベースDN", + "ldap_group_base_dn_hint": "メインのベース DN を使用するには、空のままにしておきます。", + "ldap_group_filter": "グループフィルター", + "ldap_group_attr_name": "グループ名属性", + "ldap_default_role": "デフォルトの役割", + "ldap_default_role_hint": "LDAP グループがどのマッピングにも一致しないユーザーに割り当てられたロール", + "ldap_role_viewer": "ビューア", + "ldap_role_operator": "オペレーター", + "ldap_role_admin": "管理者", + "ldap_group_role_map": "グループ → 役割マップ", + "ldap_group_role_map_hint": "LDAP グループを BetterDesk ロールにマップします。形式: GroupDN=ロールを | で区切ります。 (パ���プ)。例: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "テスト接続", + "ldap_testing": "テスト中...", + "ldap_test_success": "接続成功! LDAP サーバーに到達可能であり、バインド資格情報が有効です。", + "ldap_test_failed": "接続に失敗しました", + "ldap_save": "LDAP 構成の保存", + "ldap_saved": "LDAP 構成が正常に保存されました", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "OpenID Connect プロバイダー (Azure AD、Okta、Google、Keycloak など) を介してシングル サインオンを構成します。", + "oidc_enabled": "OIDC 認証を有効にする", + "oidc_enabled_hint": "ユーザーが外部 ID プロバイダーを使用してサインインできるようにする", + "oidc_provider": "アイデンティティプロバイダー", + "oidc_display_name": "ボタンの表示名", + "oidc_display_name_hint": "ログイン ボタンに表示されるテキスト (例: Azure AD、Okta)", + "oidc_issuer_url": "発行者 URL", + "oidc_issuer_url_hint": "OpenID Connect 発行者 URL (検出は自動的に行われます)", + "oidc_client_id": "クライアントID", + "oidc_client_secret": "クライアントシークレット", + "oidc_redirect_url": "URL リダイレクト (コールバック)", + "oidc_redirect_url_hint": "IdP で構成されている内容と正確に一致する必要があります。通常: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "スコープ", + "oidc_use_pkce": "PKCE を使用します (推奨)", + "oidc_auto_discovery": "自動検出", + "oidc_allow_signup": "ユーザーの自動作成", + "oidc_manual_endpoints": "手動エンドポイント URL", + "oidc_authorization_url": "認可エンドポイント", + "oidc_token_url": "トークンエンドポイント", + "oidc_userinfo_url": "ユーザー情報エンドポイント", + "oidc_claim_mapping": "クレームマッピング", + "oidc_claim_username": "ユーザー名の要求", + "oidc_claim_email": "電子メールによる請求", + "oidc_claim_name": "表示名の申し立て", + "oidc_claim_groups": "グループの主張", + "oidc_role_mapping": "役割のマッピング", + "oidc_default_role": "デフォルトの役割", + "oidc_group_role_map": "グループ → ロールマッピング", + "oidc_group_role_map_hint": "1 行に 1 つのマッピング: group_name=role (例: admins=admin、operators=operator)", + "oidc_test_discovery": "テストディスカバリー", + "oidc_testing": "テスト中...", + "oidc_test_success": "発見成功!エンドポイントが解決されました。", + "oidc_test_failed": "検出に失敗しました", + "oidc_issuer_required": "ディスカバリーをテストするには発行者 URL が必要です", + "oidc_save": "OIDC 構成の保存", + "oidc_saved": "OIDC 構成が正常に保存されました", + "tab_advanced": "詳細設定", + "connection_mode_title": "接続戦略", + "connection_mode_desc": "RustDesk デスクトップクライアントの接続方法を制御します。可能な場合は直接 P2P(ホールパンチ)、または常にリレー経由。", + "connection_mode_label": "デフォルト接続モード", + "connection_mode_p2p_first": "P2P 優先(推奨)— 直接接続を試み、失敗時はリレーにフォールバック", + "connection_mode_relay_only": "リレーのみ — すべてのセッションをリレーサーバー経由で接続", + "connection_mode_advanced": "詳細オプション", + "connection_mode_fallback_ms": "P2P フォールバックタイムアウト(ミリ秒)", + "connection_mode_same_nat_relay": "両者が同じパブリック IP を共有する場合にリレーを強制(NAT ヘアピン)", + "connection_mode_network_hint": "P2P にはクライアント間で UDP 21116 ポートが到達可能であることが必要です。サーバーでシグナル TCP 21116、リレー TCP 21117、NAT テスト TCP 21115 を開放してください。Webブラウザークライアントは常にリレーを使用します。", + "connection_mode_save": "保存", + "connection_mode_save_restart": "保存してサーバーを再起動", + "connection_mode_saved": "接続モードを保存しました", + "connection_mode_restart_started": "サーバーの再起動を開始しました", + "connection_mode_restart_failed": "サーバーの再起動に失敗しました", + "connection_mode_not_configurable": "このデプロイでは接続モードを変更できません(systemd ユニットまたは docker-compose が見つかりません)", + "connection_mode_compose_error": "docker-compose.yml にサーバー環境セクションが見つかりません", + "connection_mode_source_saved": "保存先", + "connection_mode_source_defaults": "サーバーのデフォルトを使用中(パネルから書き込み不可)", + "connection_mode_runtime": "アクティブサーバー", + "advanced_title": "設定ファイル", + "advanced_desc": "サーバー設定ファイルを直接編集します。変更にはサービスの再起動が必要な場合があります。保存前にバックアップコピーが作成されます。", + "advanced_warning": "これらのファイルには機密情報(API キー、データベースパスワード、セッションシークレット)が含まれています。影響を理解した上でのみ編集してください。構文エラーによりサーバーが起動しなくなる場合があります。", + "advanced_files_label": "ファイル", + "advanced_select_file": "リストからファイルを選択して内容を表示または編集します。", + "advanced_reload": "再読み込み", + "advanced_save": "ファイルを保存", + "advanced_apply_restart": "適用(サービスを再起動)", + "advanced_saved": "設定ファイルを保存しました", + "advanced_restart_after_save": "設定を保存しました。変更を有効にするために影響するサービスを今すぐ再起動しますか?", + "advanced_restart_confirm": "関連する BetterDesk サービスを再起動しますか?アクティブな接続が一時的に中断される場合があります。", + "advanced_restart_console_confirm": "Webコンソールサービスを再起動しますか?ブラウザーセッションが一時的に切断され、コンソールが復帰するとページが再読み込みされます。", + "advanced_restart_started": "サービスの再起動を開始しました", + "advanced_restart_done": "コンソールを再起動しました — ページを再読み込み中…", + "advanced_restart_polling": "コンソールがオンラインに戻るまで待機中…", + "advanced_restart_timeout": "再起動コマンドを送信しましたが、コンソールが時間内に応答しませんでした。systemd/NSSM ログを確認して手動で再読み込みしてください。", + "advanced_restart_failed": "サービスの再起動に失敗しました(権限不足またはサービス未インストール)", + "advanced_save_confirm": "このファイルへの変更を保存しますか?以前のバージョンのバックアップが作成されます。", + "advanced_unsaved_confirm": "未保存の変更があります。破棄しますか?", + "advanced_no_files": "このシステムで利用可能な設定ファイルはありません。", + "advanced_readonly": "読み取り専用", + "advanced_missing": "不足", + "advanced_new_file": "新しいファイル(保存するまで作成されません)", + "advanced_new_file_hint": "新しいファイル — コンテンツを追加して保存", + "advanced_backup_created": "バックアップを作成しました", + "advanced_restart_console": ".env の変更を有効にするには、Webコンソールサービスを再起動してください(例: systemctl restart betterdesk-console)。", + "advanced_restart_goserver": "ブロックリストの変更を読み込むには BetterDesk Go サーバーを再起動してください。", + "advanced_restart_systemd": "systemd ユニットを編集した後、実行: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "変更を有効にするには影響するサービスを再起動してください。", + "advanced_error_unknown": "不明な設定ファイル", + "advanced_error_not_found": "ファイルが存在しません", + "advanced_error_not_file": "パスは通常ファイルではありません", + "advanced_error_too_large": "ファイルが編集可能な最大サイズ(512 KB)を超えています", + "advanced_error_binary": "バイナリファイルはパネルで編集できません", + "advanced_error_invalid": "ファイルの内容が無効です", + "advanced_error_not_writable": "コンソールプロセスはこのファイルに書き込めません", + "advanced_file_console-env": "コンソール環境(.env)", + "advanced_file_console-env-local": "コンソールオーバーライド(.env.local)", + "advanced_file_go-blocklist": "Go サーバーブロックリスト(blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console(サービスユニット)", + "advanced_file_systemd-server": "systemd: betterdesk-server(サービスユニット)", + "advanced_file_console-session-secret": "コンソールセッションシークレット(.session_secret)", + "advanced_file_go-audit-log": "Go サーバー監査ログ(audit.jsonl)", + "advanced_file_build-env": "エージェントビルド環境(/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 設定)", + "advanced_file_docker-compose": "Docker: docker-compose.yml(オーケストレーション)", + "advanced_restart_none": "このファイルにはサービスの再起動は不要です。", + "enrollment_title": "デバイス登録(RustDesk)", + "enrollment_desc": "新しい RustDesk クライアントの登録方法と、オペレーターが登録リクエストページで承認する方法を制御します。", + "enrollment_require_approval": "オペレーターの承認が必要(マネージドモード)", + "enrollment_require_approval_hint": "有効にすると、未知のクライアントはオペレーターが「登録リクエスト」で承認するまでキューに入れられます。", + "enrollment_rich_approve": "完全な承認フォーム(名前、フォルダー、グループ、タグ)", + "enrollment_rich_approve_hint": "登録または LAN 登録リクエストを承認する際に詳細ダイアログを表示します。", + "enrollment_tag_picker": "既存のデバイスタグからタグを選択", + "enrollment_tag_picker_hint": "オペレーターがデバイスページで使用されるタグリストから選択できます(手動入力のみに限定されません)。", + "enrollment_open_requests": "登録リクエストを開く", + "enrollment_pending_count": "{count} 件の保留中の登録リクエスト" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "ログインに失敗しました", + "action_logout": "Logout", + "action_password_change": "パスワードが変更されました", + "action_2fa_enable": "2FA 有効", + "action_2fa_disable": "2FA 無効", + "action_user_create": "ユーザーが作成しました", + "action_user_update": "ユーザーが更新されました", + "action_user_delete": "ユーザーが削除されました", + "action_settings_update": "設定が更新されました", + "action_device_ban": "禁止されたデバイス", + "action_device_unban": "デバイスの禁止が解除されました", + "action_device_delete": "デバイスが削除されました" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "初期機能 — エージェントバンドルジェネレーターは開発中です。", + "config_options": "構成オプション", + "server_address": "サーバーアドレス", + "server_address_hint": "サーバーのドメインまたはIPアドレス", + "custom_port": "Custom Port", + "port_hint": "デフォルトでは空のままにしておきます (21116)", + "relay_server": "中継サーバー", + "relay_placeholder": "空の場合はIDサーバーと同じ", + "relay_hint": "オプション: 別のリレーサーバーアドレス", + "include_key": "構成に公開キーを含める", + "generate": "構成の生成", + "output": "設定出力", + "usage_title": "接続の詳細", + "generated": "生成された構成", + "server_required": "サーバーアドレスは必須です", + "nothing_to_copy": "最初に構成を生成する", + "bundles_title": "エージェントバンドル", + "new_bundle": "新しいバンドル", + "editor_title": "バンドルエディター", + "empty_state": "左側でバンドルを選択するか、新しいバンドルを作成して開始します。", + "loading": "読み込み中…", + "no_bundles": "まだバンドルはありません。最初のものを作成します。", + "bundle_name": "バンドル名", + "bundle_name_hint": "内部ラベルのみ - エンドユーザーには表示されません。", + "short_link": "短いダウンロードリンク", + "short_link_hint": "公開 URL (/d/…) で使用されます。小文字、数字、ハイフンのみ(2〜32 文字)。バンドル名から自動入力 — 共有しやすくするため短くできます(例: acme)。", + "branding_section": "ブランディング", + "company_name": "会社名・ブランド名", + "short_text": "簡単な説明", + "contact_email": "連絡先メールアドレス", + "contact_phone": "連絡先電話番号", + "contact_url": "お問い合わせウェブサイト", + "logo": "ロゴ", + "logo_hint": "PNG、JPEG、SVG、または WebP。最大256KB。", + "logo_clear": "ロゴを削除する", + "primary_color": "原色", + "accent_color": "ヘッダーの色", + "default_lang": "デフォルトの言語", + "allow_unattended": "無人アクセスを許可する", + "allow_unattended_hint": "有効にすると、エージェントはオペレーターアクセス用の永続的なパスワードを表示します。", + "save": "バンドルの保存", + "revoke": "取り消し", + "unrevoke": "再度有効にする", + "revoked": "取り消されました", + "preview_title": "ライブプレビュー", + "preview_hint": "エンドユーザー エージェント ウィンドウのおおよその外観。", + "preview_default_name": "BetterDeskのサポート", + "preview_status_ready": "準備完了", + "preview_id": "あなたのID", + "preview_password": "パスワード", + "preview_chat": "サポートとチャットする", + "preview_settings": "設定 (管理者のみ)", + "preview_quit": "終了 (管理者のみ)", + "download_link_title": "ダウンロードリンク", + "download_link_hint": "このリンクをエンド ユーザーと共有します。ブランドのダウンロード ページが表示されます。 短いリンクを変更しても、古い hex リンクは引き続き利用できます。", + "open_portal": "開く", + "created": "バンドルが作成されました", + "saved": "バンドルが保存されました", + "deleted": "バンドルが削除されました", + "revoked_ok": "バンドルが取り消されました", + "unrevoked_ok": "バンドルが再び有効になりました", + "link_copied": "リンクがクリップボードにコピーされました", + "copy_failed": "自動的にコピーできませんでした - 手動でコピーしてください", + "unsaved_confirm": "保存されていない変更を破棄しますか?", + "confirm_revoke": "このバ��ドルを取り消しますか?ダウンロード リンクは機能しなくなります。", + "confirm_unrevoke": "このバンドルを再度有効にしますか?", + "confirm_delete": "このバンドルを完全に削除しますか?これを元に戻すことはできません。", "errors": { - "forbidden_title": "アクセスが拒否されました", - "forbidden_message": "このリソースにアクセスする権限がありません。", - "not_found_title": "ページが見つかりません", - "not_found_message": "お探しのページは存在しないか、移動されました。", - "server_error_title": "サーバーエラー", - "server_error_message": "何か問題が発生しました。後でもう一度試してください。", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "デバイスのロードに失敗しました", - "load_key_failed": "キーのロードに失敗しました", - "load_qr_failed": "QRの読み込みに失敗しました", - "load_audit_failed": "監査ログのロードに失敗しました", - "load_users_failed": "ユーザーのロードに失敗しました", - "load_folders_failed": "フォルダーの読み込みに失敗しました", - "download_failed": "ダウンロードに失敗しました", - "logout_failed": "ログアウトに失敗しました", - "password_change_failed": "パスワードの変更に失敗しました", - "language_change_failed": "言語の変更に失敗しました", - "ban_failed": "デバイスの禁止に失敗しました", - "unban_failed": "デバイスの禁止を解除できませんでした", - "delete_failed": "デバイスの削除に失敗しました", - "change_id_failed": "デバイスIDの変更に失敗しました", - "bulk_delete_failed": "デバイスの削除に失敗しました", - "sync_failed": "ステータスの同期に失敗しました", - "error": "エラー", - "not_found": "見つかりません", - "server_error": "サーバーエラー", - "load_device_failed": "デバイスの読み込みに失敗しました", - "load_orgs_failed": "組織のロードに失敗しました" + "validation_failed": "検証に失敗しました", + "name_required": "バンドル名は必須です", + "company_name_required": "会社名は必須です", + "logo_invalid": "ロゴは有効な画像ファイルである必要があります", + "logo_too_large": "ロゴは 256 KB 以下である必要があります", + "logo_read_failed": "ロゴファイルの読み込みに失敗しました", + "primary_color_invalid": "原色は 16 進数値でなければなりません (例: #2563eb)", + "accent_color_invalid": "ヘッダーの色は 16 進値である必要があります (例: #1e293b)", + "contact_url_invalid": "連絡先 Web サイトは有効な URL である必要があります", + "server_host_required": "パブリックサーバーアドレスは必須です", + "server_host_invalid": "有効なドメイン名または IPv4 アドレスを入力してください", + "token_failed": "登録トークンを生成できません — サーバーの接続を確認してください", + "rebuild_revoked": "失効したバンドルは再ビルドできません — 先に再有効化してください", + "slug_invalid": "短いリンクには小文字、数字、ハイフンのみ使用できます", + "slug_too_short": "短いリンクは 2 文字以上必要です", + "slug_too_long": "短いリンクは最大 32 文字です", + "slug_taken": "この短いリンクは別のバンドルで既に使用されています" }, - "remote": { - "title": "リモートデスクトップ", - "connecting": "接続中...", - "waiting_password": "パスワードを待っています", - "authenticating": "認証中...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "パスワードが必要です", - "enter_password_for": "デバイスのパスワードを入力してください", - "password_placeholder": "デバイスのパスワード", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "デバイスに戻る", - "fullscreen": "Fullscreen", - "toggle_audio": "オーディオの切り替え", - "send_keys": "キーを送信する", - "scale_mode": "Scale Mode", - "scale_fit": "窓に合わせる", - "scale_fill": "Fill Window", - "scale_original": "元のサイズ (1:1)", - "scale_stretch": "ストレッチして埋める", - "actions": "Actions", - "lock_screen": "ロック画面", - "restart_remote": "リモートデバイスを再起動します", - "refresh_screen": "画面を更新", - "clipboard_paste": "クリップボードから貼り付け", - "block_input": "Block Input", - "display_settings": "表示設定", - "image_quality": "画質", - "quality_best": "Best Quality", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "リモートカーソルを表示", - "lock_after_session": "セッション後のロック", - "privacy_mode": "プライバシーモード", - "disable_clipboard": "クリップボードを無効にする", - "chat": "Chat", - "chat_placeholder": "メッセージを入力してください...", - "record": "録画画面", - "view_only": "表示のみ", - "pin_toolbar": "ピンツールバー", - "monitors": "Monitors", - "select_monitor": "モニターの選択", - "quality_speed": "速度 (低品質、60fps)", - "quality_quality": "品質 (最高、30fps)", - "recording_started": "録音開始", - "recording_stopped": "録音停止", - "download_recording": "録音をダウンロードする", - "e2e_encrypted": "エンドツーエンドの暗号化", - "e2e_key_exchange": "安全なチャネルを確立しています...", - "confirm_restart": "リモート デバイスを再起動してもよろしいですか?", - "webcodecs_not_supported": "お使いのブラウザは WebCodecs API をサポートしていません。 Chrome 94 以降または Edge 94 以降を使用してください。", - "webcodecs_insecure_context": "WebCodecs は HTTP では利用できません。ビデオはソフトウェア フォールバックを使用します。最高のパフォーマンスを得るには、HTTPS を使用してください。", - "webcodecs_fallback_active": "ソフトウェア ビデオ デコーダがアクティブです (パフォーマンスが制限されています)", - "click_to_start": "クリックして開始", - "autoplay_blocked": "ブラウザではビデオとオーディオの再生を開始するためにユーザーの操作が必要です。", - "start_playback": "再生を開始する", - "new_connection": "新規接続", - "device_id_placeholder": "デバイスIDを入力", - "http_warning": "HTTPモード:H.264ソフトウェアデコードに制限 (~15 FPS)。最高のパフォーマンスにはHTTPSを使用してください (WebCodecs, VP9, 60 FPS)。", - "file_transfer": "ファイル転送", - "file_upload": "アップロード", - "file_download": "ダウンロード", - "file_empty": "このフォルダーは空です", - "file_transfers": "転送一覧", - "file_complete": "完了", - "file_error": "転送失敗", - "file_show_hidden": "隠しファイルを表示", - "file_new_folder": "新しいフォルダー", - "file_new_folder_prompt": "フォルダー名を入力:", - "file_parent": "親フォルダー", - "file_root": "ルート", - "file_rename": "名前変更", - "file_rename_prompt": "新しい名前を入力:", - "file_delete_confirm": "このアイテムを削除してもよろしいですか?", - "file_cancelled": "転送がキャンセルされました", - "2fa_required": "2FA 検証が必要です", - "2fa_hint": "認証アプリから 6 桁のコードを入力してください", - "2fa_invalid": "有効な 6 桁のコードを入力してください", - "verify": "Verify", - "use_cdap_fallback": "CDAP ビューアを使用する", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "クリップボードが空です", - "clipboard_denied": "クリップボードへのアクセスが拒否されました。 HTTPS が必要か、許可が与えられていません。", - "file_loading": "読み込み中...", - "file_timeout": "リモートデバイスが応答しませんでした。ファイル転送がサポートされていないか、リモート マシンで無効になっている可能性があります。", - "codec": "ビデオコーデック", - "codec_auto": "自動 (推奨)" + "legacy_title": "クライアント構成ジェネレーター", + "connection_section": "サーバー接続", + "server_host": "パブリックサーバーアドレス", + "server_host_placeholder": "support.example.com または 203.0.113.10", + "server_host_hint": "エンドユーザーが BetterDesk サーバーに接続するドメイン名またはパブリック IP。ポートはコンソール設定から取得されます。", + "use_https": "HTTPS / WSS を使用(推奨)", + "enrollment_token": "デバイス登録", + "enrollment_token_pending": "デバイスごとに承認後割り当て", + "enrollment_token_set": "デバイスごと — 登録で承認", + "enrollment_token_hint": "各インストールが個別に登録されます。登録パネルで新しいデバイスを承認すると、サーバーがコンピューターごとに一意のアクセスキーを発行します。", + "enrollment_per_device": "デバイスごと — 登録で承認", + "background_color": "ウィンドウ背景色", + "surface_color": "カード背景色", + "text_color": "テキスト色", + "text_muted_color": "ミュートテキスト色", + "status_ready_color": "準備完了インジケーター色", + "header_text_color": "ヘッダーテキスト色", + "builds_title": "クライアントビルド", + "builds_hint": "各プラットフォーム向けにこのサーバーでコンパイルされたインストーラー。ツールチェーンエラーの修正またはエージェントソースの更新後に再ビルドします。", + "builds_loading": "ビルドステータスを読み込み中…", + "builds_empty": "まだビルドがキューにありません — バンドルを保存するか「すべて再ビルド」をクリックしてください。", + "rebuild_all": "すべて再ビルド", + "rebuilding_all": "再ビルドをキュー中…", + "rebuild_queued": "すべてのプラットフォームビルドをキューに追加しました", + "rebuild_confirm": "このバンドルのすべてのプラットフォームインストーラーを再ビルドしますか?既存の準備完了アーティファクトは置き換えられます。", + "build_status_ready": "準備完了", + "build_status_pending": "キュー中", + "build_status_building": "ビルド中", + "build_status_failed": "失敗", + "builds_summary": "{{ready}} 準備完了 · {{pending}} キュー中 · {{building}} ビルド中 · {{failed}} 失敗", + "build_error_hint": "ビルドエラー", + "preview_help": "ヘルプを依頼" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "IDサーバー", + "relay_server": "中継サーバー", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "確認中...", + "label": "Status", + "no_signal": "シグナルなし" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "デスクトップクライアント経由で接続する", + "remote_viewer": "リモートビューア", + "web_remote": "Webリモート", + "details": "Details", + "edit": "編集", + "delete": "削除", + "ban": "Ban", + "unban": "Unban", + "save": "保存", + "cancel": "キャンセル", + "confirm": "確認", + "close": "閉じる", + "clear": "クリア", + "ok": "OK", + "saved": "保存しました", + "back": "戻る", + "create": "作成", + "dismiss": "閉じる", + "view_all": "すべて表示", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}数前", + "minutes_ago": "{count}分前", + "hours_ago": "{count}時間前", + "days_ago": "{count}d 日前", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "ユーザー管理", + "subtitle": "コンソールのユーザーと権限を管理する", + "add_user": "Add User", + "edit_user": "ユーザーの編集", + "username": "ユーザー名", + "username_placeholder": "ユーザー名を入力してください", + "username_hint": "3 ~ 32 文字、文字、数字、アンダースコアのみ", + "password": "パスワード", + "password_placeholder": "パスワードを入力してください", + "password_hint": "大文字と小文字を混合した少なくとも 8 文字、数字、記号", + "password_leave_empty": "最新の状態を維持するには空のままにしておきます", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "作成されました", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "ユーザーの作成", + "edit": "編集", + "reset_password": "パスワードのリセット", + "new_password": "新しいパスワード", + "delete_title": "ユーザーの削除", + "delete_confirm": "ユーザー {username} を削除してもよろしいですか?", + "delete_success": "ユーザーは正常に削除されました", + "user_created": "ユーザーが正常に作成されました", + "user_updated": "ユーザーは正常に更新されました", + "password_reset_success": "パスワードが正常にリセ���トされました", + "empty_title": "ユーザーが見つかりませんでした", + "empty_text": "コンソールアクセスを管理するユーザーを追加する", + "fill_required": "すべての必須フィールドに入力してください", + "invalid_username": "ユーザー名は 3 ~ 32 文字、文字、数字、アンダースコアのみである必要があります", + "username_exists": "ユーザー名はすでに存在します", + "weak_password": "パスワードが弱すぎます", + "password_too_short": "パスワードは8文字以上である必要があります", + "invalid_role": "無効な役割", + "cannot_demote_self": "自分自身を降格させることはできません", + "cannot_delete_self": "自分のアカウントを削除することはできません", + "last_admin": "最後の管理者を削除できません", + "admin_only": "この機能は管理者のみが利用できます", + "password_required": "パスワードが必要です", + "not_found": "ユーザーが見つかりません", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "セキュリティのベストプラクティス", + "tip_strong_passwords": "ユーザーごとに強力で一意のパスワードを使用する", + "tip_unique_accounts": "各人に個別のアカウントを作成する", + "tip_viewer_role": "読み取りアクセスのみが必要なユーザーには閲覧者ロールを使用します", + "tip_operator_role": "ユーザーではなくデバイスを管理する必要があるユーザーにはオペレーターの役割を使用します。", + "tip_audit_logs": "監査ログを定期的に確認して、不審なアクティビティがないか確認する", + "role_pro": "プロ (API のみ)", + "role_super_admin": "Super Admin", + "role_server_admin": "サーバー管理者", + "role_global_admin": "グローバル管理者", + "organizations": "組織", + "user_organizations": "{username} の組織", + "no_organizations": "ユーザーはどの組織にも割り当てられていません", + "org_removed": "組織の割り当てが削除されました", + "server_role_label": "サーバーの役割", + "server_role_hint": "ユーザーがコンソール全体で実行できる内容 (パネルアクセス、サーバー構成、監査など) を決定します。", + "org_membership_section": "組織のメンバーシップ", + "org_membership_hint": "ユーザーは複数の組織に所属できます。組織ロールは、その組織内のアクセス許可のみを制御し、上記のサーバー ロールとは独立しています。", + "column_organizations": "組織", + "no_orgs_short": "—", + "org_count_one": "{count}組織", + "org_count_many": "{count}組織", + "all_orgs_assigned": "ユーザーはすでにすべての組織のメンバーです。", + "user_groups": "ユーザーグループ", + "user_groups_hint": "ユーザー グループを使用して、選択したデバイス グループへのアクセスを許可できます。", + "loading_user_groups": "ユーザーグループをロード中...", + "no_user_groups": "使用可能なユーザー グループがありません", + "create_user_group": "グループの作成", + "edit_user_group": "ユーザーグループの編集", + "delete_user_group": "ユーザーグループの削除", + "delete_user_group_confirm": "ユーザーグループ{name}を削除しますか?メンバーは、このグループを通じて付与されたアクセス権を失います。", + "user_group_created": "ユーザーグループが作成されました", + "user_group_updated": "ユーザーグループが更新されました", + "user_group_deleted": "ユーザーグループが削除されました", + "user_group_not_found": "ユーザーグループが見つかりません", + "group_name": "グループ名", + "group_name_placeholder": "オペレーター", + "group_note": "Note", + "group_note_placeholder": "オプションのメモ", + "group_name_required": "グループ名は必須です", + "group_members_count": "{count} メンバー", + "provider": "プロバイダー", + "provider_local": "ローカル", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "IDプロバイダーによって管理されています", + "provider_managed_hint": "このアカウントは外部 IDプロバイダー(LDAP/AD または SSO)によって管理されています。パスワードとロールはプロバイダーが制御しており、ここでは変更できません。" + }, + "folders": { + "title": "Folders", + "create": "フォルダーの作成", + "edit": "フォルダーの編集", + "delete": "フォルダーの削除", + "name": "Folder Name", + "name_placeholder": "フォルダ名を入力してください", + "name_required": "フォルダ名は必須です", + "name_too_long": "フォルダー名が長すぎます (最大 50 文字)", + "color": "Color", + "icon": "Icon", + "not_found": "フォルダーが見つかりません", + "delete_confirm": "このフォルダを削除してもよろしいですか?デバイスの割り当てが解除されます。", + "delete_success": "フォルダが正常に削除されました", + "created": "フォルダーが正常に作成されました", + "updated": "フォルダーが正常に更新されました", + "no_devices_selected": "デバイスが選択されていません", + "devices_moved": "デバイスは正常に移動されました", + "device_assigned": "フォルダーに割り当てられたデバイス", + "unassigned": "Unassigned", + "all_devices": "すべてのデバイス", + "drag_hint": "デバイスをフォルダにドラッグして整理します", + "move_to": "に移動します", + "toggle_sidebar": "サイドバーの切り替え" + }, + "errors": { + "forbidden_title": "アクセスが拒否されました", + "forbidden_message": "このリソースにアクセスする権限がありません。", + "not_found_title": "ページが見つかりません", + "not_found_message": "お探しのページは存在しないか、移動されました。", + "server_error_title": "サーバーエラー", + "server_error_message": "何か問題が発生しました。後でもう一度試してください。", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "デバイスのロードに失敗しました", + "load_key_failed": "キーのロードに失敗しました", + "load_qr_failed": "QRの読み込みに失敗しました", + "load_audit_failed": "監査ログのロードに失敗しました", + "load_users_failed": "ユーザーのロードに失敗しました", + "load_folders_failed": "フォルダーの読み込みに失敗しました", + "download_failed": "ダウンロードに失敗しました", + "logout_failed": "ログアウトに失敗しました", + "password_change_failed": "パスワードの変更に失敗しました", + "language_change_failed": "言語の変更に失敗しました", + "ban_failed": "デバイスの禁止に失敗しました", + "unban_failed": "デバイスの禁止を解除できませんでした", + "delete_failed": "デバイスの削除に失敗しました", + "change_id_failed": "デバイスIDの変更に失敗しました", + "bulk_delete_failed": "デバイスの削除に失敗しました", + "sync_failed": "ステータスの同期に失敗しました", + "error": "エラー", + "not_found": "見つかりません", + "server_error": "サーバーエラー", + "load_device_failed": "デバイスの読み込みに失敗しました", + "load_orgs_failed": "組織のロードに失敗しました" + }, + "remote": { + "title": "リモートデスクトップ", + "connecting": "接続中...", + "waiting_password": "パスワードを待っています", + "authenticating": "認証中...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "パスワードが必要です", + "enter_password_for": "デバイスのパスワードを入力してください", + "password_placeholder": "デバイスのパスワード", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "デバイスに戻る", + "fullscreen": "Fullscreen", + "toggle_audio": "オーディオの切り替え", + "send_keys": "キーを送信する", + "scale_mode": "Scale Mode", + "scale_fit": "窓に合わせる", + "scale_fill": "Fill Window", + "scale_original": "元のサイズ (1:1)", + "scale_stretch": "ストレッチして埋める", + "actions": "Actions", + "lock_screen": "ロック画面", + "restart_remote": "リモートデバイスを再起動します", + "refresh_screen": "画面を更新", + "clipboard_paste": "クリップボードから貼り付け", + "block_input": "Block Input", + "display_settings": "表示設定", + "image_quality": "画質", + "quality_best": "Best Quality", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "リモートカーソルを表示", + "lock_after_session": "セッション後のロック", + "privacy_mode": "プライバシーモード", + "disable_clipboard": "クリップボードを無効にする", + "chat": "Chat", + "chat_placeholder": "メッセージを入力してください...", + "record": "録画画面", + "view_only": "表示のみ", + "pin_toolbar": "ピンツールバー", + "monitors": "Monitors", + "select_monitor": "モニターの選択", + "quality_speed": "速度 (低品質、60fps)", + "quality_quality": "品質 (最高、30fps)", + "recording_started": "録音開始", + "recording_stopped": "録音停止", + "download_recording": "録音をダウンロードする", + "e2e_encrypted": "エンドツーエンドの暗号化", + "e2e_key_exchange": "安全なチャネルを確立しています...", + "confirm_restart": "リモート デバイスを再起動してもよろしいですか?", + "webcodecs_not_supported": "お使いのブラウザは WebCodecs API をサポートしていません。 Chrome 94 以降または Edge 94 以降を使用してください。", + "webcodecs_insecure_context": "WebCodecs は HTTP では利用できません。ビデオはソフトウェア フォールバックを使用します。最高のパフォーマンスを得るには、HTTPS を使用してください。", + "webcodecs_fallback_active": "ソフトウェア ビデオ デコーダがアクティブです (パフォーマンスが制限されています)", + "click_to_start": "クリックして開始", + "autoplay_blocked": "ブラウザではビデオとオーディオの再生を開始するためにユーザーの操作が必要です。", + "start_playback": "再生を開始する", + "new_connection": "新規接続", + "device_id_placeholder": "デバイスIDを入力", + "http_warning": "HTTPモード:H.264ソフトウェアデコードに制限 (~15 FPS)。最高のパフォーマンスにはHTTPSを使用してください (WebCodecs, VP9, 60 FPS)。", + "file_transfer": "ファイル転送", + "file_upload": "アップロード", + "file_download": "ダウンロード", + "file_empty": "このフォルダーは空です", + "file_transfers": "転送一覧", + "file_complete": "完了", + "file_error": "転送失敗", + "file_show_hidden": "隠しファイルを表示", + "file_new_folder": "新しいフォルダー", + "file_new_folder_prompt": "フォルダー名を入力:", + "file_parent": "親フォルダー", + "file_root": "ルート", + "file_rename": "名前変更", + "file_rename_prompt": "新しい名前を入力:", + "file_delete_confirm": "このアイテムを削除してもよろしいですか?", + "file_cancelled": "転送がキャンセルされました", + "2fa_required": "2FA 検証が必要です", + "2fa_hint": "認証アプリから 6 桁のコードを入力してください", + "2fa_invalid": "有効な 6 桁のコードを入力してください", + "verify": "Verify", + "use_cdap_fallback": "CDAP ビューアを使用する", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "クリップボードが空です", + "clipboard_denied": "クリップボードへのアクセスが拒否されました。 HTTPS が必要か、許可が与えられていません。", + "file_loading": "読み込み中...", + "file_timeout": "リモートデバイスが応答しませんでした。ファイル転送がサポートされていないか、リモート マシンで無効になっている可能性があります。", + "codec": "ビデオコーデック", + "codec_auto": "自動 (推奨)" + }, + "branding": { + "identity_title": "ブランドアイデンティティ", + "identity_desc": "コンソール全体に表示されるアプリケーション名と説明をカスタマイズする", + "app_name": "アプリケーション名", + "app_description": "アプリケーションの説明", + "logo_title": "Logo", + "logo_desc": "サイドバーとログインページでのロゴの表示方法を選択します", + "logo_type_icon": "素材アイコン", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "マテリアル アイコンの名前を入力します (DNS、クラウド、セキュリティなど)�� fonts.google.com/icons を参照してください。", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "SVG マークアップをここに貼り付けます。パスとスタイルを含む完全な 要素をサポートします。", + "logo_image_upload": "画像をアップロードする", + "logo_image_choose": "画像ファイルを選択してください", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "無効なファイルタイプです。 PNG、JPG、GIF、WebP、または SVG を使用します。", + "preview": "Preview", + "colors_title": "カラースキーム", + "colors_desc": "��ラーパレットをカスタマイズします。デフォルトを使用する場合は空のままにしてください。", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "アクセントカラー", + "colors_borders": "Borders", + "import_export_title": "インポート/エクスポート", + "import_export_desc": "テーマを JSON ファイルとして保存するか、別のインスタンスからテーマをインポートします", + "export_theme": "テーマのエクスポート", + "import_theme": "テーマのインポート", + "reset_defaults": "デフォルトにリセット", + "save_branding": "ブランディングの保存", + "saved": "ブランド設定が正常に保存されました。再読み込み中...", + "exported": "テーマがエクスポートされました", + "imported": "テーマは正常にインポートされました。再読み込み中...", + "import_error": "テーマのインポートに失敗しました。無効なファイル形式です。", + "reset_confirm": "ブランドをデフォルトにリセットしてもよろしいですか?これを元に戻すことはできません。", + "reset_success": "ブランドがデフォルトにリセットされました。再読み込み中...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "ブランドロゴとして表示される主なテキスト", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "ロゴの下の二次テキスト (例: 製品名やキャッチフレーズ)", + "logo_upload_success": "ロゴが正常にアップロードされました。", + "typography_title": "Typography", + "typography_desc": "見出しと本文のフォントを選択します。フォントはセルフホスティングのためにサーバーにダウンロードされます。", + "font_heading": "見出しフォント", + "font_heading_hint": "見出し(H1~H6)とテキストロゴに使用されます。", + "font_body": "Body Font", + "font_body_hint": "本文テキストと UI 要素に使用されます", + "font_search_placeholder": "フォントを検索...", + "font_system_default": "システムのデフォルト", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "サーバーにダウンロードされたフォント", + "powered_by": "Powered by", + "background_title": "背景と外観", + "background_desc": "コンソールの壁紙、グラデーション、または単色背景を設定します。カードはその上に表示されます。", + "bg_type_none": "なし", + "bg_type_color": "単色", + "bg_type_gradient": "グラデーション", + "bg_type_image": "画像", + "bg_color": "背景色", + "bg_gradient": "CSS グラデーション", + "bg_gradient_hint": "有効な CSS グラデーション(例: linear-gradient(135deg, #1e293b, #0f172a))", + "bg_image_upload": "背景画像をアップロード", + "bg_image_choose": "画像ファイルを選択", + "bg_image_hint": "PNG、JPG、WebP または GIF。最大 8 MB。サーバーに保存されます。", + "bg_image_url": "画像パス / URL", + "bg_size": "画像のサイズ調整", + "bg_size_cover": "カバー(画面を埋める)", + "bg_size_contain": "コンテイン(収める)", + "bg_size_auto": "自動(元のサイズ)", + "bg_blur": "背景ぼかし", + "bg_overlay": "ダークオーバーレイ", + "bg_overlay_hint": "背景を暗くしてテキストの読みやすさを向上させます。", + "bg_image_too_large": "画像が大きすぎます。最大サイズは 8 MB です。", + "bg_image_invalid_type": "無効なファイル形式です。PNG、JPG、WebP または GIF を使用してください。", + "bg_upload_success": "背景画像を正常にアップロードしました。", + "login_title": "ログインページ", + "login_desc": "ログイン画面の見出し、サブタイトル、背景をカスタマイズします。", + "login_heading": "ログイン見出し", + "login_heading_placeholder": "お帰りなさい", + "login_subheading": "ログインサブタイトル", + "login_subheading_placeholder": "アカウントにサインイン", + "login_bg_inherit": "コンソールと同じ", + "agent_title": "エージェントダウンロードページ", + "agent_desc": "エンドユーザーに表示される公開エージェントダウンロードポータルをカスタマイズします。", + "agent_show_powered": "「Powered by BetterDesk」を表示", + "agent_show_powered_hint": "ダウンロードポータルのフッターに BetterDesk のクレジットを表示します。", + "footer_title": "フッターと著作権", + "footer_desc": "ログイン画面とコンソールサイドバーに表示されるカスタムフッターテキストを追加します。", + "footer_text": "フッターテキスト", + "footer_text_hint": "著作権表示や会社名などを入力します。", + "show_powered": "「BetterDesk」クレジットを表示", + "show_powered_hint": "ログインフッターとサイドバーに BetterDesk の名前とバージョンを表示します。", + "custom_css_title": "カスタム CSS", + "custom_css_desc": "詳細設定: コンソール全体とログインページに適用されるカスタム CSS を注入します。", + "custom_css_hint": "慎重に使用してください。無効または安全でないルールはサニタイズされます。最大 20,000 文字。" + }, + "device_detail": { + "tab_overview": "概要", + "tab_tags": "タグとメモ", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "接続", + "section_manage": "管理", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "このデバイスは禁止されてい���す", + "no_reason": "理由は示されていない", + "tags": "Tags", + "no_tags": "このデバイスにはタグが割り当てられていません", + "tag_placeholder": "タグ名を入力してください...", + "add_tag": "Add", + "tag_exists": "このタグはすでに存在します", + "notes": "Notes", + "notes_placeholder": "このデバイスに関するメモを追加...", + "danger_zone": "Danger Zone", + "action_connect_web": "ウェブリモート", + "action_connect_web_desc": "ブラウザのリモートデスクトップ経由で接続する", + "action_native_remote": "BetterDesk リモート", + "action_native_remote_desc": "ネイティブ JPEG ストリーム — プラグインは必要ありません", + "action_connect_desktop": "デスクトップクライアント", + "action_connect_desktop_desc": "デスクトップクライアントアプリで開く", + "action_change_id_desc": "機器登録IDを変更する", + "action_ban_desc": "このデバイスの接続をブロックする", + "action_unban_desc": "このデバイスの再接続を許可します", + "action_delete_desc": "このデバイスを完全に削除します", + "tab_hardware": "Hardware", + "tab_metrics": "メトリクス", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "エンコード機能", + "section_live_metrics": "ライブメトリクス", + "section_current_usage": "現在の使用状況", + "section_usage_history": "利用履歴", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU周波数", + "total_memory": "総メモリ", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "更新されました", + "device_groups": "グループ", + "no_sysinfo": "ハードウェア情報がありません", + "no_sysinfo_hint": "システム情報は、デバイスが sysinfo レポートを送信した後に表示されます", + "no_metrics": "利用可能なメトリクス データがありません", + "no_metrics_hint": "デバイスがハートビート レポートを送信した後にメトリクスが表示されます", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "ファイル", + "agent_lazy_hint": "エージェントからライブ データをロード��るには、このタブをクリックします", + "agent_offline": "エージェントはオフラインです", + "agent_timeout": "エージェントが時間内に応答しなかった", + "agent_error": "エージェントからのデータのロードに失敗しました", + "service_name": "Name", + "service_display": "表示名", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "管理対象デバイスのハードウェアとソフトウェアのインベントリ", + "device_id": "デバイスID", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "総メモリ", + "memory_used": "Used Memory", + "memory_available": "使用可能なメモ���", + "memory_usage": "メモリ使用量", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "ネットワークインターフェース", + "software": "Software", + "software_count": "インストールされているソフトウェア", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "物理コア", + "logical_cores": "論理コア", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "利用可能", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IPアドレス", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "コレクターの実行中", + "collector_stopped": "コレクターが停止しました", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "収集場所", + "no_data": "在庫データはまだありません。 「今すぐ収集」をクリックしてシステム情報を収集します。", + "no_devices": "インベントリ データを持つデバイスが見つかりませんでした", + "detail_title": "デバイスインベントリの詳細", + "telemetry": "Telemetry", + "view_detail": "詳細を見る", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "サポートチケットと問題追跡", + "create": "New Ticket", + "edit": "チケットの編集", + "delete": "チケットの削除", + "detail": "チケット詳細", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "担当者", + "created_by": "作成者", + "device": "デバイス", + "sla_due": "SLA Due", + "created_at": "作成されました", + "updated_at": "更新されました", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "開く", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "コメントを書いてください...", + "internal_note": "内部メモ (エンドユーザーには表示されません)", + "attachments": "Attachments", + "upload_attachment": "添付ファイルのアップロード", + "download": "Download", + "connect_device": "デバイスに接続する", + "no_tickets": "チケットが見つかりませんでした", + "no_comments": "まだコメントはありません", + "no_attachments": "添付ファイルなし", + "title_required": "タイトルは必須です", + "delete_confirm": "チケット #{id} を削除してもよろしいですか?", + "delete_success": "チケットは正常に削除されました", + "created_success": "チケットが正常に作成されました", + "updated_success": "チケットが正常に更新されました", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "チケットを検索...", + "assign_to_me": "私に割り当ててください", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "開く", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "アクティビティの監視", + "subtitle": "アプリケーションの使用状況とアイドル状態の追跡", + "device": "デバイス", + "hostname": "Hostname", + "sessions": "セッション", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "上位のアプリケーション", + "app_name": "Application", + "window_title": "ウィンドウのタイトル", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "セッション数", + "total_active": "合計アクティブ", + "total_idle": "Total Idle", + "detail_count": "詳細記録", + "no_data": "利用可能なアクティビティ データがありません", + "no_sessions": "セッションなし", + "filter_from": "から", + "filter_to": "に", + "filter_apply": "フィルターを適用する", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "デバイスを検索...", + "date_range": "Date Range", + "device_id": "デバイスID", + "session_start": "セッション開始", + "session_end": "セッション終了", + "user": "User", + "no_activity": "アクティビティは記録されていません", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "申請はありません" + }, + "automation": { + "title": "自動化とアラート", + "subtitle": "アラート ルール、リモート コマンド、および SMTP 構成", + "rules": "Alert Rules", + "rules_subtitle": "通知をトリガーする条件を定義する", + "alerts": "アラート履歴", + "alerts_subtitle": "トリガーされたアラートを表示して確認する", + "commands": "リモートコマンド", + "commands_subtitle": "リモートデバイスにコマンドを送信する", + "smtp": "SMTP設定", + "smtp_subtitle": "メール通知設定", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "条件タイプ", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "ターゲットデバイス", + "scope_all": "すべてのデバイス", + "cooldown": "クールダウン (秒)", + "notify_emails": "通知メール", + "enabled": "有効", + "disabled": "障害者", + "create_rule": "ルールの作成", + "edit_rule": "ルールの編集", + "delete_rule": "ルールの削除", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "トリガー条件", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "より大きい", + "op_gte": "以上", + "op_lt": "Less than", + "op_lte": "以下または同等", + "op_eq": "に等しい", + "op_neq": "等しくありません", + "type_cpu_usage": "CPU使用率(%)", + "type_memory_usage": "メモリ使用量 (%)", + "type_disk_usage": "ディスク使用量 (%)", + "type_offline_duration": "オフライン期間 (秒)", + "type_idle_duration": "アイドル期間 (秒)", + "type_custom": "Custom", + "command_type": "コマンドの種類", + "command_payload": "コマンド/スクリプト", + "command_result": "Result", + "command_status": "Status", + "send_command": "送信コマンド", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "失敗しました", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "ユーザー名", + "smtp_pass": "パスワード", + "smtp_from": "送信元アドレス", + "smtp_test": "接続テスト", + "smtp_save": "設定を保存", + "smtp_test_success": "接続に成功しました", + "smtp_test_failed": "接続に失敗しました", + "no_rules": "アラートルールが設定されていません", + "no_alerts": "アラートは発生していません", + "no_commands": "送信されたコマンドはありません", + "id_payload_required": "デバイスIDとペイロードは必須です", + "no_commands_sent": "コマンドはまだ送信されていません" + }, + "file_transfer": { + "title": "ファイル転送", + "transfers": "Transfers", + "new_transfer": "新規転送", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "ファイルサイズ", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "デバイス", + "initiated_by": "開始者", + "created_at": "作成日", + "cancel": "キャンセル", + "cancel_confirm": "この転送をキャンセルしてもよろしいですか?", + "download_file": "ダウンロードファイル", + "browse_files": "ファイルを参照する", + "select_file": "ファイルの選択", + "select_device": "デバイスの選択", + "no_transfers": "ファイル転送なし", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "失敗しました", + "status_cancelled": "Cancelled", + "bytes_transferred": "転送バイト数", + "chunks": "Chunks", + "transfer_started": "転送が開始されました", + "transfer_completed": "転送完了", + "transfer_failed": "転送に失敗しました", + "transfer_cancelled": "転送がキャンセルされました", + "max_file_size": "最大ファイルサイズ:4GB", + "error_too_large": "ファイルが大きすぎます", + "error_no_device": "デバイスが選択されていません", + "error_no_file": "ファイルが選択されていません" + }, + "network": { + "title": "ネットワーク監視", + "targets": "監視対象", + "add_target": "Add Target", + "edit_target": "ターゲットの編集", + "delete_target": "ターゲットの削除", + "delete_confirm": "このターゲットを削除してもよろしいですか?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "タイムアウト (ミリ秒)", + "interval": "間隔 (ミリ秒)", + "enabled": "有効", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "履歴の確認", + "stats": "Statistics", + "total_targets": "総目標数", + "targets_up": "Targets Up", + "targets_down": "ターゲットダウン", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "ネットワークツール", + "ping_tool": "Ping Test", + "tcp_tool": "TCP ポートチェック", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "モニターを開始する", + "monitor_stop": "モニターを停止する", + "monitor_running": "モニターが動作中です", + "monitor_stopped": "モニターが停止しています", + "no_targets": "監視対象が設定されていません", + "no_history": "チェック履歴はありません", + "error_code": "Error", + "status_code": "HTTP ステータスコード", + "search_targets": "検索対象...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "履歴の確認", + "name_host_required": "名前とホストは必須です", + "uptime": "Uptime", + "response_time": "応答時間", + "avg_response": "平均的な応答", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "応答時間 (ミリ秒)", + "uptime_percent": "Uptime %", + "last_24h": "過去 24 時間", + "last_7d": "Last 7 days", + "last_30d": "過去 30 日間" + }, + "dataguard": { + "title": "データガード — DLP", + "policies": "DLP ポリシー", + "add_policy": "ポリシーの追加", + "edit_policy": "ポリシーの編集", + "delete_policy": "ポリシーの削除", + "delete_confirm": "このポリシーを削除してもよろしいですか?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "有効", + "disabled": "障害者", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USBデバイス", + "rule_type_file": "ファイル操作", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "ベンダーID (VID)", + "pid": "製品ID (PID)", + "serial": "シリアル番号", + "device_class": "デバイスクラス", + "drive_type": "Drive Type", + "file_extensions": "ファイル拡張子", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "ファイル", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "DLP ポリシーが設定されていません", + "no_events": "DLP イベントは記録されませんでした", + "stats": "Statistics", + "total_events": "イベント総数", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "ファイルイベント", + "device_id": "デバイスID", + "policy_matched": "ポリシーが一致しました", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "総保険数", + "active_policies": "アクティブなポリシー", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "ポリシー", + "tab_events": "Events", + "search_policies": "検索ポリシー...", + "create_policy": "ポリシーの作成", + "policy_type": "ポリシーの種類", + "scope": "Scope", + "events_count": "Events", + "search_events": "イベントを検索...", + "event_time": "Event Time", + "device": "デバイス", + "policy": "ポリシー", + "detail": "Detail", + "scope_help": "カンマ区切りのデバイス ID、またはすべてを空のままにします", + "scope_all": "すべてのデバイス", + "active": "Active", + "type_file_type": "ファイルの種類", + "type_clipboard": "クリップボード", + "type_screen_share": "画面共有", + "type_file_transfer": "ファイル転送", + "policy_desc": "ポリシーの説明", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "レポートの生成", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "デバイスの概要", + "type_activity": "活動の概要", + "type_security": "セキュリティレポート", + "type_tickets": "チケットレポート", + "type_network": "ネットワークレポート", + "type_inventory": "在庫レポート", + "type_alerts": "アラートレポート", + "saved": "保存されたレポート", + "save_report": "レポートの保存", + "delete_report": "レポートの削除", + "delete_confirm": "この保存されたレポートを削除してもよろしいですか?", + "no_saved": "保存されたレポートはありません", + "report_title": "Title", + "created_by": "作成者", + "created_at": "作成日", + "filters": "Filters", + "date_from": "から", + "date_to": "に", + "device_filter": "デバイスID", + "generated_at": "生成場所", + "section": "データセクション", + "total_devices": "総デバイス数", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "プラットフォームの配布", + "top_applications": "上位のアプリケーション", + "total_active": "合計アクティブ時間", + "total_idle": "合計アイドル時間", + "dlp_stats": "DLP 統計", + "banned_devices": "禁止されたデバイス", + "audit_logs": "Audit Logs", + "ticket_stats": "チケット統計", + "category_distribution": "カテゴリ分布", + "priority_distribution": "優先配布", + "targets_status": "ターゲットのステータス", + "os_distribution": "OSの配布", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "最近のアラート", + "tab_generate": "レポートの生成", + "tab_saved": "保存されたレポート", + "type_devices_desc": "すべてのデバイス、プラットフォーム、ステータスの概要", + "type_activity_desc": "アプリケーションの使用状況とアイドル時間の概要", + "type_security_desc": "禁止アクション、DLP イベント、監査ログ", + "type_tickets_desc": "チケット統計と SLA パフォーマンス", + "type_network_desc": "ネットワーク監視対象と稼働時間データ", + "type_inventory_desc": "ハードウェアとソフトウェアのインベントリの概要", + "type_alerts_desc": "アラート ルールとトリガーされたアラート履歴", + "report_name": "Report Name", + "format": "Format", + "save": "レポートの保存", + "preview": "Preview", + "download": "Download", + "delete_saved": "レポートの削除", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "テナントの編集", + "delete_tenant": "テナントの削除", + "delete_confirm": "このテナントを削除してもよろしいですか?すべてのデバイスとユーザーの割り当てが削除されます。", + "name": "Name", + "slug": "Slug", + "contact_name": "連絡先名", + "contact_email": "連絡先メールアドレス", + "max_devices": "最大デバイス数", + "max_devices_hint": "0 = 無制限", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "デバイス", + "users": "Users", + "assign_device": "デバイスの割り当て", + "assign_devices": "デバイスの割り当て", + "remove_device": "デバイスの削除", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "テナントが構成されていません", + "no_devices": "このテナントにはデバイスが割り当てられていません", + "no_users": "このテナントにはユーザーが割り当てられていません", + "stats": "テナント統計", + "total_devices": "総デバイス数", + "online_devices": "オンラインデバイス", + "total_users": "Total Users", + "created_at": "作成日", + "updated_at": "更新日", + "slug_exists": "テナントスラッグはすでに存在します", + "total_tenants": "テナントの合計", + "active_tenants": "アクティブなテナント", + "search": "テナントを検索...", + "create_tenant": "テナントの作成", + "detail": "テナント詳細", + "contact": "Contact", + "enabled": "有効", + "disabled": "障害者", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "デバイス ID、ホスト名、または IP で検索...", + "no_registrations": "No registration requests", + "col_device_id": "デバイスID", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "このデバイスを承認してもよろしいですか?サーバーの資格情報を受信し、自動的に接続できます。", + "approved_success": "デバイス登録が正常に承認されました", + "reject_btn": "Reject", + "reject_title": "登録の拒否", + "reject_confirm": "この登録リクエストを拒否してもよろしいですか?", + "reject_reason": "理由(任意)", + "reject_reason_placeholder": "拒否理由を入力してください...", + "rejected_success": "デバイスの登録が拒否されました", + "delete_confirm": "この登録レコードを削除してもよろしいですか?", + "deleted_success": "登録記録が削除されました", + "enrollment_title": "デバイスの登録", + "enrollment_subtitle": "BetterDesk デスクトップ クライアントからの保留中の登録リクエスト", + "enrollment_empty": "保留中の登録リクエストはありません", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "表示名", + "enrollment_display_name_placeholder": "このデバイスの名前を入力してください...", + "enrollment_sync_mode": "同期モード", + "enrollment_sync_silent": "サイレント - 最小限のテレメトリ", + "enrollment_sync_standard": "標準 - バランス同期", + "enrollment_sync_turbo": "ターボ — アグレッシブな同期", + "enrollment_approved_success": "デバイスの登録が承認されました", + "enrollment_rejected_success": "デバイスの登録が拒否されました", + "approve_title": "デバイスを承認", + "field_name": "デバイス名", + "field_name_placeholder": "このデバイスの名前を入力...", + "field_sync_mode": "同期モード", + "sync_standard": "スタンダード — バランスの取れた同期", + "sync_silent": "サイレント — 最小限のテレメトリー", + "sync_turbo": "ターボ — アグレッシブな同期", + "field_tags": "タグ", + "field_tags_placeholder": "カンマ区切りのタグ(例: オフィス, ノートPC)...", + "field_tags_existing": "既存のタグ", + "field_tag_add_placeholder": "新しいタグを追加...", + "field_tag_add_btn": "追加", + "field_groups": "デバイスグループ", + "field_folder": "フォルダー", + "field_folder_none": "フォルダーなし", + "reject_ban_option": "このデバイスを禁止", + "reject_ban_hint": "デバイスはブロックされ、新しい登録リクエストを送信できなくなります。", + "banner_open_mode": "登録はオープンです — 新しい RustDesk クライアントはオペレーターの承認なしに登録されます。このキューを使用するには設定でマネージドモードを設定してください。", + "banner_locked_mode": "登録はロックされています — トークンに紐付けられたデバイスのみ登録できます。未知のクライアントのオペレーター承認にはマネージドモードが必要です。", + "enrollment_settings_link": "登録設定" + }, + "backup": { + "title": "Backup", + "desc": "コンソールの構成、ユーザー、グループ、設定の完全なバックアップをダウンロードします。 BetterDesk バックエンドがアクティブな場合、Go server ピア データが含まれます。", + "restore_title": "Restore", + "restore_desc": "以前にダウンロードしたバックアップ ファイルをアップロードして、コンソール設定を復元します。以下で復元するセクションを選択してください。", + "stat_users": "Users", + "stat_settings": "設定", + "stat_folders": "Folders", + "stat_groups": "グループ", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "バックアップをダウンロード", + "creating": "バックアップを作成しています...", + "download_success": "バックアップが正常にダウンロードされました", + "upload": "バックアップのアップロード", + "restore_confirm": "このバックアップから復元してもよろしいですか?選択したセクションは上書きされます。", + "restore_success": "バックアップは正常に復元されました。変更によっては、ページの再読み込みが必要になる場合があります。", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "コンソール設定", + "opt_branding": "ブランディング/テーマ", + "opt_folders": "デバイスフォルダー", + "opt_groups": "ユーザーとデバイスのグループ", + "opt_addressbooks": "アドレス帳", + "opt_users": "ユーザーアカウント", + "opt_users_warning": "破壊的: すべてのユーザー アカウントをバックアップ データに置き換えます。ログアウトしている可能性があります。", + "no_file": "バックアップ ファイルが選択されていません", + "invalid_json": "無効なバックアップ ファイル: 無効な JSON", + "invalid_format": "無効なバックアップ ファイル: BetterDesk バックアップではありません", + "stat_database": "データベースエンジン", + "stat_keys": "サーバーキー含む", + "stat_env": "環境設定ファイル", + "stat_uploads": "ブランディングファイル", + "restart_required": "一部の復元コンポーネント(キー / .env / Go データベース)は有効にするためにサービスの再起動が必要です。", + "security_warning": "このバックアップには機密情報(サーバーキー、環境設定ファイル、パスワードハッシュ、2FA シークレット)が含まれています。安全に保管し、共有しないでください。", + "restore_warning": "シークレット、環境設定ファイル、または Go サーバーデータベースを復元すると、サーバーのIDが上書きされ、その後サービスの再起動が必要になります。", + "opt_database": "データベース(全テーブル)", + "opt_database_hint": "すべてのコンソールデータを再インポートします。ライブで適用され、再起動は不要です。", + "opt_uploads": "ブランディングファイル", + "opt_uploads_hint": "ロゴとアップロードされた画像。", + "opt_secrets": "サーバーキーとシークレット", + "opt_secrets_warning": "Ed25519 サーバー ID、API キー、セッションシークレットを上書きします。サービスの再起動が必要です。", + "opt_env": "環境設定ファイル(.env)", + "opt_env_warning": "SESSION_SECRET、API キー、データベース DSN、ポート、TLS 設定を上書きします。サービスの再起動が必要です。", + "opt_godb": "Go サーバーデータベース", + "opt_godb_warning": "Go サーバーの SQLite データベースを上書きします(SQLite バックエンドのみ)。サービスの再起動が必要です。" + }, + "cdap": { + "device_detail": "CDAPデバイス", + "loading": "読み込み中...", + "loading_widgets": "デバイス ウィジェットを読み込んでいます...", + "load_error": "デバイスデータのロードに失敗しました", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "デバイスは現在オフラインです。ウィジェットの値が古い可能性があります。", + "no_widgets": "利用可能なウィジェットがありません", + "no_widgets_desc": "このデバイスは、ウィジェット定義を含む CDAP マニフェストを登録していません。", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "コマンドの確認", + "select_option": "選択", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "送信コマンド", + "command_sent": "コマンドは正常に送信されました", + "command_failed": "コマンドの送信に失敗しました", + "devices_title": "CDAP デバイス", + "devices_subtitle": "カスタム デバイス アプリケーション プロトコル経由で接続されたデバイス", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "デバイスを検索...", + "no_devices": "デバイスが接続されていません", + "no_devices_desc": "���在接続されている CDAP デバイスはありません。デバイスがゲートウェイに接続すると、ここに表示されます。", + "gateway_disabled": "CDAP ゲートウェイが無効になっています", + "gateway_disabled_desc": "サーバー構成で CDAP_ENABLED=true を設定して、CDAP ゲートウェイを有効にします。", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "CDAP���無効にする", + "enabled_restart": "CDAP が有効になりました。変更を適用するにはサーバーの再起動が必要です。", + "disabled_restart": "CDAP は無効になっています。変更を適用するにはサーバーの再起動が必要です。", + "widgets": "ウィジェット", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "アクティブなアラート", + "alert_fired": "Alert fired", + "alert_cleared": "アラートが解除されました", + "no_alerts": "アクティブなアラートはありません", + "connect_terminal": "接続端子", + "table_search": "検索...", + "just_now": "Just now", + "terminal_connecting": "デバイスに接続中...", + "terminal_disconnected": "Disconnected", + "terminal_error": "端末接続に失敗しました", + "linked_devices": "リンクされたデバイス", + "link_device": "リンクデバイス", + "unlink_device": "Unlink", + "no_linked_devices": "リンクされたデバイスはありません", + "unlink_confirm": "このデバイスのリンクを解除してもよろしいですか?", + "link_prompt": "このデバイスにリンクするピア ID を入力してください:", + "connect_desktop": "デスクトップを接続する", + "connect_video": "ストリームを接続する", + "connect_files": "ファイルを参照する", + "connect_audio": "オーディオを接続する", + "upload_file": "Upload", + "desktop_connecting": "接続中...", + "video_connecting": "接続中...", + "files_connecting": "接続中...", + "audio_connecting": "接続中...", + "audio_streaming": "Streaming", + "clipboard_in": "クリップボードを受信しました", + "clipboard_out": "クリップボードが送信されました", + "monitor_select": "モニターの選択", + "keyframe_request": "キー��レームのリクエスト", + "quality_auto": "自動品質" + }, + "desktop": { + "switch_mode": "デスクトップモード", + "console_mode": "コンソールモード", + "loading": "読み込み中...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "閉じる", + "widgets_mode": "ウィジェット", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "ウィジェットの追加", + "remove_widget": "ウィジェットの削除", + "configure": "設定する", + "search_widgets": "ウィジ���ットを検索...", + "cat_monitoring": "Monitoring", + "cat_devices": "デバイス", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "ここにメモを書きます...", + "search_placeholder": "デバイス、ページ、設定を検索...", + "search_pages": "Pages", + "search_devices": "デバイス", + "search_no_results": "No results", + "exit_desktop": "Exit Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "デバイスのステータス", + "widget_server_health": "サーバー情報", + "widget_system_stats": "デバイスゲージ", + "widget_device_list": "デバイスリスト", + "widget_quick_actions": "クイックアクション", + "widget_recent_activity": "最近の活動", + "widget_notes": "Notes", + "widget_network_monitor": "ネットワークモニター", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP デバイス", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "デバイスグリッド", + "widget_multi_gauge": "サーバーゲージ", + "widget_weekly_chart": "毎週のアクティビティ", + "widget_quick_controls": "クイックコントロール", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "接続統計", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "ユーザーセッション", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "デバイスがありません", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "開く", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "設定でURLを設定します", + "label_server_uptime": "サーバー稼働時間", + "label_merged_info": "サーバー情報ウィジェットに統合", + "label_with_notes": "メモ付き", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "総デバイス数", + "label_throughput": "Throughput", + "label_active_relays": "アクティブリレー", + "label_total_relayed": "中継合計", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "デバイスをフィルターします...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "CDAP デバイスはありません", + "action_add_widget": "ウィジェットの追加", + "label_merged_server_info": "サーバー情報ウィジェットに統合", + "wp_images": "Images", + "wp_colors": "単色", + "wp_custom_color": "カスタムカラー", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "widget_calendar": "Calendar", + "widget_process_monitor": "プロセスモニター", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "データベース統計", + "widget_docker_containers": "Docker コンテナ", + "widget_shell_command": "シェルコマンド", + "widget_device_map": "デバイスマッ��", + "widget_remote_connect": "リモート接続", + "label_no_online": "オンラインデバイスなし", + "label_no_events": "今日はイベントはありません", + "label_event_title": "イベントタイトル:", + "label_no_data": "利用可能なデータがありません", + "label_download_speed": "ダウンロード速度", + "label_latency": "Latency", + "label_server": "サーバー", + "label_run_test": "Run Test", + "label_testing": "テスト中...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "コンテナなし", + "label_docker_unavailable": "Docker は利用できません", + "label_no_command": "コマンドが設定されていません", + "label_no_output": "まだ出力はありません", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "プリセットの保存", + "label_load_preset": "Load Preset", + "label_preset_name": "プリセット名:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "自動配置", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 列 (等しい)", + "label_2col_wide": "2列(60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "ウィジェットグループ", + "ungroup_widgets": "ウィジェットのグループ化を解除する", + "group_widgets": "選択したウィジェットをグループ化する", + "snap_layouts": "スナップレイアウト", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "左上にスナップ", + "snap_top_right": "右上にスナップ", + "snap_bottom_left": "左下スナップ", + "snap_bottom_right": "右下にスナップ", + "aero_shake": "シェイクして他の人を最小化する", + "zone_resize": "境界線をドラッグしてゾーンのサイズを変更します", + "zone_borders": "ドラッグ可能なゾーンの境界線", + "app_drawer": "Applications", + "search_apps": "アプリを検索...", + "edit_shortcuts": "ショートカットを編集", + "widgets": "ウィジェット", + "theme": "Theme", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "wp_unavailable": "このサーバーには壁紙画像がインストールされていません。", + "wp_download_hint": "壁紙の選択を可能にするには、PNG 画像を public/wallpaper/ ディレクトリに配置します。", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "任意の場所をクリックするか、キーを押してサインインします", + "username_placeholder": "ユーザー名", + "password_placeholder": "パスワード", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "二要素認証", + "totp_subtitle": "認証アプリから 6 桁のコードを入力してください", + "back_to_login": "ログインに戻る", + "fill_all_fields": "すべてのフィールドに入力してください", + "invalid_credentials": "無効なユーザー名またはパスワード", + "invalid_code": "無効な確認コード", + "enter_6_digits": "6桁すべてを入力してください", + "network_error": "ネットワーク エラー - 接続を確認してください", + "session_expired": "セッションの有効期限が切れました。再度サインインしてください。" + }, + "tokens": { + "title": "デバイストークン", + "subtitle": "自動デバイス プロビジョニングの登録トークンを管理する", + "enrollment_mode": "登録モード", + "mode_open": "開く", + "mode_open_desc": "どのデバイスもトークンなしで登録可能", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "総トークン数", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "トークンを検索...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "一括生成", + "create": "トークンの作成", + "edit": "トークンの編集", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "作成されました", + "actions": "Actions", + "name_placeholder": "例:オフィスPCバッチ", + "max_uses": "Max Uses", + "max_uses_hint": "0 = 無制限", + "expires_in": "Expires In", + "no_expiration": "有効期限なし", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "このトークンに関するオプションのメモ...", + "count": "Count", + "count_range": "生成するトークンの数 (1 ~ 100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "トークンが作成されました", + "tokens_generated": "生成されたトークン", + "copy_warning": "今すぐ���ークンをコピーします。再度表示されることはありません。", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "このトークンを取り消してもよろしいですか?すでに登録されているデバイスは影響を受けません。", + "revoked_success": "トークンが正常に取り消されました", + "no_tokens": "トークンが見つかりませんでした", + "expired": "Expired", + "never": "Never", + "save": "保存", + "cancel": "キャンセル", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "次へ", + "prev": "Previous", + "skip": "Skip", + "finish": "終了", + "close": "閉じる", + "step_of": "{current}/{total}", + "console_sidebar_title": "ナビゲーションサイドバー", + "console_sidebar_text": "ここからすべてのモジュールにアクセスします。任意のアイコンをクリックして、そのセクションに移動します。サイドバーは画面サイズに合わせて調整されます。", + "console_expand_title": "サイドバーを展開する", + "console_expand_text": "ここをクリックしてサイドバーを展開すると、すべてのナビゲーション項目の完全なラベルが表示されます。もう一度クリックすると折りたたまれます。", + "console_search_title": "クイック検索", + "console_search_text": "デバイス、設定、アクションをすばやく検索します。 Ctrl+K を押してキーボード ショートカットを使用します。", + "console_dashboard_title": "ダッシュボード", + "console_dashboard_text": "サーバーのステータス、オンライン デバイス、クイック アクションを表示する中央ハブ。重要な指標を一目で把握できます。", + "console_devices_title": "デバイス管理", + "console_devices_text": "接続されているすべてのデバイスを表示、検索、管理します。ステータスでフィルタリングし、タグを割り当て、個々のデバイス設定を構成します。", + "console_settings_title": "設定", + "console_settings_text": "サーバーの動作、セキュリティ オプション、ブランド化、およびユーザー管理を構成します。ニーズに合わせて BetterDesk をカスタマイズします。", + "console_desktop_title": "デスクトップモード", + "console_desktop_text": "ウィジェットを備えたウィンドウ化されたワークスペースのデスクトップ モードに切り替えます。マルチタスクやダッシュボードの監視に最適です。", + "console_complete_title": "準備は完了です!", + "console_complete_text": "サイドバーのカテゴリを調べて、すべての機能を見つけてください。 [ヘルプ] アイコンをクリックすると、いつでもこのガイドを再開できます。", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "上部のバーには、時計、クイック コントロール、アプリ ドロワーへのアクセスが表示されます。すべてのアプリを参照するには、グリッド アイコンをクリックします。", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "アプリドロワーを開いてコンソール機能を検索し、フローティングウィンドウとして起動します。アプリはカテゴリ別に整理されています。", + "desktop_widgets_title": "ウィジェットダッシ���ボード", + "desktop_widgets_text": "カスタマイズ可能なワークスペース。ウィジェットにはライブ情報が表示され、機能への素早いアクセスが可能になります。ドラッグして並べ替えます。", + "desktop_add_widget_title": "ウィジェットを追加する", + "desktop_add_widget_text": "ここをクリックして利用可能なウィジェットを参��してください。監視表示、デバイスリスト、メモなどから選択します。", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "スナップレイアウト", + "desktop_snap_text": "ウィンドウを画面の端にドラッグして所定の位置にスナップするか、レイアウト プリセットの最大化ボタンをホバーします。エアロシェイクを試してみよう!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "アプリは、ドラッグ可能でサイズ変更可能なウィンドウで開きます。タイトル バーから最小化、最大化、または閉じることができます。ウィジェットの上の Windows レイヤー。", + "desktop_search_title": "クイック検索", + "desktop_search_text": "デバイス、ページ、設定全体を検索します。任意の場所で Ctrl+K を押すと、すぐに検索が開きます。", + "desktop_complete_title": "デスクトップモードの準備完了!", + "desktop_complete_text": "ドロワーからアプリを開いて、ウィンドウを並べて配置してみてください。ウィジェット プリセットを使用して、ダッシュボード レイアウトをすばやく作成します。", + "devices_folders_title": "デバイスフォルダー", + "devices_folders_text": "デバイスをフォルダーに整理します。フォルダーをクリックしてリストをフィルターします。右クリックして名��を変更または削除します。", + "devices_search_title": "検索とフィルター", + "devices_search_text": "ID、ホスト名、またはプラットフォームで検索します。ステータス ピルを使用して、オンライン、オフライン、またはすべてのデバイスのみを表示します。", + "devices_table_title": "デバイスリスト", + "devices_table_text": "詳細については、デバイスの行をクリックしてください。右側のケバブ メニューを使用して、接続、タグの編集、削除などのクイック アクションを実行します。", + "devices_complete_title": "デバイス管理の準備完了!", + "devices_complete_text": "デバイスをフォルダ間でドラッグして整理します。デバイスをダブルクリックして、その詳細パネルを開きます。", + "settings_tabs_title": "設定カテゴリ", + "settings_tabs_text": "「全般」、「セキュリティ」、「外観」、およびその他の構成セクション間を移動します。", + "settings_content_title": "構成", + "settings_content_text": "各セクションには、特定のサーバーとコンソールの設定が含まれています。 「保存」をクリックすると、変更が保存されます。", + "settings_complete_title": "設定の概要", + "settings_complete_text": "2FA、API キーおよびユーザー管理のセキュリティ設定を確認してください。コンソールの外観をカスタマイズするには、「外観」にアクセスしてください。", + "help": "ヘルプとチュートリアル", + "tour_console": "コンソールツアー", + "tour_desktop": "デスクトップモードツアー", + "tour_devices": "デバイスツアー", + "tour_settings": "設定ツアー", + "reset_all": "すべてのチュートリアルをリセット", + "tour_remote": "リモートセッションツアー", + "tour_organization": "組織のセットア��プ", + "tour_cdap": "CDAP 概要", + "tour_chat": "チャットの基本", + "remote_toolbar_title": "リモートツールバー", + "remote_toolbar_text": "ツールバーから表示コントロール、クリップボード同期、特殊キー、品質設定にアクセスします。 F11 で全画面に切り替えます。", + "remote_canvas_title": "リモートディスプレイ", + "remote_canvas_text": "こちらはリモート画面です。内側をクリックしてリモート デバイスの制御を開始します。マウスとキーボードの入力は自動的に転送されます。", + "remote_clipboard_title": "クリップボードの同期", + "remote_clipboard_text": "コンピュータとリモート デバイス間でテキストをコピーして貼り付けます。リモート ディスプレイに焦点を当てている間は、通常どおり Ctrl+C / Ctrl+V を使用します。", + "remote_complete_title": "リモートセッションの準備完了!", + "remote_complete_text": "ツールバーのボタンは特殊キー(Ctrl+Alt+Del、PrintScreen)やモニターの切り替えに使用します。 Esc キーを押すか、「切断」をクリックしてセッションを終了します。", + "org_overview_title": "組織", + "org_overview_text": "組織を使用すると、ユーザー、デバイス、ポリシーをグループ化できます。各組織には独自の管理者、オペレーター、および設定があります。", + "org_create_title": "組織の作成", + "org_create_text": "新しい組織を作成するにはここをクリックしてください。名前、スラッグ、およびオプションの説明を入力します。あなたは新しい組織のオーナーになります。", + "org_members_title": "メンバーの管理", + "org_members_text": "電子メールでユーザーを招待し、役割 (管理者、オペレーター、ユーザー) を割り当て、アクセスを管理します。メンバーは、自分の組織に割り当てられているデバイスを確認できます。", + "org_devices_title": "デバイスの割り当て", + "org_devices_text": "デバイスを組織に追加します。ここで割り当てられたデバイスは組織のポリシーを継承し、そのメンバーに表示されます。", + "org_policies_title": "組織方針", + "org_policies_text": "組織のパスワード要件、セッション タイムアウト、2FA 強制、デバイス登録ルールなどのセキュリティ ポリシーを設定します。", + "org_complete_title": "組織のセットアップが完了しました!", + "org_complete_text": "チームを招待し、デバイスを割り当てて、組織を対象とした管理の使用を開始します。ポリシーはすべてのメンバーに自動的に適用されます。", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "連絡先とグループ", + "chat_contacts_text": "連絡先とチャット グループを確認します。連絡先をクリックして会話を開きます。緑色の点はオンライン ユーザーを示します。", + "chat_send_title": "メッセージを送信する", + "chat_send_text": "メッセージを入力し、Enter キーを押して送信します。双方が E2E をサポートしている場合、メッセージはエンドツーエンドで暗号化されます。", + "chat_file_title": "ファイルを共有する", + "chat_file_text": "ファイルを共有するには、添付アイコンをクリックします。ファイルは暗号化され、最大 50 MB まで可能です。", + "chat_complete_title": "チャットの準備完了!", + "chat_complete_text": "オペレーターやエンドユーザーとリアルタイムでチャットできます。チームコミュニケーションのためのグループを作成します。すべてのメッセージは開封確認をサポートしています。", + "disable_tutorials": "チュートリアルを無効にする", + "enable_tutorials": "チュートリアルを有効にする" + }, + "help_request": { + "title": "ヘルプリクエスト", + "subtitle": "デスクトップクライアントから受信したヘルプリクエストを管理する", + "new_request": "新しいヘルプリクエスト", + "device": "デバイス", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "助けの要請はありません", + "notification": "からのヘルプリクエストを受け取りました", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "組織", + "create": "組織の作成", + "edit": "組織の編集", + "detail": "組織の詳細", + "name": "Name", + "slug": "ナメクジ (URL セーフ)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "デバイス", + "invitations": "Invitations", + "settings": "設定", + "add_user": "Add User", + "assign_device": "デバイスの割り当て", + "create_invitation": "招待状の作成", + "delete_confirm": "この組織を削除しますか?これにより、関連付けられているすべてのユーザー、デバイス、設定が削除されます。", + "no_orgs": "まだ組織がありません", + "no_orgs_hint": "最初の組織を作成して、デバイスとユーザーの管理を開始します。", + "connection_policy": "接続ポリシー", + "allow_file_transfer": "ファイル転送を許可する", + "allow_clipboard": "クリップボードを許可する", + "max_session_duration": "最大セッション継続時間 (分)", + "role_owner": "Owner", + "role_admin": "管理者", + "role_operator": "Operator", + "role_user": "メンバー", + "username": "ユーザー名", + "password": "パスワード", + "display_name": "表示名", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "デバイスID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "割り当てられたユーザー", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "この組織にはユーザーがいません。", + "no_devices": "この組織にはデバイスが割り当てられていません。", + "no_invitations": "招待状はありません。", + "user_added": "User added", + "user_removed": "ユーザーが削除されました", + "user_updated": "ユーザー役割が更新されました", + "device_assigned": "割り当てられたデバイス", + "device_unassigned": "デバイスが割り当てられていません", + "invitation_created": "招待状が作成されました", + "settings_saved": "設定が保存されました", + "org_deleted": "組織が削除されました", + "confirm_remove_user": "このユーザーを組織から削除しますか?", + "confirm_unassign_device": "このデバイスを組織から割り当て解除しますか?", + "confirm_delete_org": "この組織とすべての関連データを削除しますか?", + "edit_role": "役割の編集", + "raw_settings": "生の設定", + "key": "Key", + "value": "Value", + "save": "設定の保存", + "policy_unattended": "無人 (即時)", + "policy_attended": "出席しました(確認あり)", + "policy_ask": "Always ask", + "expires_hours": "有効期限 (時間)", + "loading_failed": "組織データのロードに失敗しました", + "name_slug_required": "名前とスラッグは必須です", + "org_created": "組織が作成されました", + "org_updated": "組織が更新されました", + "create_new_user": "新規作成", + "add_existing_user": "既存の追加", + "none_available": "none", + "select_user": "ユーザーの選択", + "org_role": "組織の役割", + "link_user_hint": "選択したユーザーは、サーバー アカウントの資格情報を使用してこの組織にリンクされます。", + "no_available_users": "すべてのサーバー ユーザーはすでにこの組織にリンクされています。", + "user_linked": "組織にリンクされたユーザー" + }, + "chat": { + "e2e_enabled": "エンドツーエンド暗号化", + "e2e_establishing": "セキュアチャネルを確立中...", + "e2e_established": "セキュアチャネルが確立されました", + "e2e_unsupported": "このブラウザではE2E暗号化はサポートされていません", + "typing_indicator": "入力中...", + "read_receipt": "既読", + "delivered": "配信済み", + "file_share": "ファイル", + "file_too_large": "ファイルが大きすぎます(最大 50MB)", + "file_encrypted": "暗号化ファイル転送", + "presence_online": "オンライン", + "presence_away": "離席中", + "presence_busy": "取り込み中", + "presence_offline": "オフライン", + "key_rotation": "セキュリティキーが更新されました", + "new_message": "新しいメッセージ", + "title": "チャット", + "contacts": "連絡先", + "groups": "グループ", + "no_contacts": "まだ連絡先がありません", + "no_groups": "まだグループがありません", + "no_messages": "まだメッセージがありません", + "no_results": "結果が見つかりません", + "select_conversation": "会話を選択してチャットを開始", + "type_message": "メッセージを入力...", + "send": "送信", + "attach_file": "ファイルを添付", + "emoji": "絵文字", + "search_messages": "メッセージを検索", + "create_group": "グループを作成", + "group_name": "グループ名", + "group_members": "メンバー", + "cancel": "キャンセル", + "create": "作成", + "members": "メンバー", + "today": "今日", + "yesterday": "昨日", + "react": "リアクション", + "my_presence": "マイステータス", + "search_placeholder": "連絡先とメッセージを検索", + "select_conversation_hint": "メッセージを表示するには会話を選択してください", + "info": "情報", + "group_name_placeholder": "グループ名を入力" + }, + "toast": { + "device_connected": "接続されたデバイス", + "device_disconnected": "デバイスが切断されました", + "session_started": "リモートセッションが開始されました", + "session_ended": "リモートセッションが終了しました", + "file_upload_complete": "ファイルのアップロードが完了しました", + "settings_saved": "設定が保存されました", + "error_generic": "エラーが発生しました", + "connection_lost": "接続が失われました", + "reconnecting": "再接続中..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "管理ユーティリティと診断ツール", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "送信", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "テキストを入力してください...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Goサーバー", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "ホストの到達可能性と遅延を確認する", + "tcp_title": "TCP ポートチェック", + "tcp_desc": "TCP ポートの接続をテストする", + "ssl_title": "SSLインスペクター", + "ssl_desc": "SSL/TLS 証明書の詳細を検査する", + "http_title": "HTTP ヘルスチェック", + "http_desc": "HTTP エンドポイントのステータスを確認する", + "dns_title": "DNS Lookup", + "dns_desc": "ホスト名をIPアドレスに解決する", + "whois_title": "DNS Records", + "whois_desc": "A、AAAA、MX、TXT、NS レコードのクエリ", + "speed_title": "Speed Test", + "speed_desc": "ダウンロード帯域幅を測定する", + "run_speed_test": "速度テストの実行", + "wol_title": "Wake-on-LAN", + "wol_desc": "マジックパケットを送信してデバイスをウェイクアップします", + "wol_sent": "マジックパケットが送信されました", + "hash_title": "ハッシュジェネレーター", + "hash_desc": "暗号化ハッシュを生成する", + "password_title": "パスワードジェネレータ", + "password_desc": "安全なランダムパスワードを生成する", + "jwt_title": "JWT Decoder", + "jwt_desc": "JSON Web トークンをデコードして検査する", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 データのエンコードまたはデコード", + "url_title": "URL Encoder", + "url_desc": "URL コンポーネントをエンコードまたはデコードする", + "processes_title": "プロセス一覧", + "processes_desc": "実行中のシステムプロセスを表示する", + "disk_title": "Disk Usage", + "disk_desc": "ディスクパーティションの使用状況を表示する", + "db_title": "データベース統計", + "db_desc": "データベーステーブル統計の表示", + "docker_title": "Docker コンテナ", + "docker_desc": "実行中の Docker コンテナーを表示する", + "logs_title": "Log Viewer", + "logs_desc": "最近のログ出力を表示する", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "有効開始日", + "valid_to": "有効期限", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "利用可能なデータがありません", + "no_docker": "Docker コンテナが見つからないか、Docker が使用できません", + "no_logs": "利用可能なログ行がありません" + }, + "policies": { + "title": "組織ポリシー", + "subtitle": "組織のセキュリティ、接続、機能ポリシーを管理", + "select_org": "組織", + "select_org_placeholder": "組織を選択...", + "select_org_first": "ポリシー監査ログを表示するには組織を選択してください。", + "configured": "設定済み", + "connection_title": "接続ポリシー", + "connection_desc": "リモートセッションの確立方法を制御", + "connection_mode": "接続モード", + "mode_attended": "有人(ユーザー承認が必要)", + "mode_unattended": "無人(常に許可)", + "mode_ask": "常に確認", + "max_session": "最大セッション時間(分)", + "idle_lock": "アイドルロック(分)", + "wallpaper_policy": "セッション中の壁紙", + "wallpaper_show": "表示", + "wallpaper_hide_session": "セッション中非表示", + "wallpaper_hide_always": "常に非表示", + "features_title": "機能ポリシー", + "features_desc": "デバイスの特定機能を有効または無効にする", + "allow_file_transfer": "ファイル転送を許可", + "allow_clipboard": "クリップボード同期を許可", + "allow_audio": "オーディオストリーミングを許可", + "allow_recording": "セッション録画を許可", + "security_title": "セキュリティポリシー", + "security_desc": "組織デバイスのセキュリティ要件を強制", + "require_2fa": "無人アクセスに2FAを要求", + "password_min_length": "最小パスワード長", + "password_require_special": "特殊文字を要求", + "password_max_age": "パスワード最大有効期間(日、0=無期限)", + "allowed_operators": "許可されたオペレーターロール(カンマ区切り)", + "network_title": "ネットワークポリシー", + "network_desc": "リレーサーバーと直接接続を制御", + "block_direct_p2p": "直接P2Pをブロック(リレー強制)", + "allowed_relays": "許可されたリレーサーバー(行ごとに1つ)", + "ip_allowlist": "IPホワイトリスト(CIDR、行ごとに1つ)", + "update_title": "更新ポリシー", + "update_desc": "自動更新と更新チャネルを制御", + "auto_update": "自動更新を有効化", + "update_channel": "更新チャネル", + "audit_title": "ポリシー変更", + "audit_desc": "最近のポリシー変更履歴", + "no_audit": "ポリシー変更の記録なし。", + "save_success": "ポリシーが正常に保存されました", + "save_failed": "ポリシーの保存に失敗しました", + "load_failed": "ポリシーの��ードに失敗しました", + "block_direct_p2p_hint": "この組織のデバイスに適用されます。グローバルデフォルトは設定 → 接続戦略にあります。" + }, + "attestation": { + "title": "デバイス証明", + "subtitle": "デバイスID検証とハードウェアフィンガープリントを監視", + "verified": "検証済み", + "pending": "保留中", + "failed": "失敗", + "device_list": "証明記録", + "device_list_desc": "ハードウェアフィンガープリントとID検証ステータス", + "col_device": "デバイスID", + "col_hostname": "ホスト名", + "col_fingerprint": "フィンガープリント", + "col_status": "ステータス", + "col_last_check": "最終確認", + "col_actions": "アクション", + "no_records": "証明記録が見つかりません。", + "verify_success": "検証済みとしてマークされたデバイス", + "verify_failed": "デバイスの検証に失敗しました", + "revoke_success": "デバイス認証が取り消されました", + "revoke_failed": "認証の取り消しに失敗しました" + }, + "fleet": { + "title": "フリート管理", + "tab_resources": "リソース", + "tab_tasks": "タスク", + "tab_builder": "ビルダー", + "tab_compliance": "コンプライアンス", + "res_title": "リソースマッピング", + "res_all_types": "すべてのタイプ", + "res_type_printer": "プリンター", + "res_type_network_drive": "ネットワークドライブ", + "res_type_dns": "DNSサーバー", + "res_type_proxy": "プロキシ", + "res_type_vpn": "VPN", + "res_add": "リソースを追加", + "res_name": "リソース名", + "res_type": "タイプ", + "res_address": "アドレス / パス", + "res_target": "ターゲット", + "res_scope": "スコープ", + "res_scope_org": "組織", + "res_scope_group": "グループ", + "res_scope_device": "デバイス", + "res_scope_value": "スコープ値", + "res_status": "ステータス", + "res_active": "アクティブ", + "res_inactive": "非アクティブ", + "res_no_data": "リソースが見つかりません。'追加'をクリックしてください。", + "res_confirm_delete": "このリソースを削除してもよろしいですか?", + "task_title": "タスクスケジューラー", + "task_all_status": "すべてのステータス", + "task_status_pending": "保留中", + "task_status_running": "実行中", + "task_status_success": "成功", + "task_status_failed": "失敗", + "task_search": "タスクを検索…", + "task_create": "タスクを作成", + "task_name": "タスク名", + "task_type": "タイプ", + "task_type_script": "スクリプト", + "task_type_install": "インストール", + "task_type_update": "更新", + "task_type_restart": "再起動", + "task_type_deploy": "デプロイ", + "task_type_scan": "スキャン", + "task_targets": "ターゲット", + "task_targets_help": "デバイスIDまたはグループ名(カンマ区切り)", + "task_schedule": "スケジュール", + "task_schedule_once": "一度だけ", + "task_schedule_cron": "Cron", + "task_schedule_interval": "インターバル", + "task_schedule_value": "スケジュール値", + "task_script": "スクリプト / コマンド", + "task_retries": "リトライ", + "task_timeout": "タイムアウト (秒)", + "task_last_run": "最終実行", + "task_no_data": "タスクが見つかりません。新しいタスクを作成してください。", + "task_confirm_delete": "このタスクを削除してもよろしいですか?", + "task_output": "タスク出力", + "task_retry": "リトライ", + "builder_title": "ビジュアルワークフロービルダー", + "builder_select_workflow": "ワークフローを選択…", + "builder_new": "新規", + "builder_save": "保存", + "builder_export": "エクスポート", + "builder_execute": "実行", + "builder_dry_run": "テスト実行", + "builder_triggers": "トリガー", + "builder_conditions": "条件", + "builder_actions": "アクション", + "builder_results": "結果", + "builder_transforms": "変換", + "builder_properties": "プロパティ", + "builder_no_selection": "ノードを選択してプロパティを編集してください。", + "workflow_name": "ワークフロー名:", + "comp_title": "ソフトウェアコンプライアンス", + "comp_compliant": "準拠", + "comp_warning": "警告", + "comp_critical": "重大", + "comp_score": "平均スコア", + "comp_device": "デバイス", + "comp_hostname": "ホスト名", + "comp_os": "OS", + "comp_score_col": "スコア", + "comp_issues": "問題", + "comp_last_scan": "最終スキャン", + "comp_scan": "スキャン", + "comp_scan_all": "全てスキャン", + "comp_remediate": "修正", + "comp_remediate_confirm": "このデバイスで自動修正を実行しますか?", + "comp_no_data": "コンプライアンスデータなし。スキャンを実行してください。", + "save": "保存", + "cancel": "キャンセル", + "close": "閉じる", + "edit": "編集", + "delete": "削除", + "actions": "アクション", + "all_orgs": "すべての組織", + "builder_node_trigger_manual": "手動トリガー", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "イベントトリガー", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "サービスを再起動します", + "builder_node_action_file_deploy": "ファイルのデプロイ", + "builder_node_action_message": "メッセージを送信する", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "アラートの送信", + "builder_node_result_chain": "チェーンワークフロー", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "組織を選択してください…", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "ネットワークドライブ", + "type_dns": "DNSサーバー", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "リソースの追加", + "edit_resource": "リソースの編集", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "アドレス/パス", + "scope_org": "組織", + "scope_group": "グループ", + "scope_device": "デバイス", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "この項目を削除してもよろしいですか?", + "all_statuses": "すべてのステータス", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "失敗しました", + "search_tasks": "タスクを検索…", + "create_task": "タスクの作成", + "edit_task": "タスクの編集", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "ファイルの展開", + "task_type_registry": "Registry", + "target_devices": "対象デバイス", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "スクリプト/コマンド", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "読み込み中", + "no_output": "利用可能な出力がありません", + "error_loading": "データのロード中にエラーが発生しました", + "select_workflow": "ワークフローを選択してください…", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "手動トリガー", + "node_schedule": "Schedule", + "node_event": "イベントトリガー", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "サービスを再起動します", + "node_file_deploy": "ファイルのデプロイ", + "node_send_message": "メッセージを送信する", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "アラートの送信", + "node_chain": "チェーンワークフロー", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "すべての組織", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "デバイス", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "このデバイスで自動修復を実行しますか?" + }, + "scaling": { + "title": "スケーリングとリレー管理", + "tab_overview": "概要", + "tab_relays": "リレーノード", + "tab_rules": "割り当てルール", + "tab_capacity": "容量計画", + "arch_title": "ネットワークアーキテクチャ", + "arch_loading": "アーキテクチャ図を読み込み中...", + "stat_relay_nodes": "リレーノード", + "stat_total_devices": "デバイス合計", + "stat_active_sessions": "アクティブセッション", + "stat_bandwidth": "合計帯域幅", + "relay_health": "リレー状態", + "no_relays": "リレーノードが設定されていません。負荷分散のために最初のノードを追加してください。", + "relay_search": "リレーを検索...", + "relay_add": "リレーノードを追加", + "relay_edit": "リレーノードを編集", + "col_name": "名前", + "col_address": "アドレス", + "col_location": "場所", + "col_devices": "デバイス", + "col_sessions": "セッション", + "col_bandwidth": "帯域幅", + "col_status": "ステータス", + "col_actions": "アクション", + "col_priority": "優先度", + "col_rule_name": "ルール名", + "col_match": "一致", + "col_target_relay": "ターゲットリレー", + "col_fallback": "フォールバック", + "status_online": "オンライン", + "status_degraded": "劣化", + "status_offline": "オフライン", + "status_enabled": "有効", + "status_disabled": "無効", + "confirm_delete_relay": "このリレーノードを削除してもよろしいですか?", + "confirm_delete_rule": "この割り当てルールを削除してもよろしいですか?", + "rules_hint": "割り当てルールは、特定のデバイスグループをどのリレーサーバーが処理するかを決定します。ルールは優先度順(最低が最初)で評価されます。", + "rule_add": "ルールを追加", + "rule_edit": "ルールを編集", + "rule_match_type": "一致タイプ", + "match_subnet": "サブネット", + "match_group": "デバイスグループ", + "match_tag": "デバイスタグ", + "match_location": "場所", + "rule_match_value": "一致値", + "fallback_master": "マスターサーバー", + "fallback_nearest": "最寄りのリレー", + "relay_max_sessions": "最大セッション数", + "relay_max_bandwidth": "最大帯域幅 (Mbps)", + "cap_tiers": "容量ティア", + "cap_loading": "容量データを読み込み中...", + "cap_recommendations": "推奨事項", + "cap_no_recs": "推奨事項はありません。", + "cap_planning": "インフラ計画", + "cap_config": "設定", + "cap_max_devices": "最大デバイス数", + "cap_max_sessions": "最大セッション数", + "cap_current": "現在", + "cap_utilization": "利用率", + "cap_tier_devices": "デバイス容量", + "cap_tier_sessions": "セッション容量", + "cap_tier_bandwidth": "帯域幅容量", + "cap_single_sqlite": "単一サーバー (SQLite)", + "cap_single_pg": "単一サーバー (PostgreSQL)", + "cap_master_3": "マスター + 3 リレー", + "cap_master_10": "マスター + 10 リレー", + "rec_no_relays": "リレーノードが設定されていません。パフォーマンスと冗長性の向上のためにリレーの追加を検討してください。", + "rec_devices_high": "デバイス利用率が高いです。リレーノードの追加を検討してください。", + "rec_sessions_high": "セッション容量が限界に近づいています。インフラのアップグレードを検討してください。", + "rec_cpu_high": "一部のリレーノードでCPU使用率が高いです。負荷分散を検討してください。", + "rec_all_good": "すべてのシステムが正常なパラメータ内で動作しています。アクションは不要です。", + "save": "保存", + "cancel": "キャンセル", + "edit": "編集", + "delete": "削除", + "close": "閉じる", + "no_rules": "割り当てルールがありません。", + "relays_info_banner": "このリストは情報提供です。クライアントが実際に使用するリレー サーバーは、BetterDesk サーバー上の RELAY_SERVERS 環境変数を介して構成されます。", + "relay_name_address_required": "名前と住所は必須です。", + "relay_save_failed": "中継ノードの保存に失敗しました。", + "relay_delete_failed": "中継ノードの削除に失敗しました。", + "relay_saved": "リレーノードが保存されました。", + "relay_deleted": "リレーノードが削除されました。", + "rule_name_value_required": "ルール名と一致値は必須です。", + "rule_save_failed": "ルールの保存に失敗しました。", + "rule_delete_failed": "ルールの削除に失敗しました。", + "rule_saved": "ルールが保存されました。", + "rule_deleted": "ルールが削除されました。" + }, + "cross_platform": { + "title": "クロスプラットフォーム互換性", + "tab_matrix": "互換性マトリックス", + "tab_distribution": "分布", + "tab_protocols": "プロトコル", + "tab_limitations": "制限事項", + "matrix_hint": "すべてのサポートプラットフォームの機能サポートマトリックス。緑=完全サポート、黄=部分的、灰=利用不可、青=計画中。", + "col_feature": "機能", + "legend_full": "完全サポート", + "legend_partial": "部分的サポート", + "legend_none": "利用不可", + "legend_planned": "計画中", + "platform_breakdown": "プラットフォーム分布", + "arch_breakdown": "アーキテクチャ分布", + "version_breakdown": "バージョン分布", + "summary": "概要", + "total_devices": "デバイス合計", + "unique_platforms": "プラットフォーム", + "unique_archs": "アーキテクチャ", + "unique_versions": "クライアントバージョン", + "no_devices": "まだデバイスが登録されていません。", + "protocols_hint": "プロトコル機能ネゴシエーションにより、各クライアントはサポートされている機能のみを受信します。サーバーは報告された機能に基づいて動作を適応させます。", + "capability_negotiation": "機能ネゴシエーション", + "codec_support": "コーデックサポート(オンラインデバイス)", + "feature_support": "機能サポート(オンラインデバイス)", + "no_codec_data": "オンラインデバイスからのコーデックデータなし。", + "no_feature_data": "オンラインデバイスからの機能データなし。", + "protobuf_schema": "ClientCapabilities Protobufスキーマ", + "diagram_client": "クライアント", + "diagram_server": "BetterDeskサーバー", + "diagram_peer": "リモートピア", + "limitations_hint": "各プラットフォームには利用可能な機能に影響する特定の制限があります。デプロイ計画時に確認してください。", + "feat_desktop_client": "デスクトップクライアント", + "feat_background_agent": "バックグラウンドエージェント", + "feat_remote_target": "リモートターゲット", + "feat_screen_capture": "スクリーンキャプチャ", + "feat_input_injection": "入力インジェクション", + "feat_file_transfer": "ファイル転送", + "feat_clipboard_sync": "クリップボード同期", + "feat_audio_streaming": "オーディオストリーミング", + "feat_chat": "チャット", + "feat_h264": "H.264コーデック", + "feat_vp9": "VP9コーデック", + "feat_av1": "AV1コーデック", + "feat_cdap_agent": "CDAPエージェント", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "ウェブブラウザ", + "platform_chromeos": "ChromeOS", + "status_production": "本番", + "status_testing": "テスト", + "status_planned": "計画中", + "status_limited": "制限付き", + "status_experimental": "実験的", + "limit_win_uac": "サービスインストールとセキュアデスクトップでの入力インジェクションにUAC昇格が必要です。", + "limit_win_service": "NSSMサービスとして実行されます。インストールには管理者権限が必要です。", + "limit_win_firewall": "Windowsファイアウォールルールでポート21115-21119をリレー接続用に許可する必要があります。", + "limit_linux_wayland": "Waylandコンポジタはプログラムによるスクリーンキャプチャを制限します。PipeWireポータルAPIが必要です。", + "limit_linux_pipewire": "オーディオキャプチャにPipeWireが必要です。PulseAudioフォールバックは利用可能ですが制限があります。", + "limit_linux_arm": "ARM64ビルド利用可能。一部のコーデックはソフトウェアデコードを使用する場合があります(低速)。", + "limit_mac_screen": "システム設定 > プライバシーとセキュリティで画面収録の許可が必要です。", + "limit_mac_signing": "配布にはApple Developer IDでの署名が必要です。", + "limit_mac_notarize": "macOS Gatekeeper用に公証が必要です(App Store外配布)。", + "limit_android_projection": "MediaProjection APIは各キャプチャセッションでユーザーの同意が必要です。", + "limit_android_accessibility": "入力インジェクションにAccessibilityServiceが必要です。Android 14+から制限されています。", + "limit_android_battery": "バックグラウンドサービスはDozeモードで制限されます。バッテリー最適化の除外が必要な場合があります。", + "limit_ios_capture": "Appleはバックグラウンドでのスクリーンキャプチャを禁止しています。ビューアーモードのみサポートされています。", + "limit_ios_input": "入力インジェクションは許可されていません。リモート表示とチャットのみ。", + "limit_ios_appstore": "App Store経由のみの配布。ベータテストにTestFlight。", + "limit_web_https": "WebCodecs APIとWebRTCはHTTPSが必要です。HTTPはJMuxerにフォールバックします(コーデック制限)。", + "limit_web_codec": "コーデックサポートはブラウザに依存。H.264は広くサポートされ、VP9/AV1はブラウザにより異なります。", + "limit_web_performance": "ブラウザサンドボックスによるパフォーマンス制限。直接ハードウェアアクセラレーションなし。", + "limit_chrome_crostini": "フルエージェントサポートはCrostini Linuxコンテナ内のみ。", + "limit_chrome_pwa": "PWAモードはウェブ機能のみ提供。ネイティブエージェント機能なし。", + "limit_chrome_input": "Crostiniコンテナ外での入力インジェクションはサポートされていません。", + "feat_session_recording": "セッション録画", + "feat_multi_monitor": "マルチモニター", + "feat_unattended_access": "無人アクセス", + "limit_win_virtual_account": "サービスは LocalSystem の代わりに分離された仮想アカウントで実行されます。カスタムログパスには ACL の調整が必要な場合があります。", + "limit_linux_unprivileged": "サービスは systemd ハードニング(NoNewPrivileges、ProtectSystem=strict)を備えた専用の非特権「betterdesk」アカウントで実行されます。" + }, + "security_audit": { + "title": "セキュリティ監査", + "tab_overview": "概要", + "tab_events": "監査イベント", + "tab_hardening": "ハーデニング", + "tab_vulnerabilities": "脆弱性", + "security_score": "セキュリティスコア", + "failed_logins": "ログイン失敗(24h)", + "active_bans": "アクティブバン", + "api_keys": "APIキー", + "old_keys": "古いキー(>90日)", + "security_checks": "セキュリティチェック", + "tls_status": "TLSステータス", + "pass": "合格", + "warning": "警告", + "fail": "失敗", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket セキュア", + "enabled": "有効", + "disabled": "無効", + "all_events": "全イベント", + "event_login_failed": "ログイン失敗", + "event_login_success": "ログイン成功", + "event_peer_banned": "デバイスバン", + "event_ip_banned": "IPバン", + "event_config_changed": "設定変更", + "event_key_created": "キー作成", + "refresh": "更新", + "col_time": "時刻", + "col_action": "アクション", + "col_actor": "アクター", + "col_target": "ターゲット", + "col_ip": "IPアドレス", + "col_details": "詳細", + "no_events": "監査イベントが見つかりません。", + "hardening_hint": "BetterDeskデプロイのセキュリティハーデニング優先事項。重大度順。", + "no_hardening": "ハーデニング項目なし。", + "vuln_hint": "依存関係脆弱性スキャン結果。定期的にnpm auditを実行してください。", + "no_vulns": "脆弱性は見つかりませんでした。依存関係は安全です。" + }, + "languages": { + "title": "言語管理", + "total_languages": "総言語数", + "fully_translated": "完全に翻訳", + "needs_review": "見直しが必要", + "reference_keys": "参照キー", + "no_languages": "言語ファイルが見つかりません。", + "badge_reference": "Reference", + "badge_review": "見直しが必要", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "ビューが見つかりません", + "fix_missing": "Fix Missing", + "missing_keys_for": "のキーがありません", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "そして{n}もっと...", + "all_keys_present": "鍵はすべて揃っています!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code} の不足しているキーは手動で翻訳する必要があります。", + "no_fix_needed": "紛失したキーを修正する必要はありません。" + }, + "resource_control": { + "title": "リソース制御", + "tab_overview": "概要", + "tab_usb": "USB Control", + "tab_optical": "光学ドライブ", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "リソース割り当て", + "compliance_by_category": "カテゴリ別のコンプライアンス", + "device_compliance": "デバイスのコンプライアンス", + "search_devices": "デバイスを検索...", + "col_device": "デバイス", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "総デバイス数", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "遵守率", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "設定する", + "no_devices": "デバイスが見つかりません", + "usb_title": "USB ポート制御", + "usb_hint": "選択したデバイスまたは組織全体のデフォルト ポリシーに対する USB ストレージ デバイス アクセスを制御します。", + "usb_storage_policy": "USB ストレージ ポリシー", + "usb_whitelist": "ホワイトリストに登録されたデバイス (1 行に 1 つ)", + "usb_whitelist_hint": "VID:PID (例: 0781:5583)", + "usb_audit_log": "USB デバイスの接続をログに記録します", + "optical_title": "光学ドライブ制御", + "optical_hint": "選択したデバイスの CD/DVD/Blu-ray ドライブへのアクセスを制御します。", + "optical_policy": "光学ドライブポリシー", + "optical_audit_log": "光学ドライブへのアクセスをログに記録する", + "monitors_title": "モニター管理", + "monitors_hint": "最大数、解像度の強制、明るさ、電源スケジュールなどのモニター設定を構成します。", + "monitors_max_count": "最大モニター数 (0 = 無制限)", + "monitors_max_hint": "0は制限なしを意味します", + "monitors_resolution": "最大解像度", + "monitors_brightness": "明るさの制限", + "monitors_power_schedule": "電源スケジュール", + "monitors_power_hint": "例:オフ:22:00-06:00", + "disks_title": "ディスクアクセス制御", + "disks_hint": "読み取り専用モード、暗号化の強制、パーティションの可視性などのディスク アクセス ポリシーを構成します。", + "disks_readonly": "読み取り専用モードを強制する", + "disks_encryption": "暗号化が必要 (BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T.を有効にするモニタリング", + "disks_hidden": "隠しパーティション", + "disks_hidden_hint": "カンマ区切りのドライブ文字またはマウントポイント", + "quotas_title": "リソース割り当て", + "quotas_hint": "選択したデバイスのユーザーごとの CPU、RAM、帯域幅、およびディスク クォータを設定します。", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "帯域幅制限 (Mbps)", + "quotas_bandwidth_hint": "0 = 無制限", + "quotas_disk_quota": "ディスク クォータ (GB)", + "quotas_disk_hint": "0 = 無制限", + "quotas_process_whitelist": "プロセスのホワイトリス�� (1 行に 1 つ)", + "quotas_process_hint": "例: chrome.exe、code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "ホワイトリストのみ", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "ソフトウェアのアップデート", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "インストールされているバージョン", + "latest_version": "Latest version", + "status": "Status", + "check_now": "アップデートをチェックする", + "checking": "Checking…", + "up_to_date": "最新の状態", + "update_available": "利用可能なアップデート", + "changelog": "Release Notes", + "no_changelog": "リリースノートはありません", + "files_changed": "ファイルが変更されました", + "files": "ファイル", + "changes_unavailable": "ファイル変更リストをロードできませんでした。引き続きアップデートをインストールできます。", + "create_backup": "アップデートする前にバックアップを作成する", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "アップデートをインストール中…", + "creating_backup": "バックアップを作成しています…", + "downloading": "ファイルをダウンロード中…", + "install_success": "アップデートは正常にインストールされました。コンソールを再起動しています…", + "install_failed": "アップデートのインストールに失敗しました", + "restarting": "コンソールが再起動するのを待っています…", + "restart_complete": "コンソールが正常に再起動されました", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "更新バージョンが選択されていません。まず更新を確認してください。", + "backups_title": "バックアップの更新", + "backups_desc": "各アップデートの前に自動的に作成されるアップデート前のバックアップ", + "no_backups": "更新バックアップが見つかりません", + "restore": "Restore", + "restore_confirm": "このバックアップから復元してもよろしいですか?変更されたファイルは上書きされます。", + "restore_success": "バックアップは正常に復元されました。コンソールを再起動しています…", + "baseline_set": "ベースラインセット", + "commits_behind": "後ろにコミットする", + "total_files": "総ファイル数", + "applied": "Applied", + "failed": "失敗しました", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Goサーバー", + "component_agent": "Agent", + "component_scripts": "スクリプトとDocker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "移動を確認中…", + "go_not_found": "Goがインストールされていません", + "go_check_failed": "Go の可用性を確認できませんでした", + "server_building": "Go server をコンパイル中… これには数分かかる場合があります。", + "server_built": "サーバーバイナリがコンパイルされました", + "server_build_failed": "サーバーのコンパイルに失敗しました", + "server_stale_title": "サーバーのバイナリが古くなっています", + "server_stale_desc": "Go server ソースは更新されましたが、実行中のバイナリは再構築されませんでした。今すぐ再構築して、セキュリティとライブラリの更新を適用します。", + "rebuild_server": "サーバーバイナリを再構築する", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "サーバーバイナリが再構築され、再起動されました", + "rebuild_server_failed": "サーバーバイナリの再構築に失敗しました", + "server_deployed": "サーバーバイナリがデプロイされました", + "server_deploy_failed": "サーバーのデプロイに失敗しました", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "サーバーソースをダウンロード中…", + "delete": "削除", + "delete_confirm": "バックアップ {name} を完全に削除しますか?これを元に戻すことはできません。", + "delete_success": "バックアップが削除されました", + "delete_failed": "バックアップの削除に失敗しました", + "retention_label": "最新のバックアップを N 個保持する", + "retention_hint": "古いバックアップは更新のたびに自動的に削除されます。すべてのバックアップを保持するには 0 を使用します。", + "retention_saved": "保存設定が保存されました", + "retention_invalid": "保持期間は 0 ~ 1000 の整数でなければなりません", + "retention_required_for_prune": "最初に 0 より大きい保持値を設定します", + "prune_now": "Apply now", + "prune_confirm": "{n} の最新のバックアップのみを保持し、残りは削除しますか?", + "prune_done": "プルーニングされた {n} バックアップ", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "更新方法", + "strategy_download": "事前に構築されたバイナリをダウンロードする", + "strategy_compile": "ソースからコンパイルする", + "both_available": "ダウンロードとコンパイル", + "download_available": "ダウンロード可能", + "no_method": "更新方法がありません", + "no_release": "No release", + "available": "利用可能", + "server_downloading": "サーバーバイナリをダウンロード中…", + "server_downloaded": "サーバーバイナリがダウンロードされました", + "server_download_failed": "サーバーバイナリのダウンロードに失敗しました", + "server_download_note": "事前に構築されたバイナリは GitHub Releases からダウンロードされます。通常、これには 1 分もかかりません。", + "install_go_hint": "https://go.dev/dl/ から Go をインストールしてコンパイルを有効にするか、事前に構築されたバイナリを含むリリースを公開します", + "strategy_install_go": "Go を自動インストー���してコンパイルする", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "自動リビルドの準備完了", + "toolchain_ready": "ツールチェーンがインストールされています", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Go ツールチェーンをダウンロード中…", + "toolchain_failed": "Go ツールチェーンのインストールに失敗しました", + "modal_title": "アップデートをインストールしています", + "modal_done_title": "アップデート完了", + "modal_close": "閉じる", + "modal_reload_now": "コンソールをリロードする", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "コンソールファイル", + "phase_server": "サーバー段階", + "phase_restart": "再起動", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "バックアップはスキップされました (ユーザーの選択による)", + "server_skipped": "Go server スキップされました", + "server_not_selected": "Go server not selected", + "server_processing": "Go server 更新を処理しています…", + "no_restart_needed": "再起動は必要ありません", + "complete": "アップデートが適用されました", + "complete_summary": "アップデートは正常に適用されました。", + "complete_with_errors": "アップデートは完了しましたが、いくつかの手順が失敗しました。詳細は以下をご覧ください。", + "modal_done_with_errors_title": "アップデートはエラーで終了しました", + "console_will_restart": "コンソールプロセスが再起動されます…", + "restart_complete_msg": "コンソールの再起動が完了しました。 「再ロード」をクリックして新しいバージョンをロードします。ページは 8 秒後に自動的にリロードされます。", + "refresh_recommended": "静的アセットが変更されました - ページをリロードして新しい UI を表示します。", + "confirm_title": "アップデートを適用する", + "confirm_with_backup": "アップデート前のバックアップが自動的に作成されます。", + "confirm_no_backup": "バックアップは作成されません (自己責任で行ってください)。" + }, + "permissions": { + "title": "権限", + "subtitle": "ロールベースの権限とカスタムオーバーライドを管理する", + "info_title": "権限の仕組み", + "info_desc": "各役割にはデフォルトの権限があります。以下で切り替えることで、役割ごとに個別の権限を追加または削除できます。カスタム オーバーライドは強調表示され、いつでもデフォルトに戻すことができます。", + "select_role": "役割の選択", + "select_role_placeholder": "役割を選択してください...", + "reset_overrides": "すべてのオーバーライドをリセット", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "サーバーレベル", + "custom": "Custom", + "default": "Default", + "revert": "デフォルトに戻す", + "saved": "許可が更新されました", + "reverted": "デフォルトに戻しました", + "all_reverted": "すべてのオーバーライドが元に戻されました", + "confirm_reset": "このロールのすべてのカスタム オーバーライドをデフォルトにリセットしますか?", + "empty_title": "役割を選択してください", + "empty_desc": "上のドロップダウンからロールを選択して、その権限を表示および管理します。", + "locked_title": "Super Admin", + "locked_desc": "スーパー管理者にはデフォルトですべての権限があり、カスタマイズすることはできません。", + "cat_device": "デバイス", + "cat_user": "Users", + "cat_server": "サーバー", + "cat_org": "組織", + "cat_audit": "監査とモニタリング", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "デバイスの表示", + "perm_device_connect": "デバイスに接続する", + "perm_device_edit": "デバイスの編集", + "perm_device_delete": "デバイスの削除", + "perm_device_ban": "デバイスの禁止/禁止解除", + "perm_device_change_id": "デバイスIDの変更", + "perm_user_view": "ユーザーを表示する", + "perm_user_create": "ユーザーの作成", + "perm_user_edit": "ユーザーの編集", + "perm_user_delete": "ユーザーを削除する", + "perm_server_config": "サーバー構成", + "perm_server_keys": "API キーを管理する", + "perm_org_create": "組織を作成する", + "perm_org_edit": "組織の編集", + "perm_org_delete": "組織の削除", + "perm_org_manage_users": "組織のユーザーを管理する", + "perm_org_manage_devices": "組織のデバイスを管理する", + "perm_audit_view": "監査ログを表示する", + "perm_metrics_view": "指標の表示", + "perm_blocklist_edit": "ブロックリストの編集", + "perm_cdap_view": "CDAP デバイスを表示する", + "perm_cdap_command": "CDAP コマンドを送信する", + "perm_cdap_terminal": "CDAP 端末アクセス", + "perm_cdap_files": "CDAP ファイル アクセス", + "perm_enrollment_manage": "登録の管理", + "perm_enrollment_approve": "登録の承認", + "perm_chat_access": "Chat access", + "perm_branding_edit": "ブランドの編集", + "perm_server_attestation": "サーバー性能認定" + }, + "notifications": { + "title": "通知", + "empty": "新しい通知はありません", + "mark_all_read": "すべて既読としてマークする", + "see_all": "すべてのヘルプリクエストを表示", + "help_request": "ヘルプリクエスト", + "just_now": "just now" + }, + "accessibility": { + "title": "アクセシビリティ", + "subtitle": "視覚、動き、読みやすさに合わせてコンソールを調整します。", + "close": "アクセシビリティメニューを閉じる", + "profiles": "クイックプロファイル", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "大きな文字、強いコントラスト、フォーカス。", + "profile_dyslexia": "快適な読書", + "profile_dyslexia_hint": "読みやすいフォントと広い間隔。", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "トランジションを減らし、アニメーションを一時停止します。", + "profile_color_assist": "カラーサポート", + "profile_color_assist_hint": "カラー フィルター、ラベル、強調表示されたリンク。", + "reading": "読み取り", + "font_size": "文字サイズ", + "line_height": "行の高さ", + "letter_spacing": "文字間隔", + "word_spacing": "単語の間隔", + "readable_font": "読みやすいフォント", + "readable_font_hint": "広くて馴染みのある文字の形を使用します。", + "dyslexia_spacing": "ディスレクシアの間隔", + "dyslexia_spacing_hint": "長いテキストの場合は余分なスペースを追加します。", + "visual": "表示", + "contrast": "コントラスト", + "contrast_normal": "Normal", + "contrast_high_dark": "ハイコントラストダーク", + "contrast_high_light": "ハイコントラストライト", + "contrast_yellow_black": "黒地に黄色", + "color_filter": "色覚フィルター", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "色の彩度", + "underline_links": "リンクに下線を引く", + "underline_links_hint": "色に依存せずにリンクを可視化します。", + "highlight_links": "ハイライトアクション", + "highlight_links_hint": "リンクとボタンのアウトラインを示します。", + "highlight_headings": "見出しを強調表示する", + "highlight_headings_hint": "セクションのタイトルをカラーバーでマークします。", + "hide_media": "Dim media", + "hide_media_hint": "画像、ビデオ、キャンバスを暗くします。", + "interaction": "操作", + "strong_focus": "強い集中力", + "strong_focus_hint": "大きなキーボードのフォーカスリングが表示されます。", + "large_cursor": "大きなカーソル", + "large_cursor_hint": "よ���大きなハイコントラスト ポインターを使用します。", + "reduce_motion": "動きを減らす", + "reduce_motion_hint": "トランジションを短縮し、スクロールをスムーズにします。", + "pause_animations": "アニメーションを一時停止する", + "pause_animations_hint": "視覚的な動きのループを停止し��す。", + "reading_guide": "読書ガイド", + "reading_guide_hint": "ポインターを明るい線で追跡します。", + "reading_mask": "読書マスク", + "reading_mask_hint": "ポインタの上下のコンテンツを暗くします。", + "preview": "プレビュー", + "preview_title": "オペレーターワークスペースのプレビュー", + "preview_text": "このメニューを閉じる前に、テキスト、リンク、コントロール、ステータス ラベルが読みやすいかどうかを確認してください。", + "preview_link": "デバイスの詳細リンク", + "preview_status": "Online", + "preview_button": "主なアクション", + "preview_secondary": "Secondary", + "reset": "リセット", + "done": "完了" + }, + "server_mgmt": { + "title": "サーバー管理", + "subtitle": "BetterDesk コンソールホスト用の Cockpit 風コントロールパネル(ベータ)。", + "beta_tooltip": "ベータ機能 — 現在開発中です。", + "notice_title": "ベータ版機能", + "notice_body": "これらのツールは、BetterDesk コンソール プロセスが存在するホスト上で実行されます。すべての操作が監査されます。機能の範囲は将来のリリースで拡大される予定です。", + "tab_overview": "概要", + "tab_terminal": "ターミナル", + "tab_files": "ファイル", + "tab_services": "サービス", + "cpu": "CPU", + "memory": "メモリ", + "load": "負荷平均", + "disks": "ディスク", + "history": "履歴 (最後の 60 サンプル)", + "host_info": "Host info", + "cores": "cores", + "uptime": "稼働時間", + "no_disks": "利用可能なディスクデータがありません", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY利用可能", + "term_connect": "接続", + "term_disconnect": "切断", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "接続エラー", + "term_warning": "コマンドは、コンソール プロセスを所有するユーザーとして実行されます。 sudoers ルールを追加して昇格を有効にします。", + "term_hint": "ヒント: エスカレーションするには、「sudo -i」と入力します (sudoers の設定が必要です)。", + "term_lib_failed": "端末ライブラリのロードに失敗しました", + "files_up": "一つ上のレベルへ", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "名前", + "files_size": "サイズ", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "空のディレクトリ", + "files_error": "ディレクトリのリストに失敗しました", + "read_failed": "ファイルの読み取りに失敗しました", + "save_failed": "ファイルの保存に失敗しました", + "rename_failed": "名前の変更に失敗しました", + "delete_failed": "削除に失敗しました", + "delete_confirm": "このエントリを削除しますか?", + "mkdir_prompt": "新しいフォルダー名:", + "mkdir_failed": "フォルダーの作成に失敗しました", + "file_saved": "ファイルが保存されました", + "binary_warn": "バイナリ ファイル - プレビューのみ", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "検索サービス…", + "svc_name": "サービス", + "svc_state": "状態", + "svc_description": "Description", + "svc_empty": "サービスが見つかりませんでした", + "svc_load_failed": "サービスのロードに失敗しました", + "svc_action_failed": "アクションが失敗しました", + "svc_confirm": "Run", + "svc_start": "開始", + "svc_stop": "停止", + "svc_restart": "再起動", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk エージェントをダウンロード", + "choose_platform": "プラットフォームを選択してください", + "choose_platform_hint": "オペレーティング システムに一致するインストーラーを選択します。", + "download": "ダウンロード", + "building": "建物…", + "failed": "ビルドに失敗しました", + "need_help": "助けが必要ですか?", + "powered_by": "提供元" + }, + "server_attestation": { + "title": "サーバー性能認定", + "subtitle": "CPU、RAM、ディスク使用率が 80% に達した時点での並行リモート接続容量を測定するパフォーマンスベンチマーク。", + "warning_title": "負荷テスト", + "warning_body": "ベンチマークはシグナルサーバーとリレーサーバーへの並列 WebSocket 接続をシミュレートします。本番環境に負荷がかかるため、オフピーク時間帯に実行してください。", + "run_benchmark": "ベンチマークを実行", + "abort": "中止", + "download_report": "JSON レポートをダウンロード", + "last_test": "最後のテスト", + "no_test_yet": "まだベンチマークが実行されていません", + "max_connections": "最大接続数", + "threshold_80": "80% しきい値 — 最終メトリクス", + "disk": "ディスク", + "ramp_chart": "負荷ランプチャート", + "connections": "接続数", + "connections_short": "接続", + "tier_guide_title": "各ティアの意味は?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1〜25 並行接続 — 小型 VPS(1〜2 vCPU、2〜4 GB RAM)。", + "tier_iron_desc": "26〜75 接続 — ミッドレンジサーバー(2〜4 vCPU、4〜8 GB RAM)。", + "tier_platinum_desc": "76〜200 接続 — 高性能サーバー(4〜8 vCPU、8〜16 GB RAM)。", + "tier_titanium_desc": "201〜400 接続 — エンタープライズインフラ(8+ vCPU、16〜32 GB RAM)。", + "tier_obsidian_desc": "401+ 接続 — ターボクラス: 専用ハードウェア、16+ vCPU、32+ GB RAM、NVMe。", + "docker_note": "注意: Docker では CPU/RAM メトリクスは物理ホストではなくコンテナーの制限を反映する場合があります。", + "badge_tooltip": "BetterDesk サーバー性能認定 — サーバーパフォーマンス認定", + "confirm_run": "このベンチマークはシミュレーション接続でサーバーの負荷テストを行います。続行しますか?", + "starting": "開始中…", + "complete": "ベンチマーク完了", + "signal_peers": "シグナルピア", + "relay_sessions": "リレーセッション", + "page_error": "サーバー性能認定ページの読み込みに失敗しました", + "mode_estimated": "推定値(WebSocket 到達不可)", + "incomplete": "ベンチマーク終了したが有効なティアが取得できませんでした" + }, + "commercialization": { + "title": "商用化", + "subtitle": "サポートパッケージ、課金セッション、作業レポート", + "alpha_badge": "ALPHA", + "alpha_tooltip": "初期機能 — 課金とパッケージは開発中です。", + "tabs": { + "overview": "概要", + "packages": "パッケージと契約", + "sessions": "セッション", + "reports": "レポート", + "settings": "詳細設定" }, - "branding": { - "identity_title": "ブランドアイデンティティ", - "identity_desc": "コンソール全体に表示されるアプリケーション名と説明をカスタマイズする", - "app_name": "アプリケーション名", - "app_description": "アプリケーションの説明", - "logo_title": "Logo", - "logo_desc": "サイドバーとログインページでのロゴの表示方法を選択します", - "logo_type_icon": "素材アイコン", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "マテリアル アイコンの名前を入力します (DNS、クラウド、セキュリティなど)�� fonts.google.com/icons を参照してください。", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "SVG マークアップをここに貼り付けます。パスとスタイルを含む完全な 要素をサポートします。", - "logo_image_upload": "画像をアップロードする", - "logo_image_choose": "画像ファイルを選択してください", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "無効なファイルタイプです。 PNG、JPG、GIF、WebP、または SVG を使用します。", - "preview": "Preview", - "colors_title": "カラースキーム", - "colors_desc": "��ラーパレットをカスタマイズします。デフォルトを使用する場合は空のままにしてください。", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "アクセントカラー", - "colors_borders": "Borders", - "import_export_title": "インポート/エクスポート", - "import_export_desc": "テーマを JSON ファイルとして保存するか、別のインスタンスからテーマをインポートします", - "export_theme": "テーマのエクスポート", - "import_theme": "テーマのインポート", - "reset_defaults": "デフォルトにリセット", - "save_branding": "ブランディングの保存", - "saved": "ブランド設定が正常に保存されました。再読み込み中...", - "exported": "テーマがエクスポートされました", - "imported": "テーマは正常にインポートされました。再読み込み中...", - "import_error": "テーマのインポートに失敗しました。無効なファイル形式です。", - "reset_confirm": "ブランドをデフォルトにリセットしてもよろしいですか?これを元に戻すことはできません。", - "reset_success": "ブランドがデフォルトにリセットされました。再読み込み中...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "ブランドロゴとして表示される主なテキスト", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "ロゴの下の二次テキスト (例: 製品名やキャッチフレーズ)", - "logo_upload_success": "ロゴが正常にアップロードされました。", - "typography_title": "Typography", - "typography_desc": "見出しと本文のフォントを選択します。フォントはセルフホスティングのためにサーバーにダウンロードされます。", - "font_heading": "見出しフォント", - "font_heading_hint": "見出し(H1~H6)とテキストロゴに使用されます。", - "font_body": "Body Font", - "font_body_hint": "本文テキストと UI 要素に使用されます", - "font_search_placeholder": "フォントを検索...", - "font_system_default": "システムのデフォルト", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "サーバーにダウンロードされたフォント", - "powered_by": "Powered by", - "background_title": "背景と外観", - "background_desc": "コンソールの壁紙、グラデーション、または単色背景を設定します。カードはその上に表示されます。", - "bg_type_none": "なし", - "bg_type_color": "単色", - "bg_type_gradient": "グラデーション", - "bg_type_image": "画像", - "bg_color": "背景色", - "bg_gradient": "CSS グラデーション", - "bg_gradient_hint": "有効な CSS グラデーション(例: linear-gradient(135deg, #1e293b, #0f172a))", - "bg_image_upload": "背景画像をアップロード", - "bg_image_choose": "画像ファイルを選択", - "bg_image_hint": "PNG、JPG、WebP または GIF。最大 8 MB。サーバーに保存されます。", - "bg_image_url": "画像パス / URL", - "bg_size": "画像のサイズ調整", - "bg_size_cover": "カバー(画面を埋める)", - "bg_size_contain": "コンテイン(収める)", - "bg_size_auto": "自動(元のサイズ)", - "bg_blur": "背景ぼかし", - "bg_overlay": "ダークオーバーレイ", - "bg_overlay_hint": "背景を暗くしてテキストの読みやすさを向上させます。", - "bg_image_too_large": "画像が大きすぎます。最大サイズは 8 MB です。", - "bg_image_invalid_type": "無効なファイル形式です。PNG、JPG、WebP または GIF を使用してください。", - "bg_upload_success": "背景画像を正常にアップロードしました。", - "login_title": "ログインページ", - "login_desc": "ログイン画面の見出し、サブタイトル、背景をカスタマイズします。", - "login_heading": "ログイン見出し", - "login_heading_placeholder": "お帰りなさい", - "login_subheading": "ログインサブタイトル", - "login_subheading_placeholder": "アカウントにサインイン", - "login_bg_inherit": "コンソールと同じ", - "agent_title": "エージェントダウンロードページ", - "agent_desc": "エンドユーザーに表示される公開エージェントダウンロードポータルをカスタマイズします。", - "agent_show_powered": "「Powered by BetterDesk」を表示", - "agent_show_powered_hint": "ダウンロードポータルのフッターに BetterDesk のクレジットを表示します。", - "footer_title": "フッターと著作権", - "footer_desc": "ログイン画面とコンソールサイドバーに表示されるカスタムフッターテキストを追加します。", - "footer_text": "フッターテキスト", - "footer_text_hint": "著作権表示や会社名などを入力します。", - "show_powered": "「BetterDesk」クレジットを表示", - "show_powered_hint": "ログインフッターとサイドバーに BetterDesk の名前とバージョンを表示します。", - "custom_css_title": "カスタム CSS", - "custom_css_desc": "詳細設定: コンソール全体とログインページに適用されるカスタム CSS を注入します。", - "custom_css_hint": "慎重に使用してください。無効または安全でないルールはサニタイズされます。最大 20,000 文字。" + "clock": { + "title": "サーバー時刻 (NTP)", + "check_now": "今すぐ確認", + "unsynced": "サーバー時計が同期されていません — 課金セッションがブロックされる場合があります" }, - "device_detail": { - "tab_overview": "概要", - "tab_tags": "タグとメモ", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "接続", - "section_manage": "管理", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "このデバイスは禁止されてい���す", - "no_reason": "理由は示されていない", - "tags": "Tags", - "no_tags": "このデバイスにはタグが割り当てられていません", - "tag_placeholder": "タグ名を入力してください...", - "add_tag": "Add", - "tag_exists": "このタグはすでに存在します", - "notes": "Notes", - "notes_placeholder": "このデバイスに関するメモを追加...", - "danger_zone": "Danger Zone", - "action_connect_web": "ウェブリモート", - "action_connect_web_desc": "ブラウザのリモートデスクトップ経由で接続する", - "action_native_remote": "BetterDesk リモート", - "action_native_remote_desc": "ネイティブ JPEG ストリーム — プラグインは必要ありません", - "action_connect_desktop": "デスクトップクライアント", - "action_connect_desktop_desc": "デスクトップクライアントアプリで開く", - "action_change_id_desc": "機器登録IDを変更する", - "action_ban_desc": "このデバイスの接続をブロックする", - "action_unban_desc": "このデバイスの再接続を許可します", - "action_delete_desc": "このデバイスを完全に削除します", - "tab_hardware": "Hardware", - "tab_metrics": "メトリクス", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "エンコード機能", - "section_live_metrics": "ライブメトリクス", - "section_current_usage": "現在の使用状況", - "section_usage_history": "利用履歴", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU周波数", - "total_memory": "総メモリ", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "更新されました", - "device_groups": "グループ", - "no_sysinfo": "ハードウェア情報がありません", - "no_sysinfo_hint": "システム情報は、デバイスが sysinfo レポートを送信した後に表示されます", - "no_metrics": "利用可能なメトリクス データがありません", - "no_metrics_hint": "デバイスがハートビート レポートを送信した後にメトリクスが表示されます", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "ファイル", - "agent_lazy_hint": "エージェントからライブ データをロード��るには、このタブをクリックします", - "agent_offline": "エージェントはオフラインです", - "agent_timeout": "エージェントが時間内に応答しなかった", - "agent_error": "エージェントからのデータのロードに失敗しました", - "service_name": "Name", - "service_display": "表示名", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "アクティブな課金セッション" }, - "inventory": { - "title": "Inventory", - "subtitle": "管理対象デバイスのハードウェアとソフトウェアのインベントリ", - "device_id": "デバイスID", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "総メモリ", - "memory_used": "Used Memory", - "memory_available": "使用可能なメモ���", - "memory_usage": "メモリ使用量", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "ネットワークインターフェース", - "software": "Software", - "software_count": "インストールされているソフトウェア", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "物理コア", - "logical_cores": "論理コア", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "利用可能", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IPアドレス", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "コレクターの実行中", - "collector_stopped": "コレクターが停止しました", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "収集場所", - "no_data": "在庫データはまだありません。 「今すぐ収集」をクリックしてシステム情報を収集します。", - "no_devices": "インベントリ データを持つデバイスが見つかりませんでした", - "detail_title": "デバイスインベントリの詳細", - "telemetry": "Telemetry", - "view_detail": "詳細を見る", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "新規パッケージ", + "name": "名前", + "included_minutes": "含まれる分数", + "overage_rate": "超過料金 / 時間", + "currency": "通貨", + "heading": "サポートパッケージ", + "prompt_name": "パッケージ名", + "create_title": "組織向け新規パッケージ", + "create_submit": "パッケージを作成", + "select_org": "組織", + "select_org_placeholder": "組織を選択…" }, - "tickets": { - "title": "Tickets", - "subtitle": "サポートチケットと問題追跡", - "create": "New Ticket", - "edit": "チケットの編集", - "delete": "チケットの削除", - "detail": "チケット詳細", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "担当者", - "created_by": "作成者", - "device": "デバイス", - "sla_due": "SLA Due", - "created_at": "作成されました", - "updated_at": "更新されました", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "開く", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "コメントを書いてください...", - "internal_note": "内部メモ (エンドユーザーには表示されません)", - "attachments": "Attachments", - "upload_attachment": "添付ファイルのアップロード", - "download": "Download", - "connect_device": "デバイスに接続する", - "no_tickets": "チケットが見つかりませんでした", - "no_comments": "まだコメントはありません", - "no_attachments": "添付ファイルなし", - "title_required": "タイトルは必須です", - "delete_confirm": "チケット #{id} を削除してもよろしいですか?", - "delete_success": "チケットは正常に削除されました", - "created_success": "チケットが正常に作成されました", - "updated_success": "チケットが正常に更新されました", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "チケットを検索...", - "assign_to_me": "私に割り当ててください", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "開く", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "アクティビティの監視", - "subtitle": "アプリケーションの使用状況とアイドル状態の追跡", - "device": "デバイス", - "hostname": "Hostname", - "sessions": "セッション", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "上位のアプリケーション", - "app_name": "Application", - "window_title": "ウィンドウのタイトル", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "セッション数", - "total_active": "合計アクティブ", - "total_idle": "Total Idle", - "detail_count": "詳細記録", - "no_data": "利用可能なアクティビティ データがありません", - "no_sessions": "セッションなし", - "filter_from": "から", - "filter_to": "に", - "filter_apply": "フィルターを適用する", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "デバイスを検索...", - "date_range": "Date Range", - "device_id": "デバイスID", - "session_start": "セッション開始", - "session_end": "セッション終了", - "user": "User", - "no_activity": "アクティビティは記録されていません", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "申請はありません" - }, - "automation": { - "title": "自動化とアラート", - "subtitle": "アラート ルール、リモート コマンド、および SMTP 構成", - "rules": "Alert Rules", - "rules_subtitle": "通知をトリガーする条件を定義する", - "alerts": "アラート履歴", - "alerts_subtitle": "トリガーされたアラートを表示して確認する", - "commands": "リモートコマンド", - "commands_subtitle": "リモートデバイスにコマンドを送信する", - "smtp": "SMTP設定", - "smtp_subtitle": "メール通知設定", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "条件タイプ", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "ターゲットデバイス", - "scope_all": "すべてのデバイス", - "cooldown": "クールダウン (秒)", - "notify_emails": "通知メール", - "enabled": "有効", - "disabled": "障害者", - "create_rule": "ルールの作成", - "edit_rule": "ルールの編集", - "delete_rule": "ルールの削除", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "トリガー条件", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "より大きい", - "op_gte": "以上", - "op_lt": "Less than", - "op_lte": "以下または同等", - "op_eq": "に等しい", - "op_neq": "等しくありません", - "type_cpu_usage": "CPU使用率(%)", - "type_memory_usage": "メモリ使用量 (%)", - "type_disk_usage": "ディスク使用量 (%)", - "type_offline_duration": "オフライン期間 (秒)", - "type_idle_duration": "アイドル期間 (秒)", - "type_custom": "Custom", - "command_type": "コマンドの種類", - "command_payload": "コマンド/スクリプト", - "command_result": "Result", - "command_status": "Status", - "send_command": "送信コマンド", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "失敗しました", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "ユーザー名", - "smtp_pass": "パスワード", - "smtp_from": "送信元アドレス", - "smtp_test": "接続テスト", - "smtp_save": "設定を保存", - "smtp_test_success": "接続に成功しました", - "smtp_test_failed": "接続に失敗しました", - "no_rules": "アラートルールが設定されていません", - "no_alerts": "アラートは発生していません", - "no_commands": "送信されたコマンドはありません", - "id_payload_required": "デバイスIDとペイロードは必須です", - "no_commands_sent": "コマンドはまだ送信されていません" - }, - "file_transfer": { - "title": "ファイル転送", - "transfers": "Transfers", - "new_transfer": "新規転送", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "ファイルサイズ", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "デバイス", - "initiated_by": "開始者", - "created_at": "作成日", - "cancel": "キャンセル", - "cancel_confirm": "この転送をキャンセルしてもよろしいですか?", - "download_file": "ダウンロードファイル", - "browse_files": "ファイルを参照する", - "select_file": "ファイルの選択", - "select_device": "デバイスの選択", - "no_transfers": "ファイル転送なし", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "失敗しました", - "status_cancelled": "Cancelled", - "bytes_transferred": "転送バイト数", - "chunks": "Chunks", - "transfer_started": "転送が開始されました", - "transfer_completed": "転送完了", - "transfer_failed": "転送に失敗しました", - "transfer_cancelled": "転送がキャンセルされました", - "max_file_size": "最大ファイルサイズ:4GB", - "error_too_large": "ファイルが大きすぎます", - "error_no_device": "デバイスが選択されていません", - "error_no_file": "ファイルが選択されていません" - }, - "network": { - "title": "ネットワーク監視", - "targets": "監視対象", - "add_target": "Add Target", - "edit_target": "ターゲットの編集", - "delete_target": "ターゲットの削除", - "delete_confirm": "このターゲットを削除してもよろしいですか?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "タイムアウト (ミリ秒)", - "interval": "間隔 (ミリ秒)", - "enabled": "有効", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "履歴の確認", - "stats": "Statistics", - "total_targets": "総目標数", - "targets_up": "Targets Up", - "targets_down": "ターゲットダウン", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "ネットワークツール", - "ping_tool": "Ping Test", - "tcp_tool": "TCP ポートチェック", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "モニターを開始する", - "monitor_stop": "モニターを停止する", - "monitor_running": "モニターが動作中です", - "monitor_stopped": "モニターが停止しています", - "no_targets": "監視対象が設定されていません", - "no_history": "チェック履歴はありません", - "error_code": "Error", - "status_code": "HTTP ステータスコード", - "search_targets": "検索対象...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "履歴の確認", - "name_host_required": "名前とホストは必須です", - "uptime": "Uptime", - "response_time": "応答時間", - "avg_response": "平均的な応答", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "応答時間 (ミリ秒)", - "uptime_percent": "Uptime %", - "last_24h": "過去 24 時間", - "last_7d": "Last 7 days", - "last_30d": "過去 30 日間" - }, - "dataguard": { - "title": "データガード — DLP", - "policies": "DLP ポリシー", - "add_policy": "ポリシーの追加", - "edit_policy": "ポリシーの編集", - "delete_policy": "ポリシーの削除", - "delete_confirm": "このポリシーを削除してもよろしいですか?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "有効", - "disabled": "障害者", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USBデバイス", - "rule_type_file": "ファイル操作", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "ベンダーID (VID)", - "pid": "製品ID (PID)", - "serial": "シリアル番号", - "device_class": "デバイスクラス", - "drive_type": "Drive Type", - "file_extensions": "ファイル拡張子", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "ファイル", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "DLP ポリシーが設定されていません", - "no_events": "DLP イベントは記録されませんでした", - "stats": "Statistics", - "total_events": "イベント総数", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "ファイルイベント", - "device_id": "デバイスID", - "policy_matched": "ポリシーが一致しました", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "総保険数", - "active_policies": "アクティブなポリシー", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "ポリシー", - "tab_events": "Events", - "search_policies": "検索ポリシー...", - "create_policy": "ポリシーの作成", - "policy_type": "ポリシーの種類", - "scope": "Scope", - "events_count": "Events", - "search_events": "イベントを検索...", - "event_time": "Event Time", - "device": "デバイス", - "policy": "ポリシー", - "detail": "Detail", - "scope_help": "カンマ区切りのデバイス ID、またはすべてを空のままにします", - "scope_all": "すべてのデバイス", - "active": "Active", - "type_file_type": "ファイルの種類", - "type_clipboard": "クリップボード", - "type_screen_share": "画面共有", - "type_file_transfer": "ファイル転送", - "policy_desc": "ポリシーの説明", - "type_usb": "USB" + "sessions": { + "device": "デバイス", + "operator": "オペレーター", + "duration": "時間", + "phase": "フェーズ", + "amount": "金額" }, "reports": { - "title": "Reports", - "generate": "レポートの生成", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "デバイスの概要", - "type_activity": "活動の概要", - "type_security": "セキュリティレポート", - "type_tickets": "チケットレポート", - "type_network": "ネットワークレポート", - "type_inventory": "在庫レポート", - "type_alerts": "アラートレポート", - "saved": "保存されたレポート", - "save_report": "レポートの保存", - "delete_report": "レポートの削除", - "delete_confirm": "この保存されたレポートを削除してもよろしいですか?", - "no_saved": "保存されたレポートはありません", - "report_title": "Title", - "created_by": "作成者", - "created_at": "作成日", - "filters": "Filters", - "date_from": "から", - "date_to": "に", - "device_filter": "デバイスID", - "generated_at": "生成場所", - "section": "データセクション", - "total_devices": "総デバイス数", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "プラットフォームの配布", - "top_applications": "上位のアプリケーション", - "total_active": "合計アクティブ時間", - "total_idle": "合計アイドル時間", - "dlp_stats": "DLP 統計", - "banned_devices": "禁止されたデバイス", - "audit_logs": "Audit Logs", - "ticket_stats": "チケット統計", - "category_distribution": "カテゴリ分布", - "priority_distribution": "優先配布", - "targets_status": "ターゲットのステータス", - "os_distribution": "OSの配布", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "最近のアラート", - "tab_generate": "レポートの生成", - "tab_saved": "保存されたレポート", - "type_devices_desc": "すべてのデバイス、プラットフォーム、ステータスの概要", - "type_activity_desc": "アプリケーションの使用状況とアイドル時間の概要", - "type_security_desc": "禁止アクション、DLP イベント、監査ログ", - "type_tickets_desc": "チケット統計と SLA パフォーマンス", - "type_network_desc": "ネットワーク監視対象と稼働時間データ", - "type_inventory_desc": "ハードウェアとソフトウェアのインベントリの概要", - "type_alerts_desc": "アラート ルールとトリガーされたアラート履歴", - "report_name": "Report Name", - "format": "Format", - "save": "レポートの保存", - "preview": "Preview", - "download": "Download", - "delete_saved": "レポートの削除", - "raw_json": "Raw JSON" + "session": "セッション", + "summary": "概要", + "date": "日付" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "テナントの編集", - "delete_tenant": "テナントの削除", - "delete_confirm": "このテナントを削除してもよろしいですか?すべてのデバイスとユーザーの割り当てが削除されます。", - "name": "Name", - "slug": "Slug", - "contact_name": "連絡先名", - "contact_email": "連絡先メールアドレス", - "max_devices": "最大デバイス数", - "max_devices_hint": "0 = 無制限", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "デバイス", - "users": "Users", - "assign_device": "デバイスの割り当て", - "assign_devices": "デバイスの割り当て", - "remove_device": "デバイスの削除", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "テナントが構成されていません", - "no_devices": "このテナントにはデバイスが割り当てられていません", - "no_users": "このテナントにはユーザーが割り当てられていません", - "stats": "テナント統計", - "total_devices": "総デバイス数", - "online_devices": "オンラインデバイス", - "total_users": "Total Users", - "created_at": "作成日", - "updated_at": "更新日", - "slug_exists": "テナントスラッグはすでに存在します", - "total_tenants": "テナントの合計", - "active_tenants": "アクティブなテナント", - "search": "テナントを検索...", - "create_tenant": "テナントの作成", - "detail": "テナント詳細", - "contact": "Contact", - "enabled": "有効", - "disabled": "障害者", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "組織契約", + "new": "パッケージを割り当て", + "org": "組織", + "package": "パッケージ", + "remaining": "残り分数", + "status": "ステータス", + "actions": "操作", + "suspend": "一時停止", + "activate": "有効化", + "select_org": "組織を選択", + "select_package": "パッケージを選択", + "no_orgs": "組織が見つかりません", + "no_packages": "先にパッケージを作成してください" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "デバイス ID、ホスト名、または IP で検索...", - "no_registrations": "No registration requests", - "col_device_id": "デバイスID", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "このデバイスを承認してもよろしいですか?サーバーの資格情報を受信し、自動的に接続できます。", - "approved_success": "デバイス登録が正常に承認されました", - "reject_btn": "Reject", - "reject_title": "登録の拒否", - "reject_confirm": "この登録リクエストを拒否してもよろしいですか?", - "reject_reason": "理由(任意)", - "reject_reason_placeholder": "拒否理由を入力してください...", - "rejected_success": "デバイスの登録が拒否されました", - "delete_confirm": "この登録レコードを削除してもよろしいですか?", - "deleted_success": "登録記録が削除されました", - "enrollment_title": "デバイスの登録", - "enrollment_subtitle": "BetterDesk デスクトップ クライアントからの保留中の登録リクエスト", - "enrollment_empty": "保留中の登録リクエストはありません", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "表示名", - "enrollment_display_name_placeholder": "このデバイスの名前を入力してください...", - "enrollment_sync_mode": "同期モード", - "enrollment_sync_silent": "サイレント - 最小限のテレメトリ", - "enrollment_sync_standard": "標準 - バランス同期", - "enrollment_sync_turbo": "ターボ — アグレッシブな同期", - "enrollment_approved_success": "デバイスの登録が承認されました", - "enrollment_rejected_success": "デバイスの登録が拒否されました", - "approve_title": "デバイスを承認", - "field_name": "デバイス名", - "field_name_placeholder": "このデバイスの名前を入力...", - "field_sync_mode": "同期モード", - "sync_standard": "スタンダード — バランスの取れた同期", - "sync_silent": "サイレント — 最小限のテレメトリー", - "sync_turbo": "ターボ — アグレッシブな同期", - "field_tags": "タグ", - "field_tags_placeholder": "カンマ区切りのタグ(例: オフィス, ノートPC)...", - "field_tags_existing": "既存のタグ", - "field_tag_add_placeholder": "新しいタグを追加...", - "field_tag_add_btn": "追加", - "field_groups": "デバイスグループ", - "field_folder": "フォルダー", - "field_folder_none": "フォルダーなし", - "reject_ban_option": "このデバイスを禁止", - "reject_ban_hint": "デバイスはブロックされ、新しい登録リクエストを送信できなくなります。", - "banner_open_mode": "登録はオープンです — 新しい RustDesk クライアントはオペレーターの承認なしに登録されます。このキューを使用するには設定でマネージドモードを設定してください。", - "banner_locked_mode": "登録はロックされています — トークンに紐付けられたデバイスのみ登録できます。未知のクライアントのオペレーター承認にはマネージドモードが必要です。", - "enrollment_settings_link": "登録設定" + "export": { + "csv": "CSVエクスポート", + "pdf": "PDFエクスポート", + "sessions_csv": "セッションCSVエクスポート" }, - "backup": { - "title": "Backup", - "desc": "コンソールの構成、ユーザー、グループ、設定の完全なバックアップをダウンロードします。 BetterDesk バックエンドがアクティブな場合、Go server ピア データが含まれます。", - "restore_title": "Restore", - "restore_desc": "以前にダウンロードしたバックアップ ファイルをアップロードして、コンソール設定を復元します。以下で復元するセクションを選択してください。", - "stat_users": "Users", - "stat_settings": "設定", - "stat_folders": "Folders", - "stat_groups": "グループ", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "バックアップをダウンロード", - "creating": "バックアップを作成しています...", - "download_success": "バックアップが正常にダウンロードされました", - "upload": "バックアップのアップロード", - "restore_confirm": "このバックアップから復元してもよろしいですか?選択したセクションは上書きされます。", - "restore_success": "バックアップは正常に復元されました。変更によっては、ページの再読み込みが必要になる場合があります。", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "コンソール設定", - "opt_branding": "ブランディング/テーマ", - "opt_folders": "デバイスフォルダー", - "opt_groups": "ユーザーとデバイスのグループ", - "opt_addressbooks": "アドレス帳", - "opt_users": "ユーザーアカウント", - "opt_users_warning": "破壊的: すべてのユーザー アカウントをバックアップ データに置き換えます。ログアウトしている可能性があります。", - "no_file": "バックアップ ファイルが選択されていません", - "invalid_json": "無効なバックアップ ファイル: 無効な JSON", - "invalid_format": "無効なバックアップ ファイル: BetterDesk バックアップではありません", - "stat_database": "データベースエンジン", - "stat_keys": "サーバーキー含む", - "stat_env": "環境設定ファイル", - "stat_uploads": "ブランディングファイル", - "restart_required": "一部の復元コンポーネント(キー / .env / Go データベース)は有効にするためにサービスの再起動が必要です。", - "security_warning": "このバックアップには機密情報(サーバーキー、環境設定ファイル、パスワードハッシュ、2FA シークレット)が含まれています。安全に保管し、共有しないでください。", - "restore_warning": "シークレット、環境設定ファイル、または Go サーバーデータベースを復元すると、サーバーのIDが上書きされ、その後サービスの再起動が必要になります。", - "opt_database": "データベース(全テーブル)", - "opt_database_hint": "すべてのコンソールデータを再インポートします。ライブで適用され、再起動は不要です。", - "opt_uploads": "ブランディングファイル", - "opt_uploads_hint": "ロゴとアップロードされた画像。", - "opt_secrets": "サーバーキーとシークレット", - "opt_secrets_warning": "Ed25519 サーバー ID、API キー、セッションシークレットを上書きします。サービスの再起動が必要です。", - "opt_env": "環境設定ファイル(.env)", - "opt_env_warning": "SESSION_SECRET、API キー、データベース DSN、ポート、TLS 設定を上書きします。サービスの再起動が必要です。", - "opt_godb": "Go サーバーデータベース", - "opt_godb_warning": "Go サーバーの SQLite データベースを上書きします(SQLite バックエンドのみ)。サービスの再起動が必要です。" + "report": { + "title": "作業レポート", + "subtitle": "このリモートセッション中に行った作業を説明してください。", + "category": "カテゴリ", + "ticket_ref": "チケット参照", + "summary": "実施した作業", + "skip": "今はスキップ", + "submit": "レポートを送信", + "summary_required": "概要は必須です", + "saved": "作業レポートを保存しました" }, - "cdap": { - "device_detail": "CDAPデバイス", - "loading": "読み込み中...", - "loading_widgets": "デバイス ウィジェットを読み込んでいます...", - "load_error": "デバイスデータのロードに失敗しました", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "デバイスは現在オフラインです。ウィジェットの値が古い可能性があります。", - "no_widgets": "利用可能なウィジェットがありません", - "no_widgets_desc": "このデバイスは、ウィジェット定義を含む CDAP マニフェストを登録していません。", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "コマンドの確認", - "select_option": "選択", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "送信コマンド", - "command_sent": "コマンドは正常に送信されました", - "command_failed": "コマンドの送信に失敗しました", - "devices_title": "CDAP デバイス", - "devices_subtitle": "カスタム デバイス アプリケーション プロトコル経由で接続されたデバイス", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "デバイスを検索...", - "no_devices": "デバイスが接続されていません", - "no_devices_desc": "���在接続されている CDAP デバイスはありません。デバイスがゲートウェイに接続すると、ここに表示されます。", - "gateway_disabled": "CDAP ゲートウェイが無効になっています", - "gateway_disabled_desc": "サーバー構成で CDAP_ENABLED=true を設定して、CDAP ゲートウェイを有効にします。", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "CDAP���無効にする", - "enabled_restart": "CDAP が有効になりました。変更を適用するにはサーバーの再起動が必要です。", - "disabled_restart": "CDAP は無効になっています。変更を適用するにはサーバーの再起動が必要です。", - "widgets": "ウィジェット", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "アクティブなアラート", - "alert_fired": "Alert fired", - "alert_cleared": "アラートが解除されました", - "no_alerts": "アクティブなアラートはありません", - "connect_terminal": "接続端子", - "table_search": "検索...", - "just_now": "Just now", - "terminal_connecting": "デバイスに接続中...", - "terminal_disconnected": "Disconnected", - "terminal_error": "端末接続に失敗しました", - "linked_devices": "リンクされたデバイス", - "link_device": "リンクデバイス", - "unlink_device": "Unlink", - "no_linked_devices": "リンクされたデバイスはありません", - "unlink_confirm": "このデバイスのリンクを解除してもよろしいですか?", - "link_prompt": "このデバイスにリンクするピア ID を入力してください:", - "connect_desktop": "デスクトップを接続する", - "connect_video": "ストリームを接続する", - "connect_files": "ファイルを参照する", - "connect_audio": "オーディオを接続する", - "upload_file": "Upload", - "desktop_connecting": "接続中...", - "video_connecting": "接続中...", - "files_connecting": "接続中...", - "audio_connecting": "接続中...", - "audio_streaming": "Streaming", - "clipboard_in": "クリップボードを受信しました", - "clipboard_out": "クリップボードが送信されました", - "monitor_select": "モニターの選択", - "keyframe_request": "キー��レームのリクエスト", - "quality_auto": "自動品質" + "empty": { + "packages": "パッケージがありません。上のボタンで作成してください。", + "contracts": "組織契約がありません。組織にパッケージを割り当ててください。", + "sessions": "課金セッションはまだ記録されていません。", + "reports": "作業レポートはまだ送信されていません。" }, - "desktop": { - "switch_mode": "デスクトップモード", - "console_mode": "コンソールモード", - "loading": "読み込み中...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "閉じる", - "widgets_mode": "ウィジェット", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "ウィジェットの追加", - "remove_widget": "ウィジェットの削除", - "configure": "設定する", - "search_widgets": "ウィジ���ットを検索...", - "cat_monitoring": "Monitoring", - "cat_devices": "デバイス", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "ここにメモを書きます...", - "search_placeholder": "デバイス、ページ、設定を検索...", - "search_pages": "Pages", - "search_devices": "デバイス", - "search_no_results": "No results", - "exit_desktop": "Exit Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "デバイスのステータス", - "widget_server_health": "サーバー情報", - "widget_system_stats": "デバイスゲージ", - "widget_device_list": "デバイスリスト", - "widget_quick_actions": "クイックアクション", - "widget_recent_activity": "最近の活動", - "widget_notes": "Notes", - "widget_network_monitor": "ネットワークモニター", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP デバイス", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "デバイスグリッド", - "widget_multi_gauge": "サーバーゲージ", - "widget_weekly_chart": "毎週のアクティビティ", - "widget_quick_controls": "クイックコントロール", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "接続統計", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "ユーザーセッション", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "デバイスがありません", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "開く", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "設定でURLを設定します", - "label_server_uptime": "サーバー稼働時間", - "label_merged_info": "サーバー情報ウィジェットに統合", - "label_with_notes": "メモ付き", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "総デバイス数", - "label_throughput": "Throughput", - "label_active_relays": "アクティブリレー", - "label_total_relayed": "中継合計", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "デバイスをフィルターします...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "CDAP デバイスはありません", - "action_add_widget": "ウィジェットの追加", - "label_merged_server_info": "サーバー情報ウィジェットに統合", - "wp_images": "Images", - "wp_colors": "単色", - "wp_custom_color": "カスタムカラー", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "widget_calendar": "Calendar", - "widget_process_monitor": "プロセスモニター", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "データベース統計", - "widget_docker_containers": "Docker コンテナ", - "widget_shell_command": "シェルコマンド", - "widget_device_map": "デバイスマッ��", - "widget_remote_connect": "リモート接続", - "label_no_online": "オンラインデバイスなし", - "label_no_events": "今日はイベントはありません", - "label_event_title": "イベントタイトル:", - "label_no_data": "利用可能なデータがありません", - "label_download_speed": "ダウンロード速度", - "label_latency": "Latency", - "label_server": "サーバー", - "label_run_test": "Run Test", - "label_testing": "テスト中...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "コンテナなし", - "label_docker_unavailable": "Docker は利用できません", - "label_no_command": "コマンドが設定されていません", - "label_no_output": "まだ出力はありません", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "プリセットの保存", - "label_load_preset": "Load Preset", - "label_preset_name": "プリセット名:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "自動配置", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 列 (等しい)", - "label_2col_wide": "2列(60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "ウィジェットグループ", - "ungroup_widgets": "ウィジェットのグループ化を解除する", - "group_widgets": "選択したウィジェットをグループ化する", - "snap_layouts": "スナップレイアウト", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "左上にスナップ", - "snap_top_right": "右上にスナップ", - "snap_bottom_left": "左下スナップ", - "snap_bottom_right": "右下にスナップ", - "aero_shake": "シェイクして他の人を最小化する", - "zone_resize": "境界線をドラッグしてゾーンのサイズを変更します", - "zone_borders": "ドラッグ可能なゾーンの境界線", - "app_drawer": "Applications", - "search_apps": "アプリを検索...", - "edit_shortcuts": "ショートカットを編集", - "widgets": "ウィジェット", - "theme": "Theme", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "wp_unavailable": "このサーバーには壁紙画像がインストールされていません。", - "wp_download_hint": "壁紙の選択を可能にするには、PNG 画像を public/wallpaper/ ディレクトリに配置します。", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "既存パッケージを割り当て", + "submit": "割り当て" }, - "desktop_login": { - "click_to_sign_in": "任意の場所をクリックするか、キーを押してサインインします", - "username_placeholder": "ユーザー名", - "password_placeholder": "パスワード", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "二要素認証", - "totp_subtitle": "認証アプリから 6 桁のコードを入力してください", - "back_to_login": "ログインに戻る", - "fill_all_fields": "すべてのフィールドに入力してください", - "invalid_credentials": "無効なユーザー名またはパスワード", - "invalid_code": "無効な確認コード", - "enter_6_digits": "6桁すべてを入力してください", - "network_error": "ネットワーク エラー - 接続を確認してください", - "session_expired": "セッションの有効期限が切れました。再度サインインしてください。" - }, - "tokens": { - "title": "デバイストークン", - "subtitle": "自動デバイス プロビジョニングの登録トークンを管理する", - "enrollment_mode": "登録モード", - "mode_open": "開く", - "mode_open_desc": "どのデバイスもトークンなしで登録可能", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "総トークン数", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "トークンを検索...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "一括生成", - "create": "トークンの作成", - "edit": "トークンの編集", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "作成されました", - "actions": "Actions", - "name_placeholder": "例:オフィスPCバッチ", - "max_uses": "Max Uses", - "max_uses_hint": "0 = 無制限", - "expires_in": "Expires In", - "no_expiration": "有効期限なし", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "このトークンに関するオプションのメモ...", - "count": "Count", - "count_range": "生成するトークンの数 (1 ~ 100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "トークンが作成されました", - "tokens_generated": "生成されたトークン", - "copy_warning": "今すぐ���ークンをコピーします。再度表示されることはありません。", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "このトークンを取り消してもよろしいですか?すでに登録されているデバイスは影響を受けません。", - "revoked_success": "トークンが正常に取り消されました", - "no_tokens": "トークンが見つかりませんでした", - "expired": "Expired", - "never": "Never", - "save": "保存", - "cancel": "キャンセル", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "次へ", - "prev": "Previous", - "skip": "Skip", - "finish": "終了", - "close": "閉じる", - "step_of": "{current}/{total}", - "console_sidebar_title": "ナビゲーションサイドバー", - "console_sidebar_text": "ここからすべてのモジュールにアクセスします。任意のアイコンをクリックして、そのセクションに移動します。サイドバーは画面サイズに合わせて調整されます。", - "console_expand_title": "サイドバーを展開する", - "console_expand_text": "ここをクリックしてサイドバーを展開すると、すべてのナビゲーション項目の完全なラベルが表示されます。もう一度クリックすると折りたたまれます。", - "console_search_title": "クイック検索", - "console_search_text": "デバイス、設定、アクションをすばやく検索します。 Ctrl+K を押してキーボード ショートカットを使用します。", - "console_dashboard_title": "ダッシュボード", - "console_dashboard_text": "サーバーのステータス、オンライン デバイス、クイック アクションを表示する中央ハブ。重要な指標を一目で把握できます。", - "console_devices_title": "デバイス管理", - "console_devices_text": "接続されているすべてのデバイスを表示、検索、管理します。ステータスでフィルタリングし、タグを割り当て、個々のデバイス設定を構成します。", - "console_settings_title": "設定", - "console_settings_text": "サーバーの動作、セキュリティ オプション、ブランド化、およびユーザー管理を構成します。ニーズに合わせて BetterDesk をカスタマイズします。", - "console_desktop_title": "デスクトップモード", - "console_desktop_text": "ウィジェットを備えたウィンドウ化されたワークスペースのデスクトップ モードに切り替えます。マルチタスクやダッシュボードの監視に最適です。", - "console_complete_title": "準備は完了です!", - "console_complete_text": "サイドバーのカテゴリを調べて、すべての機能を見つけてください。 [ヘルプ] アイコンをクリックすると、いつでもこのガイドを再開できます。", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "上部のバーには、時計、クイック コントロール、アプリ ドロワーへのアクセスが表示されます。すべてのアプリを参照するには、グリッド アイコンをクリックします。", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "アプリドロワーを開いてコンソール機能を検索し、フローティングウィンドウとして起動します。アプリはカテゴリ別に整理されています。", - "desktop_widgets_title": "ウィジェットダッシ���ボード", - "desktop_widgets_text": "カスタマイズ可能なワークスペース。ウィジェットにはライブ情報が表示され、機能への素早いアクセスが可能になります。ドラッグして並べ替えます。", - "desktop_add_widget_title": "ウィジェットを追加する", - "desktop_add_widget_text": "ここをクリックして利用可能なウィジェットを参��してください。監視表示、デバイスリスト、メモなどから選択します。", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "スナップレイアウト", - "desktop_snap_text": "ウィンドウを画面の端にドラッグして所定の位置にスナップするか、レイアウト プリセットの最大化ボタンをホバーします。エアロシェイクを試してみよう!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "アプリは、ドラッグ可能でサイズ変更可能なウィンドウで開きます。タイトル バーから最小化、最大化、または閉じることができます。ウィジェットの上の Windows レイヤー。", - "desktop_search_title": "クイック検索", - "desktop_search_text": "デバイス、ページ、設定全体を検索します。任意の場所で Ctrl+K を押すと、すぐに検索が開きます。", - "desktop_complete_title": "デスクトップモードの準備完了!", - "desktop_complete_text": "ドロワーからアプリを開いて、ウィンドウを並べて配置してみてください。ウィジェット プリセットを使用して、ダッシュボード レイアウトをすばやく作成します。", - "devices_folders_title": "デバイスフォルダー", - "devices_folders_text": "デバイスをフォルダーに整理します。フォルダーをクリックしてリストをフィルターします。右クリックして名��を変更または削除します。", - "devices_search_title": "検索とフィルター", - "devices_search_text": "ID、ホスト名、またはプラットフォームで検索します。ステータス ピルを使用して、オンライン、オフライン、またはすべてのデバイスのみを表示します。", - "devices_table_title": "デバイスリスト", - "devices_table_text": "詳細については、デバイスの行をクリックしてください。右側のケバブ メニューを使用して、接続、タグの編集、削除などのクイック アクションを実行します。", - "devices_complete_title": "デバイス管理の準備完了!", - "devices_complete_text": "デバイスをフォルダ間でドラッグして整理します。デバイスをダブルクリックして、その詳細パネルを開きます。", - "settings_tabs_title": "設定カテゴリ", - "settings_tabs_text": "「全般」、「セキュリティ」、「外観」、およびその他の構成セクション間を移動します。", - "settings_content_title": "構成", - "settings_content_text": "各セクションには、特定のサーバーとコンソールの設定が含まれています。 「保存」をクリックすると、変更が保存されます。", - "settings_complete_title": "設定の概要", - "settings_complete_text": "2FA、API キーおよびユーザー管理のセキュリティ設定を確認してください。コンソールの外観をカスタマイズするには、「外観」にアクセスしてください。", - "help": "ヘルプとチュートリアル", - "tour_console": "コンソールツアー", - "tour_desktop": "デスクトップモードツアー", - "tour_devices": "デバイスツアー", - "tour_settings": "設定ツアー", - "reset_all": "すべてのチュートリアルをリセット", - "tour_remote": "リモートセッションツアー", - "tour_organization": "組織のセットア��プ", - "tour_cdap": "CDAP 概要", - "tour_chat": "チャットの基本", - "remote_toolbar_title": "リモートツールバー", - "remote_toolbar_text": "ツールバーから表示コントロール、クリップボード同期、特殊キー、品質設定にアクセスします。 F11 で全画面に切り替えます。", - "remote_canvas_title": "リモートディスプレイ", - "remote_canvas_text": "こちらはリモート画面です。内側をクリックしてリモート デバイスの制御を開始します。マウスとキーボードの入力は自動的に転送されます。", - "remote_clipboard_title": "クリップボードの同期", - "remote_clipboard_text": "コンピュータとリモート デバイス間でテキストをコピーして貼り付けます。リモート ディスプレイに焦点を当てている間は、通常どおり Ctrl+C / Ctrl+V を使用します。", - "remote_complete_title": "リモートセッションの準備完了!", - "remote_complete_text": "ツールバーのボタンは特殊キー(Ctrl+Alt+Del、PrintScreen)やモニターの切り替えに使用します。 Esc キーを押すか、「切断」をクリックしてセッションを終了します。", - "org_overview_title": "組織", - "org_overview_text": "組織を使用すると、ユーザー、デバイス、ポリシーをグループ化できます。各組織には独自の管理者、オペレーター、および設定があります。", - "org_create_title": "組織の作成", - "org_create_text": "新しい組織を作成するにはここをクリックしてください。名前、スラッグ、およびオプションの説明を入力します。あなたは新しい組織のオーナーになります。", - "org_members_title": "メンバーの管理", - "org_members_text": "電子メールでユーザーを招待し、役割 (管理者、オペレーター、ユーザー) を割り当て、アクセスを管理します。メンバーは、自分の組織に割り当てられているデバイスを確認できます。", - "org_devices_title": "デバイスの割り当て", - "org_devices_text": "デバイスを組織に追加します。ここで割り当てられたデバイスは組織のポリシーを継承し、そのメンバーに表示されます。", - "org_policies_title": "組織方針", - "org_policies_text": "組織のパスワード要件、セッション タイムアウト、2FA 強制、デバイス登録ルールなどのセキュリティ ポリシーを設定します。", - "org_complete_title": "組織のセットアップが完了しました!", - "org_complete_text": "チームを招待し、デバイスを割り当てて、組織を対象とした管理の使用を開始します。ポリシーはすべてのメンバーに自動的に適用されます。", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "連絡先とグループ", - "chat_contacts_text": "連絡先とチャット グループを確認します。連絡先をクリックして会話を開きます。緑色の点はオンライン ユーザーを示します。", - "chat_send_title": "メッセージを送信する", - "chat_send_text": "メッセージを入力し、Enter キーを押して送信します。双方が E2E をサポートしている場合、メッセージはエンドツーエンドで暗号化されます。", - "chat_file_title": "ファイルを共有する", - "chat_file_text": "ファイルを共有するには、添付アイコンをクリックします。ファイルは暗号化され、最大 50 MB まで可能です。", - "chat_complete_title": "チャットの準備完了!", - "chat_complete_text": "オペレーターやエンドユーザーとリアルタイムでチャットできます。チームコミュニケーションのためのグループを作成します。すべてのメッセージは開封確認をサポートしています。", - "disable_tutorials": "チュートリアルを無効にする", - "enable_tutorials": "チュートリアルを有効にする" - }, - "help_request": { - "title": "ヘルプリクエスト", - "subtitle": "デスクトップクライアントから受信したヘルプリクエストを管理する", - "new_request": "新しいヘルプリクエスト", - "device": "デバイス", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "助けの要請はありません", - "notification": "からのヘルプリクエストを受け取りました", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "組織", - "create": "組織の作成", - "edit": "組織の編集", - "detail": "組織の詳細", - "name": "Name", - "slug": "ナメクジ (URL セーフ)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "デバイス", - "invitations": "Invitations", - "settings": "設定", - "add_user": "Add User", - "assign_device": "デバイスの割り当て", - "create_invitation": "招待状の作成", - "delete_confirm": "この組織を削除しますか?これにより、関連付けられているすべてのユーザー、デバイス、設定が削除されます。", - "no_orgs": "まだ組織がありません", - "no_orgs_hint": "最初の組織を作成して、デバイスとユーザーの管理を開始します。", - "connection_policy": "接続ポリシー", - "allow_file_transfer": "ファイル転送を許可する", - "allow_clipboard": "クリップボードを許可する", - "max_session_duration": "最大セッション継続時間 (分)", - "role_owner": "Owner", - "role_admin": "管理者", - "role_operator": "Operator", - "role_user": "メンバー", - "username": "ユーザー名", - "password": "パスワード", - "display_name": "表示名", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "デバイスID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "割り当てられたユーザー", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "この組織にはユーザーがいません。", - "no_devices": "この組織にはデバイスが割り当てられていません。", - "no_invitations": "招待状はありません。", - "user_added": "User added", - "user_removed": "ユーザーが削除されました", - "user_updated": "ユーザー役割が更新されました", - "device_assigned": "割り当てられたデバイス", - "device_unassigned": "デバイスが割り当てられていません", - "invitation_created": "招待状が作成されました", - "settings_saved": "設定が保存されました", - "org_deleted": "組織が削除されました", - "confirm_remove_user": "このユーザーを組織から削除しますか?", - "confirm_unassign_device": "このデバイスを組織から割り当て解除しますか?", - "confirm_delete_org": "この組織とすべての関連データを削除しますか?", - "edit_role": "役割の編集", - "raw_settings": "生の設定", - "key": "Key", - "value": "Value", - "save": "設定の保存", - "policy_unattended": "無人 (即時)", - "policy_attended": "出席しました(確認あり)", - "policy_ask": "Always ask", - "expires_hours": "有効期限 (時間)", - "loading_failed": "組織データのロードに失敗しました", - "name_slug_required": "名前とスラッグは必須です", - "org_created": "組織が作成されました", - "org_updated": "組織が更新されました", - "create_new_user": "新規作成", - "add_existing_user": "既存の追加", - "none_available": "none", - "select_user": "ユーザーの選択", - "org_role": "組織の役割", - "link_user_hint": "選択したユーザーは、サーバー アカウントの資格情報を使用してこの組織にリンクされます。", - "no_available_users": "すべてのサーバー ユーザーはすでにこの組織にリンクされています。", - "user_linked": "組織にリンクされたユーザー" - }, - "chat": { - "e2e_enabled": "エンドツーエンド暗号化", - "e2e_establishing": "セキュアチャネルを確立中...", - "e2e_established": "セキュアチャネルが確立されました", - "e2e_unsupported": "このブラウザではE2E暗号化はサポートされていません", - "typing_indicator": "入力中...", - "read_receipt": "既読", - "delivered": "配信済み", - "file_share": "ファイル", - "file_too_large": "ファイルが大きすぎます(最大 50MB)", - "file_encrypted": "暗号化ファイル転送", - "presence_online": "オンライン", - "presence_away": "離席中", - "presence_busy": "取り込み中", - "presence_offline": "オフライン", - "key_rotation": "セキュリティキーが更新されました", - "new_message": "新しいメッセージ", - "title": "チャット", - "contacts": "連絡先", - "groups": "グループ", - "no_contacts": "まだ連絡先がありません", - "no_groups": "まだグループがありません", - "no_messages": "まだメッセージがありません", - "no_results": "結果が見つかりません", - "select_conversation": "会話を選択してチャットを開始", - "type_message": "メッセージを入力...", - "send": "送信", - "attach_file": "ファイルを添付", - "emoji": "絵文字", - "search_messages": "メッセージを検索", - "create_group": "グループを作成", - "group_name": "グループ名", - "group_members": "メンバー", - "cancel": "キャンセル", - "create": "作成", - "members": "メンバー", - "today": "今日", - "yesterday": "昨日", - "react": "リアクション", - "my_presence": "マイステータス", - "search_placeholder": "連絡先とメッセージを検索", - "select_conversation_hint": "メッセージを表示するには会話を選択してください", - "info": "情報", - "group_name_placeholder": "グループ名を入力" - }, - "toast": { - "device_connected": "接続されたデバイス", - "device_disconnected": "デバイスが切断されました", - "session_started": "リモートセッションが開始されました", - "session_ended": "リモートセッションが終了しました", - "file_upload_complete": "ファイルのアップロードが完了しました", - "settings_saved": "設定が保存されました", - "error_generic": "エラーが発生しました", - "connection_lost": "接続が失われました", - "reconnecting": "再接続中..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "管理ユーティリティと診断ツール", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "送信", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "テキストを入力してください...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Goサーバー", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "ホストの到達可能性と遅延を確認する", - "tcp_title": "TCP ポートチェック", - "tcp_desc": "TCP ポートの接続をテストする", - "ssl_title": "SSLインスペクター", - "ssl_desc": "SSL/TLS 証明書の詳細を検査する", - "http_title": "HTTP ヘルスチェック", - "http_desc": "HTTP エンドポイントのステータスを確認する", - "dns_title": "DNS Lookup", - "dns_desc": "ホスト名をIPアドレスに解決する", - "whois_title": "DNS Records", - "whois_desc": "A、AAAA、MX、TXT、NS レコードのクエリ", - "speed_title": "Speed Test", - "speed_desc": "ダウンロード帯域幅を測定する", - "run_speed_test": "速度テストの実行", - "wol_title": "Wake-on-LAN", - "wol_desc": "マジックパケットを送信してデバイスをウェイクアップします", - "wol_sent": "マジックパケットが送信されました", - "hash_title": "ハッシュジェネレーター", - "hash_desc": "暗号化ハッシュを生成する", - "password_title": "パスワードジェネレータ", - "password_desc": "安全なランダムパスワードを生成する", - "jwt_title": "JWT Decoder", - "jwt_desc": "JSON Web トークンをデコードして検査する", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 データのエンコードまたはデコード", - "url_title": "URL Encoder", - "url_desc": "URL コンポーネントをエンコードまたはデコードする", - "processes_title": "プロセス一覧", - "processes_desc": "実行中のシステムプロセスを表示する", - "disk_title": "Disk Usage", - "disk_desc": "ディスクパーティションの使用状況を表示する", - "db_title": "データベース統計", - "db_desc": "データベーステーブル統計の表示", - "docker_title": "Docker コンテナ", - "docker_desc": "実行中の Docker コンテナーを表示する", - "logs_title": "Log Viewer", - "logs_desc": "最近のログ出力を表示する", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "有効開始日", - "valid_to": "有効期限", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "利用可能なデータがありません", - "no_docker": "Docker コンテナが見つからないか、Docker が使用できません", - "no_logs": "利用可能なログ行がありません" - }, - "policies": { - "title": "組織ポリシー", - "subtitle": "組織のセキュリティ、接続、機能ポリシーを管理", - "select_org": "組織", - "select_org_placeholder": "組織を選択...", - "select_org_first": "ポリシー監査ログを表示するには組織を選択してください。", - "configured": "設定済み", - "connection_title": "接続ポリシー", - "connection_desc": "リモートセッションの確立方法を制御", - "connection_mode": "接続モード", - "mode_attended": "有人(ユーザー承認が必要)", - "mode_unattended": "無人(常に許可)", - "mode_ask": "常に確認", - "max_session": "最大セッション時間(分)", - "idle_lock": "アイドルロック(分)", - "wallpaper_policy": "セッション中の壁紙", - "wallpaper_show": "表示", - "wallpaper_hide_session": "セッション中非表示", - "wallpaper_hide_always": "常に非表示", - "features_title": "機能ポリシー", - "features_desc": "デバイスの特定機能を有効または無効にする", - "allow_file_transfer": "ファイル転送を許可", - "allow_clipboard": "クリップボード同期を許可", - "allow_audio": "オーディオストリーミングを許可", - "allow_recording": "セッション録画を許可", - "security_title": "セキュリティポリシー", - "security_desc": "組織デバイスのセキュリティ要件を強制", - "require_2fa": "無人アクセスに2FAを要求", - "password_min_length": "最小パスワード長", - "password_require_special": "特殊文字を要求", - "password_max_age": "パスワード最大有効期間(日、0=無期限)", - "allowed_operators": "許可されたオペレーターロール(カンマ区切り)", - "network_title": "ネットワークポリシー", - "network_desc": "リレーサーバーと直接接続を制御", - "block_direct_p2p": "直接P2Pをブロック(リレー強制)", - "allowed_relays": "許可されたリレーサーバー(行ごとに1つ)", - "ip_allowlist": "IPホワイトリスト(CIDR、行ごとに1つ)", - "update_title": "更新ポリシー", - "update_desc": "自動更新と更新チャネルを制御", - "auto_update": "自動更新を有効化", - "update_channel": "更新チャネル", - "audit_title": "ポリシー変更", - "audit_desc": "最近のポリシー変更履歴", - "no_audit": "ポリシー変更の記録なし。", - "save_success": "ポリシーが正常に保存されました", - "save_failed": "ポリシーの保存に失敗しました", - "load_failed": "ポリシーの��ードに失敗しました", - "block_direct_p2p_hint": "この組織のデバイスに適用されます。グローバルデフォルトは設定 → 接続戦略にあります。" - }, - "attestation": { - "title": "デバイス証明", - "subtitle": "デバイスID検証とハードウェアフィンガープリントを監視", - "verified": "検証済み", - "pending": "保留中", - "failed": "失敗", - "device_list": "証明記録", - "device_list_desc": "ハードウェアフィンガープリントとID検証ステータス", - "col_device": "デバイスID", - "col_hostname": "ホスト名", - "col_fingerprint": "フィンガープリント", - "col_status": "ステータス", - "col_last_check": "最終確認", - "col_actions": "アクション", - "no_records": "証明記録が見つかりません。", - "verify_success": "検証済みとしてマークされたデバイス", - "verify_failed": "デバイスの検証に失敗しました", - "revoke_success": "デバイス認証が取り消されました", - "revoke_failed": "認証の取り消しに失敗しました" - }, - "fleet": { - "title": "フリート管理", - "tab_resources": "リソース", - "tab_tasks": "タスク", - "tab_builder": "ビルダー", - "tab_compliance": "コンプライアンス", - "res_title": "リソースマッピング", - "res_all_types": "すべてのタイプ", - "res_type_printer": "プリンター", - "res_type_network_drive": "ネットワークドライブ", - "res_type_dns": "DNSサーバー", - "res_type_proxy": "プロキシ", - "res_type_vpn": "VPN", - "res_add": "リソースを追加", - "res_name": "リソース名", - "res_type": "タイプ", - "res_address": "アドレス / パス", - "res_target": "ターゲット", - "res_scope": "スコープ", - "res_scope_org": "組織", - "res_scope_group": "グループ", - "res_scope_device": "デバイス", - "res_scope_value": "スコープ値", - "res_status": "ステータス", - "res_active": "アクティブ", - "res_inactive": "非アクティブ", - "res_no_data": "リソースが見つかりません。'追加'をクリックしてください。", - "res_confirm_delete": "このリソースを削除してもよろしいですか?", - "task_title": "タスクスケジューラー", - "task_all_status": "すべてのステータス", - "task_status_pending": "保留中", - "task_status_running": "実行中", - "task_status_success": "成功", - "task_status_failed": "失敗", - "task_search": "タスクを検索…", - "task_create": "タスクを作成", - "task_name": "タスク名", - "task_type": "タイプ", - "task_type_script": "スクリプト", - "task_type_install": "インストール", - "task_type_update": "更新", - "task_type_restart": "再起動", - "task_type_deploy": "デプロイ", - "task_type_scan": "スキャン", - "task_targets": "ターゲット", - "task_targets_help": "デバイスIDまたはグループ名(カンマ区切り)", - "task_schedule": "スケジュール", - "task_schedule_once": "一度だけ", - "task_schedule_cron": "Cron", - "task_schedule_interval": "インターバル", - "task_schedule_value": "スケジュール値", - "task_script": "スクリプト / コマンド", - "task_retries": "リトライ", - "task_timeout": "タイムアウト (秒)", - "task_last_run": "最終実行", - "task_no_data": "タスクが見つかりません。新しいタスクを作成してください。", - "task_confirm_delete": "このタスクを削除してもよろしいですか?", - "task_output": "タスク出力", - "task_retry": "リトライ", - "builder_title": "ビジュアルワークフロービルダー", - "builder_select_workflow": "ワークフローを選択…", - "builder_new": "新規", - "builder_save": "保存", - "builder_export": "エクスポート", - "builder_execute": "実行", - "builder_dry_run": "テスト実行", - "builder_triggers": "トリガー", - "builder_conditions": "条件", - "builder_actions": "アクション", - "builder_results": "結果", - "builder_transforms": "変換", - "builder_properties": "プロパティ", - "builder_no_selection": "ノードを選択してプロパティを編集してください。", - "workflow_name": "ワークフロー名:", - "comp_title": "ソフトウェアコンプライアンス", - "comp_compliant": "準拠", - "comp_warning": "警告", - "comp_critical": "重大", - "comp_score": "平均スコア", - "comp_device": "デバイス", - "comp_hostname": "ホスト名", - "comp_os": "OS", - "comp_score_col": "スコア", - "comp_issues": "問題", - "comp_last_scan": "最終スキャン", - "comp_scan": "スキャン", - "comp_scan_all": "全てスキャン", - "comp_remediate": "修正", - "comp_remediate_confirm": "このデバイスで自動修正を実行しますか?", - "comp_no_data": "コンプライアンスデータなし。スキャンを実行してください。", - "save": "保存", - "cancel": "キャンセル", - "close": "閉じる", - "edit": "編集", - "delete": "削除", - "actions": "アクション", - "all_orgs": "すべての組織", - "builder_node_trigger_manual": "手動トリガー", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "イベントトリガー", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "サービスを再起動します", - "builder_node_action_file_deploy": "ファイルのデプロイ", - "builder_node_action_message": "メッセージを送信する", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "アラートの送信", - "builder_node_result_chain": "チェーンワークフロー", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "組織を選択してください…", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "ネットワークドライブ", - "type_dns": "DNSサーバー", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "リソースの追加", - "edit_resource": "リソースの編集", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "アドレス/パス", - "scope_org": "組織", - "scope_group": "グループ", - "scope_device": "デバイス", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "この項目を削除してもよろしいですか?", - "all_statuses": "すべてのステータス", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "失敗しました", - "search_tasks": "タスクを検索…", - "create_task": "タスクの作成", - "edit_task": "タスクの編集", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "ファイルの展開", - "task_type_registry": "Registry", - "target_devices": "対象デバイス", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "スクリプト/コマンド", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "読み込み中", - "no_output": "利用可能な出力がありません", - "error_loading": "データのロード中にエラーが発生しました", - "select_workflow": "ワークフローを選択してください…", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "手動トリガー", - "node_schedule": "Schedule", - "node_event": "イベントトリガー", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "サービスを再起動します", - "node_file_deploy": "ファイルのデプロイ", - "node_send_message": "メッセージを送信する", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "アラートの送信", - "node_chain": "チェーンワークフロー", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "すべての組織", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "デバイス", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "このデバイスで自動修復を実行しますか?" - }, - "scaling": { - "title": "スケーリングとリレー管理", - "tab_overview": "概要", - "tab_relays": "リレーノード", - "tab_rules": "割り当てルール", - "tab_capacity": "容量計画", - "arch_title": "ネットワークアーキテクチャ", - "arch_loading": "アーキテクチャ図を読み込み中...", - "stat_relay_nodes": "リレーノード", - "stat_total_devices": "デバイス合計", - "stat_active_sessions": "アクティブセッション", - "stat_bandwidth": "合計帯域幅", - "relay_health": "リレー状態", - "no_relays": "リレーノードが設定されていません。負荷分散のために最初のノードを追加してください。", - "relay_search": "リレーを検索...", - "relay_add": "リレーノードを追加", - "relay_edit": "リレーノードを編集", - "col_name": "名前", - "col_address": "アドレス", - "col_location": "場所", - "col_devices": "デバイス", - "col_sessions": "セッション", - "col_bandwidth": "帯域幅", - "col_status": "ステータス", - "col_actions": "アクション", - "col_priority": "優先度", - "col_rule_name": "ルール名", - "col_match": "一致", - "col_target_relay": "ターゲットリレー", - "col_fallback": "フォールバック", - "status_online": "オンライン", - "status_degraded": "劣化", - "status_offline": "オフライン", - "status_enabled": "有効", - "status_disabled": "無効", - "confirm_delete_relay": "このリレーノードを削除してもよろしいですか?", - "confirm_delete_rule": "この割り当てルールを削除してもよろしいですか?", - "rules_hint": "割り当てルールは、特定のデバイスグループをどのリレーサーバーが処理するかを決定します。ルールは優先度順(最低が最初)で評価されます。", - "rule_add": "ルールを追加", - "rule_edit": "ルールを編集", - "rule_match_type": "一致タイプ", - "match_subnet": "サブネット", - "match_group": "デバイスグループ", - "match_tag": "デバイスタグ", - "match_location": "場所", - "rule_match_value": "一致値", - "fallback_master": "マスターサーバー", - "fallback_nearest": "最寄りのリレー", - "relay_max_sessions": "最大セッション数", - "relay_max_bandwidth": "最大帯域幅 (Mbps)", - "cap_tiers": "容量ティア", - "cap_loading": "容量データを読み込み中...", - "cap_recommendations": "推奨事項", - "cap_no_recs": "推奨事項はありません。", - "cap_planning": "インフラ計画", - "cap_config": "設定", - "cap_max_devices": "最大デバイス数", - "cap_max_sessions": "最大セッション数", - "cap_current": "現在", - "cap_utilization": "利用率", - "cap_tier_devices": "デバイス容量", - "cap_tier_sessions": "セッション容量", - "cap_tier_bandwidth": "帯域幅容量", - "cap_single_sqlite": "単一サーバー (SQLite)", - "cap_single_pg": "単一サーバー (PostgreSQL)", - "cap_master_3": "マスター + 3 リレー", - "cap_master_10": "マスター + 10 リレー", - "rec_no_relays": "リレーノードが設定されていません。パフォーマンスと冗長性の向上のためにリレーの追加を検討してください。", - "rec_devices_high": "デバイス利用率が高いです。リレーノードの追加を検討してください。", - "rec_sessions_high": "セッション容量が限界に近づいています。インフラのアップグレードを検討してください。", - "rec_cpu_high": "一部のリレーノードでCPU使用率が高いです。負荷分散を検討してください。", - "rec_all_good": "すべてのシステムが正常なパラメータ内で動作しています。アクションは不要です。", - "save": "保存", - "cancel": "キャンセル", - "edit": "編集", - "delete": "削除", - "close": "閉じる", - "no_rules": "割り当てルールがありません。", - "relays_info_banner": "このリストは情報提供です。クライアントが実際に使用するリレー サーバーは、BetterDesk サーバー上の RELAY_SERVERS 環境変数を介して構成されます。", - "relay_name_address_required": "名前と住所は必須です。", - "relay_save_failed": "中継ノードの保存に失敗しました。", - "relay_delete_failed": "中継ノードの削除に失敗しました。", - "relay_saved": "リレーノードが保存されました。", - "relay_deleted": "リレーノードが削除されました。", - "rule_name_value_required": "ルール名と一致値は必須です。", - "rule_save_failed": "ルールの保存に失敗しました。", - "rule_delete_failed": "ルールの削除に失敗しました。", - "rule_saved": "ルールが保存されました。", - "rule_deleted": "ルールが削除されました。" - }, - "cross_platform": { - "title": "クロスプラットフォーム互換性", - "tab_matrix": "互換性マトリックス", - "tab_distribution": "分布", - "tab_protocols": "プロトコル", - "tab_limitations": "制限事項", - "matrix_hint": "すべてのサポートプラットフォームの機能サポートマトリックス。緑=完全サポート、黄=部分的、灰=利用不可、青=計画中。", - "col_feature": "機能", - "legend_full": "完全サポート", - "legend_partial": "部分的サポート", - "legend_none": "利用不可", - "legend_planned": "計画中", - "platform_breakdown": "プラットフォーム分布", - "arch_breakdown": "アーキテクチャ分布", - "version_breakdown": "バージョン分布", - "summary": "概要", - "total_devices": "デバイス合計", - "unique_platforms": "プラットフォーム", - "unique_archs": "アーキテクチャ", - "unique_versions": "クライアントバージョン", - "no_devices": "まだデバイスが登録されていません。", - "protocols_hint": "プロトコル機能ネゴシエーションにより、各クライアントはサポートされている機能のみを受信します。サーバーは報告された機能に基づいて動作を適応させます。", - "capability_negotiation": "機能ネゴシエーション", - "codec_support": "コーデックサポート(オンラインデバイス)", - "feature_support": "機能サポート(オンラインデバイス)", - "no_codec_data": "オンラインデバイスからのコーデックデータなし。", - "no_feature_data": "オンラインデバイスからの機能データなし。", - "protobuf_schema": "ClientCapabilities Protobufスキーマ", - "diagram_client": "クライアント", - "diagram_server": "BetterDeskサーバー", - "diagram_peer": "リモートピア", - "limitations_hint": "各プラットフォームには利用可能な機能に影響する特定の制限があります。デプロイ計画時に確認してください。", - "feat_desktop_client": "デスクトップクライアント", - "feat_background_agent": "バックグラウンドエージェント", - "feat_remote_target": "リモートターゲット", - "feat_screen_capture": "スクリーンキャプチャ", - "feat_input_injection": "入力インジェクション", - "feat_file_transfer": "ファイル転送", - "feat_clipboard_sync": "クリップボード同期", - "feat_audio_streaming": "オーディオストリーミング", - "feat_chat": "チャット", - "feat_h264": "H.264コーデック", - "feat_vp9": "VP9コーデック", - "feat_av1": "AV1コーデック", - "feat_cdap_agent": "CDAPエージェント", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "ウェブブラウザ", - "platform_chromeos": "ChromeOS", - "status_production": "本番", - "status_testing": "テスト", - "status_planned": "計画中", - "status_limited": "制限付き", - "status_experimental": "実験的", - "limit_win_uac": "サービスインストールとセキュアデスクトップでの入力インジェクションにUAC昇格が必要です。", - "limit_win_service": "NSSMサービスとして実行されます。インストールには管理者権限が必要です。", - "limit_win_firewall": "Windowsファイアウォールルールでポート21115-21119をリレー接続用に許可する必要があります。", - "limit_linux_wayland": "Waylandコンポジタはプログラムによるスクリーンキャプチャを制限します。PipeWireポータルAPIが必要です。", - "limit_linux_pipewire": "オーディオキャプチャにPipeWireが必要です。PulseAudioフォールバックは利用可能ですが制限があります。", - "limit_linux_arm": "ARM64ビルド利用可能。一部のコーデックはソフトウェアデコードを使用する場合があります(低速)。", - "limit_mac_screen": "システム設定 > プライバシーとセキュリティで画面収録の許可が必要です。", - "limit_mac_signing": "配布にはApple Developer IDでの署名が必要です。", - "limit_mac_notarize": "macOS Gatekeeper用に公証が必要です(App Store外配布)。", - "limit_android_projection": "MediaProjection APIは各キャプチャセッションでユーザーの同意が必要です。", - "limit_android_accessibility": "入力インジェクションにAccessibilityServiceが必要です。Android 14+から制限されています。", - "limit_android_battery": "バックグラウンドサービスはDozeモードで制限されます。バッテリー最適化の除外が必要な場合があります。", - "limit_ios_capture": "Appleはバックグラウンドでのスクリーンキャプチャを禁止しています。ビューアーモードのみサポートされています。", - "limit_ios_input": "入力インジェクションは許可されていません。リモート表示とチャットのみ。", - "limit_ios_appstore": "App Store経由のみの配布。ベータテストにTestFlight。", - "limit_web_https": "WebCodecs APIとWebRTCはHTTPSが必要です。HTTPはJMuxerにフォールバックします(コーデック制限)。", - "limit_web_codec": "コーデックサポートはブラウザに依存。H.264は広くサポートされ、VP9/AV1はブラウザにより異なります。", - "limit_web_performance": "ブラウザサンドボックスによるパフォーマンス制限。直接ハードウェアアクセラレーションなし。", - "limit_chrome_crostini": "フルエージェントサポートはCrostini Linuxコンテナ内のみ。", - "limit_chrome_pwa": "PWAモードはウェブ機能のみ提供。ネイティブエージェント機能なし。", - "limit_chrome_input": "Crostiniコンテナ外での入力インジェクションはサポートされていません。", - "feat_session_recording": "セッション録画", - "feat_multi_monitor": "マルチモニター", - "feat_unattended_access": "無人アクセス", - "limit_win_virtual_account": "サービスは LocalSystem の代わりに分離された仮想アカウントで実行されます。カスタムログパスには ACL の調整が必要な場合があります。", - "limit_linux_unprivileged": "サービスは systemd ハードニング(NoNewPrivileges、ProtectSystem=strict)を備えた専用の非特権「betterdesk」アカウントで実行されます。" - }, - "security_audit": { - "title": "セキュリティ監査", - "tab_overview": "概要", - "tab_events": "監査イベント", - "tab_hardening": "ハーデニング", - "tab_vulnerabilities": "脆弱性", - "security_score": "セキュリティスコア", - "failed_logins": "ログイン失敗(24h)", - "active_bans": "アクティブバン", - "api_keys": "APIキー", - "old_keys": "古いキー(>90日)", - "security_checks": "セキュリティチェック", - "tls_status": "TLSステータス", - "pass": "合格", - "warning": "警告", - "fail": "失敗", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket セキュア", - "enabled": "有効", - "disabled": "無効", - "all_events": "全イベント", - "event_login_failed": "ログイン失敗", - "event_login_success": "ログイン成功", - "event_peer_banned": "デバイスバン", - "event_ip_banned": "IPバン", - "event_config_changed": "設定変更", - "event_key_created": "キー作成", - "refresh": "更新", - "col_time": "時刻", - "col_action": "アクション", - "col_actor": "アクター", - "col_target": "ターゲット", - "col_ip": "IPアドレス", - "col_details": "詳細", - "no_events": "監査イベントが見つかりません。", - "hardening_hint": "BetterDeskデプロイのセキュリティハーデニング優先事項。重大度順。", - "no_hardening": "ハーデニング項目なし。", - "vuln_hint": "依存関係脆弱性スキャン結果。定期的にnpm auditを実行してください。", - "no_vulns": "脆弱性は見つかりませんでした。依存関係は安全です。" - }, - "languages": { - "title": "言語管理", - "total_languages": "総言語数", - "fully_translated": "完全に翻訳", - "needs_review": "見直しが必要", - "reference_keys": "参照キー", - "no_languages": "言語ファイルが見つかりません。", - "badge_reference": "Reference", - "badge_review": "見直しが必要", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "ビューが見つかりません", - "fix_missing": "Fix Missing", - "missing_keys_for": "のキーがありません", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "そして{n}もっと...", - "all_keys_present": "鍵はすべて揃っています!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code} の不足しているキーは手動で翻訳する必要があります。", - "no_fix_needed": "紛失したキーを修正する必要はありません。" - }, - "resource_control": { - "title": "リソース制御", - "tab_overview": "概要", - "tab_usb": "USB Control", - "tab_optical": "光学ドライブ", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "リソース割り当て", - "compliance_by_category": "カテゴリ別のコンプライアンス", - "device_compliance": "デバイスのコンプライアンス", - "search_devices": "デバイスを検索...", - "col_device": "デバイス", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "総デバイス数", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "遵守率", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "設定する", - "no_devices": "デバイスが見つかりません", - "usb_title": "USB ポート制御", - "usb_hint": "選択したデバイスまたは組織全体のデフォルト ポリシーに対する USB ストレージ デバイス アクセスを制御します。", - "usb_storage_policy": "USB ストレージ ポリシー", - "usb_whitelist": "ホワイトリストに登録されたデバイス (1 行に 1 つ)", - "usb_whitelist_hint": "VID:PID (例: 0781:5583)", - "usb_audit_log": "USB デバイスの接続をログに記録します", - "optical_title": "光学ドライブ制御", - "optical_hint": "選択したデバイスの CD/DVD/Blu-ray ドライブへのアクセスを制御します。", - "optical_policy": "光学ドライブポリシー", - "optical_audit_log": "光学ドライブへのアクセスをログに記録する", - "monitors_title": "モニター管理", - "monitors_hint": "最大数、解像度の強制、明るさ、電源スケジュールなどのモニター設定を構成します。", - "monitors_max_count": "最大モニター数 (0 = 無制限)", - "monitors_max_hint": "0は制限なしを意味します", - "monitors_resolution": "最大解像度", - "monitors_brightness": "明るさの制限", - "monitors_power_schedule": "電源スケジュール", - "monitors_power_hint": "例:オフ:22:00-06:00", - "disks_title": "ディスクアクセス制御", - "disks_hint": "読み取り専用モード、暗号化の強制、パーティションの可視性などのディスク アクセス ポリシーを構成します。", - "disks_readonly": "読み取り専用モードを強制する", - "disks_encryption": "暗号化が必要 (BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T.を有効にするモニタリング", - "disks_hidden": "隠しパーティション", - "disks_hidden_hint": "カンマ区切りのドライブ文字またはマウントポイント", - "quotas_title": "リソース割り当て", - "quotas_hint": "選択したデバイスのユーザーごとの CPU、RAM、帯域幅、およびディスク クォータを設定します。", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "帯域幅制限 (Mbps)", - "quotas_bandwidth_hint": "0 = 無制限", - "quotas_disk_quota": "ディスク クォータ (GB)", - "quotas_disk_hint": "0 = 無制限", - "quotas_process_whitelist": "プロセスのホワイトリス�� (1 行に 1 つ)", - "quotas_process_hint": "例: chrome.exe、code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "ホワイトリストのみ", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "ソフトウェアのアップデート", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "インストールされているバージョン", - "latest_version": "Latest version", - "status": "Status", - "check_now": "アップデートをチェックする", - "checking": "Checking…", - "up_to_date": "最新の状態", - "update_available": "利用可能なアップデート", - "changelog": "Release Notes", - "no_changelog": "リリースノートはありません", - "files_changed": "ファイルが変更されました", - "files": "ファイル", - "changes_unavailable": "ファイル変更リストをロードできませんでした。引き続きアップデートをインストールできます。", - "create_backup": "アップデートする前にバックアップを作成する", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "アップデートをインストール中…", - "creating_backup": "バックアップを作成しています…", - "downloading": "ファイルをダウンロード中…", - "install_success": "アップデートは正常にインストールされました。コンソールを再起動しています…", - "install_failed": "アップデートのインストールに失敗しました", - "restarting": "コンソールが再起動するのを待っています…", - "restart_complete": "コンソールが正常に再起動されました", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "更新バージョンが選択されていません。まず更新を確認してください。", - "backups_title": "バックアップの更新", - "backups_desc": "各アップデートの前に自動的に作成されるアップデート前のバックアップ", - "no_backups": "更新バックアップが見つかりません", - "restore": "Restore", - "restore_confirm": "このバックアップから復元してもよろしいですか?変更されたファイルは上書きされます。", - "restore_success": "バックアップは正常に復元されました。コンソールを再起動しています…", - "baseline_set": "ベースラインセット", - "commits_behind": "後ろにコミットする", - "total_files": "総ファイル数", - "applied": "Applied", - "failed": "失敗しました", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Goサーバー", - "component_agent": "Agent", - "component_scripts": "スクリプトとDocker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "移動を確認中…", - "go_not_found": "Goがインストールされていません", - "go_check_failed": "Go の可用性を確認できませんでした", - "server_building": "Go server をコンパイル中… これには数分かかる場合があります。", - "server_built": "サーバーバイナリがコンパイルされました", - "server_build_failed": "サーバーのコンパイルに失敗しました", - "server_stale_title": "サーバーのバイナリが古くなっています", - "server_stale_desc": "Go server ソースは更新されましたが、実行中のバイナリは再構築されませんでした。今すぐ再構築して、セキュリティとライブラリの更新を適用します。", - "rebuild_server": "サーバーバイナリを再構築する", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "サーバーバイナリが再構築され、再起動されました", - "rebuild_server_failed": "サーバーバイナリの再構築に失敗しました", - "server_deployed": "サーバーバイナリがデプロイされました", - "server_deploy_failed": "サーバーのデプロイに失敗しました", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "サーバーソースをダウンロード中…", - "delete": "削除", - "delete_confirm": "バックアップ {name} を完全に削除しますか?これを元に戻すことはできません。", - "delete_success": "バックアップが削除されました", - "delete_failed": "バックアップの削除に失敗しました", - "retention_label": "最新のバックアップを N 個保持する", - "retention_hint": "古いバックアップは更新のたびに自動的に削除されます。すべてのバックアップを保持するには 0 を使用します。", - "retention_saved": "保存設定が保存されました", - "retention_invalid": "保持期間は 0 ~ 1000 の整数でなければなりません", - "retention_required_for_prune": "最初に 0 より大きい保持値を設定します", - "prune_now": "Apply now", - "prune_confirm": "{n} の最新のバックアップのみを保持し、残りは削除しますか?", - "prune_done": "プルーニングされた {n} バックアップ", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "更新方法", - "strategy_download": "事前に構築されたバイナリをダウンロードする", - "strategy_compile": "ソースからコンパイルする", - "both_available": "ダウンロードとコンパイル", - "download_available": "ダウンロード可能", - "no_method": "更新方法がありません", - "no_release": "No release", - "available": "利用可能", - "server_downloading": "サーバーバイナリをダウンロード中…", - "server_downloaded": "サーバーバイナリがダウンロードされました", - "server_download_failed": "サーバーバイナリのダウンロードに失敗しました", - "server_download_note": "事前に構築されたバイナリは GitHub Releases からダウンロードされます。通常、これには 1 分もかかりません。", - "install_go_hint": "https://go.dev/dl/ から Go をインストールしてコンパイルを有効にするか、事前に構築されたバイナリを含むリリースを公開します", - "strategy_install_go": "Go を自動インストー���してコンパイルする", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "自動リビルドの準備完了", - "toolchain_ready": "ツールチェーンがインストールされています", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Go ツールチェーンをダウンロード中…", - "toolchain_failed": "Go ツールチェーンのインストールに失敗しました", - "modal_title": "アップデートをインストールしています", - "modal_done_title": "アップデート完了", - "modal_close": "閉じる", - "modal_reload_now": "コンソールをリロードする", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "コンソールファイル", - "phase_server": "サーバー段階", - "phase_restart": "再起動", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "バックアップはスキップされました (ユーザーの選択による)", - "server_skipped": "Go server スキップされました", - "server_not_selected": "Go server not selected", - "server_processing": "Go server 更新を処理しています…", - "no_restart_needed": "再起動は必要ありません", - "complete": "アップデートが適用されました", - "complete_summary": "アップデートは正常に適用されました。", - "complete_with_errors": "アップデートは完了しましたが、いくつかの手順が失敗しました。詳細は以下をご覧ください。", - "modal_done_with_errors_title": "アップデートはエラーで終了しました", - "console_will_restart": "コンソールプロセスが再起動されます…", - "restart_complete_msg": "コンソールの再起動が完了しました。 「再ロード」をクリックして新しいバージョンをロードします。ページは 8 秒後に自動的にリロードされます。", - "refresh_recommended": "静的アセットが変更されました - ページをリロードして新しい UI を表示します。", - "confirm_title": "アップデートを適用する", - "confirm_with_backup": "アップデート前のバックアップが自動的に作成されます。", - "confirm_no_backup": "バックアップは作成されません (自己責任で行ってください)。" - }, - "permissions": { - "title": "権限", - "subtitle": "ロールベースの権限とカスタムオーバーライドを管理する", - "info_title": "権限の仕組み", - "info_desc": "各役割にはデフォルトの権限があります。以下で切り替えることで、役割ごとに個別の権限を追加または削除できます。カスタム オーバーライドは強調表示され、いつでもデフォルトに戻すことができます。", - "select_role": "役割の選択", - "select_role_placeholder": "役割を選択してください...", - "reset_overrides": "すべてのオーバーライドをリセット", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "サーバーレベル", - "custom": "Custom", - "default": "Default", - "revert": "デフォルトに戻す", - "saved": "許可が更新されました", - "reverted": "デフォルトに戻しました", - "all_reverted": "すべてのオーバーライドが元に戻されました", - "confirm_reset": "このロールのすべてのカスタム オーバーライドをデフォルトにリセットしますか?", - "empty_title": "役割を選択してください", - "empty_desc": "上のドロップダウンからロールを選択して、その権限を表示および管理します。", - "locked_title": "Super Admin", - "locked_desc": "スーパー管理者にはデフォルトですべての権限があり、カスタマイズすることはできません。", - "cat_device": "デバイス", - "cat_user": "Users", - "cat_server": "サーバー", - "cat_org": "組織", - "cat_audit": "監査とモニタリング", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "デバイスの表示", - "perm_device_connect": "デバイスに接続する", - "perm_device_edit": "デバイスの編集", - "perm_device_delete": "デバイスの削除", - "perm_device_ban": "デバイスの禁止/禁止解除", - "perm_device_change_id": "デバイスIDの変更", - "perm_user_view": "ユーザーを表示する", - "perm_user_create": "ユーザーの作成", - "perm_user_edit": "ユーザーの編集", - "perm_user_delete": "ユーザーを削除する", - "perm_server_config": "サーバー構成", - "perm_server_keys": "API キーを管理する", - "perm_org_create": "組織を作成する", - "perm_org_edit": "組織の編集", - "perm_org_delete": "組織の削除", - "perm_org_manage_users": "組織のユーザーを管理する", - "perm_org_manage_devices": "組織のデバイスを管理する", - "perm_audit_view": "監査ログを表示する", - "perm_metrics_view": "指標の表示", - "perm_blocklist_edit": "ブロックリストの編集", - "perm_cdap_view": "CDAP デバイスを表示する", - "perm_cdap_command": "CDAP コマンドを送信する", - "perm_cdap_terminal": "CDAP 端末アクセス", - "perm_cdap_files": "CDAP ファイル アクセス", - "perm_enrollment_manage": "登録の管理", - "perm_enrollment_approve": "登録の承認", - "perm_chat_access": "Chat access", - "perm_branding_edit": "ブランドの編集", - "perm_server_attestation": "サーバー性能認定" - }, - "notifications": { - "title": "通知", - "empty": "新しい通知はありません", - "mark_all_read": "すべて既読としてマークする", - "see_all": "すべてのヘルプリクエストを表示", - "help_request": "ヘルプリクエスト", - "just_now": "just now" - }, - "accessibility": { - "title": "アクセシビリティ", - "subtitle": "視覚、動き、読みやすさに合わせてコンソールを調整します。", - "close": "アクセシビリティメニューを閉じる", - "profiles": "クイックプロファイル", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "大きな文字、強いコントラスト、フォーカス。", - "profile_dyslexia": "快適な読書", - "profile_dyslexia_hint": "読みやすいフォントと広い間隔。", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "トランジションを減らし、アニメーションを一時停止します。", - "profile_color_assist": "カラーサポート", - "profile_color_assist_hint": "カラー フィルター、ラベル、強調表示されたリンク。", - "reading": "読み取り", - "font_size": "文字サイズ", - "line_height": "行の高さ", - "letter_spacing": "文字間隔", - "word_spacing": "単語の間隔", - "readable_font": "読みやすいフォント", - "readable_font_hint": "広くて馴染みのある文字の形を使用します。", - "dyslexia_spacing": "ディスレクシアの間隔", - "dyslexia_spacing_hint": "長いテキストの場合は余分なスペースを追加します。", - "visual": "表示", - "contrast": "コントラスト", - "contrast_normal": "Normal", - "contrast_high_dark": "ハイコントラストダーク", - "contrast_high_light": "ハイコントラストライト", - "contrast_yellow_black": "黒地に黄色", - "color_filter": "色覚フィルター", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "色の彩度", - "underline_links": "リンクに下線を引く", - "underline_links_hint": "色に依存せずにリンクを可視化します。", - "highlight_links": "ハイライトアクション", - "highlight_links_hint": "リンクとボタンのアウトラインを示します。", - "highlight_headings": "見出しを強調表示する", - "highlight_headings_hint": "セクションのタイトルをカラーバーでマークします。", - "hide_media": "Dim media", - "hide_media_hint": "画像、ビデオ、キャンバスを暗くします。", - "interaction": "操作", - "strong_focus": "強い集中力", - "strong_focus_hint": "大きなキーボードのフォーカスリングが表示されます。", - "large_cursor": "大きなカーソル", - "large_cursor_hint": "よ���大きなハイコントラスト ポインターを使用します。", - "reduce_motion": "動きを減らす", - "reduce_motion_hint": "トランジションを短縮し、スクロールをスムーズにします。", - "pause_animations": "アニメーションを一時停止する", - "pause_animations_hint": "視覚的な動きのループを停止し��す。", - "reading_guide": "読書ガイド", - "reading_guide_hint": "ポインターを明るい線で追跡します。", - "reading_mask": "読書マスク", - "reading_mask_hint": "ポインタの上下のコンテンツを暗くします。", - "preview": "プレビュー", - "preview_title": "オペレーターワークスペースのプレビュー", - "preview_text": "このメニューを閉じる前に、テキスト、リンク、コントロール、ステータス ラベルが読みやすいかどうかを確認してください。", - "preview_link": "デバイスの詳細リンク", - "preview_status": "Online", - "preview_button": "主なアクション", - "preview_secondary": "Secondary", - "reset": "リセット", - "done": "完了" - }, - "server_mgmt": { - "title": "サーバー管理", - "subtitle": "BetterDesk コンソールホスト用の Cockpit 風コントロールパネル(ベータ)。", - "beta_tooltip": "ベータ機能 — 現在開発中です。", - "notice_title": "ベータ版機能", - "notice_body": "これらのツールは、BetterDesk コンソール プロセスが存在するホスト上で実行されます。すべての操作が監査されます。機能の範囲は将来のリリースで拡大される予定です。", - "tab_overview": "概要", - "tab_terminal": "ターミナル", - "tab_files": "ファイル", - "tab_services": "サービス", - "cpu": "CPU", - "memory": "メモリ", - "load": "負荷平均", - "disks": "ディスク", - "history": "履歴 (最後の 60 サンプル)", - "host_info": "Host info", - "cores": "cores", - "uptime": "稼働時間", - "no_disks": "利用可能なディスクデータがありません", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY利用可能", - "term_connect": "接続", - "term_disconnect": "切断", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "接続エラー", - "term_warning": "コマンドは、コンソール プロセスを所有するユーザーとして実行されます。 sudoers ルールを追加して昇格を有効にします。", - "term_hint": "ヒント: エスカレーションするには、「sudo -i」と入力します (sudoers の設定が必要です)。", - "term_lib_failed": "端末ライブラリのロードに失敗しました", - "files_up": "一つ上のレベルへ", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "名前", - "files_size": "サイズ", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "空のディレクトリ", - "files_error": "ディレクトリのリストに失敗しました", - "read_failed": "ファイルの読み取りに失敗しました", - "save_failed": "ファイルの保存に失敗しました", - "rename_failed": "名前の変更に失敗しました", - "delete_failed": "削除に失敗しました", - "delete_confirm": "このエントリを削除しますか?", - "mkdir_prompt": "新しいフォルダー名:", - "mkdir_failed": "フォルダーの作成に失敗しました", - "file_saved": "ファイルが保存されました", - "binary_warn": "バイナリ ファイル - プレビューのみ", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "検索サービス…", - "svc_name": "サービス", - "svc_state": "状態", - "svc_description": "Description", - "svc_empty": "サービスが見つかりませんでした", - "svc_load_failed": "サービスのロードに失敗しました", - "svc_action_failed": "アクションが失敗しました", - "svc_confirm": "Run", - "svc_start": "開始", - "svc_stop": "停止", - "svc_restart": "再起動", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk エージェントをダウンロード", - "choose_platform": "プラットフォームを選択してください", - "choose_platform_hint": "オペレーティング システムに一致するインストーラーを選択します。", - "download": "ダウンロード", - "building": "建物…", - "failed": "ビルドに失敗しました", - "need_help": "助けが必要ですか?", - "powered_by": "提供元" - }, - "server_attestation": { - "title": "サーバー性能認定", - "subtitle": "CPU、RAM、ディスク使用率が 80% に達した時点での並行リモート接続容量を測定するパフォーマンスベンチマーク。", - "warning_title": "負荷テスト", - "warning_body": "ベンチマークはシグナルサーバーとリレーサーバーへの並列 WebSocket 接続をシミュレートします。本番環境に負荷がかかるため、オフピーク時間帯に実行してください。", - "run_benchmark": "ベンチマークを実行", - "abort": "中止", - "download_report": "JSON レポートをダウンロード", - "last_test": "最後のテスト", - "no_test_yet": "まだベンチマークが実行されていません", - "max_connections": "最大接続数", - "threshold_80": "80% しきい値 — 最終メトリクス", - "disk": "ディスク", - "ramp_chart": "負荷ランプチャート", - "connections": "接続数", - "connections_short": "接続", - "tier_guide_title": "各ティアの意味は?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1〜25 並行接続 — 小型 VPS(1〜2 vCPU、2〜4 GB RAM)。", - "tier_iron_desc": "26〜75 接続 — ミッドレンジサーバー(2〜4 vCPU、4〜8 GB RAM)。", - "tier_platinum_desc": "76〜200 接続 — 高性能サーバー(4〜8 vCPU、8〜16 GB RAM)。", - "tier_titanium_desc": "201〜400 接続 — エンタープライズインフラ(8+ vCPU、16〜32 GB RAM)。", - "tier_obsidian_desc": "401+ 接続 — ターボクラス: 専用ハードウェア、16+ vCPU、32+ GB RAM、NVMe。", - "docker_note": "注意: Docker では CPU/RAM メトリクスは物理ホストではなくコンテナーの制限を反映する場合があります。", - "badge_tooltip": "BetterDesk サーバー性能認定 — サーバーパフォーマンス認定", - "confirm_run": "このベンチマークはシミュレーション接続でサーバーの負荷テストを行います。続行しますか?", - "starting": "開始中…", - "complete": "ベンチマーク完了", - "signal_peers": "シグナルピア", - "relay_sessions": "リレーセッション", - "page_error": "サーバー性能認定ページの読み込みに失敗しました", - "mode_estimated": "推定値(WebSocket 到達不可)", - "incomplete": "ベンチマーク終了したが有効なティアが取得できませんでした" + "form": { + "cancel": "キャンセル" } + } } diff --git a/web-nodejs/lang/ko.json b/web-nodejs/lang/ko.json index 97878c60..1049a664 100644 --- a/web-nodejs/lang/ko.json +++ b/web-nodejs/lang/ko.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "ko", - "name": "Korean", - "native_name": "한국어", - "direction": "ltr" + "meta": { + "lang": "ko", + "name": "Korean", + "native_name": "한국어", + "direction": "ltr" + }, + "common": { + "loading": "로딩 중...", + "confirm": "확인", + "alert": "알림", + "prompt": "값을 입력하세요", + "copied": "클립보드에 복사됨", + "save": "저장", + "saved": "저장됨", + "error": "오류", + "success": "성공", + "warning": "경고", + "info": "정보", + "all": "전체", + "cancel": "취소", + "delete": "삭제", + "actions": "작업", + "close": "닫기", + "required": "필수", + "name_required": "이름은 필수입니다", + "active": "활성", + "inactive": "비활성", + "invalid_json": "유효하지 않은 JSON", + "field_required": "{field}은(는) 필수입니다", + "back": "뒤로", + "edit": "편집", + "yes": "예", + "no": "아니요" + }, + "nav": { + "main": "메인", + "tools": "도구", + "system": "시스템", + "dashboard": "대시보드", + "devices": "장치", + "keys": "키", + "generator": "생성기", + "settings": "설정", + "users": "사용자", + "inventory": "인벤토리", + "tickets": "티켓", + "help_requests": "도움 요청", + "activity": "활동", + "automation": "자동화", + "file_transfer": "파일 전송", + "network": "네트워크", + "dataguard": "DataGuard", + "reports": "보고서", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "관리", + "toggle_sidebar": "사이드바 전환", + "cdap": "CDAP 장치", + "fleet": "플릿", + "scaling": "스케일링", + "cross_platform": "크로스 플랫폼", + "tokens": "장치 토큰", + "organizations": "조직", + "policies": "정책", + "attestation": "인증", + "remote": "원격 데스크톱", + "toolkit": "Toolkit", + "security_audit": "보안 감사", + "languages": "언어", + "resource_control": "리소스 제어", + "chat": "채팅", + "help": "Help", + "expand_sidebar": "사이드바 확장", + "toggle_theme": "테마 전환", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "권한", + "server_management": "서버 관리", + "server_attestation": "서버 성능 인증", + "commercialization": "상용화" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "BetterDesk 콘솔에 로그인", + "username": "사용자 이름", + "username_placeholder": "사용자 이름을 입력하세요", + "password": "비밀번호", + "password_placeholder": "비밀번호를 입력하세요", + "remember_me": "Remember me", + "login_failed": "로그인에 실패했습니다. 자격 증명을 확인하세요.", + "invalid_credentials": "사용자 이름 또는 비밀번호가 잘못되었습니다.", + "username_collision": "동일한 사용자 이름의 로컬 계정이 이미 있습니다. 로컬 비밀번호로 로그인하거나 관리자에게 충돌하는 계정의 이름 변경 또는 삭제를 요청하세요.", + "fill_all_fields": "모든 필드를 작성해 주세요.", + "logout_confirm": "정말로 로그아웃하시겠습니까?", + "change_password": "비밀번호 변경", + "password_required": "비밀번호가 필요합니다", + "totp_title": "2단계 인증", + "totp_subtitle": "인증 앱의 6자리 코드를 입력하세요.", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "대신 복구 코드를 사용하세요", + "totp_use_code": "대신 인증자 코드를 사용하세요", + "totp_recovery_code": "복구 코드", + "totp_back_to_login": "로그인으로 돌아가기", + "totp_invalid_code": "유효하지 않은 인증 코드입니다. 다시 시도하세요.", + "totp_enter_code": "6자리 코드를 입력하세요", + "totp_enter_recovery": "복구 코드를 입력하세요", + "totp_session_expired": "세션이 만료되었습니다. 다시 로그인하세요.", + "totp_already_enabled": "2단계 인증이 이미 활성화되어 있습니다", + "pro_only_account": "이 계정은 RustDesk 데스크톱 클라이언트 전용입니다. 로그인하려면 RustDesk 앱을 사용하세요.", + "passwords_mismatch": "비밀번호가 일치하지 않습니다", + "or": "또는", + "login_sso": "SSO로 로그인", + "login_sso_with": "{{provider}}로 로그인", + "oidc_denied": "ID 공급자가 액세스를 거부했습니다.", + "oidc_invalid": "OIDC 콜백이 잘못되었습니다. 다시 시도해 주세요.", + "oidc_failed": "OIDC 인증에 실패했습니다. 다시 시도해 주세요.", + "oidc_error": "SSO 로그인 중에 오류가 발생했습니다.", + "oidc_no_account": "귀하의 계정을 찾을 수 없으며 자동 등록이 비활성화되었습니다.", + "totp_rate_limited": "시도 횟수가 너무 많습니다. 나중에 다시 시도해 주세요.", + "emergency_mode_banner": "Go server에 연결할 수 없음 — 비상 모드에서 실행 중(관리자 전용, 제한된 기능)" + }, + "dashboard": { + "title": "대시보드", + "subtitle": "Overview of your RustDesk server", + "total_devices": "총 장치", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "활성 연결", + "offline_devices": "Offline", + "server_status": "서버 상태", + "quick_actions": "빠른 작업", + "manage_devices": "연결된 장치 관리", + "view_keys": "서버 키 보기", + "generate_config": "클라이언트 구성 생성", + "server_settings": "설정 구성", + "greeting_morning": "좋은 아침입니다, {name}", + "greeting_afternoon": "좋은 오후입니다, {name}", + "greeting_evening": "좋은 저녁입니다, {name}", + "greeting_night": "좋은 밤 되세요, {name}", + "health_overview": "상태 개요", + "devices_online": "온라인 장치", + "active_alerts": "활성 경고", + "recent_connections": "총 장치 수", + "server_uptime": "서버 가동 시간", + "activity_feed": "최근 활동", + "no_recent_activity": "최근 활동 없음", + "just_now": "방금", + "ago": "전", + "tip_desktop_mode": "모니터링 위젯이 있는 다중 창 작업 공간을 위해 데스크톱 모드를 사용해 보세요.", + "tip_keyboard_shortcuts": "어디서나 Ctrl+K 를 눌러 빠른 검색 명령 팔레트를 열 수 있습니다.", + "tip_address_book": "RustDesk 클라이언트에서 로그인하여 장치 간 주소록을 동기화하세요.", + "tip_2fa": "계정 보안을 강화하려면 설정에서 2단계 인증을 활성화하세요.", + "tip_bulk_actions": "여러 장치를 선택하고 일괄 작업으로 한 번에 관리하세요.", + "tip_theme": "사이드바 설정에서 다크 테마와 라이트 테마를 전환하세요.", + "tip_cdap": "CDAP 게이트웨이를 통해 IoT 장치와 산업용 센서를 연결하세요.", + "tip_tutorials": "오른쪽 아래의 도움말 버튼을 클릭하면 대화형 튜토리얼을 볼 수 있습니다." + }, + "devices": { + "title": "장치", + "id": "ID", + "hostname": "Hostname", + "username": "사용자 이름", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "생성됨", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "기기 검색...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "동기화 상태", + "sync_success": "상태가 성공적으로 동기화되었습니다.", + "empty_title": "기기를 찾을 수 없습니다.", + "empty_text": "현재 필터와 일치하는 기기가 없습니다.", + "edit_title": "장치 세부정보", + "delete_title": "장치 삭제", + "delete_confirm": "{id} 장치를 삭제하시겠습니까?", + "delete_warning": "이 기기를 영구적으로 삭제하려고 합니다.", + "delete_permanent": "이 작업은 취소할 수 없습니다. 이 장치와 관련된 모든 데이터는 데이터베이스에서 영구적으로 제거됩니다.", + "delete_success": "기기가 삭제되었습니다.", + "revoke_option": "기기 취소", + "revoke_hint": "장치 ID를 차단하고 활성 연결을 끊습니다.", + "revoke_success": "기기가 취소되었습니다.", + "details": "장치 세부정보", + "ban_title": "금지 장치", + "ban_confirm": "{id} 장치를 차단하시겠습니까?", + "ban_success": "기기가 성공적으로 차단되었습니다.", + "unban_title": "장치 차단 해제", + "unban_confirm": "{id} 장치 차단을 해제하시겠습니까?", + "unban_success": "기기 차단이 해제되었습니다.", + "change_id": "Change ID", + "change_id_title": "장치 ID 변경", + "new_id": "New ID", + "change_id_hint": "6~16자, 문자, 숫자, 대시, 밑줄만 가능", + "change_id_success": "기기 ID가 성공적으로 변경되었습니다.", + "id_length_error": "ID는 6~16자여야 합니다.", + "id_format_error": "ID에는 문자, 숫자, 대시, 밑줄만 포함할 수 있습니다.", + "bulk_delete_title": "여러 장치 삭제", + "bulk_delete_confirm": "{count} 기기를 삭제하시겠습니까?", + "bulk_delete_success": "{count} 장치가 성공적으로 삭제되었습니다.", + "columns": "Columns", + "toggle_columns": "표시되는 열 전환", + "not_found": "장치를 찾을 수 없습니다", + "delete_failed": "기기를 삭제하지 못했습니다.", + "change_id_failed": "기기 ID를 변경하지 못했습니다.", + "invalid_id": "잘못된 장치 ID(6~16자 필요)", + "invalid_id_format": "잘못된 ID 형식(문자, 숫자, 대시, 밑줄만)", + "id_exists": "장치 ID가 이미 존재합니다.", + "no_selection": "선택한 기기가 없습니다.", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "접근 정책", + "unattended_access": "무인 액세스", + "enable_unattended": "무인 액세스 활성화", + "access_password": "접속 비밀번호", + "password_configured": "비밀번호 설정", + "no_password": "비밀번호 없음", + "new_password": "새 비밀번호(현재 비밀번호를 유지하려면 비워두세요)", + "clear_password": "비밀번호 지우기", + "access_schedule": "액세스 일정", + "enable_schedule": "시간 기반 액세스 활성화", + "allowed_days": "허용일수", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "허용된 연산자", + "all_operators": "모든 연산자(비워두기)", + "operators_hint": "쉼표로 구분된 사용자 이름입니다. 모든 연산자를 허용하려면 비워 두세요.", + "last_updated_by": "최종 업데이트자:", + "access_policy_saved": "액세스 정책이 저장되었습니다.", + "tabs": { + "overview": "개요", + "hardware": "Hardware", + "metrics": "측정항목", + "connections": "연결", + "audit": "Audit", + "info": "Info", + "history": "역사" }, - "common": { - "loading": "로딩 중...", - "confirm": "확인", - "alert": "알림", - "prompt": "값을 입력하세요", - "copied": "클립보드에 복사됨", - "save": "저장", - "saved": "저장됨", - "error": "오류", - "success": "성공", - "warning": "경고", - "info": "정보", - "all": "전체", - "cancel": "취소", - "delete": "삭제", - "actions": "작업", - "close": "닫기", - "required": "필수", - "name_required": "이름은 필수입니다", - "active": "활성", - "inactive": "비활성", - "invalid_json": "유효하지 않은 JSON", - "field_required": "{field}은(는) 필수입니다", - "back": "뒤로", - "edit": "편집", - "yes": "예", - "no": "아니요" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "평균 부하", + "network": "네트워크 어댑터", + "no_data": "사용 가능한 하드웨어 데이터가 없습니다.", + "title": "하드웨어 정보", + "gpu": "Graphics Card" }, - "nav": { - "main": "메인", - "tools": "도구", - "system": "시스템", - "dashboard": "대시보드", - "devices": "장치", - "keys": "키", - "generator": "생성기", - "settings": "설정", - "users": "사용자", - "inventory": "인벤토리", - "tickets": "티켓", - "help_requests": "도움 요청", - "activity": "활동", - "automation": "자동화", - "file_transfer": "파일 전송", - "network": "네트워크", - "dataguard": "DataGuard", - "reports": "보고서", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "관리", - "toggle_sidebar": "사이드바 전환", - "cdap": "CDAP 장치", - "fleet": "플릿", - "scaling": "스케일링", - "cross_platform": "크로스 플랫폼", - "tokens": "장치 토큰", - "organizations": "조직", - "policies": "정책", - "attestation": "인증", - "remote": "원격 데스크톱", - "toolkit": "Toolkit", - "security_audit": "보안 감사", - "languages": "언어", - "resource_control": "리소스 제어", - "chat": "채팅", - "help": "Help", - "expand_sidebar": "사이드바 확장", - "toggle_theme": "테마 전환", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "권한", - "server_management": "서버 관리", - "server_attestation": "서버 성능 인증" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "BetterDesk 콘솔에 로그인", - "username": "사용자 이름", - "username_placeholder": "사용자 이름을 입력하세요", - "password": "비밀번호", - "password_placeholder": "비밀번호를 입력하세요", - "remember_me": "Remember me", - "login_failed": "로그인에 실패했습니다. 자격 증명을 확인하세요.", - "invalid_credentials": "사용자 이름 또는 비밀번호가 잘못되었습니다.", - "username_collision": "동일한 사용자 이름의 로컬 계정이 이미 있습니다. 로컬 비밀번호로 로그인하거나 관리자에게 충돌하는 계정의 이름 변경 또는 삭제를 요청하세요.", - "fill_all_fields": "모든 필드를 작성해 주세요.", - "logout_confirm": "정말로 로그아웃하시겠습니까?", - "change_password": "비밀번호 변경", - "password_required": "비밀번호가 필요합니다", - "totp_title": "2단계 인증", - "totp_subtitle": "인증 앱의 6자리 코드를 입력하세요.", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "대신 복구 코드를 사용하세요", - "totp_use_code": "대신 인증자 코드를 사용하세요", - "totp_recovery_code": "복구 코드", - "totp_back_to_login": "로그인으로 돌아가기", - "totp_invalid_code": "유효하지 않은 인증 코드입니다. 다시 시도하세요.", - "totp_enter_code": "6자리 코드를 입력하세요", - "totp_enter_recovery": "복구 코드를 입력하세요", - "totp_session_expired": "세션이 만료되었습니다. 다시 로그인하세요.", - "totp_already_enabled": "2단계 인증이 이미 활성화되어 있습니다", - "pro_only_account": "이 계정은 RustDesk 데스크톱 클라이언트 전용입니다. 로그인하려면 RustDesk 앱을 사용하세요.", - "passwords_mismatch": "비밀번호가 일치하지 않습니다", - "or": "또는", - "login_sso": "SSO로 로그인", - "login_sso_with": "{{provider}}로 로그인", - "oidc_denied": "ID 공급자가 액세스를 거부했습니다.", - "oidc_invalid": "OIDC 콜백이 잘못되었습니다. 다시 시도해 주세요.", - "oidc_failed": "OIDC 인증에 실패했습니다. 다시 시도해 주세요.", - "oidc_error": "SSO 로그인 중에 오류가 발생했습니다.", - "oidc_no_account": "귀하의 계정을 찾을 수 없으며 자동 등록이 비활성화되었습니다.", - "totp_rate_limited": "시도 횟수가 너무 많습니다. 나중에 다시 시도해 주세요.", - "emergency_mode_banner": "Go server에 연결할 수 없음 — 비상 모드에서 실행 중(관리자 전용, 제한된 기능)" - }, - "dashboard": { - "title": "대시보드", - "subtitle": "Overview of your RustDesk server", - "total_devices": "총 장치", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "활성 연결", - "offline_devices": "Offline", - "server_status": "서버 상태", - "quick_actions": "빠른 작업", - "manage_devices": "연결된 장치 관리", - "view_keys": "서버 키 보기", - "generate_config": "클라이언트 구성 생성", - "server_settings": "설정 구성", - "greeting_morning": "좋은 아침입니다, {name}", - "greeting_afternoon": "좋은 오후입니다, {name}", - "greeting_evening": "좋은 저녁입니다, {name}", - "greeting_night": "좋은 밤 되세요, {name}", - "health_overview": "상태 개요", - "devices_online": "온라인 장치", - "active_alerts": "활성 경고", - "recent_connections": "총 장치 수", - "server_uptime": "서버 가동 시간", - "activity_feed": "최근 활동", - "no_recent_activity": "최근 활동 없음", - "just_now": "방금", - "ago": "전", - "tip_desktop_mode": "모니터링 위젯이 있는 다중 창 작업 공간을 위해 데스크톱 모드를 사용해 보세요.", - "tip_keyboard_shortcuts": "어디서나 Ctrl+K 를 눌러 빠른 검색 명령 팔레트를 열 수 있습니다.", - "tip_address_book": "RustDesk 클라이언트에서 로그인하여 장치 간 주소록을 동기화하세요.", - "tip_2fa": "계정 보안을 강화하려면 설정에서 2단계 인증을 활성화하세요.", - "tip_bulk_actions": "여러 장치를 선택하고 일괄 작업으로 한 번에 관리하세요.", - "tip_theme": "사이드바 설정에서 다크 테마와 라이트 테마를 전환하세요.", - "tip_cdap": "CDAP 게이트웨이를 통해 IoT 장치와 산업용 센서를 연결하세요.", - "tip_tutorials": "오른쪽 아래의 도움말 버튼을 클릭하면 대화형 튜토리얼을 볼 수 있습니다." - }, - "devices": { - "title": "장치", - "id": "ID", - "hostname": "Hostname", - "username": "사용자 이름", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "생성됨", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "기기 검색...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "동기화 상태", - "sync_success": "상태가 성공적으로 동기화되었습니다.", - "empty_title": "기기를 찾을 수 없습니다.", - "empty_text": "현재 필터와 일치하는 기기가 없습니다.", - "edit_title": "장치 세부정보", - "delete_title": "장치 삭제", - "delete_confirm": "{id} 장치를 삭제하시겠습니까?", - "delete_warning": "이 기기를 영구적으로 삭제하려고 합니다.", - "delete_permanent": "이 작업은 취소할 수 없습니다. 이 장치와 관련된 모든 데이터는 데이터베이스에서 영구적으로 제거됩니다.", - "delete_success": "기기가 삭제되었습니다.", - "revoke_option": "기기 취소", - "revoke_hint": "장치 ID를 차단하고 활성 연결을 끊습니다.", - "revoke_success": "기기가 취소되었습니다.", - "details": "장치 세부정보", - "ban_title": "금지 장치", - "ban_confirm": "{id} 장치를 차단하시겠습니까?", - "ban_success": "기기가 성공적으로 차단되었습니다.", - "unban_title": "장치 차단 해제", - "unban_confirm": "{id} 장치 차단을 해제하시겠습니까?", - "unban_success": "기기 차단이 해제되었습니다.", - "change_id": "Change ID", - "change_id_title": "장치 ID 변경", - "new_id": "New ID", - "change_id_hint": "6~16자, 문자, 숫자, 대시, 밑줄만 가능", - "change_id_success": "기기 ID가 성공적으로 변경되었습니다.", - "id_length_error": "ID는 6~16자여야 합니다.", - "id_format_error": "ID에는 문자, 숫자, 대시, 밑줄만 포함할 수 있습니다.", - "bulk_delete_title": "여러 장치 삭제", - "bulk_delete_confirm": "{count} 기기를 삭제하시겠습니까?", - "bulk_delete_success": "{count} 장치가 성공적으로 삭제되었습니다.", - "columns": "Columns", - "toggle_columns": "표시되는 열 전환", - "not_found": "장치를 찾을 수 없습니다", - "delete_failed": "기기를 삭제하지 못했습니다.", - "change_id_failed": "기기 ID를 변경하지 못했습니다.", - "invalid_id": "잘못된 장치 ID(6~16자 필요)", - "invalid_id_format": "잘못된 ID 형식(문자, 숫자, 대시, 밑줄만)", - "id_exists": "장치 ID가 이미 존재합니다.", - "no_selection": "선택한 기기가 없습니다.", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "접근 정책", - "unattended_access": "무인 액세스", - "enable_unattended": "무인 액세스 활성화", - "access_password": "접속 비밀번호", - "password_configured": "비밀번호 설정", - "no_password": "비밀번호 없음", - "new_password": "새 비밀번호(현재 비밀번호를 유지하려면 비워두세요)", - "clear_password": "비밀번호 지우기", - "access_schedule": "액세스 일정", - "enable_schedule": "시간 기반 액세스 활성화", - "allowed_days": "허용일수", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "허용된 연산자", - "all_operators": "모든 연산자(비워두기)", - "operators_hint": "쉼표로 구분된 사용자 이름입니다. 모든 연산자를 허용하려면 비워 두세요.", - "last_updated_by": "최종 업데이트자:", - "access_policy_saved": "액세스 정책이 저장되었습니다.", - "tabs": { - "overview": "개요", - "hardware": "Hardware", - "metrics": "측정항목", - "connections": "연결", - "audit": "Audit", - "info": "Info", - "history": "역사" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "평균 부하", - "network": "네트워크 어댑터", - "no_data": "사용 가능한 하드웨어 데이터가 없습니다.", - "title": "하드웨어 정보", - "gpu": "Graphics Card" - }, - "display_name": "표시 이름", - "display_name_placeholder": "사용자 정의 이름(호스트 이름 재정의)", - "note_placeholder": "이 장치에 대한 참고 사항", - "tags": "Tags", - "filter_by_tags": "태그로 필터링", - "no_tags": "No tags", - "all_groups": "모든 그룹", - "create_group": "그룹 만들기", - "manage_groups": "그룹 관리", - "group_name": "그룹 이름", - "group_name_placeholder": "예를 들어 미디어 PC", - "dynamic_group": "태그의 동적 그룹", - "dynamic_group_hint": "이 태그가 있는 장치는 자동으로 연결됩니다.", - "tag_filter": "Tag filter", - "group_allowed_users": "허용된 사용자", - "group_allowed_users_hint": "장치 권한이 있는 모든 사람에게 그룹이 표시되도록 하려면 비워 두세요.", - "group_tag_required": "동적 그룹에는 태그 필터가 필요합니다.", - "group_invalid": "잘못된 그룹 식별자", - "group_not_found": "그룹을 찾을 수 없습니다", - "group_saved": "장치 그룹이 저장되었습니다.", - "groups_saved": "장치 그룹이 저장되었습니다.", + "display_name": "표시 이름", + "display_name_placeholder": "사용자 정의 이름(호스트 이름 재정의)", + "note_placeholder": "이 장치에 대한 참고 사항", + "tags": "Tags", + "filter_by_tags": "태그로 필터링", + "no_tags": "No tags", + "all_groups": "모든 그룹", + "create_group": "그룹 만들기", + "manage_groups": "그룹 관리", + "group_name": "그룹 이름", + "group_name_placeholder": "예를 들어 미디어 PC", + "dynamic_group": "태그의 동적 그룹", + "dynamic_group_hint": "이 태그가 있는 장치는 자동으로 연결됩니다.", + "tag_filter": "Tag filter", + "group_allowed_users": "허용된 사용자", + "group_allowed_users_hint": "장치 권한이 있는 모든 사람에게 그룹이 표시되도록 하려면 비워 두세요.", + "group_tag_required": "동적 그룹에는 태그 필터가 필요합니다.", + "group_invalid": "잘못된 그룹 식별자", + "group_not_found": "그룹을 찾을 수 없습니다", + "group_saved": "장치 그룹이 저장되었습니다.", + "groups_saved": "장치 그룹이 저장되었습니다.", "group_membership_added": "그룹에 추가됨", "group_membership_removed": "그룹에서 제거됨", - "no_groups": "아직 그룹이 없습니다.", - "manual_groups": "수동 그룹", - "dynamic_memberships": "동적 멤버십", - "group_allowed_user_groups": "허용된 사용자 그룹", - "group_allowed_user_groups_hint": "선택한 사용자 그룹의 사용자는 이 장치 그룹에 액세스할 수 있습니다.", - "no_user_groups": "사용자 그룹 없음", - "edit_group": "그룹 수정", - "delete_group": "그룹 삭제", - "delete_group_confirm": "장치 그룹 {name}를 삭제하시겠습니까?", - "group_deleted": "기기 그룹이 삭제되었습니다.", - "folder_group_readonly": "폴더 지원 그룹은 폴더에서 관리됩니다.", - "manage_user_groups": "사용자 그룹 관리", - "restore_failed": "기기 복원에 실패했습니다", - "no_signal_tooltip": "클라이언트가 최근 API에 연락했지만 시그널 서버(UDP :21116)에 등록되지 않았습니다. 서버 마이그레이션 후 클라이언트를 재시작하세요.", - "per_page": "페이지당" - }, - "keys": { - "title": "서버 키", - "subtitle": "RustDesk 클라이언트에 대한 공개 키 및 구성", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "서버 정보", - "download": "키 다운로드", - "show_qr": "Show QR", - "qr_hint": "RustDesk 모바일 앱으로 이 QR 코드를 스캔하세요.", - "no_key": "공개 키를 찾을 수 없습니다.", - "no_key_to_copy": "복사할 키가 없습니다.", - "no_qr": "QR 코드를 사용할 수 없습니다", - "download_success": "키 파일 다운로드됨", - "not_found": "키를 찾을 수 없습니다", - "api_not_found": "API 키를 찾을 수 없습니다." - }, - "settings": { - "title": "설정", - "subtitle": "콘솔 구성 및 계정 설정", - "tab_general": "General", - "tab_server": "서버", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "언어", - "change_password": "비밀번호 변경", - "password_desc": "계정 비밀번호 업데이트", - "current_password": "현재 비밀번호", - "new_password": "새 비밀번호", - "confirm_password": "비밀번호 확인", - "save_password": "비밀번호 업데이트", - "password_changed": "비밀번호가 성공적으로 변경되었습니다", - "fill_all_fields": "모든 필드를 입력하세요", - "passwords_not_match": "비밀번호가 일치하지 않습니다", - "password_requirements": "비밀번호 요구 사항", - "password_requirements_not_met": "비밀번호가 요구 사항을 충족하지 않습니다", - "req_length": "최소 8자 이상", - "req_uppercase": "대문자를 최소 1개 포함해야 합니다", - "req_lowercase": "소문자를 최소 1개 포함해야 합니다", - "req_number": "숫자를 최소 1개 포함해야 합니다", - "server_info": "서버 정보", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "최근 콘솔 활동", - "no_audit_logs": "감사 로그를 찾을 수 없습니다.", - "backend_title": "서버 백엔드", - "backend_desc": "장치 관리 및 신호/중계 서비스에 사용할 서버 백엔드를 선택하세요.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "표준 RustDesk 신호 및 릴레이 서버(hbbs + hbbr). 엔드포인트가 제한된 기본 HTTP API입니다.", - "backend_betterdesk_desc": "전체 REST API, JWT 인증, 차단 목록, 태그, 실시간 WebSocket 이벤트 및 감사 로깅을 갖춘 향상된 Go 기반 서버입니다.", - "backend_feature_signal": "시그널 서버(ID등록)", - "backend_feature_relay": "중계서버(연결중계)", - "backend_feature_basic_api": "기본 REST API", - "backend_feature_full_api": "전체 REST API(34개 이상의 엔드포인트)", - "backend_feature_jwt": "JWT 인증 및 TOTP 2FA", - "backend_feature_blocklist": "IP/ID 차단 목록 관리", - "backend_feature_tags": "장치 태그 및 그룹화", - "backend_feature_audit": "감사 이벤트 로깅", - "backend_feature_websocket": "실시간 WebSocket 이벤트", - "backend_connection": "연결", - "backend_api_url": "API URL", - "backend_test": "연결 테스트", - "backend_testing": "테스트 중...", - "backend_save": "백엔드 적용", - "backend_saved": "서버 백엔드가 성공적으로 변경되었습니다. 이제 기기 데이터가 새 백엔드에서 관리됩니다.", - "backend_save_failed": "서버 백엔드를 전환하지 못했습니다.", - "backend_test_success": "연결 성공! 서버에 연결할 수 있습니다.", - "backend_test_failed": "연결에 실패했습니다. 서버에 연결할 수 없습니다.", - "backend_confirm_switch": "서버 백엔드를 전환하시겠습니까? 이로 인해 장치 관리 방식이 변경됩니다.", - "backend_unreachable": "전환할 수 없음: 대상 서버에 연결할 수 없습니다. 먼저 서버를 시작하세요.", - "invalid_backend": "백엔드 선택이 잘못되었습니다. 'rustdesk' 또는 'betterdesk'를 선택하세요.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "2단계 인증", - "totp_desc": "TOTP 인증 앱(Google Authenticator, Microsoft Authenticator, Authy 등)을 사용하여 추가 보안 계층을 추가하세요.", - "totp_enabled": "2FA 활성화", - "totp_enabled_desc": "귀하의 계정은 이중 인증으로 보호됩니다.", - "totp_disabled": "2FA가 활성화되지 않음", - "totp_disabled_desc": "추가 계정 보안을 위해 이중 인증을 활성화합니다.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "휴대폰에 인증 앱을 설치하세요", - "totp_step2": "아래 QR코드를 스캔하세요", - "totp_step3": "인증을 위해 6자리 코드를 입력하세요", - "totp_manual_key": "Manual key", - "totp_enter_code": "인증코드를 입력하세요", - "totp_verify_enable": "확인 및 활성화", - "totp_enabled_success": "이중 인증이 활성화되었습니다!", - "totp_recovery_warning": "복구 코드를 안전한 곳에 보관하세요. 각 코드는 한 번만 사용할 수 있습니다. 인증 앱에 액세스할 수 없는 경우 이 코드를 사용하여 로그인할 수 있습니다.", - "totp_done": "Done", - "totp_disable_warning": "이중 인증을 비활성화하면 계정의 보안이 약화됩니다. 확인을 위해 비밀번호를 입력하세요.", - "totp_disabled_success": "이중 인증이 비활성화되었습니다.", - "tutorials_title": "튜토리얼 및 가이드", - "tutorials_desc": "콘솔 전체에 표시되는 둘러보기 및 도움말 오버레이를 제어하세요.", - "tutorials_enabled": "튜토리얼 활성화", - "tutorials_enabled_hint": "비활성화되면 튜토리얼이 자동으로 시작되지 않으며 도움말 버튼이 숨겨집니다.", - "tutorials_reset_hint": "다시 표시할 수 있도록 모든 튜토리얼을 보이지 않음으로 표시하세요.", - "tutorials_enabled_toast": "튜토리얼 활성화", - "tutorials_disabled_toast": "튜토리얼이 비활성화되었습니다.", - "tutorials_reset_toast": "모든 튜토리얼이 재설정되었습니다.", - "tab_auth": "인증", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "LDAP 또는 Active Directory를 통해 외부 인증을 구성합니다. 사용자는 도메인 자격 증명을 사용하여 로그인할 수 있습니다.", - "ldap_enabled": "LDAP 인증 활성화", - "ldap_enabled_hint": "활성화되면 사용자는 LDAP/AD 자격 증명을 사용하여 로그인할 수 있습니다. 로컬 계정은 여전히 ​​대체 수단으로 작동합니다.", - "ldap_connection": "서버 연결", - "ldap_host": "호스트", - "ldap_port": "항구", - "ldap_use_tls": "LDAPS(TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "TLS 확인 건너뛰기", - "ldap_timeout": "연결 시간 초과(초)", - "ldap_timeout_hint": "LDAP 서버 응답을 기다리는 데 걸리는 시간(초)", - "ldap_bind_mode": "바인드 모드", - "ldap_direct_bind": "직접 바인딩", - "ldap_direct_bind_hint": "서비스 계정을 사용하여 검색하는 대신 DN 템플릿으로 직접 바인딩합니다.", - "ldap_bind_dn": "바인딩 DN(서비스 계정)", - "ldap_bind_dn_hint": "사용자를 검색하는 데 사용되는 읽기 전용 서비스 계정의 고유 이름입니다.", - "ldap_bind_password": "비밀번호 바인딩", - "ldap_base_dn": "기본 DN", - "ldap_base_dn_hint": "사용자를 찾기 위한 검색 기반. dc=예, dc=com", - "ldap_user_filter": "사용자 필터", - "ldap_user_filter_hint": "LDAP 필터를 사용하여 사용자를 찾습니다. {{username}}를 자리 표시자로 사용하세요. 기본값: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "직접 바인딩 DN 템플릿", - "ldap_direct_bind_dn_hint": "직접 바인딩을 위한 DN 템플릿입니다. {{username}}를 자리 표시자로 사용하세요. uid={{username}},ou=사용자,dc=예,dc=com", - "ldap_user_attrs": "사용자 속성", - "ldap_attr_id": "사용자 이름 속성", - "ldap_attr_email": "이메일 속성", - "ldap_attr_name": "표시 이름 속성", - "ldap_group_mapping": "그룹 → 역할 매핑", - "ldap_group_base_dn": "그룹 기본 DN", - "ldap_group_base_dn_hint": "기본 기본 DN을 사용하려면 비워 두세요.", - "ldap_group_filter": "그룹 필터", - "ldap_group_attr_name": "그룹 이름 속성", - "ldap_default_role": "기본 역할", - "ldap_default_role_hint": "LDAP 그룹이 매핑과 일치하지 않는 사용자에게 할당된 역할", - "ldap_role_viewer": "뷰어", - "ldap_role_operator": "운영자", - "ldap_role_admin": "관리자", - "ldap_group_role_map": "그룹 → 역할 지도", - "ldap_group_role_map_hint": "LDAP 그룹을 BetterDesk 역할에 맵핑하십시오. 형식: GroupDN=역할은 |로 구분됩니다. (파이프). 예: CN=관리자,DC=예,DC=com=관리자|CN=Ops,DC=예,DC=com=운영자", - "ldap_test_connection": "연결 테스트", - "ldap_testing": "테스트 중...", - "ldap_test_success": "연결 성공! LDAP 서버에 연결할 수 있고 바인드 자격 증명이 유효합니다.", - "ldap_test_failed": "연결 실패", - "ldap_save": "LDAP 구성 저장", - "ldap_saved": "LDAP 구성이 성공적으로 저장되었습니다.", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "OpenID Connect 공급자(Azure AD, Okta, Google, Keycloak 등)를 통해 Single Sign-On을 구성합니다.", - "oidc_enabled": "OIDC 인증 활성화", - "oidc_enabled_hint": "사용자가 외부 ID 공급자로 로그인하도록 허용", - "oidc_provider": "ID 제공자", - "oidc_display_name": "버튼 표시 이름", - "oidc_display_name_hint": "로그인 버튼에 표시되는 텍스트(예: Azure AD, Okta)", - "oidc_issuer_url": "발급자 URL", - "oidc_issuer_url_hint": "OpenID Connect 발급자 URL(검색은 자동으로 수행됨)", - "oidc_client_id": "클라이언트 ID", - "oidc_client_secret": "클라이언트 비밀번호", - "oidc_redirect_url": "URL 리디��션(콜백)", - "oidc_redirect_url_hint": "IdP에 구성된 것과 정확히 일치해야 합니다. 일반적으로: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "범위", - "oidc_use_pkce": "PKCE 사용(권장)", - "oidc_auto_discovery": "자동 검색", - "oidc_allow_signup": "사용자 자동 생성", - "oidc_manual_endpoints": "수동 엔드포인트 URL", - "oidc_authorization_url": "승인 끝점", - "oidc_token_url": "토큰 엔드포인트", - "oidc_userinfo_url": "사용자 정보 끝점", - "oidc_claim_mapping": "청구 매핑", - "oidc_claim_username": "사용자 이름 청구", - "oidc_claim_email": "이메일 청구", - "oidc_claim_name": "표시 이름 소유권 주장", - "oidc_claim_groups": "그룹 클레임", - "oidc_role_mapping": "역할 매핑", - "oidc_default_role": "기본 역할", - "oidc_group_role_map": "그룹 → 역할 매핑", - "oidc_group_role_map_hint": "한 줄에 하나의 매핑: group_name=role(예: admins=admin, Operator=operator)", - "oidc_test_discovery": "테스트 발견", - "oidc_testing": "테스트 중...", - "oidc_test_success": "발견 성공! 엔드포인트가 해결되었습니다.", - "oidc_test_failed": "검색 실패", - "oidc_issuer_required": "검색을 테스트하려면 발급자 URL가 필요합니다.", - "oidc_save": "OIDC 구성 저장", - "oidc_saved": "OIDC 구성이 성공적으로 저장되었습니다.", - "tab_advanced": "고급", - "connection_mode_title": "연결 전략", - "connection_mode_desc": "RustDesk 데스크톱 클라이언트의 연결 방식을 제어합니다. 가능한 경우 직접 P2P(홀 펀칭), 또는 항상 릴레이 경유.", - "connection_mode_label": "기본 연결 모드", - "connection_mode_p2p_first": "P2P 우선(권장) — 직접 연결 시도 후 실패 시 릴레이로 전환", - "connection_mode_relay_only": "릴레이 전용 — 모든 세션이 릴레이 서버를 통해 연결", - "connection_mode_advanced": "고급 옵션", - "connection_mode_fallback_ms": "P2P 폴백 시간 초과(밀리초)", - "connection_mode_same_nat_relay": "두 피어가 동일한 공용 IP를 공유할 때 릴레이 강제 적용(NAT 헤어핀)", - "connection_mode_network_hint": "P2P는 클라이언트 간에 UDP 21116 포트에 도달 가능해야 합니다. 서버에서 시그널 TCP 21116, 릴레이 TCP 21117, NAT 테스트 TCP 21115를 열어야 합니다. 웹 브라우저 클라이언트는 항상 릴레이를 사용합니다.", - "connection_mode_save": "저장", - "connection_mode_save_restart": "저장 및 서버 재시작", - "connection_mode_saved": "연결 모드가 저장되었습니다", - "connection_mode_restart_started": "서버 재시작이 시작되었습니다", - "connection_mode_restart_failed": "서버 재시작에 실패했습니다", - "connection_mode_not_configurable": "이 배포에서는 연결 모드를 변경할 수 없습니다(systemd 유닛 또는 docker-compose를 찾을 수 없음)", - "connection_mode_compose_error": "docker-compose.yml에서 서버 환경 섹션을 찾을 수 없습니다", - "connection_mode_source_saved": "저장 위치", - "connection_mode_source_defaults": "서버 기본값 사용 중(패널에서 쓰기 불가)", - "connection_mode_runtime": "활성 서버", - "advanced_title": "구성 파일", - "advanced_desc": "서버 구성 파일을 직접 편집합니다. 변경 사항을 적용하려면 서비스를 재시작해야 할 수 있습니다. 저장 전에 백업 복사본이 생성됩니다.", - "advanced_warning": "이 파일에는 비밀 정보(API 키, 데이터베이스 비밀번호, 세션 시크릿)가 포함되어 있습니다. 영향을 이해한 경우에만 편집하세요. 잘못된 구문으로 인해 서버가 시작되지 않을 수 있습니다.", - "advanced_files_label": "파일", - "advanced_select_file": "목록에서 파일을 선택하여 내용을 보거나 편집합니다.", - "advanced_reload": "새로고침", - "advanced_save": "파일 저장", - "advanced_apply_restart": "적용(서비스 재시작)", - "advanced_saved": "구성 파일이 저장되었습니다", - "advanced_restart_after_save": "구성이 저장되었습니다. 변경 사항을 적용하기 위해 영향받는 서비스를 지금 재시작하시겠습니까?", - "advanced_restart_confirm": "관련 BetterDesk 서비스를 재시작하시겠습니까? 활성 연결이 잠시 중단될 수 있습니다.", - "advanced_restart_console_confirm": "웹 콘솔 서비스를 재시작하시겠습니까? 브라우저 세션이 잠시 끊기고 콘솔이 복구되면 페이지가 다시 로드됩니다.", - "advanced_restart_started": "서비스 재시작이 시작되었습니다", - "advanced_restart_done": "콘솔이 재시작되었습니다 — 페이지 다시 로드 중…", - "advanced_restart_polling": "콘솔이 온라인으로 돌아올 때까지 대기 중…", - "advanced_restart_timeout": "재시작 명령이 전송되었지만 콘솔이 시간 내에 응답하지 않았습니다. systemd/NSSM 로그를 확인하고 수동으로 다시 로드하세요.", - "advanced_restart_failed": "서비스 재시작에 실패했습니다(권한 부족 또는 서비스 미설치)", - "advanced_save_confirm": "이 파일의 변경 사항을 저장하시겠습니까? 이전 버전의 백업이 생성됩니다.", - "advanced_unsaved_confirm": "저장되지 않은 변경 사항이 있습니다. 삭제하시겠습니까?", - "advanced_no_files": "이 시스템에서 사용 가능한 구성 파일이 없습니다.", - "advanced_readonly": "읽기 전용", - "advanced_missing": "없음", - "advanced_new_file": "새 파일(저장하기 전까지 생성되지 않음)", - "advanced_new_file_hint": "새 파일 — 내용을 추가하고 저장", - "advanced_backup_created": "백업이 생성되었습니다", - "advanced_restart_console": ".env 변경 사항을 적용하려면 웹 콘솔 서비스를 재시작하세요(예: systemctl restart betterdesk-console).", - "advanced_restart_goserver": "블록리스트 변경 사항을 로드하려면 BetterDesk Go 서버를 재시작하세요.", - "advanced_restart_systemd": "systemd 유닛을 편집한 후 실행: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "변경 사항을 적용하려면 영향받는 서비스를 재시작하세요.", - "advanced_error_unknown": "알 수 없는 구성 파일", - "advanced_error_not_found": "파일이 존재하지 않습니다", - "advanced_error_not_file": "경로가 일반 파일이 아닙니다", - "advanced_error_too_large": "파일이 최대 편집 가능 크기(512 KB)를 초과합니다", - "advanced_error_binary": "패널에서 바이너리 파일을 편집할 수 없습니다", - "advanced_error_invalid": "잘못된 파일 내용", - "advanced_error_not_writable": "콘솔 프로세스가 이 파일에 쓸 수 없습니다", - "advanced_file_console-env": "콘솔 환경(.env)", - "advanced_file_console-env-local": "콘솔 재정의(.env.local)", - "advanced_file_go-blocklist": "Go 서버 블록리스트(blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (서비스 유닛)", - "advanced_file_systemd-server": "systemd: betterdesk-server (서비스 유닛)", - "advanced_file_console-session-secret": "콘솔 세션 시크릿(.session_secret)", - "advanced_file_go-audit-log": "Go 서버 감사 로그(audit.jsonl)", - "advanced_file_build-env": "에이전트 빌드 환경(/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisord 구성)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (오케스트레이션)", - "advanced_restart_none": "이 파일은 서비스 재시작이 필요하지 않습니다.", - "enrollment_title": "기기 등록(RustDesk)", - "enrollment_desc": "새 RustDesk 클라이언트의 등록 방식과 운영자가 등록 요청 페이지에서 승인하는 방법을 제어합니다.", - "enrollment_require_approval": "운영자 승인 필요(관리 모드)", - "enrollment_require_approval_hint": "활성화하면 알 수 없는 클라이언트가 운영자가 「등록 요청」에서 승인할 때까지 큐에 대기합니다.", - "enrollment_rich_approve": "전체 승인 양식(이름, 폴더, 그룹, 태그)", - "enrollment_rich_approve_hint": "등록 또는 LAN 등록 요청 승인 시 상세 대화상자를 표시합니다.", - "enrollment_tag_picker": "기존 기기 태그에서 태그 선택", - "enrollment_tag_picker_hint": "운영자가 기기 페이지에서 사용되는 태그 목록에서 선택할 수 있습니다(입력만으로 제한되지 않음).", - "enrollment_open_requests": "등록 요청 열기", - "enrollment_pending_count": "대기 중인 등록 요청 {count}건" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "로그인 실패", - "action_logout": "Logout", - "action_password_change": "비밀번호가 변경되었습니다.", - "action_2fa_enable": "2FA 활성화", - "action_2fa_disable": "2FA 비활성화됨", - "action_user_create": "사용자가 생성됨", - "action_user_update": "사용자 업데이트됨", - "action_user_delete": "사용자가 삭제되었습니다.", - "action_settings_update": "설정이 업데이트되었습니다.", - "action_device_ban": "금지된 장치", - "action_device_unban": "금지 해제된 장치", - "action_device_delete": "기기가 삭제되었습니다." - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "구성 옵션", - "server_address": "서버 주소", - "server_address_hint": "서버의 도메인 또는 IP 주소", - "custom_port": "Custom Port", - "port_hint": "기본값을 사용하려면 비워 두세요(21116).", - "relay_server": "릴레이 서버", - "relay_placeholder": "비어 있으면 ID 서버와 동일", - "relay_hint": "선택사항: 별도의 중계 서버 주소", - "include_key": "구성에 공개 키 포함", - "generate": "구성 생성", - "output": "구성 출력", - "usage_title": "연결 세부정보", - "generated": "구성이 생성되었습니다.", - "server_required": "서버 주소가 필요합니다", - "nothing_to_copy": "먼저 구성을 생성하세요.", - "bundles_title": "에이전트 번들", - "new_bundle": "새 번들", - "editor_title": "번들 편집기", - "empty_state": "왼쪽에서 번들을 선택하거나 새 번들을 생성하여 시작하세요.", - "loading": "로드 중…", - "no_bundles": "아직 번들이 없습니다. 첫 번째 것을 만들어보세요.", - "bundle_name": "번들 이름", - "bundle_name_hint": "내부 라벨만 — 최종 사용자에게는 표시되지 않습니다.", - "short_link": "짧은 다운로드 링크", - "short_link_hint": "공개 URL(/d/…)에 사용됩니다. 소문자, 숫자, 하이픈만 가능(2–32자). 번들 이름에서 자동 입력 — 공유하기 쉽게 줄이세요(예: acme).", - "branding_section": "브랜딩", - "company_name": "회사 / 브랜드 이름", - "short_text": "간단한 설명", - "contact_email": "연락처 이메일", - "contact_phone": "전화번호로 연락하기", - "contact_url": "웹사이트에 문의하세요", - "logo": "로고", - "logo_hint": "PNG, JPEG, SVG 또는 WebP. 최대 256KB.", - "logo_clear": "로고 제거", - "primary_color": "기본 색상", - "accent_color": "헤더 색상", - "default_lang": "기본 언어", - "allow_unattended": "무인 접근 허용", - "allow_unattended_hint": "활성화되면 에이전트는 운영자 액세스를 위한 영구 비밀번호를 표시합니다.", - "save": "번들 저장", - "revoke": "취소", - "unrevoke": "다시 활성화", - "revoked": "취소됨", - "preview_title": "실시간 미리보기", - "preview_hint": "최종 사용자 에이전트 창의 대략적인 모습입니다.", - "preview_default_name": "BetterDesk 지원", - "preview_status_ready": "준비", - "preview_id": "귀하의 신분증", - "preview_password": "비밀번호", - "preview_chat": "지원팀과 채팅", - "preview_settings": "설정(관리자 전용)", - "preview_quit": "종료(관리자 전용)", - "download_link_title": "다운로드 링크", - "download_link_hint": "이 링크를 최종 사용자와 공유하세요. 브랜드 다운로드 페이지가 표시됩니다. 짧은 링크를 변경해도 이전 hex 링크는 계속 작동합니다.", - "open_portal": "열기", - "created": "번들 생성됨", - "saved": "번들이 저장되었습니다", - "deleted": "번들이 삭제되었습니다.", - "revoked_ok": "번들이 취소되었습니다.", - "unrevoked_ok": "번들이 다시 활성화되었습니다.", - "link_copied": "링크가 클립보드에 복사되었습니다.", - "copy_failed": "자동으로 복사할 수 없습니다. 수동으로 복사하십시오.", - "unsaved_confirm": "저장되지 않은 변경사항을 삭제하시겠습니까?", - "confirm_revoke": "이 번들을 취소하시겠습니까? 다운로드 링크가 작동하지 않습니다.", - "confirm_unrevoke": "이 번들을 다시 활성화하시겠습니까?", - "confirm_delete": "이 번들을 영구적으로 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", - "errors": { - "validation_failed": "검증 실패", - "name_required": "번들 이름은 필수 항목입니다.", - "company_name_required": "회사 이름은 필수 항목입니다.", - "logo_invalid": "로고는 유효한 이미지 파일이어야 합니다.", - "logo_too_large": "로고는 256KB 이하여야 합니다.", - "logo_read_failed": "로고 파일을 읽지 못했습니다.", - "primary_color_invalid": "기본 색상은 16진수 값이어야 합니다(예: #2563eb).", - "accent_color_invalid": "헤더 색상은 16진수 값이어야 합니다(예: #1e293b).", - "contact_url_invalid": "연락처 웹사이트는 유효한 URL여야 합니다.", - "server_host_required": "공용 서버 주소는 필수입니다", - "server_host_invalid": "유효한 도메인 이름 또는 IPv4 주소를 입력하세요", - "token_failed": "등록 토큰을 생성할 수 없습니다 — 서버 연결을 확인하세요", - "rebuild_revoked": "취소된 번들은 재빌드할 수 없습니다 — 먼저 다시 활성화하세요", - "slug_invalid": "짧은 링크는 소문자, 숫자, 하이픈만 포함할 수 있습니다", - "slug_too_short": "짧은 링크는 최소 2자여야 합니다", - "slug_too_long": "짧은 링크는 최대 32자입니다", - "slug_taken": "이 짧은 링크는 다른 번들에서 이미 사용 중입니다" - }, - "legacy_title": "클라이언트 구성 생성기", - "connection_section": "서버 연결", - "server_host": "공용 서버 주소", - "server_host_placeholder": "support.example.com 또는 203.0.113.10", - "server_host_hint": "최종 사용자가 BetterDesk 서버에 접속하는 도메인 이름 또는 공용 IP. 포트는 콘솔 구성에서 가져옵니다.", - "use_https": "HTTPS / WSS 사용(권장)", - "enrollment_token": "기기 등록", - "enrollment_token_pending": "기기별 승인 후 할당", - "enrollment_token_set": "기기별 — 등록에서 승인", - "enrollment_token_hint": "각 설치가 개별적으로 등록됩니다. 등록 패널에서 새 기기를 승인하면 서버가 컴퓨터별로 고유한 액세스 키를 발급합니다.", - "enrollment_per_device": "기기별 — 등록에서 승인", - "background_color": "창 배경색", - "surface_color": "카드 배경색", - "text_color": "텍스트 색상", - "text_muted_color": "흐린 텍스트 색상", - "status_ready_color": "준비 표시기 색상", - "header_text_color": "헤더 텍스트 색상", - "builds_title": "클라이언트 빌드", - "builds_hint": "각 플랫폼을 위해 이 서버에서 컴파일된 설치 파일. 도구 체인 오류 수정 또는 에이전트 소스 업데이트 후 재빌드합니다.", - "builds_loading": "빌드 상태 로드 중…", - "builds_empty": "아직 대기 중인 빌드가 없습니다 — 번들을 저장하거나 모두 재빌드를 클릭하세요.", - "rebuild_all": "모두 재빌드", - "rebuilding_all": "재빌드 대기열에 추가 중…", - "rebuild_queued": "모든 플랫폼 빌드가 대기열에 추가되었습니다", - "rebuild_confirm": "이 번들의 모든 플랫폼 설치 파일을 재빌드하시겠습니까? 기존의 준비된 산출물이 교체됩니다.", - "build_status_ready": "준비 완료", - "build_status_pending": "대기 중", - "build_status_building": "빌드 중", - "build_status_failed": "실패", - "builds_summary": "{{ready}} 준비 완료 · {{pending}} 대기 중 · {{building}} 빌드 중 · {{failed}} 실패", - "build_error_hint": "빌드 오류", - "preview_help": "도움 요청" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID 서버", - "relay_server": "릴레이 서버", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "확인 중...", - "label": "Status", - "no_signal": "신호 없음" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "데스크톱 클라이언트를 통해 연결", - "remote_viewer": "원격 뷰어", - "web_remote": "웹 원격", - "details": "Details", - "edit": "편집", - "delete": "삭제", - "ban": "Ban", - "unban": "Unban", - "save": "저장", - "cancel": "취소", - "confirm": "확인", - "close": "닫기", - "clear": "지우기", - "ok": "OK", - "saved": "성공적으로 저장됨", - "back": "뒤로", - "create": "만들기", - "dismiss": "닫기", - "view_all": "모두 보기", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}초 전", - "minutes_ago": "{count}분 전", - "hours_ago": "{count}h 전", - "days_ago": "{count}일 전", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "사용자 관리", - "subtitle": "콘솔 사용자 및 권한 관리", - "add_user": "Add User", - "edit_user": "사용자 편집", - "username": "사용자 이름", - "username_placeholder": "사용자 이름을 입력하세요", - "username_hint": "3~32자, 문자, 숫자, 밑줄만 가능", - "password": "비밀번호", - "password_placeholder": "비밀번호를 입력하세요", - "password_hint": "대소문자, 숫자, 기호를 혼합하여 최소 8자 이상", - "password_leave_empty": "현재 상태를 유지하려면 비워 두세요.", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "생성됨", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "사용자 생성", - "edit": "편집", - "reset_password": "비밀번호 재설정", - "new_password": "새 비밀번호", - "delete_title": "사용자 삭제", - "delete_confirm": "사용자 {username}를 삭제하시겠습니까?", - "delete_success": "사용자가 삭제되었습니다.", - "user_created": "사용자가 성공적으로 생성되었습니다.", - "user_updated": "사용자가 업데이트되었습니다.", - "password_reset_success": "비밀번호가 재설정되었습니다.", - "empty_title": "사용자를 찾을 수 없습니다.", - "empty_text": "콘솔 액세스를 관리하려면 사용자를 추가하세요.", - "fill_required": "필수 입력란을 모두 작성해 주세요.", - "invalid_username": "사용자 이름은 3~32자, 문자, 숫자, 밑줄만 포함해야 합니다.", - "username_exists": "사용자 이름이 이미 존재합니다.", - "weak_password": "비밀번호가 너무 취약합니다.", - "password_too_short": "비밀번호는 8자 이상이어야 합니다.", - "invalid_role": "잘못된 역할", - "cannot_demote_self": "자신을 강등시킬 수 없습니다.", - "cannot_delete_self": "자신의 계정을 삭제할 수 없습니다.", - "last_admin": "마지막 관리자는 삭제할 수 없습니다.", - "admin_only": "이 기능은 관리자만 사용할 수 있습니다.", - "password_required": "비밀번호가 필요합니다", - "not_found": "사용자를 찾을 수 없습니다", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "보안 모범 사례", - "tip_strong_passwords": "각 사용자마다 강력하고 고유한 비밀번호를 사용하세요.", - "tip_unique_accounts": "각 사람에 대한 개별 계정 만들기", - "tip_viewer_role": "읽기 액세스만 필요한 사용자에게는 뷰어 역할을 사용하세요.", - "tip_operator_role": "장치를 관리해야 하지만 사용자는 관리하지 않는 사용자에게 운영자 역할을 사용하세요.", - "tip_audit_logs": "의심스러운 활동이 있는지 정기적으로 감사 로그를 검토하세요.", - "role_pro": "Pro(API만 해당)", - "role_super_admin": "Super Admin", - "role_server_admin": "서버 관리자", - "role_global_admin": "글로벌 관리자", - "organizations": "조직", - "user_organizations": "{username}의 조직", - "no_organizations": "사용자가 어떤 조직에도 할당되지 않았습니다.", - "org_removed": "조직 할당이 삭제됨", - "server_role_label": "서버 역할", - "server_role_hint": "사용자가 전체 콘솔에서 수행할 수 있는 작업(패널 액세스, 서버 구성, 감사 등)을 결정합니다.", - "org_membership_section": "조직 회원", - "org_membership_hint": "사용자는 여러 조직에 속할 수 있습니다. 조직 역할은 해당 조직 내부의 권한만 제어하며 위의 서버 역할과는 별개입니다.", - "column_organizations": "조직", - "no_orgs_short": "—", - "org_count_one": "{count} 조직", - "org_count_many": "{count} 조직", - "all_orgs_assigned": "사용자는 이미 모든 조직의 구성원입니다.", - "user_groups": "사용자 그룹", - "user_groups_hint": "사용자 그룹을 사용하여 선택한 장치 그룹에 대한 액세스 권한을 부여할 수 있습니다.", - "loading_user_groups": "사용자 그룹 로드 중...", - "no_user_groups": "사용 가능한 사용자 그룹이 없습니다.", - "create_user_group": "그룹 만들기", - "edit_user_group": "사용자 그룹 편집", - "delete_user_group": "사용자 그룹 삭제", - "delete_user_group_confirm": "사용자 그룹 {name}를 삭제하시겠습니까? 회원은 이 그룹을 통해 부여된 액세스 권한을 잃게 됩니다.", - "user_group_created": "사용자 그룹이 생성되었습니다.", - "user_group_updated": "사용자 그룹이 업데이트되었습니다.", - "user_group_deleted": "사용자 그룹이 삭제되었습니다.", - "user_group_not_found": "사용자 그룹을 찾을 수 없습니다", - "group_name": "그룹 이름", - "group_name_placeholder": "연산자", - "group_note": "Note", - "group_note_placeholder": "선택적 참고 사항", - "group_name_required": "그룹 이름은 필수 항목입니다.", - "group_members_count": "{count} 회원", - "provider": "공급자", - "provider_local": "로컬", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "ID 공급자에 의해 관리됨", - "provider_managed_hint": "이 계정은 외부 ID 공급자(LDAP/AD 또는 SSO)에 의해 관리됩니다. 비밀번호와 역할은 공급자가 제어하며 여기서 변경할 수 없습니다." - }, - "folders": { - "title": "Folders", - "create": "폴더 생성", - "edit": "폴더 편집", - "delete": "폴더 삭제", - "name": "Folder Name", - "name_placeholder": "폴더 이름을 입력하세요", - "name_required": "폴더 이름은 필수 항목입니다.", - "name_too_long": "폴더 이름이 너무 깁니다(최대 50자).", - "color": "Color", - "icon": "Icon", - "not_found": "폴더를 찾을 수 없습니다", - "delete_confirm": "이 폴더를 삭제하시겠습니까? 장치가 할당 해제됩니다.", - "delete_success": "폴더가 삭제되었습니다.", - "created": "폴더가 성공적으로 생성되었습니다", - "updated": "폴더가 업데이트되었습니다.", - "no_devices_selected": "선택한 기기가 없습니다.", - "devices_moved": "기기가 성공적으로 이동되었습니다.", - "device_assigned": "폴더에 할당된 장치", - "unassigned": "Unassigned", - "all_devices": "모든 장치", - "drag_hint": "기기를 폴더로 드래그하여 정리하세요.", - "move_to": "다음으로 이동", - "toggle_sidebar": "사이드바 전환" - }, + "no_groups": "아직 그룹이 없습니다.", + "manual_groups": "수동 그룹", + "dynamic_memberships": "동적 멤버십", + "group_allowed_user_groups": "허용된 사용자 그룹", + "group_allowed_user_groups_hint": "선택한 사용자 그룹의 사용자는 이 장치 그룹에 액세스할 수 있습니다.", + "no_user_groups": "사용자 그룹 없음", + "edit_group": "그룹 수정", + "delete_group": "그룹 삭제", + "delete_group_confirm": "장치 그룹 {name}를 삭제하시겠습니까?", + "group_deleted": "기기 그룹이 삭제되었습니다.", + "folder_group_readonly": "폴더 지원 그룹은 폴더에서 관리됩니다.", + "manage_user_groups": "사용자 그룹 관리", + "restore_failed": "기기 복원에 실패했습니다", + "no_signal_tooltip": "클라이언트가 최근 API에 연락했지만 시그널 서버(UDP :21116)에 등록되지 않았습니다. 서버 마이그레이션 후 클라이언트를 재시작하세요.", + "per_page": "페이지당" + }, + "keys": { + "title": "서버 키", + "subtitle": "RustDesk 클라이언트에 대한 공개 키 및 구성", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "서버 정보", + "download": "키 다운로드", + "show_qr": "Show QR", + "qr_hint": "RustDesk 모바일 앱으로 이 QR 코드를 스캔하세요.", + "no_key": "공개 키를 찾을 수 없습니다.", + "no_key_to_copy": "복사할 키가 없습니다.", + "no_qr": "QR 코드를 사용할 수 없습니다", + "download_success": "키 파일 다운로드됨", + "not_found": "키를 찾을 수 없습니다", + "api_not_found": "API 키를 찾을 수 없습니다." + }, + "settings": { + "title": "설정", + "subtitle": "콘솔 구성 및 계정 설정", + "tab_general": "General", + "tab_server": "서버", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "언어", + "change_password": "비밀번호 변경", + "password_desc": "계정 비밀번호 업데이트", + "current_password": "현재 비밀번호", + "new_password": "새 비밀번호", + "confirm_password": "비밀번호 확인", + "save_password": "비밀번호 업데이트", + "password_changed": "비밀번호가 성공적으로 변경되었습니다", + "fill_all_fields": "모든 필드를 입력하세요", + "passwords_not_match": "비밀번호가 일치하지 않습니다", + "password_requirements": "비밀번호 요구 사항", + "password_requirements_not_met": "비밀번호가 요구 사항을 충족하지 않습니다", + "req_length": "최소 8자 이상", + "req_uppercase": "대문자를 최소 1개 포함해야 합니다", + "req_lowercase": "소문자를 최소 1개 포함해야 합니다", + "req_number": "숫자를 최소 1개 포함해야 합니다", + "server_info": "서버 정보", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "최근 콘솔 활동", + "no_audit_logs": "감사 로그를 찾을 수 없습니다.", + "backend_title": "서버 백엔드", + "backend_desc": "장치 관리 및 신호/중계 서비스에 사용할 서버 백엔드를 선택하세요.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "표준 RustDesk 신호 및 릴레이 서버(hbbs + hbbr). 엔드포인트가 제한된 기본 HTTP API입니다.", + "backend_betterdesk_desc": "전체 REST API, JWT 인증, 차단 목록, 태그, 실시간 WebSocket 이벤트 및 감사 로깅을 갖춘 향상된 Go 기반 서버입니다.", + "backend_feature_signal": "시그널 서버(ID등록)", + "backend_feature_relay": "중계서버(연결중계)", + "backend_feature_basic_api": "기본 REST API", + "backend_feature_full_api": "전체 REST API(34개 이상의 엔드포인트)", + "backend_feature_jwt": "JWT 인증 및 TOTP 2FA", + "backend_feature_blocklist": "IP/ID 차단 목록 관리", + "backend_feature_tags": "장치 태그 및 그룹화", + "backend_feature_audit": "감사 이벤트 로깅", + "backend_feature_websocket": "실시간 WebSocket 이벤트", + "backend_connection": "연결", + "backend_api_url": "API URL", + "backend_test": "연결 테스트", + "backend_testing": "테스트 중...", + "backend_save": "백엔드 적용", + "backend_saved": "서버 백엔드가 성공적으로 변경되었습니다. 이제 기기 데이터가 새 백엔드에서 관리됩니다.", + "backend_save_failed": "서버 백엔드를 전환하지 못했습니다.", + "backend_test_success": "연결 성공! 서버에 연결할 수 있습니다.", + "backend_test_failed": "연결에 실패했습니다. 서버에 연결할 수 없습니다.", + "backend_confirm_switch": "서버 백엔드를 전환하시겠습니까? 이로 인해 장치 관리 방식이 변경됩니다.", + "backend_unreachable": "전환할 수 없음: 대상 서버에 연결할 수 없습니다. 먼저 서버를 시작하세요.", + "invalid_backend": "백엔드 선택이 잘못되었습니다. 'rustdesk' 또는 'betterdesk'를 선택하세요.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "2단계 인증", + "totp_desc": "TOTP 인증 앱(Google Authenticator, Microsoft Authenticator, Authy 등)을 사용하여 추가 보안 계층을 추가하세요.", + "totp_enabled": "2FA 활성화", + "totp_enabled_desc": "귀하의 계정은 이중 인증으로 보호됩니다.", + "totp_disabled": "2FA가 활성화되지 않음", + "totp_disabled_desc": "추가 계정 보안을 위해 이중 인증을 활성화합니다.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "휴대폰에 인증 앱을 설치하세요", + "totp_step2": "아래 QR코드를 스캔하세요", + "totp_step3": "인증을 위해 6자리 코드를 입력하세요", + "totp_manual_key": "Manual key", + "totp_enter_code": "인증코드를 입력하세요", + "totp_verify_enable": "확인 및 활성화", + "totp_enabled_success": "이중 인증이 활성화되었습니다!", + "totp_recovery_warning": "복구 코드를 안전한 곳에 보관하세요. 각 코드는 한 번만 사용할 수 있습니다. 인증 앱에 액세스할 수 없는 경우 이 코드를 사용하여 로그인할 수 있습니다.", + "totp_done": "Done", + "totp_disable_warning": "이중 인증을 비활성화하면 계정의 보안이 약화됩니다. 확인을 위해 비밀번호를 입력하세요.", + "totp_disabled_success": "이중 인증이 비활성화되었습니다.", + "tutorials_title": "튜토리얼 및 가이드", + "tutorials_desc": "콘솔 전체에 표시되는 둘러보기 및 도움말 오버레이를 제어하세요.", + "tutorials_enabled": "튜토리얼 활성화", + "tutorials_enabled_hint": "비활성화되면 튜토리얼이 자동으로 시작되지 않으며 도움말 버튼이 숨겨집니다.", + "tutorials_reset_hint": "다시 표시할 수 있도록 모든 튜토리얼을 보이지 않음으로 표시하세요.", + "tutorials_enabled_toast": "튜토리얼 활성화", + "tutorials_disabled_toast": "튜토리얼이 비활성화되었습니다.", + "tutorials_reset_toast": "모든 튜토리얼이 재설정되었습니다.", + "tab_auth": "인증", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "LDAP 또는 Active Directory를 통해 외부 인증을 구성합니다. 사용자는 도메인 자격 증명을 사용하여 로그인할 수 있습니다.", + "ldap_enabled": "LDAP 인증 활성화", + "ldap_enabled_hint": "활성화되면 사용자는 LDAP/AD 자격 증명을 사용하여 로그인할 수 있습니다. 로컬 계정은 여전히 ​​대체 수단으로 작동합니다.", + "ldap_connection": "서버 연결", + "ldap_host": "호스트", + "ldap_port": "항구", + "ldap_use_tls": "LDAPS(TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "TLS 확인 건너뛰기", + "ldap_timeout": "연결 시간 초과(초)", + "ldap_timeout_hint": "LDAP 서버 응답을 기다리는 데 걸리는 시간(초)", + "ldap_bind_mode": "바인드 모드", + "ldap_direct_bind": "직접 바인딩", + "ldap_direct_bind_hint": "서비스 계정을 사용하여 검색하는 대신 DN 템플릿으로 직접 바인딩합니다.", + "ldap_bind_dn": "바인딩 DN(서비스 계정)", + "ldap_bind_dn_hint": "사용자를 검색하는 데 사용되는 읽기 전용 서비스 계정의 고유 이름입니다.", + "ldap_bind_password": "비밀번호 바인딩", + "ldap_base_dn": "기본 DN", + "ldap_base_dn_hint": "사용자를 찾기 위한 검색 기반. dc=예, dc=com", + "ldap_user_filter": "사용자 필터", + "ldap_user_filter_hint": "LDAP 필터를 사용하여 사용자를 찾습니다. {{username}}를 자리 표시자로 사용하세요. 기본값: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "직접 바인딩 DN 템플릿", + "ldap_direct_bind_dn_hint": "직접 바인딩을 위한 DN 템플릿입니다. {{username}}를 자리 표시자로 사용하세요. uid={{username}},ou=사용자,dc=예,dc=com", + "ldap_user_attrs": "사용자 속성", + "ldap_attr_id": "사용자 이름 속성", + "ldap_attr_email": "이메일 속성", + "ldap_attr_name": "표시 이름 속성", + "ldap_group_mapping": "그룹 → 역할 매핑", + "ldap_group_base_dn": "그룹 기본 DN", + "ldap_group_base_dn_hint": "기본 기본 DN을 사용하려면 비워 두세요.", + "ldap_group_filter": "그룹 필터", + "ldap_group_attr_name": "그룹 이름 속성", + "ldap_default_role": "기본 역할", + "ldap_default_role_hint": "LDAP 그룹이 매핑과 일치하지 않는 사용자에게 할당된 역할", + "ldap_role_viewer": "뷰어", + "ldap_role_operator": "운영자", + "ldap_role_admin": "관리자", + "ldap_group_role_map": "그룹 → 역할 지도", + "ldap_group_role_map_hint": "LDAP 그룹을 BetterDesk 역할에 맵핑하십시오. 형식: GroupDN=역할은 |로 구분됩니다. (파이프). 예: CN=관리자,DC=예,DC=com=관리자|CN=Ops,DC=예,DC=com=운영자", + "ldap_test_connection": "연결 테스트", + "ldap_testing": "테스트 중...", + "ldap_test_success": "연결 성공! LDAP 서버에 연결할 수 있고 바인드 자격 증명이 유효합니다.", + "ldap_test_failed": "연결 실패", + "ldap_save": "LDAP 구성 저장", + "ldap_saved": "LDAP 구성이 성공적으로 저장되었습니다.", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "OpenID Connect 공급자(Azure AD, Okta, Google, Keycloak 등)를 통해 Single Sign-On을 구성합니다.", + "oidc_enabled": "OIDC 인증 활성화", + "oidc_enabled_hint": "사용자가 외부 ID 공급자로 로그인하도록 허용", + "oidc_provider": "ID 제공자", + "oidc_display_name": "버튼 표시 이름", + "oidc_display_name_hint": "로그인 버튼에 표시되는 텍스트(예: Azure AD, Okta)", + "oidc_issuer_url": "발급자 URL", + "oidc_issuer_url_hint": "OpenID Connect 발급자 URL(검색은 자동으로 수행됨)", + "oidc_client_id": "클라이언트 ID", + "oidc_client_secret": "클라이언트 비밀번호", + "oidc_redirect_url": "URL 리디��션(콜백)", + "oidc_redirect_url_hint": "IdP에 구성된 것과 정확히 일치해야 합니다. 일반적으로: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "범위", + "oidc_use_pkce": "PKCE 사용(권장)", + "oidc_auto_discovery": "자동 검색", + "oidc_allow_signup": "사용자 자동 생성", + "oidc_manual_endpoints": "수동 엔드포인트 URL", + "oidc_authorization_url": "승인 끝점", + "oidc_token_url": "토큰 엔드포인트", + "oidc_userinfo_url": "사용자 정보 끝점", + "oidc_claim_mapping": "청구 매핑", + "oidc_claim_username": "사용자 이름 청구", + "oidc_claim_email": "이메일 청구", + "oidc_claim_name": "표시 이름 소유권 주장", + "oidc_claim_groups": "그룹 클레임", + "oidc_role_mapping": "역할 매핑", + "oidc_default_role": "기본 역할", + "oidc_group_role_map": "그룹 → 역할 매핑", + "oidc_group_role_map_hint": "한 줄에 하나의 매핑: group_name=role(예: admins=admin, Operator=operator)", + "oidc_test_discovery": "테스트 발견", + "oidc_testing": "테스트 중...", + "oidc_test_success": "발견 성공! 엔드포인트가 해결되었습니다.", + "oidc_test_failed": "검색 실패", + "oidc_issuer_required": "검색을 테스트하려면 발급자 URL가 필요합니다.", + "oidc_save": "OIDC 구성 저장", + "oidc_saved": "OIDC 구성이 성공적으로 저장되었습니다.", + "tab_advanced": "고급", + "connection_mode_title": "연결 전략", + "connection_mode_desc": "RustDesk 데스크톱 클라이언트의 연결 방식을 제어합니다. 가능한 경우 직접 P2P(홀 펀칭), 또는 항상 릴레이 경유.", + "connection_mode_label": "기본 연결 모드", + "connection_mode_p2p_first": "P2P 우선(권장) — 직접 연결 시도 후 실패 시 릴레이로 전환", + "connection_mode_relay_only": "릴레이 전용 — 모든 세션이 릴레이 서버를 통해 연결", + "connection_mode_advanced": "고급 옵션", + "connection_mode_fallback_ms": "P2P 폴백 시간 초과(밀리초)", + "connection_mode_same_nat_relay": "두 피어가 동일한 공용 IP를 공유할 때 릴레이 강제 적용(NAT 헤어핀)", + "connection_mode_network_hint": "P2P는 클라이언트 간에 UDP 21116 포트에 도달 가능해야 합니다. 서버에서 시그널 TCP 21116, 릴레이 TCP 21117, NAT 테스트 TCP 21115를 열어야 합니다. 웹 브라우저 클라이언트는 항상 릴레이를 사용합니다.", + "connection_mode_save": "저장", + "connection_mode_save_restart": "저장 및 서버 재시작", + "connection_mode_saved": "연결 모드가 저장되었습니다", + "connection_mode_restart_started": "서버 재시작이 시작되었습니다", + "connection_mode_restart_failed": "서버 재시작에 실패했습니다", + "connection_mode_not_configurable": "이 배포에서는 연결 모드를 변경할 수 없습니다(systemd 유닛 또는 docker-compose를 찾을 수 없음)", + "connection_mode_compose_error": "docker-compose.yml에서 서버 환경 섹션을 찾을 수 없습니다", + "connection_mode_source_saved": "저장 위치", + "connection_mode_source_defaults": "서버 기본값 사용 중(패널에서 쓰기 불가)", + "connection_mode_runtime": "활성 서버", + "advanced_title": "구성 파일", + "advanced_desc": "서버 구성 파일을 직접 편집합니다. 변경 사항을 적용하려면 서비스를 재시작해야 할 수 있습니다. 저장 전에 백업 복사본이 생성됩니다.", + "advanced_warning": "이 파일에는 비밀 정보(API 키, 데이터베이스 비밀번호, 세션 시크릿)가 포함되어 있습니다. 영향을 이해한 경우에만 편집하세요. 잘못된 구문으로 인해 서버가 시작되지 않을 수 있습니다.", + "advanced_files_label": "파일", + "advanced_select_file": "목록에서 파일을 선택하여 내용을 보거나 편집합니다.", + "advanced_reload": "새로고침", + "advanced_save": "파일 저장", + "advanced_apply_restart": "적용(서비스 재시작)", + "advanced_saved": "구성 파일이 저장되었습니다", + "advanced_restart_after_save": "구성이 저장되었습니다. 변경 사항을 적용하기 위해 영향받는 서비스를 지금 재시작하시겠습니까?", + "advanced_restart_confirm": "관련 BetterDesk 서비스를 재시작하시겠습니까? 활성 연결이 잠시 중단될 수 있습니다.", + "advanced_restart_console_confirm": "웹 콘솔 서비스를 재시작하시겠습니까? 브라우저 세션이 잠시 끊기고 콘솔이 복구되면 페이지가 다시 로드됩니다.", + "advanced_restart_started": "서비스 재시작이 시작되었습니다", + "advanced_restart_done": "콘솔이 재시작되었습니다 — 페이지 다시 로드 중…", + "advanced_restart_polling": "콘솔이 온라인으로 돌아올 때까지 대기 중…", + "advanced_restart_timeout": "재시작 명령이 전송되었지만 콘솔이 시간 내에 응답하지 않았습니다. systemd/NSSM 로그를 확인하고 수동으로 다시 로드하세요.", + "advanced_restart_failed": "서비스 재시작에 실패했습니다(권한 부족 또는 서비스 미설치)", + "advanced_save_confirm": "이 파일의 변경 사항을 저장하시겠습니까? 이전 버전의 백업이 생성됩니다.", + "advanced_unsaved_confirm": "저장되지 않은 변경 사항이 있습니다. 삭제하시겠습니까?", + "advanced_no_files": "이 시스템에서 사용 가능한 구성 파일이 없습니다.", + "advanced_readonly": "읽기 전용", + "advanced_missing": "없음", + "advanced_new_file": "새 파일(저장하기 전까지 생성되지 않음)", + "advanced_new_file_hint": "새 파일 — 내용을 추가하고 저장", + "advanced_backup_created": "백업이 생성되었습니다", + "advanced_restart_console": ".env 변경 사항을 적용하려면 웹 콘솔 서비스를 재시작하세요(예: systemctl restart betterdesk-console).", + "advanced_restart_goserver": "블록리스트 변경 사항을 로드하려면 BetterDesk Go 서버를 재시작하세요.", + "advanced_restart_systemd": "systemd 유닛을 편집한 후 실행: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "변경 사항을 적용하려면 영향받는 서비스를 재시작하세요.", + "advanced_error_unknown": "알 수 없는 구성 파일", + "advanced_error_not_found": "파일이 존재하지 않습니다", + "advanced_error_not_file": "경로가 일반 파일이 아닙니다", + "advanced_error_too_large": "파일이 최대 편집 가능 크기(512 KB)를 초과합니다", + "advanced_error_binary": "패널에서 바이너리 파일을 편집할 수 없습니다", + "advanced_error_invalid": "잘못된 파일 내용", + "advanced_error_not_writable": "콘솔 프로세스가 이 파일에 쓸 수 없습니다", + "advanced_file_console-env": "콘솔 환경(.env)", + "advanced_file_console-env-local": "콘솔 재정의(.env.local)", + "advanced_file_go-blocklist": "Go 서버 블록리스트(blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (서비스 유닛)", + "advanced_file_systemd-server": "systemd: betterdesk-server (서비스 유닛)", + "advanced_file_console-session-secret": "콘솔 세션 시크릿(.session_secret)", + "advanced_file_go-audit-log": "Go 서버 감사 로그(audit.jsonl)", + "advanced_file_build-env": "에이전트 빌드 환경(/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisord 구성)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (오케스트레이션)", + "advanced_restart_none": "이 파일은 서비스 재시작이 필요하지 않습니다.", + "enrollment_title": "기기 등록(RustDesk)", + "enrollment_desc": "새 RustDesk 클라이언트의 등록 방식과 운영자가 등록 요청 페이지에서 승인하는 방법을 제어합니다.", + "enrollment_require_approval": "운영자 승인 필요(관리 모드)", + "enrollment_require_approval_hint": "활성화하면 알 수 없는 클라이언트가 운영자가 「등록 요청」에서 승인할 때까지 큐에 대기합니다.", + "enrollment_rich_approve": "전체 승인 양식(이름, 폴더, 그룹, 태그)", + "enrollment_rich_approve_hint": "등록 또는 LAN 등록 요청 승인 시 상세 대화상자를 표시합니다.", + "enrollment_tag_picker": "기존 기기 태그에서 태그 선택", + "enrollment_tag_picker_hint": "운영자가 기기 페이지에서 사용되는 태그 목록에서 선택할 수 있습니다(입력만으로 제한되지 않음).", + "enrollment_open_requests": "등록 요청 열기", + "enrollment_pending_count": "대기 중인 등록 요청 {count}건" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "로그인 실패", + "action_logout": "Logout", + "action_password_change": "비밀번호가 변경되었습니다.", + "action_2fa_enable": "2FA 활성화", + "action_2fa_disable": "2FA 비활성화됨", + "action_user_create": "사용자가 생성됨", + "action_user_update": "사용자 업데이트됨", + "action_user_delete": "사용자가 삭제되었습니다.", + "action_settings_update": "설정이 업데이트되었습니다.", + "action_device_ban": "금지된 장치", + "action_device_unban": "금지 해제된 장치", + "action_device_delete": "기기가 삭제되었습니다." + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "초기 기능 — 에이전트 패키지 생성기가 활발히 개발 중입니다.", + "config_options": "구성 옵션", + "server_address": "서버 주소", + "server_address_hint": "서버의 도메인 또는 IP 주소", + "custom_port": "Custom Port", + "port_hint": "기본값을 사용하려면 비워 두세요(21116).", + "relay_server": "릴레이 서버", + "relay_placeholder": "비어 있으면 ID 서버와 동일", + "relay_hint": "선택사항: 별도의 중계 서버 주소", + "include_key": "구성에 공개 키 포함", + "generate": "구성 생성", + "output": "구성 출력", + "usage_title": "연결 세부정보", + "generated": "구성이 생성되었습니다.", + "server_required": "서버 주소가 필요합니다", + "nothing_to_copy": "먼저 구성을 생성하세요.", + "bundles_title": "에이전트 번들", + "new_bundle": "새 번들", + "editor_title": "번들 편집기", + "empty_state": "왼쪽에서 번들을 선택하거나 새 번들을 생성하여 시작하세요.", + "loading": "로드 중…", + "no_bundles": "아직 번들이 없습니다. 첫 번째 것을 만들어보세요.", + "bundle_name": "번들 이름", + "bundle_name_hint": "내부 라벨만 — 최종 사용자에게는 표시되지 않습니다.", + "short_link": "짧은 다운로드 링크", + "short_link_hint": "공개 URL(/d/…)에 사용됩니다. 소문자, 숫자, 하이픈만 가능(2–32자). 번들 이름에서 자동 입력 — 공유하기 쉽게 줄이세요(예: acme).", + "branding_section": "브랜딩", + "company_name": "회사 / 브랜드 이름", + "short_text": "간단한 설명", + "contact_email": "연락처 이메일", + "contact_phone": "전화번호로 연락하기", + "contact_url": "웹사이트에 문의하세요", + "logo": "로고", + "logo_hint": "PNG, JPEG, SVG 또는 WebP. 최대 256KB.", + "logo_clear": "로고 제거", + "primary_color": "기본 색상", + "accent_color": "헤더 색상", + "default_lang": "기본 언어", + "allow_unattended": "무인 접근 허용", + "allow_unattended_hint": "활성화되면 에이전트는 운영자 액세스를 위한 영구 비밀번호를 표시합니다.", + "save": "번들 저장", + "revoke": "취소", + "unrevoke": "다시 활성화", + "revoked": "취소됨", + "preview_title": "실시간 미리보기", + "preview_hint": "최종 사용자 에이전트 창의 대략적인 모습입니다.", + "preview_default_name": "BetterDesk 지원", + "preview_status_ready": "준비", + "preview_id": "귀하의 신분증", + "preview_password": "비밀번호", + "preview_chat": "지원팀과 채팅", + "preview_settings": "설정(관리자 전용)", + "preview_quit": "종료(관리자 전용)", + "download_link_title": "다운로드 링크", + "download_link_hint": "이 링크를 최종 사용자와 공유하세요. 브랜드 다운로드 페이지가 표시됩니다. 짧은 링크를 변경해도 이전 hex 링크는 계속 작동합니다.", + "open_portal": "열기", + "created": "번들 생성됨", + "saved": "번들이 저장되었습니다", + "deleted": "번들이 삭제되었습니다.", + "revoked_ok": "번들이 취소되었습니다.", + "unrevoked_ok": "번들이 다시 활성화되었습니다.", + "link_copied": "링크가 클립보드에 복사되었습니다.", + "copy_failed": "자동으로 복사할 수 없습니다. 수동으로 복사하십시오.", + "unsaved_confirm": "저장되지 않은 변경사항을 삭제하시겠습니까?", + "confirm_revoke": "이 번들을 취소하시겠습니까? 다운로드 링크가 작동하지 않습니다.", + "confirm_unrevoke": "이 번들을 다시 활성화하시겠습니까?", + "confirm_delete": "이 번들을 영구적으로 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", "errors": { - "forbidden_title": "액세스가 거부되었습니다.", - "forbidden_message": "이 리소스에 액세스할 수 있는 권한이 없습니다.", - "not_found_title": "페이지를 찾을 수 없음", - "not_found_message": "찾으시는 페이지가 존재하지 않거나 이동되었습니다.", - "server_error_title": "서버 오류", - "server_error_message": "문제가 발생했습니다. 나중에 다시 시도해 주세요.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "기기를 로드하지 못했습니다.", - "load_key_failed": "키를 로드하지 못했습니다.", - "load_qr_failed": "QR을 로드하지 못했습니다.", - "load_audit_failed": "감사 로그를 로드하지 못했습니다.", - "load_users_failed": "사용자를 로드하지 못했습니다.", - "load_folders_failed": "폴더를 로드하지 못했습니다.", - "download_failed": "다운로드 실패", - "logout_failed": "로그아웃 실패", - "password_change_failed": "비밀번호를 변경하지 못했습니다.", - "language_change_failed": "언어를 변경하지 못했습니다.", - "ban_failed": "기기를 차단하지 못했습니다.", - "unban_failed": "기기 차단을 해제하지 못했습니다.", - "delete_failed": "기기를 삭제하지 못했습니다.", - "change_id_failed": "기기 ID를 변경하지 못했습니다.", - "bulk_delete_failed": "기기를 삭제하지 못했습니다.", - "sync_failed": "상태를 동기화하지 못했습니다.", - "error": "오류", - "not_found": "찾을 수 없음", - "server_error": "서버 오류", - "load_device_failed": "장치를 불러오지 못했습니다", - "load_orgs_failed": "조직을 로드하지 못했��니다." + "validation_failed": "검증 실패", + "name_required": "번들 이름은 필수 항목입니다.", + "company_name_required": "회사 이름은 필수 항목입니다.", + "logo_invalid": "로고는 유효한 이미지 파일이어야 합니다.", + "logo_too_large": "로고는 256KB 이하여야 합니다.", + "logo_read_failed": "로고 파일을 읽지 못했습니다.", + "primary_color_invalid": "기본 색상은 16진수 값이어야 합니다(예: #2563eb).", + "accent_color_invalid": "헤더 색상은 16진수 값이어야 합니다(예: #1e293b).", + "contact_url_invalid": "연락처 웹사이트는 유효한 URL여야 합니다.", + "server_host_required": "공용 서버 주소는 필수입니다", + "server_host_invalid": "유효한 도메인 이름 또는 IPv4 주소를 입력하세요", + "token_failed": "등록 토큰을 생성할 수 없습니다 — 서버 연결을 확인하세요", + "rebuild_revoked": "취소된 번들은 재빌드할 수 없습니다 — 먼저 다시 활성화하세요", + "slug_invalid": "짧은 링크는 소문자, 숫자, 하이픈만 포함할 수 있습니다", + "slug_too_short": "짧은 링크는 최소 2자여야 합니다", + "slug_too_long": "짧은 링크는 최대 32자입니다", + "slug_taken": "이 짧은 링크는 다른 번들에서 이미 사용 중입니다" }, - "remote": { - "title": "원격 데스크톱", - "connecting": "연결 중...", - "waiting_password": "비밀번호를 기다리는 중", - "authenticating": "인증 중...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "비밀번호 필요", - "enter_password_for": "기기 비밀번호를 입력하세요.", - "password_placeholder": "장치 비밀번호", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "장치로 돌아가기", - "fullscreen": "Fullscreen", - "toggle_audio": "오디오 전환", - "send_keys": "키 보내기", - "scale_mode": "Scale Mode", - "scale_fit": "창에 맞추기", - "scale_fill": "Fill Window", - "scale_original": "원본 크기(1:1)", - "scale_stretch": "늘려서 채우기", - "actions": "Actions", - "lock_screen": "잠금 ���면", - "restart_remote": "원격 장치 다시 시작", - "refresh_screen": "새로 고침 화면", - "clipboard_paste": "클립보드에서 붙여넣기", - "block_input": "Block Input", - "display_settings": "디스플레이 설정", - "image_quality": "이미지 품질", - "quality_best": "Best Quality", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "원격 커서 표시", - "lock_after_session": "세션 후 잠금", - "privacy_mode": "개인 정보 보호 모드", - "disable_clipboard": "클립보드 비활성화", - "chat": "Chat", - "chat_placeholder": "메시지를 입력하세요...", - "record": "녹화 화면", - "view_only": "보기 전용", - "pin_toolbar": "도구 모음 고정", - "monitors": "Monitors", - "select_monitor": "모니터 선택", - "quality_speed": "속도(낮은 품질, 60fps)", - "quality_quality": "품질(최고, 30fps)", - "recording_started": "녹음이 시작되었습니다", - "recording_stopped": "녹음이 중지되었습니다.", - "download_recording": "녹음 다운로드", - "e2e_encrypted": "종단 간 암호화", - "e2e_key_exchange": "보안 채널 설정 중...", - "confirm_restart": "원격 장치를 다시 시작하시겠습니까?", - "webcodecs_not_supported": "귀하의 브라우저는 WebCodecs API를 지원하지 않습니다. Chrome 94+ 또는 Edge 94+를 사용하세요.", - "webcodecs_insecure_context": "HTTP에서는 WebCodecs를 사용할 수 없습니다. 비디오는 소프트웨어 대체를 사용합니다. 최상의 성능을 위해서는 HTTPS를 사용하십시오.", - "webcodecs_fallback_active": "소프트웨어 비디오 디코더 활성(제한된 성능)", - "click_to_start": "시작하려면 클릭하세요", - "autoplay_blocked": "브라우저에서 비디오 및 오디오 재생을 시작하려면 사용자 상호 작용이 필요합니다.", - "start_playback": "재생 시작", - "new_connection": "새 연결", - "device_id_placeholder": "장치 ID 입력", - "http_warning": "HTTP 모드: H.264 소프트웨어 디코딩으로 제한 (~15 FPS). 최고 성능을 위해 HTTPS를 사용하세요 (WebCodecs, VP9, 60 FPS).", - "file_transfer": "파일 전송", - "file_upload": "업로드", - "file_download": "다운로드", - "file_empty": "이 폴더는 비어 있습니다", - "file_transfers": "전송 목록", - "file_complete": "완료", - "file_error": "전송 실패", - "file_show_hidden": "숨기 파일 표시", - "file_new_folder": "새 폴더", - "file_new_folder_prompt": "폴더 이름 입력:", - "file_parent": "상위 폴더", - "file_root": "루트", - "file_rename": "이름 변경", - "file_rename_prompt": "새 이름 입력:", - "file_delete_confirm": "이 항목을 삭제하시겠습니까?", - "file_cancelled": "전송 취소됨", - "2fa_required": "2FA 인증 필요", - "2fa_hint": "인증 앱의 6자리 코드를 입력하세요.", - "2fa_invalid": "유효한 6자리 코드를 입력하세요.", - "verify": "Verify", - "use_cdap_fallback": "CDAP 뷰어 사용", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "클립보드가 비어 있습니다.", - "clipboard_denied": "클립보드 액세스가 거부되었습니다. HTTPS가 필요하거나 권한이 부여되지 않았습니다.", - "file_loading": "로드 중...", - "file_timeout": "원격 장치가 응답하지 않았습니다. 원격 시스템에서 파일 전송이 지원되지 않거나 비활성화되어 있을 수 있습니다.", - "codec": "비디오 코덱", - "codec_auto": "자동(권장)" + "legacy_title": "클라이언트 구성 생성기", + "connection_section": "서버 연결", + "server_host": "공용 서버 주소", + "server_host_placeholder": "support.example.com 또는 203.0.113.10", + "server_host_hint": "최종 사용자가 BetterDesk 서버에 접속하는 도메인 이름 또는 공용 IP. 포트는 콘솔 구성에서 가져옵니다.", + "use_https": "HTTPS / WSS 사용(권장)", + "enrollment_token": "기기 등록", + "enrollment_token_pending": "기기별 승인 후 할당", + "enrollment_token_set": "기기별 — 등록에서 승인", + "enrollment_token_hint": "각 설치가 개별적으로 등록됩니다. 등록 패널에서 새 기기를 승인하면 서버가 컴퓨터별로 고유한 액세스 키를 발급합니다.", + "enrollment_per_device": "기기별 — 등록에서 승인", + "background_color": "창 배경색", + "surface_color": "카드 배경색", + "text_color": "텍스트 색상", + "text_muted_color": "흐린 텍스트 색상", + "status_ready_color": "준비 표시기 색상", + "header_text_color": "헤더 텍스트 색상", + "builds_title": "클라이언트 빌드", + "builds_hint": "각 플랫폼을 위해 이 서버에서 컴파일된 설치 파일. 도구 체인 오류 수정 또는 에이전트 소스 업데이트 후 재빌드합니다.", + "builds_loading": "빌드 상태 로드 중…", + "builds_empty": "아직 대기 중인 빌드가 없습니다 — 번들을 저장하거나 모두 재빌드를 클릭하세요.", + "rebuild_all": "모두 재빌드", + "rebuilding_all": "재빌드 대기열에 추가 중…", + "rebuild_queued": "모든 플랫폼 빌드가 대기열에 추가되었습니다", + "rebuild_confirm": "이 번들의 모든 플랫폼 설치 파일을 재빌드하시겠습니까? 기존의 준비된 산출물이 교체됩니다.", + "build_status_ready": "준비 완료", + "build_status_pending": "대기 중", + "build_status_building": "빌드 중", + "build_status_failed": "실패", + "builds_summary": "{{ready}} 준비 완료 · {{pending}} 대기 중 · {{building}} 빌드 중 · {{failed}} 실패", + "build_error_hint": "빌드 오류", + "preview_help": "도움 요청" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID 서버", + "relay_server": "릴레이 서버", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "확인 중...", + "label": "Status", + "no_signal": "신호 없음" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "데스크톱 클라이언트를 통해 연결", + "remote_viewer": "원격 뷰어", + "web_remote": "웹 원격", + "details": "Details", + "edit": "편집", + "delete": "삭제", + "ban": "Ban", + "unban": "Unban", + "save": "저장", + "cancel": "취소", + "confirm": "확인", + "close": "닫기", + "clear": "지우기", + "ok": "OK", + "saved": "성공적으로 저장됨", + "back": "뒤로", + "create": "만들기", + "dismiss": "닫기", + "view_all": "모두 보기", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}초 전", + "minutes_ago": "{count}분 전", + "hours_ago": "{count}h 전", + "days_ago": "{count}일 전", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "사용자 관리", + "subtitle": "콘솔 사용자 및 권한 관리", + "add_user": "Add User", + "edit_user": "사용자 편집", + "username": "사용자 이름", + "username_placeholder": "사용자 이름을 입력하세요", + "username_hint": "3~32자, 문자, 숫자, 밑줄만 가능", + "password": "비밀번호", + "password_placeholder": "비밀번호를 입력하세요", + "password_hint": "대소문자, 숫자, 기호를 혼합하여 최소 8자 이상", + "password_leave_empty": "현재 상태를 유지하려면 비워 두세요.", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "생성됨", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "사용자 생성", + "edit": "편집", + "reset_password": "비밀번호 재설정", + "new_password": "새 비밀번호", + "delete_title": "사용자 삭제", + "delete_confirm": "사용자 {username}를 삭제하시겠습니까?", + "delete_success": "사용자가 삭제되었습니다.", + "user_created": "사용자가 성공적으로 생성되었습니다.", + "user_updated": "사용자가 업데이트되었습니다.", + "password_reset_success": "비밀번호가 재설정되었습니다.", + "empty_title": "사용자를 찾을 수 없습니다.", + "empty_text": "콘솔 액세스를 관리하려면 사용자를 추가하세요.", + "fill_required": "필수 입력란을 모두 작성해 주세요.", + "invalid_username": "사용자 이름은 3~32자, 문자, 숫자, 밑줄만 포함해야 합니다.", + "username_exists": "사용자 이름이 이미 존재합니다.", + "weak_password": "비밀번호가 너무 취약합니다.", + "password_too_short": "비밀번호는 8자 이상이어야 합니다.", + "invalid_role": "잘못된 역할", + "cannot_demote_self": "자신을 강등시킬 수 없습니다.", + "cannot_delete_self": "자신의 계정을 삭제할 수 없습니다.", + "last_admin": "마지막 관리자는 삭제할 수 없습니다.", + "admin_only": "이 기능은 관리자만 사용할 수 있습니다.", + "password_required": "비밀번호가 필요합니다", + "not_found": "사용자를 찾을 수 없습니다", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "보안 모범 사례", + "tip_strong_passwords": "각 사용자마다 강력하고 고유한 비밀번호를 사용하세요.", + "tip_unique_accounts": "각 사람에 대한 개별 계정 만들기", + "tip_viewer_role": "읽기 액세스만 필요한 사용자에게는 뷰어 역할을 사용하세요.", + "tip_operator_role": "장치를 관리해야 하지만 사용자는 관리하지 않는 사용자에게 운영자 역할을 사용하세요.", + "tip_audit_logs": "의심스러운 활동이 있는지 정기적으로 감사 로그를 검토하세요.", + "role_pro": "Pro(API만 해당)", + "role_super_admin": "Super Admin", + "role_server_admin": "서버 관리자", + "role_global_admin": "글로벌 관리자", + "organizations": "조직", + "user_organizations": "{username}의 조직", + "no_organizations": "사용자가 어떤 조직에도 할당되지 않았습니다.", + "org_removed": "조직 할당이 삭제됨", + "server_role_label": "서버 역할", + "server_role_hint": "사용자가 전체 콘솔에서 수행할 수 있는 작업(패널 액세스, 서버 구성, 감사 등)을 결정합니다.", + "org_membership_section": "조직 회원", + "org_membership_hint": "사용자는 여러 조직에 속할 수 있습니다. 조직 역할은 해당 조직 내부의 권한만 제어하며 위의 서버 역할과는 별개입니다.", + "column_organizations": "조직", + "no_orgs_short": "—", + "org_count_one": "{count} 조직", + "org_count_many": "{count} 조직", + "all_orgs_assigned": "사용자는 이미 모든 조직의 구성원입니다.", + "user_groups": "사용자 그룹", + "user_groups_hint": "사용자 그룹을 사용하여 선택한 장치 그룹에 대한 액세스 권한을 부여할 수 있습니다.", + "loading_user_groups": "사용자 그룹 로드 중...", + "no_user_groups": "사용 가능한 사용자 그룹이 없습니다.", + "create_user_group": "그룹 만들기", + "edit_user_group": "사용자 그룹 편집", + "delete_user_group": "사용자 그룹 삭제", + "delete_user_group_confirm": "사용자 그룹 {name}를 삭제하시겠습니까? 회원은 이 그룹을 통해 부여된 액세스 권한을 잃게 됩니다.", + "user_group_created": "사용자 그룹이 생성되었습니다.", + "user_group_updated": "사용자 그룹이 업데이트되었습니다.", + "user_group_deleted": "사용자 그룹이 삭제되었습니다.", + "user_group_not_found": "사용자 그룹을 찾을 수 없습니다", + "group_name": "그룹 이름", + "group_name_placeholder": "연산자", + "group_note": "Note", + "group_note_placeholder": "선택적 참고 사항", + "group_name_required": "그룹 이름은 필수 항목입니다.", + "group_members_count": "{count} 회원", + "provider": "공급자", + "provider_local": "로컬", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "ID 공급자에 의해 관리됨", + "provider_managed_hint": "이 계정은 외부 ID 공급자(LDAP/AD 또는 SSO)에 의해 관리됩니다. 비밀번호와 역할은 공급자가 제어하며 여기서 변경할 수 없습니다." + }, + "folders": { + "title": "Folders", + "create": "폴더 생성", + "edit": "폴더 편집", + "delete": "폴더 삭제", + "name": "Folder Name", + "name_placeholder": "폴더 이름을 입력하세요", + "name_required": "폴더 이름은 필수 항목입니다.", + "name_too_long": "폴더 이름이 너무 깁니다(최대 50자).", + "color": "Color", + "icon": "Icon", + "not_found": "폴더를 찾을 수 없습니다", + "delete_confirm": "이 폴더를 삭제하시겠습니까? 장치가 할당 해제됩니다.", + "delete_success": "폴더가 삭제되었습니다.", + "created": "폴더가 성공적으로 생성되었습니다", + "updated": "폴더가 업데이트되었습니다.", + "no_devices_selected": "선택한 기기가 없습니다.", + "devices_moved": "기기가 성공적으로 이동되었습니다.", + "device_assigned": "폴더에 할당된 장치", + "unassigned": "Unassigned", + "all_devices": "모든 장치", + "drag_hint": "기기를 폴더로 드래그하여 정리하세요.", + "move_to": "다음으로 이동", + "toggle_sidebar": "사이드바 전환" + }, + "errors": { + "forbidden_title": "액세스가 거부되었습니다.", + "forbidden_message": "이 리소스에 액세스할 수 있는 권한이 없습니다.", + "not_found_title": "페이지를 찾을 수 없음", + "not_found_message": "찾으시는 페이지가 존재하지 않거나 이동되었습니다.", + "server_error_title": "서버 오류", + "server_error_message": "문제가 발생했습니다. 나중에 다시 시도해 주세요.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "기기를 로드하지 못했습니다.", + "load_key_failed": "키를 로드하지 못했습니다.", + "load_qr_failed": "QR을 로드하지 못했습니다.", + "load_audit_failed": "감사 로그를 로드하지 못했습니다.", + "load_users_failed": "사용자를 로드하지 못했습니다.", + "load_folders_failed": "폴더를 로드하지 못했습니다.", + "download_failed": "다운로드 실패", + "logout_failed": "로그아웃 실패", + "password_change_failed": "비밀번호를 변경하지 못했습니다.", + "language_change_failed": "언어를 변경하지 못했습니다.", + "ban_failed": "기기를 차단하지 못했습니다.", + "unban_failed": "기기 차단을 해제하지 못했습니다.", + "delete_failed": "기기를 삭제하지 못했습니다.", + "change_id_failed": "기기 ID를 변경하지 못했습니다.", + "bulk_delete_failed": "기기를 삭제하지 못했습니다.", + "sync_failed": "상태를 동기화하지 못했습니다.", + "error": "오류", + "not_found": "찾을 수 없음", + "server_error": "서버 오류", + "load_device_failed": "장치를 불러오지 못했습니다", + "load_orgs_failed": "조직을 로드하지 못했��니다." + }, + "remote": { + "title": "원격 데스크톱", + "connecting": "연결 중...", + "waiting_password": "비밀번호를 기다리는 중", + "authenticating": "인증 중...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "비밀번호 필요", + "enter_password_for": "기기 비밀번호를 입력하세요.", + "password_placeholder": "장치 비밀번호", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "장치로 돌아가기", + "fullscreen": "Fullscreen", + "toggle_audio": "오디오 전환", + "send_keys": "키 보내기", + "scale_mode": "Scale Mode", + "scale_fit": "창에 맞추기", + "scale_fill": "Fill Window", + "scale_original": "원본 크기(1:1)", + "scale_stretch": "늘려서 채우기", + "actions": "Actions", + "lock_screen": "잠금 ���면", + "restart_remote": "원격 장치 다시 시작", + "refresh_screen": "새로 고침 화면", + "clipboard_paste": "클립보드에서 붙여넣기", + "block_input": "Block Input", + "display_settings": "디스플레이 설정", + "image_quality": "이미지 품질", + "quality_best": "Best Quality", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "원격 커서 표시", + "lock_after_session": "세션 후 잠금", + "privacy_mode": "개인 정보 보호 모드", + "disable_clipboard": "클립보드 비활성화", + "chat": "Chat", + "chat_placeholder": "메시지를 입력하세요...", + "record": "녹화 화면", + "view_only": "보기 전용", + "pin_toolbar": "도구 모음 고정", + "monitors": "Monitors", + "select_monitor": "모니터 선택", + "quality_speed": "속도(낮은 품질, 60fps)", + "quality_quality": "품질(최고, 30fps)", + "recording_started": "녹음이 시작되었습니다", + "recording_stopped": "녹음이 중지되었습니다.", + "download_recording": "녹음 다운로드", + "e2e_encrypted": "종단 간 암호화", + "e2e_key_exchange": "보안 채널 설정 중...", + "confirm_restart": "원격 장치를 다시 시작하시겠습니까?", + "webcodecs_not_supported": "귀하의 브라우저는 WebCodecs API를 지원하지 않습니다. Chrome 94+ 또는 Edge 94+를 사용하세요.", + "webcodecs_insecure_context": "HTTP에서는 WebCodecs를 사용할 수 없습니다. 비디오는 소프트웨어 대체를 사용합니다. 최상의 성능을 위해서는 HTTPS를 사용하십시오.", + "webcodecs_fallback_active": "소프트웨어 비디오 디코더 활성(제한된 성능)", + "click_to_start": "시작하려면 클릭하세요", + "autoplay_blocked": "브라우저에서 비디오 및 오디오 재생을 시작하려면 사용자 상호 작용이 필요합니다.", + "start_playback": "재생 시작", + "new_connection": "새 연결", + "device_id_placeholder": "장치 ID 입력", + "http_warning": "HTTP 모드: H.264 소프트웨어 디코딩으로 제한 (~15 FPS). 최고 성능을 위해 HTTPS를 사용하세요 (WebCodecs, VP9, 60 FPS).", + "file_transfer": "파일 전송", + "file_upload": "업로드", + "file_download": "다운로드", + "file_empty": "이 폴더는 비어 있습니다", + "file_transfers": "전송 목록", + "file_complete": "완료", + "file_error": "전송 실패", + "file_show_hidden": "숨기 파일 표시", + "file_new_folder": "새 폴더", + "file_new_folder_prompt": "폴더 이름 입력:", + "file_parent": "상위 폴더", + "file_root": "루트", + "file_rename": "이름 변경", + "file_rename_prompt": "새 이름 입력:", + "file_delete_confirm": "이 항목을 삭제하시겠습니까?", + "file_cancelled": "전송 취소됨", + "2fa_required": "2FA 인증 필요", + "2fa_hint": "인증 앱의 6자리 코드를 입력하세요.", + "2fa_invalid": "유효한 6자리 코드를 입력하세요.", + "verify": "Verify", + "use_cdap_fallback": "CDAP 뷰어 사용", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "클립보드가 비어 있습니다.", + "clipboard_denied": "클립보드 액세스가 거부되었습니다. HTTPS가 필요하거나 권한이 부여되지 않았습니다.", + "file_loading": "로드 중...", + "file_timeout": "원격 장치가 응답하지 않았습니다. 원격 시스템에서 파일 전송이 지원되지 않거나 비활성화되어 있을 수 있습니다.", + "codec": "비디오 코덱", + "codec_auto": "자동(권장)" + }, + "branding": { + "identity_title": "브랜드 아이덴티티", + "identity_desc": "콘솔에 표시되는 애플리케이션 이름과 설명을 사용자 정의하세요.", + "app_name": "애플리케이션 이름", + "app_description": "애플리케이션 설명", + "logo_title": "Logo", + "logo_desc": "사이드바 및 로그인 페이지에 로고가 표시되는 방식을 선택하세요.", + "logo_type_icon": "머티리얼 아이콘", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "머티리얼 아이콘 이름(예: DNS, 클라우드, 보안)을 입력합니다. Fonts.google.com/icons를 참조하세요.", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "여기에 SVG 마크업을 붙여넣으세요. 경로와 스타일이 포함된 전체 요소를 지원합니다.", + "logo_image_upload": "이미지 업로드", + "logo_image_choose": "이미지 파일 선택", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "파일 형식이 잘못되었습니다. PNG, JPG, GIF, WebP 또는 SVG를 사용하세요.", + "preview": "Preview", + "colors_title": "색 구성표", + "colors_desc": "색상 팔레트를 사용자 정의합니다. 기본값을 사용하려면 비워 두세요.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "악센트 색상", + "colors_borders": "Borders", + "import_export_title": "가져오기/내보내기", + "import_export_desc": "테마를 JSON 파일로 저장하거나 다른 인스턴스에서 가져옵니다.", + "export_theme": "테마 내보내기", + "import_theme": "테마 가져오기", + "reset_defaults": "기본값��로 재설정", + "save_branding": "브랜딩 저장", + "saved": "브랜딩이 성공적으로 저장되었습니다. 새로고침 중...", + "exported": "테마를 내보냈습니다.", + "imported": "테마를 성공적으로 가져왔습니다. 새로고침 중...", + "import_error": "테마를 가져오지 못했습니다. 파일 형식이 잘못되었습니다.", + "reset_confirm": "브랜딩을 기본값으로 재설정하시겠습니까? 이 작업은 취소할 수 없습니다.", + "reset_success": "브랜딩이 기본값으로 재설정되었습니다. 새로고침 중...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "브랜드 로고로 표시되는 기본 텍스트", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "로고 아래의 보조 텍스트(예: 제품 이름 또는 태그라인)", + "logo_upload_success": "로고가 성공적으로 업로드되었습니다.", + "typography_title": "Typography", + "typography_desc": "제목과 본문 텍스트의 글꼴을 선택하세요. 자체 호스팅을 위해 글꼴이 서버에 다운로드됩니다.", + "font_heading": "제목 글꼴", + "font_heading_hint": "제목(H1~H6) 및 텍스트 로고에 사용됩니다.", + "font_body": "Body Font", + "font_body_hint": "본문 텍스트 및 UI 요소에 사용됩니다.", + "font_search_placeholder": "글꼴 검색...", + "font_system_default": "시스템 기본값", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "서버에 다운로드된 글꼴", + "powered_by": "제공", + "background_title": "배경 및 외관", + "background_desc": "콘솔 배경 화면, 그라데이션 또는 단색 배경을 설정합니다. 카드가 그 위에 표시됩니다.", + "bg_type_none": "없음", + "bg_type_color": "단색", + "bg_type_gradient": "그라데이션", + "bg_type_image": "이미지", + "bg_color": "배경색", + "bg_gradient": "CSS 그라데이션", + "bg_gradient_hint": "유효한 CSS 그라데이션(예: linear-gradient(135deg, #1e293b, #0f172a))", + "bg_image_upload": "배경 이미지 업로드", + "bg_image_choose": "이미지 파일 선택", + "bg_image_hint": "PNG, JPG, WebP 또는 GIF. 최대 8 MB. 서버에 저장됩니다.", + "bg_image_url": "이미지 경로 / URL", + "bg_size": "이미지 크기 조정", + "bg_size_cover": "커버(화면 채우기)", + "bg_size_contain": "컨테인(맞추기)", + "bg_size_auto": "자동(원본 크기)", + "bg_blur": "배경 흐림", + "bg_overlay": "어두운 오버레이", + "bg_overlay_hint": "텍스트 가독성을 높이기 위해 배경을 어둡게 합니다.", + "bg_image_too_large": "이미지가 너무 큽니다. 최대 크기는 8 MB입니다.", + "bg_image_invalid_type": "잘못된 파일 형식입니다. PNG, JPG, WebP 또는 GIF를 사용하세요.", + "bg_upload_success": "배경 이미지가 성공적으로 업로드되었습니다.", + "login_title": "로그인 페이지", + "login_desc": "로그인 화면의 제목, 부제목, 배경을 사용자 지정합니다.", + "login_heading": "로그인 제목", + "login_heading_placeholder": "돌아오셨군요", + "login_subheading": "로그인 부제목", + "login_subheading_placeholder": "계정에 로그인하세요", + "login_bg_inherit": "콘솔과 동일", + "agent_title": "에이전트 다운로드 페이지", + "agent_desc": "최종 사용자에게 표시되는 공개 에이전트 다운로드 포털을 사용자 지정합니다.", + "agent_show_powered": "「Powered by BetterDesk」 표시", + "agent_show_powered_hint": "다운로드 포털 바닥글에 BetterDesk 크레딧을 표시합니다.", + "footer_title": "바닥글 및 저작권", + "footer_desc": "로그인 화면 및 콘솔 사이드바에 표시되는 사용자 지정 바닥글 텍스트를 추가합니다.", + "footer_text": "바닥글 텍스트", + "footer_text_hint": "예: 저작권 표시 또는 회사 이름.", + "show_powered": "「BetterDesk」 크레딧 표시", + "show_powered_hint": "로그인 바닥글 및 사이드바에 BetterDesk 이름과 버전을 표시합니다.", + "custom_css_title": "사용자 지정 CSS", + "custom_css_desc": "고급: 콘솔 전체 및 로그인 페이지에 적용되는 사용자 지정 CSS를 주입합니다.", + "custom_css_hint": "주의해서 사용하세요. 유효하지 않거나 안전하지 않은 규칙은 삭제됩니다. 최대 20,000자." + }, + "device_detail": { + "tab_overview": "개요", + "tab_tags": "태그 및 메모", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "연결", + "section_manage": "관리", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "이 장치는 금지되어 있습니다", + "no_reason": "이유가 제공되지 않음", + "tags": "Tags", + "no_tags": "이 기기에 할당된 태그가 없습니다.", + "tag_placeholder": "태그 이름을 입력하세요...", + "add_tag": "Add", + "tag_exists": "이 태그는 이미 존재합니다.", + "notes": "Notes", + "notes_placeholder": "이 기기에 대한 메모를 추가하세요...", + "danger_zone": "Danger Zone", + "action_connect_web": "웹 원격", + "action_connect_web_desc": "브라우저 원격 데스크톱을 통해 연결", + "action_native_remote": "BetterDesk 원격", + "action_native_remote_desc": "기본 JPEG 스트림 — 플러그인이 필요하지 않습니다.", + "action_connect_desktop": "데스크톱 클라이언트", + "action_connect_desktop_desc": "데스크톱 클라이언트 앱에서 열기", + "action_change_id_desc": "기기 등록 ID 변경", + "action_ban_desc": "이 장치의 연결을 차단합니다.", + "action_unban_desc": "이 장치를 다시 연결하도록 허용", + "action_delete_desc": "이 ��치를 영구적으로 제거", + "tab_hardware": "Hardware", + "tab_metrics": "측정항목", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "인코딩 기능", + "section_live_metrics": "라이브 지표", + "section_current_usage": "현재 사용량", + "section_usage_history": "이용내역", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU 주파수", + "total_memory": "총 메모리", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "업데이트됨", + "device_groups": "그룹", + "no_sysinfo": "사용 가능한 하드웨어 정보가 없습니다.", + "no_sysinfo_hint": "장치가 sysinfo 보고서를 보낸 후에 시스템 정보가 나타납니다.", + "no_metrics": "측정항목 데이터가 없습니다.", + "no_metrics_hint": "장치가 하트비트 보고서를 보낸 후 측정항목이 표시됩니다.", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "파일", + "agent_lazy_hint": "에이전트에서 실시간 데이터를 로드하려면 이 탭을 클릭하세요.", + "agent_offline": "상담원이 오프라인 상태입니다", + "agent_timeout": "상담원이 제때에 응답하지 않았습니다.", + "agent_error": "에이전트에서 데이터를 로드하지 못했습니다.", + "service_name": "Name", + "service_display": "표시 이름", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "관리 장치의 하드웨어 및 소프트웨어 인벤토리", + "device_id": "장치 ID", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "총 메모리", + "memory_used": "Used Memory", + "memory_available": "사용 가능한 메모리", + "memory_usage": "메모리 사용량", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "네트워크 인터페이스", + "software": "Software", + "software_count": "설치된 소프트웨어", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "물리적 코어", + "logical_cores": "논리 코어", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "가능", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP 주소", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "수집가 실행 중", + "collector_stopped": "수집기가 중지됨", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "수집 장소", + "no_data": "아직 재고 데이터가 없습니다. 시스템 정보를 수집하려면 \"지금 수집\"을 클릭하세요.", + "no_devices": "인벤토리 데이터가 있는 기기를 찾을 수 없습니다.", + "detail_title": "장치 인벤토리 세부정보", + "telemetry": "Telemetry", + "view_detail": "세부정보 보기", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "지원 티켓 및 문제 추적", + "create": "New Ticket", + "edit": "티켓 수정", + "delete": "티켓 삭제", + "detail": "티켓 세부정보", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "할당 대상", + "created_by": "작성자", + "device": "장치", + "sla_due": "SLA Due", + "created_at": "생성됨", + "updated_at": "업데이트됨", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "열기", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "댓글을 쓰세요...", + "internal_note": "내부 메모(최종 사용자에게 표시되지 않음)", + "attachments": "Attachments", + "upload_attachment": "첨부파일 업로드", + "download": "Download", + "connect_device": "장치에 연결", + "no_tickets": "티켓을 찾을 수 없습니다", + "no_comments": "아직 댓글이 없습니다", + "no_attachments": "첨부파일 없음", + "title_required": "제목은 ���수 항목입니다.", + "delete_confirm": "정말로 티켓 #{id}를 삭제하시겠습니까?", + "delete_success": "티켓이 삭제되었습니다.", + "created_success": "티켓이 성공적으로 생성되었습니다", + "updated_success": "티켓이 업데이트되었습니다.", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "티켓 검색...", + "assign_to_me": "나에게 할당", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "열기", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "활동 모니터링", + "subtitle": "애플리케이션 사용량 및 유휴 추적", + "device": "장치", + "hostname": "Hostname", + "sessions": "세션", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "주요 애플리케이션", + "app_name": "Application", + "window_title": "창 제목", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "세션 수", + "total_active": "총 활성", + "total_idle": "Total Idle", + "detail_count": "세부 기록", + "no_data": "사용 가능한 활동 데이터가 없습니다.", + "no_sessions": "세션 없음", + "filter_from": "에서", + "filter_to": "받는 사람", + "filter_apply": "필터 적용", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "기기 검색...", + "date_range": "Date Range", + "device_id": "장치 ID", + "session_start": "세션 시작", + "session_end": "세션 종료", + "user": "User", + "no_activity": "기록된 활동이 없습니다.", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "신청 없음" + }, + "automation": { + "title": "자동화 및 경고", + "subtitle": "경고 규칙, 원격 명령 및 SMTP 구성", + "rules": "Alert Rules", + "rules_subtitle": "알림을 트리거하는 조건 정의", + "alerts": "경고 기록", + "alerts_subtitle": "트리거된 경고 보기 및 확인", + "commands": "원격 명령", + "commands_subtitle": "원격 장치에 명령 보내기", + "smtp": "SMTP 구성", + "smtp_subtitle": "이메일 알림 설정", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "조건 유형", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "대상 장치", + "scope_all": "모든 장치", + "cooldown": "쿨다운(초)", + "notify_emails": "알림 이메일", + "enabled": "활성화됨", + "disabled": "장애인", + "create_rule": "규칙 생성", + "edit_rule": "규칙 편집", + "delete_rule": "규칙 삭제", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "트리거된 시간", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "보다 큼", + "op_gte": "크거나 같음", + "op_lt": "Less than", + "op_lte": "작거나 같음", + "op_eq": "같음", + "op_neq": "같지 않음", + "type_cpu_usage": "CPU 사용량(%)", + "type_memory_usage": "메모리 사용량(%)", + "type_disk_usage": "디스크 사용량(%)", + "type_offline_duration": "오프라인 기간(초)", + "type_idle_duration": "유휴 기간(초)", + "type_custom": "Custom", + "command_type": "명령 유형", + "command_payload": "명령/스크립트", + "command_result": "Result", + "command_status": "Status", + "send_command": "명령 보내기", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "실패", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "사용자 이름", + "smtp_pass": "비밀번호", + "smtp_from": "보낸 사람 주소", + "smtp_test": "연결 테스트", + "smtp_save": "설정 저장", + "smtp_test_success": "연결 성공", + "smtp_test_failed": "연결 실패", + "no_rules": "구성된 경고 규칙이 없습니다", + "no_alerts": "발생한 경고가 없습니다", + "no_commands": "전송된 명령이 없습니다", + "id_payload_required": "장치 ID 및 페이로드가 필요합니다", + "no_commands_sent": "아직 명령이 전송되지 않았습니다." + }, + "file_transfer": { + "title": "파일 전송", + "transfers": "Transfers", + "new_transfer": "새로운 전송", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "파일 크기", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "장치", + "initiated_by": "시작한 사람", + "created_at": "생성 날짜", + "cancel": "취소", + "cancel_confirm": "이 전송을 취소하시겠습니까?", + "download_file": "파일 다운로드", + "browse_files": "파일 찾아보기", + "select_file": "파일 선택", + "select_device": "장치 선택", + "no_transfers": "파일 전송 없음", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "실패", + "status_cancelled": "Cancelled", + "bytes_transferred": "전송된 바이트", + "chunks": "Chunks", + "transfer_started": "전송이 시작되었습니다.", + "transfer_completed": "전송 완료", + "transfer_failed": "전송 실패", + "transfer_cancelled": "이전이 취소되었습니다.", + "max_file_size": "최대 파일 크기: 4GB", + "error_too_large": "파일이 너무 큽니다.", + "error_no_device": "선택한 기기가 없습니다.", + "error_no_file": "선택한 파일이 없습니다." + }, + "network": { + "title": "네트워크 모니터링", + "targets": "���니터링 대상", + "add_target": "Add Target", + "edit_target": "대상 편집", + "delete_target": "대상 삭제", + "delete_confirm": "이 대상을 삭제하시겠습니까?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "시간 초과(밀리초)", + "interval": "간격(밀리초)", + "enabled": "활성화됨", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "기록 확인", + "stats": "Statistics", + "total_targets": "총 대상", + "targets_up": "Targets Up", + "targets_down": "타겟 다운", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "네트워크 도구", + "ping_tool": "Ping Test", + "tcp_tool": "TCP 포트 확인", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "모니터 시작", + "monitor_stop": "모니터 중지", + "monitor_running": "모니터가 실행 중입니다.", + "monitor_stopped": "모니터가 중지되었습니다.", + "no_targets": "모니터링 대상이 구성되지 않았습니다.", + "no_history": "확인 내역이 없습니다.", + "error_code": "Error", + "status_code": "HTTP 상태 코드", + "search_targets": "검색 대상...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "기록 확인", + "name_host_required": "이름과 호스트가 필요합니다", + "uptime": "Uptime", + "response_time": "응답 시간", + "avg_response": "평균 응답", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "응답 시간(ms)", + "uptime_percent": "Uptime %", + "last_24h": "지난 24시간", + "last_7d": "Last 7 days", + "last_30d": "지난 30일" + }, + "dataguard": { + "title": "데이터 보호", + "policies": "DLP 정책", + "add_policy": "정책 추가", + "edit_policy": "정책 편집", + "delete_policy": "정책 삭제", + "delete_confirm": "이 정책을 삭제하시겠습니까?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "활성화됨", + "disabled": "장애인", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB 장치", + "rule_type_file": "파일 작업", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "공급업체 ID(VID)", + "pid": "제품 ID(PID)", + "serial": "일련번호", + "device_class": "장치 클래스", + "drive_type": "Drive Type", + "file_extensions": "파일 확장자", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "파일", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "구성된 DLP 정책이 없습니다.", + "no_events": "기록된 DLP 이벤트가 없습니다.", + "stats": "Statistics", + "total_events": "총 이벤트", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "파일 이벤트", + "device_id": "장치 ID", + "policy_matched": "정책 일치", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "총 정책", + "active_policies": "활성 정책", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "정책", + "tab_events": "Events", + "search_policies": "검색 정책...", + "create_policy": "정책 생성", + "policy_type": "정책 유형", + "scope": "Scope", + "events_count": "Events", + "search_events": "이벤트 검색...", + "event_time": "Event Time", + "device": "장치", + "policy": "정책", + "detail": "Detail", + "scope_help": "쉼표로 구분된 장치 ID 또는 모두 비워 두세요.", + "scope_all": "모든 장치", + "active": "Active", + "type_file_type": "파일 유형", + "type_clipboard": "클립보드", + "type_screen_share": "화면 공유", + "type_file_transfer": "파일 전송", + "policy_desc": "정책 설명", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "보고서 생성", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "장치 요약", + "type_activity": "활동 요약", + "type_security": "보안 보고서", + "type_tickets": "티켓 리포트", + "type_network": "네트워크 보고서", + "type_inventory": "재고 보고서", + "type_alerts": "경고 보고서", + "saved": "저장된 보고서", + "save_report": "보고서 저장", + "delete_report": "보고서 삭제", + "delete_confirm": "저장된 보고서를 삭제하시겠습니까?", + "no_saved": "저장된 보고서 없음", + "report_title": "Title", + "created_by": "작성자", + "created_at": "생성 날짜", + "filters": "Filters", + "date_from": "에서", + "date_to": "받는 사람", + "device_filter": "장치 ID", + "generated_at": "생성 날짜", + "section": "데이터 섹션", + "total_devices": "총 장치", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "플랫폼 배포", + "top_applications": "주요 애플리케이션", + "total_active": "총 활동 시간", + "total_idle": "총 유휴 시간", + "dlp_stats": "DLP 통계", + "banned_devices": "금지된 장치", + "audit_logs": "Audit Logs", + "ticket_stats": "티켓 통계", + "category_distribution": "카테고리 분포", + "priority_distribution": "우선배포", + "targets_status": "대상현황", + "os_distribution": "OS 배포", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "최근 알림", + "tab_generate": "보고서 생성", + "tab_saved": "저장된 보고서", + "type_devices_desc": "모든 장치, 플랫폼 및 상태 개요", + "type_activity_desc": "애플리케이션 사용량 및 유휴 시간 요약", + "type_security_desc": "금지 작업, DLP 이벤트 및 감사 로그", + "type_tickets_desc": "티켓 통계 및 SLA 성과", + "type_network_desc": "네트워크 모니터링 대상 및 가동 시간 데이터", + "type_inventory_desc": "하드웨어 및 소프트웨어 인벤토리 요약", + "type_alerts_desc": "경고 규칙 및 트리거된 경고 기록", + "report_name": "Report Name", + "format": "Format", + "save": "보고서 저장", + "preview": "Preview", + "download": "Download", + "delete_saved": "보고서 삭제", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "테넌트 편집", + "delete_tenant": "테넌트 삭제", + "delete_confirm": "이 테넌트를 삭제하시겠습니까? 모든 장치 및 사용자 할당이 제거됩니다.", + "name": "Name", + "slug": "Slug", + "contact_name": "담당자 이름", + "contact_email": "연락처 이메일", + "max_devices": "최대 장치", + "max_devices_hint": "0 = 무제한", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "장치", + "users": "Users", + "assign_device": "장치 할당", + "assign_devices": "장치 할당", + "remove_device": "장치 제거", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "구성된 테넌트가 없습니다.", + "no_devices": "이 테넌트에 할당된 장치가 없습니다.", + "no_users": "이 테넌트에 할당된 사용자가 없습니다.", + "stats": "임차인 통계", + "total_devices": "총 장치", + "online_devices": "온라인 장치", + "total_users": "Total Users", + "created_at": "생성 날짜", + "updated_at": "업데이트 날짜", + "slug_exists": "테넌트 슬러그가 이미 존재합니다.", + "total_tenants": "총 임차인", + "active_tenants": "활성 테넌트", + "search": "임차인 검색...", + "create_tenant": "테넌트 생성", + "detail": "임차인 세부정보", + "contact": "Contact", + "enabled": "활성화됨", + "disabled": "장애인", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "장치 ID, 호스트 이름 또는 IP로 검색...", + "no_registrations": "No registration requests", + "col_device_id": "장치 ID", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "이 기기를 승인하시겠습니까? 서버 자격 증명을 수신하고 자동으로 연결할 수 있습니다.", + "approved_success": "장치 등록이 승인되었습니다.", + "reject_btn": "Reject", + "reject_title": "등록 거부", + "reject_confirm": "이 등록 요청을 거부하시겠습니까?", + "reject_reason": "이유(선택사항)", + "reject_reason_placeholder": "거부 이유를 입력하세요...", + "rejected_success": "기기 등록이 거부됨", + "delete_confirm": "이 등록 기록을 삭제하시겠습니까?", + "deleted_success": "등록 기록이 삭제되었습니다.", + "enrollment_title": "장치 등록", + "enrollment_subtitle": "BetterDesk 데스크톱 클라이언트에서 보류 중인 등록 요청", + "enrollment_empty": "대기 중인 등록 요청이 없습니다.", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "표시 이름", + "enrollment_display_name_placeholder": "이 장치의 이름을 입력하세요...", + "enrollment_sync_mode": "동기화 모드", + "enrollment_sync_silent": "무음 — 최소한의 원격 측정", + "enrollment_sync_standard": "표준 - 균형 잡힌 동기화", + "enrollment_sync_turbo": "터보 — 공격적인 동기화", + "enrollment_approved_success": "기기 등록이 승인됨", + "enrollment_rejected_success": "장치 등록이 거부됨", + "approve_title": "기기 승인", + "field_name": "기기 이름", + "field_name_placeholder": "이 기기의 이름을 입력하세요...", + "field_sync_mode": "동기화 모드", + "sync_standard": "표준 — 균형 잡힌 동기화", + "sync_silent": "자동 — 최소 텔레메트리", + "sync_turbo": "터보 — 적극적인 동기화", + "field_tags": "태그", + "field_tags_placeholder": "쉼표로 구분된 태그(예: 사무실, 노트북)...", + "field_tags_existing": "기존 태그", + "field_tag_add_placeholder": "새 태그 추가...", + "field_tag_add_btn": "추가", + "field_groups": "기기 그룹", + "field_folder": "폴더", + "field_folder_none": "폴더 없음", + "reject_ban_option": "이 기기 차단", + "reject_ban_hint": "기기가 차단되어 새 등록 요청을 보낼 수 없게 됩니다.", + "banner_open_mode": "등록이 열려 있습니다 — 새 RustDesk 클라이언트는 운영자 승인 없이 등록됩니다. 이 대기열을 사용하려면 설정에서 관리 모드를 설정하세요.", + "banner_locked_mode": "등록이 잠겨 있습니다 — 토큰에 바인딩된 기기만 등록할 수 있습니다. 알 수 없는 클라이언트의 운영자 승인에는 관리 모드가 필요합니다.", + "enrollment_settings_link": "등록 설정" + }, + "backup": { + "title": "Backup", + "desc": "콘솔 구성, 사용자, 그룹 및 설정의 전체 백업을 다운로드하세요. Go server 피어 데이터는 BetterDesk 백엔드가 활성화되면 포함됩니다.", + "restore_title": "Restore", + "restore_desc": "콘솔 구성을 복원하려면 이전에 다운로드한 백업 파일을 업로드하세요. 아래에서 복원할 섹션을 선택하세요.", + "stat_users": "Users", + "stat_settings": "설정", + "stat_folders": "Folders", + "stat_groups": "그룹", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "백업 다운로드", + "creating": "백업 생성 중...", + "download_success": "백업이 성공적으로 다운로드되었습니다.", + "upload": "백업 업로드", + "restore_confirm": "이 백업에서 복원하시겠습니까? 선택한 섹션을 덮어씁니다.", + "restore_success": "백업이 성공적으로 복원되었습니다. 일부 변경 사항은 페이지를 다시 로드해야 할 수도 있습니다.", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "콘솔 설정", + "opt_branding": "브랜딩/테마", + "opt_folders": "장치 폴더", + "opt_groups": "사용자 및 장치 그룹", + "opt_addressbooks": "주소록", + "opt_users": "사용자 계정", + "opt_users_warning": "파괴적: 모든 사용자 계정을 백업 데이터로 대체합니다. 로그아웃되었을 수 있습니다.", + "no_file": "선택한 백업 파일이 없습니다.", + "invalid_json": "잘못된 백업 파일: JSON가 유효하지 않습니다.", + "invalid_format": "잘못된 백업 파일: BetterDesk 백업이 아닙니다.", + "stat_database": "데이터베이스 엔진", + "stat_keys": "서버 키 포함", + "stat_env": "환경 파일", + "stat_uploads": "브랜딩 파일", + "restart_required": "일부 복원된 구성 요소(키 / .env / Go 데이터베이스)는 적용되려면 서비스 재시작이 필요합니다.", + "security_warning": "이 백업에는 비밀 정보(서버 키, 환경 파일, 비밀번호 해시 및 2FA 시크릿)가 포함되어 있습니다. 안전하게 보관하고 공유하지 마세요.", + "restore_warning": "시크릿, 환경 파일 또는 Go 서버 데이터베이스를 복원하면 서버 ID를 덮어쓰고 이후 서비스 재시작이 필요합니다.", + "opt_database": "데이터베이스(모든 테이블)", + "opt_database_hint": "모든 콘솔 데이터를 다시 가져옵니다. 라이브 적용되며 재시작이 필요하지 않습니다.", + "opt_uploads": "브랜딩 파일", + "opt_uploads_hint": "로고 및 업로드된 이미지.", + "opt_secrets": "서버 키 및 시크릿", + "opt_secrets_warning": "Ed25519 서버 ID, API 키 및 세션 시크릿을 덮어씁니다. 서비스 재시작이 필요합니다.", + "opt_env": "환경 파일(.env)", + "opt_env_warning": "SESSION_SECRET, API 키, 데이터베이스 DSN, 포트 및 TLS 설정을 덮어씁니다. 서비스 재시작이 필요합니다.", + "opt_godb": "Go 서버 데이터베이스", + "opt_godb_warning": "Go 서버 SQLite 데이터베이스를 덮어씁니다(SQLite 백엔드 전용). 서비스 재시작이 필요합니다." + }, + "cdap": { + "device_detail": "CDAP 장치", + "loading": "로드 중...", + "loading_widgets": "기기 위젯 로드 중...", + "load_error": "기기 데이터를 로드하지 못했습니다.", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "기기가 현재 오프라인 상태입니다. 위젯 값이 오래되었을 수 있습니다.", + "no_widgets": "사용 가능한 위젯이 없습니다.", + "no_widgets_desc": "이 장치는 위젯 정의와 함께 CDAP 매니페��트를 등록하지 않았습니다.", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "명령 확인", + "select_option": "선택", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "명령 보내기", + "command_sent": "명령이 성공적으로 전송되었습니다.", + "command_failed": "명령을 보내지 못했습니다.", + "devices_title": "CDAP 장치", + "devices_subtitle": "맞춤형 장치 애플리케이션 프로토콜을 통해 연결된 장치", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "기기 검색...", + "no_devices": "연결된 기기 없음", + "no_devices_desc": "현재 연결된 CDAP 장치가 없습니다. 장치가 게이트웨이에 연결되면 여기에 표시됩니다.", + "gateway_disabled": "CDAP 게이트웨이 비활성화됨", + "gateway_disabled_desc": "서버 구성에서 CDAP_ENABLED=true를 설정하여 CDAP 게이트웨이를 활성화하십시오.", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "CDAP 비활성화", + "enabled_restart": "CDAP가 활성화되었습니다. 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.", + "disabled_restart": "CDAP가 비활성화되었습니다. 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.", + "widgets": "위젯", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "활성 경고", + "alert_fired": "Alert fired", + "alert_cleared": "경고가 지워졌습니다.", + "no_alerts": "활성 알림 없음", + "connect_terminal": "터미널 연결", + "table_search": "검색...", + "just_now": "Just now", + "terminal_connecting": "기기에 연결 중...", + "terminal_disconnected": "Disconnected", + "terminal_error": "터미널 연결 실패", + "linked_devices": "연결된 장치", + "link_device": "링크 장치", + "unlink_device": "Unlink", + "no_linked_devices": "연결된 기기 없음", + "unlink_confirm": "이 기기를 연결 해제하시겠습니까?", + "link_prompt": "이 장치에 연결하려면 피어 ID를 입력하세요.", + "connect_desktop": "데스크톱 연결", + "connect_video": "스트림 연결", + "connect_files": "파일 찾아보기", + "connect_audio": "오디오 연결", + "upload_file": "Upload", + "desktop_connecting": "연결 중...", + "video_connecting": "연결 중...", + "files_connecting": "연결 중...", + "audio_connecting": "연결 중...", + "audio_streaming": "Streaming", + "clipboard_in": "클립보드 수신됨", + "clipboard_out": "클립보드가 전송되었습니다.", + "monitor_select": "모니터 선택", + "keyframe_request": "키프레임 요청", + "quality_auto": "자동 품질" + }, + "desktop": { + "switch_mode": "데스크탑 모드", + "console_mode": "콘솔 모드", + "loading": "로드 중...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "닫기", + "widgets_mode": "위젯", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "위젯 추가", + "remove_widget": "위젯 제거", + "configure": "구성", + "search_widgets": "위젯 검색...", + "cat_monitoring": "Monitoring", + "cat_devices": "장치", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "여기에 메모를 작성하세요...", + "search_placeholder": "장치, 페이지, 설정 검색...", + "search_pages": "Pages", + "search_devices": "장치", + "search_no_results": "No results", + "exit_desktop": "Exit Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "장치 상태", + "widget_server_health": "서버 정보", + "widget_system_stats": "장치 게이지", + "widget_device_list": "장치 목록", + "widget_quick_actions": "빠른 작업", + "widget_recent_activity": "최근 활동", + "widget_notes": "Notes", + "widget_network_monitor": "네트워크 모니터", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP 장치", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "장치 그리드", + "widget_multi_gauge": "서버 게이지", + "widget_weekly_chart": "주간 활동", + "widget_quick_controls": "빠른 제어", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "연결 통계", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "사용자 세션", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "기기 없음", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "열기", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "구성에서 URL를 설정하세요.", + "label_server_uptime": "서버 가동 시간", + "label_merged_info": "서버 정보 위젯에 병합됨", + "label_with_notes": "메모 포함", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "총 장치", + "label_throughput": "Throughput", + "label_active_relays": "활성 릴레이", + "label_total_relayed": "총 중계", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "장치 필터링...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "CDAP 장치 없음", + "action_add_widget": "위젯 추가", + "label_merged_server_info": "서버 정보 위젯에 병합됨", + "wp_images": "Images", + "wp_colors": "단색", + "wp_custom_color": "맞춤 색상", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "widget_calendar": "Calendar", + "widget_process_monitor": "프로세스 모니터", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "데이터베이스 통계", + "widget_docker_containers": "Docker 컨테이너", + "widget_shell_command": "쉘 명령", + "widget_device_map": "장치 지도", + "widget_remote_connect": "원격 연결", + "label_no_online": "온라인 기기 없음", + "label_no_events": "오늘은 이벤트가 없습니다", + "label_event_title": "이벤트 제목:", + "label_no_data": "데이터가 없습니다", + "label_download_speed": "다운로드 속도", + "label_latency": "Latency", + "label_server": "서버", + "label_run_test": "Run Test", + "label_testing": "테스트 중...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "컨테이너 없음", + "label_docker_unavailable": "Docker를 사용할 수 없음", + "label_no_command": "구성된 명령이 없습니다.", + "label_no_output": "아직 출력이 없습니다", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "사전 설정 저장", + "label_load_preset": "Load Preset", + "label_preset_name": "사전 설정 이름:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "자동 정렬", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2열(같음)", + "label_2col_wide": "2열(60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "위젯 그룹", + "ungroup_widgets": "위젯 그룹 해제", + "group_widgets": "선택한 위젯 그룹화", + "snap_layouts": "스냅 레이아웃", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "���쪽 위에서 스냅", + "snap_top_right": "오른쪽 상단 스냅", + "snap_bottom_left": "왼쪽 아래 스냅", + "snap_bottom_right": "오른쪽 하단 스냅", + "aero_shake": "흔들어서 다른 사람을 최소화하세요", + "zone_resize": "영역 크기를 조정하려면 테두리를 드래그하세요.", + "zone_borders": "드래그 가능한 영역 경계", + "app_drawer": "Applications", + "search_apps": "앱 검색...", + "edit_shortcuts": "바로 가기 편집", + "widgets": "위젯", + "theme": "Theme", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "wp_unavailable": "이 서버에는 배경화면 이미지가 설치되어 있지 않습니다.", + "wp_download_hint": "배경화면 선택을 활성화하려면 public/wallpapers/ 디렉토리에 PNG 이미지를 배치하세요.", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "로그인하려면 아무 곳이나 클릭하거나 키를 누르세요.", + "username_placeholder": "사용자 이름", + "password_placeholder": "비밀번호", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "2단계 인증", + "totp_subtitle": "인증 앱의 6자리 코드를 입력하세요.", + "back_to_login": "로그인으로 돌아가기", + "fill_all_fields": "모든 필드를 작성해 주세요.", + "invalid_credentials": "잘못된 사용자 이름 또는 비밀번호", + "invalid_code": "잘못된 인증 코드", + "enter_6_digits": "6자리를 모두 입력하세요.", + "network_error": "네트워크 오류 - 연결을 확인하세요", + "session_expired": "세션이 만료되었습니다. 다시 로그인해 주세요." + }, + "tokens": { + "title": "장치 토큰", + "subtitle": "자동화된 장치 프로비저닝을 위한 등록 토큰 관리", + "enrollment_mode": "등록 모드", + "mode_open": "열기", + "mode_open_desc": "토큰 없이 모든 장치를 등록할 수 있습니다.", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "총 토큰", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "토큰 검색...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "대량 생성", + "create": "토큰 생성", + "edit": "토큰 편집", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "생성됨", + "actions": "Actions", + "name_placeholder": "예를 들어 사무실 PC 배치", + "max_uses": "Max Uses", + "max_uses_hint": "0 = 무제한", + "expires_in": "Expires In", + "no_expiration": "만료 없음", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "이 토큰에 대한 선택적 참고 사항...", + "count": "Count", + "count_range": "생성할 토큰 수(1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "토큰 생성됨", + "tokens_generated": "생성된 토큰", + "copy_warning": "지금 토큰을 복사하세요. 다시 표시되지 않습니다.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "이 토큰을 취소하시겠습니까? 이미 등록된 장치는 영향을 받지 않습니다.", + "revoked_success": "토큰이 취소되었습니다.", + "no_tokens": "토큰을 찾을 수 없습니다.", + "expired": "Expired", + "never": "Never", + "save": "저장", + "cancel": "취소", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "다음", + "prev": "Previous", + "skip": "Skip", + "finish": "마침", + "close": "닫기", + "step_of": "{total}의 {current}", + "console_sidebar_title": "탐색 사이드바", + "console_sidebar_text": "여기에서 모든 모듈에 액세스하세요. 해당 섹션으로 이동하려면 아이콘을 클릭하세요. 사이드바는 화면 크기에 맞게 조정됩니다.", + "console_expand_title": "사이드바 확장", + "console_expand_text": "사이드바를 확장하고 모든 탐색 항목에 대한 전체 레이블을 보려면 여기를 클릭하십시오. 접으려면 다시 클릭하세요.", + "console_search_title": "빠른 검색", + "console_search_text": "장치, 설정, 작업을 빠르게 검색하세요. 키보드 단축키는 Ctrl+K를 누르세요.", + "console_dashboard_title": "대시보드", + "console_dashboard_text": "서버 상태, 온라인 장치 및 빠른 작업을 표시하는 중앙 허브입니다. 중요한 지표를 한눈에 확인하세요.", + "console_devices_title": "장치 관리", + "console_devices_text": "연결된 모든 장치를 보고, 검색하고, 관리합니다. 상태별로 필터링하고, 태그를 할당하고, 개별 장치 설정을 구성합니다.", + "console_settings_title": "설정", + "console_settings_text": "서버 동작, 보안 옵션, 브랜딩 및 사용자 관리를 구성합니다. 필요에 맞게 BetterDesk를 사용자 정의하세요.", + "console_desktop_title": "데스크탑 모드", + "console_desktop_text": "위젯이 있는 창 작업 공간의 경우 데스크탑 모드로 전환하세요. 멀티태스킹 및 모니터링 대시보드에 적합합니다.", + "console_complete_title": "준비가 되었습니다!", + "console_complete_text": "사이드바 카테고리를 탐색하여 모든 기능을 찾아보세요. 이 가이드를 다시 시작하려면 언제든지 도움말 아이콘을 클릭하세요.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "상단 표시줄에는 시계, 빠른 컨트롤, 앱 서랍에 대한 액세스가 표시됩니��. 모든 앱을 탐색하려면 그리드 아이콘을 클릭하세요.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "앱 서랍을 열어 콘솔 기능을 플로팅 창으로 검색하고 실행하세요. 앱은 카테고리별로 정리되어 있습니다.", + "desktop_widgets_title": "위젯 대시보드", + "desktop_widgets_text": "맞춤형 작업 공간. 위젯은 실시간 정보를 표시하고 기능에 대한 빠른 액세스를 제공합니다. 드래그하여 재정렬하세요.", + "desktop_add_widget_title": "위젯 추가", + "desktop_add_widget_text": "사용 가능한 위젯을 찾아보려면 여기를 클릭하세요. 모니터링 디스플레이, 장치 목록, 메모 등 중에서 선택하세요.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "스냅 레이아웃", + "desktop_snap_text": "창을 화면 가장자리로 드래그하여 위치에 맞추거나 레이아웃 사전 설정을 위해 최대화 버튼을 마우스로 가리킵니다. 에어로 쉐이크를 사용해 보세요!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "앱은 드래그 가능하고 크기 조절이 가능한 창에서 열립니다. 제목 표시줄을 최소화, 최대화하거나 닫습니다. 위젯 위의 Windows 레이어.", + "desktop_search_title": "빠른 검색", + "desktop_search_text": "기기, 페이지, 설정 전반에서 검색하세요. 어디에서나 Ctrl+K를 누르면 즉시 검색이 열립니다.", + "desktop_complete_title": "데스크탑 모드가 준비되었습니다!", + "desktop_complete_text": "서랍에서 앱을 열고 창을 나란히 배열해 보세요. 빠른 대시보드 레이아웃을 위해 위젯 사전 설정을 사용하세요.", + "devices_folders_title": "장치 폴더", + "devices_folders_text": "장치를 폴더로 구성합니다. 목록을 필터링하려면 폴더를 클릭하세요. 이름을 바꾸거나 삭제하려면 마우스 오른쪽 버튼을 클릭하세요.", + "devices_search_title": "검색 및 필터", + "devices_search_text": "ID, 호스트 이름, 플랫폼으로 검색하세요. 온라인, 오프라인 또는 모든 장치만 표시하려면 상태 알약을 사용하세요.", + "devices_table_title": "장치 목록", + "devices_table_text": "자세한 내용을 보려면 장치 행을 클릭하세요. 연결, 태그 편집, 삭제 등의 빠른 작업을 수행하려면 오른쪽에 있는 케밥 메뉴를 사용하세요.", + "devices_complete_title": "장치 관리 준비 완료!", + "devices_complete_text": "폴더 간에 장치를 드래그하여 정리하세요. 장치를 두 번 클릭하여 세부 정보 패널을 엽니다.", + "settings_tabs_title": "설정 카테고리", + "settings_tabs_text": "일반, 보안, 모양 및 기타 구성 섹션 사이를 이동합니다.", + "settings_content_title": "구성", + "settings_content_text": "각 섹션에는 특정 서버 및 콘솔 설정이 포함되어 있습니다. 저장을 클릭하면 변경 사항이 저장됩니다.", + "settings_complete_title": "설정 개요", + "settings_complete_text": "2FA, API 키 및 사용자 관리에 대한 보안 설정을 확인하세요. 콘솔 모양을 사용자 정의하려면 모양을 방문하세요.", + "help": "도움말 및 튜토리얼", + "tour_console": "콘솔 투어", + "tour_desktop": "데스크탑 모드 둘러보기", + "tour_devices": "장치 둘러보기", + "tour_settings": "설정 둘러보기", + "reset_all": "모든 튜토리얼 재설정", + "tour_remote": "원격 세션 둘러보기", + "tour_organization": "조직 설정", + "tour_cdap": "CDAP 개요", + "tour_chat": "채팅 기본 사항", + "remote_toolbar_title": "원격 도구 모음", + "remote_toolbar_text": "도구 모음에서 디스플레이 제어, 클립보드 동기화, 특수 키 및 품질 설정에 액세스하세요. F11로 전체 화면을 전환합니다.", + "remote_canvas_title": "원격 디스플레이", + "remote_canvas_text": "원격화면 입니다. 내부를 클릭하면 원격 장치 제어가 시작됩니다. 마우스 및 키보드 입력이 자동으로 전달됩니다.", + "remote_clipboard_title": "클립보드 동기화", + "remote_clipboard_text": "컴퓨터와 원격 장치 간에 텍스트를 복사하여 붙여넣습니다. 원격 디스플레이에 초점을 맞춘 동안 평소처럼 Ctrl+C / Ctrl+V를 사용하세요.", + "remote_complete_title": "원격 세션 준비 완료!", + "remote_complete_text": "특수 키(Ctrl+Alt+Del, PrintScreen) 및 모니터 전환에는 도구 모음 버튼을 사용하세요. Esc 키를 누르거나 연결 끊기를 클릭하여 세션을 종료합니다.", + "org_overview_title": "조직", + "org_overview_text": "조직을 사용하면 사용자, 장치, 정책을 그룹화할 수 있습니다. 각 조직에는 자체 관리자, 운영자 및 설정이 있습니다.", + "org_create_title": "조직 만들기", + "org_create_text": "새 조직을 만들려면 여기를 클릭하세요. 이름, 슬러그 및 선택적 설명을 제공하십시오. 귀하는 새 조직의 소유자가 됩니다.", + "org_members_title": "회원 관리", + "org_members_text": "이메일로 사��자를 초대하고, 역할(관리자, 운영자, 사용자)을 할당하고, 액세스를 관리하세요. 구성원은 자신의 조직에 할당된 장치를 볼 수 있습니다.", + "org_devices_title": "장치 할당", + "org_devices_text": "조직에 장치를 추가합니다. 여기에 할당된 장치는 조직의 정책을 상속하며 해당 구성원에게 표시됩니다.", + "org_policies_title": "조직 정책", + "org_policies_text": "비밀번호 요구 사항, 세션 시간 초과, 2FA 시행, 조직의 장치 등록 규칙과 같은 보안 정책을 설정합니다.", + "org_complete_title": "조직 설정이 완료되었습니다!", + "org_complete_text": "팀을 초대하고 장치를 할당하여 조직 범위 관리를 시작하세요. 정책은 모든 회원에게 자동으로 적용됩니다.", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "연락처 및 그룹", + "chat_contacts_text": "연락처와 채팅 그룹을 확인하세요. 대화를 열려면 연락처를 클릭하세요. 녹색 점은 온라인 사용자를 나타냅니다.", + "chat_send_title": "메시지 보내기", + "chat_send_text": "메시지를 입력하고 Enter를 눌러 보내세요. 양측 모두 E2E를 지원하는 경우 메시지는 종단 간 암호화됩니다.", + "chat_file_title": "파일 공유", + "chat_file_text": "파일을 공유하려면 첨부 아이콘을 클릭하세요. 파일은 암호화되며 최대 50MB까지 가능합니다.", + "chat_complete_title": "채팅 준비 완료!", + "chat_complete_text": "운영자 및 최종 사용자와 실시간으로 채팅하세요. 팀 커뮤니케이션을 위해 그룹을 만듭니다. 모든 메시지는 읽음 확인을 지원합니다.", + "disable_tutorials": "튜토리얼 비활성화", + "enable_tutorials": "튜토리얼 활성화" + }, + "help_request": { + "title": "도움 요청", + "subtitle": "데스크톱 클라이언트로부터 들어오는 도움말 요청 관리", + "new_request": "새로운 도움 요청", + "device": "장치", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "도움 요청 없음", + "notification": "다음에서 받은 도움 요청", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "조직", + "create": "조직 만들기", + "edit": "조직 편집", + "detail": "조직 세부정보", + "name": "Name", + "slug": "슬러그(URL-안전)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "장치", + "invitations": "Invitations", + "settings": "설정", + "add_user": "Add User", + "assign_device": "장치 할당", + "create_invitation": "초대장 만들기", + "delete_confirm": "이 조직을 삭제하시겠습니까? 연결된 모든 사용자, 장치, 설정이 제거됩니다.", + "no_orgs": "아직 조직이 없습니다.", + "no_orgs_hint": "장치 및 사용자 관리를 시작하려면 첫 번째 조직을 만드세요.", + "connection_policy": "연결 정책", + "allow_file_transfer": "파일 전송 허용", + "allow_clipboard": "클립���드 허용", + "max_session_duration": "최대 세션 기간(분)", + "role_owner": "Owner", + "role_admin": "관리자", + "role_operator": "Operator", + "role_user": "구성원", + "username": "사용자 이름", + "password": "비밀번호", + "display_name": "표시 이름", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "장치 ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "할당된 사용자", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "이 조직에는 사용자가 없습니다.", + "no_devices": "이 조직에 할당된 기기가 없습니다.", + "no_invitations": "초대장이 없습니다.", + "user_added": "User added", + "user_removed": "사용자가 삭제되었습니다.", + "user_updated": "사용자 역할이 업데이트되었습니다.", + "device_assigned": "할당된 장치", + "device_unassigned": "할당되지 않은 기기", + "invitation_created": "초대장이 생성되었습니다.", + "settings_saved": "설정이 저장되었습니다.", + "org_deleted": "조직이 삭제되었습니다.", + "confirm_remove_user": "이 사용자를 조직에서 삭제하시겠습니까?", + "confirm_unassign_device": "조직에서 이 기기를 할당 해제하시겠습니까?", + "confirm_delete_org": "이 조직 및 모든 관련 데이터를 삭제하시겠습니까?", + "edit_role": "역할 편집", + "raw_settings": "원시 설정", + "key": "Key", + "value": "Value", + "save": "설정 저장", + "policy_unattended": "무인(즉시)", + "policy_attended": "참석함(확인 후)", + "policy_ask": "Always ask", + "expires_hours": "만료(시간)", + "loading_failed": "조직 데이터를 로드하지 못했습니다.", + "name_slug_required": "이름과 슬러그가 필요합니다", + "org_created": "조직이 생성되었습니다.", + "org_updated": "조직이 업데이트되었습니다.", + "create_new_user": "새로 만들기", + "add_existing_user": "기존 추가", + "none_available": "none", + "select_user": "사용자 선택", + "org_role": "조직 역할", + "link_user_hint": "선택된 사용자는 서버 계정 자격 증명을 사용하여 이 조직에 연결됩니다.", + "no_available_users": "모든 서버 사용자는 이미 이 조직에 연결되어 있습니다.", + "user_linked": "조직에 연결된 사용자" + }, + "chat": { + "e2e_enabled": "종단 간 암호화", + "e2e_establishing": "보안 채널 설정 중...", + "e2e_established": "보안 채널이 설정되었습니다", + "e2e_unsupported": "이 브라우저에서는 E2E 암호화가 지원되지 않습니다", + "typing_indicator": "입력 중...", + "read_receipt": "읽음", + "delivered": "전달됨", + "file_share": "파일", + "file_too_large": "파일이 너무 큽니다 (최대 50MB)", + "file_encrypted": "암호화된 파일 전송", + "presence_online": "온라인", + "presence_away": "자리 비움", + "presence_busy": "바쁨", + "presence_offline": "오프라인", + "key_rotation": "보안 키가 갱신되었습니다", + "new_message": "새 메시지", + "title": "채팅", + "contacts": "연락처", + "groups": "그룹", + "no_contacts": "아직 연락처가 없습니다", + "no_groups": "아직 그룹이 없습니다", + "no_messages": "아직 메시지가 없습니다", + "no_results": "결과를 찾을 수 없습니다", + "select_conversation": "대화를 선택하여 채팅을 시작하세요", + "type_message": "메시지를 입력하세요...", + "send": "보내기", + "attach_file": "파일 첨부", + "emoji": "이모지", + "search_messages": "메시지 검색", + "create_group": "그룹 만들기", + "group_name": "그룹 이름", + "group_members": "멤버", + "cancel": "취소", + "create": "만들기", + "members": "멤버", + "today": "오늘", + "yesterday": "어제", + "react": "반응", + "my_presence": "내 상태", + "search_placeholder": "연락처 및 메시지 검색", + "select_conversation_hint": "메시지를 보려면 대화를 선택하세요", + "info": "정보", + "group_name_placeholder": "그룹 이름을 입력하세요" + }, + "toast": { + "device_connected": "장치가 연결됨", + "device_disconnected": "장치 연결이 끊어졌습니다.", + "session_started": "원격 세션이 시작되었습니다.", + "session_ended": "원격 세션이 종료되었습니다", + "file_upload_complete": "파일 업로드 완료", + "settings_saved": "설정이 저장되었습니다.", + "error_generic": "오류가 발생했습니다", + "connection_lost": "연결 끊김", + "reconnecting": "다시 연결하는 중..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "관리 유틸리티 및 진단 도구", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "보내기", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "텍스트를 입력하세요...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "서버 이동", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "호스트 연결 가능성 및 대기 시간 확인", + "tcp_title": "TCP 포트 확인", + "tcp_desc": "TCP 포트 연결 테스트", + "ssl_title": "SSL 검사기", + "ssl_desc": "SSL/TLS 인증서 세부정보 검사", + "http_title": "HTTP 상태 점검", + "http_desc": "HTTP 엔드포인트 상태 확인", + "dns_title": "DNS Lookup", + "dns_desc": "호스트 이름을 IP 주소로 확인", + "whois_title": "DNS Records", + "whois_desc": "A, AAAA, MX, TXT, NS 레코드 쿼리", + "speed_title": "Speed Test", + "speed_desc": "다운��드 대역폭 측정", + "run_speed_test": "속도 테스트 실행", + "wol_title": "Wake-on-LAN", + "wol_desc": "장치를 깨우기 위해 매직 패킷 보내기", + "wol_sent": "매직 패킷이 전송되었습니다.", + "hash_title": "해시 생성기", + "hash_desc": "암호화 해시 생성", + "password_title": "비밀번호 생성기", + "password_desc": "안전한 무작위 비밀번호 생성", + "jwt_title": "JWT Decoder", + "jwt_desc": "JSON 웹 토큰 디코딩 및 검사", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 데이터 인코딩 또는 디코딩", + "url_title": "URL Encoder", + "url_desc": "URL 구성요소 인코딩 또는 디코딩", + "processes_title": "프로세스 목록", + "processes_desc": "실행 중인 시스템 프로세스 보기", + "disk_title": "Disk Usage", + "disk_desc": "디스크 파티션 사용량 보기", + "db_title": "데이터베이스 통계", + "db_desc": "데이터베이스 테이블 통계 보기", + "docker_title": "Docker 컨테이너", + "docker_desc": "실행 중인 Docker 컨테이너 보기", + "logs_title": "Log Viewer", + "logs_desc": "최근 로그 출력 보기", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "유효기간: 부터", + "valid_to": "유효한 대상", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "데이터가 없습니다", + "no_docker": "Docker 컨테이너가 없거나 Docker를 사용할 수 없습니다.", + "no_logs": "사용 가능한 로그 줄이 없습니다." + }, + "policies": { + "title": "조직 정책", + "subtitle": "조직의 보안, 연결 및 기능 정책 관리", + "select_org": "조직", + "select_org_placeholder": "조직 선택...", + "select_org_first": "정책 감사 로그를 보려면 조직을 선택하세요.", + "configured": "구성됨", + "connection_title": "연결 정책", + "connection_desc": "원격 세션 설정 방법 제어", + "connection_mode": "연결 모드", + "mode_attended": "유인 (사용자 승인 필요)", + "mode_unattended": "무인 (항상 허용)", + "mode_ask": "항상 물어보기", + "max_session": "최대 세션 시간 (분)", + "idle_lock": "유휴 잠금 (분)", + "wallpaper_policy": "세션 중 배경화면", + "wallpaper_show": "표시", + "wallpaper_hide_session": "세션 중 숨기기", + "wallpaper_hide_always": "항상 숨기기", + "features_title": "기능 정책", + "features_desc": "장치의 특정 기능 활성화 또는 비활성화", + "allow_file_transfer": "파일 전송 허용", + "allow_clipboard": "클립보드 동기화 허용", + "allow_audio": "오디오 스트리밍 허용", + "allow_recording": "세션 녹화 허용", + "security_title": "보안 정책", + "security_desc": "조직 장치에 보안 요구사항 적용", + "require_2fa": "무인 액세스에 2FA 필요", + "password_min_length": "최소 비밀번호 길이", + "password_require_special": "특수문자 필요", + "password_max_age": "비밀번호 최대 수명 (일, 0=제한없음)", + "allowed_operators": "허용된 운영자 역할 (쉼표 구분)", + "network_title": "네트워크 정책", + "network_desc": "릴레이 서버 및 직접 연결 제어", + "block_direct_p2p": "직접 P2P 차단 (릴레이 강제)", + "allowed_relays": "허용된 릴레이 서버 (행당 1개)", + "ip_allowlist": "IP 화이트리스트 (CIDR, 행당 1개)", + "update_title": "업데이트 정책", + "update_desc": "자동 업데이트 및 업데이트 채널 제어", + "auto_update": "자동 업데이트 활성화", + "update_channel": "업데이트 채널", + "audit_title": "정책 변경", + "audit_desc": "최근 정책 변경 이력", + "no_audit": "기록된 정책 변경이 없습니다.", + "save_success": "정책이 성공적으로 저장되었습니다.", + "save_failed": "정책을 저장하지 못했습니다.", + "load_failed": "정책을 로드하지 못했습니다.", + "block_direct_p2p_hint": "이 조직의 기기에 적용됩니다. 전역 기본값은 설정 → 연결 전략에 있습니다." + }, + "attestation": { + "title": "장치 인증", + "subtitle": "장치 ID 검증 및 하드웨어 지문 모니터링", + "verified": "검증됨", + "pending": "대기 중", + "failed": "실패", + "device_list": "인증 기록", + "device_list_desc": "하드웨어 지문 및 ID 검증 상태", + "col_device": "장치 ID", + "col_hostname": "호스트명", + "col_fingerprint": "지문", + "col_status": "상태", + "col_last_check": "마지막 확인", + "col_actions": "작업", + "no_records": "인증 기록을 찾을 수 없습니다.", + "verify_success": "확인된 것으로 표시된 기기", + "verify_failed": "기기를 확인하지 못했습니다.", + "revoke_success": "기기 증명이 취소되었습니다.", + "revoke_failed": "증명을 취소하지 못했습니다." + }, + "fleet": { + "title": "플릿 관리", + "tab_resources": "리소스", + "tab_tasks": "작업", + "tab_builder": "빌더", + "tab_compliance": "컴플라이언스", + "res_title": "리소스 매핑", + "res_all_types": "모든 유형", + "res_type_printer": "프린터", + "res_type_network_drive": "네트워크 드라이브", + "res_type_dns": "DNS 서버", + "res_type_proxy": "프록시", + "res_type_vpn": "VPN", + "res_add": "리소스 추가", + "res_name": "리소스 이름", + "res_type": "유형", + "res_address": "주소 / 경로", + "res_target": "대상", + "res_scope": "범위", + "res_scope_org": "조직", + "res_scope_group": "그룹", + "res_scope_device": "장치", + "res_scope_value": "범위 값", + "res_status": "상태", + "res_active": "활성", + "res_inactive": "비활성", + "res_no_data": "리소스를 찾을 수 없습니다. '추가'를 클릭하세요.", + "res_confirm_delete": "이 리소스를 삭제하시겠습니까?", + "task_title": "작업 스케줄러", + "task_all_status": "모든 상태", + "task_status_pending": "대기 중", + "task_status_running": "실행 중", + "task_status_success": "성공", + "task_status_failed": "실패", + "task_search": "작업 검색…", + "task_create": "작업 생성", + "task_name": "작업 이름", + "task_type": "유형", + "task_type_script": "스크립트", + "task_type_install": "설치", + "task_type_update": "업데이트", + "task_type_restart": "재시작", + "task_type_deploy": "배포", + "task_type_scan": "스캔", + "task_targets": "대상", + "task_targets_help": "장치 ID 또는 그룹명 (쉼표 구분)", + "task_schedule": "스케줄", + "task_schedule_once": "한 번만", + "task_schedule_cron": "Cron", + "task_schedule_interval": "간격", + "task_schedule_value": "스케줄 값", + "task_script": "스크립트 / 명령", + "task_retries": "재시도", + "task_timeout": "타임아웃 (초)", + "task_last_run": "마지막 실행", + "task_no_data": "작업을 찾을 수 없습니다. 새 작업을 만드세요.", + "task_confirm_delete": "이 작업을 삭제하시겠습니까?", + "task_output": "작업 출력", + "task_retry": "재시도", + "builder_title": "비주얼 워크플로우 빌더", + "builder_select_workflow": "워크플로우 선택…", + "builder_new": "새로 만들기", + "builder_save": "저장", + "builder_export": "내보내기", + "builder_execute": "실행", + "builder_dry_run": "테스트 실행", + "builder_triggers": "트리거", + "builder_conditions": "조건", + "builder_actions": "액션", + "builder_results": "결과", + "builder_transforms": "변환", + "builder_properties": "속성", + "builder_no_selection": "노드를 선택하여 속성을 편집하세요.", + "workflow_name": "워크플로우 이름:", + "comp_title": "소프트웨어 컴플라이언스", + "comp_compliant": "준수", + "comp_warning": "경고", + "comp_critical": "심각", + "comp_score": "평균 점수", + "comp_device": "장치", + "comp_hostname": "호스트명", + "comp_os": "OS", + "comp_score_col": "점수", + "comp_issues": "문제", + "comp_last_scan": "마지막 스캔", + "comp_scan": "스캔", + "comp_scan_all": "전체 스캔", + "comp_remediate": "수정", + "comp_remediate_confirm": "이 장치에서 자동 수정을 실행하시겠습니까?", + "comp_no_data": "컴플라이언스 데이터 없음. 스캔을 실행하세요.", + "save": "저장", + "cancel": "취소", + "close": "닫기", + "edit": "편집", + "delete": "삭제", + "actions": "작업", + "all_orgs": "모든 조직", + "builder_node_trigger_manual": "수동 트리거", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "이벤트 트리거", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "서비스 다시 시작", + "builder_node_action_file_deploy": "파일 배포", + "builder_node_action_message": "메시지 보내기", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "알림 보내기", + "builder_node_result_chain": "체인 작업흐름", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "조직 선택…", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "네트워크 드라이브", + "type_dns": "DNS 서버", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "리소스 추가", + "edit_resource": "리소스 편집", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "주소 / 경로", + "scope_org": "조직", + "scope_group": "그룹", + "scope_device": "장치", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "이 항목을 삭제하시겠습니까?", + "all_statuses": "모든 상태", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "실패", + "search_tasks": "작업 검색…", + "create_task": "작업 만들기", + "edit_task": "작업 편집", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "파일 배포", + "task_type_registry": "Registry", + "target_devices": "대상 장치", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "스크립트/명령", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "로드 중", + "no_output": "사용 가능한 출력 없음", + "error_loading": "데이터를 로드하는 중에 오류가 발생했습니다.", + "select_workflow": "워크플로 선택…", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "수동 트리거", + "node_schedule": "Schedule", + "node_event": "이벤트 트리거", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "서비스 다시 시작", + "node_file_deploy": "파일 배포", + "node_send_message": "메시지 보내기", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "알림 보내기", + "node_chain": "체인 작업흐름", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "모든 조직", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "장치", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "이 기기에서 자동 치료를 실행하시겠습니까?" + }, + "scaling": { + "title": "스케일링 및 릴레이 관리", + "tab_overview": "개요", + "tab_relays": "릴레이 노드", + "tab_rules": "할당 규칙", + "tab_capacity": "용량 계획", + "arch_title": "네트워크 아키텍처", + "arch_loading": "아키텍처 다이어그램 로딩 중...", + "stat_relay_nodes": "릴레이 노드", + "stat_total_devices": "전체 장치", + "stat_active_sessions": "활성 세션", + "stat_bandwidth": "전체 대역폭", + "relay_health": "릴레이 상태", + "no_relays": "구성된 릴레이 노드가 없습니다. 부하 분산을 위해 첫 번째 노드를 추가하세요.", + "relay_search": "릴레이 검색...", + "relay_add": "릴레이 노드 추가", + "relay_edit": "릴레이 노드 편집", + "col_name": "이름", + "col_address": "주소", + "col_location": "위치", + "col_devices": "장치", + "col_sessions": "세션", + "col_bandwidth": "대역폭", + "col_status": "상태", + "col_actions": "작업", + "col_priority": "우선순위", + "col_rule_name": "규칙 이름", + "col_match": "일치", + "col_target_relay": "대상 릴레이", + "col_fallback": "폴백", + "status_online": "온라인", + "status_degraded": "저하", + "status_offline": "오프라인", + "status_enabled": "활성화", + "status_disabled": "비활성화", + "confirm_delete_relay": "이 릴레이 노드를 삭제하시겠습니까?", + "confirm_delete_rule": "이 할당 규칙을 삭제하시겠습니까?", + "rules_hint": "할당 규칙은 특정 장치 그룹을 어떤 릴레이 서버가 처리할지 결정합니다. 규칙은 우선순위순으로 평가됩니다 (가장 낮은 것이 우선).", + "rule_add": "규칙 추가", + "rule_edit": "규칙 편집", + "rule_match_type": "일치 유형", + "match_subnet": "서브넷", + "match_group": "장치 그룹", + "match_tag": "장치 태그", + "match_location": "위치", + "rule_match_value": "일치 값", + "fallback_master": "마스터 서버", + "fallback_nearest": "가장 가까운 릴레이", + "relay_max_sessions": "최대 세션", + "relay_max_bandwidth": "최대 대역폭 (Mbps)", + "cap_tiers": "용량 티어", + "cap_loading": "용량 데이터 로딩 중...", + "cap_recommendations": "권장 사항", + "cap_no_recs": "사용 가능한 권장 사항이 없습니다.", + "cap_planning": "인프라 계획", + "cap_config": "구성", + "cap_max_devices": "최대 장치", + "cap_max_sessions": "최대 세션", + "cap_current": "현재", + "cap_utilization": "이용률", + "cap_tier_devices": "장치 용량", + "cap_tier_sessions": "세션 용량", + "cap_tier_bandwidth": "대역폭 용량", + "cap_single_sqlite": "단일 서버 (SQLite)", + "cap_single_pg": "단일 서버 (PostgreSQL)", + "cap_master_3": "마스터 + 3 릴레이", + "cap_master_10": "마스터 + 10 릴레이", + "rec_no_relays": "구성된 릴레이 노드가 없습니다. 성능과 이중화를 위해 릴레이 추가를 고려하세요.", + "rec_devices_high": "장치 이용률이 높습니다. 릴레이 노드 추가를 고려하세요.", + "rec_sessions_high": "세션 용량이 한계에 다가가고 있습니다. 인프라 업그레이드를 고려하세요.", + "rec_cpu_high": "일부 릴레이 노드의 CPU 사용률이 높습니다. 부하 분산을 고려하세요.", + "rec_all_good": "모든 시스템이 정상 매개변수 내에서 작동 중입니다. 조치가 필요하지 않습니다.", + "save": "저장", + "cancel": "취소", + "edit": "편집", + "delete": "삭제", + "close": "닫기", + "no_rules": "할당 규칙이 없습니다.", + "relays_info_banner": "이 목록은 정보 제공용입니다. 클라이언트가 실제로 사용하는 릴레이 서버는 BetterDesk 서버의 RELAY_SERVERS 환경 변수를 통해 구성됩니다.", + "relay_name_address_required": "이름과 주소가 필요합니다.", + "relay_save_failed": "릴레이 노드를 저장하지 못했습니다.", + "relay_delete_failed": "릴레이 노드를 삭제하지 못했습니다.", + "relay_saved": "릴레이 노드가 저장되었습니다.", + "relay_deleted": "릴레이 노드가 삭제되었습니다.", + "rule_name_value_required": "규칙 이름과 일치 값이 필요합��다.", + "rule_save_failed": "규칙을 저장하지 못했습니다.", + "rule_delete_failed": "규칙을 삭제하지 못했습니다.", + "rule_saved": "규칙이 저장되었습니다.", + "rule_deleted": "규칙이 삭제되었습니다." + }, + "cross_platform": { + "title": "크로스 플랫폼 호환성", + "tab_matrix": "호환성 매트릭스", + "tab_distribution": "분포", + "tab_protocols": "프로토콜", + "tab_limitations": "제한 사항", + "matrix_hint": "모든 지원 플랫폼에 대한 기능 지원 매트릭스. 녹색=완전 지원, 노란색=부분 지원, 회색=사용 불가, 파란색=계획 중.", + "col_feature": "기능", + "legend_full": "완전 지원", + "legend_partial": "부분 지원", + "legend_none": "사용 불가", + "legend_planned": "계획 중", + "platform_breakdown": "플랫폼 분포", + "arch_breakdown": "아키텍처 분포", + "version_breakdown": "버전 분포", + "summary": "요약", + "total_devices": "전체 디바이스", + "unique_platforms": "플랫폼", + "unique_archs": "아키텍처", + "unique_versions": "클라이언트 버전", + "no_devices": "아직 등록된 디바이스가 없습니다.", + "protocols_hint": "프로토콜 기능 협상을 통해 각 클라이언트가 지원되는 기능만 수신합니다. 서버는 보고된 기능에 따라 동작을 조정합니다.", + "capability_negotiation": "기능 협상", + "codec_support": "코덱 지원 (온라인 디바이스)", + "feature_support": "기능 지원 (온라인 디바이스)", + "no_codec_data": "온라인 디바이스의 코덱 데이터가 없습니다.", + "no_feature_data": "온라인 디바이스의 기능 데이터가 없습니다.", + "protobuf_schema": "ClientCapabilities Protobuf 스키마", + "diagram_client": "클라이언트", + "diagram_server": "BetterDesk 서버", + "diagram_peer": "원격 피어", + "limitations_hint": "각 플랫폼에는 사용 가능한 기능에 영향을 미치는 특정 제한이 있습니다. 배포 계획 시 확인하세요.", + "feat_desktop_client": "데스크톱 클라이언트", + "feat_background_agent": "백그라운드 에이전트", + "feat_remote_target": "원격 대상", + "feat_screen_capture": "화면 캡처", + "feat_input_injection": "입력 인젝션", + "feat_file_transfer": "파일 전송", + "feat_clipboard_sync": "클립보드 동기화", + "feat_audio_streaming": "오디오 스트리밍", + "feat_chat": "채팅", + "feat_h264": "H.264 코덱", + "feat_vp9": "VP9 코덱", + "feat_av1": "AV1 코덱", + "feat_cdap_agent": "CDAP 에이전트", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "웹 브라우저", + "platform_chromeos": "ChromeOS", + "status_production": "프로덕션", + "status_testing": "테스트", + "status_planned": "계획 중", + "status_limited": "제한됨", + "status_experimental": "실험적", + "limit_win_uac": "서비스 설치 및 보안 데스크톱에서의 입력 인젝션에 UAC 권한 상승이 필요합니다.", + "limit_win_service": "NSSM 서비스로 실행됩니다. 설치에 관리자 권한이 필요합니다.", + "limit_win_firewall": "Windows 방화벽 규칙에서 릴레이 연결을 위해 포트 21115-21119를 허용해야 합니다.", + "limit_linux_wayland": "Wayland 컴포저는 프로그래매튱 화면 캡처를 제한합니다. PipeWire 포털 API가 필요합니다.", + "limit_linux_pipewire": "오디오 캡처에 PipeWire가 필요합니다. PulseAudio 폴백은 사용 가능하지만 제한적입니다.", + "limit_linux_arm": "ARM64 빌드 사용 가능. 일부 코덱은 소프트웨어 디코딩을 사용할 수 있습니다 (느림).", + "limit_mac_screen": "시스템 설정 > 개인 정보 보호 및 보안에서 화면 녹화 권한이 필요합니다.", + "limit_mac_signing": "배포를 위해 Apple Developer ID로 서명되어야 합니다.", + "limit_mac_notarize": "macOS Gatekeeper용 공증이 필요합니다 (App Store 외 배포).", + "limit_android_projection": "MediaProjection API는 각 캡처 세션마다 사용자 동의가 필요합니다.", + "limit_android_accessibility": "입력 인젝션에 AccessibilityService가 필요합니다. Android 14+부터 제한됩니다.", + "limit_android_battery": "백그라운드 서비스는 Doze 모드로 제한됩니다. 배터리 최적화 예외가 필요할 수 있습니다.", + "limit_ios_capture": "Apple은 백그라운드 화면 캡처를 금지합니다. 뷰어 모드만 지원됩니다.", + "limit_ios_input": "입력 인젝션이 허용되지 않습니다. 원격 보기와 채팅만 가능합니다.", + "limit_ios_appstore": "App Store를 통한 배포만 가능. 베타 테스트에 TestFlight.", + "limit_web_https": "WebCodecs API와 WebRTC는 HTTPS가 필요합니다. HTTP는 JMuxer로 폴백합니다 (코덱 제한).", + "limit_web_codec": "코덱 지원은 브라우저에 따라 다름. H.264는 널리 지원되고, VP9/AV1은 다양합니다.", + "limit_web_performance": "브라우저 샌드박스로 인한 성능 제한. 직접 하드웨어 가속 없음.", + "limit_chrome_crostini": "전체 에이전트 지원은 Crostini Linux 컨테이너 내에서만 가능.", + "limit_chrome_pwa": "PWA 모드는 웹 기능만 제공. 네이티브 에이전트 기능 없음.", + "limit_chrome_input": "Crostini 컨테이너 외부에서의 입력 인젝션은 지원되지 않습니다.", + "feat_session_recording": "세션 녹화", + "feat_multi_monitor": "다중 모니터", + "feat_unattended_access": "무인 접속", + "limit_win_virtual_account": "서비스는 LocalSystem 대신 격리된 가상 계정에서 실행됩니다. 사용자 지정 로그 경로에는 ACL 조정이 필요할 수 있습니다.", + "limit_linux_unprivileged": "서비스는 systemd 강화(NoNewPrivileges, ProtectSystem=strict)를 갖춘 전용 비특권 'betterdesk' 계정에서 실행됩니다." + }, + "security_audit": { + "title": "보안 감사", + "tab_overview": "개요", + "tab_events": "감사 이벤트", + "tab_hardening": "보안 강화", + "tab_vulnerabilities": "취약점", + "security_score": "보안 점수", + "failed_logins": "로그인 실패(24h)", + "active_bans": "활성 차단", + "api_keys": "API 키", + "old_keys": "오래된 키(>90일)", + "security_checks": "보안 검사", + "tls_status": "TLS 상태", + "pass": "통과", + "warning": "경고", + "fail": "실패", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket 보안", + "enabled": "활성화", + "disabled": "비활성화", + "all_events": "모든 이벤트", + "event_login_failed": "로그인 실패", + "event_login_success": "로그인 성공", + "event_peer_banned": "장치 차단", + "event_ip_banned": "IP 차단", + "event_config_changed": "구성 변경", + "event_key_created": "키 생성", + "refresh": "새로고침", + "col_time": "시간", + "col_action": "작업", + "col_actor": "행위자", + "col_target": "대상", + "col_ip": "IP 주소", + "col_details": "세부사항", + "no_events": "감사 이벤트가 없습니다.", + "hardening_hint": "BetterDesk 배포의 보안 강화 우선순위. 심각도 순 정렬.", + "no_hardening": "보안 강화 항목이 없습니다.", + "vuln_hint": "의존성 취약점 스캔 결과. 정기적으로 npm audit를 실행하세요.", + "no_vulns": "취약점이 발견되지 않았습니다. 의존성이 안전합니다." + }, + "languages": { + "title": "언어 관리", + "total_languages": "총 언어", + "fully_translated": "완전 번역됨", + "needs_review": "검토 필요", + "reference_keys": "참조 키", + "no_languages": "언어 파일을 찾을 수 없습니다.", + "badge_reference": "Reference", + "badge_review": "검토 필요", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "누락된 항목 보기", + "fix_missing": "Fix Missing", + "missing_keys_for": "다음 항목에 대한 키가 누락되었습니다.", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "그리고 {n} 더...", + "all_keys_present": "모든 열쇠가 있습니다!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code}의 누락된 키는 수동으로 번역해야 합니다.", + "no_fix_needed": "고칠 누락된 키가 없습니다." + }, + "resource_control": { + "title": "자원 제어", + "tab_overview": "개요", + "tab_usb": "USB Control", + "tab_optical": "광학 드라이브", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "리소스 할당량", + "compliance_by_category": "카테고리별 규정 준수", + "device_compliance": "장치 규정 준수", + "search_devices": "기기 검색...", + "col_device": "장치", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "총 장치", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "준수율", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "구성", + "no_devices": "기기를 찾을 수 없습니다.", + "usb_title": "USB 포트 제어", + "usb_hint": "선택한 장치 또는 조직 전체 기본 정책에 대한 USB 저장 장치 액세스를 제어합니다.", + "usb_storage_policy": "USB 스토리지 정책", + "usb_whitelist": "화이트리스��에 등록된 장치(한 줄에 하나씩)", + "usb_whitelist_hint": "VID:PID(예: 0781:5583)", + "usb_audit_log": "USB 장치 연결 기록", + "optical_title": "광학 드라이브 제어", + "optical_hint": "선택한 장치에 대한 CD/DVD/블루레이 드라이브 액세스를 제어합니다.", + "optical_policy": "광학 드라이브 정책", + "optical_audit_log": "광학 드라이브 액세스 기록", + "monitors_title": "모니터 관리", + "monitors_hint": "최대 개수, 해상도 적용, 밝기 및 전원 일정을 포함한 모니터 설정을 구성합니다.", + "monitors_max_count": "최대 모니터 수(0 = 무제한)", + "monitors_max_hint": "0은 제한이 없음을 의미합니다.", + "monitors_resolution": "최대 해상도", + "monitors_brightness": "밝기 제한", + "monitors_power_schedule": "전원 일정", + "monitors_power_hint": "예를 들어 휴무:22:00-06:00", + "disks_title": "디스크 액세스 제어", + "disks_hint": "읽기 전용 모드, 암호화 적용, 파티션 가시성을 포함한 디스크 액세스 정책을 구성합니다.", + "disks_readonly": "강제 읽기 전용 모드", + "disks_encryption": "암호화 필요(BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T를 활성화합니다. 모니터링", + "disks_hidden": "숨겨진 파티션", + "disks_hidden_hint": "쉼표로 구분된 드라이브 문자 또는 마운트 지점", + "quotas_title": "리소스 할당량", + "quotas_hint": "선택한 장치에 대한 사용자별 CPU, RAM, 대역폭 및 디스크 할당량을 설정합니다.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "대역폭 제한(Mbps)", + "quotas_bandwidth_hint": "0 = 무제한", + "quotas_disk_quota": "디스크 할당량(GB)", + "quotas_disk_hint": "0 = 무제한", + "quotas_process_whitelist": "프로세스 화이트리스트(한 줄에 하나씩)", + "quotas_process_hint": "예를 들어 크롬.exe, 코드.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "화이트리스트만", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "소프트웨어 업데이트", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "설치된 버전", + "latest_version": "Latest version", + "status": "Status", + "check_now": "업데이트 확인", + "checking": "Checking…", + "up_to_date": "최신", + "update_available": "업데이트 가능", + "changelog": "Release Notes", + "no_changelog": "사용 가능한 출시 노트가 없습니다.", + "files_changed": "변경된 파일", + "files": "파일", + "changes_unavailable": "파일 변경 목록을 로드할 수 없습니다. 여전히 업데이트를 설치할 수 있습니다.", + "create_backup": "업데이트하기 전에 백업 만들기", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "업데이트 설치 중…", + "creating_backup": "백업 생성 중…", + "downloading": "파일 다운로드 중…", + "install_success": "업데이트가 성공적으로 설치되었습니다. 콘솔을 다시 시작하는 중입니다…", + "install_failed": "업데이트 설치 실패", + "restarting": "콘솔이 다시 시작되기를 기다리는 중…", + "restart_complete": "콘솔이 성공적으로 다시 시작되었습니다.", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "선택한 업데이트 버전이 없습니다. 먼저 업데이트를 확인하세요.", + "backups_title": "백업 업데이트", + "backups_desc": "각 업데이트 전에 자동으로 생성된 사전 업데이트 백업", + "no_backups": "업데이트 백업을 찾을 수 없습니다.", + "restore": "Restore", + "restore_confirm": "이 백업에서 복원하시겠습니까? 변경된 파일을 덮어씁니다.", + "restore_success": "백업이 성공적으로 복원되었습니다. 콘솔을 다시 시작하는 중입니다…", + "baseline_set": "기준 세트", + "commits_behind": "뒤에 커밋", + "total_files": "총 파일 수", + "applied": "Applied", + "failed": "실패", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "서버 이동", + "component_agent": "Agent", + "component_scripts": "스크립트 및 Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "이동 확인 중…", + "go_not_found": "설치되지 않은 상태로 이동", + "go_check_failed": "Go 가용성을 확인할 수 없습니다.", + "server_building": "Go server 컴파일 중… 이 작업은 몇 분 정도 걸릴 수 있습니다.", + "server_built": "서버 바이너리 컴파일", + "server_build_failed": "서버 컴파일 실패", + "server_stale_title": "서버 바이너리가 오래됨", + "server_stale_desc": "Go server 소스가 업데이트되었지만 실행 중인 바이너리가 다시 빌드되지 않았습니다. 보안 및 라이브러리 업데이트를 적용하려면 지금 다시 빌드하세요.", + "rebuild_server": "서버 바이너리 재구축", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "서버 바이너리가 다시 빌드되고 다시 시작되었습니다.", + "rebuild_server_failed": "서버 바이너리 재구축 실패", + "server_deployed": "배포된 서버 바이너리", + "server_deploy_failed": "서버 배포 실패", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "서버 소스 다운로드 중…", + "delete": "삭제", + "delete_confirm": "백업 {name}를 영구적으로 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", + "delete_success": "백업이 삭제되었습니다.", + "delete_failed": "백업을 삭제하지 못했습니다.", + "retention_label": "N개의 최신 백업 유지", + "retention_hint": "이전 백업은 업데이트할 때마다 자동으로 삭제됩니다. 모든 백업을 유지하려면 0을 사용합니다.", + "retention_saved": "보관 설정이 저장되었습니다.", + "retention_invalid": "보존 기간은 0에서 1000 사이의 정수여야 합니다.", + "retention_required_for_prune": "먼저 보존 값을 0보다 큰 값으로 설정하세요.", + "prune_now": "Apply now", + "prune_confirm": "{n}의 최신 백업만 유지하고 나머지는 삭제하시겠습니까?", + "prune_done": "정리된 {n} 백업", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "업데이트 방법", + "strategy_download": "사전 빌드된 바이너리 다운로드", + "strategy_compile": "소스에서 컴파일", + "both_available": "다운로드 및 컴파일", + "download_available": "다운로드 가능", + "no_method": "업데이트 방법 없음", + "no_release": "No release", + "available": "가능", + "server_downloading": "서버 바이너리 다운로드 중…", + "server_downloaded": "서버 바이너리가 다운로드됨", + "server_download_failed": "서버 바이너리 다운로드 실패", + "server_download_note": "사전 빌드된 바이너리는 GitHub 릴리스에서 다운로드됩니다. 이 작업은 일반적으로 1분 이내에 완료됩니다.", + "install_go_hint": "https://go.dev/dl/에서 Go를 설치하여 컴파일을 활성화하거나 사전 빌드된 바이너리로 릴리스를 게시하세요.", + "strategy_install_go": "Go 자동 설치 및 컴파일", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "자동 재구축 준비됨", + "toolchain_ready": "툴체인이 설치됨", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Go 툴체인 다운로드 중…", + "toolchain_failed": "Go 툴체인 설치 실패", + "modal_title": "업데이트 설치 중", + "modal_done_title": "업데이트 완료", + "modal_close": "닫기", + "modal_reload_now": "콘솔 새로고침", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "콘솔 파일", + "phase_server": "서버 단계", + "phase_restart": "다시 시작", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "백업 건너뛰기(사용자 선택에 따라)", + "server_skipped": "Go server를 건너뛰었습니다.", + "server_not_selected": "Go server not selected", + "server_processing": "Go server 업데이트 처리 중…", + "no_restart_needed": "다시 시작할 필요 없음", + "complete": "업데이트 적용됨", + "complete_summary": "업데이트가 성공적으로 적용되었습니다.", + "complete_with_errors": "업데이트가 완료되었지만 일부 단계가 실패했습니다. 아래 세부정보를 참조하세요.", + "modal_done_with_errors_title": "오류가 발생하여 업데이트가 완료되었습니다.", + "console_will_restart": "콘솔 프로세스가 지금 다시 시작됩니다…", + "restart_complete_msg": "콘솔 재시작이 완료되었습니다. 새 버전을 로드하려면 다시 로드를 클릭하세요. 페이지는 8초 후에 자동으로 다시 로드됩니다.", + "refresh_recommended": "정적 자산이 변경되었습니다. 새 UI를 보려면 페이지를 다시 로드하세요.", + "confirm_title": "업데이트 적용", + "confirm_with_backup": "업데이트 전 백업이 자동으로 생성됩니다.", + "confirm_no_backup": "백업이 생성되지 않습니다(진행에 따른 책임은 본인에게 있습니다)." + }, + "permissions": { + "title": "권한", + "subtitle": "역할 기반 권한 및 사용자 정의 재정의 관리", + "info_title": "권한 작동 방식", + "info_desc": "각 역할에��� 기본 권한이 있습니다. 아래에서 전환하여 역할별로 개별 권한을 추가하거나 제거할 수 있습니다. 사용자 정의 재정의는 강조 표시되며 언제든지 기본값으로 되돌릴 수 있습니다.", + "select_role": "역할 선택", + "select_role_placeholder": "역할을 선택하세요...", + "reset_overrides": "모든 재정의 재설정", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "서버 수준", + "custom": "Custom", + "default": "Default", + "revert": "기본값으로 되돌리기", + "saved": "권한이 업데이트되었습니다.", + "reverted": "기본값으로 되돌렸습니다.", + "all_reverted": "모든 재정의가 되돌려졌습니다.", + "confirm_reset": "이 역할의 모든 사용자 정의 재정의를 기본값으로 재설정하시겠습니까?", + "empty_title": "역할 선택", + "empty_desc": "권한을 보고 관리하려면 위 드롭다운에서 역할을 선택하세요.", + "locked_title": "Super Admin", + "locked_desc": "최고 관리자는 기본적으로 모든 권한을 가지며 사용자 정의할 수 없습니다.", + "cat_device": "장치", + "cat_user": "Users", + "cat_server": "서버", + "cat_org": "조직", + "cat_audit": "감사 및 모니터링", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "기기 보기", + "perm_device_connect": "장치에 연결", + "perm_device_edit": "기기 수정", + "perm_device_delete": "기기 삭제", + "perm_device_ban": "장치 금지/금지 해제", + "perm_device_change_id": "기기 ID 변경", + "perm_user_view": "사용자 보기", + "perm_user_create": "사용자 생성", + "perm_user_edit": "사용자 편집", + "perm_user_delete": "사용자 삭제", + "perm_server_config": "서버 구성", + "perm_server_keys": "API 키 관리", + "perm_org_create": "조직 만들기", + "perm_org_edit": "조직 수정", + "perm_org_delete": "조직 삭제", + "perm_org_manage_users": "조직 사용자 관리", + "perm_org_manage_devices": "조직 기기 관리", + "perm_audit_view": "감사 로그 보기", + "perm_metrics_view": "측정항목 보기", + "perm_blocklist_edit": "차단 목록 수정", + "perm_cdap_view": "CDAP 장치 보기", + "perm_cdap_command": "CDAP 명령 보내기", + "perm_cdap_terminal": "CDAP 터미널 액세스", + "perm_cdap_files": "CDAP 파일 액세스", + "perm_enrollment_manage": "등록 관리", + "perm_enrollment_approve": "등록 승인", + "perm_chat_access": "Chat access", + "perm_branding_edit": "브랜딩 수정", + "perm_server_attestation": "서버 성능 인증" + }, + "notifications": { + "title": "알림", + "empty": "새로운 알림 없음", + "mark_all_read": "모두 읽은 것으로 표시", + "see_all": "모든 도움 요청 보기", + "help_request": "도움 요청", + "just_now": "just now" + }, + "accessibility": { + "title": "접근성", + "subtitle": "시각, 동작 및 읽기 요구에 맞게 콘솔을 조정합니다.", + "close": "접근성 메뉴 닫기", + "profiles": "빠른 프로필", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "더 큰 텍스트, 강한 대비 및 초점.", + "profile_dyslexia": "읽기의 편안함", + "profile_dyslexia_hint": "읽기 쉬운 글꼴과 넓은 간격.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "전환을 줄이고 애니메이션을 일시 중지합니다.", + "profile_color_assist": "색상 지원", + "profile_color_assist_hint": "색상 필터, 라벨 및 강조 표시된 링크.", + "reading": "읽기", + "font_size": "글자 크기", + "line_height": "줄 높이", + "letter_spacing": "문자 간격", + "word_spacing": "단어 간격", + "readable_font": "읽을 수 있는 글꼴", + "readable_font_hint": "넓고 친숙한 문자 모양을 사용합니다.", + "dyslexia_spacing": "난독증 간격", + "dyslexia_spacing_hint": "긴 텍스트에 추가 간격을 추가합니다.", + "visual": "시각", + "contrast": "대비", + "contrast_normal": "Normal", + "contrast_high_dark": "고대비 어두운", + "contrast_high_light": "고대비 조명", + "contrast_yellow_black": "검정색 바탕에 노란색", + "color_filter": "컬러 비전 필터", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "채도", + "underline_links": "링크에 밑줄을 긋습니다", + "underline_links_hint": "색상에 의존하지 않고 링크를 표시합니다.", + "highlight_links": "하이라이트 액션", + "highlight_links_hint": "링크와 버튼의 개요를 설명합니다.", + "highlight_headings": "제목 강조 표시", + "highlight_headings_hint": "색상 막대로 섹션 제목을 표시합니다.", + "hide_media": "Dim media", + "hide_media_hint": "이미지, 비디오 및 캔버스를 어둡게 합니다.", + "interaction": "상호 작용", + "strong_focus": "강한 집중력", + "strong_focus_hint": "큰 키보드 포커스 링을 표시합니다.", + "large_cursor": "큰 커서", + "large_cursor_hint": "더 큰 고대비 포인터를 사용합니다.", + "reduce_motion": "움직임 줄이기", + "reduce_motion_hint": "전환을 줄이고 스크롤을 부드럽게 합니다.", + "pause_animations": "애니메이션 일시중지", + "pause_animations_hint": "반복되는 시각적 동작을 중지합니다.", + "reading_guide": "독서 가이드", + "reading_guide_hint": "밝은 선으로 포인터를 따릅니다.", + "reading_mask": "마스크 읽기", + "reading_mask_hint": "포인터 위와 아래의 내용을 어둡게 합니다.", + "preview": "미리보기", + "preview_title": "운영자 작업 공간 미리보기", + "preview_text": "이 메뉴를 닫기 전에 텍스트, 링크, 컨트롤 및 상태 라벨을 읽기 편한지 확인하세요.", + "preview_link": "기기 세부정보 링크", + "preview_status": "Online", + "preview_button": "기본 작업", + "preview_secondary": "Secondary", + "reset": "초기화", + "done": "완료" + }, + "server_mgmt": { + "title": "서버 관리", + "subtitle": "BetterDesk 콘솔 호스트용 Cockpit 스타일 제어판(베타).", + "beta_tooltip": "베타 기능 — 활발히 개발 중입니다.", + "notice_title": "베타 기능", + "notice_body": "이러한 도구는 BetterDesk 콘솔 프로세스가 있는 호스트에서 실행됩니다. 모든 작업이 감사됩니다. 향후 릴리스에서는 기능 범위가 확장될 예정입니다.", + "tab_overview": "개요", + "tab_terminal": "터미널", + "tab_files": "파일", + "tab_services": "서비스", + "cpu": "CPU", + "memory": "메모리", + "load": "평균 부하", + "disks": "디스크", + "history": "기록(최근 60개 샘플)", + "host_info": "Host info", + "cores": "cores", + "uptime": "가동 시간", + "no_disks": "사용 가능한 디스크 데이터가 없습니다.", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY 이용 가능", + "term_connect": "연결", + "term_disconnect": "연결 해제", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "연결 오류", + "term_warning": "명령은 콘솔 프로세스를 소유한 사용자로 실행됩니다. 권한 상승을 활성화하려면 sudoers 규칙을 추가하세요.", + "term_hint": "팁: 에스컬레이션하려면 `sudo -i`를 입력하세요(sudoers 구성 필요).", + "term_lib_failed": "터미널 라이브러리를 로드하지 못했습니다.", + "files_up": "한 레벨 위로", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "이름", + "files_size": "크기", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "빈 디렉토리", + "files_error": "디렉터리를 나열하지 못했습니다.", + "read_failed": "파일을 읽지 못했습니다.", + "save_failed": "파일을 저장하지 못했습니다.", + "rename_failed": "이름 바꾸기 실패", + "delete_failed": "삭제 실패", + "delete_confirm": "이 항목을 삭제하시겠습니까?", + "mkdir_prompt": "새 폴더 이름:", + "mkdir_failed": "폴더를 생성하지 못했습니다.", + "file_saved": "파일이 저장되었습니다", + "binary_warn": "바이너리 파일 — 미리보기 전용", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "검색 서비스…", + "svc_name": "서비스", + "svc_state": "상태", + "svc_description": "Description", + "svc_empty": "서비스를 찾을 수 없습니다.", + "svc_load_failed": "서비스를 로드하지 못했습니다.", + "svc_action_failed": "작업 실패", + "svc_confirm": "Run", + "svc_start": "시작", + "svc_stop": "중지", + "svc_restart": "재시작", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk 에이전트 다운로드", + "choose_platform": "플랫폼을 선택하세요", + "choose_platform_hint": "운영 체제와 일치하는 설치 프로그램을 선택하십시오.", + "download": "다운로드", + "building": "건물…", + "failed": "빌드 실패", + "need_help": "도움이 필요하신가요?", + "powered_by": "제공:" + }, + "server_attestation": { + "title": "서버 성능 인증", + "subtitle": "CPU, RAM, 디스크 사용률 80% 임계값에서의 동시 원격 연결 용량을 측정하는 성능 벤치마크.", + "warning_title": "부하 테스트", + "warning_body": "벤치마크는 시그널 및 릴레이 서버에 대한 병렬 WebSocket 연결을 시뮬레이션합니다. 이 테스트는 프로덕션 환경에 부하를 줍니다 — 비피크 시간에 실행하세요.", + "run_benchmark": "벤치마크 실행", + "abort": "중단", + "download_report": "JSON 보고서 다운로드", + "last_test": "마지막 테스트", + "no_test_yet": "아직 벤치마크가 실행되지 않았습니다", + "max_connections": "최대 연결 수", + "threshold_80": "80% 임계값 — 최종 메트릭", + "disk": "디스크", + "ramp_chart": "부하 증가 차트", + "connections": "연결 수", + "connections_short": "연결", + "tier_guide_title": "각 등급의 의미는?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "동시 연결 1~25개 — 소형 VPS(1~2 vCPU, 2~4 GB RAM).", + "tier_iron_desc": "연결 26~75개 — 중급 서버(2~4 vCPU, 4~8 GB RAM).", + "tier_platinum_desc": "연결 76~200개 — 고성능 서버(4~8 vCPU, 8~16 GB RAM).", + "tier_titanium_desc": "연결 201~400개 — 엔터프라이즈 인프라(8+ vCPU, 16~32 GB RAM).", + "tier_obsidian_desc": "연결 401+개 — 터보 클래스: 전용 하드웨어, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "참고: Docker에서 CPU/RAM 메트릭은 물리적 호스트가 아닌 컨테이너 제한을 반영할 수 있습니다.", + "badge_tooltip": "BetterDesk 서버 성능 인증 — 서버 성능 인증", + "confirm_run": "이 벤치마크는 시뮬레이션된 연결로 서버를 부하 테스트합니다. 계속하시겠습니까?", + "starting": "시작 중…", + "complete": "벤치마크 완료", + "signal_peers": "시그널 피어", + "relay_sessions": "릴레이 세션", + "page_error": "서버 성능 인증 페이지 로드에 실패했습니다", + "mode_estimated": "추정값(WebSocket 도달 불가)", + "incomplete": "벤치마크가 완료되었지만 유효한 등급을 얻지 못했습니다" + }, + "commercialization": { + "title": "상용화", + "subtitle": "지원 패키지, 과금 세션 및 작업 보고서", + "alpha_badge": "ALPHA", + "alpha_tooltip": "초기 기능 — 결제 및 패키지가 활발히 개발 중입니다.", + "tabs": { + "overview": "개요", + "packages": "패키지 및 계약", + "sessions": "세션", + "reports": "보고서", + "settings": "고급 설정" }, - "branding": { - "identity_title": "브랜드 아이덴티티", - "identity_desc": "콘솔에 표시되는 애플리케이션 이름과 설명을 사용자 정의하세요.", - "app_name": "애플리케이션 이름", - "app_description": "애플리케이션 설명", - "logo_title": "Logo", - "logo_desc": "사이드바 및 로그인 페이지에 로고가 표시되는 방식을 선택하세요.", - "logo_type_icon": "머티리얼 아이콘", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "머티리얼 아이콘 이름(예: DNS, 클라우드, 보안)을 입력합니다. Fonts.google.com/icons를 참조하세요.", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "여기에 SVG 마크업을 붙여넣으세요. 경로와 스타일이 포함된 전체 요소를 지원합니다.", - "logo_image_upload": "이미지 업로드", - "logo_image_choose": "이미지 파일 선택", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "파일 형식이 잘못되었습니다. PNG, JPG, GIF, WebP 또는 SVG를 사용하세요.", - "preview": "Preview", - "colors_title": "색 구성표", - "colors_desc": "색상 팔레트를 사용자 정의합니다. 기본값을 사용하려면 비워 두세요.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "악센트 색상", - "colors_borders": "Borders", - "import_export_title": "가져오기/내보내기", - "import_export_desc": "테마를 JSON 파일로 저장하거나 다른 인스턴스에서 가져옵니다.", - "export_theme": "테마 내보내기", - "import_theme": "테마 가져오기", - "reset_defaults": "기본값��로 재설정", - "save_branding": "브랜딩 저장", - "saved": "브랜딩이 성공적으로 저장되었습니다. 새로고침 중...", - "exported": "테마를 내보냈습니다.", - "imported": "테마를 성공적으로 가져왔습니다. 새로고침 중...", - "import_error": "테마를 가져오지 못했습니다. 파일 형식이 잘못되었습니다.", - "reset_confirm": "브랜딩을 기본값으로 재설정하시겠습니까? 이 작업은 취소할 수 없습니다.", - "reset_success": "브랜딩이 기본값으로 재설정되었습니다. 새로고침 중...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "브랜드 로고로 표시되는 기본 텍스트", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "로고 아래의 보조 텍스트(예: 제품 이름 또는 태그라인)", - "logo_upload_success": "로고가 성공적으로 업로드되었습니다.", - "typography_title": "Typography", - "typography_desc": "제목과 본문 텍스트의 글꼴을 선택하세요. 자체 호스팅을 위해 글꼴이 서버에 다운로드됩니다.", - "font_heading": "제목 글꼴", - "font_heading_hint": "제목(H1~H6) 및 텍스트 로고에 사용됩니다.", - "font_body": "Body Font", - "font_body_hint": "본문 텍스트 및 UI 요소에 사용됩니다.", - "font_search_placeholder": "글꼴 검색...", - "font_system_default": "시스템 기본값", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "서버에 다운로드된 글꼴", - "powered_by": "제공", - "background_title": "배경 및 외관", - "background_desc": "콘솔 배경 화면, 그라데이션 또는 단색 배경을 설정합니다. 카드가 그 위에 표시됩니다.", - "bg_type_none": "없음", - "bg_type_color": "단색", - "bg_type_gradient": "그라데이션", - "bg_type_image": "이미지", - "bg_color": "배경색", - "bg_gradient": "CSS 그라데이션", - "bg_gradient_hint": "유효한 CSS 그라데이션(예: linear-gradient(135deg, #1e293b, #0f172a))", - "bg_image_upload": "배경 이미지 업로드", - "bg_image_choose": "이미지 파일 선택", - "bg_image_hint": "PNG, JPG, WebP 또는 GIF. 최대 8 MB. 서버에 저장됩니다.", - "bg_image_url": "이미지 경로 / URL", - "bg_size": "이미지 크기 조정", - "bg_size_cover": "커버(화면 채우기)", - "bg_size_contain": "컨테인(맞추기)", - "bg_size_auto": "자동(원본 크기)", - "bg_blur": "배경 흐림", - "bg_overlay": "어두운 오버레이", - "bg_overlay_hint": "텍스트 가독성을 높이기 위해 배경을 어둡게 합니다.", - "bg_image_too_large": "이미지가 너무 큽니다. 최대 크기는 8 MB입니다.", - "bg_image_invalid_type": "잘못된 파일 형식입니다. PNG, JPG, WebP 또는 GIF를 사용하세요.", - "bg_upload_success": "배경 이미지가 성공적으로 업로드되었습니다.", - "login_title": "로그인 페이지", - "login_desc": "로그인 화면의 제목, 부제목, 배경을 사용자 지정합니다.", - "login_heading": "로그인 제목", - "login_heading_placeholder": "돌아오셨군요", - "login_subheading": "로그인 부제목", - "login_subheading_placeholder": "계정에 로그인하세요", - "login_bg_inherit": "콘솔과 동일", - "agent_title": "에이전트 다운로드 페이지", - "agent_desc": "최종 사용자에게 표시되는 공개 에이전트 다운로드 포털을 사용자 지정합니다.", - "agent_show_powered": "「Powered by BetterDesk」 표시", - "agent_show_powered_hint": "다운로드 포털 바닥글에 BetterDesk 크레딧을 표시합니다.", - "footer_title": "바닥글 및 저작권", - "footer_desc": "로그인 화면 및 콘솔 사이드바에 표시되는 사용자 지정 바닥글 텍스트를 추가합니다.", - "footer_text": "바닥글 텍스트", - "footer_text_hint": "예: 저작권 표시 또는 회사 이름.", - "show_powered": "「BetterDesk」 크레딧 표시", - "show_powered_hint": "로그인 바닥글 및 사이드바에 BetterDesk 이름과 버전을 표시합니다.", - "custom_css_title": "사용자 지정 CSS", - "custom_css_desc": "고급: 콘솔 전체 및 로그인 페이지에 적용되는 사용자 지정 CSS를 주입합니다.", - "custom_css_hint": "주의해서 사용하세요. 유효하지 않거나 안전하지 않은 규칙은 삭제됩니다. 최대 20,000자." + "clock": { + "title": "서버 시간 (NTP)", + "check_now": "지금 확인", + "unsynced": "서버 시계가 동기화되지 않음 — 과금 세션이 차단될 수 있습니다" }, - "device_detail": { - "tab_overview": "개요", - "tab_tags": "태그 및 메모", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "연결", - "section_manage": "관리", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "이 장치는 금지되어 있습니다", - "no_reason": "이유가 제공되지 않음", - "tags": "Tags", - "no_tags": "이 기기에 할당된 태그가 없습니다.", - "tag_placeholder": "태그 이름을 입력하세요...", - "add_tag": "Add", - "tag_exists": "이 태그는 이미 존재합니다.", - "notes": "Notes", - "notes_placeholder": "이 기기에 대한 메모를 추가하세요...", - "danger_zone": "Danger Zone", - "action_connect_web": "웹 원격", - "action_connect_web_desc": "브라우저 원격 데스크톱을 통해 연결", - "action_native_remote": "BetterDesk 원격", - "action_native_remote_desc": "기본 JPEG 스트림 — 플러그인이 필요하지 않습니다.", - "action_connect_desktop": "데스크톱 클라이언트", - "action_connect_desktop_desc": "데스크톱 클라이언트 앱에서 열기", - "action_change_id_desc": "기기 등록 ID 변경", - "action_ban_desc": "이 장치의 연결을 차단합니다.", - "action_unban_desc": "이 장치를 다시 연결하도록 허용", - "action_delete_desc": "이 ��치를 영구적으로 제거", - "tab_hardware": "Hardware", - "tab_metrics": "측정항목", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "인코딩 기능", - "section_live_metrics": "라이브 지표", - "section_current_usage": "현재 사용량", - "section_usage_history": "이용내역", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU 주파수", - "total_memory": "총 메모리", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "업데이트됨", - "device_groups": "그룹", - "no_sysinfo": "사용 가능한 하드웨어 정보가 없습니다.", - "no_sysinfo_hint": "장치가 sysinfo 보고서를 보낸 후에 시스템 정보가 나타납니다.", - "no_metrics": "측정항목 데이터가 없습니다.", - "no_metrics_hint": "장치가 하트비트 보고서를 보낸 후 측정항목이 표시됩니다.", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "파일", - "agent_lazy_hint": "에이전트에서 실시간 데이터를 로드하려면 이 탭을 클릭하세요.", - "agent_offline": "상담원이 오프라인 상태입니다", - "agent_timeout": "상담원이 제때에 응답하지 않았습니다.", - "agent_error": "에이전트에서 데이터를 로드하지 못했습니다.", - "service_name": "Name", - "service_display": "표시 이름", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "활성 과금 세션" }, - "inventory": { - "title": "Inventory", - "subtitle": "관리 장치의 하드웨어 및 소프트웨어 인벤토리", - "device_id": "장치 ID", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "총 메모리", - "memory_used": "Used Memory", - "memory_available": "사용 가능한 메모리", - "memory_usage": "메모리 사용량", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "네트워크 인터페이스", - "software": "Software", - "software_count": "설치된 소프트웨어", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "물리적 코어", - "logical_cores": "논리 코어", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "가능", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP 주소", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "수집가 실행 중", - "collector_stopped": "수집기가 중지됨", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "수집 장소", - "no_data": "아직 재고 데이터가 없습니다. 시스템 정보를 수집하려면 \"지금 수집\"을 클릭하세요.", - "no_devices": "인벤토리 데이터가 있는 기기를 찾을 수 없습니다.", - "detail_title": "장치 인벤토리 세부정보", - "telemetry": "Telemetry", - "view_detail": "세부정보 보기", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "새 패키지", + "name": "이름", + "included_minutes": "포함 분", + "overage_rate": "초과 요금 / 시간", + "currency": "통화", + "heading": "지원 패키지", + "prompt_name": "패키지 이름", + "create_title": "조직용 새 패키지", + "create_submit": "패키지 만들기", + "select_org": "조직", + "select_org_placeholder": "조직 선택…" }, - "tickets": { - "title": "Tickets", - "subtitle": "지원 티켓 및 문제 추적", - "create": "New Ticket", - "edit": "티켓 수정", - "delete": "티켓 삭제", - "detail": "티켓 세부정보", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "할당 대상", - "created_by": "작성자", - "device": "장치", - "sla_due": "SLA Due", - "created_at": "생성됨", - "updated_at": "업데이트됨", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "열기", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "댓글을 쓰세요...", - "internal_note": "내부 메모(최종 사용자에게 표시되지 않음)", - "attachments": "Attachments", - "upload_attachment": "첨부파일 업로드", - "download": "Download", - "connect_device": "장치에 연결", - "no_tickets": "티켓을 찾을 수 없습니다", - "no_comments": "아직 댓글이 없습니다", - "no_attachments": "첨부파일 없음", - "title_required": "제목은 ���수 항목입니다.", - "delete_confirm": "정말로 티켓 #{id}를 삭제하시겠습니까?", - "delete_success": "티켓이 삭제되었습니다.", - "created_success": "티켓이 성공적으로 생성되었습니다", - "updated_success": "티켓이 업데이트되었습니다.", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "티켓 검색...", - "assign_to_me": "나에게 할당", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "열기", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "활동 모니터링", - "subtitle": "애플리케이션 사용량 및 유휴 추적", - "device": "장치", - "hostname": "Hostname", - "sessions": "세션", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "주요 애플리케이션", - "app_name": "Application", - "window_title": "창 제목", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "세션 수", - "total_active": "총 활성", - "total_idle": "Total Idle", - "detail_count": "세부 기록", - "no_data": "사용 가능한 활동 데이터가 없습니다.", - "no_sessions": "세션 없음", - "filter_from": "에서", - "filter_to": "받는 사람", - "filter_apply": "필터 적용", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "기기 검색...", - "date_range": "Date Range", - "device_id": "장치 ID", - "session_start": "세션 시작", - "session_end": "세션 종료", - "user": "User", - "no_activity": "기록된 활동이 없습니다.", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "신청 없음" - }, - "automation": { - "title": "자동화 및 경고", - "subtitle": "경고 규칙, 원격 명령 및 SMTP 구성", - "rules": "Alert Rules", - "rules_subtitle": "알림을 트리거하는 조건 정의", - "alerts": "경고 기록", - "alerts_subtitle": "트리거된 경고 보기 및 확인", - "commands": "원격 명령", - "commands_subtitle": "원격 장치에 명령 보내기", - "smtp": "SMTP 구성", - "smtp_subtitle": "이메일 알림 설정", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "조건 유형", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "대상 장치", - "scope_all": "모든 장치", - "cooldown": "쿨다운(초)", - "notify_emails": "알림 이메일", - "enabled": "활성화됨", - "disabled": "장애인", - "create_rule": "규칙 생성", - "edit_rule": "규칙 편집", - "delete_rule": "규칙 삭제", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "트리거된 시간", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "보다 큼", - "op_gte": "크거나 같음", - "op_lt": "Less than", - "op_lte": "작거나 같음", - "op_eq": "같음", - "op_neq": "같지 않음", - "type_cpu_usage": "CPU 사용량(%)", - "type_memory_usage": "메모리 사용량(%)", - "type_disk_usage": "디스크 사용량(%)", - "type_offline_duration": "오프라인 기간(초)", - "type_idle_duration": "유휴 기간(초)", - "type_custom": "Custom", - "command_type": "명령 유형", - "command_payload": "명령/스크립트", - "command_result": "Result", - "command_status": "Status", - "send_command": "명령 보내기", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "실패", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "사용자 이름", - "smtp_pass": "비밀번호", - "smtp_from": "보낸 사람 주소", - "smtp_test": "연결 테스트", - "smtp_save": "설정 저장", - "smtp_test_success": "연결 성공", - "smtp_test_failed": "연결 실패", - "no_rules": "구성된 경고 규칙이 없습니다", - "no_alerts": "발생한 경고가 없습니다", - "no_commands": "전송된 명령이 없습니다", - "id_payload_required": "장치 ID 및 페이로드가 필요합니다", - "no_commands_sent": "아직 명령이 전송되지 않았습니다." - }, - "file_transfer": { - "title": "파일 전송", - "transfers": "Transfers", - "new_transfer": "새로운 전송", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "파일 크기", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "장치", - "initiated_by": "시작한 사람", - "created_at": "생성 날짜", - "cancel": "취소", - "cancel_confirm": "이 전송을 취소하시겠습니까?", - "download_file": "파일 다운로드", - "browse_files": "파일 찾아보기", - "select_file": "파일 선택", - "select_device": "장치 선택", - "no_transfers": "파일 전송 없음", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "실패", - "status_cancelled": "Cancelled", - "bytes_transferred": "전송된 바이트", - "chunks": "Chunks", - "transfer_started": "전송이 시작되었습니다.", - "transfer_completed": "전송 완료", - "transfer_failed": "전송 실패", - "transfer_cancelled": "이전이 취소되었습니다.", - "max_file_size": "최대 파일 크기: 4GB", - "error_too_large": "파일이 너무 큽니다.", - "error_no_device": "선택한 기기가 없습니다.", - "error_no_file": "선택한 파일이 없습니다." - }, - "network": { - "title": "네트워크 모니터링", - "targets": "���니터링 대상", - "add_target": "Add Target", - "edit_target": "대상 편집", - "delete_target": "대상 삭제", - "delete_confirm": "이 대상을 삭제하시겠습니까?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "시간 초과(밀리초)", - "interval": "간격(밀리초)", - "enabled": "활성화됨", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "기록 확인", - "stats": "Statistics", - "total_targets": "총 대상", - "targets_up": "Targets Up", - "targets_down": "타겟 다운", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "네트워크 도구", - "ping_tool": "Ping Test", - "tcp_tool": "TCP 포트 확인", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "모니터 시작", - "monitor_stop": "모니터 중지", - "monitor_running": "모니터가 실행 중입니다.", - "monitor_stopped": "모니터가 중지되었습니다.", - "no_targets": "모니터링 대상이 구성되지 않았습니다.", - "no_history": "확인 내역이 없습니다.", - "error_code": "Error", - "status_code": "HTTP 상태 코드", - "search_targets": "검색 대상...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "기록 확인", - "name_host_required": "이름과 호스트가 필요합니다", - "uptime": "Uptime", - "response_time": "응답 시간", - "avg_response": "평균 응답", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "응답 시간(ms)", - "uptime_percent": "Uptime %", - "last_24h": "지난 24시간", - "last_7d": "Last 7 days", - "last_30d": "지난 30일" - }, - "dataguard": { - "title": "데이터 보호", - "policies": "DLP 정책", - "add_policy": "정책 추가", - "edit_policy": "정책 편집", - "delete_policy": "정책 삭제", - "delete_confirm": "이 정책을 삭제하시겠습니까?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "활성화됨", - "disabled": "장애인", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB 장치", - "rule_type_file": "파일 작업", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "공급업체 ID(VID)", - "pid": "제품 ID(PID)", - "serial": "일련번호", - "device_class": "장치 클래스", - "drive_type": "Drive Type", - "file_extensions": "파일 확장자", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "파일", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "구성된 DLP 정책이 없습니다.", - "no_events": "기록된 DLP 이벤트가 없습니다.", - "stats": "Statistics", - "total_events": "총 이벤트", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "파일 이벤트", - "device_id": "장치 ID", - "policy_matched": "정책 일치", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "총 정책", - "active_policies": "활성 정책", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "정책", - "tab_events": "Events", - "search_policies": "검색 정책...", - "create_policy": "정책 생성", - "policy_type": "정책 유형", - "scope": "Scope", - "events_count": "Events", - "search_events": "이벤트 검색...", - "event_time": "Event Time", - "device": "장치", - "policy": "정책", - "detail": "Detail", - "scope_help": "쉼표로 구분된 장치 ID 또는 모두 비워 두세요.", - "scope_all": "모든 장치", - "active": "Active", - "type_file_type": "파일 유형", - "type_clipboard": "클립보드", - "type_screen_share": "화면 공유", - "type_file_transfer": "파일 전송", - "policy_desc": "정책 설명", - "type_usb": "USB" + "sessions": { + "device": "장치", + "operator": "운영자", + "duration": "시간", + "phase": "단계", + "amount": "금액" }, "reports": { - "title": "Reports", - "generate": "보고서 생성", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "장치 요약", - "type_activity": "활동 요약", - "type_security": "보안 보고서", - "type_tickets": "티켓 리포트", - "type_network": "네트워크 보고서", - "type_inventory": "재고 보고서", - "type_alerts": "경고 보고서", - "saved": "저장된 보고서", - "save_report": "보고서 저장", - "delete_report": "보고서 삭제", - "delete_confirm": "저장된 보고서를 삭제하시겠습니까?", - "no_saved": "저장된 보고서 없음", - "report_title": "Title", - "created_by": "작성자", - "created_at": "생성 날짜", - "filters": "Filters", - "date_from": "에서", - "date_to": "받는 사람", - "device_filter": "장치 ID", - "generated_at": "생성 날짜", - "section": "데이터 섹션", - "total_devices": "총 장치", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "플랫폼 배포", - "top_applications": "주요 애플리케이션", - "total_active": "총 활동 시간", - "total_idle": "총 유휴 시간", - "dlp_stats": "DLP 통계", - "banned_devices": "금지된 장치", - "audit_logs": "Audit Logs", - "ticket_stats": "티켓 통계", - "category_distribution": "카테고리 분포", - "priority_distribution": "우선배포", - "targets_status": "대상현황", - "os_distribution": "OS 배포", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "최근 알림", - "tab_generate": "보고서 생성", - "tab_saved": "저장된 보고서", - "type_devices_desc": "모든 장치, 플랫폼 및 상태 개요", - "type_activity_desc": "애플리케이션 사용량 및 유휴 시간 요약", - "type_security_desc": "금지 작업, DLP 이벤트 및 감사 로그", - "type_tickets_desc": "티켓 통계 및 SLA 성과", - "type_network_desc": "네트워크 모니터링 대상 및 가동 시간 데이터", - "type_inventory_desc": "하드웨어 및 소프트웨어 인벤토리 요약", - "type_alerts_desc": "경고 규칙 및 트리거된 경고 기록", - "report_name": "Report Name", - "format": "Format", - "save": "보고서 저장", - "preview": "Preview", - "download": "Download", - "delete_saved": "보고서 삭제", - "raw_json": "Raw JSON" + "session": "세션", + "summary": "요약", + "date": "날짜" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "테넌트 편집", - "delete_tenant": "테넌트 삭제", - "delete_confirm": "이 테넌트를 삭제하시겠습니까? 모든 장치 및 사용자 할당이 제거됩니다.", - "name": "Name", - "slug": "Slug", - "contact_name": "담당자 이름", - "contact_email": "연락처 이메일", - "max_devices": "최대 장치", - "max_devices_hint": "0 = 무제한", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "장치", - "users": "Users", - "assign_device": "장치 할당", - "assign_devices": "장치 할당", - "remove_device": "장치 제거", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "구성된 테넌트가 없습니다.", - "no_devices": "이 테넌트에 할당된 장치가 없습니다.", - "no_users": "이 테넌트에 할당된 사용자가 없습니다.", - "stats": "임차인 통계", - "total_devices": "총 장치", - "online_devices": "온라인 장치", - "total_users": "Total Users", - "created_at": "생성 날짜", - "updated_at": "업데이트 날짜", - "slug_exists": "테넌트 슬러그가 이미 존재합니다.", - "total_tenants": "총 임차인", - "active_tenants": "활성 테넌트", - "search": "임차인 검색...", - "create_tenant": "테넌트 생성", - "detail": "임차인 세부정보", - "contact": "Contact", - "enabled": "활성화됨", - "disabled": "장애인", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "조직 계약", + "new": "패키지 할당", + "org": "조직", + "package": "패키지", + "remaining": "남은 분", + "status": "상태", + "actions": "작업", + "suspend": "일시 중지", + "activate": "활성화", + "select_org": "조직 선택", + "select_package": "패키지 선택", + "no_orgs": "조직을 찾을 수 없습니다", + "no_packages": "먼저 패키지를 만드세요" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "장치 ID, 호스트 이름 또는 IP로 검색...", - "no_registrations": "No registration requests", - "col_device_id": "장치 ID", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "이 기기를 승인하시겠습니까? 서버 자격 증명을 수신하고 자동으로 연결할 수 있습니다.", - "approved_success": "장치 등록이 승인되었습니다.", - "reject_btn": "Reject", - "reject_title": "등록 거부", - "reject_confirm": "이 등록 요청을 거부하시겠습니까?", - "reject_reason": "이유(선택사항)", - "reject_reason_placeholder": "거부 이유를 입력하세요...", - "rejected_success": "기기 등록이 거부됨", - "delete_confirm": "이 등록 기록을 삭제하시겠습니까?", - "deleted_success": "등록 기록이 삭제되었습니다.", - "enrollment_title": "장치 등록", - "enrollment_subtitle": "BetterDesk 데스크톱 클라이언트에서 보류 중인 등록 요청", - "enrollment_empty": "대기 중인 등록 요청이 없습니다.", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "표시 이름", - "enrollment_display_name_placeholder": "이 장치의 이름을 입력하세요...", - "enrollment_sync_mode": "동기화 모드", - "enrollment_sync_silent": "무음 — 최소한의 원격 측정", - "enrollment_sync_standard": "표준 - 균형 잡힌 동기화", - "enrollment_sync_turbo": "터보 — 공격적인 동기화", - "enrollment_approved_success": "기기 등록이 승인됨", - "enrollment_rejected_success": "장치 등록이 거부됨", - "approve_title": "기기 승인", - "field_name": "기기 이름", - "field_name_placeholder": "이 기기의 이름을 입력하세요...", - "field_sync_mode": "동기화 모드", - "sync_standard": "표준 — 균형 잡힌 동기화", - "sync_silent": "자동 — 최소 텔레메트리", - "sync_turbo": "터보 — 적극적인 동기화", - "field_tags": "태그", - "field_tags_placeholder": "쉼표로 구분된 태그(예: 사무실, 노트북)...", - "field_tags_existing": "기존 태그", - "field_tag_add_placeholder": "새 태그 추가...", - "field_tag_add_btn": "추가", - "field_groups": "기기 그룹", - "field_folder": "폴더", - "field_folder_none": "폴더 없음", - "reject_ban_option": "이 기기 차단", - "reject_ban_hint": "기기가 차단되어 새 등록 요청을 보낼 수 없게 됩니다.", - "banner_open_mode": "등록이 열려 있습니다 — 새 RustDesk 클라이언트는 운영자 승인 없이 등록됩니다. 이 대기열을 사용하려면 설정에서 관리 모드를 설정하세요.", - "banner_locked_mode": "등록이 잠겨 있습니다 — 토큰에 바인딩된 기기만 등록할 수 있습니다. 알 수 없는 클라이언트의 운영자 승인에는 관리 모드가 필요합니다.", - "enrollment_settings_link": "등록 설정" + "export": { + "csv": "CSV 내보내기", + "pdf": "PDF 내보내기", + "sessions_csv": "세션 CSV 내보내기" }, - "backup": { - "title": "Backup", - "desc": "콘솔 구성, 사용자, 그룹 및 설정의 전체 백업을 다운로드하세요. Go server 피어 데이터는 BetterDesk 백엔드가 활성화되면 포함됩니다.", - "restore_title": "Restore", - "restore_desc": "콘솔 구성을 복원하려면 이전에 다운로드한 백업 파일을 업로드하세요. 아래에서 복원할 섹션을 선택하세요.", - "stat_users": "Users", - "stat_settings": "설정", - "stat_folders": "Folders", - "stat_groups": "그룹", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "백업 다운로드", - "creating": "백업 생성 중...", - "download_success": "백업이 성공적으로 다운로드되었습니다.", - "upload": "백업 업로드", - "restore_confirm": "이 백업에서 복원하시겠습니까? 선택한 섹션을 덮어씁니다.", - "restore_success": "백업이 성공적으로 복원되었습니다. 일부 변경 사항은 페이지를 다시 로드해야 할 수도 있습니다.", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "콘솔 설정", - "opt_branding": "브랜딩/테마", - "opt_folders": "장치 폴더", - "opt_groups": "사용자 및 장치 그룹", - "opt_addressbooks": "주소록", - "opt_users": "사용자 계정", - "opt_users_warning": "파괴적: 모든 사용자 계정을 백업 데이터로 대체합니다. 로그아웃되었을 수 있습니다.", - "no_file": "선택한 백업 파일이 없습니다.", - "invalid_json": "잘못된 백업 파일: JSON가 유효하지 않습니다.", - "invalid_format": "잘못된 백업 파일: BetterDesk 백업이 아닙니다.", - "stat_database": "데이터베이스 엔진", - "stat_keys": "서버 키 포함", - "stat_env": "환경 파일", - "stat_uploads": "브랜딩 파일", - "restart_required": "일부 복원된 구성 요소(키 / .env / Go 데이터베이스)는 적용되려면 서비스 재시작이 필요합니다.", - "security_warning": "이 백업에는 비밀 정보(서버 키, 환경 파일, 비밀번호 해시 및 2FA 시크릿)가 포함되어 있습니다. 안전하게 보관하고 공유하지 마세요.", - "restore_warning": "시크릿, 환경 파일 또는 Go 서버 데이터베이스를 복원하면 서버 ID를 덮어쓰고 이후 서비스 재시작이 필요합니다.", - "opt_database": "데이터베이스(모든 테이블)", - "opt_database_hint": "모든 콘솔 데이터를 다시 가져옵니다. 라이브 적용되며 재시작이 필요하지 않습니다.", - "opt_uploads": "브랜딩 파일", - "opt_uploads_hint": "로고 및 업로드된 이미지.", - "opt_secrets": "서버 키 및 시크릿", - "opt_secrets_warning": "Ed25519 서버 ID, API 키 및 세션 시크릿을 덮어씁니다. 서비스 재시작이 필요합니다.", - "opt_env": "환경 파일(.env)", - "opt_env_warning": "SESSION_SECRET, API 키, 데이터베이스 DSN, 포트 및 TLS 설정을 덮어씁니다. 서비스 재시작이 필요합니다.", - "opt_godb": "Go 서버 데이터베이스", - "opt_godb_warning": "Go 서버 SQLite 데이터베이스를 덮어씁니다(SQLite 백엔드 전용). 서비스 재시작이 필요합니다." + "report": { + "title": "작업 보고서", + "subtitle": "이 원격 세션 동안 수행한 작업을 설명하세요.", + "category": "카테고리", + "ticket_ref": "티켓 참조", + "summary": "수행한 작업", + "skip": "지금 건너뛰기", + "submit": "보고서 제출", + "summary_required": "요약은 필수입니다", + "saved": "작업 보고서가 저장되었습니다" }, - "cdap": { - "device_detail": "CDAP 장치", - "loading": "로드 중...", - "loading_widgets": "기기 위젯 로드 중...", - "load_error": "기기 데이터를 로드하지 못했습니다.", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "기기가 현재 오프라인 상태입니다. 위젯 값이 오래되었을 수 있습니다.", - "no_widgets": "사용 가능한 위젯이 없습니다.", - "no_widgets_desc": "이 장치는 위젯 정의와 함께 CDAP 매니페��트를 등록하지 않았습니다.", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "명령 확인", - "select_option": "선택", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "명령 보내기", - "command_sent": "명령이 성공적으로 전송되었습니다.", - "command_failed": "명령을 보내지 못했습니다.", - "devices_title": "CDAP 장치", - "devices_subtitle": "맞춤형 장치 애플리케이션 프로토콜을 통해 연결된 장치", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "기기 검색...", - "no_devices": "연결된 기기 없음", - "no_devices_desc": "현재 연결된 CDAP 장치가 없습니다. 장치가 게이트웨이에 연결되면 여기에 표시됩니다.", - "gateway_disabled": "CDAP 게이트웨이 비활성화됨", - "gateway_disabled_desc": "서버 구성에서 CDAP_ENABLED=true를 설정하여 CDAP 게이트웨이를 활성화하십시오.", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "CDAP 비활성화", - "enabled_restart": "CDAP가 활성화되었습니다. 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.", - "disabled_restart": "CDAP가 비활성화되었습니다. 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.", - "widgets": "위젯", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "활성 경고", - "alert_fired": "Alert fired", - "alert_cleared": "경고가 지워졌습니다.", - "no_alerts": "활성 알림 없음", - "connect_terminal": "터미널 연결", - "table_search": "검색...", - "just_now": "Just now", - "terminal_connecting": "기기에 연결 중...", - "terminal_disconnected": "Disconnected", - "terminal_error": "터미널 연결 실패", - "linked_devices": "연결된 장치", - "link_device": "링크 장치", - "unlink_device": "Unlink", - "no_linked_devices": "연결된 기기 없음", - "unlink_confirm": "이 기기를 연결 해제하시겠습니까?", - "link_prompt": "이 장치에 연결하려면 피어 ID를 입력하세요.", - "connect_desktop": "데스크톱 연결", - "connect_video": "스트림 연결", - "connect_files": "파일 찾아보기", - "connect_audio": "오디오 연결", - "upload_file": "Upload", - "desktop_connecting": "연결 중...", - "video_connecting": "연결 중...", - "files_connecting": "연결 중...", - "audio_connecting": "연결 중...", - "audio_streaming": "Streaming", - "clipboard_in": "클립보드 수신됨", - "clipboard_out": "클립보드가 전송되었습니다.", - "monitor_select": "모니터 선택", - "keyframe_request": "키프레임 요청", - "quality_auto": "자동 품질" + "empty": { + "packages": "아직 패키지가 없습니다. 위 버튼으로 만드세요.", + "contracts": "아직 조직 계약이 없습니다. 조직에 패키지를 할당하세요.", + "sessions": "아직 기록된 과금 세션이 없습니다.", + "reports": "아직 제출된 작업 보고서가 없습니다." }, - "desktop": { - "switch_mode": "데스크탑 모드", - "console_mode": "콘솔 모드", - "loading": "로드 중...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "닫기", - "widgets_mode": "위젯", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "위젯 추가", - "remove_widget": "위젯 제거", - "configure": "구성", - "search_widgets": "위젯 검색...", - "cat_monitoring": "Monitoring", - "cat_devices": "장치", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "여기에 메모를 작성하세요...", - "search_placeholder": "장치, 페이지, 설정 검색...", - "search_pages": "Pages", - "search_devices": "장치", - "search_no_results": "No results", - "exit_desktop": "Exit Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "장치 상태", - "widget_server_health": "서버 정보", - "widget_system_stats": "장치 게이지", - "widget_device_list": "장치 목록", - "widget_quick_actions": "빠른 작업", - "widget_recent_activity": "최근 활동", - "widget_notes": "Notes", - "widget_network_monitor": "네트워크 모니터", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP 장치", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "장치 그리드", - "widget_multi_gauge": "서버 게이지", - "widget_weekly_chart": "주간 활동", - "widget_quick_controls": "빠른 제어", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "연결 통계", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "사용자 세션", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "기기 없음", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "열기", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "구성에서 URL를 설정하세요.", - "label_server_uptime": "서버 가동 시간", - "label_merged_info": "서버 정보 위젯에 병합됨", - "label_with_notes": "메모 포함", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "총 장치", - "label_throughput": "Throughput", - "label_active_relays": "활성 릴레이", - "label_total_relayed": "총 중계", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "장치 필터링...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "CDAP 장치 없음", - "action_add_widget": "위젯 추가", - "label_merged_server_info": "서버 정보 위젯에 병합됨", - "wp_images": "Images", - "wp_colors": "단색", - "wp_custom_color": "맞춤 색상", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "widget_calendar": "Calendar", - "widget_process_monitor": "프로세스 모니터", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "데이터베이스 통계", - "widget_docker_containers": "Docker 컨테이너", - "widget_shell_command": "쉘 명령", - "widget_device_map": "장치 지도", - "widget_remote_connect": "원격 연결", - "label_no_online": "온라인 기기 없음", - "label_no_events": "오늘은 이벤트가 없습니다", - "label_event_title": "이벤트 제목:", - "label_no_data": "데이터가 없습니다", - "label_download_speed": "다운로드 속도", - "label_latency": "Latency", - "label_server": "서버", - "label_run_test": "Run Test", - "label_testing": "테스트 중...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "컨테이너 없음", - "label_docker_unavailable": "Docker를 사용할 수 없음", - "label_no_command": "구성된 명령이 없습니다.", - "label_no_output": "아직 출력이 없습니다", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "사전 설정 저장", - "label_load_preset": "Load Preset", - "label_preset_name": "사전 설정 이름:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "자동 정렬", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2열(같음)", - "label_2col_wide": "2열(60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "위젯 그룹", - "ungroup_widgets": "위젯 그룹 해제", - "group_widgets": "선택한 위젯 그룹화", - "snap_layouts": "스냅 레이아웃", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "���쪽 위에서 스냅", - "snap_top_right": "오른쪽 상단 스냅", - "snap_bottom_left": "왼쪽 아래 스냅", - "snap_bottom_right": "오른쪽 하단 스냅", - "aero_shake": "흔들어서 다른 사람을 최소화하세요", - "zone_resize": "영역 크기를 조정하려면 테두리를 드래그하세요.", - "zone_borders": "드래그 가능한 영역 경계", - "app_drawer": "Applications", - "search_apps": "앱 검색...", - "edit_shortcuts": "바로 가기 편집", - "widgets": "위젯", - "theme": "Theme", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "wp_unavailable": "이 서버에는 배경화면 이미지가 설치되어 있지 않습니다.", - "wp_download_hint": "배경화면 선택을 활성화하려면 public/wallpapers/ 디렉토리에 PNG 이미지를 배치하세요.", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "기존 패키지 할당", + "submit": "할당" }, - "desktop_login": { - "click_to_sign_in": "로그인하려면 아무 곳이나 클릭하거나 키를 누르세요.", - "username_placeholder": "사용자 이름", - "password_placeholder": "비밀번호", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "2단계 인증", - "totp_subtitle": "인증 앱의 6자리 코드를 입력하세요.", - "back_to_login": "로그인으로 돌아가기", - "fill_all_fields": "모든 필드를 작성해 주세요.", - "invalid_credentials": "잘못된 사용자 이름 또는 비밀번호", - "invalid_code": "잘못된 인증 코드", - "enter_6_digits": "6자리를 모두 입력하세요.", - "network_error": "네트워크 오류 - 연결을 확인하세요", - "session_expired": "세션이 만료되었습니다. 다시 로그인해 주세요." - }, - "tokens": { - "title": "장치 토큰", - "subtitle": "자동화된 장치 프로비저닝을 위한 등록 토큰 관리", - "enrollment_mode": "등록 모드", - "mode_open": "열기", - "mode_open_desc": "토큰 없이 모든 장치를 등록할 수 있습니다.", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "총 토큰", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "토큰 검색...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "대량 생성", - "create": "토큰 생성", - "edit": "토큰 편집", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "생성됨", - "actions": "Actions", - "name_placeholder": "예를 들어 사무실 PC 배치", - "max_uses": "Max Uses", - "max_uses_hint": "0 = 무제한", - "expires_in": "Expires In", - "no_expiration": "만료 없음", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "이 토큰에 대한 선택적 참고 사항...", - "count": "Count", - "count_range": "생성할 토큰 수(1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "토큰 생성됨", - "tokens_generated": "생성된 토큰", - "copy_warning": "지금 토큰을 복사하세요. 다시 표시되지 않습니다.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "이 토큰을 취소하시겠습니까? 이미 등록된 장치는 영향을 받지 않습니다.", - "revoked_success": "토큰이 취소되었습니다.", - "no_tokens": "토큰을 찾을 수 없습니다.", - "expired": "Expired", - "never": "Never", - "save": "저장", - "cancel": "취소", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "다음", - "prev": "Previous", - "skip": "Skip", - "finish": "마침", - "close": "닫기", - "step_of": "{total}의 {current}", - "console_sidebar_title": "탐색 사이드바", - "console_sidebar_text": "여기에서 모든 모듈에 액세스하세요. 해당 섹션으로 이동하려면 아이콘을 클릭하세요. 사이드바는 화면 크기에 맞게 조정됩니다.", - "console_expand_title": "사이드바 확장", - "console_expand_text": "사이드바를 확장하고 모든 탐색 항목에 대한 전체 레이블을 보려면 여기를 클릭하십시오. 접으려면 다시 클릭하세요.", - "console_search_title": "빠른 검색", - "console_search_text": "장치, 설정, 작업을 빠르게 검색하세요. 키보드 단축키는 Ctrl+K를 누르세요.", - "console_dashboard_title": "대시보드", - "console_dashboard_text": "서버 상태, 온라인 장치 및 빠른 작업을 표시하는 중앙 허브입니다. 중요한 지표를 한눈에 확인하세요.", - "console_devices_title": "장치 관리", - "console_devices_text": "연결된 모든 장치를 보고, 검색하고, 관리합니다. 상태별로 필터링하고, 태그를 할당하고, 개별 장치 설정을 구성합니다.", - "console_settings_title": "설정", - "console_settings_text": "서버 동작, 보안 옵션, 브랜딩 및 사용자 관리를 구성합니다. 필요에 맞게 BetterDesk를 사용자 정의하세요.", - "console_desktop_title": "데스크탑 모드", - "console_desktop_text": "위젯이 있는 창 작업 공간의 경우 데스크탑 모드로 전환하세요. 멀티태스킹 및 모니터링 대시보드에 적합합니다.", - "console_complete_title": "준비가 되었습니다!", - "console_complete_text": "사이드바 카테고리를 탐색하여 모든 기능을 찾아보세요. 이 가이드를 다시 시작하려면 언제든지 도움말 아이콘을 클릭하세요.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "상단 표시줄에는 시계, 빠른 컨트롤, 앱 서랍에 대한 액세스가 표시됩니��. 모든 앱을 탐색하려면 그리드 아이콘을 클릭하세요.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "앱 서랍을 열어 콘솔 기능을 플로팅 창으로 검색하고 실행하세요. 앱은 카테고리별로 정리되어 있습니다.", - "desktop_widgets_title": "위젯 대시보드", - "desktop_widgets_text": "맞춤형 작업 공간. 위젯은 실시간 정보를 표시하고 기능에 대한 빠른 액세스를 제공합니다. 드래그하여 재정렬하세요.", - "desktop_add_widget_title": "위젯 추가", - "desktop_add_widget_text": "사용 가능한 위젯을 찾아보려면 여기를 클릭하세요. 모니터링 디스플레이, 장치 목록, 메모 등 중에서 선택하세요.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "스냅 레이아웃", - "desktop_snap_text": "창을 화면 가장자리로 드래그하여 위치에 맞추거나 레이아웃 사전 설정을 위해 최대화 버튼을 마우스로 가리킵니다. 에어로 쉐이크를 사용해 보세요!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "앱은 드래그 가능하고 크기 조절이 가능한 창에서 열립니다. 제목 표시줄을 최소화, 최대화하거나 닫습니다. 위젯 위의 Windows 레이어.", - "desktop_search_title": "빠른 검색", - "desktop_search_text": "기기, 페이지, 설정 전반에서 검색하세요. 어디에서나 Ctrl+K를 누르면 즉시 검색이 열립니다.", - "desktop_complete_title": "데스크탑 모드가 준비되었습니다!", - "desktop_complete_text": "서랍에서 앱을 열고 창을 나란히 배열해 보세요. 빠른 대시보드 레이아웃을 위해 위젯 사전 설정을 사용하세요.", - "devices_folders_title": "장치 폴더", - "devices_folders_text": "장치를 폴더로 구성합니다. 목록을 필터링하려면 폴더를 클릭하세요. 이름을 바꾸거나 삭제하려면 마우스 오른쪽 버튼을 클릭하세요.", - "devices_search_title": "검색 및 필터", - "devices_search_text": "ID, 호스트 이름, 플랫폼으로 검색하세요. 온라인, 오프라인 또는 모든 장치만 표시하려면 상태 알약을 사용하세요.", - "devices_table_title": "장치 목록", - "devices_table_text": "자세한 내용을 보려면 장치 행을 클릭하세요. 연결, 태그 편집, 삭제 등의 빠른 작업을 수행하려면 오른쪽에 있는 케밥 메뉴를 사용하세요.", - "devices_complete_title": "장치 관리 준비 완료!", - "devices_complete_text": "폴더 간에 장치를 드래그하여 정리하세요. 장치를 두 번 클릭하여 세부 정보 패널을 엽니다.", - "settings_tabs_title": "설정 카테고리", - "settings_tabs_text": "일반, 보안, 모양 및 기타 구성 섹션 사이를 이동합니다.", - "settings_content_title": "구성", - "settings_content_text": "각 섹션에는 특정 서버 및 콘솔 설정이 포함되어 있습니다. 저장을 클릭하면 변경 사항이 저장됩니다.", - "settings_complete_title": "설정 개요", - "settings_complete_text": "2FA, API 키 및 사용자 관리에 대한 보안 설정을 확인하세요. 콘솔 모양을 사용자 정의하려면 모양을 방문하세요.", - "help": "도움말 및 튜토리얼", - "tour_console": "콘솔 투어", - "tour_desktop": "데스크탑 모드 둘러보기", - "tour_devices": "장치 둘러보기", - "tour_settings": "설정 둘러보기", - "reset_all": "모든 튜토리얼 재설정", - "tour_remote": "원격 세션 둘러보기", - "tour_organization": "조직 설정", - "tour_cdap": "CDAP 개요", - "tour_chat": "채팅 기본 사항", - "remote_toolbar_title": "원격 도구 모음", - "remote_toolbar_text": "도구 모음에서 디스플레이 제어, 클립보드 동기화, 특수 키 및 품질 설정에 액세스하세요. F11로 전체 화면을 전환합니다.", - "remote_canvas_title": "원격 디스플레이", - "remote_canvas_text": "원격화면 입니다. 내부를 클릭하면 원격 장치 제어가 시작됩니다. 마우스 및 키보드 입력이 자동으로 전달됩니다.", - "remote_clipboard_title": "클립보드 동기화", - "remote_clipboard_text": "컴퓨터와 원격 장치 간에 텍스트를 복사하여 붙여넣습니다. 원격 디스플레이에 초점을 맞춘 동안 평소처럼 Ctrl+C / Ctrl+V를 사용하세요.", - "remote_complete_title": "원격 세션 준비 완료!", - "remote_complete_text": "특수 키(Ctrl+Alt+Del, PrintScreen) 및 모니터 전환에는 도구 모음 버튼을 사용하세요. Esc 키를 누르거나 연결 끊기를 클릭하여 세션을 종료합니다.", - "org_overview_title": "조직", - "org_overview_text": "조직을 사용하면 사용자, 장치, 정책을 그룹화할 수 있습니다. 각 조직에는 자체 관리자, 운영자 및 설정이 있습니다.", - "org_create_title": "조직 만들기", - "org_create_text": "새 조직을 만들려면 여기를 클릭하세요. 이름, 슬러그 및 선택적 설명을 제공하십시오. 귀하는 새 조직의 소유자가 됩니다.", - "org_members_title": "회원 관리", - "org_members_text": "이메일로 사��자를 초대하고, 역할(관리자, 운영자, 사용자)을 할당하고, 액세스를 관리하세요. 구성원은 자신의 조직에 할당된 장치를 볼 수 있습니다.", - "org_devices_title": "장치 할당", - "org_devices_text": "조직에 장치를 추가합니다. 여기에 할당된 장치는 조직의 정책을 상속하며 해당 구성원에게 표시됩니다.", - "org_policies_title": "조직 정책", - "org_policies_text": "비밀번호 요구 사항, 세션 시간 초과, 2FA 시행, 조직의 장치 등록 규칙과 같은 보안 정책을 설정합니다.", - "org_complete_title": "조직 설정이 완료되었습니다!", - "org_complete_text": "팀을 초대하고 장치를 할당하여 조직 범위 관리를 시작하세요. 정책은 모든 회원에게 자동으로 적용됩니다.", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "연락처 및 그룹", - "chat_contacts_text": "연락처와 채팅 그룹을 확인하세요. 대화를 열려면 연락처를 클릭하세요. 녹색 점은 온라인 사용자를 나타냅니다.", - "chat_send_title": "메시지 보내기", - "chat_send_text": "메시지를 입력하고 Enter를 눌러 보내세요. 양측 모두 E2E를 지원하는 경우 메시지는 종단 간 암호화됩니다.", - "chat_file_title": "파일 공유", - "chat_file_text": "파일을 공유하려면 첨부 아이콘을 클릭하세요. 파일은 암호화되며 최대 50MB까지 가능합니다.", - "chat_complete_title": "채팅 준비 완료!", - "chat_complete_text": "운영자 및 최종 사용자와 실시간으로 채팅하세요. 팀 커뮤니케이션을 위해 그룹을 만듭니다. 모든 메시지는 읽음 확인을 지원합니다.", - "disable_tutorials": "튜토리얼 비활성화", - "enable_tutorials": "튜토리얼 활성화" - }, - "help_request": { - "title": "도움 요청", - "subtitle": "데스크톱 클라이언트로부터 들어오는 도움말 요청 관리", - "new_request": "새로운 도움 요청", - "device": "장치", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "도움 요청 없음", - "notification": "다음에서 받은 도움 요청", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "조직", - "create": "조직 만들기", - "edit": "조직 편집", - "detail": "조직 세부정보", - "name": "Name", - "slug": "슬러그(URL-안전)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "장치", - "invitations": "Invitations", - "settings": "설정", - "add_user": "Add User", - "assign_device": "장치 할당", - "create_invitation": "초대장 만들기", - "delete_confirm": "이 조직을 삭제하시겠습니까? 연결된 모든 사용자, 장치, 설정이 제거됩니다.", - "no_orgs": "아직 조직이 없습니다.", - "no_orgs_hint": "장치 및 사용자 관리를 시작하려면 첫 번째 조직을 만드세요.", - "connection_policy": "연결 정책", - "allow_file_transfer": "파일 전송 허용", - "allow_clipboard": "클립���드 허용", - "max_session_duration": "최대 세션 기간(분)", - "role_owner": "Owner", - "role_admin": "관리자", - "role_operator": "Operator", - "role_user": "구성원", - "username": "사용자 이름", - "password": "비밀번호", - "display_name": "표시 이름", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "장치 ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "할당된 사용자", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "이 조직에는 사용자가 없습니다.", - "no_devices": "이 조직에 할당된 기기가 없습니다.", - "no_invitations": "초대장이 없습니다.", - "user_added": "User added", - "user_removed": "사용자가 삭제되었습니다.", - "user_updated": "사용자 역할이 업데이트되었습니다.", - "device_assigned": "할당된 장치", - "device_unassigned": "할당되지 않은 기기", - "invitation_created": "초대장이 생성되었습니다.", - "settings_saved": "설정이 저장되었습니다.", - "org_deleted": "조직이 삭제되었습니다.", - "confirm_remove_user": "이 사용자를 조직에서 삭제하시겠습니까?", - "confirm_unassign_device": "조직에서 이 기기를 할당 해제하시겠습니까?", - "confirm_delete_org": "이 조직 및 모든 관련 데이터를 삭제하시겠습니까?", - "edit_role": "역할 편집", - "raw_settings": "원시 설정", - "key": "Key", - "value": "Value", - "save": "설정 저장", - "policy_unattended": "무인(즉시)", - "policy_attended": "참석함(확인 후)", - "policy_ask": "Always ask", - "expires_hours": "만료(시간)", - "loading_failed": "조직 데이터를 로드하지 못했습니다.", - "name_slug_required": "이름과 슬러그가 필요합니다", - "org_created": "조직이 생성되었습니다.", - "org_updated": "조직이 업데이트되었습니다.", - "create_new_user": "새로 만들기", - "add_existing_user": "기존 추가", - "none_available": "none", - "select_user": "사용자 선택", - "org_role": "조직 역할", - "link_user_hint": "선택된 사용자는 서버 계정 자격 증명을 사용하여 이 조직에 연결됩니다.", - "no_available_users": "모든 서버 사용자는 이미 이 조직에 연결되어 있습니다.", - "user_linked": "조직에 연결된 사용자" - }, - "chat": { - "e2e_enabled": "종단 간 암호화", - "e2e_establishing": "보안 채널 설정 중...", - "e2e_established": "보안 채널이 설정되었습니다", - "e2e_unsupported": "이 브라우저에서는 E2E 암호화가 지원되지 않습니다", - "typing_indicator": "입력 중...", - "read_receipt": "읽음", - "delivered": "전달됨", - "file_share": "파일", - "file_too_large": "파일이 너무 큽니다 (최대 50MB)", - "file_encrypted": "암호화된 파일 전송", - "presence_online": "온라인", - "presence_away": "자리 비움", - "presence_busy": "바쁨", - "presence_offline": "오프라인", - "key_rotation": "보안 키가 갱신되었습니다", - "new_message": "새 메시지", - "title": "채팅", - "contacts": "연락처", - "groups": "그룹", - "no_contacts": "아직 연락처가 없습니다", - "no_groups": "아직 그룹이 없습니다", - "no_messages": "아직 메시지가 없습니다", - "no_results": "결과를 찾을 수 없습니다", - "select_conversation": "대화를 선택하여 채팅을 시작하세요", - "type_message": "메시지를 입력하세요...", - "send": "보내기", - "attach_file": "파일 첨부", - "emoji": "이모지", - "search_messages": "메시지 검색", - "create_group": "그룹 만들기", - "group_name": "그룹 이름", - "group_members": "멤버", - "cancel": "취소", - "create": "만들기", - "members": "멤버", - "today": "오늘", - "yesterday": "어제", - "react": "반응", - "my_presence": "내 상태", - "search_placeholder": "연락처 및 메시지 검색", - "select_conversation_hint": "메시지를 보려면 대화를 선택하세요", - "info": "정보", - "group_name_placeholder": "그룹 이름을 입력하세요" - }, - "toast": { - "device_connected": "장치가 연결됨", - "device_disconnected": "장치 연결이 끊어졌습니다.", - "session_started": "원격 세션이 시작되었습니다.", - "session_ended": "원격 세션이 종료되었습니다", - "file_upload_complete": "파일 업로드 완료", - "settings_saved": "설정이 저장되었습니다.", - "error_generic": "오류가 발생했습니다", - "connection_lost": "연결 끊김", - "reconnecting": "다시 연결하는 중..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "관리 유틸리티 및 진단 도구", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "보내기", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "텍스트를 입력하세요...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "서버 이동", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "호스트 연결 가능성 및 대기 시간 확인", - "tcp_title": "TCP 포트 확인", - "tcp_desc": "TCP 포트 연결 테스트", - "ssl_title": "SSL 검사기", - "ssl_desc": "SSL/TLS 인증서 세부정보 검사", - "http_title": "HTTP 상태 점검", - "http_desc": "HTTP 엔드포인트 상태 확인", - "dns_title": "DNS Lookup", - "dns_desc": "호스트 이름을 IP 주소로 확인", - "whois_title": "DNS Records", - "whois_desc": "A, AAAA, MX, TXT, NS 레코드 쿼리", - "speed_title": "Speed Test", - "speed_desc": "다운��드 대역폭 측정", - "run_speed_test": "속도 테스트 실행", - "wol_title": "Wake-on-LAN", - "wol_desc": "장치를 깨우기 위해 매직 패킷 보내기", - "wol_sent": "매직 패킷이 전송되었습니다.", - "hash_title": "해시 생성기", - "hash_desc": "암호화 해시 생성", - "password_title": "비밀번호 생성기", - "password_desc": "안전한 무작위 비밀번호 생성", - "jwt_title": "JWT Decoder", - "jwt_desc": "JSON 웹 토큰 디코딩 및 검사", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 데이터 인코딩 또는 디코딩", - "url_title": "URL Encoder", - "url_desc": "URL 구성요소 인코딩 또는 디코딩", - "processes_title": "프로세스 목록", - "processes_desc": "실행 중인 시스템 프로세스 보기", - "disk_title": "Disk Usage", - "disk_desc": "디스크 파티션 사용량 보기", - "db_title": "데이터베이스 통계", - "db_desc": "데이터베이스 테이블 통계 보기", - "docker_title": "Docker 컨테이너", - "docker_desc": "실행 중인 Docker 컨테이너 보기", - "logs_title": "Log Viewer", - "logs_desc": "최근 로그 출력 보기", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "유효기간: 부터", - "valid_to": "유효한 대상", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "데이터가 없습니다", - "no_docker": "Docker 컨테이너가 없거나 Docker를 사용할 수 없습니다.", - "no_logs": "사용 가능한 로그 줄이 없습니다." - }, - "policies": { - "title": "조직 정책", - "subtitle": "조직의 보안, 연결 및 기능 정책 관리", - "select_org": "조직", - "select_org_placeholder": "조직 선택...", - "select_org_first": "정책 감사 로그를 보려면 조직을 선택하세요.", - "configured": "구성됨", - "connection_title": "연결 정책", - "connection_desc": "원격 세션 설정 방법 제어", - "connection_mode": "연결 모드", - "mode_attended": "유인 (사용자 승인 필요)", - "mode_unattended": "무인 (항상 허용)", - "mode_ask": "항상 물어보기", - "max_session": "최대 세션 시간 (분)", - "idle_lock": "유휴 잠금 (분)", - "wallpaper_policy": "세션 중 배경화면", - "wallpaper_show": "표시", - "wallpaper_hide_session": "세션 중 숨기기", - "wallpaper_hide_always": "항상 숨기기", - "features_title": "기능 정책", - "features_desc": "장치의 특정 기능 활성화 또는 비활성화", - "allow_file_transfer": "파일 전송 허용", - "allow_clipboard": "클립보드 동기화 허용", - "allow_audio": "오디오 스트리밍 허용", - "allow_recording": "세션 녹화 허용", - "security_title": "보안 정책", - "security_desc": "조직 장치에 보안 요구사항 적용", - "require_2fa": "무인 액세스에 2FA 필요", - "password_min_length": "최소 비밀번호 길이", - "password_require_special": "특수문자 필요", - "password_max_age": "비밀번호 최대 수명 (일, 0=제한없음)", - "allowed_operators": "허용된 운영자 역할 (쉼표 구분)", - "network_title": "네트워크 정책", - "network_desc": "릴레이 서버 및 직접 연결 제어", - "block_direct_p2p": "직접 P2P 차단 (릴레이 강제)", - "allowed_relays": "허용된 릴레이 서버 (행당 1개)", - "ip_allowlist": "IP 화이트리스트 (CIDR, 행당 1개)", - "update_title": "업데이트 정책", - "update_desc": "자동 업데이트 및 업데이트 채널 제어", - "auto_update": "자동 업데이트 활성화", - "update_channel": "업데이트 채널", - "audit_title": "정책 변경", - "audit_desc": "최근 정책 변경 이력", - "no_audit": "기록된 정책 변경이 없습니다.", - "save_success": "정책이 성공적으로 저장되었습니다.", - "save_failed": "정책을 저장하지 못했습니다.", - "load_failed": "정책을 로드하지 못했습니다.", - "block_direct_p2p_hint": "이 조직의 기기에 적용됩니다. 전역 기본값은 설정 → 연결 전략에 있습니다." - }, - "attestation": { - "title": "장치 인증", - "subtitle": "장치 ID 검증 및 하드웨어 지문 모니터링", - "verified": "검증됨", - "pending": "대기 중", - "failed": "실패", - "device_list": "인증 기록", - "device_list_desc": "하드웨어 지문 및 ID 검증 상태", - "col_device": "장치 ID", - "col_hostname": "호스트명", - "col_fingerprint": "지문", - "col_status": "상태", - "col_last_check": "마지막 확인", - "col_actions": "작업", - "no_records": "인증 기록을 찾을 수 없습니다.", - "verify_success": "확인된 것으로 표시된 기기", - "verify_failed": "기기를 확인하지 못했습니다.", - "revoke_success": "기기 증명이 취소되었습니다.", - "revoke_failed": "증명을 취소하지 못했습니다." - }, - "fleet": { - "title": "플릿 관리", - "tab_resources": "리소스", - "tab_tasks": "작업", - "tab_builder": "빌더", - "tab_compliance": "컴플라이언스", - "res_title": "리소스 매핑", - "res_all_types": "모든 유형", - "res_type_printer": "프린터", - "res_type_network_drive": "네트워크 드라이브", - "res_type_dns": "DNS 서버", - "res_type_proxy": "프록시", - "res_type_vpn": "VPN", - "res_add": "리소스 추가", - "res_name": "리소스 이름", - "res_type": "유형", - "res_address": "주소 / 경로", - "res_target": "대상", - "res_scope": "범위", - "res_scope_org": "조직", - "res_scope_group": "그룹", - "res_scope_device": "장치", - "res_scope_value": "범위 값", - "res_status": "상태", - "res_active": "활성", - "res_inactive": "비활성", - "res_no_data": "리소스를 찾을 수 없습니다. '추가'를 클릭하세요.", - "res_confirm_delete": "이 리소스를 삭제하시겠습니까?", - "task_title": "작업 스케줄러", - "task_all_status": "모든 상태", - "task_status_pending": "대기 중", - "task_status_running": "실행 중", - "task_status_success": "성공", - "task_status_failed": "실패", - "task_search": "작업 검색…", - "task_create": "작업 생성", - "task_name": "작업 이름", - "task_type": "유형", - "task_type_script": "스크립트", - "task_type_install": "설치", - "task_type_update": "업데이트", - "task_type_restart": "재시작", - "task_type_deploy": "배포", - "task_type_scan": "스캔", - "task_targets": "대상", - "task_targets_help": "장치 ID 또는 그룹명 (쉼표 구분)", - "task_schedule": "스케줄", - "task_schedule_once": "한 번만", - "task_schedule_cron": "Cron", - "task_schedule_interval": "간격", - "task_schedule_value": "스케줄 값", - "task_script": "스크립트 / 명령", - "task_retries": "재시도", - "task_timeout": "타임아웃 (초)", - "task_last_run": "마지막 실행", - "task_no_data": "작업을 찾을 수 없습니다. 새 작업을 만드세요.", - "task_confirm_delete": "이 작업을 삭제하시겠습니까?", - "task_output": "작업 출력", - "task_retry": "재시도", - "builder_title": "비주얼 워크플로우 빌더", - "builder_select_workflow": "워크플로우 선택…", - "builder_new": "새로 만들기", - "builder_save": "저장", - "builder_export": "내보내기", - "builder_execute": "실행", - "builder_dry_run": "테스트 실행", - "builder_triggers": "트리거", - "builder_conditions": "조건", - "builder_actions": "액션", - "builder_results": "결과", - "builder_transforms": "변환", - "builder_properties": "속성", - "builder_no_selection": "노드를 선택하여 속성을 편집하세요.", - "workflow_name": "워크플로우 이름:", - "comp_title": "소프트웨어 컴플라이언스", - "comp_compliant": "준수", - "comp_warning": "경고", - "comp_critical": "심각", - "comp_score": "평균 점수", - "comp_device": "장치", - "comp_hostname": "호스트명", - "comp_os": "OS", - "comp_score_col": "점수", - "comp_issues": "문제", - "comp_last_scan": "마지막 스캔", - "comp_scan": "스캔", - "comp_scan_all": "전체 스캔", - "comp_remediate": "수정", - "comp_remediate_confirm": "이 장치에서 자동 수정을 실행하시겠습니까?", - "comp_no_data": "컴플라이언스 데이터 없음. 스캔을 실행하세요.", - "save": "저장", - "cancel": "취소", - "close": "닫기", - "edit": "편집", - "delete": "삭제", - "actions": "작업", - "all_orgs": "모든 조직", - "builder_node_trigger_manual": "수동 트리거", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "이벤트 트리거", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "서비스 다시 시작", - "builder_node_action_file_deploy": "파일 배포", - "builder_node_action_message": "메시지 보내기", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "알림 보내기", - "builder_node_result_chain": "체인 작업흐름", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "조직 선택…", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "네트워크 드라이브", - "type_dns": "DNS 서버", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "리소스 추가", - "edit_resource": "리소스 편집", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "주소 / 경로", - "scope_org": "조직", - "scope_group": "그룹", - "scope_device": "장치", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "이 항목을 삭제하시겠습니까?", - "all_statuses": "모든 상태", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "실패", - "search_tasks": "작업 검색…", - "create_task": "작업 만들기", - "edit_task": "작업 편집", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "파일 배포", - "task_type_registry": "Registry", - "target_devices": "대상 장치", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "스크립트/명령", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "로드 중", - "no_output": "사용 가능한 출력 없음", - "error_loading": "데이터를 로드하는 중에 오류가 발생했습니다.", - "select_workflow": "워크플로 선택…", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "수동 트리거", - "node_schedule": "Schedule", - "node_event": "이벤트 트리거", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "서비스 다시 시작", - "node_file_deploy": "파일 배포", - "node_send_message": "메시지 보내기", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "알림 보내기", - "node_chain": "체인 작업흐름", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "모든 조직", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "장치", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "이 기기에서 자동 치료를 실행하시겠습니까?" - }, - "scaling": { - "title": "스케일링 및 릴레이 관리", - "tab_overview": "개요", - "tab_relays": "릴레이 노드", - "tab_rules": "할당 규칙", - "tab_capacity": "용량 계획", - "arch_title": "네트워크 아키텍처", - "arch_loading": "아키텍처 다이어그램 로딩 중...", - "stat_relay_nodes": "릴레이 노드", - "stat_total_devices": "전체 장치", - "stat_active_sessions": "활성 세션", - "stat_bandwidth": "전체 대역폭", - "relay_health": "릴레이 상태", - "no_relays": "구성된 릴레이 노드가 없습니다. 부하 분산을 위해 첫 번째 노드를 추가하세요.", - "relay_search": "릴레이 검색...", - "relay_add": "릴레이 노드 추가", - "relay_edit": "릴레이 노드 편집", - "col_name": "이름", - "col_address": "주소", - "col_location": "위치", - "col_devices": "장치", - "col_sessions": "세션", - "col_bandwidth": "대역폭", - "col_status": "상태", - "col_actions": "작업", - "col_priority": "우선순위", - "col_rule_name": "규칙 이름", - "col_match": "일치", - "col_target_relay": "대상 릴레이", - "col_fallback": "폴백", - "status_online": "온라인", - "status_degraded": "저하", - "status_offline": "오프라인", - "status_enabled": "활성화", - "status_disabled": "비활성화", - "confirm_delete_relay": "이 릴레이 노드를 삭제하시겠습니까?", - "confirm_delete_rule": "이 할당 규칙을 삭제하시겠습니까?", - "rules_hint": "할당 규칙은 특정 장치 그룹을 어떤 릴레이 서버가 처리할지 결정합니다. 규칙은 우선순위순으로 평가됩니다 (가장 낮은 것이 우선).", - "rule_add": "규칙 추가", - "rule_edit": "규칙 편집", - "rule_match_type": "일치 유형", - "match_subnet": "서브넷", - "match_group": "장치 그룹", - "match_tag": "장치 태그", - "match_location": "위치", - "rule_match_value": "일치 값", - "fallback_master": "마스터 서버", - "fallback_nearest": "가장 가까운 릴레이", - "relay_max_sessions": "최대 세션", - "relay_max_bandwidth": "최대 대역폭 (Mbps)", - "cap_tiers": "용량 티어", - "cap_loading": "용량 데이터 로딩 중...", - "cap_recommendations": "권장 사항", - "cap_no_recs": "사용 가능한 권장 사항이 없습니다.", - "cap_planning": "인프라 계획", - "cap_config": "구성", - "cap_max_devices": "최대 장치", - "cap_max_sessions": "최대 세션", - "cap_current": "현재", - "cap_utilization": "이용률", - "cap_tier_devices": "장치 용량", - "cap_tier_sessions": "세션 용량", - "cap_tier_bandwidth": "대역폭 용량", - "cap_single_sqlite": "단일 서버 (SQLite)", - "cap_single_pg": "단일 서버 (PostgreSQL)", - "cap_master_3": "마스터 + 3 릴레이", - "cap_master_10": "마스터 + 10 릴레이", - "rec_no_relays": "구성된 릴레이 노드가 없습니다. 성능과 이중화를 위해 릴레이 추가를 고려하세요.", - "rec_devices_high": "장치 이용률이 높습니다. 릴레이 노드 추가를 고려하세요.", - "rec_sessions_high": "세션 용량이 한계에 다가가고 있습니다. 인프라 업그레이드를 고려하세요.", - "rec_cpu_high": "일부 릴레이 노드의 CPU 사용률이 높습니다. 부하 분산을 고려하세요.", - "rec_all_good": "모든 시스템이 정상 매개변수 내에서 작동 중입니다. 조치가 필요하지 않습니다.", - "save": "저장", - "cancel": "취소", - "edit": "편집", - "delete": "삭제", - "close": "닫기", - "no_rules": "할당 규칙이 없습니다.", - "relays_info_banner": "이 목록은 정보 제공용입니다. 클라이언트가 실제로 사용하는 릴레이 서버는 BetterDesk 서버의 RELAY_SERVERS 환경 변수를 통해 구성됩니다.", - "relay_name_address_required": "이름과 주소가 필요합니다.", - "relay_save_failed": "릴레이 노드를 저장하지 못했습니다.", - "relay_delete_failed": "릴레이 노드를 삭제하지 못했습니다.", - "relay_saved": "릴레이 노드가 저장되었습니다.", - "relay_deleted": "릴레이 노드가 삭제되었습니다.", - "rule_name_value_required": "규칙 이름과 일치 값이 필요합��다.", - "rule_save_failed": "규칙을 저장하지 못했습니다.", - "rule_delete_failed": "규칙을 삭제하지 못했습니다.", - "rule_saved": "규칙이 저장되었습니다.", - "rule_deleted": "규칙이 삭제되었습니다." - }, - "cross_platform": { - "title": "크로스 플랫폼 호환성", - "tab_matrix": "호환성 매트릭스", - "tab_distribution": "분포", - "tab_protocols": "프로토콜", - "tab_limitations": "제한 사항", - "matrix_hint": "모든 지원 플랫폼에 대한 기능 지원 매트릭스. 녹색=완전 지원, 노란색=부분 지원, 회색=사용 불가, 파란색=계획 중.", - "col_feature": "기능", - "legend_full": "완전 지원", - "legend_partial": "부분 지원", - "legend_none": "사용 불가", - "legend_planned": "계획 중", - "platform_breakdown": "플랫폼 분포", - "arch_breakdown": "아키텍처 분포", - "version_breakdown": "버전 분포", - "summary": "요약", - "total_devices": "전체 디바이스", - "unique_platforms": "플랫폼", - "unique_archs": "아키텍처", - "unique_versions": "클라이언트 버전", - "no_devices": "아직 등록된 디바이스가 없습니다.", - "protocols_hint": "프로토콜 기능 협상을 통해 각 클라이언트가 지원되는 기능만 수신합니다. 서버는 보고된 기능에 따라 동작을 조정합니다.", - "capability_negotiation": "기능 협상", - "codec_support": "코덱 지원 (온라인 디바이스)", - "feature_support": "기능 지원 (온라인 디바이스)", - "no_codec_data": "온라인 디바이스의 코덱 데이터가 없습니다.", - "no_feature_data": "온라인 디바이스의 기능 데이터가 없습니다.", - "protobuf_schema": "ClientCapabilities Protobuf 스키마", - "diagram_client": "클라이언트", - "diagram_server": "BetterDesk 서버", - "diagram_peer": "원격 피어", - "limitations_hint": "각 플랫폼에는 사용 가능한 기능에 영향을 미치는 특정 제한이 있습니다. 배포 계획 시 확인하세요.", - "feat_desktop_client": "데스크톱 클라이언트", - "feat_background_agent": "백그라운드 에이전트", - "feat_remote_target": "원격 대상", - "feat_screen_capture": "화면 캡처", - "feat_input_injection": "입력 인젝션", - "feat_file_transfer": "파일 전송", - "feat_clipboard_sync": "클립보드 동기화", - "feat_audio_streaming": "오디오 스트리밍", - "feat_chat": "채팅", - "feat_h264": "H.264 코덱", - "feat_vp9": "VP9 코덱", - "feat_av1": "AV1 코덱", - "feat_cdap_agent": "CDAP 에이전트", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "웹 브라우저", - "platform_chromeos": "ChromeOS", - "status_production": "프로덕션", - "status_testing": "테스트", - "status_planned": "계획 중", - "status_limited": "제한됨", - "status_experimental": "실험적", - "limit_win_uac": "서비스 설치 및 보안 데스크톱에서의 입력 인젝션에 UAC 권한 상승이 필요합니다.", - "limit_win_service": "NSSM 서비스로 실행됩니다. 설치에 관리자 권한이 필요합니다.", - "limit_win_firewall": "Windows 방화벽 규칙에서 릴레이 연결을 위해 포트 21115-21119를 허용해야 합니다.", - "limit_linux_wayland": "Wayland 컴포저는 프로그래매튱 화면 캡처를 제한합니다. PipeWire 포털 API가 필요합니다.", - "limit_linux_pipewire": "오디오 캡처에 PipeWire가 필요합니다. PulseAudio 폴백은 사용 가능하지만 제한적입니다.", - "limit_linux_arm": "ARM64 빌드 사용 가능. 일부 코덱은 소프트웨어 디코딩을 사용할 수 있습니다 (느림).", - "limit_mac_screen": "시스템 설정 > 개인 정보 보호 및 보안에서 화면 녹화 권한이 필요합니다.", - "limit_mac_signing": "배포를 위해 Apple Developer ID로 서명되어야 합니다.", - "limit_mac_notarize": "macOS Gatekeeper용 공증이 필요합니다 (App Store 외 배포).", - "limit_android_projection": "MediaProjection API는 각 캡처 세션마다 사용자 동의가 필요합니다.", - "limit_android_accessibility": "입력 인젝션에 AccessibilityService가 필요합니다. Android 14+부터 제한됩니다.", - "limit_android_battery": "백그라운드 서비스는 Doze 모드로 제한됩니다. 배터리 최적화 예외가 필요할 수 있습니다.", - "limit_ios_capture": "Apple은 백그라운드 화면 캡처를 금지합니다. 뷰어 모드만 지원됩니다.", - "limit_ios_input": "입력 인젝션이 허용되지 않습니다. 원격 보기와 채팅만 가능합니다.", - "limit_ios_appstore": "App Store를 통한 배포만 가능. 베타 테스트에 TestFlight.", - "limit_web_https": "WebCodecs API와 WebRTC는 HTTPS가 필요합니다. HTTP는 JMuxer로 폴백합니다 (코덱 제한).", - "limit_web_codec": "코덱 지원은 브라우저에 따라 다름. H.264는 널리 지원되고, VP9/AV1은 다양합니다.", - "limit_web_performance": "브라우저 샌드박스로 인한 성능 제한. 직접 하드웨어 가속 없음.", - "limit_chrome_crostini": "전체 에이전트 지원은 Crostini Linux 컨테이너 내에서만 가능.", - "limit_chrome_pwa": "PWA 모드는 웹 기능만 제공. 네이티브 에이전트 기능 없음.", - "limit_chrome_input": "Crostini 컨테이너 외부에서의 입력 인젝션은 지원되지 않습니다.", - "feat_session_recording": "세션 녹화", - "feat_multi_monitor": "다중 모니터", - "feat_unattended_access": "무인 접속", - "limit_win_virtual_account": "서비스는 LocalSystem 대신 격리된 가상 계정에서 실행됩니다. 사용자 지정 로그 경로에는 ACL 조정이 필요할 수 있습니다.", - "limit_linux_unprivileged": "서비스는 systemd 강화(NoNewPrivileges, ProtectSystem=strict)를 갖춘 전용 비특권 'betterdesk' 계정에서 실행됩니다." - }, - "security_audit": { - "title": "보안 감사", - "tab_overview": "개요", - "tab_events": "감사 이벤트", - "tab_hardening": "보안 강화", - "tab_vulnerabilities": "취약점", - "security_score": "보안 점수", - "failed_logins": "로그인 실패(24h)", - "active_bans": "활성 차단", - "api_keys": "API 키", - "old_keys": "오래된 키(>90일)", - "security_checks": "보안 검사", - "tls_status": "TLS 상태", - "pass": "통과", - "warning": "경고", - "fail": "실패", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket 보안", - "enabled": "활성화", - "disabled": "비활성화", - "all_events": "모든 이벤트", - "event_login_failed": "로그인 실패", - "event_login_success": "로그인 성공", - "event_peer_banned": "장치 차단", - "event_ip_banned": "IP 차단", - "event_config_changed": "구성 변경", - "event_key_created": "키 생성", - "refresh": "새로고침", - "col_time": "시간", - "col_action": "작업", - "col_actor": "행위자", - "col_target": "대상", - "col_ip": "IP 주소", - "col_details": "세부사항", - "no_events": "감사 이벤트가 없습니다.", - "hardening_hint": "BetterDesk 배포의 보안 강화 우선순위. 심각도 순 정렬.", - "no_hardening": "보안 강화 항목이 없습니다.", - "vuln_hint": "의존성 취약점 스캔 결과. 정기적으로 npm audit를 실행하세요.", - "no_vulns": "취약점이 발견되지 않았습니다. 의존성이 안전합니다." - }, - "languages": { - "title": "언어 관리", - "total_languages": "총 언어", - "fully_translated": "완전 번역됨", - "needs_review": "검토 필요", - "reference_keys": "참조 키", - "no_languages": "언어 파일을 찾을 수 없습니다.", - "badge_reference": "Reference", - "badge_review": "검토 필요", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "누락된 항목 보기", - "fix_missing": "Fix Missing", - "missing_keys_for": "다음 항목에 대한 키가 누락되었습니다.", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "그리고 {n} 더...", - "all_keys_present": "모든 열쇠가 있습니다!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code}의 누락된 키는 수동으로 번역해야 합니다.", - "no_fix_needed": "고칠 누락된 키가 없습니다." - }, - "resource_control": { - "title": "자원 제어", - "tab_overview": "개요", - "tab_usb": "USB Control", - "tab_optical": "광학 드라이브", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "리소스 할당량", - "compliance_by_category": "카테고리별 규정 준수", - "device_compliance": "장치 규정 준수", - "search_devices": "기기 검색...", - "col_device": "장치", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "총 장치", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "준수율", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "구성", - "no_devices": "기기를 찾을 수 없습니다.", - "usb_title": "USB 포트 제어", - "usb_hint": "선택한 장치 또는 조직 전체 기본 정책에 대한 USB 저장 장치 액세스를 제어합니다.", - "usb_storage_policy": "USB 스토리지 정책", - "usb_whitelist": "화이트리스��에 등록된 장치(한 줄에 하나씩)", - "usb_whitelist_hint": "VID:PID(예: 0781:5583)", - "usb_audit_log": "USB 장치 연결 기록", - "optical_title": "광학 드라이브 제어", - "optical_hint": "선택한 장치에 대한 CD/DVD/블루레이 드라이브 액세스를 제어합니다.", - "optical_policy": "광학 드라이브 정책", - "optical_audit_log": "광학 드라이브 액세스 기록", - "monitors_title": "모니터 관리", - "monitors_hint": "최대 개수, 해상도 적용, 밝기 및 전원 일정을 포함한 모니터 설정을 구성합니다.", - "monitors_max_count": "최대 모니터 수(0 = 무제한)", - "monitors_max_hint": "0은 제한이 없음을 의미합니다.", - "monitors_resolution": "최대 해상도", - "monitors_brightness": "밝기 제한", - "monitors_power_schedule": "전원 일정", - "monitors_power_hint": "예를 들어 휴무:22:00-06:00", - "disks_title": "디스크 액세스 제어", - "disks_hint": "읽기 전용 모드, 암호화 적용, 파티션 가시성을 포함한 디스크 액세스 정책을 구성합니다.", - "disks_readonly": "강제 읽기 전용 모드", - "disks_encryption": "암호화 필요(BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T를 활성화합니다. 모니터링", - "disks_hidden": "숨겨진 파티션", - "disks_hidden_hint": "쉼표로 구분된 드라이브 문자 또는 마운트 지점", - "quotas_title": "리소스 할당량", - "quotas_hint": "선택한 장치에 대한 사용자별 CPU, RAM, 대역폭 및 디스크 할당량을 설정합니다.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "대역폭 제한(Mbps)", - "quotas_bandwidth_hint": "0 = 무제한", - "quotas_disk_quota": "디스크 할당량(GB)", - "quotas_disk_hint": "0 = 무제한", - "quotas_process_whitelist": "프로세스 화이트리스트(한 줄에 하나씩)", - "quotas_process_hint": "예를 들어 크롬.exe, 코드.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "화이트리스트만", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "소프트웨어 업데이트", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "설치된 버전", - "latest_version": "Latest version", - "status": "Status", - "check_now": "업데이트 확인", - "checking": "Checking…", - "up_to_date": "최신", - "update_available": "업데이트 가능", - "changelog": "Release Notes", - "no_changelog": "사용 가능한 출시 노트가 없습니다.", - "files_changed": "변경된 파일", - "files": "파일", - "changes_unavailable": "파일 변경 목록을 로드할 수 없습니다. 여전히 업데이트를 설치할 수 있습니다.", - "create_backup": "업데이트하기 전에 백업 만들기", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "업데이트 설치 중…", - "creating_backup": "백업 생성 중…", - "downloading": "파일 다운로드 중…", - "install_success": "업데이트가 성공적으로 설치되었습니다. 콘솔을 다시 시작하는 중입니다…", - "install_failed": "업데이트 설치 실패", - "restarting": "콘솔이 다시 시작되기를 기다리는 중…", - "restart_complete": "콘솔이 성공적으로 다시 시작되었습니다.", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "선택한 업데이트 버전이 없습니다. 먼저 업데이트를 확인하세요.", - "backups_title": "백업 업데이트", - "backups_desc": "각 업데이트 전에 자동으로 생성된 사전 업데이트 백업", - "no_backups": "업데이트 백업을 찾을 수 없습니다.", - "restore": "Restore", - "restore_confirm": "이 백업에서 복원하시겠습니까? 변경된 파일을 덮어씁니다.", - "restore_success": "백업이 성공적으로 복원되었습니다. 콘솔을 다시 시작하는 중입니다…", - "baseline_set": "기준 세트", - "commits_behind": "뒤에 커밋", - "total_files": "총 파일 수", - "applied": "Applied", - "failed": "실패", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "서버 이동", - "component_agent": "Agent", - "component_scripts": "스크립트 및 Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "이동 확인 중…", - "go_not_found": "설치되지 않은 상태로 이동", - "go_check_failed": "Go 가용성을 확인할 수 없습니다.", - "server_building": "Go server 컴파일 중… 이 작업은 몇 분 정도 걸릴 수 있습니다.", - "server_built": "서버 바이너리 컴파일", - "server_build_failed": "서버 컴파일 실패", - "server_stale_title": "서버 바이너리가 오래됨", - "server_stale_desc": "Go server 소스가 업데이트되었지만 실행 중인 바이너리가 다시 빌드되지 않았습니다. 보안 및 라이브러리 업데이트를 적용하려면 지금 다시 빌드하세요.", - "rebuild_server": "서버 바이너리 재구축", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "서버 바이너리가 다시 빌드되고 다시 시작되었습니다.", - "rebuild_server_failed": "서버 바이너리 재구축 실패", - "server_deployed": "배포된 서버 바이너리", - "server_deploy_failed": "서버 배포 실패", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "서버 소스 다운로드 중…", - "delete": "삭제", - "delete_confirm": "백업 {name}를 영구적으로 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.", - "delete_success": "백업이 삭제되었습니다.", - "delete_failed": "백업을 삭제하지 못했습니다.", - "retention_label": "N개의 최신 백업 유지", - "retention_hint": "이전 백업은 업데이트할 때마다 자동으로 삭제됩니다. 모든 백업을 유지하려면 0을 사용합니다.", - "retention_saved": "보관 설정이 저장되었습니다.", - "retention_invalid": "보존 기간은 0에서 1000 사이의 정수여야 합니다.", - "retention_required_for_prune": "먼저 보존 값을 0보다 큰 값으로 설정하세요.", - "prune_now": "Apply now", - "prune_confirm": "{n}의 최신 백업만 유지하고 나머지는 삭제하시겠습니까?", - "prune_done": "정리된 {n} 백업", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "업데이트 방법", - "strategy_download": "사전 빌드된 바이너리 다운로드", - "strategy_compile": "소스에서 컴파일", - "both_available": "다운로드 및 컴파일", - "download_available": "다운로드 가능", - "no_method": "업데이트 방법 없음", - "no_release": "No release", - "available": "가능", - "server_downloading": "서버 바이너리 다운로드 중…", - "server_downloaded": "서버 바이너리가 다운로드됨", - "server_download_failed": "서버 바이너리 다운로드 실패", - "server_download_note": "사전 빌드된 바이너리는 GitHub 릴리스에서 다운로드됩니다. 이 작업은 일반적으로 1분 이내에 완료됩니다.", - "install_go_hint": "https://go.dev/dl/에서 Go를 설치하여 컴파일을 활성화하거나 사전 빌드된 바이너리로 릴리스를 게시하세요.", - "strategy_install_go": "Go 자동 설치 및 컴파일", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "자동 재구축 준비됨", - "toolchain_ready": "툴체인이 설치됨", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Go 툴체인 다운로드 중…", - "toolchain_failed": "Go 툴체인 설치 실패", - "modal_title": "업데이트 설치 중", - "modal_done_title": "업데이트 완료", - "modal_close": "닫기", - "modal_reload_now": "콘솔 새로고침", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "콘솔 파일", - "phase_server": "서버 단계", - "phase_restart": "다시 시작", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "백업 건너뛰기(사용자 선택에 따라)", - "server_skipped": "Go server를 건너뛰었습니다.", - "server_not_selected": "Go server not selected", - "server_processing": "Go server 업데이트 처리 중…", - "no_restart_needed": "다시 시작할 필요 없음", - "complete": "업데이트 적용됨", - "complete_summary": "업데이트가 성공적으로 적용되었습니다.", - "complete_with_errors": "업데이트가 완료되었지만 일부 단계가 실패했습니다. 아래 세부정보를 참조하세요.", - "modal_done_with_errors_title": "오류가 발생하여 업데이트가 완료되었습니다.", - "console_will_restart": "콘솔 프로세스가 지금 다시 시작됩니다…", - "restart_complete_msg": "콘솔 재시작이 완료되었습니다. 새 버전을 로드하려면 다시 로드를 클릭하세요. 페이지는 8초 후에 자동으로 다시 로드됩니다.", - "refresh_recommended": "정적 자산이 변경되었습니다. 새 UI를 보려면 페이지를 다시 로드하세요.", - "confirm_title": "업데이트 적용", - "confirm_with_backup": "업데이트 전 백업이 자동으로 생성됩니다.", - "confirm_no_backup": "백업이 생성되지 않습니다(진행에 따른 책임은 본인에게 있습니다)." - }, - "permissions": { - "title": "권한", - "subtitle": "역할 기반 권한 및 사용자 정의 재정의 관리", - "info_title": "권한 작동 방식", - "info_desc": "각 역할에��� 기본 권한이 있습니다. 아래에서 전환하여 역할별로 개별 권한을 추가하거나 제거할 수 있습니다. 사용자 정의 재정의는 강조 표시되며 언제든지 기본값으로 되돌릴 수 있습니다.", - "select_role": "역할 선택", - "select_role_placeholder": "역할을 선택하세요...", - "reset_overrides": "모든 재정의 재설정", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "서버 수준", - "custom": "Custom", - "default": "Default", - "revert": "기본값으로 되돌리기", - "saved": "권한이 업데이트되었습니다.", - "reverted": "기본값으로 되돌렸습니다.", - "all_reverted": "모든 재정의가 되돌려졌습니다.", - "confirm_reset": "이 역할의 모든 사용자 정의 재정의를 기본값으로 재설정하시겠습니까?", - "empty_title": "역할 선택", - "empty_desc": "권한을 보고 관리하려면 위 드롭다운에서 역할을 선택하세요.", - "locked_title": "Super Admin", - "locked_desc": "최고 관리자는 기본적으로 모든 권한을 가지며 사용자 정의할 수 없습니다.", - "cat_device": "장치", - "cat_user": "Users", - "cat_server": "서버", - "cat_org": "조직", - "cat_audit": "감사 및 모니터링", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "기기 보기", - "perm_device_connect": "장치에 연결", - "perm_device_edit": "기기 수정", - "perm_device_delete": "기기 삭제", - "perm_device_ban": "장치 금지/금지 해제", - "perm_device_change_id": "기기 ID 변경", - "perm_user_view": "사용자 보기", - "perm_user_create": "사용자 생성", - "perm_user_edit": "사용자 편집", - "perm_user_delete": "사용자 삭제", - "perm_server_config": "서버 구성", - "perm_server_keys": "API 키 관리", - "perm_org_create": "조직 만들기", - "perm_org_edit": "조직 수정", - "perm_org_delete": "조직 삭제", - "perm_org_manage_users": "조직 사용자 관리", - "perm_org_manage_devices": "조직 기기 관리", - "perm_audit_view": "감사 로그 보기", - "perm_metrics_view": "측정항목 보기", - "perm_blocklist_edit": "차단 목록 수정", - "perm_cdap_view": "CDAP 장치 보기", - "perm_cdap_command": "CDAP 명령 보내기", - "perm_cdap_terminal": "CDAP 터미널 액세스", - "perm_cdap_files": "CDAP 파일 액세스", - "perm_enrollment_manage": "등록 관리", - "perm_enrollment_approve": "등록 승인", - "perm_chat_access": "Chat access", - "perm_branding_edit": "브랜딩 수정", - "perm_server_attestation": "서버 성능 인증" - }, - "notifications": { - "title": "알림", - "empty": "새로운 알림 없음", - "mark_all_read": "모두 읽은 것으로 표시", - "see_all": "모든 도움 요청 보기", - "help_request": "도움 요청", - "just_now": "just now" - }, - "accessibility": { - "title": "접근성", - "subtitle": "시각, 동작 및 읽기 요구에 맞게 콘솔을 조정합니다.", - "close": "접근성 메뉴 닫기", - "profiles": "빠른 프로필", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "더 큰 텍스트, 강한 대비 및 초점.", - "profile_dyslexia": "읽기의 편안함", - "profile_dyslexia_hint": "읽기 쉬운 글꼴과 넓은 간격.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "전환을 줄이고 애니메이션을 일시 중지합니다.", - "profile_color_assist": "색상 지원", - "profile_color_assist_hint": "색상 필터, 라벨 및 강조 표시된 링크.", - "reading": "읽기", - "font_size": "글자 크기", - "line_height": "줄 높이", - "letter_spacing": "문자 간격", - "word_spacing": "단어 간격", - "readable_font": "읽을 수 있는 글꼴", - "readable_font_hint": "넓고 친숙한 문자 모양을 사용합니다.", - "dyslexia_spacing": "난독증 간격", - "dyslexia_spacing_hint": "긴 텍스트에 추가 간격을 추가합니다.", - "visual": "시각", - "contrast": "대비", - "contrast_normal": "Normal", - "contrast_high_dark": "고대비 어두운", - "contrast_high_light": "고대비 조명", - "contrast_yellow_black": "검정색 바탕에 노란색", - "color_filter": "컬러 비전 필터", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "채도", - "underline_links": "링크에 밑줄을 긋습니다", - "underline_links_hint": "색상에 의존하지 않고 링크를 표시합니다.", - "highlight_links": "하이라이트 액션", - "highlight_links_hint": "링크와 버튼의 개요를 설명합니다.", - "highlight_headings": "제목 강조 표시", - "highlight_headings_hint": "색상 막대로 섹션 제목을 표시합니다.", - "hide_media": "Dim media", - "hide_media_hint": "이미지, 비디오 및 캔버스를 어둡게 합니다.", - "interaction": "상호 작용", - "strong_focus": "강한 집중력", - "strong_focus_hint": "큰 키보드 포커스 링을 표시합니다.", - "large_cursor": "큰 커서", - "large_cursor_hint": "더 큰 고대비 포인터를 사용합니다.", - "reduce_motion": "움직임 줄이기", - "reduce_motion_hint": "전환을 줄이고 스크롤을 부드럽게 합니다.", - "pause_animations": "애니메이션 일시중지", - "pause_animations_hint": "반복되는 시각적 동작을 중지합니다.", - "reading_guide": "독서 가이드", - "reading_guide_hint": "밝은 선으로 포인터를 따릅니다.", - "reading_mask": "마스크 읽기", - "reading_mask_hint": "포인터 위와 아래의 내용을 어둡게 합니다.", - "preview": "미리보기", - "preview_title": "운영자 작업 공간 미리보기", - "preview_text": "이 메뉴를 닫기 전에 텍스트, 링크, 컨트롤 및 상태 라벨을 읽기 편한지 확인하세요.", - "preview_link": "기기 세부정보 링크", - "preview_status": "Online", - "preview_button": "기본 작업", - "preview_secondary": "Secondary", - "reset": "초기화", - "done": "완료" - }, - "server_mgmt": { - "title": "서버 관리", - "subtitle": "BetterDesk 콘솔 호스트용 Cockpit 스타일 제어판(베타).", - "beta_tooltip": "베타 기능 — 활발히 개발 중입니다.", - "notice_title": "베타 기능", - "notice_body": "이러한 도구는 BetterDesk 콘솔 프로세스가 있는 호스트에서 실행됩니다. 모든 작업이 감사됩니다. 향후 릴리스에서는 기능 범위가 확장될 예정입니다.", - "tab_overview": "개요", - "tab_terminal": "터미널", - "tab_files": "파일", - "tab_services": "서비스", - "cpu": "CPU", - "memory": "메모리", - "load": "평균 부하", - "disks": "디스크", - "history": "기록(최근 60개 샘플)", - "host_info": "Host info", - "cores": "cores", - "uptime": "가동 시간", - "no_disks": "사용 가능한 디스크 데이터가 없습니다.", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY 이용 가능", - "term_connect": "연결", - "term_disconnect": "연결 해제", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "연결 오류", - "term_warning": "명령은 콘솔 프로세스를 소유한 사용자로 실행됩니다. 권한 상승을 활성화하려면 sudoers 규칙을 추가하세요.", - "term_hint": "팁: 에스컬레이션하려면 `sudo -i`를 입력하세요(sudoers 구성 필요).", - "term_lib_failed": "터미널 라이브러리를 로드하지 못했습니다.", - "files_up": "한 레벨 위로", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "이름", - "files_size": "크기", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "빈 디렉토리", - "files_error": "디렉터리를 나열하지 못했습니다.", - "read_failed": "파일을 읽지 못했습니다.", - "save_failed": "파일을 저장하지 못했습니다.", - "rename_failed": "이름 바꾸기 실패", - "delete_failed": "삭제 실패", - "delete_confirm": "이 항목을 삭제하시겠습니까?", - "mkdir_prompt": "새 폴더 이름:", - "mkdir_failed": "폴더를 생성하지 못했습니다.", - "file_saved": "파일이 저장되었습니다", - "binary_warn": "바이너리 파일 — 미리보기 전용", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "검색 서비스…", - "svc_name": "서비스", - "svc_state": "상태", - "svc_description": "Description", - "svc_empty": "서비스를 찾을 수 없습니다.", - "svc_load_failed": "서비스를 로드하지 못했습니다.", - "svc_action_failed": "작업 실패", - "svc_confirm": "Run", - "svc_start": "시작", - "svc_stop": "중지", - "svc_restart": "재시작", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk 에이전트 다운로드", - "choose_platform": "플랫폼을 선택하세요", - "choose_platform_hint": "운영 체제와 일치하는 설치 프로그램을 선택하십시오.", - "download": "다운로드", - "building": "건물…", - "failed": "빌드 실패", - "need_help": "도움이 필요하신가요?", - "powered_by": "제공:" - }, - "server_attestation": { - "title": "서버 성능 인증", - "subtitle": "CPU, RAM, 디스크 사용률 80% 임계값에서의 동시 원격 연결 용량을 측정하는 성능 벤치마크.", - "warning_title": "부하 테스트", - "warning_body": "벤치마크는 시그널 및 릴레이 서버에 대한 병렬 WebSocket 연결을 시뮬레이션합니다. 이 테스트는 프로덕션 환경에 부하를 줍니다 — 비피크 시간에 실행하세요.", - "run_benchmark": "벤치마크 실행", - "abort": "중단", - "download_report": "JSON 보고서 다운로드", - "last_test": "마지막 테스트", - "no_test_yet": "아직 벤치마크가 실행되지 않았습니다", - "max_connections": "최대 연결 수", - "threshold_80": "80% 임계값 — 최종 메트릭", - "disk": "디스크", - "ramp_chart": "부하 증가 차트", - "connections": "연결 수", - "connections_short": "연결", - "tier_guide_title": "각 등급의 의미는?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "동시 연결 1~25개 — 소형 VPS(1~2 vCPU, 2~4 GB RAM).", - "tier_iron_desc": "연결 26~75개 — 중급 서버(2~4 vCPU, 4~8 GB RAM).", - "tier_platinum_desc": "연결 76~200개 — 고성능 서버(4~8 vCPU, 8~16 GB RAM).", - "tier_titanium_desc": "연결 201~400개 — 엔터프라이즈 인프라(8+ vCPU, 16~32 GB RAM).", - "tier_obsidian_desc": "연결 401+개 — 터보 클래스: 전용 하드웨어, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "참고: Docker에서 CPU/RAM 메트릭은 물리적 호스트가 아닌 컨테이너 제한을 반영할 수 있습니다.", - "badge_tooltip": "BetterDesk 서버 성능 인증 — 서버 성능 인증", - "confirm_run": "이 벤치마크는 시뮬레이션된 연결로 서버를 부하 테스트합니다. 계속하시겠습니까?", - "starting": "시작 중…", - "complete": "벤치마크 완료", - "signal_peers": "시그널 피어", - "relay_sessions": "릴레이 세션", - "page_error": "서버 성능 인증 페이지 로드에 실패했습니다", - "mode_estimated": "추정값(WebSocket 도달 불가)", - "incomplete": "벤치마크가 완료되었지만 유효한 등급을 얻지 못했습니다" + "form": { + "cancel": "취소" } + } } diff --git a/web-nodejs/lang/nb.json b/web-nodejs/lang/nb.json index 1e3e927a..f466029f 100644 --- a/web-nodejs/lang/nb.json +++ b/web-nodejs/lang/nb.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Norwegian", - "native_name": "Norsk", - "flag": "🇳🇴", - "needs_review": true + "_meta": { + "name": "Norwegian", + "native_name": "Norsk", + "flag": "🇳🇴", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Laster inn...", + "confirm": "Bekreft", + "alert": "Advarsel", + "prompt": "Skriv inn verdi", + "copied": "Kopiert til utklippstavlen", + "save": "Lagre", + "saved": "Lagret", + "error": "Feil", + "success": "Suksess", + "warning": "Advarsel", + "info": "Informasjon", + "all": "Alle", + "cancel": "Avbryt", + "delete": "Slett", + "actions": "Handlinger", + "close": "Lukk", + "required": "nødvendig", + "name_required": "Navn er påkrevd", + "active": "Aktiv", + "inactive": "Inaktiv", + "invalid_json": "Ugyldig JSON", + "field_required": "{field} er påkrevd", + "back": "Tilbake", + "edit": "Rediger", + "yes": "Ja", + "no": "Nei" + }, + "nav": { + "main": "Hoved", + "tools": "Verktøy", + "system": "System", + "dashboard": "Dashbord", + "devices": "Enheter", + "keys": "Nøkler", + "generator": "Generator", + "settings": "Innstillinger", + "users": "Brukere", + "inventory": "Inventar", + "tickets": "Saker", + "help_requests": "Hjelpeforespørsler", + "activity": "Aktivitet", + "automation": "Automatisering", + "file_transfer": "Filoverføring", + "network": "Nettverk", + "dataguard": "DataGuard", + "reports": "Rapporter", + "tenants": "Leietakere", + "registrations": "Registrations", + "management": "Ledelse", + "toggle_sidebar": "Bytt sidefelt", + "cdap": "CDAP-enheter", + "fleet": "Flåte", + "scaling": "Skalering", + "cross_platform": "Kryss-plattform", + "tokens": "Enhetstokens", + "organizations": "Organisasjoner", + "policies": "Retningslinjer", + "attestation": "Attestering", + "remote": "Eksternt skrivebord", + "toolkit": "Verktøykasse", + "security_audit": "Sikkerhetsrevisjon", + "languages": "Språk", + "resource_control": "Ressurskontroll", + "chat": "Chat", + "help": "Hjelp", + "expand_sidebar": "Utvid sidefeltet", + "toggle_theme": "Bytt tema", + "sdk_studio": "SDK Studio", + "login": "Logg inn", + "permissions": "Tillatelser", + "server_management": "Serveradministrasjon", + "server_attestation": "Serverattest", + "commercialization": "Kommersialisering" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Logg på BetterDesk-konsollen", + "username": "Brukernavn", + "username_placeholder": "Skriv inn brukernavn", + "password": "Passord", + "password_placeholder": "Skriv inn passord", + "remember_me": "Remember me", + "login_failed": "Innlogging mislyktes. Vennligst sjekk legitimasjonen din.", + "invalid_credentials": "Ugyldig brukernavn eller passord.", + "username_collision": "En lokal konto med dette brukernavnet finnes allerede. Logg inn med ditt lokale passord, eller be en administrator om å endre navn på eller fjerne den konflikterende kontoen.", + "fill_all_fields": "Vennligst fyll ut alle feltene", + "logout_confirm": "Er du sikker på at du vil logge ut?", + "change_password": "Endre passord", + "password_required": "Passord kreves", + "totp_title": "Tofaktorautentisering", + "totp_subtitle": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Bruk en gjenopprettingskode i stedet", + "totp_use_code": "Bruk autentiseringskode i stedet", + "totp_recovery_code": "Gjenopprettingskode", + "totp_back_to_login": "Tilbake til innlogging", + "totp_invalid_code": "Ugyldig bekreftelseskode. Vennligst prøv igjen.", + "totp_enter_code": "Vennligst skriv inn en 6-sifret kode", + "totp_enter_recovery": "Vennligst skriv inn en gjenopprettingskode", + "totp_session_expired": "Økten er utløpt. Logg på igjen.", + "totp_already_enabled": "Tofaktorautentisering er allerede aktivert", + "pro_only_account": "Denne kontoen er kun for RustDesk desktop-klient. Vennligst bruk RustDesk-appen for å logge på.", + "passwords_mismatch": "Passord stemmer ikke", + "or": "eller", + "login_sso": "Logg på med SSO", + "login_sso_with": "Logg på med {{provider}}", + "oidc_denied": "Tilgang ble nektet av identitetsleverandøren.", + "oidc_invalid": "Ugyldig OIDC tilbakeringing. Vennligst prøv igjen.", + "oidc_failed": "OIDC-autentisering mislyktes. Vennligst prøv igjen.", + "oidc_error": "Det oppstod en feil under SSO-pålogging.", + "oidc_no_account": "Kontoen din ble ikke funnet og automatisk registrering er deaktivert.", + "totp_rate_limited": "For mange forsøk. Vennligst prøv igjen senere.", + "emergency_mode_banner": "Go server utilgjengelig — kjører i nødmodus (kun admin, begrenset funksjonalitet)" + }, + "dashboard": { + "title": "Dashbord", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Totalt antall enheter", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktive tilkoblinger", + "offline_devices": "Offline", + "server_status": "Serverstatus", + "quick_actions": "Raske handlinger", + "manage_devices": "Administrer tilkoblede enheter", + "view_keys": "Se servernøkler", + "generate_config": "Generer klientkonfigurasjon", + "server_settings": "Konfigurer innstillinger", + "greeting_morning": "God morgen, {name}", + "greeting_afternoon": "God ettermiddag, {name}", + "greeting_evening": "God kveld, {name}", + "greeting_night": "God natt, {name}", + "health_overview": "Helseoversikt", + "devices_online": "Enheter på nett", + "active_alerts": "Aktive varsler", + "recent_connections": "Totalt antall enheter", + "server_uptime": "Serveroppetid", + "activity_feed": "Nylig aktivitet", + "no_recent_activity": "Ingen nylig aktivitet", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Prøv skrivebordsmodus for et arbeidsområde med flere vinduer med overvåkingsmoduler.", + "tip_keyboard_shortcuts": "Trykk Ctrl+K hvor som helst for å åpne kommandopaletten for hurtigsøk.", + "tip_address_book": "Synkroniser adresseboken din på tvers av enheter ved å logge på fra RustDesk-klienten.", + "tip_2fa": "Aktiver tofaktorautentisering i innstillinger for ekstra kontosikkerhet.", + "tip_bulk_actions": "Velg flere enheter og bruk massehandlinger for å administrere dem samtidig.", + "tip_theme": "Bytt mellom mørke og lyse temaer i sidefeltinnstillingene.", + "tip_cdap": "Koble til IoT-enheter og industrielle sensorer via CDAP-gatewayen.", + "tip_tutorials": "Klikk på hjelpeknappen nederst til høyre for interaktive opplæringsprogrammer." + }, + "devices": { + "title": "Enheter", + "id": "ID", + "hostname": "Hostname", + "username": "Brukernavn", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Opprettet", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Søk etter enheter...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Synkroniseringsstatus", + "sync_success": "Status synkronisert vellykket", + "empty_title": "Ingen enheter funnet", + "empty_text": "Ingen enheter samsvarer med dine nåværende filtre", + "edit_title": "Enhetsdetaljer", + "delete_title": "Slett enhet", + "delete_confirm": "Er du sikker på at du vil slette enheten {id}?", + "delete_warning": "Du er i ferd med å slette denne enheten permanent:", + "delete_permanent": "Denne handlingen kan ikke angres. Alle data knyttet til denne enheten vil bli permanent fjernet fra databasen.", + "delete_success": "Enheten ble slettet", + "revoke_option": "Tilbakekall enheten", + "revoke_hint": "Blokker enhets-ID og koble fra aktive tilkoblinger", + "revoke_success": "Enheten er tilbakekalt", + "details": "Enhetsdetaljer", + "ban_title": "Forby enhet", + "ban_confirm": "Er du sikker på at du vil utestenge enheten {id}?", + "ban_success": "Enheten ble utestengt", + "unban_title": "Opphev utestengelsen av enheten", + "unban_confirm": "Er du sikker på at du vil oppheve utestengelsen av enheten {id}?", + "unban_success": "Enheten ble opphevet utestengelsen", + "change_id": "Change ID", + "change_id_title": "Endre enhets-ID", + "new_id": "New ID", + "change_id_hint": "Kun 6-16 tegn, bokstaver, tall, bindestreker og understreker", + "change_id_success": "Enhets-ID ble endret", + "id_length_error": "ID må bestå av 6–16 tegn", + "id_format_error": "ID kan bare inneholde bokstaver, tall, bindestreker og understreker", + "bulk_delete_title": "Slett flere enheter", + "bulk_delete_confirm": "Er du sikker på at du vil slette {count}-enheter?", + "bulk_delete_success": "{count}-enheter ble slettet", + "columns": "Columns", + "toggle_columns": "Bytt synlige kolonner", + "not_found": "Finner ikke enheten", + "delete_failed": "Kunne ikke slette enheten", + "change_id_failed": "Kunne ikke endre enhets-ID", + "invalid_id": "Ugyldig enhets-ID (6–16 tegn kreves)", + "invalid_id_format": "Ugyldig ID-format (kun bokstaver, tall, bindestreker, understreker)", + "id_exists": "Enhets-ID finnes allerede", + "no_selection": "Ingen enheter er valgt", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP tilkoblet", + "revoke": "Tilbakekall", + "access_policy": "Tilgangspolicy", + "unattended_access": "Uovervåket tilgang", + "enable_unattended": "Aktiver uovervåket tilgang", + "access_password": "Tilgang passord", + "password_configured": "Passord satt", + "no_password": "Ingen passord", + "new_password": "Nytt passord (la det stå tomt for å holde det oppdatert)", + "clear_password": "Tøm passord", + "access_schedule": "Tilgangsplan", + "enable_schedule": "Aktiver tidsbasert tilgang", + "allowed_days": "Tillatte dager", + "start_time": "Starttidspunkt", + "end_time": "Sluttidspunkt", + "timezone": "Tidssone", + "allowed_operators": "Tillatte operatører", + "all_operators": "Alle operatører (la stå tomt)", + "operators_hint": "Kommaseparerte brukernavn. La stå tomt for å tillate alle operatører.", + "last_updated_by": "Sist oppdatert av", + "access_policy_saved": "Tilgangspolicyen er lagret", + "tabs": { + "overview": "Oversikt", + "hardware": "Hardware", + "metrics": "Beregninger", + "connections": "Tilkoblinger", + "audit": "Audit", + "info": "Info", + "history": "Historie" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Prosessor", + "memory": "Minne", + "disk": "Disk", + "os": "Operativsystem", + "hostname": "Vertsnavn", + "uptime": "Oppetid", + "load_avg": "Belastningsgjennomsnitt", + "network": "Nettverksadaptere", + "no_data": "Ingen maskinvaredata tilgjengelig", + "title": "Maskinvareinformasjon", + "gpu": "Grafikkort" }, - "common": { - "loading": "Laster inn...", - "confirm": "Bekreft", - "alert": "Advarsel", - "prompt": "Skriv inn verdi", - "copied": "Kopiert til utklippstavlen", - "save": "Lagre", - "saved": "Lagret", - "error": "Feil", - "success": "Suksess", - "warning": "Advarsel", - "info": "Informasjon", - "all": "Alle", - "cancel": "Avbryt", - "delete": "Slett", - "actions": "Handlinger", - "close": "Lukk", - "required": "nødvendig", - "name_required": "Navn er påkrevd", - "active": "Aktiv", - "inactive": "Inaktiv", - "invalid_json": "Ugyldig JSON", - "field_required": "{field} er påkrevd", - "back": "Tilbake", - "edit": "Rediger", - "yes": "Ja", - "no": "Nei" - }, - "nav": { - "main": "Hoved", - "tools": "Verktøy", - "system": "System", - "dashboard": "Dashbord", - "devices": "Enheter", - "keys": "Nøkler", - "generator": "Generator", - "settings": "Innstillinger", - "users": "Brukere", - "inventory": "Inventar", - "tickets": "Saker", - "help_requests": "Hjelpeforespørsler", - "activity": "Aktivitet", - "automation": "Automatisering", - "file_transfer": "Filoverføring", - "network": "Nettverk", - "dataguard": "DataGuard", - "reports": "Rapporter", - "tenants": "Leietakere", - "registrations": "Registrations", - "management": "Ledelse", - "toggle_sidebar": "Bytt sidefelt", - "cdap": "CDAP-enheter", - "fleet": "Flåte", - "scaling": "Skalering", - "cross_platform": "Kryss-plattform", - "tokens": "Enhetstokens", - "organizations": "Organisasjoner", - "policies": "Retningslinjer", - "attestation": "Attestering", - "remote": "Eksternt skrivebord", - "toolkit": "Verktøykasse", - "security_audit": "Sikkerhetsrevisjon", - "languages": "Språk", - "resource_control": "Ressurskontroll", - "chat": "Chat", - "help": "Hjelp", - "expand_sidebar": "Utvid sidefeltet", - "toggle_theme": "Bytt tema", - "sdk_studio": "SDK Studio", - "login": "Logg inn", - "permissions": "Tillatelser", - "server_management": "Serveradministrasjon", - "server_attestation": "Serverattest" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Logg på BetterDesk-konsollen", - "username": "Brukernavn", - "username_placeholder": "Skriv inn brukernavn", - "password": "Passord", - "password_placeholder": "Skriv inn passord", - "remember_me": "Remember me", - "login_failed": "Innlogging mislyktes. Vennligst sjekk legitimasjonen din.", - "invalid_credentials": "Ugyldig brukernavn eller passord.", - "username_collision": "En lokal konto med dette brukernavnet finnes allerede. Logg inn med ditt lokale passord, eller be en administrator om å endre navn på eller fjerne den konflikterende kontoen.", - "fill_all_fields": "Vennligst fyll ut alle feltene", - "logout_confirm": "Er du sikker på at du vil logge ut?", - "change_password": "Endre passord", - "password_required": "Passord kreves", - "totp_title": "Tofaktorautentisering", - "totp_subtitle": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Bruk en gjenopprettingskode i stedet", - "totp_use_code": "Bruk autentiseringskode i stedet", - "totp_recovery_code": "Gjenopprettingskode", - "totp_back_to_login": "Tilbake til innlogging", - "totp_invalid_code": "Ugyldig bekreftelseskode. Vennligst prøv igjen.", - "totp_enter_code": "Vennligst skriv inn en 6-sifret kode", - "totp_enter_recovery": "Vennligst skriv inn en gjenopprettingskode", - "totp_session_expired": "Økten er utløpt. Logg på igjen.", - "totp_already_enabled": "Tofaktorautentisering er allerede aktivert", - "pro_only_account": "Denne kontoen er kun for RustDesk desktop-klient. Vennligst bruk RustDesk-appen for å logge på.", - "passwords_mismatch": "Passord stemmer ikke", - "or": "eller", - "login_sso": "Logg på med SSO", - "login_sso_with": "Logg på med {{provider}}", - "oidc_denied": "Tilgang ble nektet av identitetsleverandøren.", - "oidc_invalid": "Ugyldig OIDC tilbakeringing. Vennligst prøv igjen.", - "oidc_failed": "OIDC-autentisering mislyktes. Vennligst prøv igjen.", - "oidc_error": "Det oppstod en feil under SSO-pålogging.", - "oidc_no_account": "Kontoen din ble ikke funnet og automatisk registrering er deaktivert.", - "totp_rate_limited": "For mange forsøk. Vennligst prøv igjen senere.", - "emergency_mode_banner": "Go server utilgjengelig — kjører i nødmodus (kun admin, begrenset funksjonalitet)" - }, - "dashboard": { - "title": "Dashbord", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Totalt antall enheter", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktive tilkoblinger", - "offline_devices": "Offline", - "server_status": "Serverstatus", - "quick_actions": "Raske handlinger", - "manage_devices": "Administrer tilkoblede enheter", - "view_keys": "Se servernøkler", - "generate_config": "Generer klientkonfigurasjon", - "server_settings": "Konfigurer innstillinger", - "greeting_morning": "God morgen, {name}", - "greeting_afternoon": "God ettermiddag, {name}", - "greeting_evening": "God kveld, {name}", - "greeting_night": "God natt, {name}", - "health_overview": "Helseoversikt", - "devices_online": "Enheter på nett", - "active_alerts": "Aktive varsler", - "recent_connections": "Totalt antall enheter", - "server_uptime": "Serveroppetid", - "activity_feed": "Nylig aktivitet", - "no_recent_activity": "Ingen nylig aktivitet", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Prøv skrivebordsmodus for et arbeidsområde med flere vinduer med overvåkingsmoduler.", - "tip_keyboard_shortcuts": "Trykk Ctrl+K hvor som helst for å åpne kommandopaletten for hurtigsøk.", - "tip_address_book": "Synkroniser adresseboken din på tvers av enheter ved å logge på fra RustDesk-klienten.", - "tip_2fa": "Aktiver tofaktorautentisering i innstillinger for ekstra kontosikkerhet.", - "tip_bulk_actions": "Velg flere enheter og bruk massehandlinger for å administrere dem samtidig.", - "tip_theme": "Bytt mellom mørke og lyse temaer i sidefeltinnstillingene.", - "tip_cdap": "Koble til IoT-enheter og industrielle sensorer via CDAP-gatewayen.", - "tip_tutorials": "Klikk på hjelpeknappen nederst til høyre for interaktive opplæringsprogrammer." - }, - "devices": { - "title": "Enheter", - "id": "ID", - "hostname": "Hostname", - "username": "Brukernavn", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Opprettet", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Søk etter enheter...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Synkroniseringsstatus", - "sync_success": "Status synkronisert vellykket", - "empty_title": "Ingen enheter funnet", - "empty_text": "Ingen enheter samsvarer med dine nåværende filtre", - "edit_title": "Enhetsdetaljer", - "delete_title": "Slett enhet", - "delete_confirm": "Er du sikker på at du vil slette enheten {id}?", - "delete_warning": "Du er i ferd med å slette denne enheten permanent:", - "delete_permanent": "Denne handlingen kan ikke angres. Alle data knyttet til denne enheten vil bli permanent fjernet fra databasen.", - "delete_success": "Enheten ble slettet", - "revoke_option": "Tilbakekall enheten", - "revoke_hint": "Blokker enhets-ID og koble fra aktive tilkoblinger", - "revoke_success": "Enheten er tilbakekalt", - "details": "Enhetsdetaljer", - "ban_title": "Forby enhet", - "ban_confirm": "Er du sikker på at du vil utestenge enheten {id}?", - "ban_success": "Enheten ble utestengt", - "unban_title": "Opphev utestengelsen av enheten", - "unban_confirm": "Er du sikker på at du vil oppheve utestengelsen av enheten {id}?", - "unban_success": "Enheten ble opphevet utestengelsen", - "change_id": "Change ID", - "change_id_title": "Endre enhets-ID", - "new_id": "New ID", - "change_id_hint": "Kun 6-16 tegn, bokstaver, tall, bindestreker og understreker", - "change_id_success": "Enhets-ID ble endret", - "id_length_error": "ID må bestå av 6–16 tegn", - "id_format_error": "ID kan bare inneholde bokstaver, tall, bindestreker og understreker", - "bulk_delete_title": "Slett flere enheter", - "bulk_delete_confirm": "Er du sikker på at du vil slette {count}-enheter?", - "bulk_delete_success": "{count}-enheter ble slettet", - "columns": "Columns", - "toggle_columns": "Bytt synlige kolonner", - "not_found": "Finner ikke enheten", - "delete_failed": "Kunne ikke slette enheten", - "change_id_failed": "Kunne ikke endre enhets-ID", - "invalid_id": "Ugyldig enhets-ID (6–16 tegn kreves)", - "invalid_id_format": "Ugyldig ID-format (kun bokstaver, tall, bindestreker, understreker)", - "id_exists": "Enhets-ID finnes allerede", - "no_selection": "Ingen enheter er valgt", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP tilkoblet", - "revoke": "Tilbakekall", - "access_policy": "Tilgangspolicy", - "unattended_access": "Uovervåket tilgang", - "enable_unattended": "Aktiver uovervåket tilgang", - "access_password": "Tilgang passord", - "password_configured": "Passord satt", - "no_password": "Ingen passord", - "new_password": "Nytt passord (la det stå tomt for å holde det oppdatert)", - "clear_password": "Tøm passord", - "access_schedule": "Tilgangsplan", - "enable_schedule": "Aktiver tidsbasert tilgang", - "allowed_days": "Tillatte dager", - "start_time": "Starttidspunkt", - "end_time": "Sluttidspunkt", - "timezone": "Tidssone", - "allowed_operators": "Tillatte operatører", - "all_operators": "Alle operatører (la stå tomt)", - "operators_hint": "Kommaseparerte brukernavn. La stå tomt for å tillate alle operatører.", - "last_updated_by": "Sist oppdatert av", - "access_policy_saved": "Tilgangspolicyen er lagret", - "tabs": { - "overview": "Oversikt", - "hardware": "Hardware", - "metrics": "Beregninger", - "connections": "Tilkoblinger", - "audit": "Audit", - "info": "Info", - "history": "Historie" - }, - "hardware": { - "cpu": "Prosessor", - "memory": "Minne", - "disk": "Disk", - "os": "Operativsystem", - "hostname": "Vertsnavn", - "uptime": "Oppetid", - "load_avg": "Belastningsgjennomsnitt", - "network": "Nettverksadaptere", - "no_data": "Ingen maskinvaredata tilgjengelig", - "title": "Maskinvareinformasjon", - "gpu": "Grafikkort" - }, - "display_name": "Vist navn", - "display_name_placeholder": "Egendefinert navn (overstyrer vertsnavn)", - "note_placeholder": "Merknader om denne enheten", - "tags": "Tags", - "filter_by_tags": "Filtrer etter tagger", - "no_tags": "Ingen tagger", - "all_groups": "Alle grupper", - "create_group": "Opprett gruppe", - "manage_groups": "Administrer grupper", - "group_name": "Gruppenavn", - "group_name_placeholder": "f.eks. Media PC-er", - "dynamic_group": "Dynamisk gruppe fra tag", - "dynamic_group_hint": "Enheter med denne taggen kobles til automatisk.", - "tag_filter": "Taggfilter", - "group_allowed_users": "Tillatte brukere", - "group_allowed_users_hint": "La det stå tomt for å holde gruppen synlig for alle med enhetstillatelser.", - "group_tag_required": "Tag-filter kreves for dynamiske grupper", - "group_invalid": "Ugyldig gruppeidentifikator", - "group_not_found": "Finner ikke gruppen", - "group_saved": "Enhetsgruppen er lagret", - "groups_saved": "Enhetsgrupper lagret", + "display_name": "Vist navn", + "display_name_placeholder": "Egendefinert navn (overstyrer vertsnavn)", + "note_placeholder": "Merknader om denne enheten", + "tags": "Tags", + "filter_by_tags": "Filtrer etter tagger", + "no_tags": "Ingen tagger", + "all_groups": "Alle grupper", + "create_group": "Opprett gruppe", + "manage_groups": "Administrer grupper", + "group_name": "Gruppenavn", + "group_name_placeholder": "f.eks. Media PC-er", + "dynamic_group": "Dynamisk gruppe fra tag", + "dynamic_group_hint": "Enheter med denne taggen kobles til automatisk.", + "tag_filter": "Taggfilter", + "group_allowed_users": "Tillatte brukere", + "group_allowed_users_hint": "La det stå tomt for å holde gruppen synlig for alle med enhetstillatelser.", + "group_tag_required": "Tag-filter kreves for dynamiske grupper", + "group_invalid": "Ugyldig gruppeidentifikator", + "group_not_found": "Finner ikke gruppen", + "group_saved": "Enhetsgruppen er lagret", + "groups_saved": "Enhetsgrupper lagret", "group_membership_added": "Lagt til i gruppe", "group_membership_removed": "Fjernet fra gruppe", - "no_groups": "Ingen grupper ennå", - "manual_groups": "Manuelle grupper", - "dynamic_memberships": "Dynamiske medlemskap", - "group_allowed_user_groups": "Tillatte brukergrupper", - "group_allowed_user_groups_hint": "Brukere i utvalgte brukergrupper kan få tilgang til denne enhetsgruppen.", - "no_user_groups": "Ingen brukergrupper", - "edit_group": "Rediger gruppe", - "delete_group": "Slett gruppe", - "delete_group_confirm": "Vil du slette enhetsgruppen {name}?", - "group_deleted": "Enhetsgruppe slettet", - "folder_group_readonly": "Mappestøttede grupper administreres fra mapper.", - "manage_user_groups": "Administrer brukergrupper", - "restore_failed": "Enhet konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Klienten kontaktet API-et nylig, men er ikke registrert på signalserveren (UDP :21116). Start klienten på nytt etter servermigrering.", - "per_page": "Per side" - }, - "keys": { - "title": "Servernøkler", - "subtitle": "Offentlig nøkkel og konfigurasjon for RustDesk-klienter", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Serverinformasjon", - "download": "Last ned nøkkel", - "show_qr": "Show QR", - "qr_hint": "Skann denne QR-koden med RustDesk-mobilappen", - "no_key": "Ingen offentlig nøkkel funnet", - "no_key_to_copy": "Ingen nøkkel å kopiere", - "no_qr": "QR-kode er ikke tilgjengelig", - "download_success": "Nøkkelfilen er lastet ned", - "not_found": "Finner ikke nøkkel", - "api_not_found": "API nøkkel ikke funnet" - }, - "settings": { - "title": "Innstillinger", - "subtitle": "Konsollkonfigurasjon og kontoinnstillinger", - "tab_general": "General", - "tab_server": "Serverinnstillinger", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Språk", - "change_password": "Endre passord", - "password_desc": "Oppdater kontopassordet ditt", - "current_password": "Gjeldende passord", - "new_password": "Nytt passord", - "confirm_password": "Bekreft passord", - "save_password": "Oppdater passord", - "password_changed": "Passordet ble endret", - "fill_all_fields": "Vennligst fyll ut alle feltene", - "passwords_not_match": "Passord stemmer ikke", - "password_requirements": "Passordkrav", - "password_requirements_not_met": "Passordet oppfyller ikke kravene", - "req_length": "Minst 8 tegn", - "req_uppercase": "Minst én stor bokstav", - "req_lowercase": "Minst én liten bokstav", - "req_number": "Minst ett tall", - "server_info": "Serverinformasjon", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Nylig konsollaktivitet", - "no_audit_logs": "Fant ingen revisjonslogger", - "backend_title": "Bakgrunnstjeneste", - "backend_desc": "Velg hvilken serverbackend som skal brukes for enhetsadministrasjon og signal-/relétjenester.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Standard RustDesk signal- og reléservere (hbbs + hbbr). Grunnleggende HTTP API med begrensede endepunkter.", - "backend_betterdesk_desc": "Forbedret Go-basert server med full REST API, JWT autentisering, blokkeringsliste, tagger, sanntids WebSocket hendelser og revisjonslogging.", - "backend_feature_signal": "Signalserver (ID-registrering)", - "backend_feature_relay": "Reléserver (tilkoblingsrelé)", - "backend_feature_basic_api": "Grunnleggende REST API", - "backend_feature_full_api": "Full REST API (34+ endepunkter)", - "backend_feature_jwt": "JWT-autentisering og TOTP 2FA", - "backend_feature_blocklist": "Administrering av IP/ID-blokkeringslister", - "backend_feature_tags": "Enhetsetiketter og gruppering", - "backend_feature_audit": "Revider hendelseslogging", - "backend_feature_websocket": "Sanntids WebSocket-hendelser", - "backend_connection": "Tilkobling", - "backend_api_url": "API URL", - "backend_test": "Test tilkobling", - "backend_testing": "Tester...", - "backend_save": "Bruk Backend", - "backend_saved": "Serverbackend er endret. Enhetsdata vil nå bli administrert av den nye backend.", - "backend_save_failed": "Kunne ikke bytte serverbackend", - "backend_test_success": "Tilkoblingen var vellykket! Serveren er tilgjengelig.", - "backend_test_failed": "Tilkobling mislyktes. Serveren er utilgjengelig.", - "backend_confirm_switch": "Er du sikker på at du vil bytte serverbackend? Dette vil endre hvordan enheter administreres.", - "backend_unreachable": "Kan ikke bytte: Målserveren er ikke tilgjengelig. Start serveren først.", - "invalid_backend": "Ugyldig backend-valg. Velg 'rustdesk' eller 'betterdesk'.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Tofaktorautentisering", - "totp_desc": "Legg til et ekstra lag med sikkerhet med TOTP autentiseringsapper (Google Authenticator, Microsoft Authenticator, Authy, etc.)", - "totp_enabled": "2FA aktivert", - "totp_enabled_desc": "Kontoen din er beskyttet med tofaktorautentisering.", - "totp_disabled": "2FA ikke aktivert", - "totp_disabled_desc": "Aktiver tofaktorautentisering for ekstra kontosikkerhet.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Installer en autentiseringsapp på telefonen din", - "totp_step2": "Skann QR-koden nedenfor", - "totp_step3": "Tast inn den 6-sifrede koden for å bekrefte", - "totp_manual_key": "Manual key", - "totp_enter_code": "Skriv inn bekreftelseskode", - "totp_verify_enable": "Bekreft og aktiver", - "totp_enabled_success": "Tofaktorautentisering aktivert!", - "totp_recovery_warning": "Lagre disse gjenopprettingskodene på et trygt sted. Hver kode kan kun brukes én gang. Hvis du mister tilgangen til autentiseringsappen din, kan du bruke disse kodene til å logge på.", - "totp_done": "Done", - "totp_disable_warning": "Deaktivering av tofaktorautentisering vil gjøre kontoen din mindre sikker. Skriv inn passordet ditt for å bekrefte.", - "totp_disabled_success": "Tofaktorautentisering er deaktivert.", - "tutorials_title": "Veiledninger og veiledninger", - "tutorials_desc": "Kontroller guidede turer og hjelpeoverlegg som vises på hele konsollen", - "tutorials_enabled": "Aktiver opplæringsprogrammer", - "tutorials_enabled_hint": "Når den er deaktivert, starter ikke opplæringen automatisk, og hjelpeknappen vil være skjult", - "tutorials_reset_hint": "Merk alle opplæringsprogrammer som usett slik at de kan vises igjen", - "tutorials_enabled_toast": "Veiledninger aktivert", - "tutorials_disabled_toast": "Veiledninger deaktivert", - "tutorials_reset_toast": "Alle opplæringsprogrammer er tilbakestilt", - "tab_auth": "Autentisering", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurer ekstern autentisering via LDAP eller Active Directory. Brukere vil kunne logge på med domenelegitimasjonen.", - "ldap_enabled": "Aktiver LDAP-autentisering", - "ldap_enabled_hint": "Når aktivert, kan brukere logge på med LDAP/AD-legitimasjon. Lokale kontoer fungerer fortsatt som reserve.", - "ldap_connection": "Servertilkobling", - "ldap_host": "Vert", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Hopp over TLS-verifisering", - "ldap_timeout": "Tidsavbrudd for tilkobling (er)", - "ldap_timeout_hint": "Sekunder å vente på LDAP-serversvar", - "ldap_bind_mode": "Bindmodus", - "ldap_direct_bind": "Direkte binding", - "ldap_direct_bind_hint": "Bind direkte med en DN-mal i stedet for å bruke en tjenestekonto for å søke.", - "ldap_bind_dn": "Bind DN (tjenestekonto)", - "ldap_bind_dn_hint": "Distinguished Name på en skrivebeskyttet tjenestekonto som brukes til å søke etter brukere.", - "ldap_bind_password": "Bind passord", - "ldap_base_dn": "Base DN", - "ldap_base_dn_hint": "Søkebase for å finne brukere, f.eks. dc=eksempel,dc=com", - "ldap_user_filter": "Brukerfilter", - "ldap_user_filter_hint": "LDAP filter for å finne brukere. Bruk {{username}} som plassholder. Standard: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Direktebind DN-mal", - "ldap_direct_bind_dn_hint": "DN mal for direkte binding. Bruk {{username}} som plassholder, f.eks. uid={{username}},ou=brukere,dc=eksempel,dc=com", - "ldap_user_attrs": "Brukerattributter", - "ldap_attr_id": "Brukernavnattributt", - "ldap_attr_email": "E-postattributt", - "ldap_attr_name": "Visningsnavnattributt", - "ldap_group_mapping": "Gruppe → Rollekartlegging", - "ldap_group_base_dn": "Gruppe Base DN", - "ldap_group_base_dn_hint": "La stå tomt for å bruke hovedbase-DN", - "ldap_group_filter": "Gruppefilter", - "ldap_group_attr_name": "Gruppenavnattributt", - "ldap_default_role": "Standardrolle", - "ldap_default_role_hint": "Rolle tildelt brukere hvis LDAP-grupper ikke samsvarer med noen tilordning", - "ldap_role_viewer": "Seer", - "ldap_role_operator": "Operatør", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Gruppe → Rollekart", - "ldap_group_role_map_hint": "Kartlegg LDAP-grupper til BetterDesk-roller. Format: GroupDN=rolle atskilt med | (rør). Example: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Test tilkobling", - "ldap_testing": "Tester...", - "ldap_test_success": "Tilkoblingen var vellykket! LDAP server is reachable and bind credentials are valid.", - "ldap_test_failed": "Tilkobling mislyktes", - "ldap_save": "Lagre LDAP-konfigurasjon", - "ldap_saved": "LDAP-konfigurasjonen er lagret", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Configure Single Sign-On via an OpenID Connect provider (Azure AD, Okta, Google, Keycloak, etc.).", - "oidc_enabled": "Aktiver OIDC-autentisering", - "oidc_enabled_hint": "Allow users to sign in with an external identity provider", - "oidc_provider": "Identitetsleverandør", - "oidc_display_name": "Visningsnavn på knapp", - "oidc_display_name_hint": "Text shown on the login button (e.g. Azure AD, Okta)", - "oidc_issuer_url": "Utsteder URL", - "oidc_issuer_url_hint": "OpenID Connect issuer URL (discovery will be automatic)", - "oidc_client_id": "Klient-ID", - "oidc_client_secret": "Klienthemmelighet", - "oidc_redirect_url": "Omdirigere URL (tilbakeringing)", - "oidc_redirect_url_hint": "Must match exactly what is configured in your IdP. Usually: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Omfang", - "oidc_use_pkce": "Bruk PKCE (anbefalt)", - "oidc_auto_discovery": "Automatisk oppdagelse", - "oidc_allow_signup": "Opprett brukere automatisk", - "oidc_manual_endpoints": "Manuelle endepunkts-URLer", - "oidc_authorization_url": "Autorisasjonsendepunkt", - "oidc_token_url": "Token-endepunkt", - "oidc_userinfo_url": "Brukerinfo endepunkt", - "oidc_claim_mapping": "Krav kartlegging", - "oidc_claim_username": "Brukernavnkrav", - "oidc_claim_email": "E-postkrav", - "oidc_claim_name": "Visningsnavnkrav", - "oidc_claim_groups": "Gruppekrav", - "oidc_role_mapping": "Rollekartlegging", - "oidc_default_role": "Standardrolle", - "oidc_group_role_map": "Gruppe → Rollekartlegging", - "oidc_group_role_map_hint": "Én tilordning per linje: gruppenavn=rolle (f.eks. admins=admin, operatører=operatør)", - "oidc_test_discovery": "Test Discovery", - "oidc_testing": "Tester...", - "oidc_test_success": "Oppdagelsen var vellykket! Endepunkter løst.", - "oidc_test_failed": "Oppdagelsen mislyktes", - "oidc_issuer_required": "Utsteder URL kreves for å teste oppdagelsen", - "oidc_save": "Lagre OIDC-konfigurasjon", - "oidc_saved": "OIDC-konfigurasjonen er lagret", - "connection_mode_title": "Tilkoblingsstrategi", - "connection_mode_desc": "Styr hvordan RustDesk-skrivebordsklienter kobler til.", - "connection_mode_label": "Standard tilkoblingsmodus", - "connection_mode_p2p_first": "P2P først (anbefalt) — prøv direkte tilkobling, fall tilbake til relé", - "connection_mode_relay_only": "Kun relé — alle sesjoner bruker reléserveren", - "connection_mode_advanced": "Avanserte alternativer", - "connection_mode_fallback_ms": "P2P reserve-tidsavbrudd (ms)", - "connection_mode_same_nat_relay": "Tving relé når begge peers deler samme offentlige IP (NAT hairpin)", - "connection_mode_network_hint": "P2P krever UDP-port 21116 tilgjengelig mellom klienter.", - "connection_mode_save": "Lagre", - "connection_mode_save_restart": "Lagre og start server på nytt", - "connection_mode_saved": "Tilkoblingsmodus lagret", - "connection_mode_restart_started": "Serveromstart påbegynt", - "connection_mode_restart_failed": "Serveromstart mislyktes", - "connection_mode_not_configurable": "Tilkoblingsmodus kan ikke endres på denne installasjonen", - "connection_mode_source_saved": "Lagret i", - "connection_mode_source_defaults": "Bruker serverstandard (ikke skrivbar fra panelet)", - "connection_mode_runtime": "Aktiv server", - "advanced_title": "Konfigurasjonsfiler", - "advanced_desc": "Rediger serverkonfigurasjonsfiler direkte. Endringer kan kreve omstart av tjenester.", - "advanced_warning": "Disse filene inneholder hemmeligheter. Rediger bare hvis du vet hva du gjør.", - "advanced_files_label": "Filer", - "advanced_select_file": "Velg en fil fra listen for å se eller redigere innholdet.", - "advanced_reload": "Last inn på nytt", - "advanced_save": "Lagre fil", - "advanced_apply_restart": "Bruk (start tjeneste på nytt)", - "advanced_saved": "Konfigurasjonsfil lagret", - "advanced_restart_after_save": "Konfigurasjon lagret. Start den berørte tjenesten på nytt nå?", - "advanced_restart_confirm": "Start de relaterte BetterDesk-tjenestene på nytt? Aktive tilkoblinger kan bli avbrutt kortvarig.", - "advanced_restart_console_confirm": "Start webkonsolljenesten på nytt? Nettlesersessjonen din kobles fra kortvarig.", - "advanced_restart_started": "Tjenesterestart påbegynt", - "advanced_restart_done": "Konsollen startet på nytt — laster inn side på nytt…", - "advanced_restart_polling": "Venter på at konsollen skal komme på nett igjen…", - "advanced_restart_timeout": "Omstart ble sendt, men konsollen svarte ikke i tide. Sjekk logger og last inn manuelt.", - "advanced_restart_failed": "Tjenesterestart mislyktes", - "advanced_save_confirm": "Lagre endringer i denne filen? En sikkerhetskopi av forrige versjon opprettes.", - "advanced_unsaved_confirm": "Du har ulagrede endringer. Forkast dem?", - "advanced_no_files": "Ingen konfigurasjonsfiler tilgjengelig på dette systemet.", - "advanced_readonly": "skrivebeskyttet", - "advanced_missing": "mangler", - "advanced_new_file": "Ny fil (opprettes ikke før du lagrer)", - "advanced_new_file_hint": "Ny fil — legg til innhold og lagre", - "advanced_backup_created": "sikkerhetskopi opprettet", - "advanced_error_unknown": "Ukjent konfigurasjonsfil", - "advanced_error_not_found": "Filen finnes ikke", - "advanced_error_too_large": "Filen overskrider maksimal redigerbar størrelse (512 KB)", - "advanced_error_binary": "Binærfiler kan ikke redigeres i panelet", - "advanced_error_invalid": "Ugyldig filinnhold", - "advanced_error_not_writable": "Filen er ikke skrivbar av konsottprosessen", - "enrollment_title": "Enhetsregistrering (RustDesk)", - "enrollment_desc": "Styr hvordan nye RustDesk-klienter registrerer seg.", - "enrollment_require_approval": "Krev operatørgodkjenning (administrert modus)", - "enrollment_require_approval_hint": "Når aktivert settes ukjente klienter i kø til en operatør godkjenner dem.", - "enrollment_rich_approve": "Fullstendig godkjenningsskjema (navn, mappe, grupper, tagger)", - "enrollment_rich_approve_hint": "Viser en detaljert dialog ved godkjenning av registreringsforespørsler.", - "enrollment_tag_picker": "Velg tagger fra eksisterende enhetstagger", - "enrollment_tag_picker_hint": "Lar operatorer velge tagger fra listen brukt på Enheter-siden.", - "enrollment_open_requests": "Åpne registreringsforespørsler", - "enrollment_pending_count": "{count} ventende registreringsforespørsel(er)", - "tab_advanced": "Avansert", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Tjeneste neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Fil", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (tjenesteenhet)", - "advanced_file_systemd-server": "systemd: betterdesk-server (tjenesteenhet)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfigurasjon)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", - "advanced_restart_none": "Für diese Fil ist kein Tjenesteneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Innlogging mislyktes", - "action_logout": "Logout", - "action_password_change": "Passord endret", - "action_2fa_enable": "2FA aktivert", - "action_2fa_disable": "2FA deaktivert", - "action_user_create": "Bruker opprettet", - "action_user_update": "Bruker oppdatert", - "action_user_delete": "Bruker slettet", - "action_settings_update": "Innstillinger oppdatert", - "action_device_ban": "Enhet utestengt", - "action_device_unban": "Enhet er opphevet", - "action_device_delete": "Enhet slettet" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Konfigurasjonsalternativer", - "server_address": "Serveradresse", - "server_address_hint": "Serverens domene eller IP-adresse", - "custom_port": "Custom Port", - "port_hint": "La stå tomt som standard (21116)", - "relay_server": "Reléserver", - "relay_placeholder": "Samme som ID-server hvis tom", - "relay_hint": "Valgfritt: separat reléserveradresse", - "include_key": "Inkluder offentlig nøkkel i konfigurasjonen", - "generate": "Generer konfigurasjon", - "output": "Konfigurasjonsutgang", - "usage_title": "Tilkoblingsdetaljer", - "generated": "Konfigurasjon generert", - "server_required": "Serveradresse er nødvendig", - "nothing_to_copy": "Generer en konfigurasjon først", - "bundles_title": "Agentpakker", - "new_bundle": "Ny pakke", - "editor_title": "Pakkeredigering", - "empty_state": "Velg en pakke til venstre eller opprett en ny for å begynne.", - "loading": "Laster inn …", - "no_bundles": "Ingen pakker ennå. Lag din første.", - "bundle_name": "Navn på pakke", - "bundle_name_hint": "Kun intern etikett – ikke vist til sluttbrukere.", - "short_link": "Kort nedlastingslenke", - "short_link_hint": "Brukes i den offentlige URL-en (/d/…). Kun små bokstaver, tall og bindestreker (2–32 tegn). Fylles automatisk fra pakkenavn — forkort for enklere deling (f.eks. acme).", - "branding_section": "Merkevarebygging", - "company_name": "Firma / merkenavn", - "short_text": "Kort beskrivelse", - "contact_email": "Kontakt e-post", - "contact_phone": "Kontakt telefon", - "contact_url": "Kontakt nettsiden", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG eller WebP. Maksimalt 256 KB.", - "logo_clear": "Fjern logoen", - "primary_color": "Primærfarge", - "accent_color": "Overskriftsfarge", - "default_lang": "Standardspråk", - "allow_unattended": "Tillat tilgang uten tilsyn", - "allow_unattended_hint": "Når aktivert, viser agenten et permanent passord for operatørtilgang.", - "save": "Lagre pakke", - "revoke": "Oppheve", - "unrevoke": "Aktiver på nytt", - "revoked": "Opphevet", - "preview_title": "Live forhåndsvisning", - "preview_hint": "Omtrentlig utseende på sluttbrukeragentvinduet.", - "preview_default_name": "BetterDesk-støtte", - "preview_status_ready": "Klar", - "preview_id": "ID-en din", - "preview_password": "Passord", - "preview_chat": "Chat med støtte", - "preview_settings": "Innstillinger (kun admin)", - "preview_quit": "Avslutt (kun admin)", - "download_link_title": "Last ned lenke", - "download_link_hint": "Del denne lenken med sluttbrukere. De vil se en merkevarenedlastingsside. Gamle hex-lenker fungerer fortsatt etter at du endrer den korte lenken.", - "open_portal": "Åpne", - "created": "Bunten er opprettet", - "saved": "Bunten er lagret", - "deleted": "Bunten er slettet", - "revoked_ok": "Pakke opphevet", - "unrevoked_ok": "Bunten aktivert på nytt", - "link_copied": "Linken er kopiert til utklippstavlen", - "copy_failed": "Kunne ikke kopiere automatisk – vennligst kopier manuelt", - "unsaved_confirm": "Vil du forkaste ulagrede endringer?", - "confirm_revoke": "Vil du trekke tilbake denne pakken? Nedlastingskoblingen slutter å fungere.", - "confirm_unrevoke": "Vil du aktivere denne pakken på nytt?", - "confirm_delete": "Vil du slette denne pakken permanent? Dette kan ikke angres.", - "errors": { - "validation_failed": "Validering mislyktes", - "name_required": "Buntens navn er obligatorisk", - "company_name_required": "Firmanavn er obligatorisk", - "logo_invalid": "Logoen må være en gyldig bildefil", - "logo_too_large": "Logoen må være 256 KB eller mindre", - "logo_read_failed": "Kunne ikke lese logofilen", - "primary_color_invalid": "Primærfargen må være en hex-verdi (f.eks. #2563eb)", - "accent_color_invalid": "Topptekstfarge må være en heksadesimal verdi (f.eks. #1e293b)", - "contact_url_invalid": "Kontaktnettstedet må være en gyldig URL", - "server_host_required": "Offentlig serveradresse er obligatorisk", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Kort lenke kan bare inneholde små bokstaver, tall og bindestreker", - "slug_too_short": "Kort lenke må være minst 2 tegn", - "slug_too_long": "Kort lenke kan være maks 32 tegn", - "slug_taken": "Denne korte lenken brukes allerede av en annen pakke" - }, - "legacy_title": "Klientkonfigurasjonsgenerator", - "connection_section": "Servertilkobling", - "server_host": "Offentlig serveradresse", - "server_host_hint": "Domenenavn eller offentlig IP der sluttbrukere når din BetterDesk-server.", - "use_https": "Bruk HTTPS / WSS (anbefalt)", - "enrollment_per_device": "Per enhet — godkjenn i Registreringer", - "builds_title": "Klientbygg", - "rebuild_all": "Bygg alle på nytt", - "rebuild_confirm": "Bygg alle plattforminstallasjonsprogrammer for denne pakken på nytt?", - "build_status_ready": "Klar", - "build_status_pending": "I kø", - "build_status_building": "Bygger", - "build_status_failed": "Mislyktes", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Enheteregistrierung", - "enrollment_token_pending": "Pro Enhet nach Genehmigung", - "enrollment_token_set": "Pro Enhet — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Enhete im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Klar-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislyktes", - "build_error_hint": "Byggfeil", - "preview_help": "Be om hjelp" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID-server", - "relay_server": "Reléserver", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Sjekker...", - "label": "Status", - "no_signal": "Intet signal" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Koble til via Desktop Client", - "remote_viewer": "Fjernvisning", - "web_remote": "Nettfjernkontroll", - "details": "Details", - "edit": "Rediger", - "delete": "Slett", - "ban": "Ban", - "unban": "Unban", - "save": "Lagre", - "cancel": "Avbryt", - "confirm": "Bekreft", - "close": "Lukk", - "clear": "Clear", - "ok": "OK", - "saved": "Lagret vellykket", - "back": "Tilbake", - "create": "Opprett", - "dismiss": "Dismiss", - "view_all": "Vis alle", - "cdap_viewer": "CDAP Snapshot-visning", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s siden", - "minutes_ago": "{count}m siden", - "hours_ago": "{count}h siden", - "days_ago": "{count}d siden", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Brukeradministrasjon", - "subtitle": "Administrer konsollbrukere og tillatelser", - "add_user": "Add User", - "edit_user": "Rediger bruker", - "username": "Brukernavn", - "username_placeholder": "Skriv inn brukernavn", - "username_hint": "Kun 3-32 tegn, bokstaver, tall og understreker", - "password": "Passord", - "password_placeholder": "Skriv inn passord", - "password_hint": "Minimum 8 tegn med blandet store og små bokstaver, tall og symboler", - "password_leave_empty": "La stå tomt for å holde deg oppdatert", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Opprettet", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Opprett bruker", - "edit": "Rediger", - "reset_password": "Tilbakestill passord", - "new_password": "Nytt passord", - "delete_title": "Slett bruker", - "delete_confirm": "Er du sikker på at du vil slette brukeren {username}?", - "delete_success": "Brukeren ble slettet", - "user_created": "Bruker opprettet", - "user_updated": "Brukeren er oppdatert", - "password_reset_success": "Passord tilbakestilt", - "empty_title": "Ingen brukere funnet", - "empty_text": "Legg til brukere for å administrere konsolltilgang", - "fill_required": "Vennligst fyll ut alle obligatoriske felter", - "invalid_username": "Brukernavnet må bestå av 3-32 tegn, kun bokstaver, tall og understreking", - "username_exists": "Brukernavnet finnes allerede", - "weak_password": "Passordet er for svakt", - "password_too_short": "Passordet må være på minst 8 tegn", - "invalid_role": "Ugyldig rolle", - "cannot_demote_self": "Du kan ikke degradere deg selv", - "cannot_delete_self": "Du kan ikke slette din egen konto", - "last_admin": "Kan ikke slette den siste administratoren", - "admin_only": "Denne funksjonen er kun tilgjengelig for administratorer", - "password_required": "Passord kreves", - "not_found": "Bruker ikke funnet", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Beste praksis for sikkerhet", - "tip_strong_passwords": "Bruk sterke, unike passord for hver bruker", - "tip_unique_accounts": "Opprett individuelle kontoer for hver person", - "tip_viewer_role": "Bruk seerrolle for brukere som bare trenger lesetilgang", - "tip_operator_role": "Bruk operatørrolle for brukere som trenger å administrere enheter, men ikke brukere", - "tip_audit_logs": "Gjennomgå revisjonslogger regelmessig for mistenkelig aktivitet", - "role_pro": "Pro (kun API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Serveradministrator", - "role_global_admin": "Overordnet administrator", - "organizations": "Organisasjoner", - "user_organizations": "Organisasjoner for {username}", - "no_organizations": "Brukeren er ikke tilordnet noen organisasjon", - "org_removed": "Organisasjonsoppdrag fjernet", - "server_role_label": "Serverrolle", - "server_role_hint": "Bestemmer hva brukeren kan gjøre på tvers av hele konsollen (paneltilgang, serverkonfigurasjon, revisjon osv.).", - "org_membership_section": "Organisasjonsmedlemskap", - "org_membership_hint": "En bruker kan tilhøre flere organisasjoner. Organisasjonsrollen kontrollerer bare tillatelser i den organisasjonen og er uavhengig av serverrollen ovenfor.", - "column_organizations": "Organisasjoner", - "no_orgs_short": "—", - "org_count_one": "{count} organisasjon", - "org_count_many": "{count} organisasjoner", - "all_orgs_assigned": "Brukeren er allerede medlem av hver organisasjon.", - "user_groups": "Brukergrupper", - "user_groups_hint": "Brukergrupper kan brukes til å gi tilgang til utvalgte enhetsgrupper.", - "loading_user_groups": "Laster inn brukergrupper ...", - "no_user_groups": "Ingen brukergrupper tilgjengelig", - "create_user_group": "Opprett gruppe", - "edit_user_group": "Rediger brukergruppe", - "delete_user_group": "Slett brukergruppe", - "delete_user_group_confirm": "Vil du slette brukergruppen {name}? Medlemmer mister tilgang gitt gjennom denne gruppen.", - "user_group_created": "Brukergruppe opprettet", - "user_group_updated": "Brukergruppe oppdatert", - "user_group_deleted": "Brukergruppe slettet", - "user_group_not_found": "Finner ikke brukergruppen", - "group_name": "Gruppenavn", - "group_name_placeholder": "Operatører", - "group_note": "Note", - "group_note_placeholder": "Valgfri merknad", - "group_name_required": "Gruppenavn er påkrevd", - "group_members_count": "{count} medlemmer", - "provider": "Leverandør", - "provider_local": "Lokal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Administrert av identitetsleverandør", - "provider_managed_hint": "Denne kontoen administreres av en ekstern identitetsleverandør (LDAP/AD eller SSO)." - }, - "folders": { - "title": "Folders", - "create": "Opprett mappe", - "edit": "Rediger mappe", - "delete": "Slett mappe", - "name": "Folder Name", - "name_placeholder": "Skriv inn mappenavn", - "name_required": "Mappenavn er påkrevd", - "name_too_long": "Mappenavnet er for langt (maks 50 tegn)", - "color": "Color", - "icon": "Icon", - "not_found": "Finner ikke mappe", - "delete_confirm": "Er du sikker på at du vil slette denne mappen? Enheter vil bli opphevet.", - "delete_success": "Mappen ble slettet", - "created": "Mappe opprettet", - "updated": "Mappen er oppdatert", - "no_devices_selected": "Ingen enheter er valgt", - "devices_moved": "Enheter ble flyttet", - "device_assigned": "Enhet tilordnet mappe", - "unassigned": "Unassigned", - "all_devices": "Alle enheter", - "drag_hint": "Dra enheter til mapper for å organisere dem", - "move_to": "Flytt til", - "toggle_sidebar": "Bytt sidefelt" - }, + "no_groups": "Ingen grupper ennå", + "manual_groups": "Manuelle grupper", + "dynamic_memberships": "Dynamiske medlemskap", + "group_allowed_user_groups": "Tillatte brukergrupper", + "group_allowed_user_groups_hint": "Brukere i utvalgte brukergrupper kan få tilgang til denne enhetsgruppen.", + "no_user_groups": "Ingen brukergrupper", + "edit_group": "Rediger gruppe", + "delete_group": "Slett gruppe", + "delete_group_confirm": "Vil du slette enhetsgruppen {name}?", + "group_deleted": "Enhetsgruppe slettet", + "folder_group_readonly": "Mappestøttede grupper administreres fra mapper.", + "manage_user_groups": "Administrer brukergrupper", + "restore_failed": "Enhet konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Klienten kontaktet API-et nylig, men er ikke registrert på signalserveren (UDP :21116). Start klienten på nytt etter servermigrering.", + "per_page": "Per side" + }, + "keys": { + "title": "Servernøkler", + "subtitle": "Offentlig nøkkel og konfigurasjon for RustDesk-klienter", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Serverinformasjon", + "download": "Last ned nøkkel", + "show_qr": "Show QR", + "qr_hint": "Skann denne QR-koden med RustDesk-mobilappen", + "no_key": "Ingen offentlig nøkkel funnet", + "no_key_to_copy": "Ingen nøkkel å kopiere", + "no_qr": "QR-kode er ikke tilgjengelig", + "download_success": "Nøkkelfilen er lastet ned", + "not_found": "Finner ikke nøkkel", + "api_not_found": "API nøkkel ikke funnet" + }, + "settings": { + "title": "Innstillinger", + "subtitle": "Konsollkonfigurasjon og kontoinnstillinger", + "tab_general": "General", + "tab_server": "Serverinnstillinger", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Språk", + "change_password": "Endre passord", + "password_desc": "Oppdater kontopassordet ditt", + "current_password": "Gjeldende passord", + "new_password": "Nytt passord", + "confirm_password": "Bekreft passord", + "save_password": "Oppdater passord", + "password_changed": "Passordet ble endret", + "fill_all_fields": "Vennligst fyll ut alle feltene", + "passwords_not_match": "Passord stemmer ikke", + "password_requirements": "Passordkrav", + "password_requirements_not_met": "Passordet oppfyller ikke kravene", + "req_length": "Minst 8 tegn", + "req_uppercase": "Minst én stor bokstav", + "req_lowercase": "Minst én liten bokstav", + "req_number": "Minst ett tall", + "server_info": "Serverinformasjon", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Nylig konsollaktivitet", + "no_audit_logs": "Fant ingen revisjonslogger", + "backend_title": "Bakgrunnstjeneste", + "backend_desc": "Velg hvilken serverbackend som skal brukes for enhetsadministrasjon og signal-/relétjenester.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Standard RustDesk signal- og reléservere (hbbs + hbbr). Grunnleggende HTTP API med begrensede endepunkter.", + "backend_betterdesk_desc": "Forbedret Go-basert server med full REST API, JWT autentisering, blokkeringsliste, tagger, sanntids WebSocket hendelser og revisjonslogging.", + "backend_feature_signal": "Signalserver (ID-registrering)", + "backend_feature_relay": "Reléserver (tilkoblingsrelé)", + "backend_feature_basic_api": "Grunnleggende REST API", + "backend_feature_full_api": "Full REST API (34+ endepunkter)", + "backend_feature_jwt": "JWT-autentisering og TOTP 2FA", + "backend_feature_blocklist": "Administrering av IP/ID-blokkeringslister", + "backend_feature_tags": "Enhetsetiketter og gruppering", + "backend_feature_audit": "Revider hendelseslogging", + "backend_feature_websocket": "Sanntids WebSocket-hendelser", + "backend_connection": "Tilkobling", + "backend_api_url": "API URL", + "backend_test": "Test tilkobling", + "backend_testing": "Tester...", + "backend_save": "Bruk Backend", + "backend_saved": "Serverbackend er endret. Enhetsdata vil nå bli administrert av den nye backend.", + "backend_save_failed": "Kunne ikke bytte serverbackend", + "backend_test_success": "Tilkoblingen var vellykket! Serveren er tilgjengelig.", + "backend_test_failed": "Tilkobling mislyktes. Serveren er utilgjengelig.", + "backend_confirm_switch": "Er du sikker på at du vil bytte serverbackend? Dette vil endre hvordan enheter administreres.", + "backend_unreachable": "Kan ikke bytte: Målserveren er ikke tilgjengelig. Start serveren først.", + "invalid_backend": "Ugyldig backend-valg. Velg 'rustdesk' eller 'betterdesk'.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Tofaktorautentisering", + "totp_desc": "Legg til et ekstra lag med sikkerhet med TOTP autentiseringsapper (Google Authenticator, Microsoft Authenticator, Authy, etc.)", + "totp_enabled": "2FA aktivert", + "totp_enabled_desc": "Kontoen din er beskyttet med tofaktorautentisering.", + "totp_disabled": "2FA ikke aktivert", + "totp_disabled_desc": "Aktiver tofaktorautentisering for ekstra kontosikkerhet.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Installer en autentiseringsapp på telefonen din", + "totp_step2": "Skann QR-koden nedenfor", + "totp_step3": "Tast inn den 6-sifrede koden for å bekrefte", + "totp_manual_key": "Manual key", + "totp_enter_code": "Skriv inn bekreftelseskode", + "totp_verify_enable": "Bekreft og aktiver", + "totp_enabled_success": "Tofaktorautentisering aktivert!", + "totp_recovery_warning": "Lagre disse gjenopprettingskodene på et trygt sted. Hver kode kan kun brukes én gang. Hvis du mister tilgangen til autentiseringsappen din, kan du bruke disse kodene til å logge på.", + "totp_done": "Done", + "totp_disable_warning": "Deaktivering av tofaktorautentisering vil gjøre kontoen din mindre sikker. Skriv inn passordet ditt for å bekrefte.", + "totp_disabled_success": "Tofaktorautentisering er deaktivert.", + "tutorials_title": "Veiledninger og veiledninger", + "tutorials_desc": "Kontroller guidede turer og hjelpeoverlegg som vises på hele konsollen", + "tutorials_enabled": "Aktiver opplæringsprogrammer", + "tutorials_enabled_hint": "Når den er deaktivert, starter ikke opplæringen automatisk, og hjelpeknappen vil være skjult", + "tutorials_reset_hint": "Merk alle opplæringsprogrammer som usett slik at de kan vises igjen", + "tutorials_enabled_toast": "Veiledninger aktivert", + "tutorials_disabled_toast": "Veiledninger deaktivert", + "tutorials_reset_toast": "Alle opplæringsprogrammer er tilbakestilt", + "tab_auth": "Autentisering", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurer ekstern autentisering via LDAP eller Active Directory. Brukere vil kunne logge på med domenelegitimasjonen.", + "ldap_enabled": "Aktiver LDAP-autentisering", + "ldap_enabled_hint": "Når aktivert, kan brukere logge på med LDAP/AD-legitimasjon. Lokale kontoer fungerer fortsatt som reserve.", + "ldap_connection": "Servertilkobling", + "ldap_host": "Vert", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Hopp over TLS-verifisering", + "ldap_timeout": "Tidsavbrudd for tilkobling (er)", + "ldap_timeout_hint": "Sekunder å vente på LDAP-serversvar", + "ldap_bind_mode": "Bindmodus", + "ldap_direct_bind": "Direkte binding", + "ldap_direct_bind_hint": "Bind direkte med en DN-mal i stedet for å bruke en tjenestekonto for å søke.", + "ldap_bind_dn": "Bind DN (tjenestekonto)", + "ldap_bind_dn_hint": "Distinguished Name på en skrivebeskyttet tjenestekonto som brukes til å søke etter brukere.", + "ldap_bind_password": "Bind passord", + "ldap_base_dn": "Base DN", + "ldap_base_dn_hint": "Søkebase for å finne brukere, f.eks. dc=eksempel,dc=com", + "ldap_user_filter": "Brukerfilter", + "ldap_user_filter_hint": "LDAP filter for å finne brukere. Bruk {{username}} som plassholder. Standard: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Direktebind DN-mal", + "ldap_direct_bind_dn_hint": "DN mal for direkte binding. Bruk {{username}} som plassholder, f.eks. uid={{username}},ou=brukere,dc=eksempel,dc=com", + "ldap_user_attrs": "Brukerattributter", + "ldap_attr_id": "Brukernavnattributt", + "ldap_attr_email": "E-postattributt", + "ldap_attr_name": "Visningsnavnattributt", + "ldap_group_mapping": "Gruppe → Rollekartlegging", + "ldap_group_base_dn": "Gruppe Base DN", + "ldap_group_base_dn_hint": "La stå tomt for å bruke hovedbase-DN", + "ldap_group_filter": "Gruppefilter", + "ldap_group_attr_name": "Gruppenavnattributt", + "ldap_default_role": "Standardrolle", + "ldap_default_role_hint": "Rolle tildelt brukere hvis LDAP-grupper ikke samsvarer med noen tilordning", + "ldap_role_viewer": "Seer", + "ldap_role_operator": "Operatør", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Gruppe → Rollekart", + "ldap_group_role_map_hint": "Kartlegg LDAP-grupper til BetterDesk-roller. Format: GroupDN=rolle atskilt med | (rør). Example: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Test tilkobling", + "ldap_testing": "Tester...", + "ldap_test_success": "Tilkoblingen var vellykket! LDAP server is reachable and bind credentials are valid.", + "ldap_test_failed": "Tilkobling mislyktes", + "ldap_save": "Lagre LDAP-konfigurasjon", + "ldap_saved": "LDAP-konfigurasjonen er lagret", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Configure Single Sign-On via an OpenID Connect provider (Azure AD, Okta, Google, Keycloak, etc.).", + "oidc_enabled": "Aktiver OIDC-autentisering", + "oidc_enabled_hint": "Allow users to sign in with an external identity provider", + "oidc_provider": "Identitetsleverandør", + "oidc_display_name": "Visningsnavn på knapp", + "oidc_display_name_hint": "Text shown on the login button (e.g. Azure AD, Okta)", + "oidc_issuer_url": "Utsteder URL", + "oidc_issuer_url_hint": "OpenID Connect issuer URL (discovery will be automatic)", + "oidc_client_id": "Klient-ID", + "oidc_client_secret": "Klienthemmelighet", + "oidc_redirect_url": "Omdirigere URL (tilbakeringing)", + "oidc_redirect_url_hint": "Must match exactly what is configured in your IdP. Usually: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Omfang", + "oidc_use_pkce": "Bruk PKCE (anbefalt)", + "oidc_auto_discovery": "Automatisk oppdagelse", + "oidc_allow_signup": "Opprett brukere automatisk", + "oidc_manual_endpoints": "Manuelle endepunkts-URLer", + "oidc_authorization_url": "Autorisasjonsendepunkt", + "oidc_token_url": "Token-endepunkt", + "oidc_userinfo_url": "Brukerinfo endepunkt", + "oidc_claim_mapping": "Krav kartlegging", + "oidc_claim_username": "Brukernavnkrav", + "oidc_claim_email": "E-postkrav", + "oidc_claim_name": "Visningsnavnkrav", + "oidc_claim_groups": "Gruppekrav", + "oidc_role_mapping": "Rollekartlegging", + "oidc_default_role": "Standardrolle", + "oidc_group_role_map": "Gruppe → Rollekartlegging", + "oidc_group_role_map_hint": "Én tilordning per linje: gruppenavn=rolle (f.eks. admins=admin, operatører=operatør)", + "oidc_test_discovery": "Test Discovery", + "oidc_testing": "Tester...", + "oidc_test_success": "Oppdagelsen var vellykket! Endepunkter løst.", + "oidc_test_failed": "Oppdagelsen mislyktes", + "oidc_issuer_required": "Utsteder URL kreves for å teste oppdagelsen", + "oidc_save": "Lagre OIDC-konfigurasjon", + "oidc_saved": "OIDC-konfigurasjonen er lagret", + "connection_mode_title": "Tilkoblingsstrategi", + "connection_mode_desc": "Styr hvordan RustDesk-skrivebordsklienter kobler til.", + "connection_mode_label": "Standard tilkoblingsmodus", + "connection_mode_p2p_first": "P2P først (anbefalt) — prøv direkte tilkobling, fall tilbake til relé", + "connection_mode_relay_only": "Kun relé — alle sesjoner bruker reléserveren", + "connection_mode_advanced": "Avanserte alternativer", + "connection_mode_fallback_ms": "P2P reserve-tidsavbrudd (ms)", + "connection_mode_same_nat_relay": "Tving relé når begge peers deler samme offentlige IP (NAT hairpin)", + "connection_mode_network_hint": "P2P krever UDP-port 21116 tilgjengelig mellom klienter.", + "connection_mode_save": "Lagre", + "connection_mode_save_restart": "Lagre og start server på nytt", + "connection_mode_saved": "Tilkoblingsmodus lagret", + "connection_mode_restart_started": "Serveromstart påbegynt", + "connection_mode_restart_failed": "Serveromstart mislyktes", + "connection_mode_not_configurable": "Tilkoblingsmodus kan ikke endres på denne installasjonen", + "connection_mode_source_saved": "Lagret i", + "connection_mode_source_defaults": "Bruker serverstandard (ikke skrivbar fra panelet)", + "connection_mode_runtime": "Aktiv server", + "advanced_title": "Konfigurasjonsfiler", + "advanced_desc": "Rediger serverkonfigurasjonsfiler direkte. Endringer kan kreve omstart av tjenester.", + "advanced_warning": "Disse filene inneholder hemmeligheter. Rediger bare hvis du vet hva du gjør.", + "advanced_files_label": "Filer", + "advanced_select_file": "Velg en fil fra listen for å se eller redigere innholdet.", + "advanced_reload": "Last inn på nytt", + "advanced_save": "Lagre fil", + "advanced_apply_restart": "Bruk (start tjeneste på nytt)", + "advanced_saved": "Konfigurasjonsfil lagret", + "advanced_restart_after_save": "Konfigurasjon lagret. Start den berørte tjenesten på nytt nå?", + "advanced_restart_confirm": "Start de relaterte BetterDesk-tjenestene på nytt? Aktive tilkoblinger kan bli avbrutt kortvarig.", + "advanced_restart_console_confirm": "Start webkonsolljenesten på nytt? Nettlesersessjonen din kobles fra kortvarig.", + "advanced_restart_started": "Tjenesterestart påbegynt", + "advanced_restart_done": "Konsollen startet på nytt — laster inn side på nytt…", + "advanced_restart_polling": "Venter på at konsollen skal komme på nett igjen…", + "advanced_restart_timeout": "Omstart ble sendt, men konsollen svarte ikke i tide. Sjekk logger og last inn manuelt.", + "advanced_restart_failed": "Tjenesterestart mislyktes", + "advanced_save_confirm": "Lagre endringer i denne filen? En sikkerhetskopi av forrige versjon opprettes.", + "advanced_unsaved_confirm": "Du har ulagrede endringer. Forkast dem?", + "advanced_no_files": "Ingen konfigurasjonsfiler tilgjengelig på dette systemet.", + "advanced_readonly": "skrivebeskyttet", + "advanced_missing": "mangler", + "advanced_new_file": "Ny fil (opprettes ikke før du lagrer)", + "advanced_new_file_hint": "Ny fil — legg til innhold og lagre", + "advanced_backup_created": "sikkerhetskopi opprettet", + "advanced_error_unknown": "Ukjent konfigurasjonsfil", + "advanced_error_not_found": "Filen finnes ikke", + "advanced_error_too_large": "Filen overskrider maksimal redigerbar størrelse (512 KB)", + "advanced_error_binary": "Binærfiler kan ikke redigeres i panelet", + "advanced_error_invalid": "Ugyldig filinnhold", + "advanced_error_not_writable": "Filen er ikke skrivbar av konsottprosessen", + "enrollment_title": "Enhetsregistrering (RustDesk)", + "enrollment_desc": "Styr hvordan nye RustDesk-klienter registrerer seg.", + "enrollment_require_approval": "Krev operatørgodkjenning (administrert modus)", + "enrollment_require_approval_hint": "Når aktivert settes ukjente klienter i kø til en operatør godkjenner dem.", + "enrollment_rich_approve": "Fullstendig godkjenningsskjema (navn, mappe, grupper, tagger)", + "enrollment_rich_approve_hint": "Viser en detaljert dialog ved godkjenning av registreringsforespørsler.", + "enrollment_tag_picker": "Velg tagger fra eksisterende enhetstagger", + "enrollment_tag_picker_hint": "Lar operatorer velge tagger fra listen brukt på Enheter-siden.", + "enrollment_open_requests": "Åpne registreringsforespørsler", + "enrollment_pending_count": "{count} ventende registreringsforespørsel(er)", + "tab_advanced": "Avansert", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Tjeneste neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Fil", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (tjenesteenhet)", + "advanced_file_systemd-server": "systemd: betterdesk-server (tjenesteenhet)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfigurasjon)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", + "advanced_restart_none": "Für diese Fil ist kein Tjenesteneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Innlogging mislyktes", + "action_logout": "Logout", + "action_password_change": "Passord endret", + "action_2fa_enable": "2FA aktivert", + "action_2fa_disable": "2FA deaktivert", + "action_user_create": "Bruker opprettet", + "action_user_update": "Bruker oppdatert", + "action_user_delete": "Bruker slettet", + "action_settings_update": "Innstillinger oppdatert", + "action_device_ban": "Enhet utestengt", + "action_device_unban": "Enhet er opphevet", + "action_device_delete": "Enhet slettet" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidlig funksjon — agentpakkegeneratoren er under aktiv utvikling.", + "config_options": "Konfigurasjonsalternativer", + "server_address": "Serveradresse", + "server_address_hint": "Serverens domene eller IP-adresse", + "custom_port": "Custom Port", + "port_hint": "La stå tomt som standard (21116)", + "relay_server": "Reléserver", + "relay_placeholder": "Samme som ID-server hvis tom", + "relay_hint": "Valgfritt: separat reléserveradresse", + "include_key": "Inkluder offentlig nøkkel i konfigurasjonen", + "generate": "Generer konfigurasjon", + "output": "Konfigurasjonsutgang", + "usage_title": "Tilkoblingsdetaljer", + "generated": "Konfigurasjon generert", + "server_required": "Serveradresse er nødvendig", + "nothing_to_copy": "Generer en konfigurasjon først", + "bundles_title": "Agentpakker", + "new_bundle": "Ny pakke", + "editor_title": "Pakkeredigering", + "empty_state": "Velg en pakke til venstre eller opprett en ny for å begynne.", + "loading": "Laster inn …", + "no_bundles": "Ingen pakker ennå. Lag din første.", + "bundle_name": "Navn på pakke", + "bundle_name_hint": "Kun intern etikett – ikke vist til sluttbrukere.", + "short_link": "Kort nedlastingslenke", + "short_link_hint": "Brukes i den offentlige URL-en (/d/…). Kun små bokstaver, tall og bindestreker (2–32 tegn). Fylles automatisk fra pakkenavn — forkort for enklere deling (f.eks. acme).", + "branding_section": "Merkevarebygging", + "company_name": "Firma / merkenavn", + "short_text": "Kort beskrivelse", + "contact_email": "Kontakt e-post", + "contact_phone": "Kontakt telefon", + "contact_url": "Kontakt nettsiden", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG eller WebP. Maksimalt 256 KB.", + "logo_clear": "Fjern logoen", + "primary_color": "Primærfarge", + "accent_color": "Overskriftsfarge", + "default_lang": "Standardspråk", + "allow_unattended": "Tillat tilgang uten tilsyn", + "allow_unattended_hint": "Når aktivert, viser agenten et permanent passord for operatørtilgang.", + "save": "Lagre pakke", + "revoke": "Oppheve", + "unrevoke": "Aktiver på nytt", + "revoked": "Opphevet", + "preview_title": "Live forhåndsvisning", + "preview_hint": "Omtrentlig utseende på sluttbrukeragentvinduet.", + "preview_default_name": "BetterDesk-støtte", + "preview_status_ready": "Klar", + "preview_id": "ID-en din", + "preview_password": "Passord", + "preview_chat": "Chat med støtte", + "preview_settings": "Innstillinger (kun admin)", + "preview_quit": "Avslutt (kun admin)", + "download_link_title": "Last ned lenke", + "download_link_hint": "Del denne lenken med sluttbrukere. De vil se en merkevarenedlastingsside. Gamle hex-lenker fungerer fortsatt etter at du endrer den korte lenken.", + "open_portal": "Åpne", + "created": "Bunten er opprettet", + "saved": "Bunten er lagret", + "deleted": "Bunten er slettet", + "revoked_ok": "Pakke opphevet", + "unrevoked_ok": "Bunten aktivert på nytt", + "link_copied": "Linken er kopiert til utklippstavlen", + "copy_failed": "Kunne ikke kopiere automatisk – vennligst kopier manuelt", + "unsaved_confirm": "Vil du forkaste ulagrede endringer?", + "confirm_revoke": "Vil du trekke tilbake denne pakken? Nedlastingskoblingen slutter å fungere.", + "confirm_unrevoke": "Vil du aktivere denne pakken på nytt?", + "confirm_delete": "Vil du slette denne pakken permanent? Dette kan ikke angres.", "errors": { - "forbidden_title": "Tilgang nektet", - "forbidden_message": "Du har ikke tillatelse til å få tilgang til denne ressursen.", - "not_found_title": "Siden ikke funnet", - "not_found_message": "Siden du leter etter eksisterer ikke eller har blitt flyttet.", - "server_error_title": "Serverfeil", - "server_error_message": "Noe gikk galt. Vennligst prøv igjen senere.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Kunne ikke laste inn enheter", - "load_key_failed": "Kunne ikke laste inn nøkkelen", - "load_qr_failed": "Kunne ikke laste inn QR", - "load_audit_failed": "Kunne ikke laste inn revisjonsloggen", - "load_users_failed": "Kunne ikke laste inn brukere", - "load_folders_failed": "Kunne ikke laste inn mapper", - "download_failed": "Nedlasting mislyktes", - "logout_failed": "Avlogging mislyktes", - "password_change_failed": "Kunne ikke endre passord", - "language_change_failed": "Kunne ikke endre språk", - "ban_failed": "Kunne ikke utestenge enheten", - "unban_failed": "Kunne ikke oppheve utestengelsen av enheten", - "delete_failed": "Kunne ikke slette enheten", - "change_id_failed": "Kunne ikke endre enhets-ID", - "bulk_delete_failed": "Kunne ikke slette enheter", - "sync_failed": "Kunne ikke synkronisere status", - "error": "Error", - "not_found": "Not found", - "server_error": "Serverfeil", - "load_device_failed": "Kunne ikke laste inn enheten", - "load_orgs_failed": "Kunne ikke laste inn organisasjoner" + "validation_failed": "Validering mislyktes", + "name_required": "Buntens navn er obligatorisk", + "company_name_required": "Firmanavn er obligatorisk", + "logo_invalid": "Logoen må være en gyldig bildefil", + "logo_too_large": "Logoen må være 256 KB eller mindre", + "logo_read_failed": "Kunne ikke lese logofilen", + "primary_color_invalid": "Primærfargen må være en hex-verdi (f.eks. #2563eb)", + "accent_color_invalid": "Topptekstfarge må være en heksadesimal verdi (f.eks. #1e293b)", + "contact_url_invalid": "Kontaktnettstedet må være en gyldig URL", + "server_host_required": "Offentlig serveradresse er obligatorisk", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Kort lenke kan bare inneholde små bokstaver, tall og bindestreker", + "slug_too_short": "Kort lenke må være minst 2 tegn", + "slug_too_long": "Kort lenke kan være maks 32 tegn", + "slug_taken": "Denne korte lenken brukes allerede av en annen pakke" }, - "remote": { - "title": "Eksternt skrivebord", - "connecting": "Kobler til...", - "waiting_password": "Venter på passord", - "authenticating": "Autentiserer...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Passord kreves", - "enter_password_for": "Skriv inn passord for enheten", - "password_placeholder": "Enhetspassord", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Tilbake til Enheter", - "fullscreen": "Fullscreen", - "toggle_audio": "Slå på lyd", - "send_keys": "Send nøkler", - "scale_mode": "Scale Mode", - "scale_fit": "Tilpass til vindu", - "scale_fill": "Fill Window", - "scale_original": "Originalstørrelse (1:1)", - "scale_stretch": "Strekk for å fylle", - "actions": "Actions", - "lock_screen": "Låseskjerm", - "restart_remote": "Start ekstern enhet på nytt", - "refresh_screen": "Oppdater skjermen", - "clipboard_paste": "Lim inn fra utklippstavlen", - "block_input": "Block Input", - "display_settings": "Skjerminnstillinger", - "image_quality": "Bildekvalitet", - "quality_best": "Best (full kvalitet, 60 bilder per sekund)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Vis ekstern markør", - "lock_after_session": "Lås etter økt", - "privacy_mode": "Personvernmodus", - "disable_clipboard": "Deaktiver utklippstavlen", - "chat": "Chat", - "chat_placeholder": "Skriv inn en melding...", - "record": "Opptaksskjerm", - "view_only": "Bare visning", - "pin_toolbar": "Fest verktøylinjen", - "monitors": "Monitors", - "select_monitor": "Velg Monitor", - "quality_speed": "Hastighet (lav kvalitet, 60 bilder per sekund)", - "quality_quality": "Kvalitet (best, 30 bilder per sekund)", - "recording_started": "Opptaket startet", - "recording_stopped": "Opptaket stoppet", - "download_recording": "Last ned opptak", - "e2e_encrypted": "Ende-til-ende kryptert", - "e2e_key_exchange": "Etablerer sikker kanal...", - "confirm_restart": "Er du sikker på at du vil starte den eksterne enheten på nytt?", - "webcodecs_not_supported": "Nettleseren din støtter ikke WebCodecs API. Bruk Chrome 94+ eller Edge 94+.", - "webcodecs_insecure_context": "WebCodecs utilgjengelig over HTTP. Video bruker programvarereserve. For best ytelse, bruk HTTPS.", - "webcodecs_fallback_active": "Programvarevideodekoder aktiv (begrenset ytelse)", - "click_to_start": "Klikk for å starte", - "autoplay_blocked": "Nettleseren krever brukerinteraksjon for å starte video- og lydavspilling.", - "start_playback": "Start avspilling", - "new_connection": "Ny tilkobling", - "device_id_placeholder": "Skriv inn enhets-ID", - "http_warning": "HTTP-modus: begrenset til H.264 programvaredekoding (~15 FPS). Bruk HTTPS for full ytelse (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Filoverføring", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Denne mappen er tom", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Overføringen mislyktes", - "file_show_hidden": "Vis skjulte filer", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Skriv inn mappenavn:", - "file_parent": "Overordnet mappe", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Skriv inn nytt navn:", - "file_delete_confirm": "Er du sikker på at du vil slette dette elementet?", - "file_cancelled": "Overføringen kansellert", - "2fa_required": "2FA-verifisering kreves", - "2fa_hint": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", - "2fa_invalid": "Skriv inn en gyldig 6-sifret kode", - "verify": "Verify", - "use_cdap_fallback": "Bruk CDAP viewer", - "cdap_fallback_hint": "Åpne den lette JPEG-pollingvisningen som bruker bd-signal/CDAP i stedet for RustDesk-reléet. Nyttig når peer er offline på reléet, men nåbar via agentstyrekanalen.", - "clipboard_empty": "Utklippstavlen er tom", - "clipboard_denied": "Utklippstavle tilgang nektet. HTTPS kreves eller tillatelse ikke gitt.", - "file_loading": "Laster inn...", - "file_timeout": "Ekstern enhet svarte ikke. Filoverføring støttes kanskje ikke eller er deaktivert på den eksterne maskinen.", - "codec": "Videokodek", - "codec_auto": "Auto (anbefalt)" + "legacy_title": "Klientkonfigurasjonsgenerator", + "connection_section": "Servertilkobling", + "server_host": "Offentlig serveradresse", + "server_host_hint": "Domenenavn eller offentlig IP der sluttbrukere når din BetterDesk-server.", + "use_https": "Bruk HTTPS / WSS (anbefalt)", + "enrollment_per_device": "Per enhet — godkjenn i Registreringer", + "builds_title": "Klientbygg", + "rebuild_all": "Bygg alle på nytt", + "rebuild_confirm": "Bygg alle plattforminstallasjonsprogrammer for denne pakken på nytt?", + "build_status_ready": "Klar", + "build_status_pending": "I kø", + "build_status_building": "Bygger", + "build_status_failed": "Mislyktes", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Enheteregistrierung", + "enrollment_token_pending": "Pro Enhet nach Genehmigung", + "enrollment_token_set": "Pro Enhet — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Enhete im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Klar-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislyktes", + "build_error_hint": "Byggfeil", + "preview_help": "Be om hjelp" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID-server", + "relay_server": "Reléserver", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Sjekker...", + "label": "Status", + "no_signal": "Intet signal" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Koble til via Desktop Client", + "remote_viewer": "Fjernvisning", + "web_remote": "Nettfjernkontroll", + "details": "Details", + "edit": "Rediger", + "delete": "Slett", + "ban": "Ban", + "unban": "Unban", + "save": "Lagre", + "cancel": "Avbryt", + "confirm": "Bekreft", + "close": "Lukk", + "clear": "Clear", + "ok": "OK", + "saved": "Lagret vellykket", + "back": "Tilbake", + "create": "Opprett", + "dismiss": "Dismiss", + "view_all": "Vis alle", + "cdap_viewer": "CDAP Snapshot-visning", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s siden", + "minutes_ago": "{count}m siden", + "hours_ago": "{count}h siden", + "days_ago": "{count}d siden", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Brukeradministrasjon", + "subtitle": "Administrer konsollbrukere og tillatelser", + "add_user": "Add User", + "edit_user": "Rediger bruker", + "username": "Brukernavn", + "username_placeholder": "Skriv inn brukernavn", + "username_hint": "Kun 3-32 tegn, bokstaver, tall og understreker", + "password": "Passord", + "password_placeholder": "Skriv inn passord", + "password_hint": "Minimum 8 tegn med blandet store og små bokstaver, tall og symboler", + "password_leave_empty": "La stå tomt for å holde deg oppdatert", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Opprettet", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Opprett bruker", + "edit": "Rediger", + "reset_password": "Tilbakestill passord", + "new_password": "Nytt passord", + "delete_title": "Slett bruker", + "delete_confirm": "Er du sikker på at du vil slette brukeren {username}?", + "delete_success": "Brukeren ble slettet", + "user_created": "Bruker opprettet", + "user_updated": "Brukeren er oppdatert", + "password_reset_success": "Passord tilbakestilt", + "empty_title": "Ingen brukere funnet", + "empty_text": "Legg til brukere for å administrere konsolltilgang", + "fill_required": "Vennligst fyll ut alle obligatoriske felter", + "invalid_username": "Brukernavnet må bestå av 3-32 tegn, kun bokstaver, tall og understreking", + "username_exists": "Brukernavnet finnes allerede", + "weak_password": "Passordet er for svakt", + "password_too_short": "Passordet må være på minst 8 tegn", + "invalid_role": "Ugyldig rolle", + "cannot_demote_self": "Du kan ikke degradere deg selv", + "cannot_delete_self": "Du kan ikke slette din egen konto", + "last_admin": "Kan ikke slette den siste administratoren", + "admin_only": "Denne funksjonen er kun tilgjengelig for administratorer", + "password_required": "Passord kreves", + "not_found": "Bruker ikke funnet", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Beste praksis for sikkerhet", + "tip_strong_passwords": "Bruk sterke, unike passord for hver bruker", + "tip_unique_accounts": "Opprett individuelle kontoer for hver person", + "tip_viewer_role": "Bruk seerrolle for brukere som bare trenger lesetilgang", + "tip_operator_role": "Bruk operatørrolle for brukere som trenger å administrere enheter, men ikke brukere", + "tip_audit_logs": "Gjennomgå revisjonslogger regelmessig for mistenkelig aktivitet", + "role_pro": "Pro (kun API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Serveradministrator", + "role_global_admin": "Overordnet administrator", + "organizations": "Organisasjoner", + "user_organizations": "Organisasjoner for {username}", + "no_organizations": "Brukeren er ikke tilordnet noen organisasjon", + "org_removed": "Organisasjonsoppdrag fjernet", + "server_role_label": "Serverrolle", + "server_role_hint": "Bestemmer hva brukeren kan gjøre på tvers av hele konsollen (paneltilgang, serverkonfigurasjon, revisjon osv.).", + "org_membership_section": "Organisasjonsmedlemskap", + "org_membership_hint": "En bruker kan tilhøre flere organisasjoner. Organisasjonsrollen kontrollerer bare tillatelser i den organisasjonen og er uavhengig av serverrollen ovenfor.", + "column_organizations": "Organisasjoner", + "no_orgs_short": "—", + "org_count_one": "{count} organisasjon", + "org_count_many": "{count} organisasjoner", + "all_orgs_assigned": "Brukeren er allerede medlem av hver organisasjon.", + "user_groups": "Brukergrupper", + "user_groups_hint": "Brukergrupper kan brukes til å gi tilgang til utvalgte enhetsgrupper.", + "loading_user_groups": "Laster inn brukergrupper ...", + "no_user_groups": "Ingen brukergrupper tilgjengelig", + "create_user_group": "Opprett gruppe", + "edit_user_group": "Rediger brukergruppe", + "delete_user_group": "Slett brukergruppe", + "delete_user_group_confirm": "Vil du slette brukergruppen {name}? Medlemmer mister tilgang gitt gjennom denne gruppen.", + "user_group_created": "Brukergruppe opprettet", + "user_group_updated": "Brukergruppe oppdatert", + "user_group_deleted": "Brukergruppe slettet", + "user_group_not_found": "Finner ikke brukergruppen", + "group_name": "Gruppenavn", + "group_name_placeholder": "Operatører", + "group_note": "Note", + "group_note_placeholder": "Valgfri merknad", + "group_name_required": "Gruppenavn er påkrevd", + "group_members_count": "{count} medlemmer", + "provider": "Leverandør", + "provider_local": "Lokal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Administrert av identitetsleverandør", + "provider_managed_hint": "Denne kontoen administreres av en ekstern identitetsleverandør (LDAP/AD eller SSO)." + }, + "folders": { + "title": "Folders", + "create": "Opprett mappe", + "edit": "Rediger mappe", + "delete": "Slett mappe", + "name": "Folder Name", + "name_placeholder": "Skriv inn mappenavn", + "name_required": "Mappenavn er påkrevd", + "name_too_long": "Mappenavnet er for langt (maks 50 tegn)", + "color": "Color", + "icon": "Icon", + "not_found": "Finner ikke mappe", + "delete_confirm": "Er du sikker på at du vil slette denne mappen? Enheter vil bli opphevet.", + "delete_success": "Mappen ble slettet", + "created": "Mappe opprettet", + "updated": "Mappen er oppdatert", + "no_devices_selected": "Ingen enheter er valgt", + "devices_moved": "Enheter ble flyttet", + "device_assigned": "Enhet tilordnet mappe", + "unassigned": "Unassigned", + "all_devices": "Alle enheter", + "drag_hint": "Dra enheter til mapper for å organisere dem", + "move_to": "Flytt til", + "toggle_sidebar": "Bytt sidefelt" + }, + "errors": { + "forbidden_title": "Tilgang nektet", + "forbidden_message": "Du har ikke tillatelse til å få tilgang til denne ressursen.", + "not_found_title": "Siden ikke funnet", + "not_found_message": "Siden du leter etter eksisterer ikke eller har blitt flyttet.", + "server_error_title": "Serverfeil", + "server_error_message": "Noe gikk galt. Vennligst prøv igjen senere.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Kunne ikke laste inn enheter", + "load_key_failed": "Kunne ikke laste inn nøkkelen", + "load_qr_failed": "Kunne ikke laste inn QR", + "load_audit_failed": "Kunne ikke laste inn revisjonsloggen", + "load_users_failed": "Kunne ikke laste inn brukere", + "load_folders_failed": "Kunne ikke laste inn mapper", + "download_failed": "Nedlasting mislyktes", + "logout_failed": "Avlogging mislyktes", + "password_change_failed": "Kunne ikke endre passord", + "language_change_failed": "Kunne ikke endre språk", + "ban_failed": "Kunne ikke utestenge enheten", + "unban_failed": "Kunne ikke oppheve utestengelsen av enheten", + "delete_failed": "Kunne ikke slette enheten", + "change_id_failed": "Kunne ikke endre enhets-ID", + "bulk_delete_failed": "Kunne ikke slette enheter", + "sync_failed": "Kunne ikke synkronisere status", + "error": "Error", + "not_found": "Not found", + "server_error": "Serverfeil", + "load_device_failed": "Kunne ikke laste inn enheten", + "load_orgs_failed": "Kunne ikke laste inn organisasjoner" + }, + "remote": { + "title": "Eksternt skrivebord", + "connecting": "Kobler til...", + "waiting_password": "Venter på passord", + "authenticating": "Autentiserer...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Passord kreves", + "enter_password_for": "Skriv inn passord for enheten", + "password_placeholder": "Enhetspassord", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Tilbake til Enheter", + "fullscreen": "Fullscreen", + "toggle_audio": "Slå på lyd", + "send_keys": "Send nøkler", + "scale_mode": "Scale Mode", + "scale_fit": "Tilpass til vindu", + "scale_fill": "Fill Window", + "scale_original": "Originalstørrelse (1:1)", + "scale_stretch": "Strekk for å fylle", + "actions": "Actions", + "lock_screen": "Låseskjerm", + "restart_remote": "Start ekstern enhet på nytt", + "refresh_screen": "Oppdater skjermen", + "clipboard_paste": "Lim inn fra utklippstavlen", + "block_input": "Block Input", + "display_settings": "Skjerminnstillinger", + "image_quality": "Bildekvalitet", + "quality_best": "Best (full kvalitet, 60 bilder per sekund)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Vis ekstern markør", + "lock_after_session": "Lås etter økt", + "privacy_mode": "Personvernmodus", + "disable_clipboard": "Deaktiver utklippstavlen", + "chat": "Chat", + "chat_placeholder": "Skriv inn en melding...", + "record": "Opptaksskjerm", + "view_only": "Bare visning", + "pin_toolbar": "Fest verktøylinjen", + "monitors": "Monitors", + "select_monitor": "Velg Monitor", + "quality_speed": "Hastighet (lav kvalitet, 60 bilder per sekund)", + "quality_quality": "Kvalitet (best, 30 bilder per sekund)", + "recording_started": "Opptaket startet", + "recording_stopped": "Opptaket stoppet", + "download_recording": "Last ned opptak", + "e2e_encrypted": "Ende-til-ende kryptert", + "e2e_key_exchange": "Etablerer sikker kanal...", + "confirm_restart": "Er du sikker på at du vil starte den eksterne enheten på nytt?", + "webcodecs_not_supported": "Nettleseren din støtter ikke WebCodecs API. Bruk Chrome 94+ eller Edge 94+.", + "webcodecs_insecure_context": "WebCodecs utilgjengelig over HTTP. Video bruker programvarereserve. For best ytelse, bruk HTTPS.", + "webcodecs_fallback_active": "Programvarevideodekoder aktiv (begrenset ytelse)", + "click_to_start": "Klikk for å starte", + "autoplay_blocked": "Nettleseren krever brukerinteraksjon for å starte video- og lydavspilling.", + "start_playback": "Start avspilling", + "new_connection": "Ny tilkobling", + "device_id_placeholder": "Skriv inn enhets-ID", + "http_warning": "HTTP-modus: begrenset til H.264 programvaredekoding (~15 FPS). Bruk HTTPS for full ytelse (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Filoverføring", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Denne mappen er tom", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Overføringen mislyktes", + "file_show_hidden": "Vis skjulte filer", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Skriv inn mappenavn:", + "file_parent": "Overordnet mappe", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Skriv inn nytt navn:", + "file_delete_confirm": "Er du sikker på at du vil slette dette elementet?", + "file_cancelled": "Overføringen kansellert", + "2fa_required": "2FA-verifisering kreves", + "2fa_hint": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", + "2fa_invalid": "Skriv inn en gyldig 6-sifret kode", + "verify": "Verify", + "use_cdap_fallback": "Bruk CDAP viewer", + "cdap_fallback_hint": "Åpne den lette JPEG-pollingvisningen som bruker bd-signal/CDAP i stedet for RustDesk-reléet. Nyttig når peer er offline på reléet, men nåbar via agentstyrekanalen.", + "clipboard_empty": "Utklippstavlen er tom", + "clipboard_denied": "Utklippstavle tilgang nektet. HTTPS kreves eller tillatelse ikke gitt.", + "file_loading": "Laster inn...", + "file_timeout": "Ekstern enhet svarte ikke. Filoverføring støttes kanskje ikke eller er deaktivert på den eksterne maskinen.", + "codec": "Videokodek", + "codec_auto": "Auto (anbefalt)" + }, + "branding": { + "identity_title": "Merkeidentitet", + "identity_desc": "Tilpass applikasjonsnavnet og beskrivelsen som vises på konsollen", + "app_name": "Søknadsnavn", + "app_description": "Søknadsbeskrivelse", + "logo_title": "Logo", + "logo_desc": "Velg hvordan logoen din skal vises i sidefeltet og påloggingssiden", + "logo_type_icon": "Materialikon", + "logo_type_svg": "SVG-kode", + "logo_type_image": "Bilde-URL", + "logo_icon_name": "Ikonnavn", + "logo_icon_hint": "Skriv inn et materialikonnavn (f.eks. dns, sky, sikkerhet). Se fonts.google.com/icons", + "logo_svg_code": "SVG-kode", + "logo_svg_hint": "Lim inn SVG-merkingen din her. Støtter hele -elementer med baner og stiler.", + "logo_image_upload": "Last opp bilde", + "logo_image_choose": "Velg bildefil", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Ugyldig filtype. Bruk PNG, JPG, GIF, WebP eller SVG.", + "preview": "Forhåndsvisning", + "colors_title": "Fargevalg", + "colors_desc": "Tilpass fargepaletten. La stå tomt for å bruke standardinnstillinger.", + "colors_backgrounds": "Bakgrunner", + "colors_text": "Tekst", + "colors_accents": "Aksentfarger", + "colors_borders": "Kanter", + "import_export_title": "Import/eksport", + "import_export_desc": "Lagre temaet ditt som en JSON-fil eller importer en fra en annen instans", + "export_theme": "Eksporter tema", + "import_theme": "Importer tema", + "reset_defaults": "Tilbakestill til standard", + "save_branding": "Lagre merkevarebygging", + "saved": "Merkevarebygging er lagret. Laster inn på nytt...", + "exported": "Tema eksportert", + "imported": "Temaet ble importert. Laster inn på nytt...", + "import_error": "Kunne ikke importere temaet. Ugyldig filformat.", + "reset_confirm": "Er du sikker på at du vil tilbakestille merkevarebyggingen til standardinnstillingene? Dette kan ikke angres.", + "reset_success": "Branding tilbakestilt til standardverdier. Laster inn på nytt...", + "logo_type_text": "Tekstlogo", + "logo_text": "Logotekst", + "logo_text_hint": "Primærtekst vises som merkevarelogoen din", + "logo_text_accent": "Aksenttekst", + "logo_text_accent_hint": "Sekundær tekst under logoen (f.eks. produktnavn eller slagord)", + "logo_upload_success": "Logoen ble lastet opp.", + "typography_title": "Typografi", + "typography_desc": "Velg skrifttyper for overskrifter og brødtekst. Fonter lastes ned til serveren for selvhosting.", + "font_heading": "Overskrift Font", + "font_heading_hint": "Brukes til overskrifter (H1–H6) og tekstlogo", + "font_body": "Brødtekstskrifttype", + "font_body_hint": "Brukes for brødtekst og UI-elementer", + "font_search_placeholder": "Søk etter skrifter...", + "font_system_default": "Systemstandard", + "font_clear": "Fjern", + "font_cat_all": "Alle", + "font_downloaded_count": "skrifter lastet ned på serveren", + "powered_by": "Drevet av", + "background_title": "Bakgrunn og utseende", + "background_desc": "Angi en konsolbakgrunn, gradient eller ensfarget bakgrunn.", + "bg_type_none": "Ingen", + "bg_type_color": "Ensfarget", + "bg_type_gradient": "Gradient", + "bg_type_image": "Bilde", + "bg_color": "Bakgrunnsfarge", + "bg_gradient": "CSS-gradient", + "bg_gradient_hint": "Enhver gyldig CSS-gradient, f.eks. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Last opp bakgrunnsbilde", + "bg_image_choose": "Velg bildefil", + "bg_image_hint": "PNG, JPG, WebP eller GIF. Maks. 8 MB.", + "bg_image_url": "Bildesti / URL", + "bg_size": "Bildestørrelse", + "bg_size_cover": "Dekk (fyll skjerm)", + "bg_size_contain": "Tilpass (fit)", + "bg_size_auto": "Automatisk (original)", + "bg_blur": "Bakgrunnsuskarphet", + "bg_overlay": "Mørkt overlag", + "bg_overlay_hint": "Mørkner bakgrunnen for bedre tekstlesbarhet.", + "bg_image_too_large": "Bildet er for stort. Maksimal størrelse er 8 MB.", + "bg_image_invalid_type": "Ugyldig filtype. Bruk PNG, JPG, WebP eller GIF.", + "bg_upload_success": "Bakgrunnsbilde lastet opp.", + "login_title": "Innloggingsside", + "login_desc": "Tilpass innloggingsskjermens overskrift, underoverskrift og bakgrunn.", + "login_heading": "Innloggingsoverskrift", + "login_heading_placeholder": "Velkommen tilbake", + "login_subheading": "Innloggingsunderoverskrift", + "login_subheading_placeholder": "Logg inn på kontoen din", + "login_bg_inherit": "Samme som konsollen", + "agent_title": "Agent-nedlastingsside", + "agent_desc": "Tilpass den offentlige agent-nedlastingsportalen vist til sluttbrukere.", + "agent_show_powered": "Vis \"Drevet av BetterDesk\"", + "agent_show_powered_hint": "Vis BetterDesk-tilskrivningen i nedlastingsportalens bunntekst.", + "footer_title": "Bunntekst og opphavsrett", + "footer_desc": "Legg til en egendefinert bunntekstlinje vist på innloggingsskjermen og konsollsidepanelet.", + "footer_text": "Bunnteksttekst", + "footer_text_hint": "f.eks. en opphavsrettsmelding eller firmanavn.", + "show_powered": "Vis \"BetterDesk\"-tilskrivning", + "show_powered_hint": "Vis BetterDesk-navn og versjon i innloggingsbunnteksten og sidepanelet.", + "custom_css_title": "Egendefinert CSS", + "custom_css_desc": "Avansert: injiser egendefinert CSS i konsollen og innloggingssiden.", + "custom_css_hint": "Bruk med forsiktighet. Maks. 20 000 tegn." + }, + "device_detail": { + "tab_overview": "Oversikt", + "tab_tags": "Merker og notater", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Tilkobling", + "section_manage": "Ledelse", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Denne enheten er forbudt", + "no_reason": "Ingen grunn oppgitt", + "tags": "Tags", + "no_tags": "Ingen tagger tilordnet denne enheten", + "tag_placeholder": "Skriv inn et merkenavn...", + "add_tag": "Add", + "tag_exists": "Denne taggen eksisterer allerede", + "notes": "Notes", + "notes_placeholder": "Legg til merknader om denne enheten...", + "danger_zone": "Danger Zone", + "action_connect_web": "Nettfjernkontroll", + "action_connect_web_desc": "Koble til via nettleserens eksterne skrivebord", + "action_native_remote": "BetterDesk fjernkontroll", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Desktop-klient", + "action_connect_desktop_desc": "Åpne i skrivebordsklientappen", + "action_change_id_desc": "Endre enhetsregistrerings-ID", + "action_ban_desc": "Blokker denne enheten fra å koble til", + "action_unban_desc": "Tillat denne enheten å koble til igjen", + "action_delete_desc": "Fjern denne enheten permanent", + "tab_hardware": "Hardware", + "tab_metrics": "Beregninger", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kodingsmuligheter", + "section_live_metrics": "Direktemålinger", + "section_current_usage": "Nåværende bruk", + "section_usage_history": "Brukshistorikk", + "os": "Operativsystem", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU-frekvens", + "total_memory": "Totalt minne", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Oppdatert", + "device_groups": "Grupper", + "no_sysinfo": "Ingen maskinvareinformasjon tilgjengelig", + "no_sysinfo_hint": "Systeminfo vises etter at enheten har sendt en sysinfo-rapport", + "no_metrics": "Ingen beregningsdata tilgjengelig", + "no_metrics_hint": "Beregninger vises etter at enheten har sendt hjerteslagrapporter", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Filer", + "agent_lazy_hint": "Klikk på denne fanen for å laste live data fra agenten", + "agent_offline": "Agenten er frakoblet", + "agent_timeout": "Agenten svarte ikke i tide", + "agent_error": "Kunne ikke laste inn data fra agenten", + "service_name": "Name", + "service_display": "Visningsnavn", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Maskinvare- og programvarebeholdning av administrerte enheter", + "device_id": "Enhets-ID", + "hostname": "Hostname", + "os": "Operativsystem", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Totalt minne", + "memory_used": "Used Memory", + "memory_available": "Tilgjengelig minne", + "memory_usage": "Minnebruk", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Nettverksgrensesnitt", + "software": "Software", + "software_count": "Installert programvare", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fysiske kjerner", + "logical_cores": "Logiske kjerner", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Tilgjengelig", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-adresser", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Samler som løper", + "collector_stopped": "Samler stoppet", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Hentes kl", + "no_data": "Ingen lagerdata tilgjengelig ennå. Klikk \"Samle nå\" for å samle systeminformasjon.", + "no_devices": "Fant ingen enheter med lagerdata", + "detail_title": "Detalj for enhetsbeholdning", + "telemetry": "Telemetry", + "view_detail": "Vis detalj", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Støttebilletter og problemsporing", + "create": "New Ticket", + "edit": "Rediger billett", + "delete": "Slett billett", + "detail": "Billettdetaljer", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Tildelt til", + "created_by": "Laget av", + "device": "Enhet", + "sla_due": "SLA Due", + "created_at": "Opprettet", + "updated_at": "Oppdatert", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Åpne", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Skriv en kommentar...", + "internal_note": "Internt notat (ikke synlig for sluttbrukere)", + "attachments": "Attachments", + "upload_attachment": "Last opp vedlegg", + "download": "Download", + "connect_device": "Koble til enheten", + "no_tickets": "Ingen billetter funnet", + "no_comments": "Ingen kommentarer ennå", + "no_attachments": "Ingen vedlegg", + "title_required": "Tittel er påkrevd", + "delete_confirm": "Er du sikker på at du vil slette billett #{id}?", + "delete_success": "Billetten ble slettet", + "created_success": "Billetten ble opprettet", + "updated_success": "Billetten ble oppdatert", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Søk etter billetter...", + "assign_to_me": "Tilordne meg", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Åpne", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Aktivitetsovervåking", + "subtitle": "Applikasjonsbruk og inaktiv sporing", + "device": "Enhet", + "hostname": "Hostname", + "sessions": "Økter", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Toppapplikasjoner", + "app_name": "Application", + "window_title": "Vindutittel", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Antall økter", + "total_active": "Totalt aktiv", + "total_idle": "Total Idle", + "detail_count": "Detaljposter", + "no_data": "Ingen aktivitetsdata tilgjengelig", + "no_sessions": "Ingen økter", + "filter_from": "Fra", + "filter_to": "Til", + "filter_apply": "Bruk filter", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Søk etter enheter...", + "date_range": "Date Range", + "device_id": "Enhets-ID", + "session_start": "Sesjon Start", + "session_end": "Slutt på økten", + "user": "User", + "no_activity": "Ingen aktivitet registrert", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Ingen søknader" + }, + "automation": { + "title": "Automatisering og varsler", + "subtitle": "Varselregler, fjernkommandoer og SMTP-konfigurasjon", + "rules": "Alert Rules", + "rules_subtitle": "Definer forhold som utløser varsler", + "alerts": "Varslingshistorikk", + "alerts_subtitle": "Se og bekreft utløste varsler", + "commands": "Fjernkommandoer", + "commands_subtitle": "Send kommandoer til eksterne enheter", + "smtp": "SMTP-konfigurasjon", + "smtp_subtitle": "Innstillinger for e-postvarsling", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Tilstandstype", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Målenhet", + "scope_all": "Alle enheter", + "cooldown": "Nedkjøling (sekunder)", + "notify_emails": "E-postmeldinger", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "create_rule": "Opprett regel", + "edit_rule": "Rediger regel", + "delete_rule": "Slett regel", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Utløst kl", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Større enn", + "op_gte": "Større eller lik", + "op_lt": "Less than", + "op_lte": "Mindre eller lik", + "op_eq": "lik", + "op_neq": "Ikke lik", + "type_cpu_usage": "CPU-bruk (%)", + "type_memory_usage": "Minnebruk (%)", + "type_disk_usage": "Diskbruk (%)", + "type_offline_duration": "Frakoblet varighet (er)", + "type_idle_duration": "Inaktiv varighet (r)", + "type_custom": "Custom", + "command_type": "Kommandotype", + "command_payload": "Kommando / skript", + "command_result": "Result", + "command_status": "Status", + "send_command": "Send kommando", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Mislyktes", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Brukernavn", + "smtp_pass": "Passord", + "smtp_from": "Fra adresse", + "smtp_test": "Test tilkobling", + "smtp_save": "Lagre konfigurasjon", + "smtp_test_success": "Tilkoblingen var vellykket", + "smtp_test_failed": "Tilkobling mislyktes", + "no_rules": "Ingen varslingsregler er konfigurert", + "no_alerts": "Ingen varsler utløst", + "no_commands": "Ingen kommandoer sendt", + "id_payload_required": "Enhets-ID og nyttelast kreves", + "no_commands_sent": "Ingen kommandoer er sendt ennå" + }, + "file_transfer": { + "title": "Filoverføring", + "transfers": "Transfers", + "new_transfer": "Ny overføring", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Filstørrelse", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Enhet", + "initiated_by": "Initiert av", + "created_at": "Opprettet kl", + "cancel": "Avbryt", + "cancel_confirm": "Er du sikker på at du vil kansellere denne overføringen?", + "download_file": "Last ned fil", + "browse_files": "Bla gjennom filer", + "select_file": "Velg Fil", + "select_device": "Velg Enhet", + "no_transfers": "Ingen filoverføringer", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Mislyktes", + "status_cancelled": "Cancelled", + "bytes_transferred": "Byte overført", + "chunks": "Chunks", + "transfer_started": "Overføringen startet", + "transfer_completed": "Overføring fullført", + "transfer_failed": "Overføringen mislyktes", + "transfer_cancelled": "Overføringen kansellert", + "max_file_size": "Maksimal filstørrelse: 4 GB", + "error_too_large": "Filen er for stor", + "error_no_device": "Ingen enhet er valgt", + "error_no_file": "Ingen fil er valgt" + }, + "network": { + "title": "Nettverksovervåking", + "targets": "Overvåking av mål", + "add_target": "Add Target", + "edit_target": "Rediger mål", + "delete_target": "Slett mål", + "delete_confirm": "Er du sikker på at du vil slette dette målet?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Tidsavbrudd (ms)", + "interval": "Intervall (ms)", + "enabled": "Aktivert", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Sjekk historikk", + "stats": "Statistics", + "total_targets": "Totale mål", + "targets_up": "Targets Up", + "targets_down": "Mål ned", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Nettverksverktøy", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Portkontroll", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Start overvåking", + "monitor_stop": "Stopp monitor", + "monitor_running": "Skjermen kjører", + "monitor_stopped": "Monitoren er stoppet", + "no_targets": "Ingen overvåkingsmål konfigurert", + "no_history": "Ingen sjekkhistorikk tilgjengelig", + "error_code": "Error", + "status_code": "HTTP Statuskode", + "search_targets": "Søkemål...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Sjekk historikk", + "name_host_required": "Navn og vert er påkrevd", + "uptime": "Uptime", + "response_time": "Responstid", + "avg_response": "Gjennomsnittlig respons", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Responstid (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Siste 24 timer", + "last_7d": "Last 7 days", + "last_30d": "Siste 30 dager" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP-retningslinjer", + "add_policy": "Legg til policy", + "edit_policy": "Rediger policy", + "delete_policy": "Slett policy", + "delete_confirm": "Er du sikker på at du vil slette denne policyen?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB-enhet", + "rule_type_file": "Filoperasjon", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Leverandør-ID (VID)", + "pid": "Produkt-ID (PID)", + "serial": "Serienummer", + "device_class": "Enhetsklasse", + "drive_type": "Drive Type", + "file_extensions": "Filutvidelser", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Fil", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Ingen DLP-policyer er konfigurert", + "no_events": "Ingen DLP-hendelser registrert", + "stats": "Statistics", + "total_events": "Totale hendelser", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Fil hendelser", + "device_id": "Enhets-ID", + "policy_matched": "Retningslinjer samsvarer", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Totale retningslinjer", + "active_policies": "Aktive retningslinjer", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Retningslinjer", + "tab_events": "Events", + "search_policies": "Søkeretningslinjer...", + "create_policy": "Lag policy", + "policy_type": "Policytype", + "scope": "Scope", + "events_count": "Events", + "search_events": "Søk etter hendelser...", + "event_time": "Event Time", + "device": "Enhet", + "policy": "Politikk", + "detail": "Detail", + "scope_help": "Kommaseparerte enhets-IDer, eller la stå tomt for alle", + "scope_all": "Alle enheter", + "active": "Active", + "type_file_type": "Filtype", + "type_clipboard": "Utklippstavle", + "type_screen_share": "Skjermdeling", + "type_file_transfer": "Filoverføring", + "policy_desc": "Policybeskrivelse", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Generer rapport", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Enhetssammendrag", + "type_activity": "Aktivitetssammendrag", + "type_security": "Sikkerhetsrapport", + "type_tickets": "Billettrapport", + "type_network": "Nettverksrapport", + "type_inventory": "Inventarrapport", + "type_alerts": "Varslingsrapport", + "saved": "Lagrede rapporter", + "save_report": "Lagre rapport", + "delete_report": "Slett rapport", + "delete_confirm": "Er du sikker på at du vil slette denne lagrede rapporten?", + "no_saved": "Ingen lagrede rapporter", + "report_title": "Title", + "created_by": "Laget av", + "created_at": "Opprettet kl", + "filters": "Filters", + "date_from": "Fra", + "date_to": "Til", + "device_filter": "Enhets-ID", + "generated_at": "Generert kl", + "section": "Dataseksjonen", + "total_devices": "Totalt antall enheter", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Plattformdistribusjon", + "top_applications": "Toppapplikasjoner", + "total_active": "Total aktiv tid", + "total_idle": "Total inaktiv tid", + "dlp_stats": "DLP-statistikk", + "banned_devices": "Forbudte enheter", + "audit_logs": "Audit Logs", + "ticket_stats": "Billettstatistikk", + "category_distribution": "Kategoridistribusjon", + "priority_distribution": "Prioritetsfordeling", + "targets_status": "Målstatus", + "os_distribution": "OS-distribusjon", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Nylige varsler", + "tab_generate": "Generer rapport", + "tab_saved": "Lagrede rapporter", + "type_devices_desc": "Oversikt over alle enheter, plattformer og statuser", + "type_activity_desc": "Applikasjonsbruk og inaktiv tid sammendrag", + "type_security_desc": "Forby handlinger, DLP-hendelser og revisjonslogger", + "type_tickets_desc": "Billettstatistikk og SLA-ytelse", + "type_network_desc": "Nettverksovervåkingsmål og oppetidsdata", + "type_inventory_desc": "Oppsummering av maskinvare og programvare", + "type_alerts_desc": "Varselregler og utløst varslingshistorikk", + "report_name": "Report Name", + "format": "Format", + "save": "Lagre rapport", + "preview": "Preview", + "download": "Download", + "delete_saved": "Slett rapport", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Rediger leietaker", + "delete_tenant": "Slett leietaker", + "delete_confirm": "Er du sikker på at du vil slette denne leietakeren? Alle enhets- og brukertilordninger vil bli fjernet.", + "name": "Name", + "slug": "Slug", + "contact_name": "Kontaktnavn", + "contact_email": "Kontakt e-post", + "max_devices": "Maks enheter", + "max_devices_hint": "0 = ubegrenset", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Enheter", + "users": "Users", + "assign_device": "Tilordne enhet", + "assign_devices": "Tilordne enheter", + "remove_device": "Fjern enhet", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Ingen leietakere er konfigurert", + "no_devices": "Ingen enheter tilordnet denne leietakeren", + "no_users": "Ingen brukere er tilordnet denne leietakeren", + "stats": "Leietakerstatistikk", + "total_devices": "Totalt antall enheter", + "online_devices": "Online enheter", + "total_users": "Total Users", + "created_at": "Opprettet kl", + "updated_at": "Oppdatert kl", + "slug_exists": "Leiersnegl eksisterer allerede", + "total_tenants": "Totalt leietakere", + "active_tenants": "Aktive leietakere", + "search": "Søk etter leietakere...", + "create_tenant": "Opprett leietaker", + "detail": "Leietaker detalj", + "contact": "Contact", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Søk etter enhets-ID, vertsnavn eller IP...", + "no_registrations": "No registration requests", + "col_device_id": "Enhets-ID", + "col_hostname": "Vertsnavn", + "col_platform": "Plattform", + "col_ip": "IP-adresse", + "col_version": "Versjon", + "col_status": "Status", + "col_requested": "Forespurt", + "col_actions": "Handlinger", + "status_pending": "Venter", + "status_approved": "Godkjent", + "status_rejected": "Avvist", + "approve_btn": "Godkjenn", + "approve_confirm": "Er du sikker på at du vil godkjenne denne enheten? Den vil motta serverlegitimasjon og kan koble til automatisk.", + "approved_success": "Enhetsregistrering godkjent", + "reject_btn": "Avvis", + "reject_title": "Avvis registrering", + "reject_confirm": "Er du sikker på at du vil avvise denne registreringsforespørselen?", + "reject_reason": "Årsak (valgfritt)", + "reject_reason_placeholder": "Angi årsak til avvisning...", + "rejected_success": "Enhetsregistrering avvist", + "delete_confirm": "Er du sikker på at du vil slette denne registreringsposten?", + "deleted_success": "Registreringsposten slettet", + "enrollment_title": "Enhetsregistrering", + "enrollment_subtitle": "Ventende påmeldingsforespørsler fra BetterDesk desktop-klienter", + "enrollment_empty": "Ingen ventende påmeldingsforespørsler", + "enrollment_approve": "Godkjenn", + "enrollment_reject": "Avvis", + "enrollment_display_name": "Vist navn", + "enrollment_display_name_placeholder": "Skriv inn et navn for denne enheten...", + "enrollment_sync_mode": "Synkroniseringsmodus", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Enhetsregistrering godkjent", + "enrollment_rejected_success": "Enhetsregistrering avvist", + "approve_title": "Godkjenn enhet", + "field_name": "Enhetsnavn", + "field_name_placeholder": "Skriv inn et navn for denne enheten...", + "field_sync_mode": "Synkroniseringsmodus", + "sync_standard": "Standard — balansert synkronisering", + "sync_silent": "Stille — minimal telemetri", + "sync_turbo": "Turbo — aggressiv synkronisering", + "field_tags": "Tagger", + "field_tags_placeholder": "Kommaseparerte tagger (f.eks. kontor, bærbar)...", + "field_tags_existing": "Eksisterende tagger", + "field_tag_add_placeholder": "Legg til en ny tagg...", + "field_tag_add_btn": "Legg til", + "field_groups": "Enhetsgrupper", + "field_folder": "Mappe", + "field_folder_none": "Ingen mappe", + "reject_ban_option": "Blokker denne enheten", + "reject_ban_hint": "Enheten vil bli blokkert og kan ikke sende nye registreringsforespørsler.", + "banner_open_mode": "Registrering er åpen — nye RustDesk-klienter registreres uten operatørgodkjenning.", + "banner_locked_mode": "Registrering er låst — bare tokenbaserte enheter kan registrere seg.", + "enrollment_settings_link": "Registreringsinnstillinger" + }, + "backup": { + "title": "Sikkerhetskopi", + "desc": "Last ned en fullstendig sikkerhetskopi av konsollkonfigurasjonen, brukere, grupper og innstillinger. Go server peer-data er inkludert når BetterDesk-backend er aktiv.", + "restore_title": "Gjenopprett", + "restore_desc": "Last opp en tidligere nedlastet sikkerhetskopifil for å gjenopprette konsollkonfigurasjonen. Velg hvilke seksjoner som skal gjenopprettes nedenfor.", + "stat_users": "Brukere", + "stat_settings": "Innstillinger", + "stat_folders": "Mapper", + "stat_groups": "Grupper", + "stat_strategies": "Strategier", + "stat_backend": "Backend", + "download": "Last ned sikkerhetskopi", + "creating": "Oppretter sikkerhetskopi ...", + "download_success": "Sikkerhetskopien ble lastet ned", + "upload": "Last opp sikkerhetskopi", + "restore_confirm": "Er du sikker på at du vil gjenopprette fra denne sikkerhetskopien? Valgte seksjoner vil bli overskrevet.", + "restore_success": "Sikkerhetskopien ble gjenopprettet. Noen endringer kan kreve at siden lastes på nytt.", + "restored": "Gjenopprettet", + "skipped": "Hoppet over", + "backup_date": "Sikkerhetskopidato", + "opt_settings": "Konsollinnstillinger", + "opt_branding": "Merkevarebygging / tema", + "opt_folders": "Enhetsmapper", + "opt_groups": "Bruker- og enhetsgrupper", + "opt_addressbooks": "Adressebøker", + "opt_users": "Brukerkontoer", + "opt_users_warning": "Destruktiv: erstatter ALLE brukerkontoer med sikkerhetskopidata. Du kan være logget ut.", + "no_file": "Ingen sikkerhetskopifil er valgt", + "invalid_json": "Ugyldig sikkerhetskopifil: ugyldig JSON", + "invalid_format": "Ugyldig sikkerhetskopifil: ikke en BetterDesk sikkerhetskopi", + "stat_database": "Databasemotor", + "stat_keys": "Servernøkler inkludert", + "stat_env": "Miljøfil", + "stat_uploads": "Merkevarebyggingsfiler", + "restart_required": "Noen gjenopprettede komponenter (nøkler / .env / Go-database) krever omstart av tjenesten.", + "security_warning": "Denne sikkerhetskopien inneholder hemmeligheter. Oppbevar den sikkert og del den aldri.", + "restore_warning": "Gjenoppretting av hemmeligheter eller Go-serverdatabasen overskriver serveridentiteten og krever tjenesterestart.", + "opt_database": "Database (alle tabeller)", + "opt_database_hint": "Reimporterer alle konsoldata. Ingen omstart nødvendig.", + "opt_uploads": "Merkevarebyggingsfiler", + "opt_uploads_hint": "Logoer og opplastede bilder.", + "opt_secrets": "Servernøkler og hemmeligheter", + "opt_secrets_warning": "Overskriver Ed25519-serveridentitet, API-nøkkel og sesjonshemmelighet. Krever tjenesterestart.", + "opt_env": "Miljøfil (.env)", + "opt_env_warning": "Overskriver SESSION_SECRET, API-nøkkel, database-DSN, porter og TLS-innstillinger. Krever tjenesterestart.", + "opt_godb": "Go-serverdatabase", + "opt_godb_warning": "Overskriver Go-serverens SQLite-database (kun SQLite-backend). Krever tjenesterestart." + }, + "cdap": { + "device_detail": "CDAP-enhet", + "loading": "Laster inn...", + "loading_widgets": "Laster inn enhetswidgeter ...", + "load_error": "Kunne ikke laste inn enhetsdata", + "connected": "Tilkoblet", + "disconnected": "Frakoblet", + "device_offline_msg": "Enheten er for øyeblikket frakoblet. Widget-verdier kan være foreldede.", + "no_widgets": "Ingen widgets tilgjengelig", + "no_widgets_desc": "Denne enheten har ikke registrert et CDAP-manifest med widgetdefinisjoner.", + "command_log": "Kommandologg", + "clear_log": "Fjern logg", + "confirm_command": "Bekreft kommando", + "select_option": "Velg", + "cdap_status": "CDAP-status", + "cdap_enabled": "CDAP aktivert", + "cdap_disabled": "CDAP deaktivert", + "cdap_devices": "CDAP-enheter", + "cdap_connections": "Aktive tilkoblinger", + "send_command": "Send kommando", + "command_sent": "Kommandoen ble sendt", + "command_failed": "Kunne ikke sende kommandoen", + "devices_title": "CDAP-enheter", + "devices_subtitle": "Tilkoblede enheter via Custom Device Application Protocol", + "stat_connected": "Tilkoblet", + "stat_port": "Port", + "search_devices": "Søk etter enheter...", + "no_devices": "Ingen enheter tilkoblet", + "no_devices_desc": "Ingen CDAP-enheter er koblet til. Enheter vises her når de kobles til gatewayen.", + "gateway_disabled": "CDAP Gateway deaktivert", + "gateway_disabled_desc": "Aktiver CDAP-gatewayen ved å sette CDAP_ENABLED=true i serverkonfigurasjonen.", + "gateway_active": "Aktiv", + "toggle_enable": "Aktiver CDAP", + "toggle_disable": "Deaktiver CDAP", + "enabled_restart": "CDAP aktivert. Server omstart kreves for å bruke endringer.", + "disabled_restart": "CDAP deaktivert. Server omstart kreves for å bruke endringer.", + "widgets": "CDAP-kontrollfelt", + "type_all": "Alle", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-agent", + "type_network": "Nettverk", + "type_camera": "Kamera", + "type_custom": "Egendefinert", + "active_alerts": "Aktive varsler", + "alert_fired": "Varsel utløst", + "alert_cleared": "Alarm fjernet", + "no_alerts": "Ingen aktive varsler", + "connect_terminal": "Koble til terminal", + "table_search": "Søk...", + "just_now": "Akkurat nå", + "terminal_connecting": "Kobler til enheten ...", + "terminal_disconnected": "Frakoblet", + "terminal_error": "Terminaltilkobling mislyktes", + "linked_devices": "Koblede enheter", + "link_device": "Koble enhet", + "unlink_device": "Koble fra", + "no_linked_devices": "Ingen koblede enheter", + "unlink_confirm": "Er du sikker på at du vil koble fra denne enheten?", + "link_prompt": "Skriv inn Peer ID for å koble til denne enheten:", + "connect_desktop": "Koble til skrivebordet", + "connect_video": "Koble til Stream", + "connect_files": "Bla gjennom filer", + "connect_audio": "Koble til lyd", + "upload_file": "Last opp", + "desktop_connecting": "Kobler til...", + "video_connecting": "Kobler til...", + "files_connecting": "Kobler til...", + "audio_connecting": "Kobler til...", + "audio_streaming": "Strømmer", + "clipboard_in": "Utklippstavle mottatt", + "clipboard_out": "Utklippstavlen er sendt", + "monitor_select": "Velg Monitor", + "keyframe_request": "Be om nøkkelbilde", + "quality_auto": "Autokvalitet" + }, + "desktop": { + "switch_mode": "Skrivebordsmodus", + "console_mode": "Konsollmodus", + "loading": "Laster inn...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Lukk", + "widgets_mode": "Kontrollfeltmodus", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Legg til widget", + "remove_widget": "Fjern widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurer", + "search_widgets": "Søk i widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Enheter", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Skriv notater her...", + "search_placeholder": "Søk etter enheter, sider, innstillinger...", + "search_pages": "Pages", + "search_devices": "Enheter", + "search_no_results": "No results", + "exit_desktop": "Avslutt skrivebordsmodus", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Enhetsstatus", + "widget_server_health": "Serverinfo", + "widget_system_stats": "Enhetsmålere", + "widget_device_list": "Enhetsliste", + "widget_quick_actions": "Raske handlinger", + "widget_recent_activity": "Nylig aktivitet", + "widget_notes": "Notes", + "widget_network_monitor": "Nettverksmonitor", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP-enheter", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Enhetsrutenett", + "widget_multi_gauge": "Servermålere", + "widget_weekly_chart": "Ukentlig aktivitet", + "widget_quick_controls": "Raske kontroller", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Tilkoblingsstatistikk", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Brukerøkter", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Ingen enheter", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Åpne", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Sett URL i konfig", + "label_server_uptime": "Serveroppetid", + "label_merged_info": "Slått sammen til serverinfo-widget", + "label_with_notes": "Med notater", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Totalt antall enheter", + "label_throughput": "Throughput", + "label_active_relays": "Aktive releer", + "label_total_relayed": "Totalt videresendt", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrer enheter...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Ingen CDAP-enheter", + "action_add_widget": "Legg til widget", + "label_merged_server_info": "Slått sammen til serverinfo-widget", + "wp_images": "Images", + "wp_colors": "Solide farger", + "wp_custom_color": "Egendefinert farge", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Bakgrunnsbilder er ikke installert på denne serveren.", + "wp_download_hint": "Plasser PNG-bilder i den offentlige/bakgrunnskatalogen/katalogen for å aktivere bakgrunnsvalg.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Prosessovervåker", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Databasestatistikk", + "widget_docker_containers": "Docker containere", + "widget_shell_command": "Shell-kommando", + "widget_device_map": "Enhetskart", + "widget_remote_connect": "Fjernkobling", + "label_no_online": "Ingen nettbaserte enheter", + "label_no_events": "Ingen arrangementer i dag", + "label_event_title": "Arrangementstittel:", + "label_no_data": "Ingen data tilgjengelig", + "label_download_speed": "Last ned Speed", + "label_latency": "Latency", + "label_server": "Serverinstans", + "label_run_test": "Run Test", + "label_testing": "Tester...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Ingen containere", + "label_docker_unavailable": "Docker ikke tilgjengelig", + "label_no_command": "Ingen kommando konfigurert", + "label_no_output": "Ingen utgang ennå", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Lagre forhåndsinnstilling", + "label_load_preset": "Load Preset", + "label_preset_name": "Forhåndsinnstilt navn:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automatisk ordning", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 kolonner (lik)", + "label_2col_wide": "2 kolonner (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget-gruppe", + "ungroup_widgets": "Fjern gruppering av widgeter", + "group_widgets": "Grupper valgte widgeter", + "snap_layouts": "Snap layouter", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Klikk øverst til venstre", + "snap_top_right": "Klikk øverst til høyre", + "snap_bottom_left": "Klikk nederst til venstre", + "snap_bottom_right": "Klikk nederst til høyre", + "aero_shake": "Rist for å minimere andre", + "zone_resize": "Dra kantlinjen for å endre størrelse på soner", + "zone_borders": "Dragbare sonegrenser", + "app_drawer": "Applications", + "search_apps": "Søk etter apper...", + "edit_shortcuts": "Rediger snarveier", + "widgets": "Kontrollfelt", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Klikk hvor som helst eller trykk på en tast for å logge på", + "username_placeholder": "Brukernavn", + "password_placeholder": "Passord", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Tofaktorautentisering", + "totp_subtitle": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", + "back_to_login": "Tilbake til innlogging", + "fill_all_fields": "Vennligst fyll ut alle feltene", + "invalid_credentials": "Ugyldig brukernavn eller passord", + "invalid_code": "Ugyldig bekreftelseskode", + "enter_6_digits": "Skriv inn alle 6 sifrene", + "network_error": "Network error — check your connection", + "session_expired": "Økten er utløpt. Logg på igjen." + }, + "tokens": { + "title": "Enhetstokens", + "subtitle": "Administrer registreringstokener for automatisert enhetsklargjøring", + "enrollment_mode": "Påmeldingsmodus", + "mode_open": "Åpne", + "mode_open_desc": "Enhver enhet kan registreres uten token", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Totalt tokens", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Søk etter tokens...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Bulk generer", + "create": "Opprett token", + "edit": "Rediger token", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Opprettet", + "actions": "Actions", + "name_placeholder": "f.eks. Office PC-batch", + "max_uses": "Max Uses", + "max_uses_hint": "0 = ubegrenset", + "expires_in": "Expires In", + "no_expiration": "Ingen utløp", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Valgfri merknad om dette tokenet...", + "count": "Count", + "count_range": "Antall tokens som skal genereres (1–100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token opprettet", + "tokens_generated": "Tokens generert", + "copy_warning": "Kopier tokenet nå. Den vil ikke vises igjen.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Er du sikker på at du vil tilbakekalle dette tokenet? Enheter som allerede er registrert med den vil ikke bli påvirket.", + "revoked_success": "Tokenet ble tilbakekalt", + "no_tokens": "Ingen tokens funnet", + "expired": "Expired", + "never": "Never", + "save": "Lagre", + "cancel": "Avbryt", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Neste", + "prev": "Previous", + "skip": "Skip", + "finish": "Fullfør", + "close": "Lukk", + "step_of": "{current} av {total}", + "console_sidebar_title": "Navigasjonssidepanel", + "console_sidebar_text": "Få tilgang til alle moduler herfra. Klikk på et hvilket som helst ikon for å navigere til den delen. Sidepanelet tilpasser seg skjermstørrelsen din.", + "console_expand_title": "Utvid sidepanelet", + "console_expand_text": "Klikk her for å utvide sidefeltet og se fullstendige etiketter for alle navigasjonselementer. Klikk igjen for å skjule.", + "console_search_title": "Hurtigsøk", + "console_search_text": "Søk raskt etter enheter, innstillinger eller handlinger. Trykk Ctrl+K for hurtigtast.", + "console_dashboard_title": "Dashbord", + "console_dashboard_text": "Din sentrale hub som viser serverstatus, elektroniske enheter og raske handlinger. Hold øye med viktige beregninger på et øyeblikk.", + "console_devices_title": "Enhetsadministrasjon", + "console_devices_text": "Se, søk og administrer alle tilkoblede enheter. Filtrer etter status, tilordne tagger og konfigurer individuelle enhetsinnstillinger.", + "console_settings_title": "Innstillinger", + "console_settings_text": "Konfigurer serveratferd, sikkerhetsalternativer, merkevarebygging og brukeradministrasjon. Tilpass BetterDesk for å passe dine behov.", + "console_desktop_title": "Skrivebordsmodus", + "console_desktop_text": "Bytt til skrivebordsmodus for et arbeidsområde med vinduer med widgets. Perfekt for multi-tasking og overvåking av dashboards.", + "console_complete_title": "Du er klar!", + "console_complete_text": "Utforsk sidefeltkategoriene for å oppdage alle funksjonene. Klikk på hjelpeikonet når som helst for å starte denne veiledningen på nytt.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Den øverste linjen viser klokken, hurtigkontroller og tilgang til appskuffen. Klikk på rutenettikonet for å bla gjennom alle appene.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Åpne appskuffen for å søke og starte en hvilken som helst konsollfunksjon som et flytende vindu. Apper er organisert etter kategori.", + "desktop_widgets_title": "Kontrollfelt", + "desktop_widgets_text": "Ditt tilpassbare arbeidsområde. Widgets viser live informasjon og gir rask tilgang til funksjoner. Dra for å omorganisere.", + "desktop_add_widget_title": "Legg til widgeter", + "desktop_add_widget_text": "Klikk her for å bla gjennom tilgjengelige widgets. Velg mellom overvåkingsskjermer, enhetslister, notater og mer.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Åpne apper vises her. Klikk for å fokusere eller minimere vinduer. Hold markøren over ikonene for å se appetiketter.", + "desktop_snap_title": "Snap layouter", + "desktop_snap_text": "Dra vinduer til skjermkantene for å feste dem på plass, eller hold musepekeren på maksimeringsknappen for forhåndsinnstillinger for layout. Prøv Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Apper åpnes i trekkbare vinduer som kan endre størrelsen. Minimer, maksimer eller lukk fra tittellinjen. Windows lag over widgets.", + "desktop_search_title": "Hurtigsøk", + "desktop_search_text": "Søk på tvers av enheter, sider og innstillinger. Trykk Ctrl+K hvor som helst for å åpne søket umiddelbart.", + "desktop_complete_title": "Skrivebordsmodus klar!", + "desktop_complete_text": "Prøv å åpne apper fra skuffen og ordne vinduer side ved side. Bruk forhåndsinnstillinger for widget for raske dashbordoppsett.", + "devices_folders_title": "Enhetsmapper", + "devices_folders_text": "Organiser enheter i mapper. Klikk på en mappe for å filtrere listen. Høyreklikk for å gi nytt navn eller slette.", + "devices_search_title": "Søk og filtrer", + "devices_search_text": "Søk etter ID, vertsnavn eller plattform. Bruk statuspillene til å vise bare online, offline eller alle enheter.", + "devices_table_title": "Enhetsliste", + "devices_table_text": "Klikk på en enhetsrad for detaljer. Bruk kebab-menyen til høyre for raske handlinger som koble til, redigere tagger eller slette.", + "devices_complete_title": "Klar for enhetsadministrasjon!", + "devices_complete_text": "Dra enheter mellom mapper for å organisere dem. Dobbeltklikk på en enhet for å åpne detaljpanelet.", + "settings_tabs_title": "Innstillinger Kategorier", + "settings_tabs_text": "Naviger mellom Generelt, Sikkerhet, Utseende og andre konfigurasjonsseksjoner.", + "settings_content_title": "Konfigurasjon", + "settings_content_text": "Hver seksjon inneholder spesifikke server- og konsollinnstillinger. Endringene lagres når du klikker på Lagre.", + "settings_complete_title": "Innstillinger Oversikt", + "settings_complete_text": "Sjekk sikkerhetsinnstillinger for 2FA, API-nøkler og brukeradministrasjon. Besøk Utseende for å tilpasse konsollutseendet.", + "help": "Hjelp og veiledninger", + "tour_console": "Konsoll omvisning", + "tour_desktop": "Omvisning i skrivebordsmodus", + "tour_devices": "Enhetsomvisning", + "tour_settings": "Innstillinger Omvisning", + "reset_all": "Tilbakestill alle opplæringsprogrammer", + "tour_remote": "Ekstern økttur", + "tour_organization": "Organisasjonsoppsett", + "tour_cdap": "CDAP Oversikt", + "tour_chat": "Grunnleggende om chat", + "remote_toolbar_title": "Ekstern verktøylinje", + "remote_toolbar_text": "Få tilgang til skjermkontroller, utklippstavlesynkronisering, spesialtaster og kvalitetsinnstillinger fra verktøylinjen. Bytt fullskjerm med F11.", + "remote_canvas_title": "Eksternt display", + "remote_canvas_text": "Dette er den eksterne skjermen. Klikk på innsiden for å begynne å kontrollere den eksterne enheten. Inndata fra mus og tastatur videresendes automatisk.", + "remote_clipboard_title": "Utklippstavlesynkronisering", + "remote_clipboard_text": "Kopier og lim inn tekst mellom datamaskinen og den eksterne enheten. Bruk Ctrl+C / Ctrl+V som normalt mens du fokuserer på den eksterne skjermen.", + "remote_complete_title": "Ekstern økt klar!", + "remote_complete_text": "Bruk verktøylinjeknappene for spesialtaster (Ctrl+Alt+Del, PrintScreen) og skjermbytte. Trykk Escape eller klikk Koble fra for å avslutte økten.", + "org_overview_title": "Organisasjoner", + "org_overview_text": "Organisasjoner lar deg gruppere brukere, enheter og retningslinjer. Hver organisasjon har sin egen admin, operatører og innstillinger.", + "org_create_title": "Opprett organisasjon", + "org_create_text": "Klikk her for å opprette en ny organisasjon. Oppgi et navn, slug og valgfri beskrivelse. Du vil være eieren av den nye organisasjonen.", + "org_members_title": "Administrer medlemmer", + "org_members_text": "Inviter brukere via e-post, tildel roller (admin, operatør, bruker) og administrer tilgang. Medlemmer kan se enheter som er tilordnet organisasjonen deres.", + "org_devices_title": "Tilordne enheter", + "org_devices_text": "Legg til enheter i organisasjonen. Enheter som tildeles her vil arve organisasjonens retningslinjer og være synlige for medlemmene.", + "org_policies_title": "Organisasjonspolitikk", + "org_policies_text": "Angi sikkerhetspolicyer som passordkrav, tidsavbrudd for økter, 2FA-håndhevelse og enhetsregistreringsregler for organisasjonen.", + "org_complete_title": "Organisasjonsoppsett fullført!", + "org_complete_text": "Inviter teamet ditt og tilordne enheter for å begynne å bruke organisasjonsbasert administrasjon. Retningslinjer gjelder automatisk for alle medlemmer.", + "cdap_devices_title": "CDAP-enheter", + "cdap_devices_text": "Se alle tilkoblede CDAP-enheter — IoT-sensorer, PLC-er, broer og egendefinerte agenter. Grønne indikatorer viser live-tilkoblinger.", + "cdap_widgets_title": "Widget-kontrollpanel", + "cdap_widgets_text": "Widgeter viser sanntidsdata fra enheter. Målere, brytere, LED-er, diagrammer — hver widgettype visualiserer en annen type data.", + "cdap_commands_title": "Send kommandoer", + "cdap_commands_text": "Interager med enheter ved å sende kommandoer. Kommandologgen lagrer historikken.", + "cdap_terminal_title": "Enhetsterminal", + "cdap_terminal_text": "Åpne en terminalsesjon til CDAP-agenter for avansert diagnostikk eller manuell konfigurasjon.", + "cdap_complete_title": "CDAP-oversikt fullført!", + "cdap_complete_text": "Utforsk enhetswidgeter, send kommandoer og bruk terminal eller filutforsker for dypere administrasjon.", + "chat_contacts_title": "Kontakter og grupper", + "chat_contacts_text": "Se kontaktene og chattegruppene dine. Klikk på en kontakt for å åpne en samtale. Grønne prikker indikerer nettbrukere.", + "chat_send_title": "Send meldinger", + "chat_send_text": "Skriv inn meldingen og trykk Enter for å sende. Meldinger er ende-til-ende-kryptert når begge parter støtter E2E.", + "chat_file_title": "Del filer", + "chat_file_text": "Klikk på vedleggsikonet for å dele filer. Filer er kryptert og kan være opptil 50 MB.", + "chat_complete_title": "Chat klar!", + "chat_complete_text": "Chat med operatører og sluttbrukere i sanntid. Lag grupper for teamkommunikasjon. Alle meldinger støtter lesebekreftelser.", + "disable_tutorials": "Deaktiver veiledninger", + "enable_tutorials": "Aktiver veiledninger" + }, + "help_request": { + "title": "Hjelpeforespørsler", + "subtitle": "Administrer innkommende hjelpeforespørsler fra skrivebordsklienter", + "new_request": "Ny hjelpeforespørsel", + "device": "Enhet", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Ingen forespørsler om hjelp", + "notification": "Hjelpeforespørsel mottatt fra", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisasjoner", + "create": "Opprett organisasjon", + "edit": "Rediger organisasjon", + "detail": "Organisasjonsdetaljer", + "name": "Name", + "slug": "Slug (URL-sikker)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Enheter", + "invitations": "Invitations", + "settings": "Innstillinger", + "add_user": "Add User", + "assign_device": "Tilordne enhet", + "create_invitation": "Lag invitasjon", + "delete_confirm": "Vil du slette denne organisasjonen? Dette vil fjerne alle tilknyttede brukere, enheter og innstillinger.", + "no_orgs": "Ingen organisasjoner ennå", + "no_orgs_hint": "Opprett din første organisasjon for å begynne å administrere enheter og brukere.", + "connection_policy": "Tilkoblingspolicy", + "allow_file_transfer": "Tillat filoverføring", + "allow_clipboard": "Tillat utklippstavle", + "max_session_duration": "Maks øktvarighet (min)", + "role_owner": "Owner", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Medlem", + "username": "Brukernavn", + "password": "Passord", + "display_name": "Vist navn", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Enhets-ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Tildelt bruker", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Ingen brukere i denne organisasjonen.", + "no_devices": "Ingen enheter tilordnet denne organisasjonen.", + "no_invitations": "Ingen invitasjoner.", + "user_added": "User added", + "user_removed": "Bruker fjernet", + "user_updated": "Brukerrolle oppdatert", + "device_assigned": "Enhet tildelt", + "device_unassigned": "Enheten er ikke tilordnet", + "invitation_created": "Invitasjon opprettet", + "settings_saved": "Innstillinger lagret", + "org_deleted": "Organisasjonen slettet", + "confirm_remove_user": "Vil du fjerne denne brukeren fra organisasjonen?", + "confirm_unassign_device": "Vil du fjerne tilordningen av denne enheten fra organisasjonen?", + "confirm_delete_org": "Vil du slette denne organisasjonen og alle tilknyttede data?", + "edit_role": "Rediger rolle", + "raw_settings": "Raw-innstillinger", + "key": "Key", + "value": "Value", + "save": "Lagre innstillinger", + "policy_unattended": "Ubetjent (umiddelbar)", + "policy_attended": "Deltok (med bekreftelse)", + "policy_ask": "Always ask", + "expires_hours": "Utløp (timer)", + "loading_failed": "Kunne ikke laste inn organisasjonsdata", + "name_slug_required": "Navn og snegl er påkrevd", + "org_created": "Organisasjon opprettet", + "org_updated": "Organisasjonen oppdatert", + "create_new_user": "Opprett ny", + "add_existing_user": "Legg til eksisterende", + "none_available": "none", + "select_user": "Velg bruker", + "org_role": "Organisasjonsrolle", + "link_user_hint": "Den valgte brukeren vil bli koblet til denne organisasjonen ved å bruke deres serverkontolegitimasjon.", + "no_available_users": "Alle serverbrukere er allerede knyttet til denne organisasjonen.", + "user_linked": "Bruker knyttet til organisasjon" + }, + "chat": { + "e2e_enabled": "Ende-til-ende kryptert", + "e2e_establishing": "Etablerer sikker kanal...", + "e2e_established": "Sikker kanal etablert", + "e2e_unsupported": "E2E-kryptering støttes ikke i denne nettleseren", + "typing_indicator": "skriver...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Fil", + "file_too_large": "Filen er for stor (maks 50 MB)", + "file_encrypted": "Kryptert filoverføring", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Sikkerhetsnøkler rotert", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Grupper", + "no_contacts": "Ingen kontakter ennå", + "no_groups": "Ingen grupper ennå", + "no_messages": "Ingen meldinger ennå", + "no_results": "Ingen resultater funnet", + "select_conversation": "Velg en samtale for å begynne å chatte", + "type_message": "Skriv inn en melding...", + "send": "Send melding", + "attach_file": "Legg ved fil", + "emoji": "Emoji", + "search_messages": "Søk etter meldinger", + "create_group": "Opprett gruppe", + "group_name": "Gruppenavn", + "group_members": "Medlemmer", + "cancel": "Avbryt", + "create": "Opprett", + "members": "medlemmer", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Søk i kontakter og meldinger", + "select_conversation_hint": "Velg en samtale for å se meldinger", + "info": "Info", + "group_name_placeholder": "Skriv inn gruppenavn" + }, + "toast": { + "device_connected": "Enhet tilkoblet", + "device_disconnected": "Enheten er frakoblet", + "session_started": "Ekstern økt startet", + "session_ended": "Ekstern økt ble avsluttet", + "file_upload_complete": "Filopplasting fullført", + "settings_saved": "Innstillinger lagret", + "error_generic": "Det oppsto en feil", + "connection_lost": "Forbindelsen mistet", + "reconnecting": "Kobler på nytt ..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Administrasjonsverktøy og diagnoseverktøy", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Send forespørsel", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Skriv inn tekst...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Gå til server", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Sjekk vertens tilgjengelighet og ventetid", + "tcp_title": "TCP Portkontroll", + "tcp_desc": "Test TCP-porttilkoblingen", + "ssl_title": "SSL-inspektør", + "ssl_desc": "Inspiser SSL/TLS-sertifikatdetaljer", + "http_title": "HTTP Helsesjekk", + "http_desc": "Bekreft HTTP endepunktstatus", + "dns_title": "DNS Lookup", + "dns_desc": "Bestem vertsnavn til IP-adresse", + "whois_title": "DNS Records", + "whois_desc": "Spørring A, AAAA, MX, TXT, NS-poster", + "speed_title": "Speed Test", + "speed_desc": "Mål nedlastingsbåndbredde", + "run_speed_test": "Kjør hastighetstest", + "wol_title": "Wake-on-LAN", + "wol_desc": "Send magisk pakke for å vekke en enhet", + "wol_sent": "Magisk pakke sendt", + "hash_title": "Hashberegner", + "hash_desc": "Generer kryptografiske hasher", + "password_title": "Passordgenerator", + "password_desc": "Generer et sikkert tilfeldig passord", + "jwt_title": "JWT Decoder", + "jwt_desc": "Dekode og inspiser JSON Web Tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Kode eller dekode Base64-data", + "url_title": "URL Encoder", + "url_desc": "Kode eller dekode URL-komponenter", + "processes_title": "Prosessliste", + "processes_desc": "Se kjørende systemprosesser", + "disk_title": "Disk Usage", + "disk_desc": "Se diskpartisjonsbruk", + "db_title": "Databasestatistikk", + "db_desc": "Se databasetabellstatistikk", + "docker_title": "Docker containere", + "docker_desc": "Se kjørende Docker-beholdere", + "logs_title": "Log Viewer", + "logs_desc": "Se nylig loggutgang", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Gyldig fra", + "valid_to": "Gyldig til", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Ingen data tilgjengelig", + "no_docker": "Ingen Docker-beholdere funnet eller Docker ikke tilgjengelig", + "no_logs": "Ingen logglinjer tilgjengelig" + }, + "policies": { + "title": "Organisasjonspolitikk", + "subtitle": "Administrer sikkerhets-, tilkoblings- og funksjonspolicyer for organisasjonene dine", + "select_org": "Organisasjon", + "select_org_placeholder": "Velg en organisasjon...", + "select_org_first": "Velg en organisasjon for å se revisjonslogg for retningslinjer.", + "configured": "Konfigurert", + "connection_title": "Tilkoblingspolicy", + "connection_desc": "Kontroller hvordan eksterne økter opprettes", + "connection_mode": "Tilkoblingsmodus", + "mode_attended": "Deltok (krever brukergodkjenning)", + "mode_unattended": "Ubetjent (tillat alltid)", + "mode_ask": "Spør alltid", + "max_session": "Maks øktvarighet (minutter)", + "idle_lock": "Tidsavbrudd for tomgangslås (minutter)", + "wallpaper_policy": "Bakgrunn under økten", + "wallpaper_show": "Vis", + "wallpaper_hide_session": "Skjul under økten", + "wallpaper_hide_always": "Skjul alltid", + "features_title": "Funksjonspolicy", + "features_desc": "Aktiver eller deaktiver spesifikke funksjoner for enheter", + "allow_file_transfer": "Tillat filoverføring", + "allow_clipboard": "Tillat utklippstavlesynkronisering", + "allow_audio": "Tillat lydstreaming", + "allow_recording": "Tillat øktopptak", + "security_title": "Sikkerhetspolicy", + "security_desc": "Håndhev sikkerhetskrav for organisasjonsenheter", + "require_2fa": "Krev 2FA for uovervåket tilgang", + "password_min_length": "Minimum passordlengde", + "password_require_special": "Krever spesialtegn", + "password_max_age": "Passord Maks alder (dager, 0=aldri)", + "allowed_operators": "Tillatte operatørroller (kommaseparert)", + "network_title": "Nettverkspolicy", + "network_desc": "Kontroller reléservere og direkte tilkoblinger", + "block_direct_p2p": "Blokker direkte P2P (kraftrelé)", + "allowed_relays": "Tillatte reléservere (én per linje)", + "ip_allowlist": "IP-tillatelsesliste (CIDR, én per linje)", + "update_title": "Oppdater policy", + "update_desc": "Kontroller automatiske oppdateringer og oppdateringskanaler", + "auto_update": "Aktiver automatisk oppdatering", + "update_channel": "Oppdater kanalen", + "audit_title": "Endringer i retningslinjene", + "audit_desc": "Nylig historikk for endring av politikk", + "no_audit": "Ingen policyendringer registrert.", + "save_success": "Retningslinjen ble lagret", + "save_failed": "Kunne ikke lagre policyen", + "load_failed": "Kunne ikke laste inn policyer", + "block_direct_p2p_hint": "Gjelder enheter i denne organisasjonen." + }, + "attestation": { + "title": "Enhetsattest", + "subtitle": "Overvåk enhetsidentitetsverifisering og maskinvarefingeravtrykk", + "verified": "Verified", + "pending": "Pending", + "failed": "Mislyktes", + "device_list": "Enhetsliste", + "device_list_desc": "Maskinvarefingeravtrykk og identitetsbekreftelsesstatus", + "col_device": "Enhets-ID", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Ingen attestasjonsposter funnet.", + "verify_success": "Enhet merket som bekreftet", + "verify_failed": "Kunne ikke bekrefte enheten", + "revoke_success": "Enhetsattest tilbakekalt", + "revoke_failed": "Kunne ikke tilbakekalle attestasjon" + }, + "fleet": { + "title": "Flåtestyring", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Arbeidsflytbygger", + "tab_compliance": "Compliance", + "res_title": "Ressurskartlegging", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Nettverksstasjon", + "res_type_dns": "DNS server", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Legg til ressurs", + "res_name": "Ressursnavn", + "res_type": "Type", + "res_address": "Adresse / sti", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organisasjon", + "res_scope_group": "Gruppe", + "res_scope_device": "Enhet", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Ingen ressurser funnet. Klikk \"Legg til ressurs\" for å opprette en.", + "res_confirm_delete": "Er du sikker på at du vil slette denne ressursen?", + "task_title": "Oppgaveplanlegger", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Mislyktes", + "task_search": "Search tasks…", + "task_create": "Opprett oppgave", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Oppdater", + "task_type_restart": "Start på nytt", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Enhets-ID-er eller gruppenavn, kommadelt", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Tidsplanverdi", + "task_script": "Skript / kommando", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Ingen oppgaver funnet. Klikk \"Opprett oppgave\" for å komme i gang.", + "task_confirm_delete": "Er du sikker på at du vil slette denne oppgaven?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Visuell arbeidsflytbygger", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Lagre", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Velg en node for å redigere egenskapene.", + "builder_node_trigger_manual": "Manuell utl��ser", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Hendelsesutløser", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Start Svc på nytt", + "builder_node_action_file_deploy": "Distribuer fil", + "builder_node_action_message": "Send melding", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Send varsel", + "builder_node_result_chain": "Kjede arbeidsflyt", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Navn på arbeidsflyt:", + "comp_title": "Programvareoverholdelse", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Enhet", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Kjøre automatisk utbedring på denne enheten?", + "comp_no_data": "Ingen samsvarsdata tilgjengelig. Kjør en skanning for å komme i gang.", + "save": "Lagre", + "cancel": "Avbryt", + "close": "Lukk", + "edit": "Rediger", + "delete": "Slett", + "actions": "Actions", + "all_orgs": "Alle organisasjoner", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Nettverksstasjon", + "type_dns": "DNS server", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Legg til ressurs", + "edit_resource": "Rediger ressurs", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adresse / sti", + "scope_org": "Organisasjon", + "scope_group": "Gruppe", + "scope_device": "Enhet", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Er du sikker på at du vil slette dette elementet?", + "all_statuses": "Alle statuser", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Mislyktes", + "search_tasks": "Search tasks�", + "create_task": "Opprett oppgave", + "edit_task": "Rediger oppgave", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Fildistribusjon", + "task_type_registry": "Registry", + "target_devices": "Målenheter", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Skript / kommando", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Laster", + "no_output": "Ingen utgang tilgjengelig", + "error_loading": "Feil ved innlasting av data", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuell utl��ser", + "node_schedule": "Schedule", + "node_event": "Hendelsesutløser", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Start Svc på nytt", + "node_file_deploy": "Distribuer fil", + "node_send_message": "Send melding", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Send varsel", + "node_chain": "Kjede arbeidsflyt", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Alle organisasjoner", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Enhet", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Kjøre automatisk utbedring på denne enheten?" + }, + "scaling": { + "title": "Skalering og reléstyring", + "tab_overview": "Oversikt", + "tab_relays": "Relay Nodes", + "tab_rules": "Oppdragsregler", + "tab_capacity": "Kapasitetsplanlegging", + "arch_title": "Nettverksarkitektur", + "arch_loading": "Laster inn arkitekturdiagram...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Totalt antall enheter", + "stat_active_sessions": "Aktive økter", + "stat_bandwidth": "Total båndbredde", + "relay_health": "Stafetthelse", + "no_relays": "Ingen relénoder konfigurert. Legg til din første relénode for å fordele belastningen.", + "relay_search": "Søk releer...", + "relay_add": "Legg til relénode", + "relay_edit": "Rediger relénode", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Enheter", + "col_sessions": "Økter", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Målrelé", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Aktivert", + "status_disabled": "Deaktivert", + "confirm_delete_relay": "Er du sikker på at du vil slette denne relénoden?", + "confirm_delete_rule": "Er du sikker på at du vil slette denne tildelingsregelen?", + "rules_hint": "Tilordningsregler bestemmer hvilken reléserver som håndterer bestemte enhetsgrupper. Regler vurderes etter prioritet (laveste først).", + "rule_add": "Add Rule", + "rule_edit": "Rediger regel", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Enhetsgruppe", + "match_tag": "Enhetsmerke", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Primær reservenode", + "fallback_nearest": "Nærmeste relé", + "relay_max_sessions": "Maks økter", + "relay_max_bandwidth": "Maks båndbredde (Mbps)", + "cap_tiers": "Kapasitetsnivåer", + "cap_loading": "Laster kapasitetsdata ...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Ingen anbefalinger tilgjengelig.", + "cap_planning": "Infrastrukturplanlegging", + "cap_config": "Konfigurasjon", + "cap_max_devices": "Maks enheter", + "cap_max_sessions": "Maks økter", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Enhetskapasitet", + "cap_tier_sessions": "Sesjonskapasitet", + "cap_tier_bandwidth": "Båndbredde kapasitet", + "cap_single_sqlite": "Enkel server (SQLite)", + "cap_single_pg": "Enkel server (PostgreSQL)", + "cap_master_3": "Master + 3 releer", + "cap_master_10": "Master + 10 reléer", + "rec_no_relays": "Ingen relénoder konfigurert. Vurder å legge til relénoder for bedre ytelse og redundans.", + "rec_devices_high": "Enhetsutnyttelsen er høy. Vurder å legge til flere relénoder for å fordele belastningen.", + "rec_sessions_high": "Øktkapasiteten nærmer seg grensen. Vurder å oppgradere reléinfrastruktur.", + "rec_cpu_high": "Noen relénoder rapporterer høy CPU-bruk. Vurder lastbalansering eller kapasitetsoppgraderinger.", + "rec_all_good": "Alle systemer som opererer innenfor normale parametere. Ingen handling kreves.", + "save": "Lagre", + "cancel": "Avbryt", + "edit": "Rediger", + "delete": "Slett", + "close": "Lukk", + "no_rules": "Ingen tildelingsregler.", + "relays_info_banner": "Denne listen er informativ. Reléserverne som faktisk brukes av klienter konfigureres via RELAISERER-miljøvariabelen på BetterDesk-serveren.", + "relay_name_address_required": "Navn og adresse er påkrevd.", + "relay_save_failed": "Kunne ikke lagre relénoden.", + "relay_delete_failed": "Kunne ikke slette relénoden.", + "relay_saved": "Relénoden er lagret.", + "relay_deleted": "Relé node slettet.", + "rule_name_value_required": "Regelnavn og samsvarsverdi er obligatorisk.", + "rule_save_failed": "Kunne ikke lagre regelen.", + "rule_delete_failed": "Kunne ikke slette regelen.", + "rule_saved": "Regelen er lagret.", + "rule_deleted": "Regel slettet." + }, + "cross_platform": { + "title": "Kompatibilitet på tvers av plattformer", + "tab_matrix": "Kompatibilitetsmatrise", + "tab_distribution": "Distribusjon", + "tab_protocols": "Protokoller", + "tab_limitations": "Begrensninger", + "matrix_hint": "Funksjonsstøttematrise på tvers av alle støttede plattformer. Grønn = full støtte, gul = delvis, grå = ikke tilgjengelig, blå = planlagt.", + "col_feature": "Funksjon", + "legend_full": "Full støtte", + "legend_partial": "Delvis støtte", + "legend_none": "Ikke tilgjengelig", + "legend_planned": "Planlagt", + "platform_breakdown": "Plattformsammenbrudd", + "arch_breakdown": "Arkitektur sammenbrudd", + "version_breakdown": "Versjonssammenbrudd", + "summary": "Sammendrag", + "total_devices": "Totalt antall enheter", + "unique_platforms": "Plattformer", + "unique_archs": "Arkitekturer", + "unique_versions": "Klientversjoner", + "no_devices": "Ingen enheter registrert ennå.", + "protocols_hint": "Protokollevneforhandling sikrer at hver klient kun mottar funksjonene den støtter. Serveren tilpasser atferd basert på rapporterte evner.", + "capability_negotiation": "Evneforhandling", + "codec_support": "Kodekstøtte (online enheter)", + "feature_support": "Funksjonsstøtte (online enheter)", + "no_codec_data": "Ingen kodekdata tilgjengelig fra nettbaserte enheter.", + "no_feature_data": "Ingen funksjonsdata tilgjengelig fra nettbaserte enheter.", + "protobuf_schema": "Protokollbufferskjema", + "diagram_client": "Klient", + "diagram_server": "BetterDesk server", + "diagram_peer": "Ekstern Peer", + "limitations_hint": "Hver plattform har spesifikke begrensninger som påvirker tilgjengelige funksjoner. Gå gjennom disse begrensningene når du planlegger distribusjoner.", + "feat_desktop_client": "Desktop-klient", + "feat_background_agent": "Bakgrunnsagent", + "feat_remote_target": "Eksternt mål", + "feat_screen_capture": "Skjermfangst", + "feat_input_injection": "Inngang Injeksjon", + "feat_file_transfer": "Filoverføring", + "feat_clipboard_sync": "Utklippstavlesynkronisering", + "feat_audio_streaming": "Lydstrømming", + "feat_chat": "Chat", + "feat_h264": "H.264 codec", + "feat_vp9": "VP9 codec", + "feat_av1": "AV1 codec", + "feat_cdap_agent": "CDAP-agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Nettleser", + "platform_chromeos": "ChromeOS", + "status_production": "Produksjon", + "status_testing": "Testing", + "status_planned": "Planlagt", + "status_limited": "Begrenset", + "status_experimental": "Eksperimentell", + "limit_win_uac": "UAC-høyde kreves for serviceinstallasjon og inngangsinjeksjon på sikre stasjonære datamaskiner.", + "limit_win_service": "Kjører som NSSM-tjeneste; krever administratorrettigheter for installasjon.", + "limit_win_firewall": "Windows Brannmurregler må tillate porter 21115-21119 for relétilkoblinger.", + "limit_linux_wayland": "Wayland-komponister begrenser programmatisk skjermfangst; PipeWire-portal API kreves.", + "limit_linux_pipewire": "Lydopptak krever PipeWire; PulseAudio reserve tilgjengelig, men begrenset.", + "limit_linux_arm": "ARM64-bygg tilgjengelig; noen kodeker kan bruke programvaredekoding (langsommere).", + "limit_mac_screen": "Skjermopptakstillatelse kreves i Systemvalg > Personvern og sikkerhet.", + "limit_mac_signing": "Agent må være signert med Apple Developer ID for distribusjon.", + "limit_mac_notarize": "Notarisering kreves for macOS Gatekeeper (ikke-App Store-distribusjon).", + "limit_android_projection": "MediaProjection API krever brukersamtykke for hver skjermopptaksøkt.", + "limit_android_accessibility": "Input-injeksjon krever AccessibilityService; begrenset i Android 14+.", + "limit_android_battery": "Bakgrunnstjeneste begrenset av døsemodus; kan kreve unntak for batterioptimalisering.", + "limit_ios_capture": "Apple forbyr skjermopptak i bakgrunnen; kun seermodus støttes.", + "limit_ios_input": "Ingen input-injeksjon tillatt; bare ekstern visning og chat.", + "limit_ios_appstore": "Distribusjon kun via App Store; TestFlight for betatesting.", + "limit_web_https": "WebCodecs API og WebRTC krever HTTPS; HTTP faller tilbake til JMuxer (begrenset kodeker).", + "limit_web_codec": "Støtte for kodek avhenger av nettleseren; H.264 støttes bredt, VP9/AV1 varierer.", + "limit_web_performance": "Ytelse begrenset av nettlesers sandkasse; ingen direkte maskinvareakselerasjon.", + "limit_chrome_crostini": "Full agentstøtte kun inne i Crostini Linux-beholderen.", + "limit_chrome_pwa": "PWA-modus gir bare webfunksjoner; ingen native agent evner.", + "limit_chrome_input": "Inngangsinjeksjon støttes ikke utenfor Crostini-beholderen.", + "feat_session_recording": "Sesjonsopptak", + "feat_multi_monitor": "Flere skjermer", + "feat_unattended_access": "Ubevoktet tilgang", + "limit_win_virtual_account": "Tjenestee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Tjenestee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Sikkerhetsrevisjon", + "tab_overview": "Oversikt", + "tab_events": "Revisjonshendelser", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Sikkerhetsscore", + "failed_logins": "Mislykkede pålogginger (24 timer)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Gamle taster (>90d)", + "security_checks": "Sikkerhetssjekker", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Sikker", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "all_events": "All Events", + "event_login_failed": "Innlogging mislyktes", + "event_login_success": "Innlogging vellykket", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfigurasjon endret", + "event_key_created": "Nøkkel opprettet", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Ingen revisjonshendelser funnet.", + "hardening_hint": "Sikkerhetsforsterkende prioriteter for BetterDesk-distribusjonen. Varene er sortert etter alvorlighetsgrad.", + "no_hardening": "Ingen herdeprodukter tilgjengelig.", + "vuln_hint": "Resultat av avhengighetssårbarhetsskanning. Kjør npm-revisjon regelmessig for å holde avhengigheter sikre.", + "no_vulns": "Ingen sårbarheter funnet. Dine avhengigheter er sikre." + }, + "languages": { + "title": "Språkhåndtering", + "total_languages": "Totalt språk", + "fully_translated": "Fullstendig oversatt", + "needs_review": "Trenger gjennomgang", + "reference_keys": "Referansenøkler", + "no_languages": "Finner ingen språkfiler.", + "badge_reference": "Reference", + "badge_review": "Trenger gjennomgang", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Visning mangler", + "fix_missing": "Fix Missing", + "missing_keys_for": "Mangler nøkler til", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "og {n} mer...", + "all_keys_present": "Alle nøkler er tilstede!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Manglende nøkler i {code} må oversettes manuelt.", + "no_fix_needed": "Ingen manglende nøkler å fikse." + }, + "resource_control": { + "title": "Ressurskontroll", + "tab_overview": "Oversikt", + "tab_usb": "USB Control", + "tab_optical": "Optiske stasjoner", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Ressurskvoter", + "compliance_by_category": "Samsvar etter kategori", + "device_compliance": "Enhetsoverholdelse", + "search_devices": "Søk etter enheter...", + "col_device": "Enhet", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Totalt antall enheter", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Samsvarsgrad", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurer", + "no_devices": "Ingen enheter funnet", + "usb_title": "USB Portkontroll", + "usb_hint": "Kontroller USB lagringsenhetstilgang for den valgte enheten eller standardpolicyen for hele organisasjonen.", + "usb_storage_policy": "USB Lagringspolicy", + "usb_whitelist": "Hvitelistede enheter (én per linje)", + "usb_whitelist_hint": "VID:PID (f.eks. 0781:5583)", + "usb_audit_log": "Logg USB enhetstilkoblinger", + "optical_title": "Optisk stasjonskontroll", + "optical_hint": "Kontroller tilgang til CD/DVD/Blu-ray-stasjoner for den valgte enheten.", + "optical_policy": "Politikk for optisk stasjon", + "optical_audit_log": "Logg tilgang til optisk stasjon", + "monitors_title": "Overvåke ledelse", + "monitors_hint": "Konfigurer skjerminnstillinger inkludert maksimalt antall, oppløsningshåndhevelse, lysstyrke og strømplaner.", + "monitors_max_count": "Maksimalt antall skjermer (0 = ubegrenset)", + "monitors_max_hint": "0 betyr ingen grense", + "monitors_resolution": "Maks oppløsning", + "monitors_brightness": "Lysstyrkegrense", + "monitors_power_schedule": "Strømplan", + "monitors_power_hint": "f.eks. av: 22:00-06:00", + "disks_title": "Disktilgangskontroll", + "disks_hint": "Konfigurer retningslinjer for disktilgang, inkludert skrivebeskyttet modus, håndheving av kryptering og partisjonssynlighet.", + "disks_readonly": "Tving skrivebeskyttet modus", + "disks_encryption": "Krev kryptering (BitLocker/LUKS)", + "disks_smart": "Aktiver S.M.A.R.T. overvåking", + "disks_hidden": "Skjulte partisjoner", + "disks_hidden_hint": "Kommaseparerte stasjonsbokstaver eller monteringspunkter", + "quotas_title": "Ressurskvoter", + "quotas_hint": "Angi CPU-, RAM-, båndbredde- og diskkvoter per bruker for den valgte enheten.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Båndbreddegrense (Mbps)", + "quotas_bandwidth_hint": "0 = ubegrenset", + "quotas_disk_quota": "Diskkvote (GB)", + "quotas_disk_hint": "0 = ubegrenset", + "quotas_process_whitelist": "Hviteliste for prosess (én per linje)", + "quotas_process_hint": "f.eks. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Bare hviteliste", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Programvareoppdateringer", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Installert versjon", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Se etter oppdateringer", + "checking": "Checking…", + "up_to_date": "Oppdatert", + "update_available": "Oppdatering tilgjengelig", + "changelog": "Release Notes", + "no_changelog": "Ingen versjonsnotater tilgjengelig", + "files_changed": "Filene endret", + "files": "filer", + "changes_unavailable": "Kunne ikke laste filendringslisten. Du kan fortsatt installere oppdateringen.", + "create_backup": "Lag sikkerhetskopi før oppdatering", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installerer oppdatering …", + "creating_backup": "Oppretter sikkerhetskopi …", + "downloading": "Laster ned filer …", + "install_success": "Oppdateringen ble installert. Konsollen starter på nytt...", + "install_failed": "Oppdateringsinstallasjonen mislyktes", + "restarting": "Venter på at konsollen skal starte på nytt …", + "restart_complete": "Konsollen ble startet på nytt", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Ingen oppdateringsversjon er valgt. Se etter oppdateringer først.", + "backups_title": "Oppdater sikkerhetskopier", + "backups_desc": "Forhåndsoppdatering sikkerhetskopier opprettet automatisk før hver oppdatering", + "no_backups": "Ingen oppdateringssikkerhetskopier funnet", + "restore": "Restore", + "restore_confirm": "Er du sikker på at du vil gjenopprette fra denne sikkerhetskopien? Endrede filer vil bli overskrevet.", + "restore_success": "Sikkerhetskopien ble gjenopprettet. Konsollen starter på nytt...", + "baseline_set": "Grunnlinjesett", + "commits_behind": "forplikter seg bak", + "total_files": "Totalt antall filer", + "applied": "Applied", + "failed": "Mislyktes", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Gå til server", + "component_agent": "Agent", + "component_scripts": "Skript og Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Sjekker Go...", + "go_not_found": "Gå ikke installert", + "go_check_failed": "Kunne ikke sjekke Go-tilgjengelighet", + "server_building": "Kompilerer Go server... Dette kan ta noen minutter.", + "server_built": "Server binær kompilert", + "server_build_failed": "Serverkompilering mislyktes", + "server_stale_title": "Server binær utdatert", + "server_stale_desc": "Go server-kilden ble oppdatert, men den kjørende binære filen ble ikke gjenoppbygd. Bygg den på nytt nå for å bruke sikkerhets- og bibliotekoppdateringer.", + "rebuild_server": "Gjenoppbygg server binær", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Server binær gjenoppbygd og startet på nytt", + "rebuild_server_failed": "Binær gjenoppbygging av tjener mislyktes", + "server_deployed": "Server binær distribuert", + "server_deploy_failed": "Serverdistribusjon mislyktes", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Laster ned serverkilde …", + "delete": "Slett", + "delete_confirm": "Vil du slette sikkerhetskopien {name} permanent? Dette kan ikke angres.", + "delete_success": "Sikkerhetskopien slettet", + "delete_failed": "Kunne ikke slette sikkerhetskopien", + "retention_label": "Behold N siste sikkerhetskopier", + "retention_hint": "Eldre sikkerhetskopier slettes automatisk etter hver oppdatering. Bruk 0 for å beholde alle sikkerhetskopier.", + "retention_saved": "Oppbevaringsinnstillingen er lagret", + "retention_invalid": "Oppbevaring må være et heltall mellom 0 og 1000", + "retention_required_for_prune": "Angi en oppbevaringsverdi større enn 0 først", + "prune_now": "Apply now", + "prune_confirm": "Beholde bare {n} siste sikkerhetskopier og slette resten?", + "prune_done": "Beskjærte {n} backup(er)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Oppdateringsmetode", + "strategy_download": "Last ned forhåndsbygd binær", + "strategy_compile": "Kompiler fra kilden", + "both_available": "Last ned og kompiler", + "download_available": "Last ned tilgjengelig", + "no_method": "Ingen oppdateringsmetode", + "no_release": "No release", + "available": "Tilgjengelig", + "server_downloading": "Laster ned server binær …", + "server_downloaded": "Server binær lastet ned", + "server_download_failed": "Server binær nedlasting mislyktes", + "server_download_note": "En forhåndsbygd binær vil bli lastet ned fra GitHub-utgivelser. Dette tar vanligvis mindre enn ett minutt.", + "install_go_hint": "Installer Go fra https://go.dev/dl/ for å aktivere kompilering, eller publiser en utgivelse med forhåndsbygde binærfiler", + "strategy_install_go": "Autoinstaller Go og kompiler", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Klar for automatisk gjenoppbygging", + "toolchain_ready": "Verktøykjede installert", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Laster ned Go-verktøykjeden …", + "toolchain_failed": "Installasjon av Go Toolchain mislyktes", + "modal_title": "Installerer oppdatering", + "modal_done_title": "Oppdatering fullført", + "modal_close": "Lukk", + "modal_reload_now": "Last inn konsollen på nytt", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsollfiler", + "phase_server": "Serverkomponent", + "phase_restart": "Start på nytt", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Sikkerhetskopiering hoppet over (per brukervalg)", + "server_skipped": "Go server hoppet over", + "server_not_selected": "Go server not selected", + "server_processing": "Behandler Go server-oppdatering...", + "no_restart_needed": "Ingen omstart nødvendig", + "complete": "Oppdatering tatt i bruk", + "complete_summary": "Oppdateringen er tatt i bruk.", + "complete_with_errors": "Oppdateringen ble fullført, men noen trinn mislyktes. Se detaljer nedenfor.", + "modal_done_with_errors_title": "Oppdatering fullført med feil", + "console_will_restart": "Konsollprosessen starter på nytt nå...", + "restart_complete_msg": "Konsollen ble ferdig med å starte på nytt. Klikk på Last inn på nytt for å laste den nye versjonen. Siden lastes automatisk inn på nytt om 8 sekunder.", + "refresh_recommended": "Statiske eiendeler endret – last inn siden på nytt for å se det nye brukergrensesnittet.", + "confirm_title": "Bruk oppdatering", + "confirm_with_backup": "En forhåndsoppdatering opprettes automatisk.", + "confirm_no_backup": "Ingen sikkerhetskopi vil bli opprettet (fortsett på egen risiko)." + }, + "permissions": { + "title": "Tillatelser", + "subtitle": "Administrer rollebaserte tillatelser og tilpassede overstyringer", + "info_title": "Hvordan tillatelser fungerer", + "info_desc": "Hver rolle har standardtillatelser. Du kan legge til eller fjerne individuelle tillatelser per rolle ved å veksle mellom dem nedenfor. Egendefinerte overstyringer er uthevet og kan tilbakestilles til standardinnstillinger når som helst.", + "select_role": "Velg rolle", + "select_role_placeholder": "Velg en rolle...", + "reset_overrides": "Tilbakestill alle overstyringer", + "granted": "Innvilget", + "overrides": "Overstyringer", + "level": "Nivå", + "super_admin_tag": "Full tilgang", + "server_level_tag": "Server-nivå", + "custom": "Egendefinert", + "default": "Standard", + "revert": "Gå tilbake til standard", + "saved": "Tillatelsen er oppdatert", + "reverted": "Tilbakestilt til standard", + "all_reverted": "Alle overstyringer er tilbakestilt", + "confirm_reset": "Vil du tilbakestille alle egendefinerte overstyringer for denne rollen til standardinnstillingene?", + "empty_title": "Velg en rolle", + "empty_desc": "Velg en rolle fra rullegardinmenyen ovenfor for å se og administrere tillatelsene.", + "locked_title": "Superadministrator", + "locked_desc": "Super Admin har alle tillatelser som standard og kan ikke tilpasses.", + "cat_device": "Enheter", + "cat_user": "Brukere", + "cat_server": "Serversystem", + "cat_org": "Organisasjoner", + "cat_audit": "Revisjon og overvåking", + "cat_cdap": "CDAP", + "cat_enrollment": "Registrering", + "cat_chat": "Chat", + "cat_branding": "Merkevarebygging", + "perm_device_view": "Se enheter", + "perm_device_connect": "Koble til enheter", + "perm_device_edit": "Rediger enheter", + "perm_device_delete": "Slett enheter", + "perm_device_ban": "Forby/opphev forbud mot enheter", + "perm_device_change_id": "Endre enhets-ID", + "perm_user_view": "Se brukere", + "perm_user_create": "Opprett brukere", + "perm_user_edit": "Rediger brukere", + "perm_user_delete": "Slett brukere", + "perm_server_config": "Serverkonfigurasjon", + "perm_server_keys": "Administrer API-nøkler", + "perm_org_create": "Opprett organisasjoner", + "perm_org_edit": "Rediger organisasjoner", + "perm_org_delete": "Slett organisasjoner", + "perm_org_manage_users": "Administrer organisasjonsbrukere", + "perm_org_manage_devices": "Administrer organisasjonsenheter", + "perm_audit_view": "Se revisjonslogger", + "perm_metrics_view": "Se beregninger", + "perm_blocklist_edit": "Rediger blokkeringsliste", + "perm_cdap_view": "Se CDAP-enheter", + "perm_cdap_command": "Send CDAP-kommandoer", + "perm_cdap_terminal": "CDAP terminaltilgang", + "perm_cdap_files": "CDAP filtilgang", + "perm_enrollment_manage": "Administrer påmelding", + "perm_enrollment_approve": "Godkjenne påmelding", + "perm_chat_access": "Chat-tilgang", + "perm_branding_edit": "Rediger merkevarebygging", + "perm_server_attestation": "Serverytelsesattest" + }, + "notifications": { + "title": "Varsler", + "empty": "Ingen nye varsler", + "mark_all_read": "Merk alt som lest", + "see_all": "Se alle hjelpeforespørsler", + "help_request": "Hjelpeforespørsel", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Juster konsollen til dine syn, bevegelser og lesebehov.", + "close": "Lukk tilgjengelighetsmenyen", + "profiles": "Raske profiler", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Større tekst, sterk kontrast og fokus.", + "profile_dyslexia": "Lesekomfort", + "profile_dyslexia_hint": "Lesbar skrift og bredere mellomrom.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reduserer overganger og setter animasjon på pause.", + "profile_color_assist": "Fargestøtte", + "profile_color_assist_hint": "Fargefilter, etiketter og uthevede lenker.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Bokstavavstand", + "word_spacing": "Ordavstand", + "readable_font": "Lesbar skrift", + "readable_font_hint": "Bruker brede, kjente bokstavformer.", + "dyslexia_spacing": "Dysleksiavstand", + "dyslexia_spacing_hint": "Legger til ekstra mellomrom for lang tekst.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Mørk med høy kontrast", + "contrast_high_light": "Lys med høy kontrast", + "contrast_yellow_black": "Gult på svart", + "color_filter": "Fargesynsfilter", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Fargemetning", + "underline_links": "Understrek lenker", + "underline_links_hint": "Gjør koblinger synlige uten å stole på farger.", + "highlight_links": "Fremhev handlinger", + "highlight_links_hint": "Skisserer lenker og knapper.", + "highlight_headings": "Marker overskrifter", + "highlight_headings_hint": "Merker seksjonstitler med en fargelinje.", + "hide_media": "Dim media", + "hide_media_hint": "Demper bilder, videoer og lerreter.", + "interaction": "Interaction", + "strong_focus": "Sterkt fokus", + "strong_focus_hint": "Viser en stor tastaturfokusring.", + "large_cursor": "Stor markør", + "large_cursor_hint": "Bruker en større peker med høy kontrast.", + "reduce_motion": "Reduser bevegelse", + "reduce_motion_hint": "Forkorter overganger og jevn rulling.", + "pause_animations": "Sett animasjoner på pause", + "pause_animations_hint": "Slutter å sløyfe visuell bevegelse.", + "reading_guide": "Leseveiledning", + "reading_guide_hint": "Følger pekeren med en lys linje.", + "reading_mask": "Lesemaske", + "reading_mask_hint": "Demper innholdet over og under pekeren.", + "preview": "Preview", + "preview_title": "Forhåndsvisning av operatørens arbeidsområde", + "preview_text": "Sjekk om tekst, lenker, kontroller og statusetiketter er behagelige å lese før du lukker denne menyen.", + "preview_link": "Link for enhetsdetaljer", + "preview_status": "Online", + "preview_button": "Primær handling", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Serveradministrasjon", + "subtitle": "Cockpit-lignende kontrollplan for BetterDesk-konsollverten (BETA).", + "beta_tooltip": "Betafunksjon — under aktiv utvikling.", + "notice_title": "Betafunksjon", + "notice_body": "Disse verktøyene kjører på verten der BetterDesk-konsollprosessen lever. Alle operasjoner er revidert. Funksjonsomfanget vil utvides i fremtidige utgivelser.", + "tab_overview": "Oversikt", + "tab_terminal": "Terminal", + "tab_files": "Filer", + "tab_services": "Tjenester", + "cpu": "CPU", + "memory": "Minne", + "load": "Gjennomsnittlig belastning", + "disks": "Disker", + "history": "Historikk (siste 60 prøver)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Oppetid", + "no_disks": "Ingen diskdata tilgjengelig", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY tilgjengelig", + "term_connect": "Koble til", + "term_disconnect": "Koble fra", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Tilkoblingsfeil", + "term_warning": "Kommandoer kjøres som brukeren som eier konsollprosessen. Legg til en sudoers-regel for å aktivere elevasjon.", + "term_hint": "Tips: skriv `sudo -i` for å eskalere (krever sudoers-konfigurasjon).", + "term_lib_failed": "Kunne ikke laste inn terminalbiblioteket", + "files_up": "Opp ett nivå", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Tom katalog", + "files_error": "Kunne ikke vise katalogen", + "read_failed": "Kunne ikke lese filen", + "save_failed": "Kunne ikke lagre filen", + "rename_failed": "Endre navn mislyktes", + "delete_failed": "Sletting mislyktes", + "delete_confirm": "Vil du slette denne oppføringen?", + "mkdir_prompt": "Nytt mappenavn:", + "mkdir_failed": "Kunne ikke opprette mappe", + "file_saved": "Filen er lagret", + "binary_warn": "Binær fil — kun forhåndsvisning", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Søketjenester...", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Ingen tjenester funnet", + "svc_load_failed": "Kunne ikke laste inn tjenester", + "svc_action_failed": "Handlingen mislyktes", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Start på nytt", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Last ned BetterDesk Agent", + "choose_platform": "Velg din plattform", + "choose_platform_hint": "Velg installasjonsprogrammet som samsvarer med operativsystemet ditt.", + "download": "Last ned", + "building": "Bygger …", + "failed": "Bygg mislyktes", + "need_help": "Trenger du hjelp?", + "powered_by": "Drevet av" + }, + "server_attestation": { + "title": "Serverattest", + "subtitle": "Ytelsesreferanse som fastslår kapasitet for samtidige fjerntilkoblinger ved 80 % CPU-, RAM- og diskterskel.", + "warning_title": "Belastningstest", + "warning_body": "Referansen simulerer parallelle WebSocket-tilkoblinger til signal- og reléserverne. Kjør i lavsesong — denne testen belaster produksjonen.", + "run_benchmark": "Kjør referanse", + "abort": "Avbryt", + "download_report": "Last ned JSON-rapport", + "last_test": "Siste test", + "no_test_yet": "Ingen referanse er kjørt ennå", + "max_connections": "Maks. tilkoblinger", + "threshold_80": "80 % terskel — endelige målinger", + "disk": "Disk", + "ramp_chart": "Belastningsrampediagram", + "connections": "Tilkoblinger", + "connections_short": "tilk.", + "tier_guide_title": "Hva betyr hvert nivå?", + "tier_bronze": "BRONSE", + "tier_iron": "JERN", + "tier_titanium": "TITAN", + "tier_platinum": "PLATINA", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UVURDERT", + "tier_bronze_desc": "1–25 samtidige tilkoblinger — liten VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 tilkoblinger — mellomklasse-server (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 tilkoblinger — høyytelsesserver (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 tilkoblinger — bedriftsinfrastruktur (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ tilkoblinger — turboklass: dedikert maskinvare, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Merk: I Docker kan CPU/RAM-målinger gjenspeile containerbegrensninger snarere enn den fysiske verten.", + "badge_tooltip": "BetterDesk Serverattest — serverytelsessertifisering", + "confirm_run": "Denne referansen belastningstester serveren med simulerte tilkoblinger. Fortsett?", + "starting": "Starter...", + "complete": "Referanse fullført", + "signal_peers": "Signalpeers", + "relay_sessions": "Relésesjoner", + "page_error": "Kunne ikke laste Serverattest-siden", + "mode_estimated": "Estimert (WebSocket utilgjengelig)", + "incomplete": "Referanse fullført uten et gyldig nivå" + }, + "commercialization": { + "title": "Kommersialisering", + "subtitle": "Støttepakker, fakturerbare økter og rapporter", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidlig funksjon — fakturering og pakker er under aktiv utvikling.", + "tabs": { + "overview": "Oversikt", + "packages": "Pakker og kontrakter", + "sessions": "Økter", + "reports": "Rapporter", + "settings": "Avanserte innstillinger" }, - "branding": { - "identity_title": "Merkeidentitet", - "identity_desc": "Tilpass applikasjonsnavnet og beskrivelsen som vises på konsollen", - "app_name": "Søknadsnavn", - "app_description": "Søknadsbeskrivelse", - "logo_title": "Logo", - "logo_desc": "Velg hvordan logoen din skal vises i sidefeltet og påloggingssiden", - "logo_type_icon": "Materialikon", - "logo_type_svg": "SVG-kode", - "logo_type_image": "Bilde-URL", - "logo_icon_name": "Ikonnavn", - "logo_icon_hint": "Skriv inn et materialikonnavn (f.eks. dns, sky, sikkerhet). Se fonts.google.com/icons", - "logo_svg_code": "SVG-kode", - "logo_svg_hint": "Lim inn SVG-merkingen din her. Støtter hele -elementer med baner og stiler.", - "logo_image_upload": "Last opp bilde", - "logo_image_choose": "Velg bildefil", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Ugyldig filtype. Bruk PNG, JPG, GIF, WebP eller SVG.", - "preview": "Forhåndsvisning", - "colors_title": "Fargevalg", - "colors_desc": "Tilpass fargepaletten. La stå tomt for å bruke standardinnstillinger.", - "colors_backgrounds": "Bakgrunner", - "colors_text": "Tekst", - "colors_accents": "Aksentfarger", - "colors_borders": "Kanter", - "import_export_title": "Import/eksport", - "import_export_desc": "Lagre temaet ditt som en JSON-fil eller importer en fra en annen instans", - "export_theme": "Eksporter tema", - "import_theme": "Importer tema", - "reset_defaults": "Tilbakestill til standard", - "save_branding": "Lagre merkevarebygging", - "saved": "Merkevarebygging er lagret. Laster inn på nytt...", - "exported": "Tema eksportert", - "imported": "Temaet ble importert. Laster inn på nytt...", - "import_error": "Kunne ikke importere temaet. Ugyldig filformat.", - "reset_confirm": "Er du sikker på at du vil tilbakestille merkevarebyggingen til standardinnstillingene? Dette kan ikke angres.", - "reset_success": "Branding tilbakestilt til standardverdier. Laster inn på nytt...", - "logo_type_text": "Tekstlogo", - "logo_text": "Logotekst", - "logo_text_hint": "Primærtekst vises som merkevarelogoen din", - "logo_text_accent": "Aksenttekst", - "logo_text_accent_hint": "Sekundær tekst under logoen (f.eks. produktnavn eller slagord)", - "logo_upload_success": "Logoen ble lastet opp.", - "typography_title": "Typografi", - "typography_desc": "Velg skrifttyper for overskrifter og brødtekst. Fonter lastes ned til serveren for selvhosting.", - "font_heading": "Overskrift Font", - "font_heading_hint": "Brukes til overskrifter (H1–H6) og tekstlogo", - "font_body": "Brødtekstskrifttype", - "font_body_hint": "Brukes for brødtekst og UI-elementer", - "font_search_placeholder": "Søk etter skrifter...", - "font_system_default": "Systemstandard", - "font_clear": "Fjern", - "font_cat_all": "Alle", - "font_downloaded_count": "skrifter lastet ned på serveren", - "powered_by": "Drevet av", - "background_title": "Bakgrunn og utseende", - "background_desc": "Angi en konsolbakgrunn, gradient eller ensfarget bakgrunn.", - "bg_type_none": "Ingen", - "bg_type_color": "Ensfarget", - "bg_type_gradient": "Gradient", - "bg_type_image": "Bilde", - "bg_color": "Bakgrunnsfarge", - "bg_gradient": "CSS-gradient", - "bg_gradient_hint": "Enhver gyldig CSS-gradient, f.eks. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Last opp bakgrunnsbilde", - "bg_image_choose": "Velg bildefil", - "bg_image_hint": "PNG, JPG, WebP eller GIF. Maks. 8 MB.", - "bg_image_url": "Bildesti / URL", - "bg_size": "Bildestørrelse", - "bg_size_cover": "Dekk (fyll skjerm)", - "bg_size_contain": "Tilpass (fit)", - "bg_size_auto": "Automatisk (original)", - "bg_blur": "Bakgrunnsuskarphet", - "bg_overlay": "Mørkt overlag", - "bg_overlay_hint": "Mørkner bakgrunnen for bedre tekstlesbarhet.", - "bg_image_too_large": "Bildet er for stort. Maksimal størrelse er 8 MB.", - "bg_image_invalid_type": "Ugyldig filtype. Bruk PNG, JPG, WebP eller GIF.", - "bg_upload_success": "Bakgrunnsbilde lastet opp.", - "login_title": "Innloggingsside", - "login_desc": "Tilpass innloggingsskjermens overskrift, underoverskrift og bakgrunn.", - "login_heading": "Innloggingsoverskrift", - "login_heading_placeholder": "Velkommen tilbake", - "login_subheading": "Innloggingsunderoverskrift", - "login_subheading_placeholder": "Logg inn på kontoen din", - "login_bg_inherit": "Samme som konsollen", - "agent_title": "Agent-nedlastingsside", - "agent_desc": "Tilpass den offentlige agent-nedlastingsportalen vist til sluttbrukere.", - "agent_show_powered": "Vis \"Drevet av BetterDesk\"", - "agent_show_powered_hint": "Vis BetterDesk-tilskrivningen i nedlastingsportalens bunntekst.", - "footer_title": "Bunntekst og opphavsrett", - "footer_desc": "Legg til en egendefinert bunntekstlinje vist på innloggingsskjermen og konsollsidepanelet.", - "footer_text": "Bunnteksttekst", - "footer_text_hint": "f.eks. en opphavsrettsmelding eller firmanavn.", - "show_powered": "Vis \"BetterDesk\"-tilskrivning", - "show_powered_hint": "Vis BetterDesk-navn og versjon i innloggingsbunnteksten og sidepanelet.", - "custom_css_title": "Egendefinert CSS", - "custom_css_desc": "Avansert: injiser egendefinert CSS i konsollen og innloggingssiden.", - "custom_css_hint": "Bruk med forsiktighet. Maks. 20 000 tegn." + "clock": { + "title": "Servertid (NTP)", + "check_now": "Sjekk nå", + "unsynced": "Serverklokken er ikke synkronisert — fakturerbare økter kan bli blokkert" }, - "device_detail": { - "tab_overview": "Oversikt", - "tab_tags": "Merker og notater", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Tilkobling", - "section_manage": "Ledelse", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Denne enheten er forbudt", - "no_reason": "Ingen grunn oppgitt", - "tags": "Tags", - "no_tags": "Ingen tagger tilordnet denne enheten", - "tag_placeholder": "Skriv inn et merkenavn...", - "add_tag": "Add", - "tag_exists": "Denne taggen eksisterer allerede", - "notes": "Notes", - "notes_placeholder": "Legg til merknader om denne enheten...", - "danger_zone": "Danger Zone", - "action_connect_web": "Nettfjernkontroll", - "action_connect_web_desc": "Koble til via nettleserens eksterne skrivebord", - "action_native_remote": "BetterDesk fjernkontroll", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Desktop-klient", - "action_connect_desktop_desc": "Åpne i skrivebordsklientappen", - "action_change_id_desc": "Endre enhetsregistrerings-ID", - "action_ban_desc": "Blokker denne enheten fra å koble til", - "action_unban_desc": "Tillat denne enheten å koble til igjen", - "action_delete_desc": "Fjern denne enheten permanent", - "tab_hardware": "Hardware", - "tab_metrics": "Beregninger", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kodingsmuligheter", - "section_live_metrics": "Direktemålinger", - "section_current_usage": "Nåværende bruk", - "section_usage_history": "Brukshistorikk", - "os": "Operativsystem", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU-frekvens", - "total_memory": "Totalt minne", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Oppdatert", - "device_groups": "Grupper", - "no_sysinfo": "Ingen maskinvareinformasjon tilgjengelig", - "no_sysinfo_hint": "Systeminfo vises etter at enheten har sendt en sysinfo-rapport", - "no_metrics": "Ingen beregningsdata tilgjengelig", - "no_metrics_hint": "Beregninger vises etter at enheten har sendt hjerteslagrapporter", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Filer", - "agent_lazy_hint": "Klikk på denne fanen for å laste live data fra agenten", - "agent_offline": "Agenten er frakoblet", - "agent_timeout": "Agenten svarte ikke i tide", - "agent_error": "Kunne ikke laste inn data fra agenten", - "service_name": "Name", - "service_display": "Visningsnavn", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktive fakturerbare økter" }, - "inventory": { - "title": "Inventory", - "subtitle": "Maskinvare- og programvarebeholdning av administrerte enheter", - "device_id": "Enhets-ID", - "hostname": "Hostname", - "os": "Operativsystem", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Totalt minne", - "memory_used": "Used Memory", - "memory_available": "Tilgjengelig minne", - "memory_usage": "Minnebruk", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Nettverksgrensesnitt", - "software": "Software", - "software_count": "Installert programvare", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fysiske kjerner", - "logical_cores": "Logiske kjerner", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Tilgjengelig", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-adresser", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Samler som løper", - "collector_stopped": "Samler stoppet", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Hentes kl", - "no_data": "Ingen lagerdata tilgjengelig ennå. Klikk \"Samle nå\" for å samle systeminformasjon.", - "no_devices": "Fant ingen enheter med lagerdata", - "detail_title": "Detalj for enhetsbeholdning", - "telemetry": "Telemetry", - "view_detail": "Vis detalj", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Ny pakke", + "name": "Navn", + "included_minutes": "Inkluderte minutter", + "overage_rate": "Overforbrukssats / t", + "currency": "Valuta", + "heading": "Støttepakker", + "prompt_name": "Pakkenavn", + "create_title": "Ny pakke for organisasjon", + "create_submit": "Opprett pakke", + "select_org": "Organisasjon", + "select_org_placeholder": "Velg organisasjon…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Støttebilletter og problemsporing", - "create": "New Ticket", - "edit": "Rediger billett", - "delete": "Slett billett", - "detail": "Billettdetaljer", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Tildelt til", - "created_by": "Laget av", - "device": "Enhet", - "sla_due": "SLA Due", - "created_at": "Opprettet", - "updated_at": "Oppdatert", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Åpne", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Skriv en kommentar...", - "internal_note": "Internt notat (ikke synlig for sluttbrukere)", - "attachments": "Attachments", - "upload_attachment": "Last opp vedlegg", - "download": "Download", - "connect_device": "Koble til enheten", - "no_tickets": "Ingen billetter funnet", - "no_comments": "Ingen kommentarer ennå", - "no_attachments": "Ingen vedlegg", - "title_required": "Tittel er påkrevd", - "delete_confirm": "Er du sikker på at du vil slette billett #{id}?", - "delete_success": "Billetten ble slettet", - "created_success": "Billetten ble opprettet", - "updated_success": "Billetten ble oppdatert", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Søk etter billetter...", - "assign_to_me": "Tilordne meg", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Åpne", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Aktivitetsovervåking", - "subtitle": "Applikasjonsbruk og inaktiv sporing", - "device": "Enhet", - "hostname": "Hostname", - "sessions": "Økter", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Toppapplikasjoner", - "app_name": "Application", - "window_title": "Vindutittel", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Antall økter", - "total_active": "Totalt aktiv", - "total_idle": "Total Idle", - "detail_count": "Detaljposter", - "no_data": "Ingen aktivitetsdata tilgjengelig", - "no_sessions": "Ingen økter", - "filter_from": "Fra", - "filter_to": "Til", - "filter_apply": "Bruk filter", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Søk etter enheter...", - "date_range": "Date Range", - "device_id": "Enhets-ID", - "session_start": "Sesjon Start", - "session_end": "Slutt på økten", - "user": "User", - "no_activity": "Ingen aktivitet registrert", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Ingen søknader" - }, - "automation": { - "title": "Automatisering og varsler", - "subtitle": "Varselregler, fjernkommandoer og SMTP-konfigurasjon", - "rules": "Alert Rules", - "rules_subtitle": "Definer forhold som utløser varsler", - "alerts": "Varslingshistorikk", - "alerts_subtitle": "Se og bekreft utløste varsler", - "commands": "Fjernkommandoer", - "commands_subtitle": "Send kommandoer til eksterne enheter", - "smtp": "SMTP-konfigurasjon", - "smtp_subtitle": "Innstillinger for e-postvarsling", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Tilstandstype", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Målenhet", - "scope_all": "Alle enheter", - "cooldown": "Nedkjøling (sekunder)", - "notify_emails": "E-postmeldinger", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "create_rule": "Opprett regel", - "edit_rule": "Rediger regel", - "delete_rule": "Slett regel", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Utløst kl", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Større enn", - "op_gte": "Større eller lik", - "op_lt": "Less than", - "op_lte": "Mindre eller lik", - "op_eq": "lik", - "op_neq": "Ikke lik", - "type_cpu_usage": "CPU-bruk (%)", - "type_memory_usage": "Minnebruk (%)", - "type_disk_usage": "Diskbruk (%)", - "type_offline_duration": "Frakoblet varighet (er)", - "type_idle_duration": "Inaktiv varighet (r)", - "type_custom": "Custom", - "command_type": "Kommandotype", - "command_payload": "Kommando / skript", - "command_result": "Result", - "command_status": "Status", - "send_command": "Send kommando", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Mislyktes", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Brukernavn", - "smtp_pass": "Passord", - "smtp_from": "Fra adresse", - "smtp_test": "Test tilkobling", - "smtp_save": "Lagre konfigurasjon", - "smtp_test_success": "Tilkoblingen var vellykket", - "smtp_test_failed": "Tilkobling mislyktes", - "no_rules": "Ingen varslingsregler er konfigurert", - "no_alerts": "Ingen varsler utløst", - "no_commands": "Ingen kommandoer sendt", - "id_payload_required": "Enhets-ID og nyttelast kreves", - "no_commands_sent": "Ingen kommandoer er sendt ennå" - }, - "file_transfer": { - "title": "Filoverføring", - "transfers": "Transfers", - "new_transfer": "Ny overføring", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Filstørrelse", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Enhet", - "initiated_by": "Initiert av", - "created_at": "Opprettet kl", - "cancel": "Avbryt", - "cancel_confirm": "Er du sikker på at du vil kansellere denne overføringen?", - "download_file": "Last ned fil", - "browse_files": "Bla gjennom filer", - "select_file": "Velg Fil", - "select_device": "Velg Enhet", - "no_transfers": "Ingen filoverføringer", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Mislyktes", - "status_cancelled": "Cancelled", - "bytes_transferred": "Byte overført", - "chunks": "Chunks", - "transfer_started": "Overføringen startet", - "transfer_completed": "Overføring fullført", - "transfer_failed": "Overføringen mislyktes", - "transfer_cancelled": "Overføringen kansellert", - "max_file_size": "Maksimal filstørrelse: 4 GB", - "error_too_large": "Filen er for stor", - "error_no_device": "Ingen enhet er valgt", - "error_no_file": "Ingen fil er valgt" - }, - "network": { - "title": "Nettverksovervåking", - "targets": "Overvåking av mål", - "add_target": "Add Target", - "edit_target": "Rediger mål", - "delete_target": "Slett mål", - "delete_confirm": "Er du sikker på at du vil slette dette målet?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Tidsavbrudd (ms)", - "interval": "Intervall (ms)", - "enabled": "Aktivert", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Sjekk historikk", - "stats": "Statistics", - "total_targets": "Totale mål", - "targets_up": "Targets Up", - "targets_down": "Mål ned", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Nettverksverktøy", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Portkontroll", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Start overvåking", - "monitor_stop": "Stopp monitor", - "monitor_running": "Skjermen kjører", - "monitor_stopped": "Monitoren er stoppet", - "no_targets": "Ingen overvåkingsmål konfigurert", - "no_history": "Ingen sjekkhistorikk tilgjengelig", - "error_code": "Error", - "status_code": "HTTP Statuskode", - "search_targets": "Søkemål...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Sjekk historikk", - "name_host_required": "Navn og vert er påkrevd", - "uptime": "Uptime", - "response_time": "Responstid", - "avg_response": "Gjennomsnittlig respons", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Responstid (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Siste 24 timer", - "last_7d": "Last 7 days", - "last_30d": "Siste 30 dager" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP-retningslinjer", - "add_policy": "Legg til policy", - "edit_policy": "Rediger policy", - "delete_policy": "Slett policy", - "delete_confirm": "Er du sikker på at du vil slette denne policyen?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB-enhet", - "rule_type_file": "Filoperasjon", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Leverandør-ID (VID)", - "pid": "Produkt-ID (PID)", - "serial": "Serienummer", - "device_class": "Enhetsklasse", - "drive_type": "Drive Type", - "file_extensions": "Filutvidelser", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Fil", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Ingen DLP-policyer er konfigurert", - "no_events": "Ingen DLP-hendelser registrert", - "stats": "Statistics", - "total_events": "Totale hendelser", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Fil hendelser", - "device_id": "Enhets-ID", - "policy_matched": "Retningslinjer samsvarer", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Totale retningslinjer", - "active_policies": "Aktive retningslinjer", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Retningslinjer", - "tab_events": "Events", - "search_policies": "Søkeretningslinjer...", - "create_policy": "Lag policy", - "policy_type": "Policytype", - "scope": "Scope", - "events_count": "Events", - "search_events": "Søk etter hendelser...", - "event_time": "Event Time", - "device": "Enhet", - "policy": "Politikk", - "detail": "Detail", - "scope_help": "Kommaseparerte enhets-IDer, eller la stå tomt for alle", - "scope_all": "Alle enheter", - "active": "Active", - "type_file_type": "Filtype", - "type_clipboard": "Utklippstavle", - "type_screen_share": "Skjermdeling", - "type_file_transfer": "Filoverføring", - "policy_desc": "Policybeskrivelse", - "type_usb": "USB" + "sessions": { + "device": "Enhet", + "operator": "Operatør", + "duration": "Varighet", + "phase": "Fase", + "amount": "Beløp" }, "reports": { - "title": "Reports", - "generate": "Generer rapport", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Enhetssammendrag", - "type_activity": "Aktivitetssammendrag", - "type_security": "Sikkerhetsrapport", - "type_tickets": "Billettrapport", - "type_network": "Nettverksrapport", - "type_inventory": "Inventarrapport", - "type_alerts": "Varslingsrapport", - "saved": "Lagrede rapporter", - "save_report": "Lagre rapport", - "delete_report": "Slett rapport", - "delete_confirm": "Er du sikker på at du vil slette denne lagrede rapporten?", - "no_saved": "Ingen lagrede rapporter", - "report_title": "Title", - "created_by": "Laget av", - "created_at": "Opprettet kl", - "filters": "Filters", - "date_from": "Fra", - "date_to": "Til", - "device_filter": "Enhets-ID", - "generated_at": "Generert kl", - "section": "Dataseksjonen", - "total_devices": "Totalt antall enheter", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Plattformdistribusjon", - "top_applications": "Toppapplikasjoner", - "total_active": "Total aktiv tid", - "total_idle": "Total inaktiv tid", - "dlp_stats": "DLP-statistikk", - "banned_devices": "Forbudte enheter", - "audit_logs": "Audit Logs", - "ticket_stats": "Billettstatistikk", - "category_distribution": "Kategoridistribusjon", - "priority_distribution": "Prioritetsfordeling", - "targets_status": "Målstatus", - "os_distribution": "OS-distribusjon", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Nylige varsler", - "tab_generate": "Generer rapport", - "tab_saved": "Lagrede rapporter", - "type_devices_desc": "Oversikt over alle enheter, plattformer og statuser", - "type_activity_desc": "Applikasjonsbruk og inaktiv tid sammendrag", - "type_security_desc": "Forby handlinger, DLP-hendelser og revisjonslogger", - "type_tickets_desc": "Billettstatistikk og SLA-ytelse", - "type_network_desc": "Nettverksovervåkingsmål og oppetidsdata", - "type_inventory_desc": "Oppsummering av maskinvare og programvare", - "type_alerts_desc": "Varselregler og utløst varslingshistorikk", - "report_name": "Report Name", - "format": "Format", - "save": "Lagre rapport", - "preview": "Preview", - "download": "Download", - "delete_saved": "Slett rapport", - "raw_json": "Raw JSON" + "session": "Økt", + "summary": "Sammendrag", + "date": "Dato" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Rediger leietaker", - "delete_tenant": "Slett leietaker", - "delete_confirm": "Er du sikker på at du vil slette denne leietakeren? Alle enhets- og brukertilordninger vil bli fjernet.", - "name": "Name", - "slug": "Slug", - "contact_name": "Kontaktnavn", - "contact_email": "Kontakt e-post", - "max_devices": "Maks enheter", - "max_devices_hint": "0 = ubegrenset", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Enheter", - "users": "Users", - "assign_device": "Tilordne enhet", - "assign_devices": "Tilordne enheter", - "remove_device": "Fjern enhet", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Ingen leietakere er konfigurert", - "no_devices": "Ingen enheter tilordnet denne leietakeren", - "no_users": "Ingen brukere er tilordnet denne leietakeren", - "stats": "Leietakerstatistikk", - "total_devices": "Totalt antall enheter", - "online_devices": "Online enheter", - "total_users": "Total Users", - "created_at": "Opprettet kl", - "updated_at": "Oppdatert kl", - "slug_exists": "Leiersnegl eksisterer allerede", - "total_tenants": "Totalt leietakere", - "active_tenants": "Aktive leietakere", - "search": "Søk etter leietakere...", - "create_tenant": "Opprett leietaker", - "detail": "Leietaker detalj", - "contact": "Contact", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Organisasjonskontrakter", + "new": "Tildel pakke", + "org": "Organisasjon", + "package": "Pakke", + "remaining": "Gjenstående minutter", + "status": "Status", + "actions": "Handlinger", + "suspend": "Suspender", + "activate": "Aktiver", + "select_org": "Velg organisasjon", + "select_package": "Velg pakke", + "no_orgs": "Ingen organisasjoner funnet", + "no_packages": "Opprett en pakke først" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Søk etter enhets-ID, vertsnavn eller IP...", - "no_registrations": "No registration requests", - "col_device_id": "Enhets-ID", - "col_hostname": "Vertsnavn", - "col_platform": "Plattform", - "col_ip": "IP-adresse", - "col_version": "Versjon", - "col_status": "Status", - "col_requested": "Forespurt", - "col_actions": "Handlinger", - "status_pending": "Venter", - "status_approved": "Godkjent", - "status_rejected": "Avvist", - "approve_btn": "Godkjenn", - "approve_confirm": "Er du sikker på at du vil godkjenne denne enheten? Den vil motta serverlegitimasjon og kan koble til automatisk.", - "approved_success": "Enhetsregistrering godkjent", - "reject_btn": "Avvis", - "reject_title": "Avvis registrering", - "reject_confirm": "Er du sikker på at du vil avvise denne registreringsforespørselen?", - "reject_reason": "Årsak (valgfritt)", - "reject_reason_placeholder": "Angi årsak til avvisning...", - "rejected_success": "Enhetsregistrering avvist", - "delete_confirm": "Er du sikker på at du vil slette denne registreringsposten?", - "deleted_success": "Registreringsposten slettet", - "enrollment_title": "Enhetsregistrering", - "enrollment_subtitle": "Ventende påmeldingsforespørsler fra BetterDesk desktop-klienter", - "enrollment_empty": "Ingen ventende påmeldingsforespørsler", - "enrollment_approve": "Godkjenn", - "enrollment_reject": "Avvis", - "enrollment_display_name": "Vist navn", - "enrollment_display_name_placeholder": "Skriv inn et navn for denne enheten...", - "enrollment_sync_mode": "Synkroniseringsmodus", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Enhetsregistrering godkjent", - "enrollment_rejected_success": "Enhetsregistrering avvist", - "approve_title": "Godkjenn enhet", - "field_name": "Enhetsnavn", - "field_name_placeholder": "Skriv inn et navn for denne enheten...", - "field_sync_mode": "Synkroniseringsmodus", - "sync_standard": "Standard — balansert synkronisering", - "sync_silent": "Stille — minimal telemetri", - "sync_turbo": "Turbo — aggressiv synkronisering", - "field_tags": "Tagger", - "field_tags_placeholder": "Kommaseparerte tagger (f.eks. kontor, bærbar)...", - "field_tags_existing": "Eksisterende tagger", - "field_tag_add_placeholder": "Legg til en ny tagg...", - "field_tag_add_btn": "Legg til", - "field_groups": "Enhetsgrupper", - "field_folder": "Mappe", - "field_folder_none": "Ingen mappe", - "reject_ban_option": "Blokker denne enheten", - "reject_ban_hint": "Enheten vil bli blokkert og kan ikke sende nye registreringsforespørsler.", - "banner_open_mode": "Registrering er åpen — nye RustDesk-klienter registreres uten operatørgodkjenning.", - "banner_locked_mode": "Registrering er låst — bare tokenbaserte enheter kan registrere seg.", - "enrollment_settings_link": "Registreringsinnstillinger" + "export": { + "csv": "Eksporter CSV", + "pdf": "Eksporter PDF", + "sessions_csv": "Eksporter økter CSV" }, - "backup": { - "title": "Sikkerhetskopi", - "desc": "Last ned en fullstendig sikkerhetskopi av konsollkonfigurasjonen, brukere, grupper og innstillinger. Go server peer-data er inkludert når BetterDesk-backend er aktiv.", - "restore_title": "Gjenopprett", - "restore_desc": "Last opp en tidligere nedlastet sikkerhetskopifil for å gjenopprette konsollkonfigurasjonen. Velg hvilke seksjoner som skal gjenopprettes nedenfor.", - "stat_users": "Brukere", - "stat_settings": "Innstillinger", - "stat_folders": "Mapper", - "stat_groups": "Grupper", - "stat_strategies": "Strategier", - "stat_backend": "Backend", - "download": "Last ned sikkerhetskopi", - "creating": "Oppretter sikkerhetskopi ...", - "download_success": "Sikkerhetskopien ble lastet ned", - "upload": "Last opp sikkerhetskopi", - "restore_confirm": "Er du sikker på at du vil gjenopprette fra denne sikkerhetskopien? Valgte seksjoner vil bli overskrevet.", - "restore_success": "Sikkerhetskopien ble gjenopprettet. Noen endringer kan kreve at siden lastes på nytt.", - "restored": "Gjenopprettet", - "skipped": "Hoppet over", - "backup_date": "Sikkerhetskopidato", - "opt_settings": "Konsollinnstillinger", - "opt_branding": "Merkevarebygging / tema", - "opt_folders": "Enhetsmapper", - "opt_groups": "Bruker- og enhetsgrupper", - "opt_addressbooks": "Adressebøker", - "opt_users": "Brukerkontoer", - "opt_users_warning": "Destruktiv: erstatter ALLE brukerkontoer med sikkerhetskopidata. Du kan være logget ut.", - "no_file": "Ingen sikkerhetskopifil er valgt", - "invalid_json": "Ugyldig sikkerhetskopifil: ugyldig JSON", - "invalid_format": "Ugyldig sikkerhetskopifil: ikke en BetterDesk sikkerhetskopi", - "stat_database": "Databasemotor", - "stat_keys": "Servernøkler inkludert", - "stat_env": "Miljøfil", - "stat_uploads": "Merkevarebyggingsfiler", - "restart_required": "Noen gjenopprettede komponenter (nøkler / .env / Go-database) krever omstart av tjenesten.", - "security_warning": "Denne sikkerhetskopien inneholder hemmeligheter. Oppbevar den sikkert og del den aldri.", - "restore_warning": "Gjenoppretting av hemmeligheter eller Go-serverdatabasen overskriver serveridentiteten og krever tjenesterestart.", - "opt_database": "Database (alle tabeller)", - "opt_database_hint": "Reimporterer alle konsoldata. Ingen omstart nødvendig.", - "opt_uploads": "Merkevarebyggingsfiler", - "opt_uploads_hint": "Logoer og opplastede bilder.", - "opt_secrets": "Servernøkler og hemmeligheter", - "opt_secrets_warning": "Overskriver Ed25519-serveridentitet, API-nøkkel og sesjonshemmelighet. Krever tjenesterestart.", - "opt_env": "Miljøfil (.env)", - "opt_env_warning": "Overskriver SESSION_SECRET, API-nøkkel, database-DSN, porter og TLS-innstillinger. Krever tjenesterestart.", - "opt_godb": "Go-serverdatabase", - "opt_godb_warning": "Overskriver Go-serverens SQLite-database (kun SQLite-backend). Krever tjenesterestart." + "report": { + "title": "Arbeidsrapport", + "subtitle": "Beskriv arbeidet utført under denne fjernøkten.", + "category": "Kategori", + "ticket_ref": "Saksreferanse", + "summary": "Utført arbeid", + "skip": "Hopp over nå", + "submit": "Send rapport", + "summary_required": "Sammendrag er påkrevd", + "saved": "Arbeidsrapport lagret" }, - "cdap": { - "device_detail": "CDAP-enhet", - "loading": "Laster inn...", - "loading_widgets": "Laster inn enhetswidgeter ...", - "load_error": "Kunne ikke laste inn enhetsdata", - "connected": "Tilkoblet", - "disconnected": "Frakoblet", - "device_offline_msg": "Enheten er for øyeblikket frakoblet. Widget-verdier kan være foreldede.", - "no_widgets": "Ingen widgets tilgjengelig", - "no_widgets_desc": "Denne enheten har ikke registrert et CDAP-manifest med widgetdefinisjoner.", - "command_log": "Kommandologg", - "clear_log": "Fjern logg", - "confirm_command": "Bekreft kommando", - "select_option": "Velg", - "cdap_status": "CDAP-status", - "cdap_enabled": "CDAP aktivert", - "cdap_disabled": "CDAP deaktivert", - "cdap_devices": "CDAP-enheter", - "cdap_connections": "Aktive tilkoblinger", - "send_command": "Send kommando", - "command_sent": "Kommandoen ble sendt", - "command_failed": "Kunne ikke sende kommandoen", - "devices_title": "CDAP-enheter", - "devices_subtitle": "Tilkoblede enheter via Custom Device Application Protocol", - "stat_connected": "Tilkoblet", - "stat_port": "Port", - "search_devices": "Søk etter enheter...", - "no_devices": "Ingen enheter tilkoblet", - "no_devices_desc": "Ingen CDAP-enheter er koblet til. Enheter vises her når de kobles til gatewayen.", - "gateway_disabled": "CDAP Gateway deaktivert", - "gateway_disabled_desc": "Aktiver CDAP-gatewayen ved å sette CDAP_ENABLED=true i serverkonfigurasjonen.", - "gateway_active": "Aktiv", - "toggle_enable": "Aktiver CDAP", - "toggle_disable": "Deaktiver CDAP", - "enabled_restart": "CDAP aktivert. Server omstart kreves for å bruke endringer.", - "disabled_restart": "CDAP deaktivert. Server omstart kreves for å bruke endringer.", - "widgets": "CDAP-kontrollfelt", - "type_all": "Alle", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-agent", - "type_network": "Nettverk", - "type_camera": "Kamera", - "type_custom": "Egendefinert", - "active_alerts": "Aktive varsler", - "alert_fired": "Varsel utløst", - "alert_cleared": "Alarm fjernet", - "no_alerts": "Ingen aktive varsler", - "connect_terminal": "Koble til terminal", - "table_search": "Søk...", - "just_now": "Akkurat nå", - "terminal_connecting": "Kobler til enheten ...", - "terminal_disconnected": "Frakoblet", - "terminal_error": "Terminaltilkobling mislyktes", - "linked_devices": "Koblede enheter", - "link_device": "Koble enhet", - "unlink_device": "Koble fra", - "no_linked_devices": "Ingen koblede enheter", - "unlink_confirm": "Er du sikker på at du vil koble fra denne enheten?", - "link_prompt": "Skriv inn Peer ID for å koble til denne enheten:", - "connect_desktop": "Koble til skrivebordet", - "connect_video": "Koble til Stream", - "connect_files": "Bla gjennom filer", - "connect_audio": "Koble til lyd", - "upload_file": "Last opp", - "desktop_connecting": "Kobler til...", - "video_connecting": "Kobler til...", - "files_connecting": "Kobler til...", - "audio_connecting": "Kobler til...", - "audio_streaming": "Strømmer", - "clipboard_in": "Utklippstavle mottatt", - "clipboard_out": "Utklippstavlen er sendt", - "monitor_select": "Velg Monitor", - "keyframe_request": "Be om nøkkelbilde", - "quality_auto": "Autokvalitet" + "empty": { + "packages": "Ingen pakker ennå. Opprett en med knappen over.", + "contracts": "Ingen organisasjonskontrakter ennå. Tildel en pakke til en organisasjon.", + "sessions": "Ingen fakturerbare økter registrert ennå.", + "reports": "Ingen arbeidsrapporter sendt inn ennå." }, - "desktop": { - "switch_mode": "Skrivebordsmodus", - "console_mode": "Konsollmodus", - "loading": "Laster inn...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Lukk", - "widgets_mode": "Kontrollfeltmodus", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Legg til widget", - "remove_widget": "Fjern widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurer", - "search_widgets": "Søk i widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Enheter", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Skriv notater her...", - "search_placeholder": "Søk etter enheter, sider, innstillinger...", - "search_pages": "Pages", - "search_devices": "Enheter", - "search_no_results": "No results", - "exit_desktop": "Avslutt skrivebordsmodus", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Enhetsstatus", - "widget_server_health": "Serverinfo", - "widget_system_stats": "Enhetsmålere", - "widget_device_list": "Enhetsliste", - "widget_quick_actions": "Raske handlinger", - "widget_recent_activity": "Nylig aktivitet", - "widget_notes": "Notes", - "widget_network_monitor": "Nettverksmonitor", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP-enheter", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Enhetsrutenett", - "widget_multi_gauge": "Servermålere", - "widget_weekly_chart": "Ukentlig aktivitet", - "widget_quick_controls": "Raske kontroller", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Tilkoblingsstatistikk", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Brukerøkter", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Ingen enheter", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Åpne", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Sett URL i konfig", - "label_server_uptime": "Serveroppetid", - "label_merged_info": "Slått sammen til serverinfo-widget", - "label_with_notes": "Med notater", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Totalt antall enheter", - "label_throughput": "Throughput", - "label_active_relays": "Aktive releer", - "label_total_relayed": "Totalt videresendt", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrer enheter...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Ingen CDAP-enheter", - "action_add_widget": "Legg til widget", - "label_merged_server_info": "Slått sammen til serverinfo-widget", - "wp_images": "Images", - "wp_colors": "Solide farger", - "wp_custom_color": "Egendefinert farge", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Bakgrunnsbilder er ikke installert på denne serveren.", - "wp_download_hint": "Plasser PNG-bilder i den offentlige/bakgrunnskatalogen/katalogen for å aktivere bakgrunnsvalg.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Prosessovervåker", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Databasestatistikk", - "widget_docker_containers": "Docker containere", - "widget_shell_command": "Shell-kommando", - "widget_device_map": "Enhetskart", - "widget_remote_connect": "Fjernkobling", - "label_no_online": "Ingen nettbaserte enheter", - "label_no_events": "Ingen arrangementer i dag", - "label_event_title": "Arrangementstittel:", - "label_no_data": "Ingen data tilgjengelig", - "label_download_speed": "Last ned Speed", - "label_latency": "Latency", - "label_server": "Serverinstans", - "label_run_test": "Run Test", - "label_testing": "Tester...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Ingen containere", - "label_docker_unavailable": "Docker ikke tilgjengelig", - "label_no_command": "Ingen kommando konfigurert", - "label_no_output": "Ingen utgang ennå", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Lagre forhåndsinnstilling", - "label_load_preset": "Load Preset", - "label_preset_name": "Forhåndsinnstilt navn:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automatisk ordning", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 kolonner (lik)", - "label_2col_wide": "2 kolonner (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget-gruppe", - "ungroup_widgets": "Fjern gruppering av widgeter", - "group_widgets": "Grupper valgte widgeter", - "snap_layouts": "Snap layouter", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Klikk øverst til venstre", - "snap_top_right": "Klikk øverst til høyre", - "snap_bottom_left": "Klikk nederst til venstre", - "snap_bottom_right": "Klikk nederst til høyre", - "aero_shake": "Rist for å minimere andre", - "zone_resize": "Dra kantlinjen for å endre størrelse på soner", - "zone_borders": "Dragbare sonegrenser", - "app_drawer": "Applications", - "search_apps": "Søk etter apper...", - "edit_shortcuts": "Rediger snarveier", - "widgets": "Kontrollfelt", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Tildel eksisterende pakke", + "submit": "Tildel" }, - "desktop_login": { - "click_to_sign_in": "Klikk hvor som helst eller trykk på en tast for å logge på", - "username_placeholder": "Brukernavn", - "password_placeholder": "Passord", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Tofaktorautentisering", - "totp_subtitle": "Skriv inn den 6-sifrede koden fra autentiseringsappen din", - "back_to_login": "Tilbake til innlogging", - "fill_all_fields": "Vennligst fyll ut alle feltene", - "invalid_credentials": "Ugyldig brukernavn eller passord", - "invalid_code": "Ugyldig bekreftelseskode", - "enter_6_digits": "Skriv inn alle 6 sifrene", - "network_error": "Network error — check your connection", - "session_expired": "Økten er utløpt. Logg på igjen." - }, - "tokens": { - "title": "Enhetstokens", - "subtitle": "Administrer registreringstokener for automatisert enhetsklargjøring", - "enrollment_mode": "Påmeldingsmodus", - "mode_open": "Åpne", - "mode_open_desc": "Enhver enhet kan registreres uten token", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Totalt tokens", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Søk etter tokens...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Bulk generer", - "create": "Opprett token", - "edit": "Rediger token", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Opprettet", - "actions": "Actions", - "name_placeholder": "f.eks. Office PC-batch", - "max_uses": "Max Uses", - "max_uses_hint": "0 = ubegrenset", - "expires_in": "Expires In", - "no_expiration": "Ingen utløp", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Valgfri merknad om dette tokenet...", - "count": "Count", - "count_range": "Antall tokens som skal genereres (1–100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token opprettet", - "tokens_generated": "Tokens generert", - "copy_warning": "Kopier tokenet nå. Den vil ikke vises igjen.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Er du sikker på at du vil tilbakekalle dette tokenet? Enheter som allerede er registrert med den vil ikke bli påvirket.", - "revoked_success": "Tokenet ble tilbakekalt", - "no_tokens": "Ingen tokens funnet", - "expired": "Expired", - "never": "Never", - "save": "Lagre", - "cancel": "Avbryt", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Neste", - "prev": "Previous", - "skip": "Skip", - "finish": "Fullfør", - "close": "Lukk", - "step_of": "{current} av {total}", - "console_sidebar_title": "Navigasjonssidepanel", - "console_sidebar_text": "Få tilgang til alle moduler herfra. Klikk på et hvilket som helst ikon for å navigere til den delen. Sidepanelet tilpasser seg skjermstørrelsen din.", - "console_expand_title": "Utvid sidepanelet", - "console_expand_text": "Klikk her for å utvide sidefeltet og se fullstendige etiketter for alle navigasjonselementer. Klikk igjen for å skjule.", - "console_search_title": "Hurtigsøk", - "console_search_text": "Søk raskt etter enheter, innstillinger eller handlinger. Trykk Ctrl+K for hurtigtast.", - "console_dashboard_title": "Dashbord", - "console_dashboard_text": "Din sentrale hub som viser serverstatus, elektroniske enheter og raske handlinger. Hold øye med viktige beregninger på et øyeblikk.", - "console_devices_title": "Enhetsadministrasjon", - "console_devices_text": "Se, søk og administrer alle tilkoblede enheter. Filtrer etter status, tilordne tagger og konfigurer individuelle enhetsinnstillinger.", - "console_settings_title": "Innstillinger", - "console_settings_text": "Konfigurer serveratferd, sikkerhetsalternativer, merkevarebygging og brukeradministrasjon. Tilpass BetterDesk for å passe dine behov.", - "console_desktop_title": "Skrivebordsmodus", - "console_desktop_text": "Bytt til skrivebordsmodus for et arbeidsområde med vinduer med widgets. Perfekt for multi-tasking og overvåking av dashboards.", - "console_complete_title": "Du er klar!", - "console_complete_text": "Utforsk sidefeltkategoriene for å oppdage alle funksjonene. Klikk på hjelpeikonet når som helst for å starte denne veiledningen på nytt.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Den øverste linjen viser klokken, hurtigkontroller og tilgang til appskuffen. Klikk på rutenettikonet for å bla gjennom alle appene.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Åpne appskuffen for å søke og starte en hvilken som helst konsollfunksjon som et flytende vindu. Apper er organisert etter kategori.", - "desktop_widgets_title": "Kontrollfelt", - "desktop_widgets_text": "Ditt tilpassbare arbeidsområde. Widgets viser live informasjon og gir rask tilgang til funksjoner. Dra for å omorganisere.", - "desktop_add_widget_title": "Legg til widgeter", - "desktop_add_widget_text": "Klikk her for å bla gjennom tilgjengelige widgets. Velg mellom overvåkingsskjermer, enhetslister, notater og mer.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Åpne apper vises her. Klikk for å fokusere eller minimere vinduer. Hold markøren over ikonene for å se appetiketter.", - "desktop_snap_title": "Snap layouter", - "desktop_snap_text": "Dra vinduer til skjermkantene for å feste dem på plass, eller hold musepekeren på maksimeringsknappen for forhåndsinnstillinger for layout. Prøv Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Apper åpnes i trekkbare vinduer som kan endre størrelsen. Minimer, maksimer eller lukk fra tittellinjen. Windows lag over widgets.", - "desktop_search_title": "Hurtigsøk", - "desktop_search_text": "Søk på tvers av enheter, sider og innstillinger. Trykk Ctrl+K hvor som helst for å åpne søket umiddelbart.", - "desktop_complete_title": "Skrivebordsmodus klar!", - "desktop_complete_text": "Prøv å åpne apper fra skuffen og ordne vinduer side ved side. Bruk forhåndsinnstillinger for widget for raske dashbordoppsett.", - "devices_folders_title": "Enhetsmapper", - "devices_folders_text": "Organiser enheter i mapper. Klikk på en mappe for å filtrere listen. Høyreklikk for å gi nytt navn eller slette.", - "devices_search_title": "Søk og filtrer", - "devices_search_text": "Søk etter ID, vertsnavn eller plattform. Bruk statuspillene til å vise bare online, offline eller alle enheter.", - "devices_table_title": "Enhetsliste", - "devices_table_text": "Klikk på en enhetsrad for detaljer. Bruk kebab-menyen til høyre for raske handlinger som koble til, redigere tagger eller slette.", - "devices_complete_title": "Klar for enhetsadministrasjon!", - "devices_complete_text": "Dra enheter mellom mapper for å organisere dem. Dobbeltklikk på en enhet for å åpne detaljpanelet.", - "settings_tabs_title": "Innstillinger Kategorier", - "settings_tabs_text": "Naviger mellom Generelt, Sikkerhet, Utseende og andre konfigurasjonsseksjoner.", - "settings_content_title": "Konfigurasjon", - "settings_content_text": "Hver seksjon inneholder spesifikke server- og konsollinnstillinger. Endringene lagres når du klikker på Lagre.", - "settings_complete_title": "Innstillinger Oversikt", - "settings_complete_text": "Sjekk sikkerhetsinnstillinger for 2FA, API-nøkler og brukeradministrasjon. Besøk Utseende for å tilpasse konsollutseendet.", - "help": "Hjelp og veiledninger", - "tour_console": "Konsoll omvisning", - "tour_desktop": "Omvisning i skrivebordsmodus", - "tour_devices": "Enhetsomvisning", - "tour_settings": "Innstillinger Omvisning", - "reset_all": "Tilbakestill alle opplæringsprogrammer", - "tour_remote": "Ekstern økttur", - "tour_organization": "Organisasjonsoppsett", - "tour_cdap": "CDAP Oversikt", - "tour_chat": "Grunnleggende om chat", - "remote_toolbar_title": "Ekstern verktøylinje", - "remote_toolbar_text": "Få tilgang til skjermkontroller, utklippstavlesynkronisering, spesialtaster og kvalitetsinnstillinger fra verktøylinjen. Bytt fullskjerm med F11.", - "remote_canvas_title": "Eksternt display", - "remote_canvas_text": "Dette er den eksterne skjermen. Klikk på innsiden for å begynne å kontrollere den eksterne enheten. Inndata fra mus og tastatur videresendes automatisk.", - "remote_clipboard_title": "Utklippstavlesynkronisering", - "remote_clipboard_text": "Kopier og lim inn tekst mellom datamaskinen og den eksterne enheten. Bruk Ctrl+C / Ctrl+V som normalt mens du fokuserer på den eksterne skjermen.", - "remote_complete_title": "Ekstern økt klar!", - "remote_complete_text": "Bruk verktøylinjeknappene for spesialtaster (Ctrl+Alt+Del, PrintScreen) og skjermbytte. Trykk Escape eller klikk Koble fra for å avslutte økten.", - "org_overview_title": "Organisasjoner", - "org_overview_text": "Organisasjoner lar deg gruppere brukere, enheter og retningslinjer. Hver organisasjon har sin egen admin, operatører og innstillinger.", - "org_create_title": "Opprett organisasjon", - "org_create_text": "Klikk her for å opprette en ny organisasjon. Oppgi et navn, slug og valgfri beskrivelse. Du vil være eieren av den nye organisasjonen.", - "org_members_title": "Administrer medlemmer", - "org_members_text": "Inviter brukere via e-post, tildel roller (admin, operatør, bruker) og administrer tilgang. Medlemmer kan se enheter som er tilordnet organisasjonen deres.", - "org_devices_title": "Tilordne enheter", - "org_devices_text": "Legg til enheter i organisasjonen. Enheter som tildeles her vil arve organisasjonens retningslinjer og være synlige for medlemmene.", - "org_policies_title": "Organisasjonspolitikk", - "org_policies_text": "Angi sikkerhetspolicyer som passordkrav, tidsavbrudd for økter, 2FA-håndhevelse og enhetsregistreringsregler for organisasjonen.", - "org_complete_title": "Organisasjonsoppsett fullført!", - "org_complete_text": "Inviter teamet ditt og tilordne enheter for å begynne å bruke organisasjonsbasert administrasjon. Retningslinjer gjelder automatisk for alle medlemmer.", - "cdap_devices_title": "CDAP-enheter", - "cdap_devices_text": "Se alle tilkoblede CDAP-enheter — IoT-sensorer, PLC-er, broer og egendefinerte agenter. Grønne indikatorer viser live-tilkoblinger.", - "cdap_widgets_title": "Widget-kontrollpanel", - "cdap_widgets_text": "Widgeter viser sanntidsdata fra enheter. Målere, brytere, LED-er, diagrammer — hver widgettype visualiserer en annen type data.", - "cdap_commands_title": "Send kommandoer", - "cdap_commands_text": "Interager med enheter ved å sende kommandoer. Kommandologgen lagrer historikken.", - "cdap_terminal_title": "Enhetsterminal", - "cdap_terminal_text": "Åpne en terminalsesjon til CDAP-agenter for avansert diagnostikk eller manuell konfigurasjon.", - "cdap_complete_title": "CDAP-oversikt fullført!", - "cdap_complete_text": "Utforsk enhetswidgeter, send kommandoer og bruk terminal eller filutforsker for dypere administrasjon.", - "chat_contacts_title": "Kontakter og grupper", - "chat_contacts_text": "Se kontaktene og chattegruppene dine. Klikk på en kontakt for å åpne en samtale. Grønne prikker indikerer nettbrukere.", - "chat_send_title": "Send meldinger", - "chat_send_text": "Skriv inn meldingen og trykk Enter for å sende. Meldinger er ende-til-ende-kryptert når begge parter støtter E2E.", - "chat_file_title": "Del filer", - "chat_file_text": "Klikk på vedleggsikonet for å dele filer. Filer er kryptert og kan være opptil 50 MB.", - "chat_complete_title": "Chat klar!", - "chat_complete_text": "Chat med operatører og sluttbrukere i sanntid. Lag grupper for teamkommunikasjon. Alle meldinger støtter lesebekreftelser.", - "disable_tutorials": "Deaktiver veiledninger", - "enable_tutorials": "Aktiver veiledninger" - }, - "help_request": { - "title": "Hjelpeforespørsler", - "subtitle": "Administrer innkommende hjelpeforespørsler fra skrivebordsklienter", - "new_request": "Ny hjelpeforespørsel", - "device": "Enhet", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Ingen forespørsler om hjelp", - "notification": "Hjelpeforespørsel mottatt fra", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisasjoner", - "create": "Opprett organisasjon", - "edit": "Rediger organisasjon", - "detail": "Organisasjonsdetaljer", - "name": "Name", - "slug": "Slug (URL-sikker)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Enheter", - "invitations": "Invitations", - "settings": "Innstillinger", - "add_user": "Add User", - "assign_device": "Tilordne enhet", - "create_invitation": "Lag invitasjon", - "delete_confirm": "Vil du slette denne organisasjonen? Dette vil fjerne alle tilknyttede brukere, enheter og innstillinger.", - "no_orgs": "Ingen organisasjoner ennå", - "no_orgs_hint": "Opprett din første organisasjon for å begynne å administrere enheter og brukere.", - "connection_policy": "Tilkoblingspolicy", - "allow_file_transfer": "Tillat filoverføring", - "allow_clipboard": "Tillat utklippstavle", - "max_session_duration": "Maks øktvarighet (min)", - "role_owner": "Owner", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Medlem", - "username": "Brukernavn", - "password": "Passord", - "display_name": "Vist navn", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Enhets-ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Tildelt bruker", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Ingen brukere i denne organisasjonen.", - "no_devices": "Ingen enheter tilordnet denne organisasjonen.", - "no_invitations": "Ingen invitasjoner.", - "user_added": "User added", - "user_removed": "Bruker fjernet", - "user_updated": "Brukerrolle oppdatert", - "device_assigned": "Enhet tildelt", - "device_unassigned": "Enheten er ikke tilordnet", - "invitation_created": "Invitasjon opprettet", - "settings_saved": "Innstillinger lagret", - "org_deleted": "Organisasjonen slettet", - "confirm_remove_user": "Vil du fjerne denne brukeren fra organisasjonen?", - "confirm_unassign_device": "Vil du fjerne tilordningen av denne enheten fra organisasjonen?", - "confirm_delete_org": "Vil du slette denne organisasjonen og alle tilknyttede data?", - "edit_role": "Rediger rolle", - "raw_settings": "Raw-innstillinger", - "key": "Key", - "value": "Value", - "save": "Lagre innstillinger", - "policy_unattended": "Ubetjent (umiddelbar)", - "policy_attended": "Deltok (med bekreftelse)", - "policy_ask": "Always ask", - "expires_hours": "Utløp (timer)", - "loading_failed": "Kunne ikke laste inn organisasjonsdata", - "name_slug_required": "Navn og snegl er påkrevd", - "org_created": "Organisasjon opprettet", - "org_updated": "Organisasjonen oppdatert", - "create_new_user": "Opprett ny", - "add_existing_user": "Legg til eksisterende", - "none_available": "none", - "select_user": "Velg bruker", - "org_role": "Organisasjonsrolle", - "link_user_hint": "Den valgte brukeren vil bli koblet til denne organisasjonen ved å bruke deres serverkontolegitimasjon.", - "no_available_users": "Alle serverbrukere er allerede knyttet til denne organisasjonen.", - "user_linked": "Bruker knyttet til organisasjon" - }, - "chat": { - "e2e_enabled": "Ende-til-ende kryptert", - "e2e_establishing": "Etablerer sikker kanal...", - "e2e_established": "Sikker kanal etablert", - "e2e_unsupported": "E2E-kryptering støttes ikke i denne nettleseren", - "typing_indicator": "skriver...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Fil", - "file_too_large": "Filen er for stor (maks 50 MB)", - "file_encrypted": "Kryptert filoverføring", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Sikkerhetsnøkler rotert", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Grupper", - "no_contacts": "Ingen kontakter ennå", - "no_groups": "Ingen grupper ennå", - "no_messages": "Ingen meldinger ennå", - "no_results": "Ingen resultater funnet", - "select_conversation": "Velg en samtale for å begynne å chatte", - "type_message": "Skriv inn en melding...", - "send": "Send melding", - "attach_file": "Legg ved fil", - "emoji": "Emoji", - "search_messages": "Søk etter meldinger", - "create_group": "Opprett gruppe", - "group_name": "Gruppenavn", - "group_members": "Medlemmer", - "cancel": "Avbryt", - "create": "Opprett", - "members": "medlemmer", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Søk i kontakter og meldinger", - "select_conversation_hint": "Velg en samtale for å se meldinger", - "info": "Info", - "group_name_placeholder": "Skriv inn gruppenavn" - }, - "toast": { - "device_connected": "Enhet tilkoblet", - "device_disconnected": "Enheten er frakoblet", - "session_started": "Ekstern økt startet", - "session_ended": "Ekstern økt ble avsluttet", - "file_upload_complete": "Filopplasting fullført", - "settings_saved": "Innstillinger lagret", - "error_generic": "Det oppsto en feil", - "connection_lost": "Forbindelsen mistet", - "reconnecting": "Kobler på nytt ..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Administrasjonsverktøy og diagnoseverktøy", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Send forespørsel", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Skriv inn tekst...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Gå til server", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Sjekk vertens tilgjengelighet og ventetid", - "tcp_title": "TCP Portkontroll", - "tcp_desc": "Test TCP-porttilkoblingen", - "ssl_title": "SSL-inspektør", - "ssl_desc": "Inspiser SSL/TLS-sertifikatdetaljer", - "http_title": "HTTP Helsesjekk", - "http_desc": "Bekreft HTTP endepunktstatus", - "dns_title": "DNS Lookup", - "dns_desc": "Bestem vertsnavn til IP-adresse", - "whois_title": "DNS Records", - "whois_desc": "Spørring A, AAAA, MX, TXT, NS-poster", - "speed_title": "Speed Test", - "speed_desc": "Mål nedlastingsbåndbredde", - "run_speed_test": "Kjør hastighetstest", - "wol_title": "Wake-on-LAN", - "wol_desc": "Send magisk pakke for å vekke en enhet", - "wol_sent": "Magisk pakke sendt", - "hash_title": "Hashberegner", - "hash_desc": "Generer kryptografiske hasher", - "password_title": "Passordgenerator", - "password_desc": "Generer et sikkert tilfeldig passord", - "jwt_title": "JWT Decoder", - "jwt_desc": "Dekode og inspiser JSON Web Tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Kode eller dekode Base64-data", - "url_title": "URL Encoder", - "url_desc": "Kode eller dekode URL-komponenter", - "processes_title": "Prosessliste", - "processes_desc": "Se kjørende systemprosesser", - "disk_title": "Disk Usage", - "disk_desc": "Se diskpartisjonsbruk", - "db_title": "Databasestatistikk", - "db_desc": "Se databasetabellstatistikk", - "docker_title": "Docker containere", - "docker_desc": "Se kjørende Docker-beholdere", - "logs_title": "Log Viewer", - "logs_desc": "Se nylig loggutgang", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Gyldig fra", - "valid_to": "Gyldig til", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Ingen data tilgjengelig", - "no_docker": "Ingen Docker-beholdere funnet eller Docker ikke tilgjengelig", - "no_logs": "Ingen logglinjer tilgjengelig" - }, - "policies": { - "title": "Organisasjonspolitikk", - "subtitle": "Administrer sikkerhets-, tilkoblings- og funksjonspolicyer for organisasjonene dine", - "select_org": "Organisasjon", - "select_org_placeholder": "Velg en organisasjon...", - "select_org_first": "Velg en organisasjon for å se revisjonslogg for retningslinjer.", - "configured": "Konfigurert", - "connection_title": "Tilkoblingspolicy", - "connection_desc": "Kontroller hvordan eksterne økter opprettes", - "connection_mode": "Tilkoblingsmodus", - "mode_attended": "Deltok (krever brukergodkjenning)", - "mode_unattended": "Ubetjent (tillat alltid)", - "mode_ask": "Spør alltid", - "max_session": "Maks øktvarighet (minutter)", - "idle_lock": "Tidsavbrudd for tomgangslås (minutter)", - "wallpaper_policy": "Bakgrunn under økten", - "wallpaper_show": "Vis", - "wallpaper_hide_session": "Skjul under økten", - "wallpaper_hide_always": "Skjul alltid", - "features_title": "Funksjonspolicy", - "features_desc": "Aktiver eller deaktiver spesifikke funksjoner for enheter", - "allow_file_transfer": "Tillat filoverføring", - "allow_clipboard": "Tillat utklippstavlesynkronisering", - "allow_audio": "Tillat lydstreaming", - "allow_recording": "Tillat øktopptak", - "security_title": "Sikkerhetspolicy", - "security_desc": "Håndhev sikkerhetskrav for organisasjonsenheter", - "require_2fa": "Krev 2FA for uovervåket tilgang", - "password_min_length": "Minimum passordlengde", - "password_require_special": "Krever spesialtegn", - "password_max_age": "Passord Maks alder (dager, 0=aldri)", - "allowed_operators": "Tillatte operatørroller (kommaseparert)", - "network_title": "Nettverkspolicy", - "network_desc": "Kontroller reléservere og direkte tilkoblinger", - "block_direct_p2p": "Blokker direkte P2P (kraftrelé)", - "allowed_relays": "Tillatte reléservere (én per linje)", - "ip_allowlist": "IP-tillatelsesliste (CIDR, én per linje)", - "update_title": "Oppdater policy", - "update_desc": "Kontroller automatiske oppdateringer og oppdateringskanaler", - "auto_update": "Aktiver automatisk oppdatering", - "update_channel": "Oppdater kanalen", - "audit_title": "Endringer i retningslinjene", - "audit_desc": "Nylig historikk for endring av politikk", - "no_audit": "Ingen policyendringer registrert.", - "save_success": "Retningslinjen ble lagret", - "save_failed": "Kunne ikke lagre policyen", - "load_failed": "Kunne ikke laste inn policyer", - "block_direct_p2p_hint": "Gjelder enheter i denne organisasjonen." - }, - "attestation": { - "title": "Enhetsattest", - "subtitle": "Overvåk enhetsidentitetsverifisering og maskinvarefingeravtrykk", - "verified": "Verified", - "pending": "Pending", - "failed": "Mislyktes", - "device_list": "Enhetsliste", - "device_list_desc": "Maskinvarefingeravtrykk og identitetsbekreftelsesstatus", - "col_device": "Enhets-ID", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Ingen attestasjonsposter funnet.", - "verify_success": "Enhet merket som bekreftet", - "verify_failed": "Kunne ikke bekrefte enheten", - "revoke_success": "Enhetsattest tilbakekalt", - "revoke_failed": "Kunne ikke tilbakekalle attestasjon" - }, - "fleet": { - "title": "Flåtestyring", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Arbeidsflytbygger", - "tab_compliance": "Compliance", - "res_title": "Ressurskartlegging", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Nettverksstasjon", - "res_type_dns": "DNS server", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Legg til ressurs", - "res_name": "Ressursnavn", - "res_type": "Type", - "res_address": "Adresse / sti", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organisasjon", - "res_scope_group": "Gruppe", - "res_scope_device": "Enhet", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Ingen ressurser funnet. Klikk \"Legg til ressurs\" for å opprette en.", - "res_confirm_delete": "Er du sikker på at du vil slette denne ressursen?", - "task_title": "Oppgaveplanlegger", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Mislyktes", - "task_search": "Search tasks…", - "task_create": "Opprett oppgave", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Oppdater", - "task_type_restart": "Start på nytt", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Enhets-ID-er eller gruppenavn, kommadelt", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Tidsplanverdi", - "task_script": "Skript / kommando", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Ingen oppgaver funnet. Klikk \"Opprett oppgave\" for å komme i gang.", - "task_confirm_delete": "Er du sikker på at du vil slette denne oppgaven?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Visuell arbeidsflytbygger", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Lagre", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Velg en node for å redigere egenskapene.", - "builder_node_trigger_manual": "Manuell utl��ser", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Hendelsesutløser", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Start Svc på nytt", - "builder_node_action_file_deploy": "Distribuer fil", - "builder_node_action_message": "Send melding", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Send varsel", - "builder_node_result_chain": "Kjede arbeidsflyt", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Navn på arbeidsflyt:", - "comp_title": "Programvareoverholdelse", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Enhet", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Kjøre automatisk utbedring på denne enheten?", - "comp_no_data": "Ingen samsvarsdata tilgjengelig. Kjør en skanning for å komme i gang.", - "save": "Lagre", - "cancel": "Avbryt", - "close": "Lukk", - "edit": "Rediger", - "delete": "Slett", - "actions": "Actions", - "all_orgs": "Alle organisasjoner", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Nettverksstasjon", - "type_dns": "DNS server", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Legg til ressurs", - "edit_resource": "Rediger ressurs", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adresse / sti", - "scope_org": "Organisasjon", - "scope_group": "Gruppe", - "scope_device": "Enhet", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Er du sikker på at du vil slette dette elementet?", - "all_statuses": "Alle statuser", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Mislyktes", - "search_tasks": "Search tasks�", - "create_task": "Opprett oppgave", - "edit_task": "Rediger oppgave", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Fildistribusjon", - "task_type_registry": "Registry", - "target_devices": "Målenheter", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Skript / kommando", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Laster", - "no_output": "Ingen utgang tilgjengelig", - "error_loading": "Feil ved innlasting av data", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuell utl��ser", - "node_schedule": "Schedule", - "node_event": "Hendelsesutløser", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Start Svc på nytt", - "node_file_deploy": "Distribuer fil", - "node_send_message": "Send melding", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Send varsel", - "node_chain": "Kjede arbeidsflyt", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Alle organisasjoner", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Enhet", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Kjøre automatisk utbedring på denne enheten?" - }, - "scaling": { - "title": "Skalering og reléstyring", - "tab_overview": "Oversikt", - "tab_relays": "Relay Nodes", - "tab_rules": "Oppdragsregler", - "tab_capacity": "Kapasitetsplanlegging", - "arch_title": "Nettverksarkitektur", - "arch_loading": "Laster inn arkitekturdiagram...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Totalt antall enheter", - "stat_active_sessions": "Aktive økter", - "stat_bandwidth": "Total båndbredde", - "relay_health": "Stafetthelse", - "no_relays": "Ingen relénoder konfigurert. Legg til din første relénode for å fordele belastningen.", - "relay_search": "Søk releer...", - "relay_add": "Legg til relénode", - "relay_edit": "Rediger relénode", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Enheter", - "col_sessions": "Økter", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Målrelé", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Aktivert", - "status_disabled": "Deaktivert", - "confirm_delete_relay": "Er du sikker på at du vil slette denne relénoden?", - "confirm_delete_rule": "Er du sikker på at du vil slette denne tildelingsregelen?", - "rules_hint": "Tilordningsregler bestemmer hvilken reléserver som håndterer bestemte enhetsgrupper. Regler vurderes etter prioritet (laveste først).", - "rule_add": "Add Rule", - "rule_edit": "Rediger regel", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Enhetsgruppe", - "match_tag": "Enhetsmerke", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Primær reservenode", - "fallback_nearest": "Nærmeste relé", - "relay_max_sessions": "Maks økter", - "relay_max_bandwidth": "Maks båndbredde (Mbps)", - "cap_tiers": "Kapasitetsnivåer", - "cap_loading": "Laster kapasitetsdata ...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Ingen anbefalinger tilgjengelig.", - "cap_planning": "Infrastrukturplanlegging", - "cap_config": "Konfigurasjon", - "cap_max_devices": "Maks enheter", - "cap_max_sessions": "Maks økter", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Enhetskapasitet", - "cap_tier_sessions": "Sesjonskapasitet", - "cap_tier_bandwidth": "Båndbredde kapasitet", - "cap_single_sqlite": "Enkel server (SQLite)", - "cap_single_pg": "Enkel server (PostgreSQL)", - "cap_master_3": "Master + 3 releer", - "cap_master_10": "Master + 10 reléer", - "rec_no_relays": "Ingen relénoder konfigurert. Vurder å legge til relénoder for bedre ytelse og redundans.", - "rec_devices_high": "Enhetsutnyttelsen er høy. Vurder å legge til flere relénoder for å fordele belastningen.", - "rec_sessions_high": "Øktkapasiteten nærmer seg grensen. Vurder å oppgradere reléinfrastruktur.", - "rec_cpu_high": "Noen relénoder rapporterer høy CPU-bruk. Vurder lastbalansering eller kapasitetsoppgraderinger.", - "rec_all_good": "Alle systemer som opererer innenfor normale parametere. Ingen handling kreves.", - "save": "Lagre", - "cancel": "Avbryt", - "edit": "Rediger", - "delete": "Slett", - "close": "Lukk", - "no_rules": "Ingen tildelingsregler.", - "relays_info_banner": "Denne listen er informativ. Reléserverne som faktisk brukes av klienter konfigureres via RELAISERER-miljøvariabelen på BetterDesk-serveren.", - "relay_name_address_required": "Navn og adresse er påkrevd.", - "relay_save_failed": "Kunne ikke lagre relénoden.", - "relay_delete_failed": "Kunne ikke slette relénoden.", - "relay_saved": "Relénoden er lagret.", - "relay_deleted": "Relé node slettet.", - "rule_name_value_required": "Regelnavn og samsvarsverdi er obligatorisk.", - "rule_save_failed": "Kunne ikke lagre regelen.", - "rule_delete_failed": "Kunne ikke slette regelen.", - "rule_saved": "Regelen er lagret.", - "rule_deleted": "Regel slettet." - }, - "cross_platform": { - "title": "Kompatibilitet på tvers av plattformer", - "tab_matrix": "Kompatibilitetsmatrise", - "tab_distribution": "Distribusjon", - "tab_protocols": "Protokoller", - "tab_limitations": "Begrensninger", - "matrix_hint": "Funksjonsstøttematrise på tvers av alle støttede plattformer. Grønn = full støtte, gul = delvis, grå = ikke tilgjengelig, blå = planlagt.", - "col_feature": "Funksjon", - "legend_full": "Full støtte", - "legend_partial": "Delvis støtte", - "legend_none": "Ikke tilgjengelig", - "legend_planned": "Planlagt", - "platform_breakdown": "Plattformsammenbrudd", - "arch_breakdown": "Arkitektur sammenbrudd", - "version_breakdown": "Versjonssammenbrudd", - "summary": "Sammendrag", - "total_devices": "Totalt antall enheter", - "unique_platforms": "Plattformer", - "unique_archs": "Arkitekturer", - "unique_versions": "Klientversjoner", - "no_devices": "Ingen enheter registrert ennå.", - "protocols_hint": "Protokollevneforhandling sikrer at hver klient kun mottar funksjonene den støtter. Serveren tilpasser atferd basert på rapporterte evner.", - "capability_negotiation": "Evneforhandling", - "codec_support": "Kodekstøtte (online enheter)", - "feature_support": "Funksjonsstøtte (online enheter)", - "no_codec_data": "Ingen kodekdata tilgjengelig fra nettbaserte enheter.", - "no_feature_data": "Ingen funksjonsdata tilgjengelig fra nettbaserte enheter.", - "protobuf_schema": "Protokollbufferskjema", - "diagram_client": "Klient", - "diagram_server": "BetterDesk server", - "diagram_peer": "Ekstern Peer", - "limitations_hint": "Hver plattform har spesifikke begrensninger som påvirker tilgjengelige funksjoner. Gå gjennom disse begrensningene når du planlegger distribusjoner.", - "feat_desktop_client": "Desktop-klient", - "feat_background_agent": "Bakgrunnsagent", - "feat_remote_target": "Eksternt mål", - "feat_screen_capture": "Skjermfangst", - "feat_input_injection": "Inngang Injeksjon", - "feat_file_transfer": "Filoverføring", - "feat_clipboard_sync": "Utklippstavlesynkronisering", - "feat_audio_streaming": "Lydstrømming", - "feat_chat": "Chat", - "feat_h264": "H.264 codec", - "feat_vp9": "VP9 codec", - "feat_av1": "AV1 codec", - "feat_cdap_agent": "CDAP-agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Nettleser", - "platform_chromeos": "ChromeOS", - "status_production": "Produksjon", - "status_testing": "Testing", - "status_planned": "Planlagt", - "status_limited": "Begrenset", - "status_experimental": "Eksperimentell", - "limit_win_uac": "UAC-høyde kreves for serviceinstallasjon og inngangsinjeksjon på sikre stasjonære datamaskiner.", - "limit_win_service": "Kjører som NSSM-tjeneste; krever administratorrettigheter for installasjon.", - "limit_win_firewall": "Windows Brannmurregler må tillate porter 21115-21119 for relétilkoblinger.", - "limit_linux_wayland": "Wayland-komponister begrenser programmatisk skjermfangst; PipeWire-portal API kreves.", - "limit_linux_pipewire": "Lydopptak krever PipeWire; PulseAudio reserve tilgjengelig, men begrenset.", - "limit_linux_arm": "ARM64-bygg tilgjengelig; noen kodeker kan bruke programvaredekoding (langsommere).", - "limit_mac_screen": "Skjermopptakstillatelse kreves i Systemvalg > Personvern og sikkerhet.", - "limit_mac_signing": "Agent må være signert med Apple Developer ID for distribusjon.", - "limit_mac_notarize": "Notarisering kreves for macOS Gatekeeper (ikke-App Store-distribusjon).", - "limit_android_projection": "MediaProjection API krever brukersamtykke for hver skjermopptaksøkt.", - "limit_android_accessibility": "Input-injeksjon krever AccessibilityService; begrenset i Android 14+.", - "limit_android_battery": "Bakgrunnstjeneste begrenset av døsemodus; kan kreve unntak for batterioptimalisering.", - "limit_ios_capture": "Apple forbyr skjermopptak i bakgrunnen; kun seermodus støttes.", - "limit_ios_input": "Ingen input-injeksjon tillatt; bare ekstern visning og chat.", - "limit_ios_appstore": "Distribusjon kun via App Store; TestFlight for betatesting.", - "limit_web_https": "WebCodecs API og WebRTC krever HTTPS; HTTP faller tilbake til JMuxer (begrenset kodeker).", - "limit_web_codec": "Støtte for kodek avhenger av nettleseren; H.264 støttes bredt, VP9/AV1 varierer.", - "limit_web_performance": "Ytelse begrenset av nettlesers sandkasse; ingen direkte maskinvareakselerasjon.", - "limit_chrome_crostini": "Full agentstøtte kun inne i Crostini Linux-beholderen.", - "limit_chrome_pwa": "PWA-modus gir bare webfunksjoner; ingen native agent evner.", - "limit_chrome_input": "Inngangsinjeksjon støttes ikke utenfor Crostini-beholderen.", - "feat_session_recording": "Sesjonsopptak", - "feat_multi_monitor": "Flere skjermer", - "feat_unattended_access": "Ubevoktet tilgang", - "limit_win_virtual_account": "Tjenestee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Tjenestee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Sikkerhetsrevisjon", - "tab_overview": "Oversikt", - "tab_events": "Revisjonshendelser", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Sikkerhetsscore", - "failed_logins": "Mislykkede pålogginger (24 timer)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Gamle taster (>90d)", - "security_checks": "Sikkerhetssjekker", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Sikker", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "all_events": "All Events", - "event_login_failed": "Innlogging mislyktes", - "event_login_success": "Innlogging vellykket", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfigurasjon endret", - "event_key_created": "Nøkkel opprettet", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Ingen revisjonshendelser funnet.", - "hardening_hint": "Sikkerhetsforsterkende prioriteter for BetterDesk-distribusjonen. Varene er sortert etter alvorlighetsgrad.", - "no_hardening": "Ingen herdeprodukter tilgjengelig.", - "vuln_hint": "Resultat av avhengighetssårbarhetsskanning. Kjør npm-revisjon regelmessig for å holde avhengigheter sikre.", - "no_vulns": "Ingen sårbarheter funnet. Dine avhengigheter er sikre." - }, - "languages": { - "title": "Språkhåndtering", - "total_languages": "Totalt språk", - "fully_translated": "Fullstendig oversatt", - "needs_review": "Trenger gjennomgang", - "reference_keys": "Referansenøkler", - "no_languages": "Finner ingen språkfiler.", - "badge_reference": "Reference", - "badge_review": "Trenger gjennomgang", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Visning mangler", - "fix_missing": "Fix Missing", - "missing_keys_for": "Mangler nøkler til", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "og {n} mer...", - "all_keys_present": "Alle nøkler er tilstede!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Manglende nøkler i {code} må oversettes manuelt.", - "no_fix_needed": "Ingen manglende nøkler å fikse." - }, - "resource_control": { - "title": "Ressurskontroll", - "tab_overview": "Oversikt", - "tab_usb": "USB Control", - "tab_optical": "Optiske stasjoner", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Ressurskvoter", - "compliance_by_category": "Samsvar etter kategori", - "device_compliance": "Enhetsoverholdelse", - "search_devices": "Søk etter enheter...", - "col_device": "Enhet", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Totalt antall enheter", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Samsvarsgrad", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurer", - "no_devices": "Ingen enheter funnet", - "usb_title": "USB Portkontroll", - "usb_hint": "Kontroller USB lagringsenhetstilgang for den valgte enheten eller standardpolicyen for hele organisasjonen.", - "usb_storage_policy": "USB Lagringspolicy", - "usb_whitelist": "Hvitelistede enheter (én per linje)", - "usb_whitelist_hint": "VID:PID (f.eks. 0781:5583)", - "usb_audit_log": "Logg USB enhetstilkoblinger", - "optical_title": "Optisk stasjonskontroll", - "optical_hint": "Kontroller tilgang til CD/DVD/Blu-ray-stasjoner for den valgte enheten.", - "optical_policy": "Politikk for optisk stasjon", - "optical_audit_log": "Logg tilgang til optisk stasjon", - "monitors_title": "Overvåke ledelse", - "monitors_hint": "Konfigurer skjerminnstillinger inkludert maksimalt antall, oppløsningshåndhevelse, lysstyrke og strømplaner.", - "monitors_max_count": "Maksimalt antall skjermer (0 = ubegrenset)", - "monitors_max_hint": "0 betyr ingen grense", - "monitors_resolution": "Maks oppløsning", - "monitors_brightness": "Lysstyrkegrense", - "monitors_power_schedule": "Strømplan", - "monitors_power_hint": "f.eks. av: 22:00-06:00", - "disks_title": "Disktilgangskontroll", - "disks_hint": "Konfigurer retningslinjer for disktilgang, inkludert skrivebeskyttet modus, håndheving av kryptering og partisjonssynlighet.", - "disks_readonly": "Tving skrivebeskyttet modus", - "disks_encryption": "Krev kryptering (BitLocker/LUKS)", - "disks_smart": "Aktiver S.M.A.R.T. overvåking", - "disks_hidden": "Skjulte partisjoner", - "disks_hidden_hint": "Kommaseparerte stasjonsbokstaver eller monteringspunkter", - "quotas_title": "Ressurskvoter", - "quotas_hint": "Angi CPU-, RAM-, båndbredde- og diskkvoter per bruker for den valgte enheten.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Båndbreddegrense (Mbps)", - "quotas_bandwidth_hint": "0 = ubegrenset", - "quotas_disk_quota": "Diskkvote (GB)", - "quotas_disk_hint": "0 = ubegrenset", - "quotas_process_whitelist": "Hviteliste for prosess (én per linje)", - "quotas_process_hint": "f.eks. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Bare hviteliste", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Programvareoppdateringer", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Installert versjon", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Se etter oppdateringer", - "checking": "Checking…", - "up_to_date": "Oppdatert", - "update_available": "Oppdatering tilgjengelig", - "changelog": "Release Notes", - "no_changelog": "Ingen versjonsnotater tilgjengelig", - "files_changed": "Filene endret", - "files": "filer", - "changes_unavailable": "Kunne ikke laste filendringslisten. Du kan fortsatt installere oppdateringen.", - "create_backup": "Lag sikkerhetskopi før oppdatering", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installerer oppdatering …", - "creating_backup": "Oppretter sikkerhetskopi …", - "downloading": "Laster ned filer …", - "install_success": "Oppdateringen ble installert. Konsollen starter på nytt...", - "install_failed": "Oppdateringsinstallasjonen mislyktes", - "restarting": "Venter på at konsollen skal starte på nytt …", - "restart_complete": "Konsollen ble startet på nytt", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Ingen oppdateringsversjon er valgt. Se etter oppdateringer først.", - "backups_title": "Oppdater sikkerhetskopier", - "backups_desc": "Forhåndsoppdatering sikkerhetskopier opprettet automatisk før hver oppdatering", - "no_backups": "Ingen oppdateringssikkerhetskopier funnet", - "restore": "Restore", - "restore_confirm": "Er du sikker på at du vil gjenopprette fra denne sikkerhetskopien? Endrede filer vil bli overskrevet.", - "restore_success": "Sikkerhetskopien ble gjenopprettet. Konsollen starter på nytt...", - "baseline_set": "Grunnlinjesett", - "commits_behind": "forplikter seg bak", - "total_files": "Totalt antall filer", - "applied": "Applied", - "failed": "Mislyktes", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Gå til server", - "component_agent": "Agent", - "component_scripts": "Skript og Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Sjekker Go...", - "go_not_found": "Gå ikke installert", - "go_check_failed": "Kunne ikke sjekke Go-tilgjengelighet", - "server_building": "Kompilerer Go server... Dette kan ta noen minutter.", - "server_built": "Server binær kompilert", - "server_build_failed": "Serverkompilering mislyktes", - "server_stale_title": "Server binær utdatert", - "server_stale_desc": "Go server-kilden ble oppdatert, men den kjørende binære filen ble ikke gjenoppbygd. Bygg den på nytt nå for å bruke sikkerhets- og bibliotekoppdateringer.", - "rebuild_server": "Gjenoppbygg server binær", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Server binær gjenoppbygd og startet på nytt", - "rebuild_server_failed": "Binær gjenoppbygging av tjener mislyktes", - "server_deployed": "Server binær distribuert", - "server_deploy_failed": "Serverdistribusjon mislyktes", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Laster ned serverkilde …", - "delete": "Slett", - "delete_confirm": "Vil du slette sikkerhetskopien {name} permanent? Dette kan ikke angres.", - "delete_success": "Sikkerhetskopien slettet", - "delete_failed": "Kunne ikke slette sikkerhetskopien", - "retention_label": "Behold N siste sikkerhetskopier", - "retention_hint": "Eldre sikkerhetskopier slettes automatisk etter hver oppdatering. Bruk 0 for å beholde alle sikkerhetskopier.", - "retention_saved": "Oppbevaringsinnstillingen er lagret", - "retention_invalid": "Oppbevaring må være et heltall mellom 0 og 1000", - "retention_required_for_prune": "Angi en oppbevaringsverdi større enn 0 først", - "prune_now": "Apply now", - "prune_confirm": "Beholde bare {n} siste sikkerhetskopier og slette resten?", - "prune_done": "Beskjærte {n} backup(er)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Oppdateringsmetode", - "strategy_download": "Last ned forhåndsbygd binær", - "strategy_compile": "Kompiler fra kilden", - "both_available": "Last ned og kompiler", - "download_available": "Last ned tilgjengelig", - "no_method": "Ingen oppdateringsmetode", - "no_release": "No release", - "available": "Tilgjengelig", - "server_downloading": "Laster ned server binær …", - "server_downloaded": "Server binær lastet ned", - "server_download_failed": "Server binær nedlasting mislyktes", - "server_download_note": "En forhåndsbygd binær vil bli lastet ned fra GitHub-utgivelser. Dette tar vanligvis mindre enn ett minutt.", - "install_go_hint": "Installer Go fra https://go.dev/dl/ for å aktivere kompilering, eller publiser en utgivelse med forhåndsbygde binærfiler", - "strategy_install_go": "Autoinstaller Go og kompiler", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Klar for automatisk gjenoppbygging", - "toolchain_ready": "Verktøykjede installert", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Laster ned Go-verktøykjeden …", - "toolchain_failed": "Installasjon av Go Toolchain mislyktes", - "modal_title": "Installerer oppdatering", - "modal_done_title": "Oppdatering fullført", - "modal_close": "Lukk", - "modal_reload_now": "Last inn konsollen på nytt", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsollfiler", - "phase_server": "Serverkomponent", - "phase_restart": "Start på nytt", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Sikkerhetskopiering hoppet over (per brukervalg)", - "server_skipped": "Go server hoppet over", - "server_not_selected": "Go server not selected", - "server_processing": "Behandler Go server-oppdatering...", - "no_restart_needed": "Ingen omstart nødvendig", - "complete": "Oppdatering tatt i bruk", - "complete_summary": "Oppdateringen er tatt i bruk.", - "complete_with_errors": "Oppdateringen ble fullført, men noen trinn mislyktes. Se detaljer nedenfor.", - "modal_done_with_errors_title": "Oppdatering fullført med feil", - "console_will_restart": "Konsollprosessen starter på nytt nå...", - "restart_complete_msg": "Konsollen ble ferdig med å starte på nytt. Klikk på Last inn på nytt for å laste den nye versjonen. Siden lastes automatisk inn på nytt om 8 sekunder.", - "refresh_recommended": "Statiske eiendeler endret – last inn siden på nytt for å se det nye brukergrensesnittet.", - "confirm_title": "Bruk oppdatering", - "confirm_with_backup": "En forhåndsoppdatering opprettes automatisk.", - "confirm_no_backup": "Ingen sikkerhetskopi vil bli opprettet (fortsett på egen risiko)." - }, - "permissions": { - "title": "Tillatelser", - "subtitle": "Administrer rollebaserte tillatelser og tilpassede overstyringer", - "info_title": "Hvordan tillatelser fungerer", - "info_desc": "Hver rolle har standardtillatelser. Du kan legge til eller fjerne individuelle tillatelser per rolle ved å veksle mellom dem nedenfor. Egendefinerte overstyringer er uthevet og kan tilbakestilles til standardinnstillinger når som helst.", - "select_role": "Velg rolle", - "select_role_placeholder": "Velg en rolle...", - "reset_overrides": "Tilbakestill alle overstyringer", - "granted": "Innvilget", - "overrides": "Overstyringer", - "level": "Nivå", - "super_admin_tag": "Full tilgang", - "server_level_tag": "Server-nivå", - "custom": "Egendefinert", - "default": "Standard", - "revert": "Gå tilbake til standard", - "saved": "Tillatelsen er oppdatert", - "reverted": "Tilbakestilt til standard", - "all_reverted": "Alle overstyringer er tilbakestilt", - "confirm_reset": "Vil du tilbakestille alle egendefinerte overstyringer for denne rollen til standardinnstillingene?", - "empty_title": "Velg en rolle", - "empty_desc": "Velg en rolle fra rullegardinmenyen ovenfor for å se og administrere tillatelsene.", - "locked_title": "Superadministrator", - "locked_desc": "Super Admin har alle tillatelser som standard og kan ikke tilpasses.", - "cat_device": "Enheter", - "cat_user": "Brukere", - "cat_server": "Serversystem", - "cat_org": "Organisasjoner", - "cat_audit": "Revisjon og overvåking", - "cat_cdap": "CDAP", - "cat_enrollment": "Registrering", - "cat_chat": "Chat", - "cat_branding": "Merkevarebygging", - "perm_device_view": "Se enheter", - "perm_device_connect": "Koble til enheter", - "perm_device_edit": "Rediger enheter", - "perm_device_delete": "Slett enheter", - "perm_device_ban": "Forby/opphev forbud mot enheter", - "perm_device_change_id": "Endre enhets-ID", - "perm_user_view": "Se brukere", - "perm_user_create": "Opprett brukere", - "perm_user_edit": "Rediger brukere", - "perm_user_delete": "Slett brukere", - "perm_server_config": "Serverkonfigurasjon", - "perm_server_keys": "Administrer API-nøkler", - "perm_org_create": "Opprett organisasjoner", - "perm_org_edit": "Rediger organisasjoner", - "perm_org_delete": "Slett organisasjoner", - "perm_org_manage_users": "Administrer organisasjonsbrukere", - "perm_org_manage_devices": "Administrer organisasjonsenheter", - "perm_audit_view": "Se revisjonslogger", - "perm_metrics_view": "Se beregninger", - "perm_blocklist_edit": "Rediger blokkeringsliste", - "perm_cdap_view": "Se CDAP-enheter", - "perm_cdap_command": "Send CDAP-kommandoer", - "perm_cdap_terminal": "CDAP terminaltilgang", - "perm_cdap_files": "CDAP filtilgang", - "perm_enrollment_manage": "Administrer påmelding", - "perm_enrollment_approve": "Godkjenne påmelding", - "perm_chat_access": "Chat-tilgang", - "perm_branding_edit": "Rediger merkevarebygging", - "perm_server_attestation": "Serverytelsesattest" - }, - "notifications": { - "title": "Varsler", - "empty": "Ingen nye varsler", - "mark_all_read": "Merk alt som lest", - "see_all": "Se alle hjelpeforespørsler", - "help_request": "Hjelpeforespørsel", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Juster konsollen til dine syn, bevegelser og lesebehov.", - "close": "Lukk tilgjengelighetsmenyen", - "profiles": "Raske profiler", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Større tekst, sterk kontrast og fokus.", - "profile_dyslexia": "Lesekomfort", - "profile_dyslexia_hint": "Lesbar skrift og bredere mellomrom.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reduserer overganger og setter animasjon på pause.", - "profile_color_assist": "Fargestøtte", - "profile_color_assist_hint": "Fargefilter, etiketter og uthevede lenker.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Bokstavavstand", - "word_spacing": "Ordavstand", - "readable_font": "Lesbar skrift", - "readable_font_hint": "Bruker brede, kjente bokstavformer.", - "dyslexia_spacing": "Dysleksiavstand", - "dyslexia_spacing_hint": "Legger til ekstra mellomrom for lang tekst.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Mørk med høy kontrast", - "contrast_high_light": "Lys med høy kontrast", - "contrast_yellow_black": "Gult på svart", - "color_filter": "Fargesynsfilter", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Fargemetning", - "underline_links": "Understrek lenker", - "underline_links_hint": "Gjør koblinger synlige uten å stole på farger.", - "highlight_links": "Fremhev handlinger", - "highlight_links_hint": "Skisserer lenker og knapper.", - "highlight_headings": "Marker overskrifter", - "highlight_headings_hint": "Merker seksjonstitler med en fargelinje.", - "hide_media": "Dim media", - "hide_media_hint": "Demper bilder, videoer og lerreter.", - "interaction": "Interaction", - "strong_focus": "Sterkt fokus", - "strong_focus_hint": "Viser en stor tastaturfokusring.", - "large_cursor": "Stor markør", - "large_cursor_hint": "Bruker en større peker med høy kontrast.", - "reduce_motion": "Reduser bevegelse", - "reduce_motion_hint": "Forkorter overganger og jevn rulling.", - "pause_animations": "Sett animasjoner på pause", - "pause_animations_hint": "Slutter å sløyfe visuell bevegelse.", - "reading_guide": "Leseveiledning", - "reading_guide_hint": "Følger pekeren med en lys linje.", - "reading_mask": "Lesemaske", - "reading_mask_hint": "Demper innholdet over og under pekeren.", - "preview": "Preview", - "preview_title": "Forhåndsvisning av operatørens arbeidsområde", - "preview_text": "Sjekk om tekst, lenker, kontroller og statusetiketter er behagelige å lese før du lukker denne menyen.", - "preview_link": "Link for enhetsdetaljer", - "preview_status": "Online", - "preview_button": "Primær handling", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Serveradministrasjon", - "subtitle": "Cockpit-lignende kontrollplan for BetterDesk-konsollverten (BETA).", - "beta_tooltip": "Betafunksjon — under aktiv utvikling.", - "notice_title": "Betafunksjon", - "notice_body": "Disse verktøyene kjører på verten der BetterDesk-konsollprosessen lever. Alle operasjoner er revidert. Funksjonsomfanget vil utvides i fremtidige utgivelser.", - "tab_overview": "Oversikt", - "tab_terminal": "Terminal", - "tab_files": "Filer", - "tab_services": "Tjenester", - "cpu": "CPU", - "memory": "Minne", - "load": "Gjennomsnittlig belastning", - "disks": "Disker", - "history": "Historikk (siste 60 prøver)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Oppetid", - "no_disks": "Ingen diskdata tilgjengelig", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY tilgjengelig", - "term_connect": "Koble til", - "term_disconnect": "Koble fra", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Tilkoblingsfeil", - "term_warning": "Kommandoer kjøres som brukeren som eier konsollprosessen. Legg til en sudoers-regel for å aktivere elevasjon.", - "term_hint": "Tips: skriv `sudo -i` for å eskalere (krever sudoers-konfigurasjon).", - "term_lib_failed": "Kunne ikke laste inn terminalbiblioteket", - "files_up": "Opp ett nivå", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Tom katalog", - "files_error": "Kunne ikke vise katalogen", - "read_failed": "Kunne ikke lese filen", - "save_failed": "Kunne ikke lagre filen", - "rename_failed": "Endre navn mislyktes", - "delete_failed": "Sletting mislyktes", - "delete_confirm": "Vil du slette denne oppføringen?", - "mkdir_prompt": "Nytt mappenavn:", - "mkdir_failed": "Kunne ikke opprette mappe", - "file_saved": "Filen er lagret", - "binary_warn": "Binær fil — kun forhåndsvisning", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Søketjenester...", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Ingen tjenester funnet", - "svc_load_failed": "Kunne ikke laste inn tjenester", - "svc_action_failed": "Handlingen mislyktes", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Start på nytt", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Last ned BetterDesk Agent", - "choose_platform": "Velg din plattform", - "choose_platform_hint": "Velg installasjonsprogrammet som samsvarer med operativsystemet ditt.", - "download": "Last ned", - "building": "Bygger …", - "failed": "Bygg mislyktes", - "need_help": "Trenger du hjelp?", - "powered_by": "Drevet av" - }, - "server_attestation": { - "title": "Serverattest", - "subtitle": "Ytelsesreferanse som fastslår kapasitet for samtidige fjerntilkoblinger ved 80 % CPU-, RAM- og diskterskel.", - "warning_title": "Belastningstest", - "warning_body": "Referansen simulerer parallelle WebSocket-tilkoblinger til signal- og reléserverne. Kjør i lavsesong — denne testen belaster produksjonen.", - "run_benchmark": "Kjør referanse", - "abort": "Avbryt", - "download_report": "Last ned JSON-rapport", - "last_test": "Siste test", - "no_test_yet": "Ingen referanse er kjørt ennå", - "max_connections": "Maks. tilkoblinger", - "threshold_80": "80 % terskel — endelige målinger", - "disk": "Disk", - "ramp_chart": "Belastningsrampediagram", - "connections": "Tilkoblinger", - "connections_short": "tilk.", - "tier_guide_title": "Hva betyr hvert nivå?", - "tier_bronze": "BRONSE", - "tier_iron": "JERN", - "tier_titanium": "TITAN", - "tier_platinum": "PLATINA", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UVURDERT", - "tier_bronze_desc": "1–25 samtidige tilkoblinger — liten VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 tilkoblinger — mellomklasse-server (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 tilkoblinger — høyytelsesserver (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 tilkoblinger — bedriftsinfrastruktur (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ tilkoblinger — turboklass: dedikert maskinvare, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Merk: I Docker kan CPU/RAM-målinger gjenspeile containerbegrensninger snarere enn den fysiske verten.", - "badge_tooltip": "BetterDesk Serverattest — serverytelsessertifisering", - "confirm_run": "Denne referansen belastningstester serveren med simulerte tilkoblinger. Fortsett?", - "starting": "Starter...", - "complete": "Referanse fullført", - "signal_peers": "Signalpeers", - "relay_sessions": "Relésesjoner", - "page_error": "Kunne ikke laste Serverattest-siden", - "mode_estimated": "Estimert (WebSocket utilgjengelig)", - "incomplete": "Referanse fullført uten et gyldig nivå" + "form": { + "cancel": "Avbryt" } + } } diff --git a/web-nodejs/lang/nl.json b/web-nodejs/lang/nl.json index 4dab446e..7865d8ae 100644 --- a/web-nodejs/lang/nl.json +++ b/web-nodejs/lang/nl.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "nl", - "name": "Dutch", - "native_name": "Nederlands", - "direction": "ltr" + "meta": { + "lang": "nl", + "name": "Dutch", + "native_name": "Nederlands", + "direction": "ltr" + }, + "common": { + "loading": "Laden...", + "confirm": "Bevestigen", + "alert": "Waarschuwing", + "prompt": "Voer waarde in", + "copied": "Gekopieerd naar klembord", + "save": "Opslaan", + "saved": "Opgeslagen", + "error": "Fout", + "success": "Geslaagd", + "warning": "Waarschuwing", + "info": "Informatie", + "all": "Alle", + "cancel": "Annuleren", + "delete": "Verwijderen", + "actions": "Acties", + "close": "Sluiten", + "required": "Vereist", + "name_required": "Naam is vereist", + "active": "Actief", + "inactive": "Inactief", + "invalid_json": "Ongeldige JSON", + "field_required": "Het veld {field} is vereist", + "back": "Terug", + "edit": "Bewerken", + "yes": "Ja", + "no": "Nee" + }, + "nav": { + "main": "Hoofdmenu", + "tools": "Hulpmiddelen", + "system": "Systeem", + "dashboard": "Overzicht", + "devices": "Apparaten", + "keys": "Sleutels", + "generator": "Generator", + "settings": "Instellingen", + "users": "Gebruikers", + "inventory": "Inventaris", + "tickets": "Tickets", + "help_requests": "Hulpverzoeken", + "activity": "Activiteit", + "automation": "Automatisering", + "file_transfer": "Bestandsoverdracht", + "network": "Netwerk", + "dataguard": "DataGuard", + "reports": "Rapporten", + "tenants": "Organisaties", + "registrations": "Registraties", + "management": "Beheer", + "toggle_sidebar": "Zijbalk in-/uitschakelen", + "cdap": "CDAP Apparaten", + "fleet": "Vloot", + "scaling": "Schaling", + "cross_platform": "Platformonafhankelijk", + "tokens": "Toegangstokens", + "organizations": "Organisaties", + "policies": "Beleid", + "attestation": "Attestatie", + "remote": "Externe toegang", + "toolkit": "Toolkit", + "security_audit": "Beveiligingsaudit", + "languages": "Talen", + "resource_control": "Bronbeheer", + "chat": "Chat", + "help": "Hulp", + "expand_sidebar": "Zijbalk uitklappen", + "toggle_theme": "Thema wisselen", + "sdk_studio": "SDK Studio", + "login": "Inloggen", + "permissions": "Machtigingen", + "server_management": "Serverbeheer", + "server_attestation": "Serverattestering", + "commercialization": "Commercialisatie" + }, + "auth": { + "login": "Inloggen", + "logout": "Uitloggen", + "login_title": "Inloggen", + "login_subtitle": "Inloggen bij de BetterDesk-console", + "username": "Gebruikersnaam", + "username_placeholder": "Voer gebruikersnaam in", + "password": "Wachtwoord", + "password_placeholder": "Voer wachtwoord in", + "remember_me": "Onthoud mij", + "login_failed": "Inloggen mislukt. Controleer uw inloggegevens.", + "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord.", + "username_collision": "Er bestaat al een lokaal account met deze gebruikersnaam. Log in met uw lokale wachtwoord of vraag een beheerder om het conflicterende account te hernoemen of te verwijderen.", + "fill_all_fields": "Vul alle velden in", + "logout_confirm": "Weet u zeker dat u wilt uitloggen?", + "change_password": "Wachtwoord wijzigen", + "password_required": "Wachtwoord is vereist", + "totp_title": "Tweefactorauthenticatie", + "totp_subtitle": "Voer de 6-cijferige code in van uw authenticatie-app", + "totp_code": "Verificatiecode", + "totp_verify": "Verifiëren", + "totp_use_recovery": "Gebruik een herstelcode", + "totp_use_code": "Gebruik authenticatorcode", + "totp_recovery_code": "Herstelcode", + "totp_back_to_login": "Terug naar inloggen", + "totp_invalid_code": "Ongeldige verificatiecode. Probeer het opnieuw.", + "totp_enter_code": "Voer een 6-cijferige code in", + "totp_enter_recovery": "Voer een herstelcode in", + "totp_session_expired": "Sessie verlopen. Log opnieuw in.", + "totp_already_enabled": "Tweefactorauthenticatie is al ingeschakeld", + "pro_only_account": "Dit account is alleen voor de RustDesk-desktopclient. Gebruik de RustDesk-app om in te loggen.", + "passwords_mismatch": "Wachtwoorden komen niet overeen", + "or": "of", + "login_sso": "Aanmelden met SSO", + "login_sso_with": "Aanmelden met {{provider}}", + "oidc_denied": "Toegang is geweigerd door de identiteitsprovider.", + "oidc_invalid": "Ongeldige OIDC-callback. Probeer het opnieuw.", + "oidc_failed": "OIDC-authenticatie is mislukt. Probeer het opnieuw.", + "oidc_error": "Er is een fout opgetreden tijdens het aanmelden met SSO.", + "oidc_no_account": "Uw account is niet gevonden en automatische registratie is uitgeschakeld.", + "totp_rate_limited": "Te veel pogingen. Probeer het later opnieuw.", + "emergency_mode_banner": "Go-server onbereikbaar — noodmodus actief (alleen beheerder, beperkte functionaliteit)" + }, + "dashboard": { + "title": "Overzicht", + "subtitle": "Overzicht van uw RustDesk-server", + "total_devices": "Totaal apparaten", + "online_now": "Nu online", + "banned": "Verbannen", + "active_connections": "Actieve verbindingen", + "offline_devices": "Offline", + "server_status": "Serverstatus", + "quick_actions": "Snelle acties", + "manage_devices": "Beheer verbonden apparaten", + "view_keys": "Bekijk serversleutels", + "generate_config": "Genereer clientconfiguratie", + "server_settings": "Configureer instellingen", + "greeting_morning": "Goedemorgen, {name}", + "greeting_afternoon": "Goedemiddag, {name}", + "greeting_evening": "Goedenavond, {name}", + "greeting_night": "Goedenacht, {name}", + "health_overview": "Gezondheidsoverzicht", + "devices_online": "Online apparaten", + "active_alerts": "Actieve waarschuwingen", + "recent_connections": "Totaal aantal apparaten", + "server_uptime": "Server-uptime", + "activity_feed": "Recente activiteit", + "no_recent_activity": "Geen recente activiteit", + "just_now": "zojuist", + "ago": "geleden", + "tip_desktop_mode": "Probeer de Desktopmodus voor een werkruimte met meerdere vensters en monitoringwidgets.", + "tip_keyboard_shortcuts": "Druk overal op Ctrl+K om het opdrachtenpalet voor snel zoeken te openen.", + "tip_address_book": "Synchroniseer uw adresboek tussen apparaten door in te loggen vanuit de RustDesk-client.", + "tip_2fa": "Schakel tweefactorauthenticatie in de Instellingen in voor extra accountbeveiliging.", + "tip_bulk_actions": "Selecteer meerdere apparaten en gebruik bulkacties om ze tegelijk te beheren.", + "tip_theme": "Wissel tussen donkere en lichte thema's in de instellingen van de zijbalk.", + "tip_cdap": "Verbind IoT-apparaten en industriele sensoren via de CDAP-gateway.", + "tip_tutorials": "Klik op de helpknop rechtsonder voor interactieve handleidingen." + }, + "devices": { + "title": "Apparaten", + "id": "ID", + "hostname": "Hostnaam", + "username": "Gebruikersnaam", + "platform": "Platform", + "version": "Versie", + "ip_address": "IP-adres", + "note": "Notitie", + "last_seen": "Laatst gezien", + "last_online": "Laatst online", + "first_seen": "Eerst gezien", + "created": "Aangemaakt", + "status": "Status", + "ban_reason": "Reden van verbanning", + "actions": "Acties", + "search_placeholder": "Apparaten zoeken...", + "filter_all": "Alle", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Verbannen", + "selected": "geselecteerd", + "showing": "Weergave", + "of": "van", + "sync_status": "Synchronisatiestatus", + "sync_success": "Status succesvol gesynchroniseerd", + "empty_title": "Geen apparaten gevonden", + "empty_text": "Geen apparaten voldoen aan de huidige filters", + "edit_title": "Apparaatdetails", + "delete_title": "Apparaat verwijderen", + "delete_confirm": "Weet u zeker dat u apparaat {id} wilt verwijderen?", + "delete_warning": "U staat op het punt om dit apparaat permanent te verwijderen:", + "delete_permanent": "Deze actie kan niet ongedaan worden gemaakt. Alle gegevens die aan dit apparaat zijn gekoppeld, worden permanent uit de database verwijderd.", + "delete_success": "Apparaat succesvol verwijderd", + "revoke_option": "Apparaat intrekken", + "revoke_hint": "Blokkeer apparaat-ID en verbreek actieve verbindingen", + "revoke_success": "Apparaat succesvol ingetrokken", + "details": "Apparaatdetails", + "ban_title": "Apparaat verbannen", + "ban_confirm": "Weet u zeker dat u apparaat {id} wilt verbannen?", + "ban_success": "Apparaat succesvol verbannen", + "unban_title": "Verbanning opheffen", + "unban_confirm": "Weet u zeker dat u de verbanning van apparaat {id} wilt opheffen?", + "unban_success": "Verbanning succesvol opgeheven", + "change_id": "ID wijzigen", + "change_id_title": "Apparaat-ID wijzigen", + "new_id": "Nieuw ID", + "change_id_hint": "6-16 tekens, alleen letters, cijfers, koppeltekens en underscores", + "change_id_success": "Apparaat-ID succesvol gewijzigd", + "id_length_error": "ID moet 6-16 tekens lang zijn", + "id_format_error": "ID mag alleen letters, cijfers, koppeltekens en underscores bevatten", + "bulk_delete_title": "Meerdere apparaten verwijderen", + "bulk_delete_confirm": "Weet u zeker dat u {count} apparaten wilt verwijderen?", + "bulk_delete_success": "{count} apparaten succesvol verwijderd", + "columns": "Kolommen", + "toggle_columns": "Zichtbare kolommen in-/uitschakelen", + "not_found": "Apparaat niet gevonden", + "delete_failed": "Apparaat kon niet worden verwijderd", + "change_id_failed": "Apparaat-ID kon niet worden gewijzigd", + "invalid_id": "Ongeldige apparaat-ID", + "invalid_id_format": "Ongeldig ID-formaat", + "id_exists": "Deze apparaat-ID bestaat al", + "no_selection": "Geen apparaten geselecteerd", + "device_type": "Apparaattype", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Verbonden", + "revoke": "Intrekken", + "access_policy": "Toegangsbeleid", + "unattended_access": "Onbeheerde toegang", + "enable_unattended": "Onbeheerde toegang inschakelen", + "access_password": "Toegangswachtwoord", + "password_configured": "Wachtwoord geconfigureerd", + "no_password": "Geen wachtwoord ingesteld", + "new_password": "Nieuw wachtwoord", + "clear_password": "Wachtwoord wissen", + "access_schedule": "Toegangsschema", + "enable_schedule": "Schema inschakelen", + "allowed_days": "Toegestane dagen", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Toegestane operators", + "all_operators": "Alle operators", + "operators_hint": "Laat leeg om alle operators toegang te geven.", + "last_updated_by": "Laatst bijgewerkt door", + "access_policy_saved": "Toegangsbeleid opgeslagen", + "tabs": { + "overview": "Overzicht", + "hardware": "Hardware", + "metrics": "Metrieken", + "connections": "Verbindingen", + "audit": "Audit", + "info": "Info", + "history": "Geschiedenis" }, - "common": { - "loading": "Laden...", - "confirm": "Bevestigen", - "alert": "Waarschuwing", - "prompt": "Voer waarde in", - "copied": "Gekopieerd naar klembord", - "save": "Opslaan", - "saved": "Opgeslagen", - "error": "Fout", - "success": "Geslaagd", - "warning": "Waarschuwing", - "info": "Informatie", - "all": "Alle", - "cancel": "Annuleren", - "delete": "Verwijderen", - "actions": "Acties", - "close": "Sluiten", - "required": "Vereist", - "name_required": "Naam is vereist", - "active": "Actief", - "inactive": "Inactief", - "invalid_json": "Ongeldige JSON", - "field_required": "Het veld {field} is vereist", - "back": "Terug", - "edit": "Bewerken", - "yes": "Ja", - "no": "Nee" + "hardware": { + "cpu": "Processor", + "memory": "Geheugen", + "disk": "Schijf", + "os": "Besturingssysteem", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Gemiddelde belasting", + "network": "Netwerkadapters", + "no_data": "Geen hardwaregegevens beschikbaar", + "title": "Hardware-informatie", + "gpu": "Grafische kaart" }, - "nav": { - "main": "Hoofdmenu", - "tools": "Hulpmiddelen", - "system": "Systeem", - "dashboard": "Overzicht", - "devices": "Apparaten", - "keys": "Sleutels", - "generator": "Generator", - "settings": "Instellingen", - "users": "Gebruikers", - "inventory": "Inventaris", - "tickets": "Tickets", - "help_requests": "Hulpverzoeken", - "activity": "Activiteit", - "automation": "Automatisering", - "file_transfer": "Bestandsoverdracht", - "network": "Netwerk", - "dataguard": "DataGuard", - "reports": "Rapporten", - "tenants": "Organisaties", - "registrations": "Registraties", - "management": "Beheer", - "toggle_sidebar": "Zijbalk in-/uitschakelen", - "cdap": "CDAP Apparaten", - "fleet": "Vloot", - "scaling": "Schaling", - "cross_platform": "Platformonafhankelijk", - "tokens": "Toegangstokens", - "organizations": "Organisaties", - "policies": "Beleid", - "attestation": "Attestatie", - "remote": "Externe toegang", - "toolkit": "Toolkit", - "security_audit": "Beveiligingsaudit", - "languages": "Talen", - "resource_control": "Bronbeheer", - "chat": "Chat", - "help": "Hulp", - "expand_sidebar": "Zijbalk uitklappen", - "toggle_theme": "Thema wisselen", - "sdk_studio": "SDK Studio", - "login": "Inloggen", - "permissions": "Machtigingen", - "server_management": "Serverbeheer", - "server_attestation": "Serverattestering" - }, - "auth": { - "login": "Inloggen", - "logout": "Uitloggen", - "login_title": "Inloggen", - "login_subtitle": "Inloggen bij de BetterDesk-console", - "username": "Gebruikersnaam", - "username_placeholder": "Voer gebruikersnaam in", - "password": "Wachtwoord", - "password_placeholder": "Voer wachtwoord in", - "remember_me": "Onthoud mij", - "login_failed": "Inloggen mislukt. Controleer uw inloggegevens.", - "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord.", - "username_collision": "Er bestaat al een lokaal account met deze gebruikersnaam. Log in met uw lokale wachtwoord of vraag een beheerder om het conflicterende account te hernoemen of te verwijderen.", - "fill_all_fields": "Vul alle velden in", - "logout_confirm": "Weet u zeker dat u wilt uitloggen?", - "change_password": "Wachtwoord wijzigen", - "password_required": "Wachtwoord is vereist", - "totp_title": "Tweefactorauthenticatie", - "totp_subtitle": "Voer de 6-cijferige code in van uw authenticatie-app", - "totp_code": "Verificatiecode", - "totp_verify": "Verifiëren", - "totp_use_recovery": "Gebruik een herstelcode", - "totp_use_code": "Gebruik authenticatorcode", - "totp_recovery_code": "Herstelcode", - "totp_back_to_login": "Terug naar inloggen", - "totp_invalid_code": "Ongeldige verificatiecode. Probeer het opnieuw.", - "totp_enter_code": "Voer een 6-cijferige code in", - "totp_enter_recovery": "Voer een herstelcode in", - "totp_session_expired": "Sessie verlopen. Log opnieuw in.", - "totp_already_enabled": "Tweefactorauthenticatie is al ingeschakeld", - "pro_only_account": "Dit account is alleen voor de RustDesk-desktopclient. Gebruik de RustDesk-app om in te loggen.", - "passwords_mismatch": "Wachtwoorden komen niet overeen", - "or": "of", - "login_sso": "Aanmelden met SSO", - "login_sso_with": "Aanmelden met {{provider}}", - "oidc_denied": "Toegang is geweigerd door de identiteitsprovider.", - "oidc_invalid": "Ongeldige OIDC-callback. Probeer het opnieuw.", - "oidc_failed": "OIDC-authenticatie is mislukt. Probeer het opnieuw.", - "oidc_error": "Er is een fout opgetreden tijdens het aanmelden met SSO.", - "oidc_no_account": "Uw account is niet gevonden en automatische registratie is uitgeschakeld.", - "totp_rate_limited": "Te veel pogingen. Probeer het later opnieuw.", - "emergency_mode_banner": "Go-server onbereikbaar — noodmodus actief (alleen beheerder, beperkte functionaliteit)" - }, - "dashboard": { - "title": "Overzicht", - "subtitle": "Overzicht van uw RustDesk-server", - "total_devices": "Totaal apparaten", - "online_now": "Nu online", - "banned": "Verbannen", - "active_connections": "Actieve verbindingen", - "offline_devices": "Offline", - "server_status": "Serverstatus", - "quick_actions": "Snelle acties", - "manage_devices": "Beheer verbonden apparaten", - "view_keys": "Bekijk serversleutels", - "generate_config": "Genereer clientconfiguratie", - "server_settings": "Configureer instellingen", - "greeting_morning": "Goedemorgen, {name}", - "greeting_afternoon": "Goedemiddag, {name}", - "greeting_evening": "Goedenavond, {name}", - "greeting_night": "Goedenacht, {name}", - "health_overview": "Gezondheidsoverzicht", - "devices_online": "Online apparaten", - "active_alerts": "Actieve waarschuwingen", - "recent_connections": "Totaal aantal apparaten", - "server_uptime": "Server-uptime", - "activity_feed": "Recente activiteit", - "no_recent_activity": "Geen recente activiteit", - "just_now": "zojuist", - "ago": "geleden", - "tip_desktop_mode": "Probeer de Desktopmodus voor een werkruimte met meerdere vensters en monitoringwidgets.", - "tip_keyboard_shortcuts": "Druk overal op Ctrl+K om het opdrachtenpalet voor snel zoeken te openen.", - "tip_address_book": "Synchroniseer uw adresboek tussen apparaten door in te loggen vanuit de RustDesk-client.", - "tip_2fa": "Schakel tweefactorauthenticatie in de Instellingen in voor extra accountbeveiliging.", - "tip_bulk_actions": "Selecteer meerdere apparaten en gebruik bulkacties om ze tegelijk te beheren.", - "tip_theme": "Wissel tussen donkere en lichte thema's in de instellingen van de zijbalk.", - "tip_cdap": "Verbind IoT-apparaten en industriele sensoren via de CDAP-gateway.", - "tip_tutorials": "Klik op de helpknop rechtsonder voor interactieve handleidingen." - }, - "devices": { - "title": "Apparaten", - "id": "ID", - "hostname": "Hostnaam", - "username": "Gebruikersnaam", - "platform": "Platform", - "version": "Versie", - "ip_address": "IP-adres", - "note": "Notitie", - "last_seen": "Laatst gezien", - "last_online": "Laatst online", - "first_seen": "Eerst gezien", - "created": "Aangemaakt", - "status": "Status", - "ban_reason": "Reden van verbanning", - "actions": "Acties", - "search_placeholder": "Apparaten zoeken...", - "filter_all": "Alle", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Verbannen", - "selected": "geselecteerd", - "showing": "Weergave", - "of": "van", - "sync_status": "Synchronisatiestatus", - "sync_success": "Status succesvol gesynchroniseerd", - "empty_title": "Geen apparaten gevonden", - "empty_text": "Geen apparaten voldoen aan de huidige filters", - "edit_title": "Apparaatdetails", - "delete_title": "Apparaat verwijderen", - "delete_confirm": "Weet u zeker dat u apparaat {id} wilt verwijderen?", - "delete_warning": "U staat op het punt om dit apparaat permanent te verwijderen:", - "delete_permanent": "Deze actie kan niet ongedaan worden gemaakt. Alle gegevens die aan dit apparaat zijn gekoppeld, worden permanent uit de database verwijderd.", - "delete_success": "Apparaat succesvol verwijderd", - "revoke_option": "Apparaat intrekken", - "revoke_hint": "Blokkeer apparaat-ID en verbreek actieve verbindingen", - "revoke_success": "Apparaat succesvol ingetrokken", - "details": "Apparaatdetails", - "ban_title": "Apparaat verbannen", - "ban_confirm": "Weet u zeker dat u apparaat {id} wilt verbannen?", - "ban_success": "Apparaat succesvol verbannen", - "unban_title": "Verbanning opheffen", - "unban_confirm": "Weet u zeker dat u de verbanning van apparaat {id} wilt opheffen?", - "unban_success": "Verbanning succesvol opgeheven", - "change_id": "ID wijzigen", - "change_id_title": "Apparaat-ID wijzigen", - "new_id": "Nieuw ID", - "change_id_hint": "6-16 tekens, alleen letters, cijfers, koppeltekens en underscores", - "change_id_success": "Apparaat-ID succesvol gewijzigd", - "id_length_error": "ID moet 6-16 tekens lang zijn", - "id_format_error": "ID mag alleen letters, cijfers, koppeltekens en underscores bevatten", - "bulk_delete_title": "Meerdere apparaten verwijderen", - "bulk_delete_confirm": "Weet u zeker dat u {count} apparaten wilt verwijderen?", - "bulk_delete_success": "{count} apparaten succesvol verwijderd", - "columns": "Kolommen", - "toggle_columns": "Zichtbare kolommen in-/uitschakelen", - "not_found": "Apparaat niet gevonden", - "delete_failed": "Apparaat kon niet worden verwijderd", - "change_id_failed": "Apparaat-ID kon niet worden gewijzigd", - "invalid_id": "Ongeldige apparaat-ID", - "invalid_id_format": "Ongeldig ID-formaat", - "id_exists": "Deze apparaat-ID bestaat al", - "no_selection": "Geen apparaten geselecteerd", - "device_type": "Apparaattype", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Verbonden", - "revoke": "Intrekken", - "access_policy": "Toegangsbeleid", - "unattended_access": "Onbeheerde toegang", - "enable_unattended": "Onbeheerde toegang inschakelen", - "access_password": "Toegangswachtwoord", - "password_configured": "Wachtwoord geconfigureerd", - "no_password": "Geen wachtwoord ingesteld", - "new_password": "Nieuw wachtwoord", - "clear_password": "Wachtwoord wissen", - "access_schedule": "Toegangsschema", - "enable_schedule": "Schema inschakelen", - "allowed_days": "Toegestane dagen", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Toegestane operators", - "all_operators": "Alle operators", - "operators_hint": "Laat leeg om alle operators toegang te geven.", - "last_updated_by": "Laatst bijgewerkt door", - "access_policy_saved": "Toegangsbeleid opgeslagen", - "tabs": { - "overview": "Overzicht", - "hardware": "Hardware", - "metrics": "Metrieken", - "connections": "Verbindingen", - "audit": "Audit", - "info": "Info", - "history": "Geschiedenis" - }, - "hardware": { - "cpu": "Processor", - "memory": "Geheugen", - "disk": "Schijf", - "os": "Besturingssysteem", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Gemiddelde belasting", - "network": "Netwerkadapters", - "no_data": "Geen hardwaregegevens beschikbaar", - "title": "Hardware-informatie", - "gpu": "Grafische kaart" - }, - "display_name": "Weergavenaam", - "display_name_placeholder": "Voer een weergavenaam in...", - "note_placeholder": "Voer een notitie in...", - "tags": "Tags", - "filter_by_tags": "Filteren op tags", - "no_tags": "No tags", - "all_groups": "Alle groepen", - "create_group": "Groep maken", - "manage_groups": "Groepen beheren", - "group_name": "Groepsnaam", - "group_name_placeholder": "bijv. mediapc’s", - "dynamic_group": "Dynamische groep op tag", - "dynamic_group_hint": "Apparaten met deze tag worden automatisch toegevoegd.", - "tag_filter": "Tag filter", - "group_allowed_users": "Toegestane gebruikers", - "group_allowed_users_hint": "Laat leeg om de groep zichtbaar te houden voor iedereen met apparaatmachtigingen.", - "group_tag_required": "Tagfilter is verplicht voor dynamische groepen", - "group_invalid": "Ongeldige groeps-ID", - "group_not_found": "Groep niet gevonden", - "group_saved": "Apparaatgroep opgeslagen", - "groups_saved": "Apparaatgroepen opgeslagen", + "display_name": "Weergavenaam", + "display_name_placeholder": "Voer een weergavenaam in...", + "note_placeholder": "Voer een notitie in...", + "tags": "Tags", + "filter_by_tags": "Filteren op tags", + "no_tags": "No tags", + "all_groups": "Alle groepen", + "create_group": "Groep maken", + "manage_groups": "Groepen beheren", + "group_name": "Groepsnaam", + "group_name_placeholder": "bijv. mediapc’s", + "dynamic_group": "Dynamische groep op tag", + "dynamic_group_hint": "Apparaten met deze tag worden automatisch toegevoegd.", + "tag_filter": "Tag filter", + "group_allowed_users": "Toegestane gebruikers", + "group_allowed_users_hint": "Laat leeg om de groep zichtbaar te houden voor iedereen met apparaatmachtigingen.", + "group_tag_required": "Tagfilter is verplicht voor dynamische groepen", + "group_invalid": "Ongeldige groeps-ID", + "group_not_found": "Groep niet gevonden", + "group_saved": "Apparaatgroep opgeslagen", + "groups_saved": "Apparaatgroepen opgeslagen", "group_membership_added": "Toegevoegd aan groep", "group_membership_removed": "Verwijderd uit groep", - "no_groups": "Nog geen groepen", - "manual_groups": "Handmatige groepen", - "dynamic_memberships": "Dynamische lidmaatschappen", - "group_allowed_user_groups": "Toegestane gebruikersgroepen", - "group_allowed_user_groups_hint": "Gebruikers in geselecteerde groepen krijgen toegang tot deze apparaatgroep.", - "no_user_groups": "Geen gebruikersgroepen", - "edit_group": "Groep bewerken", - "delete_group": "Groep verwijderen", - "delete_group_confirm": "Apparaatgroep {name} verwijderen?", - "group_deleted": "Apparaatgroep verwijderd", - "folder_group_readonly": "Mapgebaseerde groepen worden via Mappen beheerd.", - "manage_user_groups": "Gebruikersgroepen beheren", - "restore_failed": "Gerat konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "De client heeft onlangs de API bereikt maar is niet geregistreerd op de signalserver (UDP :21116). Herstart de client na servermigratie.", - "per_page": "Per pagina" - }, - "keys": { - "title": "Serversleutels", - "subtitle": "Publieke sleutel en configuratie voor RustDesk-clients", - "public_key": "Publieke sleutel", - "qr_code": "QR-code", - "server_info": "Serverinformatie", - "download": "Sleutel downloaden", - "show_qr": "QR tonen", - "qr_hint": "Scan deze QR-code met de RustDesk mobiele app", - "no_key": "Geen publieke sleutel gevonden", - "no_key_to_copy": "Geen sleutel om te kopiëren", - "no_qr": "QR-code niet beschikbaar", - "download_success": "Sleutelbestand gedownload", - "not_found": "Sleutel niet gevonden", - "api_not_found": "API-sleutel niet gevonden" - }, - "settings": { - "title": "Instellingen", - "subtitle": "Console-configuratie en accountinstellingen", - "tab_general": "Algemeen", - "tab_server": "Serverinstellingen", - "tab_branding": "Huisstijl", - "tab_backup": "Back-up", - "language": "Taal", - "change_password": "Wachtwoord wijzigen", - "password_desc": "Werk uw accountwachtwoord bij", - "current_password": "Huidig wachtwoord", - "new_password": "Nieuw wachtwoord", - "confirm_password": "Bevestig wachtwoord", - "save_password": "Wachtwoord bijwerken", - "password_changed": "Wachtwoord succesvol gewijzigd", - "fill_all_fields": "Vul alle velden in", - "passwords_not_match": "Wachtwoorden komen niet overeen", - "password_requirements": "Wachtwoordvereisten", - "password_requirements_not_met": "Wachtwoord voldoet niet aan de vereisten", - "req_length": "Minimaal 8 tekens", - "req_uppercase": "Minimaal één hoofdletter", - "req_lowercase": "Minimaal één kleine letter", - "req_number": "Minimaal één cijfer", - "server_info": "Serverinformatie", - "version": "Versie", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Auditlogboek", - "audit_desc": "Recente console-activiteit", - "no_audit_logs": "Geen auditlogs gevonden", - "backend_title": "Serverbackend", - "backend_desc": "Kies de serverbackend voor apparaatbeheer en signaal/relay-diensten.", - "backend_original": "Origineel", - "backend_enhanced": "Verbeterd", - "backend_rustdesk_desc": "Standaard RustDesk signaal- en relayservers (hbbs + hbbr). Basis HTTP API met beperkte eindpunten.", - "backend_betterdesk_desc": "Verbeterde Go-gebaseerde server met volledige REST API, JWT-authenticatie, blokkeerlijst, tags, realtime WebSocket-events en auditregistratie.", - "backend_feature_signal": "Signaalserver (ID-registratie)", - "backend_feature_relay": "Relayserver (verbindingsdoorvoer)", - "backend_feature_basic_api": "Basis REST API", - "backend_feature_full_api": "Volledige REST API (34+ eindpunten)", - "backend_feature_jwt": "JWT-authenticatie en TOTP 2FA", - "backend_feature_blocklist": "IP/ID-blokkeerlijstbeheer", - "backend_feature_tags": "Tags en apparaatgroepering", - "backend_feature_audit": "Audit-eventregistratie", - "backend_feature_websocket": "Realtime WebSocket-events", - "backend_connection": "Verbinding", - "backend_api_url": "API-URL", - "backend_test": "Verbinding testen", - "backend_testing": "Testen...", - "backend_save": "Backend toepassen", - "backend_saved": "Serverbackend succesvol gewijzigd. Apparaatgegevens worden nu beheerd door de nieuwe backend.", - "backend_save_failed": "Wijzigen van serverbackend mislukt", - "backend_test_success": "Verbinding geslaagd! De server is bereikbaar.", - "backend_test_failed": "Verbinding mislukt. De server is niet bereikbaar.", - "backend_confirm_switch": "Weet u zeker dat u de serverbackend wilt wijzigen? Dit verandert het apparaatbeheer.", - "backend_unreachable": "Kan niet wijzigen: de doelserver is niet bereikbaar. Start eerst de server.", - "invalid_backend": "Ongeldige backendselectie. Kies 'rustdesk' of 'betterdesk'.", - "backend_status_running": "Verbonden", - "backend_status_unreachable": "Onbereikbaar", - "backend_status_error": "Fout", - "backend_status_unknown": "Onbekend", - "totp_title": "Tweefactorauthenticatie", - "totp_desc": "Voeg een extra beveiligingslaag toe met TOTP authenticatie-apps (Google Authenticator, Microsoft Authenticator, Authy, enz.)", - "totp_enabled": "2FA ingeschakeld", - "totp_enabled_desc": "Uw account is beschermd door tweefactorauthenticatie.", - "totp_disabled": "2FA niet ingeschakeld", - "totp_disabled_desc": "Schakel tweefactorauthenticatie in voor betere accountbeveiliging.", - "totp_setup": "2FA inschakelen", - "totp_disable": "2FA uitschakelen", - "totp_step1": "Installeer een authenticatie-app op uw telefoon", - "totp_step2": "Scan de onderstaande QR-code", - "totp_step3": "Voer de 6-cijferige code in om te verifiëren", - "totp_manual_key": "Handmatige sleutel", - "totp_enter_code": "Voer de verificatiecode in", - "totp_verify_enable": "Verifiëren en inschakelen", - "totp_enabled_success": "Tweefactorauthenticatie ingeschakeld!", - "totp_recovery_warning": "Bewaar deze herstelcodes op een veilige plaats. Elke code kan slechts één keer worden gebruikt. Als u de toegang tot uw authenticatie-app verliest, kunt u deze codes gebruiken om in te loggen.", - "totp_done": "Klaar", - "totp_disable_warning": "Het uitschakelen van tweefactorauthenticatie maakt uw account minder veilig. Voer uw wachtwoord in om te bevestigen.", - "totp_disabled_success": "Tweefactorauthenticatie is uitgeschakeld.", - "tutorials_title": "Interactieve rondleidingen", - "tutorials_desc": "Toon korte begeleide hints voor nieuwe of gewijzigde delen van de console.", - "tutorials_enabled": "Rondleidingen inschakelen", - "tutorials_enabled_hint": "Wanneer ingeschakeld verschijnen rondleidingen automatisch voor onderdelen die u nog niet hebt voltooid.", - "tutorials_reset_hint": "Wis alle opgeslagen voortgang zodat rondleidingen opnieuw worden weergegeven.", - "tutorials_enabled_toast": "Rondleidingen ingeschakeld", - "tutorials_disabled_toast": "Rondleidingen uitgeschakeld", - "tutorials_reset_toast": "Voortgang van rondleidingen gereset", - "tab_auth": "Authenticatie", - "ldap_title": "LDAP / Active Directory-integratie", - "ldap_desc": "Configureer externe authenticatie via LDAP of Active Directory. Gebruikers kunnen zich aanmelden met hun domeinreferenties.", - "ldap_enabled": "LDAP-authenticatie inschakelen", - "ldap_enabled_hint": "Wanneer ingeschakeld kunnen gebruikers zich aanmelden met LDAP/AD-referenties. Lokale accounts blijven als fallback werken.", - "ldap_connection": "Serververbinding", - "ldap_host": "Hostnaam", - "ldap_port": "Poort", - "ldap_use_tls": "LDAPS via TLS", - "ldap_start_tls": "StartTLS gebruiken", - "ldap_skip_verify": "TLS-controle overslaan", - "ldap_timeout": "Verbindingstime-out (s)", - "ldap_timeout_hint": "Aantal seconden om op een antwoord van de LDAP-server te wachten", - "ldap_bind_mode": "Bind-modus", - "ldap_direct_bind": "Directe bind", - "ldap_direct_bind_hint": "Bind direct met een DN-sjabloon in plaats van een serviceaccount te gebruiken om te zoeken.", - "ldap_bind_dn": "Bind-DN (serviceaccount)", - "ldap_bind_dn_hint": "Distinguished Name van een alleen-lezen serviceaccount dat wordt gebruikt om gebruikers te zoeken.", - "ldap_bind_password": "Bind-wachtwoord", - "ldap_base_dn": "Basis-DN", - "ldap_base_dn_hint": "Zoekbasis om gebruikers te vinden, bijv. dc=example,dc=com", - "ldap_user_filter": "Gebruikersfilter", - "ldap_user_filter_hint": "LDAP-filter om gebruikers te vinden. Gebruik {{username}} als placeholder. Standaard: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "DN-sjabloon voor directe bind", - "ldap_direct_bind_dn_hint": "DN-sjabloon voor directe bind. Gebruik {{username}} als placeholder, bijv. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Gebruikersattributen", - "ldap_attr_id": "Gebruikersnaam-attribuut", - "ldap_attr_email": "E-mailattribuut", - "ldap_attr_name": "Weergavenaam-attribuut", - "ldap_group_mapping": "Groep → rol-toewijzing", - "ldap_group_base_dn": "Basis-DN voor groepen", - "ldap_group_base_dn_hint": "Laat leeg om de hoofd-basis-DN te gebruiken", - "ldap_group_filter": "Groepsfilter", - "ldap_group_attr_name": "Groepsnaam-attribuut", - "ldap_default_role": "Standaardrol", - "ldap_default_role_hint": "Rol voor gebruikers waarvan LDAP-groepen met geen toewijzing overeenkomen", - "ldap_role_viewer": "Kijker", - "ldap_role_operator": "Operator", - "ldap_role_admin": "Beheerder", - "ldap_group_role_map": "Groep → rol-kaart", - "ldap_group_role_map_hint": "Wijs LDAP-groepen toe aan BetterDesk-rollen. Formaat: GroupDN=rol gescheiden door | (pipe). Voorbeeld: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Verbinding testen", - "ldap_testing": "Testen...", - "ldap_test_success": "Verbinding gelukt! De LDAP-server is bereikbaar en de bind-referenties zijn geldig.", - "ldap_test_failed": "Verbinding mislukt", - "ldap_save": "LDAP-configuratie opslaan", - "ldap_saved": "LDAP-configuratie succesvol opgeslagen", - "oidc_title": "OIDC / OAuth2-aanmelding (SSO)", - "oidc_desc": "Configureer single sign-on via een OpenID Connect-provider (Azure AD, Okta, Google, Keycloak enz.).", - "oidc_enabled": "OIDC-authenticatie inschakelen", - "oidc_enabled_hint": "Gebruikers toestaan zich aan te melden met een externe identiteitsprovider", - "oidc_provider": "Identiteitsprovider", - "oidc_display_name": "Weergavenaam van knop", - "oidc_display_name_hint": "Tekst op de aanmeldknop (bijv. Azure AD, Okta)", - "oidc_issuer_url": "Issuer-URL", - "oidc_issuer_url_hint": "Issuer-URL van OpenID Connect (discovery gebeurt automatisch)", - "oidc_client_id": "Client-ID", - "oidc_client_secret": "Clientgeheim", - "oidc_redirect_url": "Omleidings-URL (callback)", - "oidc_redirect_url_hint": "Moet exact overeenkomen met de configuratie in uw IdP. Meestal: http(s)://uw-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Scopes", - "oidc_use_pkce": "PKCE gebruiken (aanbevolen)", - "oidc_auto_discovery": "Automatische discovery", - "oidc_allow_signup": "Gebruikers automatisch aanmaken", - "oidc_manual_endpoints": "Handmatige endpoint-URL’s", - "oidc_authorization_url": "Autorisatie-endpoint", - "oidc_token_url": "Token-endpoint", - "oidc_userinfo_url": "UserInfo-endpoint", - "oidc_claim_mapping": "Claim-toewijzing", - "oidc_claim_username": "Claim voor gebruikersnaam", - "oidc_claim_email": "Claim voor e-mail", - "oidc_claim_name": "Claim voor weergavenaam", - "oidc_claim_groups": "Claim voor groepen", - "oidc_role_mapping": "Roltoewijzing", - "oidc_default_role": "Standaardrol", - "oidc_group_role_map": "Groep → rol-toewijzing", - "oidc_group_role_map_hint": "Eén toewijzing per regel: groepsnaam=rol (bijv. admins=admin, operators=operator)", - "oidc_test_discovery": "Discovery testen", - "oidc_testing": "Testen...", - "oidc_test_success": "Discovery geslaagd! Endpoints opgelost.", - "oidc_test_failed": "Discovery mislukt", - "oidc_issuer_required": "Issuer-URL is vereist om discovery te testen", - "oidc_save": "OIDC-configuratie opslaan", - "oidc_saved": "OIDC-configuratie succesvol opgeslagen", - "tab_advanced": "Geavanceerd", - "connection_mode_title": "Verbindingsstrategie", - "connection_mode_desc": "Steuern, wie RustDesk-Desktop-Clients verbinden: directes P2P (Hole Punch) wenn moglich oder immer uber Relay.", - "connection_mode_label": "Standard-Verbindingsmodus", - "connection_mode_p2p_first": "P2P zuerst (empfohlen) — directe Verbinding versuchen, auf Relay zuruckfallen", - "connection_mode_relay_only": "Nur Relay — alle Sitzungen verwenden den Relay-Server", - "connection_mode_advanced": "Geavanceerde Optionen", - "connection_mode_fallback_ms": "P2P-Fallback-Timeout (ms)", - "connection_mode_same_nat_relay": "Relay erzwingen, wenn beide Peers dieselbe offentliche IP teilen (NAT-Hairpin)", - "connection_mode_network_hint": "P2P erfordert, dass UDP-Port 21116 zwischen Clients erreichbar ist. Signal TCP 21116, Relay TCP 21117, NAT-Test 21115 mussen auf dem Server offen sein. Webbrowser-Clients verwenden immer Relay.", - "connection_mode_save": "Opslaan", - "connection_mode_save_restart": "Opslaan & Server neu starten", - "connection_mode_saved": "Verbindingsmodus opgeslagen", - "connection_mode_restart_started": "Server-Herstart eingeleitet", - "connection_mode_restart_failed": "Server-Herstart mislukt", - "connection_mode_not_configurable": "Verbindingsmodus kann auf diesem Deployment nicht geandert werden (keine systemd-Unit oder docker-compose gefunden)", - "connection_mode_compose_error": "Serveromgevingsabschnitt in docker-compose.yml nicht gefunden", - "connection_mode_source_saved": "Opgeslagen in", - "connection_mode_source_defaults": "Server-Standardwerte verwenden (nicht uber Panel beschreibbar)", - "connection_mode_runtime": "Aktiver Server", - "advanced_title": "Konfigurationsbestanden", - "advanced_desc": "Serverkonfigurationsbestanden direct bearbeiten. Anderungen erfordern moglicherweise einen Serviceherstart. Vor jedem Opslaan wird eine Back-up erstellt.", - "advanced_warning": "Diese Bestanden enthalten Geheimen (API-Schlussel, Databasepassworter, Sessiegeheimse). Nur bearbeiten, wenn Sie wissen, was Sie tun. Falsche Syntax kann verhindern, dass der Server startet.", - "advanced_files_label": "Bestanden", - "advanced_select_file": "Eine Bestand aus der Liste auswahlen, um deren Inhalt anzuzeigen oder zu bearbeiten.", - "advanced_reload": "Herladen", - "advanced_save": "Bestand opslaan", - "advanced_apply_restart": "Toepassen (Service neu starten)", - "advanced_saved": "Konfigurationsbestand opgeslagen", - "advanced_restart_after_save": "Konfiguration opgeslagen. Den betroffenen Service jetzt neu starten, damit die Anderungen wirksam werden?", - "advanced_restart_confirm": "Die zugehorigen BetterDesk-Servicee neu starten? Aktive Verbindingen konnen kurz unterbrochen werden.", - "advanced_restart_console_confirm": "Den Webkonsolenservice neu starten? Ihre Browsersitzung wird kurz getrennt und die Seite wird neu geladen, wenn die Konsole wieder verfugbar ist.", - "advanced_restart_started": "Serviceherstart eingeleitet", - "advanced_restart_done": "Konsole neu gestartet — Seite wird neu geladen…", - "advanced_restart_polling": "Warten, bis die Konsole wieder online ist…", - "advanced_restart_timeout": "Herstart wurde gesendet, aber die Konsole hat nicht rechtzeitig geantwortet. Systemd/NSSM-Protokolle prufen und manuell herladen.", - "advanced_restart_failed": "Serviceherstart mislukt (unzureichende Berechtigungen oder Service nicht installiert)", - "advanced_save_confirm": "Anderungen an dieser Bestand opslaan? Eine Sicherung der vorherigen Version wird erstellt.", - "advanced_unsaved_confirm": "Sie haben unopgeslagene Anderungen. Diese verwerfen?", - "advanced_no_files": "Keine Konfigurationsbestanden auf diesem System verfugbar.", - "advanced_readonly": "schreibgeschutzt", - "advanced_missing": "fehlend", - "advanced_new_file": "Neue Bestand (wird erst beim Opslaan erstellt)", - "advanced_new_file_hint": "Neue Bestand — Inhalt hinzufugen und opslaan", - "advanced_backup_created": "Sicherung erstellt", - "advanced_restart_console": "Den Webkonsolenservice neu starten (z. B. systemctl restart betterdesk-console), damit .env-Anderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Anderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausfuhren: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Service neu starten, damit die Anderungen wirksam werden.", - "advanced_error_unknown": "Onbekende Konfigurationsbestand", - "advanced_error_not_found": "Bestand bestaat niet", - "advanced_error_not_file": "Pfad ist keine regulare Bestand", - "advanced_error_too_large": "Bestand uberschreitet die maximale bearbeitbare Grosse (512 KB)", - "advanced_error_binary": "Binarbestanden konnen nicht im Panel bearbeitet werden", - "advanced_error_invalid": "Ungultiger Bestandinhalt", - "advanced_error_not_writable": "Bestand ist nicht vom Konsolenprozess beschreibbar", - "advanced_file_console-env": "Konsolenomgeving (.env)", - "advanced_file_console-env-local": "Konsolen-Uberschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (service-unit)", - "advanced_file_systemd-server": "systemd: betterdesk-server (service-unit)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Omgeving (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-configuratie)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestratie)", - "advanced_restart_none": "Fur diese Bestand ist kein Serviceherstart erforderlich.", - "enrollment_title": "Gerateregistrierung (RustDesk)", - "enrollment_desc": "Steuern, wie sich neue RustDesk-Clients registrieren und wie Operatoren sie auf der Seite mit den Registrierungsanfragen genehmigen.", - "enrollment_require_approval": "Goedkeuring des Operators erforderlich (Beheerde modus)", - "enrollment_require_approval_hint": "Wenn aktiviert, werden onbekende Clients in die Warteschlange eingereiht, bis ein Operator sie in den Registrierungsanfragen genehmigt.", - "enrollment_rich_approve": "Vollstandiges Goedkeuringsformular (Name, Map, Groepen, Tags)", - "enrollment_rich_approve_hint": "Zeigt einen detaillierten Dialog bei der Goedkeuring von Registrierungs- oder LAN-Registrierungsanfragen an.", - "enrollment_tag_picker": "Tags aus vorhandenen Gerate-Tags auswahlen", - "enrollment_tag_picker_hint": "Ermoglicht Operatoren, Tags aus der auf der Gerateseite verwendeten Liste auszuwahlen, anstatt nur zu tippen.", - "enrollment_open_requests": "Offene Registrierungsanfragen", - "enrollment_pending_count": "{count} ausstehende Registrierungsanfrage(n)" - }, - "audit": { - "time": "Tijd", - "user": "Gebruiker", - "action": "Actie", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Aanmelding mislukt", - "action_logout": "Logout", - "action_password_change": "Wachtwoord gewijzigd", - "action_2fa_enable": "2FA ingeschakeld", - "action_2fa_disable": "2FA uitgeschakeld", - "action_user_create": "Gebruiker aangemaakt", - "action_user_update": "Gebruiker bijgewerkt", - "action_user_delete": "Gebruiker verwijderd", - "action_settings_update": "Instellingen bijgewerkt", - "action_device_ban": "Apparaat geblokkeerd", - "action_device_unban": "Apparaatblokkade opgeheven", - "action_device_delete": "Apparaat verwijderd" - }, - "generator": { - "title": "Clientconfiguratiegenerator", - "subtitle": "Genereer configuratie voor RustDesk-clients", - "config_options": "Configuratieopties", - "server_address": "Serveradres", - "server_address_hint": "Domein of IP-adres van uw server", - "custom_port": "Aangepaste poort", - "port_hint": "Leeg laten voor standaard (21116)", - "relay_server": "Relayserver", - "relay_placeholder": "Zelfde als ID-server indien leeg", - "relay_hint": "Optioneel: afzonderlijk relayserveradres", - "include_key": "Publieke sleutel opnemen in configuratie", - "generate": "Configuratie genereren", - "output": "Configuratie-uitvoer", - "usage_title": "Verbindingsdetails", - "generated": "Configuratie gegenereerd", - "server_required": "Serveradres is vereist", - "nothing_to_copy": "Genereer eerst een configuratie", - "bundles_title": "Agentpakketten", - "new_bundle": "Nieuw pakket", - "editor_title": "Pakketeditor", - "empty_state": "Selecteer links een pakket of maak een nieuw pakket aan om te beginnen.", - "loading": "Laden…", - "no_bundles": "Nog geen pakketten. Maak uw eerste pakket aan.", - "bundle_name": "Pakketnaam", - "bundle_name_hint": "Alleen een intern label — wordt niet aan eindgebruikers getoond.", - "short_link": "Korte downloadlink", - "short_link_hint": "Gebruikt in de openbare URL (/d/…). Alleen kleine letters, cijfers en streepjes (2–32 tekens). Automatisch ingevuld vanuit pakketnaam — verkort voor eenvoudiger delen (bijv. acme).", - "branding_section": "Branding", - "company_name": "Bedrijfs-/merknaam", - "short_text": "Korte beschrijving", - "contact_email": "Contact-e-mail", - "contact_phone": "Contacttelefoon", - "contact_url": "Contactwebsite", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG of WebP. Maximaal 256 KB.", - "logo_clear": "Logo verwijderen", - "primary_color": "Primaire kleur", - "accent_color": "Kopkleur", - "default_lang": "Standaardtaal", - "allow_unattended": "Onbeheerde toegang toestaan", - "allow_unattended_hint": "Wanneer ingeschakeld toont de agent een blijvend wachtwoord voor operatortoegang.", - "save": "Pakket opslaan", - "revoke": "Intrekken", - "unrevoke": "Opnieuw activeren", - "revoked": "Ingetrokken", - "preview_title": "Livevoorbeeld", - "preview_hint": "Geschatte weergave van het agentvenster voor eindgebruikers.", - "preview_default_name": "BetterDesk-ondersteuning", - "preview_status_ready": "Gereed", - "preview_id": "Uw ID", - "preview_password": "Wachtwoord", - "preview_chat": "Chatten met ondersteuning", - "preview_settings": "Instellingen (alleen admin)", - "preview_quit": "Afsluiten (alleen admin)", - "download_link_title": "Downloadlink", - "download_link_hint": "Deel deze link met eindgebruikers. Zij zien een downloadpagina met uw branding. Oude hex-links blijven werken nadat u de korte link wijzigt.", - "open_portal": "Openen", - "created": "Pakket aangemaakt", - "saved": "Pakket opgeslagen", - "deleted": "Pakket verwijderd", - "revoked_ok": "Pakket ingetrokken", - "unrevoked_ok": "Pakket opnieuw geactiveerd", - "link_copied": "Link naar klembord gekopieerd", - "copy_failed": "Automatisch kopiëren mislukt — kopieer handmatig", - "unsaved_confirm": "Niet-opgeslagen wijzigingen verwerpen?", - "confirm_revoke": "Dit pakket intrekken? De downloadlink werkt daarna niet meer.", - "confirm_unrevoke": "Dit pakket opnieuw activeren?", - "confirm_delete": "Dit pakket permanent verwijderen? Deze actie kan niet ongedaan worden gemaakt.", - "errors": { - "validation_failed": "Validatie mislukt", - "name_required": "Pakketnaam is verplicht", - "company_name_required": "Bedrijfsnaam is verplicht", - "logo_invalid": "Het logo moet een geldig afbeeldingsbestand zijn", - "logo_too_large": "Het logo mag maximaal 256 KB zijn", - "logo_read_failed": "Logobestand kon niet worden gelezen", - "primary_color_invalid": "Primaire kleur moet een hexwaarde zijn (bijv. #2563eb)", - "accent_color_invalid": "Kopkleur moet een hexwaarde zijn (bijv. #1e293b)", - "contact_url_invalid": "Contactwebsite moet een geldige URL zijn", - "server_host_required": "Offentliche Serveradresse ist erforderlich", - "server_host_invalid": "Gultigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivitat prufen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Korte link mag alleen kleine letters, cijfers en streepjes bevatten", - "slug_too_short": "Korte link moet minimaal 2 tekens zijn", - "slug_too_long": "Korte link mag maximaal 32 tekens zijn", - "slug_taken": "Deze korte link wordt al door een ander pakket gebruikt" - }, - "legacy_title": "Generator voor clientconfiguratie", - "connection_section": "Serververbinding", - "server_host": "Offentliche Serveradresse", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "server_host_hint": "Domainname oder offentliche IP-Adresse, unter der Endbenutzer Ihren BetterDesk-Server erreichen. Port wird aus der Konsolenkonfiguration ubernommen.", - "use_https": "HTTPS / WSS gebruiken (aanbevolen)", - "enrollment_token": "Gerateregistrierung", - "enrollment_token_pending": "Pro Gerat nach Goedkeuring", - "enrollment_token_set": "Pro Gerat — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Gerate im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlussel pro Computer aus.", - "enrollment_per_device": "Pro Gerat — in Registrierungen genehmigen", - "background_color": "Vensterachtergrond", - "surface_color": "Kaartachtergrond", - "text_color": "Tekstkleur", - "text_muted_color": "Gedampfte Tekstkleur", - "status_ready_color": "Farbe des Gereed-indicators", - "header_text_color": "Koptekstfarbe", - "builds_title": "Client-builds", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme fur jede Plattform. Nach der Behebung von Toolchain-Foutn oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket opslaan oder 'Alles opnieuw bouwen' klicken.", - "rebuild_all": "Alles opnieuw bouwen", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "rebuild_confirm": "Alle Plattform-Installer fur dieses Paket neu erstellen? Vorhandene fertige Artefakte werden ersetzt.", - "build_status_ready": "Gereed", - "build_status_pending": "In wachtrij", - "build_status_building": "Bezig met bouwen", - "build_status_failed": "Mislukt", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislukt", - "build_error_hint": "Build-Fout", - "preview_help": "Hulp vragen" - }, - "server": { - "port": "Poort", - "api_port": "API-poort", - "id_server": "ID-server", - "relay_server": "Relayserver", - "api_key": "API-sleutel" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Verbannen", - "running": "Actief", - "stopped": "Gestopt", - "unknown": "Onbekend", - "checking": "Controleren...", - "label": "Status", - "no_signal": "Geen signaal" - }, - "actions": { - "refresh": "Vernieuwen", - "copy": "Kopiëren", - "connect": "Verbinden", - "connect_desktop": "Verbinden via desktopclient", - "remote_viewer": "Externe viewer", - "web_remote": "Web-remote", - "details": "Details", - "edit": "Bewerken", - "delete": "Verwijderen", - "ban": "Verbannen", - "unban": "Verbanning opheffen", - "save": "Opslaan", - "cancel": "Annuleren", - "confirm": "Bevestigen", - "close": "Sluiten", - "clear": "Wissen", - "ok": "OK", - "saved": "Succesvol opgeslagen", - "back": "Terug", - "create": "Aanmaken", - "dismiss": "Negeren", - "view_all": "Alles bekijken", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Toevoegen", - "remove": "Verwijderen" - }, - "time": { - "just_now": "Zojuist", - "seconds_ago": "{count} seconde(n) geleden", - "minutes_ago": "{count} minu(u)t(en) geleden", - "hours_ago": "{count} u(u)r(en) geleden", - "days_ago": "{count} dag(en) geleden", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Gebruikersbeheer", - "subtitle": "Beheer gebruikers en consolemachtigingen", - "add_user": "Gebruiker toevoegen", - "edit_user": "Gebruiker bewerken", - "username": "Gebruikersnaam", - "username_placeholder": "Voer gebruikersnaam in", - "username_hint": "3-32 tekens, alleen letters, cijfers en underscores", - "password": "Wachtwoord", - "password_placeholder": "Voer wachtwoord in", - "password_hint": "Minimaal 8 tekens met hoofdletters, kleine letters, cijfers en symbolen", - "password_leave_empty": "Leeg laten om huidig te behouden", - "role": "Rol", - "role_admin": "Beheerder", - "role_operator": "Operator", - "role_viewer": "Waarnemer", - "role_hint": "Waarnemers kunnen alleen gegevens bekijken, operators kunnen apparaten beheren, beheerders hebben volledige toegang", - "created": "Aangemaakt", - "last_login": "Laatste inlog", - "never": "Nooit", - "actions": "Acties", - "create": "Gebruiker aanmaken", - "edit": "Bewerken", - "reset_password": "Wachtwoord herstellen", - "new_password": "Nieuw wachtwoord", - "delete_title": "Gebruiker verwijderen", - "delete_confirm": "Weet u zeker dat u gebruiker {username} wilt verwijderen?", - "delete_success": "Gebruiker succesvol verwijderd", - "user_created": "Gebruiker succesvol aangemaakt", - "user_updated": "Gebruiker succesvol bijgewerkt", - "password_reset_success": "Wachtwoord succesvol hersteld", - "empty_title": "Geen gebruikers gevonden", - "empty_text": "Voeg gebruikers toe om consoletoegang te beheren", - "fill_required": "Vul alle verplichte velden in", - "invalid_username": "Gebruikersnaam moet 3-32 tekens zijn, alleen letters, cijfers en underscores", - "username_exists": "Gebruikersnaam bestaat al", - "weak_password": "Wachtwoord is te zwak", - "password_too_short": "Wachtwoord moet minimaal 8 tekens zijn", - "invalid_role": "Ongeldige rol", - "cannot_demote_self": "U kunt uzelf niet degraderen", - "cannot_delete_self": "U kunt uw eigen account niet verwijderen", - "last_admin": "Kan de laatste beheerder niet verwijderen", - "admin_only": "Deze functie is alleen beschikbaar voor beheerders", - "password_required": "Wachtwoord is vereist", - "not_found": "Gebruiker niet gevonden", - "strength_weak": "Zwak", - "strength_medium": "Gemiddeld", - "strength_strong": "Sterk", - "security_tips_title": "Beveiligingstips", - "tip_strong_passwords": "Gebruik sterke, unieke wachtwoorden voor elke gebruiker", - "tip_unique_accounts": "Maak individuele accounts aan voor elke persoon", - "tip_viewer_role": "Gebruik de waarnemerrol voor gebruikers die alleen leestoegang nodig hebben", - "tip_operator_role": "Gebruik de operatorrol voor gebruikers die apparaten moeten beheren maar geen gebruikers", - "tip_audit_logs": "Controleer regelmatig de auditlogs op verdachte activiteit", - "role_pro": "Professioneel", - "role_super_admin": "Super Admin", - "role_server_admin": "Serverbeheerder", - "role_global_admin": "Globale beheerder", - "organizations": "Organisaties", - "user_organizations": "Organisaties voor {username}", - "no_organizations": "Geen organisaties", - "org_removed": "Gebruiker uit organisatie verwijderd", - "server_role_label": "Serverrol", - "server_role_hint": "Bepaalt wat de gebruiker in de hele console kan doen (paneeltoegang, serverconfiguratie, audit enz.).", - "org_membership_section": "Organisatielidmaatschap", - "org_membership_hint": "Een gebruiker kan lid zijn van meerdere organisaties. De organisatierol bepaalt alleen machtigingen binnen die organisatie en staat los van de serverrol hierboven.", - "column_organizations": "Organisaties", - "no_orgs_short": "—", - "org_count_one": "{count} organisatie", - "org_count_many": "{count} organisaties", - "all_orgs_assigned": "De gebruiker is al lid van elke organisatie.", - "user_groups": "Gebruikersgroepen", - "user_groups_hint": "Gebruikersgroepen kunnen toegang geven tot geselecteerde apparaatgroepen.", - "loading_user_groups": "Gebruikersgroepen laden...", - "no_user_groups": "Geen gebruikersgroepen beschikbaar", - "create_user_group": "Groep maken", - "edit_user_group": "Gebruikersgroep bewerken", - "delete_user_group": "Gebruikersgroep verwijderen", - "delete_user_group_confirm": "Gebruikersgroep {name} verwijderen? Leden verliezen de via deze groep verleende toegang.", - "user_group_created": "Gebruikersgroep aangemaakt", - "user_group_updated": "Gebruikersgroep bijgewerkt", - "user_group_deleted": "Gebruikersgroep verwijderd", - "user_group_not_found": "Gebruikersgroep niet gevonden", - "group_name": "Groepsnaam", - "group_name_placeholder": "Operatorgroep", - "group_note": "Note", - "group_note_placeholder": "Optionele notitie", - "group_name_required": "Groepsnaam is verplicht", - "group_members_count": "{count} leden", - "provider": "Provider", - "provider_local": "Lokaal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Vom Identitatsprovider verwaltet", - "provider_managed_hint": "Dieses Konto wird von einem externen Identitatsprovider (LDAP/AD oder SSO) verwaltet. Passwort und Rolle werden vom Provider gesteuert und konnen hier nicht geandert werden." - }, - "folders": { - "title": "Mappen", - "create": "Map aanmaken", - "edit": "Map bewerken", - "delete": "Map verwijderen", - "name": "Mapnaam", - "name_placeholder": "Voer mapnaam in", - "name_required": "Mapnaam is vereist", - "name_too_long": "Mapnaam is te lang (max 50 tekens)", - "color": "Kleur", - "icon": "Pictogram", - "not_found": "Map niet gevonden", - "delete_confirm": "Weet u zeker dat u deze map wilt verwijderen? Apparaten worden losgekoppeld.", - "delete_success": "Map succesvol verwijderd", - "created": "Map succesvol aangemaakt", - "updated": "Map succesvol bijgewerkt", - "no_devices_selected": "Geen apparaten geselecteerd", - "devices_moved": "Apparaten succesvol verplaatst", - "device_assigned": "Apparaat toegewezen aan map", - "unassigned": "Niet toegewezen", - "all_devices": "Alle apparaten", - "drag_hint": "Sleep apparaten naar mappen om ze te ordenen", - "move_to": "Verplaatsen naar", - "toggle_sidebar": "Zijbalk in-/uitschakelen" - }, + "no_groups": "Nog geen groepen", + "manual_groups": "Handmatige groepen", + "dynamic_memberships": "Dynamische lidmaatschappen", + "group_allowed_user_groups": "Toegestane gebruikersgroepen", + "group_allowed_user_groups_hint": "Gebruikers in geselecteerde groepen krijgen toegang tot deze apparaatgroep.", + "no_user_groups": "Geen gebruikersgroepen", + "edit_group": "Groep bewerken", + "delete_group": "Groep verwijderen", + "delete_group_confirm": "Apparaatgroep {name} verwijderen?", + "group_deleted": "Apparaatgroep verwijderd", + "folder_group_readonly": "Mapgebaseerde groepen worden via Mappen beheerd.", + "manage_user_groups": "Gebruikersgroepen beheren", + "restore_failed": "Gerat konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "De client heeft onlangs de API bereikt maar is niet geregistreerd op de signalserver (UDP :21116). Herstart de client na servermigratie.", + "per_page": "Per pagina" + }, + "keys": { + "title": "Serversleutels", + "subtitle": "Publieke sleutel en configuratie voor RustDesk-clients", + "public_key": "Publieke sleutel", + "qr_code": "QR-code", + "server_info": "Serverinformatie", + "download": "Sleutel downloaden", + "show_qr": "QR tonen", + "qr_hint": "Scan deze QR-code met de RustDesk mobiele app", + "no_key": "Geen publieke sleutel gevonden", + "no_key_to_copy": "Geen sleutel om te kopiëren", + "no_qr": "QR-code niet beschikbaar", + "download_success": "Sleutelbestand gedownload", + "not_found": "Sleutel niet gevonden", + "api_not_found": "API-sleutel niet gevonden" + }, + "settings": { + "title": "Instellingen", + "subtitle": "Console-configuratie en accountinstellingen", + "tab_general": "Algemeen", + "tab_server": "Serverinstellingen", + "tab_branding": "Huisstijl", + "tab_backup": "Back-up", + "language": "Taal", + "change_password": "Wachtwoord wijzigen", + "password_desc": "Werk uw accountwachtwoord bij", + "current_password": "Huidig wachtwoord", + "new_password": "Nieuw wachtwoord", + "confirm_password": "Bevestig wachtwoord", + "save_password": "Wachtwoord bijwerken", + "password_changed": "Wachtwoord succesvol gewijzigd", + "fill_all_fields": "Vul alle velden in", + "passwords_not_match": "Wachtwoorden komen niet overeen", + "password_requirements": "Wachtwoordvereisten", + "password_requirements_not_met": "Wachtwoord voldoet niet aan de vereisten", + "req_length": "Minimaal 8 tekens", + "req_uppercase": "Minimaal één hoofdletter", + "req_lowercase": "Minimaal één kleine letter", + "req_number": "Minimaal één cijfer", + "server_info": "Serverinformatie", + "version": "Versie", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Auditlogboek", + "audit_desc": "Recente console-activiteit", + "no_audit_logs": "Geen auditlogs gevonden", + "backend_title": "Serverbackend", + "backend_desc": "Kies de serverbackend voor apparaatbeheer en signaal/relay-diensten.", + "backend_original": "Origineel", + "backend_enhanced": "Verbeterd", + "backend_rustdesk_desc": "Standaard RustDesk signaal- en relayservers (hbbs + hbbr). Basis HTTP API met beperkte eindpunten.", + "backend_betterdesk_desc": "Verbeterde Go-gebaseerde server met volledige REST API, JWT-authenticatie, blokkeerlijst, tags, realtime WebSocket-events en auditregistratie.", + "backend_feature_signal": "Signaalserver (ID-registratie)", + "backend_feature_relay": "Relayserver (verbindingsdoorvoer)", + "backend_feature_basic_api": "Basis REST API", + "backend_feature_full_api": "Volledige REST API (34+ eindpunten)", + "backend_feature_jwt": "JWT-authenticatie en TOTP 2FA", + "backend_feature_blocklist": "IP/ID-blokkeerlijstbeheer", + "backend_feature_tags": "Tags en apparaatgroepering", + "backend_feature_audit": "Audit-eventregistratie", + "backend_feature_websocket": "Realtime WebSocket-events", + "backend_connection": "Verbinding", + "backend_api_url": "API-URL", + "backend_test": "Verbinding testen", + "backend_testing": "Testen...", + "backend_save": "Backend toepassen", + "backend_saved": "Serverbackend succesvol gewijzigd. Apparaatgegevens worden nu beheerd door de nieuwe backend.", + "backend_save_failed": "Wijzigen van serverbackend mislukt", + "backend_test_success": "Verbinding geslaagd! De server is bereikbaar.", + "backend_test_failed": "Verbinding mislukt. De server is niet bereikbaar.", + "backend_confirm_switch": "Weet u zeker dat u de serverbackend wilt wijzigen? Dit verandert het apparaatbeheer.", + "backend_unreachable": "Kan niet wijzigen: de doelserver is niet bereikbaar. Start eerst de server.", + "invalid_backend": "Ongeldige backendselectie. Kies 'rustdesk' of 'betterdesk'.", + "backend_status_running": "Verbonden", + "backend_status_unreachable": "Onbereikbaar", + "backend_status_error": "Fout", + "backend_status_unknown": "Onbekend", + "totp_title": "Tweefactorauthenticatie", + "totp_desc": "Voeg een extra beveiligingslaag toe met TOTP authenticatie-apps (Google Authenticator, Microsoft Authenticator, Authy, enz.)", + "totp_enabled": "2FA ingeschakeld", + "totp_enabled_desc": "Uw account is beschermd door tweefactorauthenticatie.", + "totp_disabled": "2FA niet ingeschakeld", + "totp_disabled_desc": "Schakel tweefactorauthenticatie in voor betere accountbeveiliging.", + "totp_setup": "2FA inschakelen", + "totp_disable": "2FA uitschakelen", + "totp_step1": "Installeer een authenticatie-app op uw telefoon", + "totp_step2": "Scan de onderstaande QR-code", + "totp_step3": "Voer de 6-cijferige code in om te verifiëren", + "totp_manual_key": "Handmatige sleutel", + "totp_enter_code": "Voer de verificatiecode in", + "totp_verify_enable": "Verifiëren en inschakelen", + "totp_enabled_success": "Tweefactorauthenticatie ingeschakeld!", + "totp_recovery_warning": "Bewaar deze herstelcodes op een veilige plaats. Elke code kan slechts één keer worden gebruikt. Als u de toegang tot uw authenticatie-app verliest, kunt u deze codes gebruiken om in te loggen.", + "totp_done": "Klaar", + "totp_disable_warning": "Het uitschakelen van tweefactorauthenticatie maakt uw account minder veilig. Voer uw wachtwoord in om te bevestigen.", + "totp_disabled_success": "Tweefactorauthenticatie is uitgeschakeld.", + "tutorials_title": "Interactieve rondleidingen", + "tutorials_desc": "Toon korte begeleide hints voor nieuwe of gewijzigde delen van de console.", + "tutorials_enabled": "Rondleidingen inschakelen", + "tutorials_enabled_hint": "Wanneer ingeschakeld verschijnen rondleidingen automatisch voor onderdelen die u nog niet hebt voltooid.", + "tutorials_reset_hint": "Wis alle opgeslagen voortgang zodat rondleidingen opnieuw worden weergegeven.", + "tutorials_enabled_toast": "Rondleidingen ingeschakeld", + "tutorials_disabled_toast": "Rondleidingen uitgeschakeld", + "tutorials_reset_toast": "Voortgang van rondleidingen gereset", + "tab_auth": "Authenticatie", + "ldap_title": "LDAP / Active Directory-integratie", + "ldap_desc": "Configureer externe authenticatie via LDAP of Active Directory. Gebruikers kunnen zich aanmelden met hun domeinreferenties.", + "ldap_enabled": "LDAP-authenticatie inschakelen", + "ldap_enabled_hint": "Wanneer ingeschakeld kunnen gebruikers zich aanmelden met LDAP/AD-referenties. Lokale accounts blijven als fallback werken.", + "ldap_connection": "Serververbinding", + "ldap_host": "Hostnaam", + "ldap_port": "Poort", + "ldap_use_tls": "LDAPS via TLS", + "ldap_start_tls": "StartTLS gebruiken", + "ldap_skip_verify": "TLS-controle overslaan", + "ldap_timeout": "Verbindingstime-out (s)", + "ldap_timeout_hint": "Aantal seconden om op een antwoord van de LDAP-server te wachten", + "ldap_bind_mode": "Bind-modus", + "ldap_direct_bind": "Directe bind", + "ldap_direct_bind_hint": "Bind direct met een DN-sjabloon in plaats van een serviceaccount te gebruiken om te zoeken.", + "ldap_bind_dn": "Bind-DN (serviceaccount)", + "ldap_bind_dn_hint": "Distinguished Name van een alleen-lezen serviceaccount dat wordt gebruikt om gebruikers te zoeken.", + "ldap_bind_password": "Bind-wachtwoord", + "ldap_base_dn": "Basis-DN", + "ldap_base_dn_hint": "Zoekbasis om gebruikers te vinden, bijv. dc=example,dc=com", + "ldap_user_filter": "Gebruikersfilter", + "ldap_user_filter_hint": "LDAP-filter om gebruikers te vinden. Gebruik {{username}} als placeholder. Standaard: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "DN-sjabloon voor directe bind", + "ldap_direct_bind_dn_hint": "DN-sjabloon voor directe bind. Gebruik {{username}} als placeholder, bijv. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Gebruikersattributen", + "ldap_attr_id": "Gebruikersnaam-attribuut", + "ldap_attr_email": "E-mailattribuut", + "ldap_attr_name": "Weergavenaam-attribuut", + "ldap_group_mapping": "Groep → rol-toewijzing", + "ldap_group_base_dn": "Basis-DN voor groepen", + "ldap_group_base_dn_hint": "Laat leeg om de hoofd-basis-DN te gebruiken", + "ldap_group_filter": "Groepsfilter", + "ldap_group_attr_name": "Groepsnaam-attribuut", + "ldap_default_role": "Standaardrol", + "ldap_default_role_hint": "Rol voor gebruikers waarvan LDAP-groepen met geen toewijzing overeenkomen", + "ldap_role_viewer": "Kijker", + "ldap_role_operator": "Operator", + "ldap_role_admin": "Beheerder", + "ldap_group_role_map": "Groep → rol-kaart", + "ldap_group_role_map_hint": "Wijs LDAP-groepen toe aan BetterDesk-rollen. Formaat: GroupDN=rol gescheiden door | (pipe). Voorbeeld: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Verbinding testen", + "ldap_testing": "Testen...", + "ldap_test_success": "Verbinding gelukt! De LDAP-server is bereikbaar en de bind-referenties zijn geldig.", + "ldap_test_failed": "Verbinding mislukt", + "ldap_save": "LDAP-configuratie opslaan", + "ldap_saved": "LDAP-configuratie succesvol opgeslagen", + "oidc_title": "OIDC / OAuth2-aanmelding (SSO)", + "oidc_desc": "Configureer single sign-on via een OpenID Connect-provider (Azure AD, Okta, Google, Keycloak enz.).", + "oidc_enabled": "OIDC-authenticatie inschakelen", + "oidc_enabled_hint": "Gebruikers toestaan zich aan te melden met een externe identiteitsprovider", + "oidc_provider": "Identiteitsprovider", + "oidc_display_name": "Weergavenaam van knop", + "oidc_display_name_hint": "Tekst op de aanmeldknop (bijv. Azure AD, Okta)", + "oidc_issuer_url": "Issuer-URL", + "oidc_issuer_url_hint": "Issuer-URL van OpenID Connect (discovery gebeurt automatisch)", + "oidc_client_id": "Client-ID", + "oidc_client_secret": "Clientgeheim", + "oidc_redirect_url": "Omleidings-URL (callback)", + "oidc_redirect_url_hint": "Moet exact overeenkomen met de configuratie in uw IdP. Meestal: http(s)://uw-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Scopes", + "oidc_use_pkce": "PKCE gebruiken (aanbevolen)", + "oidc_auto_discovery": "Automatische discovery", + "oidc_allow_signup": "Gebruikers automatisch aanmaken", + "oidc_manual_endpoints": "Handmatige endpoint-URL’s", + "oidc_authorization_url": "Autorisatie-endpoint", + "oidc_token_url": "Token-endpoint", + "oidc_userinfo_url": "UserInfo-endpoint", + "oidc_claim_mapping": "Claim-toewijzing", + "oidc_claim_username": "Claim voor gebruikersnaam", + "oidc_claim_email": "Claim voor e-mail", + "oidc_claim_name": "Claim voor weergavenaam", + "oidc_claim_groups": "Claim voor groepen", + "oidc_role_mapping": "Roltoewijzing", + "oidc_default_role": "Standaardrol", + "oidc_group_role_map": "Groep → rol-toewijzing", + "oidc_group_role_map_hint": "Eén toewijzing per regel: groepsnaam=rol (bijv. admins=admin, operators=operator)", + "oidc_test_discovery": "Discovery testen", + "oidc_testing": "Testen...", + "oidc_test_success": "Discovery geslaagd! Endpoints opgelost.", + "oidc_test_failed": "Discovery mislukt", + "oidc_issuer_required": "Issuer-URL is vereist om discovery te testen", + "oidc_save": "OIDC-configuratie opslaan", + "oidc_saved": "OIDC-configuratie succesvol opgeslagen", + "tab_advanced": "Geavanceerd", + "connection_mode_title": "Verbindingsstrategie", + "connection_mode_desc": "Steuern, wie RustDesk-Desktop-Clients verbinden: directes P2P (Hole Punch) wenn moglich oder immer uber Relay.", + "connection_mode_label": "Standard-Verbindingsmodus", + "connection_mode_p2p_first": "P2P zuerst (empfohlen) — directe Verbinding versuchen, auf Relay zuruckfallen", + "connection_mode_relay_only": "Nur Relay — alle Sitzungen verwenden den Relay-Server", + "connection_mode_advanced": "Geavanceerde Optionen", + "connection_mode_fallback_ms": "P2P-Fallback-Timeout (ms)", + "connection_mode_same_nat_relay": "Relay erzwingen, wenn beide Peers dieselbe offentliche IP teilen (NAT-Hairpin)", + "connection_mode_network_hint": "P2P erfordert, dass UDP-Port 21116 zwischen Clients erreichbar ist. Signal TCP 21116, Relay TCP 21117, NAT-Test 21115 mussen auf dem Server offen sein. Webbrowser-Clients verwenden immer Relay.", + "connection_mode_save": "Opslaan", + "connection_mode_save_restart": "Opslaan & Server neu starten", + "connection_mode_saved": "Verbindingsmodus opgeslagen", + "connection_mode_restart_started": "Server-Herstart eingeleitet", + "connection_mode_restart_failed": "Server-Herstart mislukt", + "connection_mode_not_configurable": "Verbindingsmodus kann auf diesem Deployment nicht geandert werden (keine systemd-Unit oder docker-compose gefunden)", + "connection_mode_compose_error": "Serveromgevingsabschnitt in docker-compose.yml nicht gefunden", + "connection_mode_source_saved": "Opgeslagen in", + "connection_mode_source_defaults": "Server-Standardwerte verwenden (nicht uber Panel beschreibbar)", + "connection_mode_runtime": "Aktiver Server", + "advanced_title": "Konfigurationsbestanden", + "advanced_desc": "Serverkonfigurationsbestanden direct bearbeiten. Anderungen erfordern moglicherweise einen Serviceherstart. Vor jedem Opslaan wird eine Back-up erstellt.", + "advanced_warning": "Diese Bestanden enthalten Geheimen (API-Schlussel, Databasepassworter, Sessiegeheimse). Nur bearbeiten, wenn Sie wissen, was Sie tun. Falsche Syntax kann verhindern, dass der Server startet.", + "advanced_files_label": "Bestanden", + "advanced_select_file": "Eine Bestand aus der Liste auswahlen, um deren Inhalt anzuzeigen oder zu bearbeiten.", + "advanced_reload": "Herladen", + "advanced_save": "Bestand opslaan", + "advanced_apply_restart": "Toepassen (Service neu starten)", + "advanced_saved": "Konfigurationsbestand opgeslagen", + "advanced_restart_after_save": "Konfiguration opgeslagen. Den betroffenen Service jetzt neu starten, damit die Anderungen wirksam werden?", + "advanced_restart_confirm": "Die zugehorigen BetterDesk-Servicee neu starten? Aktive Verbindingen konnen kurz unterbrochen werden.", + "advanced_restart_console_confirm": "Den Webkonsolenservice neu starten? Ihre Browsersitzung wird kurz getrennt und die Seite wird neu geladen, wenn die Konsole wieder verfugbar ist.", + "advanced_restart_started": "Serviceherstart eingeleitet", + "advanced_restart_done": "Konsole neu gestartet — Seite wird neu geladen…", + "advanced_restart_polling": "Warten, bis die Konsole wieder online ist…", + "advanced_restart_timeout": "Herstart wurde gesendet, aber die Konsole hat nicht rechtzeitig geantwortet. Systemd/NSSM-Protokolle prufen und manuell herladen.", + "advanced_restart_failed": "Serviceherstart mislukt (unzureichende Berechtigungen oder Service nicht installiert)", + "advanced_save_confirm": "Anderungen an dieser Bestand opslaan? Eine Sicherung der vorherigen Version wird erstellt.", + "advanced_unsaved_confirm": "Sie haben unopgeslagene Anderungen. Diese verwerfen?", + "advanced_no_files": "Keine Konfigurationsbestanden auf diesem System verfugbar.", + "advanced_readonly": "schreibgeschutzt", + "advanced_missing": "fehlend", + "advanced_new_file": "Neue Bestand (wird erst beim Opslaan erstellt)", + "advanced_new_file_hint": "Neue Bestand — Inhalt hinzufugen und opslaan", + "advanced_backup_created": "Sicherung erstellt", + "advanced_restart_console": "Den Webkonsolenservice neu starten (z. B. systemctl restart betterdesk-console), damit .env-Anderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Anderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausfuhren: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Service neu starten, damit die Anderungen wirksam werden.", + "advanced_error_unknown": "Onbekende Konfigurationsbestand", + "advanced_error_not_found": "Bestand bestaat niet", + "advanced_error_not_file": "Pfad ist keine regulare Bestand", + "advanced_error_too_large": "Bestand uberschreitet die maximale bearbeitbare Grosse (512 KB)", + "advanced_error_binary": "Binarbestanden konnen nicht im Panel bearbeitet werden", + "advanced_error_invalid": "Ungultiger Bestandinhalt", + "advanced_error_not_writable": "Bestand ist nicht vom Konsolenprozess beschreibbar", + "advanced_file_console-env": "Konsolenomgeving (.env)", + "advanced_file_console-env-local": "Konsolen-Uberschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (service-unit)", + "advanced_file_systemd-server": "systemd: betterdesk-server (service-unit)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Omgeving (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-configuratie)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestratie)", + "advanced_restart_none": "Fur diese Bestand ist kein Serviceherstart erforderlich.", + "enrollment_title": "Gerateregistrierung (RustDesk)", + "enrollment_desc": "Steuern, wie sich neue RustDesk-Clients registrieren und wie Operatoren sie auf der Seite mit den Registrierungsanfragen genehmigen.", + "enrollment_require_approval": "Goedkeuring des Operators erforderlich (Beheerde modus)", + "enrollment_require_approval_hint": "Wenn aktiviert, werden onbekende Clients in die Warteschlange eingereiht, bis ein Operator sie in den Registrierungsanfragen genehmigt.", + "enrollment_rich_approve": "Vollstandiges Goedkeuringsformular (Name, Map, Groepen, Tags)", + "enrollment_rich_approve_hint": "Zeigt einen detaillierten Dialog bei der Goedkeuring von Registrierungs- oder LAN-Registrierungsanfragen an.", + "enrollment_tag_picker": "Tags aus vorhandenen Gerate-Tags auswahlen", + "enrollment_tag_picker_hint": "Ermoglicht Operatoren, Tags aus der auf der Gerateseite verwendeten Liste auszuwahlen, anstatt nur zu tippen.", + "enrollment_open_requests": "Offene Registrierungsanfragen", + "enrollment_pending_count": "{count} ausstehende Registrierungsanfrage(n)" + }, + "audit": { + "time": "Tijd", + "user": "Gebruiker", + "action": "Actie", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Aanmelding mislukt", + "action_logout": "Logout", + "action_password_change": "Wachtwoord gewijzigd", + "action_2fa_enable": "2FA ingeschakeld", + "action_2fa_disable": "2FA uitgeschakeld", + "action_user_create": "Gebruiker aangemaakt", + "action_user_update": "Gebruiker bijgewerkt", + "action_user_delete": "Gebruiker verwijderd", + "action_settings_update": "Instellingen bijgewerkt", + "action_device_ban": "Apparaat geblokkeerd", + "action_device_unban": "Apparaatblokkade opgeheven", + "action_device_delete": "Apparaat verwijderd" + }, + "generator": { + "title": "Clientconfiguratiegenerator", + "subtitle": "Genereer configuratie voor RustDesk-clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Vroege functie — de agentbundelgenerator is in actieve ontwikkeling.", + "config_options": "Configuratieopties", + "server_address": "Serveradres", + "server_address_hint": "Domein of IP-adres van uw server", + "custom_port": "Aangepaste poort", + "port_hint": "Leeg laten voor standaard (21116)", + "relay_server": "Relayserver", + "relay_placeholder": "Zelfde als ID-server indien leeg", + "relay_hint": "Optioneel: afzonderlijk relayserveradres", + "include_key": "Publieke sleutel opnemen in configuratie", + "generate": "Configuratie genereren", + "output": "Configuratie-uitvoer", + "usage_title": "Verbindingsdetails", + "generated": "Configuratie gegenereerd", + "server_required": "Serveradres is vereist", + "nothing_to_copy": "Genereer eerst een configuratie", + "bundles_title": "Agentpakketten", + "new_bundle": "Nieuw pakket", + "editor_title": "Pakketeditor", + "empty_state": "Selecteer links een pakket of maak een nieuw pakket aan om te beginnen.", + "loading": "Laden…", + "no_bundles": "Nog geen pakketten. Maak uw eerste pakket aan.", + "bundle_name": "Pakketnaam", + "bundle_name_hint": "Alleen een intern label — wordt niet aan eindgebruikers getoond.", + "short_link": "Korte downloadlink", + "short_link_hint": "Gebruikt in de openbare URL (/d/…). Alleen kleine letters, cijfers en streepjes (2–32 tekens). Automatisch ingevuld vanuit pakketnaam — verkort voor eenvoudiger delen (bijv. acme).", + "branding_section": "Branding", + "company_name": "Bedrijfs-/merknaam", + "short_text": "Korte beschrijving", + "contact_email": "Contact-e-mail", + "contact_phone": "Contacttelefoon", + "contact_url": "Contactwebsite", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG of WebP. Maximaal 256 KB.", + "logo_clear": "Logo verwijderen", + "primary_color": "Primaire kleur", + "accent_color": "Kopkleur", + "default_lang": "Standaardtaal", + "allow_unattended": "Onbeheerde toegang toestaan", + "allow_unattended_hint": "Wanneer ingeschakeld toont de agent een blijvend wachtwoord voor operatortoegang.", + "save": "Pakket opslaan", + "revoke": "Intrekken", + "unrevoke": "Opnieuw activeren", + "revoked": "Ingetrokken", + "preview_title": "Livevoorbeeld", + "preview_hint": "Geschatte weergave van het agentvenster voor eindgebruikers.", + "preview_default_name": "BetterDesk-ondersteuning", + "preview_status_ready": "Gereed", + "preview_id": "Uw ID", + "preview_password": "Wachtwoord", + "preview_chat": "Chatten met ondersteuning", + "preview_settings": "Instellingen (alleen admin)", + "preview_quit": "Afsluiten (alleen admin)", + "download_link_title": "Downloadlink", + "download_link_hint": "Deel deze link met eindgebruikers. Zij zien een downloadpagina met uw branding. Oude hex-links blijven werken nadat u de korte link wijzigt.", + "open_portal": "Openen", + "created": "Pakket aangemaakt", + "saved": "Pakket opgeslagen", + "deleted": "Pakket verwijderd", + "revoked_ok": "Pakket ingetrokken", + "unrevoked_ok": "Pakket opnieuw geactiveerd", + "link_copied": "Link naar klembord gekopieerd", + "copy_failed": "Automatisch kopiëren mislukt — kopieer handmatig", + "unsaved_confirm": "Niet-opgeslagen wijzigingen verwerpen?", + "confirm_revoke": "Dit pakket intrekken? De downloadlink werkt daarna niet meer.", + "confirm_unrevoke": "Dit pakket opnieuw activeren?", + "confirm_delete": "Dit pakket permanent verwijderen? Deze actie kan niet ongedaan worden gemaakt.", "errors": { - "forbidden_title": "Toegang geweigerd", - "forbidden_message": "U heeft geen toestemming om deze pagina te bekijken.", - "not_found_title": "Pagina niet gevonden", - "not_found_message": "De pagina die u zoekt bestaat niet of is verplaatst.", - "server_error_title": "Serverfout", - "server_error_message": "Er is iets misgegaan. Probeer het later opnieuw.", - "go_home": "Naar startpagina", - "try_again": "Opnieuw proberen", - "load_devices_failed": "Laden van apparaten mislukt", - "load_key_failed": "Laden van sleutel mislukt", - "load_qr_failed": "Laden van QR mislukt", - "load_audit_failed": "Laden van auditlogboek mislukt", - "load_users_failed": "Laden van gebruikers mislukt", - "load_folders_failed": "Laden van mappen mislukt", - "download_failed": "Download mislukt", - "logout_failed": "Uitloggen mislukt", - "password_change_failed": "Wachtwoord wijzigen mislukt", - "language_change_failed": "Taal wijzigen mislukt", - "ban_failed": "Verbannen van apparaat mislukt", - "unban_failed": "Opheffen van verbanning mislukt", - "delete_failed": "Verwijderen van apparaat mislukt", - "change_id_failed": "Wijzigen van apparaat-ID mislukt", - "bulk_delete_failed": "Verwijderen van apparaten mislukt", - "sync_failed": "Synchronisatie mislukt", - "error": "Fout", - "not_found": "Niet gevonden", - "server_error": "Serverfout", - "load_device_failed": "Laden van apparaat mislukt", - "load_orgs_failed": "Organisaties konden niet worden geladen" + "validation_failed": "Validatie mislukt", + "name_required": "Pakketnaam is verplicht", + "company_name_required": "Bedrijfsnaam is verplicht", + "logo_invalid": "Het logo moet een geldig afbeeldingsbestand zijn", + "logo_too_large": "Het logo mag maximaal 256 KB zijn", + "logo_read_failed": "Logobestand kon niet worden gelezen", + "primary_color_invalid": "Primaire kleur moet een hexwaarde zijn (bijv. #2563eb)", + "accent_color_invalid": "Kopkleur moet een hexwaarde zijn (bijv. #1e293b)", + "contact_url_invalid": "Contactwebsite moet een geldige URL zijn", + "server_host_required": "Offentliche Serveradresse ist erforderlich", + "server_host_invalid": "Gultigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivitat prufen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Korte link mag alleen kleine letters, cijfers en streepjes bevatten", + "slug_too_short": "Korte link moet minimaal 2 tekens zijn", + "slug_too_long": "Korte link mag maximaal 32 tekens zijn", + "slug_taken": "Deze korte link wordt al door een ander pakket gebruikt" }, - "remote": { - "title": "Extern bureaublad", - "connecting": "Verbinden...", - "waiting_password": "Wacht op wachtwoord", - "authenticating": "Authenticeren...", - "streaming": "Verbonden", - "disconnected": "Verbinding verbroken", - "error": "Fout", - "status_idle": "Inactief", - "password_required": "Wachtwoord vereist", - "enter_password_for": "Voer het wachtwoord in voor apparaat", - "password_placeholder": "Apparaatwachtwoord", - "connect": "Verbinden", - "reconnect": "Opnieuw verbinden", - "disconnect": "Verbinding verbreken", - "back_to_devices": "Terug naar apparaten", - "fullscreen": "Volledig scherm", - "toggle_audio": "Audio in-/uitschakelen", - "send_keys": "Toetsen verzenden", - "scale_mode": "Schaalmodus", - "scale_fit": "Passend in venster", - "scale_fill": "Venster vullen", - "scale_original": "Origineel formaat (1:1)", - "scale_stretch": "Uitrekken", - "actions": "Acties", - "lock_screen": "Scherm vergrendelen", - "restart_remote": "Extern apparaat herstarten", - "refresh_screen": "Scherm vernieuwen", - "clipboard_paste": "Plakken vanaf klembord", - "block_input": "Invoer blokkeren", - "display_settings": "Scherminstellingen", - "image_quality": "Beeldkwaliteit", - "quality_best": "Beste kwaliteit", - "quality_balanced": "Gebalanceerd", - "quality_low": "Prestaties", - "show_cursor": "Externe cursor tonen", - "lock_after_session": "Vergrendelen na sessie", - "privacy_mode": "Privacymodus", - "disable_clipboard": "Klembord uitschakelen", - "chat": "Chat", - "chat_placeholder": "Typ een bericht...", - "record": "Scherm opnemen", - "view_only": "Alleen weergeven", - "pin_toolbar": "Werkbalk vastzetten", - "monitors": "Monitors", - "select_monitor": "Monitor selecteren", - "quality_speed": "Snelheid", - "quality_quality": "Kwaliteit", - "recording_started": "Opname gestart", - "recording_stopped": "Opname gestopt", - "download_recording": "Opname downloaden", - "e2e_encrypted": "End-to-end versleuteld", - "e2e_key_exchange": "Sleuteluitwisseling bezig...", - "confirm_restart": "Weet u zeker dat u het externe apparaat wilt herstarten?", - "webcodecs_not_supported": "Uw browser ondersteunt de WebCodecs API niet. Gebruik Chrome 94+ of Edge 94+.", - "webcodecs_insecure_context": "WebCodecs niet beschikbaar via HTTP. Video gebruikt de softwaredecoder. Gebruik HTTPS voor betere prestaties.", - "webcodecs_fallback_active": "Software videodecoder actief (beperkte prestaties)", - "click_to_start": "Klik om te starten", - "autoplay_blocked": "De browser vereist gebruikersinteractie om video en audio te starten.", - "start_playback": "Afspelen starten", - "new_connection": "Nieuwe verbinding", - "device_id_placeholder": "Voer apparaat-ID in", - "http_warning": "HTTP-modus: beperkt tot H.264 software-decodering (~15 FPS). Gebruik HTTPS voor volledige prestaties (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Bestandsoverdracht", - "file_upload": "Uploaden", - "file_download": "Downloaden", - "file_empty": "Deze map is leeg", - "file_transfers": "Overdrachten", - "file_complete": "Voltooid", - "file_error": "Overdracht mislukt", - "file_show_hidden": "Verborgen bestanden tonen", - "file_new_folder": "Nieuwe map", - "file_new_folder_prompt": "Voer mapnaam in:", - "file_parent": "Bovenliggende map", - "file_root": "Hoofdmap", - "file_rename": "Hernoemen", - "file_rename_prompt": "Voer nieuwe naam in:", - "file_delete_confirm": "Weet u zeker dat u dit item wilt verwijderen?", - "file_cancelled": "Overdracht geannuleerd", - "2fa_required": "Tweefactorcode vereist", - "2fa_hint": "Voer de zescijferige TOTP-code in om de sessie voort te zetten.", - "2fa_invalid": "Ongeldige 2FA-code", - "verify": "Verify", - "use_cdap_fallback": "CDAP-viewer gebruiken", - "cdap_fallback_hint": "Open de lichte JPEG-polling viewer die bd-signal/CDAP gebruikt in plaats van de RustDesk relay. Handig wanneer de peer offline is op de relay maar bereikbaar via het agentbeheerkanaal.", - "clipboard_empty": "Het klembord is leeg", - "clipboard_denied": "Toegang tot klembord geweigerd. HTTPS is vereist of de machtiging is niet verleend.", - "file_loading": "Laden...", - "file_timeout": "Het externe apparaat reageerde niet. Bestandsoverdracht wordt mogelijk niet ondersteund of is uitgeschakeld op de externe computer.", - "codec": "Videocodec", - "codec_auto": "Automatisch (aanbevolen)" + "legacy_title": "Generator voor clientconfiguratie", + "connection_section": "Serververbinding", + "server_host": "Offentliche Serveradresse", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "server_host_hint": "Domainname oder offentliche IP-Adresse, unter der Endbenutzer Ihren BetterDesk-Server erreichen. Port wird aus der Konsolenkonfiguration ubernommen.", + "use_https": "HTTPS / WSS gebruiken (aanbevolen)", + "enrollment_token": "Gerateregistrierung", + "enrollment_token_pending": "Pro Gerat nach Goedkeuring", + "enrollment_token_set": "Pro Gerat — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Gerate im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlussel pro Computer aus.", + "enrollment_per_device": "Pro Gerat — in Registrierungen genehmigen", + "background_color": "Vensterachtergrond", + "surface_color": "Kaartachtergrond", + "text_color": "Tekstkleur", + "text_muted_color": "Gedampfte Tekstkleur", + "status_ready_color": "Farbe des Gereed-indicators", + "header_text_color": "Koptekstfarbe", + "builds_title": "Client-builds", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme fur jede Plattform. Nach der Behebung von Toolchain-Foutn oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket opslaan oder 'Alles opnieuw bouwen' klicken.", + "rebuild_all": "Alles opnieuw bouwen", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "rebuild_confirm": "Alle Plattform-Installer fur dieses Paket neu erstellen? Vorhandene fertige Artefakte werden ersetzt.", + "build_status_ready": "Gereed", + "build_status_pending": "In wachtrij", + "build_status_building": "Bezig met bouwen", + "build_status_failed": "Mislukt", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} mislukt", + "build_error_hint": "Build-Fout", + "preview_help": "Hulp vragen" + }, + "server": { + "port": "Poort", + "api_port": "API-poort", + "id_server": "ID-server", + "relay_server": "Relayserver", + "api_key": "API-sleutel" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Verbannen", + "running": "Actief", + "stopped": "Gestopt", + "unknown": "Onbekend", + "checking": "Controleren...", + "label": "Status", + "no_signal": "Geen signaal" + }, + "actions": { + "refresh": "Vernieuwen", + "copy": "Kopiëren", + "connect": "Verbinden", + "connect_desktop": "Verbinden via desktopclient", + "remote_viewer": "Externe viewer", + "web_remote": "Web-remote", + "details": "Details", + "edit": "Bewerken", + "delete": "Verwijderen", + "ban": "Verbannen", + "unban": "Verbanning opheffen", + "save": "Opslaan", + "cancel": "Annuleren", + "confirm": "Bevestigen", + "close": "Sluiten", + "clear": "Wissen", + "ok": "OK", + "saved": "Succesvol opgeslagen", + "back": "Terug", + "create": "Aanmaken", + "dismiss": "Negeren", + "view_all": "Alles bekijken", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Toevoegen", + "remove": "Verwijderen" + }, + "time": { + "just_now": "Zojuist", + "seconds_ago": "{count} seconde(n) geleden", + "minutes_ago": "{count} minu(u)t(en) geleden", + "hours_ago": "{count} u(u)r(en) geleden", + "days_ago": "{count} dag(en) geleden", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Gebruikersbeheer", + "subtitle": "Beheer gebruikers en consolemachtigingen", + "add_user": "Gebruiker toevoegen", + "edit_user": "Gebruiker bewerken", + "username": "Gebruikersnaam", + "username_placeholder": "Voer gebruikersnaam in", + "username_hint": "3-32 tekens, alleen letters, cijfers en underscores", + "password": "Wachtwoord", + "password_placeholder": "Voer wachtwoord in", + "password_hint": "Minimaal 8 tekens met hoofdletters, kleine letters, cijfers en symbolen", + "password_leave_empty": "Leeg laten om huidig te behouden", + "role": "Rol", + "role_admin": "Beheerder", + "role_operator": "Operator", + "role_viewer": "Waarnemer", + "role_hint": "Waarnemers kunnen alleen gegevens bekijken, operators kunnen apparaten beheren, beheerders hebben volledige toegang", + "created": "Aangemaakt", + "last_login": "Laatste inlog", + "never": "Nooit", + "actions": "Acties", + "create": "Gebruiker aanmaken", + "edit": "Bewerken", + "reset_password": "Wachtwoord herstellen", + "new_password": "Nieuw wachtwoord", + "delete_title": "Gebruiker verwijderen", + "delete_confirm": "Weet u zeker dat u gebruiker {username} wilt verwijderen?", + "delete_success": "Gebruiker succesvol verwijderd", + "user_created": "Gebruiker succesvol aangemaakt", + "user_updated": "Gebruiker succesvol bijgewerkt", + "password_reset_success": "Wachtwoord succesvol hersteld", + "empty_title": "Geen gebruikers gevonden", + "empty_text": "Voeg gebruikers toe om consoletoegang te beheren", + "fill_required": "Vul alle verplichte velden in", + "invalid_username": "Gebruikersnaam moet 3-32 tekens zijn, alleen letters, cijfers en underscores", + "username_exists": "Gebruikersnaam bestaat al", + "weak_password": "Wachtwoord is te zwak", + "password_too_short": "Wachtwoord moet minimaal 8 tekens zijn", + "invalid_role": "Ongeldige rol", + "cannot_demote_self": "U kunt uzelf niet degraderen", + "cannot_delete_self": "U kunt uw eigen account niet verwijderen", + "last_admin": "Kan de laatste beheerder niet verwijderen", + "admin_only": "Deze functie is alleen beschikbaar voor beheerders", + "password_required": "Wachtwoord is vereist", + "not_found": "Gebruiker niet gevonden", + "strength_weak": "Zwak", + "strength_medium": "Gemiddeld", + "strength_strong": "Sterk", + "security_tips_title": "Beveiligingstips", + "tip_strong_passwords": "Gebruik sterke, unieke wachtwoorden voor elke gebruiker", + "tip_unique_accounts": "Maak individuele accounts aan voor elke persoon", + "tip_viewer_role": "Gebruik de waarnemerrol voor gebruikers die alleen leestoegang nodig hebben", + "tip_operator_role": "Gebruik de operatorrol voor gebruikers die apparaten moeten beheren maar geen gebruikers", + "tip_audit_logs": "Controleer regelmatig de auditlogs op verdachte activiteit", + "role_pro": "Professioneel", + "role_super_admin": "Super Admin", + "role_server_admin": "Serverbeheerder", + "role_global_admin": "Globale beheerder", + "organizations": "Organisaties", + "user_organizations": "Organisaties voor {username}", + "no_organizations": "Geen organisaties", + "org_removed": "Gebruiker uit organisatie verwijderd", + "server_role_label": "Serverrol", + "server_role_hint": "Bepaalt wat de gebruiker in de hele console kan doen (paneeltoegang, serverconfiguratie, audit enz.).", + "org_membership_section": "Organisatielidmaatschap", + "org_membership_hint": "Een gebruiker kan lid zijn van meerdere organisaties. De organisatierol bepaalt alleen machtigingen binnen die organisatie en staat los van de serverrol hierboven.", + "column_organizations": "Organisaties", + "no_orgs_short": "—", + "org_count_one": "{count} organisatie", + "org_count_many": "{count} organisaties", + "all_orgs_assigned": "De gebruiker is al lid van elke organisatie.", + "user_groups": "Gebruikersgroepen", + "user_groups_hint": "Gebruikersgroepen kunnen toegang geven tot geselecteerde apparaatgroepen.", + "loading_user_groups": "Gebruikersgroepen laden...", + "no_user_groups": "Geen gebruikersgroepen beschikbaar", + "create_user_group": "Groep maken", + "edit_user_group": "Gebruikersgroep bewerken", + "delete_user_group": "Gebruikersgroep verwijderen", + "delete_user_group_confirm": "Gebruikersgroep {name} verwijderen? Leden verliezen de via deze groep verleende toegang.", + "user_group_created": "Gebruikersgroep aangemaakt", + "user_group_updated": "Gebruikersgroep bijgewerkt", + "user_group_deleted": "Gebruikersgroep verwijderd", + "user_group_not_found": "Gebruikersgroep niet gevonden", + "group_name": "Groepsnaam", + "group_name_placeholder": "Operatorgroep", + "group_note": "Note", + "group_note_placeholder": "Optionele notitie", + "group_name_required": "Groepsnaam is verplicht", + "group_members_count": "{count} leden", + "provider": "Provider", + "provider_local": "Lokaal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Vom Identitatsprovider verwaltet", + "provider_managed_hint": "Dieses Konto wird von einem externen Identitatsprovider (LDAP/AD oder SSO) verwaltet. Passwort und Rolle werden vom Provider gesteuert und konnen hier nicht geandert werden." + }, + "folders": { + "title": "Mappen", + "create": "Map aanmaken", + "edit": "Map bewerken", + "delete": "Map verwijderen", + "name": "Mapnaam", + "name_placeholder": "Voer mapnaam in", + "name_required": "Mapnaam is vereist", + "name_too_long": "Mapnaam is te lang (max 50 tekens)", + "color": "Kleur", + "icon": "Pictogram", + "not_found": "Map niet gevonden", + "delete_confirm": "Weet u zeker dat u deze map wilt verwijderen? Apparaten worden losgekoppeld.", + "delete_success": "Map succesvol verwijderd", + "created": "Map succesvol aangemaakt", + "updated": "Map succesvol bijgewerkt", + "no_devices_selected": "Geen apparaten geselecteerd", + "devices_moved": "Apparaten succesvol verplaatst", + "device_assigned": "Apparaat toegewezen aan map", + "unassigned": "Niet toegewezen", + "all_devices": "Alle apparaten", + "drag_hint": "Sleep apparaten naar mappen om ze te ordenen", + "move_to": "Verplaatsen naar", + "toggle_sidebar": "Zijbalk in-/uitschakelen" + }, + "errors": { + "forbidden_title": "Toegang geweigerd", + "forbidden_message": "U heeft geen toestemming om deze pagina te bekijken.", + "not_found_title": "Pagina niet gevonden", + "not_found_message": "De pagina die u zoekt bestaat niet of is verplaatst.", + "server_error_title": "Serverfout", + "server_error_message": "Er is iets misgegaan. Probeer het later opnieuw.", + "go_home": "Naar startpagina", + "try_again": "Opnieuw proberen", + "load_devices_failed": "Laden van apparaten mislukt", + "load_key_failed": "Laden van sleutel mislukt", + "load_qr_failed": "Laden van QR mislukt", + "load_audit_failed": "Laden van auditlogboek mislukt", + "load_users_failed": "Laden van gebruikers mislukt", + "load_folders_failed": "Laden van mappen mislukt", + "download_failed": "Download mislukt", + "logout_failed": "Uitloggen mislukt", + "password_change_failed": "Wachtwoord wijzigen mislukt", + "language_change_failed": "Taal wijzigen mislukt", + "ban_failed": "Verbannen van apparaat mislukt", + "unban_failed": "Opheffen van verbanning mislukt", + "delete_failed": "Verwijderen van apparaat mislukt", + "change_id_failed": "Wijzigen van apparaat-ID mislukt", + "bulk_delete_failed": "Verwijderen van apparaten mislukt", + "sync_failed": "Synchronisatie mislukt", + "error": "Fout", + "not_found": "Niet gevonden", + "server_error": "Serverfout", + "load_device_failed": "Laden van apparaat mislukt", + "load_orgs_failed": "Organisaties konden niet worden geladen" + }, + "remote": { + "title": "Extern bureaublad", + "connecting": "Verbinden...", + "waiting_password": "Wacht op wachtwoord", + "authenticating": "Authenticeren...", + "streaming": "Verbonden", + "disconnected": "Verbinding verbroken", + "error": "Fout", + "status_idle": "Inactief", + "password_required": "Wachtwoord vereist", + "enter_password_for": "Voer het wachtwoord in voor apparaat", + "password_placeholder": "Apparaatwachtwoord", + "connect": "Verbinden", + "reconnect": "Opnieuw verbinden", + "disconnect": "Verbinding verbreken", + "back_to_devices": "Terug naar apparaten", + "fullscreen": "Volledig scherm", + "toggle_audio": "Audio in-/uitschakelen", + "send_keys": "Toetsen verzenden", + "scale_mode": "Schaalmodus", + "scale_fit": "Passend in venster", + "scale_fill": "Venster vullen", + "scale_original": "Origineel formaat (1:1)", + "scale_stretch": "Uitrekken", + "actions": "Acties", + "lock_screen": "Scherm vergrendelen", + "restart_remote": "Extern apparaat herstarten", + "refresh_screen": "Scherm vernieuwen", + "clipboard_paste": "Plakken vanaf klembord", + "block_input": "Invoer blokkeren", + "display_settings": "Scherminstellingen", + "image_quality": "Beeldkwaliteit", + "quality_best": "Beste kwaliteit", + "quality_balanced": "Gebalanceerd", + "quality_low": "Prestaties", + "show_cursor": "Externe cursor tonen", + "lock_after_session": "Vergrendelen na sessie", + "privacy_mode": "Privacymodus", + "disable_clipboard": "Klembord uitschakelen", + "chat": "Chat", + "chat_placeholder": "Typ een bericht...", + "record": "Scherm opnemen", + "view_only": "Alleen weergeven", + "pin_toolbar": "Werkbalk vastzetten", + "monitors": "Monitors", + "select_monitor": "Monitor selecteren", + "quality_speed": "Snelheid", + "quality_quality": "Kwaliteit", + "recording_started": "Opname gestart", + "recording_stopped": "Opname gestopt", + "download_recording": "Opname downloaden", + "e2e_encrypted": "End-to-end versleuteld", + "e2e_key_exchange": "Sleuteluitwisseling bezig...", + "confirm_restart": "Weet u zeker dat u het externe apparaat wilt herstarten?", + "webcodecs_not_supported": "Uw browser ondersteunt de WebCodecs API niet. Gebruik Chrome 94+ of Edge 94+.", + "webcodecs_insecure_context": "WebCodecs niet beschikbaar via HTTP. Video gebruikt de softwaredecoder. Gebruik HTTPS voor betere prestaties.", + "webcodecs_fallback_active": "Software videodecoder actief (beperkte prestaties)", + "click_to_start": "Klik om te starten", + "autoplay_blocked": "De browser vereist gebruikersinteractie om video en audio te starten.", + "start_playback": "Afspelen starten", + "new_connection": "Nieuwe verbinding", + "device_id_placeholder": "Voer apparaat-ID in", + "http_warning": "HTTP-modus: beperkt tot H.264 software-decodering (~15 FPS). Gebruik HTTPS voor volledige prestaties (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Bestandsoverdracht", + "file_upload": "Uploaden", + "file_download": "Downloaden", + "file_empty": "Deze map is leeg", + "file_transfers": "Overdrachten", + "file_complete": "Voltooid", + "file_error": "Overdracht mislukt", + "file_show_hidden": "Verborgen bestanden tonen", + "file_new_folder": "Nieuwe map", + "file_new_folder_prompt": "Voer mapnaam in:", + "file_parent": "Bovenliggende map", + "file_root": "Hoofdmap", + "file_rename": "Hernoemen", + "file_rename_prompt": "Voer nieuwe naam in:", + "file_delete_confirm": "Weet u zeker dat u dit item wilt verwijderen?", + "file_cancelled": "Overdracht geannuleerd", + "2fa_required": "Tweefactorcode vereist", + "2fa_hint": "Voer de zescijferige TOTP-code in om de sessie voort te zetten.", + "2fa_invalid": "Ongeldige 2FA-code", + "verify": "Verify", + "use_cdap_fallback": "CDAP-viewer gebruiken", + "cdap_fallback_hint": "Open de lichte JPEG-polling viewer die bd-signal/CDAP gebruikt in plaats van de RustDesk relay. Handig wanneer de peer offline is op de relay maar bereikbaar via het agentbeheerkanaal.", + "clipboard_empty": "Het klembord is leeg", + "clipboard_denied": "Toegang tot klembord geweigerd. HTTPS is vereist of de machtiging is niet verleend.", + "file_loading": "Laden...", + "file_timeout": "Het externe apparaat reageerde niet. Bestandsoverdracht wordt mogelijk niet ondersteund of is uitgeschakeld op de externe computer.", + "codec": "Videocodec", + "codec_auto": "Automatisch (aanbevolen)" + }, + "branding": { + "identity_title": "Merkidentiteit", + "identity_desc": "Pas de applicatienaam en beschrijving aan die in de console worden weergegeven", + "app_name": "Applicatienaam", + "app_description": "Applicatiebeschrijving", + "logo_title": "Logo", + "logo_desc": "Kies hoe uw logo wordt weergegeven in de zijbalk en op de inlogpagina", + "logo_type_icon": "Materiaalpictogram", + "logo_type_svg": "SVG-code", + "logo_type_image": "Afbeeldings-URL", + "logo_icon_name": "Pictogramnaam", + "logo_icon_hint": "Voer een Material Icons-naam in (bijv: dns, cloud, security). Zie fonts.google.com/icons", + "logo_svg_code": "SVG-code", + "logo_svg_hint": "Plak hier uw SVG-markup. Ondersteunt volledige -elementen met paden en stijlen.", + "logo_image_upload": "Afbeelding uploaden", + "logo_image_choose": "Afbeeldingsbestand kiezen", + "logo_image_hint": "PNG, JPG, GIF, WebP of SVG. Max 1,5 MB. Afbeelding wordt opgeslagen als base64-gegevens.", + "logo_image_url": "Afbeeldingsgegevens / URL", + "logo_image_url_hint": "Automatisch ingevuld bij uploaden of plak handmatig een URL.", + "logo_image_too_large": "Afbeelding is te groot. Maximale grootte: 1,5 MB.", + "logo_image_invalid_type": "Ongeldig bestandstype. Gebruik PNG, JPG, GIF, WebP of SVG.", + "preview": "Voorbeeld", + "colors_title": "Kleurenschema", + "colors_desc": "Pas het kleurenpalet aan. Laat leeg voor standaardwaarden.", + "colors_backgrounds": "Achtergronden", + "colors_text": "Tekst", + "colors_accents": "Accentkleuren", + "colors_borders": "Randen", + "import_export_title": "Importeren / Exporteren", + "import_export_desc": "Sla uw thema op als JSON-bestand of importeer er een van een andere instantie", + "export_theme": "Thema exporteren", + "import_theme": "Thema importeren", + "reset_defaults": "Standaardinstellingen herstellen", + "save_branding": "Huisstijl opslaan", + "saved": "Huisstijl succesvol opgeslagen. Herladen...", + "exported": "Thema geëxporteerd", + "imported": "Thema succesvol geïmporteerd. Herladen...", + "import_error": "Importeren van thema mislukt. Ongeldig bestandsformaat.", + "reset_confirm": "Weet u zeker dat u de huisstijl wilt herstellen naar standaard? Deze actie kan niet ongedaan worden gemaakt.", + "reset_success": "Huisstijl hersteld naar standaard. Herladen...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Primaire tekst die als merklogo wordt weergegeven", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Secundaire tekst onder het logo (bijv. productnaam of slogan)", + "logo_upload_success": "Logo succesvol geüpload.", + "typography_title": "Typography", + "typography_desc": "Kies lettertypen voor koppen en lopende tekst. Lettertypen worden naar de server gedownload voor self-hosting.", + "font_heading": "Lettertype voor koppen", + "font_heading_hint": "Gebruikt voor koppen (H1-H6) en tekstlogo", + "font_body": "Body Font", + "font_body_hint": "Gebruikt voor lopende tekst en UI-elementen", + "font_search_placeholder": "Lettertypen zoeken...", + "font_system_default": "Systeemstandaard", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "Lettertypen gedownload op de server", + "powered_by": "Entwickelt von", + "background_title": "Hintergrund & Erscheinungsbild", + "background_desc": "Ein Konsolen-Hintergrundbild, Farbverlauf oder einfarbigen Hintergrund festlegen. Karten schweben daruber.", + "bg_type_none": "Keiner", + "bg_type_color": "Einfarbig", + "bg_type_gradient": "Farbverlauf", + "bg_type_image": "Bild", + "bg_color": "Hintergrundfarbe", + "bg_gradient": "CSS-Farbverlauf", + "bg_gradient_hint": "Beliebiger gultiger CSS-Farbverlauf, z. B. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Hintergrundbild hochladen", + "bg_image_choose": "Bildbestand auswahlen", + "bg_image_hint": "PNG, JPG, WebP oder GIF. Maximal 8 MB. Auf dem Server opgeslagen.", + "bg_image_url": "Bildpfad / URL", + "bg_size": "Bildgrosse", + "bg_size_cover": "Abdecken (Bildschirm fullen)", + "bg_size_contain": "Einpassen (Contain)", + "bg_size_auto": "Auto (origineel)", + "bg_blur": "Hintergrundunscharfe", + "bg_overlay": "Dunkle Uberlagerung", + "bg_overlay_hint": "Verdunkelt den Hintergrund fur bessere Lesbarkeit des Textes.", + "bg_image_too_large": "Bild ist zu gross. Maximale Grosse betragt 8 MB.", + "bg_image_invalid_type": "Ungultiger Bestandtyp. Bitte PNG, JPG, WebP oder GIF verwenden.", + "bg_upload_success": "Hintergrundbild erfolgreich hochgeladen.", + "login_title": "Anmeldeseite", + "login_desc": "Uberschrift, Untertitel und Hintergrund des Anmeldebildschirms anpassen.", + "login_heading": "Anmeldeuberschrift", + "login_heading_placeholder": "Willkommen zuruck", + "login_subheading": "Anmeldeuntertitel", + "login_subheading_placeholder": "Bei Ihrem Konto anmelden", + "login_bg_inherit": "Wie die Konsole", + "agent_title": "Agent-Downloadseite", + "agent_desc": "Das offentliche Agent-Downloadportal fur Endbenutzer anpassen.", + "agent_show_powered": "\"Powered by BetterDesk\" anzeigen", + "agent_show_powered_hint": "Die BetterDesk-Zuschreibung in der Fusszeile des Downloadportals anzeigen.", + "footer_title": "Fusszeile & Copyright", + "footer_desc": "Eine benutzerdefinierte Fusszeile hinzufugen, die auf dem Anmeldebildschirm und in der Konsolenseitenleiste angezeigt wird.", + "footer_text": "Fusszeilentext", + "footer_text_hint": "z. B. ein Urheberrechtshinweis oder Firmenname.", + "show_powered": "BetterDesk-Zuschreibung anzeigen", + "show_powered_hint": "Den BetterDesk-Namen und die Version in der Anmeldefusszeile und Seitenleiste anzeigen.", + "custom_css_title": "Benutzerdefiniertes CSS", + "custom_css_desc": "Geavanceerd: Benutzerdefiniertes CSS einfugen, das auf der gesamten Konsole und der Anmeldeseite angewendet wird.", + "custom_css_hint": "Mit Vorsicht verwenden. Ungultige oder unsichere Regeln werden bereinigt. Maximal 20.000 Zeichen." + }, + "device_detail": { + "tab_overview": "Overzicht", + "tab_tags": "Tags en notities", + "tab_actions": "Acties", + "section_identity": "Identiteit", + "section_network": "Netwerk", + "section_timestamps": "Tijdstempels", + "section_connect": "Verbinding", + "section_manage": "Beheer", + "folder": "Map", + "status_tier": "Statusniveau", + "device_banned": "Dit apparaat is verbannen", + "no_reason": "Geen reden opgegeven", + "tags": "Tags", + "no_tags": "Geen tags toegewezen aan dit apparaat", + "tag_placeholder": "Voer een tagnaam in...", + "add_tag": "Toevoegen", + "tag_exists": "Deze tag bestaat al", + "notes": "Notities", + "notes_placeholder": "Notities over dit apparaat toevoegen...", + "danger_zone": "Gevarenzone", + "action_connect_web": "Web remote", + "action_connect_web_desc": "Verbinden via browser extern bureaublad", + "action_native_remote": "BetterDesk extern", + "action_native_remote_desc": "Native JPEG-stream — geen plugin vereist", + "action_connect_desktop": "Desktopclient", + "action_connect_desktop_desc": "Openen in desktop-client-app", + "action_change_id_desc": "Wijzig het registratie-ID van het apparaat", + "action_ban_desc": "Voorkom dat dit apparaat verbinding maakt", + "action_unban_desc": "Sta dit apparaat weer toe om verbinding te maken", + "action_delete_desc": "Verwijder dit apparaat permanent", + "tab_hardware": "Hardware", + "tab_metrics": "Metrieken", + "section_system": "Systeem", + "section_cpu": "Processor", + "section_memory": "Geheugen", + "section_displays": "Beeldschermen", + "section_encoding": "Coderingscapaciteit", + "section_live_metrics": "Live metrics", + "section_current_usage": "Huidig gebruik", + "section_usage_history": "Gebruiksgeschiedenis", + "os": "Besturingssysteem", + "version": "Clientversie", + "cpu_model": "CPU-model", + "cpu_cores": "CPU-kernen", + "cpu_freq": "CPU-frequentie", + "total_memory": "Totaal geheugen", + "metric_memory": "Geheugen", + "metric_disk": "Schijf", + "metrics_updated": "Bijgewerkt", + "device_groups": "Groepen", + "no_sysinfo": "Geen hardware-informatie beschikbaar", + "no_sysinfo_hint": "Systeeminformatie verschijnt nadat het apparaat een sysinfo-rapport heeft verzonden", + "no_metrics": "Geen metrische gegevens beschikbaar", + "no_metrics_hint": "Metrics verschijnen nadat het apparaat heartbeat-rapporten heeft verzonden", + "chart_oldest": "← Oudste", + "chart_newest": "Nieuwste →", + "tab_services": "Services", + "tab_processes": "Processen", + "tab_events": "Gebeurtenissen", + "tab_activity": "Activiteit", + "tab_files": "Bestanden", + "agent_lazy_hint": "Klik op dit tabblad om live gegevens van de agent te laden", + "agent_offline": "Agent is niet online", + "agent_timeout": "Agent reageerde niet op tijd", + "agent_error": "Gegevens van agent konden niet worden geladen", + "service_name": "Naam", + "service_display": "Weergavenaam", + "service_status": "Status", + "service_start": "Startmodus", + "process_name": "Naam", + "process_user": "Gebruiker", + "process_memory": "Geheugen" + }, + "inventory": { + "title": "Inventaris", + "subtitle": "Hardware- en software-inventaris van beheerde apparaten", + "device_id": "Apparaat-ID", + "hostname": "Hostnaam", + "os": "Besturingssysteem", + "cpu": "CPU", + "cpu_cores": "CPU-kernen", + "cpu_usage": "CPU-gebruik", + "memory": "Geheugen", + "memory_total": "Totaal geheugen", + "memory_used": "Gebruikt geheugen", + "memory_available": "Beschikbaar geheugen", + "memory_usage": "Geheugengebruik", + "swap": "Swap", + "disks": "Schijven", + "disk_count": "Aantal schijven", + "network": "Netwerk", + "network_interfaces": "Netwerkinterfaces", + "software": "Software", + "software_count": "Geïnstalleerde software", + "system": "Systeem", + "kernel": "Kernel", + "architecture": "Architectuur", + "uptime": "Uptime", + "frequency": "Frequentie", + "physical_cores": "Fysieke kernen", + "logical_cores": "Logische kernen", + "model": "Model", + "usage": "Gebruik", + "total": "Totaal", + "used": "Gebruikt", + "available": "Beschikbaar", + "mount_point": "Koppelpunt", + "removable": "Verwisselbaar", + "mac_address": "MAC-adres", + "ip_addresses": "IP-adressen", + "traffic": "Verkeer", + "collect_now": "Nu verzamelen", + "collector_running": "Verzameling bezig", + "collector_stopped": "Verzameling gestopt", + "last_upload": "Laatste upload", + "total_uploads": "Totaal", + "last_seen": "Laatst gezien", + "collected_at": "Verzameld op", + "no_data": "Geen inventarisgegevens beschikbaar. Klik op \"Nu verzamelen\" om systeeminformatie te verkrijgen.", + "no_devices": "Geen apparaten met inventarisgegevens gevonden", + "detail_title": "Apparaat-inventarisdetail", + "telemetry": "Telemetrie", + "view_detail": "Detail bekijken", + "export": "Exporteren", + "refresh": "Vernieuwen" + }, + "tickets": { + "title": "Helpdesk", + "subtitle": "Ondersteuningstickets en probleemregistratie", + "create": "Nieuw ticket", + "edit": "Ticket bewerken", + "delete": "Ticket verwijderen", + "detail": "Ticketdetail", + "ticket_id": "Ticket-ID", + "ticket_title": "Titel", + "description": "Beschrijving", + "status": "Status", + "priority": "Prioriteit", + "category": "Categorie", + "assigned_to": "Toegewezen aan", + "created_by": "Aangemaakt door", + "device": "Apparaat", + "sla_due": "SLA-deadline", + "created_at": "Aangemaakt", + "updated_at": "Bijgewerkt", + "resolved_at": "Opgelost", + "closed_at": "Gesloten", + "status_open": "Openstaand", + "status_in_progress": "In behandeling", + "status_resolved": "Opgelost", + "status_closed": "Gesloten", + "priority_low": "Laag", + "priority_medium": "Gemiddeld", + "priority_high": "Hoog", + "priority_critical": "Kritiek", + "category_general": "Algemeen", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Netwerk", + "category_access": "Toegang", + "category_other": "Overig", + "comments": "Opmerkingen", + "add_comment": "Opmerking toevoegen", + "comment_placeholder": "Schrijf een opmerking...", + "internal_note": "Interne notitie (niet zichtbaar voor eindgebruikers)", + "attachments": "Bijlagen", + "upload_attachment": "Bijlage uploaden", + "download": "Downloaden", + "connect_device": "Verbinden met apparaat", + "no_tickets": "Geen tickets gevonden", + "no_comments": "Geen opmerkingen", + "no_attachments": "Geen bijlagen", + "title_required": "Titel is vereist", + "delete_confirm": "Weet u zeker dat u ticket #{id} wilt verwijderen?", + "delete_success": "Ticket succesvol verwijderd", + "created_success": "Ticket succesvol aangemaakt", + "updated_success": "Ticket succesvol bijgewerkt", + "sla_overdue": "SLA overschreden", + "filter_all": "Alle", + "search_placeholder": "Tickets zoeken...", + "assign_to_me": "Aan mij toewijzen", + "unassign": "Toewijzing verwijderen", + "stats_total": "Totaal", + "stats_open": "Openstaande tickets", + "stats_in_progress": "In behandeling", + "stats_resolved": "Opgelost", + "stats_closed": "Gesloten" + }, + "activity": { + "title": "Activiteitsmonitoring", + "subtitle": "Applicatiegebruik en inactiviteitsregistratie", + "device": "Apparaat", + "hostname": "Hostnaam", + "sessions": "Sessies", + "idle_time": "Inactieve tijd", + "active_time": "Actieve tijd", + "last_report": "Laatste rapport", + "top_apps": "Meest gebruikte applicaties", + "app_name": "Applicatie", + "window_title": "Venstertitel", + "category": "Categorie", + "duration": "Duur", + "started_at": "Gestart", + "ended_at": "Beëindigd", + "session_count": "Aantal sessies", + "total_active": "Totaal actief", + "total_idle": "Totaal inactief", + "detail_count": "Gedetailleerde records", + "no_data": "Geen activiteitsgegevens beschikbaar", + "no_sessions": "Geen sessies geregistreerd", + "filter_from": "Van", + "filter_to": "Tot", + "filter_apply": "Filter toepassen", + "hours": "uren", + "minutes": "minuten", + "seconds": "seconden", + "category_browser": "Browser", + "category_productivity": "Productiviteit", + "category_communication": "Communicatie", + "category_development": "Ontwikkeling", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "Systeem", + "category_other": "Overig", + "summary": "Samenvatting", + "details": "Details", + "refresh": "Vernieuwen", + "search": "Apparaten zoeken...", + "date_range": "Date Range", + "device_id": "Apparaat-ID", + "session_start": "Sessiestart", + "session_end": "Sessieeinde", + "user": "Gebruiker", + "no_activity": "Geen activiteit geregistreerd", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Geen applicaties" + }, + "automation": { + "title": "Automatisering en waarschuwingen", + "subtitle": "Alarmregels, externe commando's en SMTP-configuratie", + "rules": "Alarmregels", + "rules_subtitle": "Definieer voorwaarden die meldingen activeren", + "alerts": "Waarschuwingsgeschiedenis", + "alerts_subtitle": "Bekijk en bevestig geactiveerde waarschuwingen", + "commands": "Externe commando's", + "commands_subtitle": "Verstuur commando's naar externe apparaten", + "smtp": "SMTP-configuratie", + "smtp_subtitle": "Instellingen voor e-mailmeldingen", + "rule_name": "Regelnaam", + "description": "Beschrijving", + "condition_type": "Voorwaardetype", + "condition_op": "Operator", + "condition_value": "Drempelwaarde", + "severity": "Ernst", + "scope_device": "Doelapparaat", + "scope_all": "Alle apparaten", + "cooldown": "Hersteltijd (seconden)", + "notify_emails": "Meldingse-mails", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "create_rule": "Regel aanmaken", + "edit_rule": "Regel bewerken", + "delete_rule": "Regel verwijderen", + "acknowledge": "Bevestigen", + "acknowledged": "Bevestigd", + "unacknowledged": "Niet bevestigd", + "triggered_at": "Geactiveerd op", + "severity_info": "Informatie", + "severity_warning": "Waarschuwing", + "severity_critical": "Kritiek", + "op_gt": "Groter dan", + "op_gte": "Groter dan of gelijk aan", + "op_lt": "Kleiner dan", + "op_lte": "Kleiner dan of gelijk aan", + "op_eq": "Gelijk aan", + "op_neq": "Niet gelijk aan", + "type_cpu_usage": "CPU-gebruik (%)", + "type_memory_usage": "Geheugengebruik (%)", + "type_disk_usage": "Schijfgebruik (%)", + "type_offline_duration": "Offline duur (s)", + "type_idle_duration": "Inactieve duur (s)", + "type_custom": "Aangepast", + "command_type": "Commandotype", + "command_payload": "Commando / Script", + "command_result": "Resultaat", + "command_status": "Status", + "send_command": "Commando verzenden", + "status_pending": "Wachtend", + "status_running": "Actief", + "status_completed": "Voltooid", + "status_failed": "Mislukt", + "smtp_host": "SMTP-host", + "smtp_port": "Poort", + "smtp_secure": "TLS gebruiken", + "smtp_user": "Gebruikersnaam", + "smtp_pass": "Wachtwoord", + "smtp_from": "Afzenderadres", + "smtp_test": "Verbinding testen", + "smtp_save": "Configuratie opslaan", + "smtp_test_success": "Verbinding geslaagd", + "smtp_test_failed": "Verbinding mislukt", + "no_rules": "Geen alarmregels geconfigureerd", + "no_alerts": "Geen geactiveerde waarschuwingen", + "no_commands": "Geen commando's verzonden", + "id_payload_required": "Apparaat-ID en payload zijn vereist", + "no_commands_sent": "Nog geen commando's verzonden" + }, + "file_transfer": { + "title": "Bestandsoverdracht", + "transfers": "Overdrachten", + "new_transfer": "Nieuwe overdracht", + "upload": "Uploaden", + "download": "Downloaden", + "direction": "Richting", + "filename": "Bestandsnaam", + "file_size": "Bestandsgrootte", + "mime_type": "MIME-type", + "progress": "Voortgang", + "status": "Status", + "device": "Apparaat", + "initiated_by": "Gestart door", + "created_at": "Aangemaakt op", + "cancel": "Annuleren", + "cancel_confirm": "Weet u zeker dat u deze overdracht wilt annuleren?", + "download_file": "Bestand downloaden", + "browse_files": "Bestanden bladeren", + "select_file": "Bestand selecteren", + "select_device": "Apparaat selecteren", + "no_transfers": "Geen bestandsoverdrachten", + "status_pending": "Wachtend", + "status_active": "Actief", + "status_completed": "Voltooid", + "status_failed": "Mislukt", + "status_cancelled": "Geannuleerd", + "bytes_transferred": "Overgedragen bytes", + "chunks": "Blokken", + "transfer_started": "Overdracht gestart", + "transfer_completed": "Overdracht voltooid", + "transfer_failed": "Overdracht mislukt", + "transfer_cancelled": "Overdracht geannuleerd", + "max_file_size": "Maximale bestandsgrootte: 4 GB", + "error_too_large": "Het bestand is te groot", + "error_no_device": "Geen apparaat geselecteerd", + "error_no_file": "Geen bestand geselecteerd" + }, + "network": { + "title": "Netwerkmonitoring", + "targets": "Monitoringdoelen", + "add_target": "Doel toevoegen", + "edit_target": "Doel bewerken", + "delete_target": "Doel verwijderen", + "delete_confirm": "Weet u zeker dat u dit doel wilt verwijderen?", + "target_name": "Naam", + "host": "Host", + "port": "Poort", + "url": "URL", + "check_type": "Controletype", + "timeout": "Time-out", + "interval": "Intervaltijd", + "enabled": "Ingeschakeld", + "status": "Status", + "last_check": "Laatste controle", + "last_rtt": "Laatste RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Bereikbaar", + "status_down": "Onbereikbaar", + "status_unknown": "Onbekend", + "check_now": "Nu controleren", + "history": "Controlegeschiedenis", + "stats": "Statistieken", + "total_targets": "Totaal doelen", + "targets_up": "Bereikbare doelen", + "targets_down": "Onbereikbare doelen", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP-poort", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Netwerkhulpmiddelen", + "ping_tool": "Pingtest", + "tcp_tool": "TCP-poortcontrole", + "http_tool": "HTTP-controle", + "dns_tool": "DNS-resolutie", + "monitor_start": "Monitoring starten", + "monitor_stop": "Monitoring stoppen", + "monitor_running": "Monitoring actief", + "monitor_stopped": "Monitoring gestopt", + "no_targets": "Geen monitoringdoelen geconfigureerd", + "no_history": "Geen controlegeschiedenis beschikbaar", + "error_code": "Fout", + "status_code": "HTTP-statuscode", + "search_targets": "Doelen zoeken...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Controlehistorie", + "name_host_required": "Naam en host zijn verplicht", + "uptime": "Uptime", + "response_time": "Reactietijd", + "avg_response": "Gemiddelde reactie", + "charts": "Grafieken", + "realtime": "Realtime", + "response_time_ms": "Reactietijd (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Laatste 24 uur", + "last_7d": "Laatste 7 dagen", + "last_30d": "Laatste 30 dagen" + }, + "dataguard": { + "title": "DataGuard", + "policies": "DLP-beleid", + "add_policy": "Beleid toevoegen", + "edit_policy": "Beleid bewerken", + "delete_policy": "Beleid verwijderen", + "delete_confirm": "Weet u zeker dat u dit beleid wilt verwijderen?", + "policy_name": "Naam", + "policy_description": "Beschrijving", + "status": "Status", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "rules": "Regels", + "add_rule": "Regel toevoegen", + "rule_type": "Regeltype", + "rule_type_usb": "USB-apparaat", + "rule_type_file": "Bestandsbewerking", + "action": "Actie", + "action_allow": "Toestaan", + "action_block": "Blokkeren", + "action_log": "Alleen loggen", + "filter": "Filter", + "vid": "Fabrikant-ID (VID)", + "pid": "Product-ID (PID)", + "serial": "Serienummer", + "device_class": "Apparaatklasse", + "drive_type": "Schijftype", + "file_extensions": "Bestandsextensies", + "events": "DLP-events", + "event_source": "Bron", + "event_source_usb": "USB", + "event_source_file": "Bestand", + "event_type": "Eventtype", + "event_details": "Details", + "no_policies": "Geen DLP-beleid geconfigureerd", + "no_events": "Geen DLP-events geregistreerd", + "stats": "Statistieken", + "total_events": "Totaal events", + "blocked_events": "Geblokkeerd", + "logged_events": "Gelogd", + "usb_events": "USB-events", + "file_events": "Bestandsevents", + "device_id": "Apparaat-ID", + "policy_matched": "Overeenkomend beleid", + "timestamp": "Tijdstempel", + "drive_removable": "Verwisselbaar", + "drive_fixed": "Vast", + "drive_network": "Netwerk", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Onbekend", + "total_policies": "Totaal beleid", + "active_policies": "Actief beleid", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Beleid", + "tab_events": "Events", + "search_policies": "Beleid zoeken...", + "create_policy": "Beleid maken", + "policy_type": "Beleidstype", + "scope": "Scope", + "events_count": "Events", + "search_events": "Gebeurtenissen zoeken...", + "event_time": "Event Time", + "device": "Apparaat", + "policy": "Beleid", + "detail": "Detail", + "scope_help": "Komma-gescheiden apparaat-ID’s of leeg voor alle apparaten", + "scope_all": "Alle", + "active": "Active", + "type_file_type": "Bestandstype", + "type_clipboard": "Klembord", + "type_screen_share": "Scherm delen", + "type_file_transfer": "Bestandsoverdracht", + "policy_desc": "Beleidsbeschrijving", + "type_usb": "USB" + }, + "reports": { + "title": "Rapporten", + "generate": "Rapport genereren", + "generate_csv": "CSV exporteren", + "report_type": "Rapporttype", + "type_devices": "Apparaatoverzicht", + "type_activity": "Activiteitsoverzicht", + "type_security": "Beveiligingsrapport", + "type_tickets": "Ticketrapport", + "type_network": "Netwerkrapport", + "type_inventory": "Inventarisrapport", + "type_alerts": "Waarschuwingsrapport", + "saved": "Opgeslagen rapporten", + "save_report": "Rapport opslaan", + "delete_report": "Rapport verwijderen", + "delete_confirm": "Weet u zeker dat u dit opgeslagen rapport wilt verwijderen?", + "no_saved": "Geen opgeslagen rapporten", + "report_title": "Titel", + "created_by": "Aangemaakt door", + "created_at": "Aangemaakt op", + "filters": "Filters", + "date_from": "Van", + "date_to": "Tot", + "device_filter": "Apparaat-ID", + "generated_at": "Gegenereerd op", + "section": "Gegevenssectie", + "total_devices": "Totaal apparaten", + "online": "Online", + "offline": "Offline", + "banned": "Verbannen", + "platform_distribution": "Platformdistributie", + "top_applications": "Meest gebruikte applicaties", + "total_active": "Totaal actieve tijd", + "total_idle": "Totaal inactieve tijd", + "dlp_stats": "DLP-statistieken", + "banned_devices": "Verbannen apparaten", + "audit_logs": "Auditlogs", + "ticket_stats": "Ticketstatistieken", + "category_distribution": "Categoriedistributie", + "priority_distribution": "Prioriteitsdistributie", + "targets_status": "Doelstatus", + "os_distribution": "OS-distributie", + "avg_ram": "Gemiddeld RAM", + "alert_rules": "Alarmregels", + "recent_alerts": "Recente waarschuwingen", + "tab_generate": "Genereren", + "tab_saved": "Opgeslagen rapporten", + "type_devices_desc": "Overzicht van alle geregistreerde apparaten", + "type_activity_desc": "Applicatiegebruik en sessiestatistieken", + "type_security_desc": "Beveiligingsgebeurtenissen en verbannen apparaten", + "type_tickets_desc": "Statistieken en overzicht van ondersteuningstickets", + "type_network_desc": "Netwerkmonitoring en uptimegegevens", + "type_inventory_desc": "Hardware- en software-inventaris", + "type_alerts_desc": "Waarschuwingen en regelgeschiedenis", + "report_name": "Rapportnaam", + "format": "Formaat", + "save": "Opslaan", + "preview": "Voorbeeld", + "download": "Downloaden", + "delete_saved": "Opgeslagen rapport verwijderen", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Multi-tenancy", + "list": "Tenants", + "add_tenant": "Tenant toevoegen", + "edit_tenant": "Tenant bewerken", + "delete_tenant": "Tenant verwijderen", + "delete_confirm": "Weet u zeker dat u deze tenant wilt verwijderen? Alle apparaat- en gebruikerstoewijzingen worden verwijderd.", + "name": "Naam", + "slug": "Slug", + "contact_name": "Contactnaam", + "contact_email": "Contact-e-mail", + "max_devices": "Max apparaten", + "max_devices_hint": "0 = onbeperkt", + "notes": "Notities", + "active": "Actief", + "inactive": "Inactief", + "devices": "Apparaten", + "users": "Gebruikers", + "assign_device": "Apparaat toewijzen", + "assign_devices": "Apparaten toewijzen", + "remove_device": "Apparaat verwijderen", + "assign_user": "Gebruiker toewijzen", + "remove_user": "Gebruiker verwijderen", + "no_tenants": "Geen tenants geconfigureerd", + "no_devices": "Geen apparaten toegewezen aan deze tenant", + "no_users": "Geen gebruikers toegewezen aan deze tenant", + "stats": "Tenantstatistieken", + "total_devices": "Totaal apparaten", + "online_devices": "Online apparaten", + "total_users": "Totaal gebruikers", + "created_at": "Aangemaakt op", + "updated_at": "Bijgewerkt op", + "slug_exists": "Tenant-slug bestaat al", + "total_tenants": "Totaal tenants", + "active_tenants": "Actieve tenants", + "search": "Tenant zoeken...", + "create_tenant": "Tenant aanmaken", + "detail": "Tenantdetails", + "contact": "Contact", + "enabled": "Ingeschakeld", + "disabled": "Tenants uitgeschakeld", + "max": "Max", + "info": "Tenantinformatie", + "status": "Status" + }, + "registrations": { + "title": "Apparaatregistraties", + "subtitle": "Beheer registratieverzoeken van apparaten ontdekt via LAN", + "search_placeholder": "Zoeken op apparaat-ID, hostnaam of IP...", + "no_registrations": "Geen registratieverzoeken", + "col_device_id": "Apparaat-ID", + "col_hostname": "Hostnaam", + "col_platform": "Platform", + "col_ip": "IP-adres", + "col_version": "Versie", + "col_status": "Status", + "col_requested": "Aangevraagd", + "col_actions": "Acties", + "status_pending": "Wachtend", + "status_approved": "Goedgekeurd", + "status_rejected": "Afgewezen", + "approve_btn": "Goedkeuren", + "approve_confirm": "Weet u zeker dat u dit apparaat wilt goedkeuren? Het ontvangt de serverreferenties en kan automatisch verbinding maken.", + "approved_success": "Apparaatregistratie succesvol goedgekeurd", + "reject_btn": "Afwijzen", + "reject_title": "Registratie afwijzen", + "reject_confirm": "Weet u zeker dat u dit registratieverzoek wilt afwijzen?", + "reject_reason": "Reden (optioneel)", + "reject_reason_placeholder": "Voer de reden van afwijzing in...", + "rejected_success": "Apparaatregistratie afgewezen", + "delete_confirm": "Weet u zeker dat u dit registratierecord wilt verwijderen?", + "deleted_success": "Registratierecord verwijderd", + "enrollment_title": "Apparaatregistratie", + "enrollment_subtitle": "Openstaande registratieverzoeken van BetterDesk-desktopclients", + "enrollment_empty": "Geen openstaande registratieverzoeken", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Weergavenaam", + "enrollment_display_name_placeholder": "Voer een naam voor dit apparaat in...", + "enrollment_sync_mode": "Synchronisatiemodus", + "enrollment_sync_silent": "Stil — minimale telemetrie", + "enrollment_sync_standard": "Standaard — gebalanceerde synchronisatie", + "enrollment_sync_turbo": "Turbo — agressieve synchronisatie", + "enrollment_approved_success": "Apparaatregistratie goedgekeurd", + "enrollment_rejected_success": "Apparaatregistratie geweigerd", + "approve_title": "Gerat genehmigen", + "field_name": "Geratename", + "field_name_placeholder": "Name fur dieses Gerat eingeben...", + "field_sync_mode": "Synchronisatiemodus", + "sync_standard": "Standaard — gebalanceerde synchronisatie", + "sync_silent": "Lautlos — minimale Telemetrie", + "sync_turbo": "Turbo — agressieve synchronisatie", + "field_tags": "Tags", + "field_tags_placeholder": "Kommagetrennte Tags (z. B. Buro, Laptop)...", + "field_tags_existing": "Vorhandene Tags", + "field_tag_add_placeholder": "Neues Tag hinzufugen...", + "field_tag_add_btn": "Hinzufugen", + "field_groups": "Gerategruppen", + "field_folder": "Map", + "field_folder_none": "Kein Map", + "reject_ban_option": "Dieses Gerat sperren", + "reject_ban_hint": "Das Gerat wird gesperrt und kann keine neuen Registrierungsanfragen senden.", + "banner_open_mode": "Registrierung ist offen — neue RustDesk-Clients registrieren sich ohne Goedkeuring des Operators. Verwalteten Modus in den Instellingen festlegen, um diese Warteschlange zu nutzen.", + "banner_locked_mode": "Registrierung ist gesperrt — nur token-gebundene Gerate konnen sich registrieren. Der verwaltete Modus ist fur die Goedkeuring onbekender Clients durch den Operator erforderlich.", + "enrollment_settings_link": "Registrierungsinstellingen" + }, + "backup": { + "title": "Back-up", + "desc": "Download een volledige back-up van de consoleconfiguratie, gebruikers, groepen en instellingen. Peer-gegevens van de Go-server worden meegenomen wanneer de BetterDesk-backend actief is.", + "restore_title": "Herstellen", + "restore_desc": "Upload een eerder gedownloaded back-upbestand om de consoleconfiguratie te herstellen. Selecteer hieronder welke secties u wilt herstellen.", + "stat_users": "Gebruikers", + "stat_settings": "Instellingen", + "stat_folders": "Mappen", + "stat_groups": "Groepen", + "stat_strategies": "Strategieën", + "stat_backend": "Backend", + "download": "Back-up downloaden", + "creating": "Back-up maken...", + "download_success": "Back-up succesvol gedownload", + "upload": "Back-up uploaden", + "restore_confirm": "Weet u zeker dat u wilt herstellen vanuit deze back-up? De geselecteerde secties worden overschreven.", + "restore_success": "Back-up succesvol hersteld. Sommige wijzigingen vereisen mogelijk het herladen van de pagina.", + "restored": "Hersteld", + "skipped": "Overgeslagen", + "backup_date": "Back-updatum", + "opt_settings": "Console-instellingen", + "opt_branding": "Huisstijl / Thema", + "opt_folders": "Apparaatmappen", + "opt_groups": "Gebruikers- en apparaatgroepen", + "opt_addressbooks": "Adresboeken", + "opt_users": "Gebruikersaccounts", + "opt_users_warning": "Destructief: vervangt ALLE gebruikersaccounts met back-upgegevens. U kunt worden uitgelogd.", + "no_file": "Geen back-upbestand geselecteerd", + "invalid_json": "Ongeldig back-upbestand: ongeldig JSON", + "invalid_format": "Ongeldig back-upbestand: is geen BetterDesk-back-up", + "stat_database": "Database-Engine", + "stat_keys": "Serverschlussel enthalten", + "stat_env": "Omgevingsbestand", + "stat_uploads": "Branding-Bestanden", + "restart_required": "Einige wiederhergestellte Komponenten (Schlussel / .env / Go-Database) erfordern einen Serviceherstart, damit die Anderungen wirksam werden.", + "security_warning": "Dieses Backup enthalt Geheimen (Serverschlussel, Omgevingsbestand, Passwort-Hashes und 2FA-Geheimen). Sicher aufbewahren und niemals teilen.", + "restore_warning": "Das Herstellen von Geheimenn, der Omgevingsbestand oder der Go-Server-Database uberschreibt die Serveridentitat und erfordert danach einen Serviceherstart.", + "opt_database": "Database (alle tabellen)", + "opt_database_hint": "Importiert alle Konsolendaten erneut. Wird sofort angewendet, kein Herstart erforderlich.", + "opt_uploads": "Branding-Bestanden", + "opt_uploads_hint": "Logo's en geüploade afbeeldingen.", + "opt_secrets": "Serverschlussel & Geheimen", + "opt_secrets_warning": "Uberschreibt die Ed25519-Serveridentitat, den API-Schlussel und das Sessiegeheim. Erfordert einen Serviceherstart.", + "opt_env": "Omgevingsbestand (.env)", + "opt_env_warning": "Uberschreibt SESSION_SECRET, API-Schlussel, Database-DSN, Ports und TLS-Instellingen. Erfordert einen Serviceherstart.", + "opt_godb": "Go-Server-Database", + "opt_godb_warning": "Uberschreibt die SQLite-Database des Go-Servers (nur SQLite-Backend). Erfordert einen Serviceherstart." + }, + "cdap": { + "device_detail": "Apparaatdetails", + "loading": "Laden...", + "loading_widgets": "Apparaatwidgets laden...", + "load_error": "Apparaatgegevens konden niet worden geladen", + "connected": "Verbonden", + "disconnected": "Verbinding verbroken", + "device_offline_msg": "Het apparaat is momenteel offline. Widgetwaarden kunnen verouderd zijn.", + "no_widgets": "Geen widgets beschikbaar", + "no_widgets_desc": "Dit apparaat heeft geen CDAP-manifest met widgetdefinities geregistreerd.", + "command_log": "Commando-log", + "clear_log": "Logboek wissen", + "confirm_command": "Command bevestigen", + "select_option": "Selecteren", + "cdap_status": "CDAP-status", + "cdap_enabled": "CDAP ingeschakeld", + "cdap_disabled": "CDAP uitgeschakeld", + "cdap_devices": "CDAP-apparaten", + "cdap_connections": "Actieve verbindingen", + "send_command": "Command verzenden", + "command_sent": "Commando succesvol verzonden", + "command_failed": "Commando verzenden mislukt", + "devices_title": "CDAP-apparaten", + "devices_subtitle": "Apparaten verbonden via Custom Device Application Protocol", + "stat_connected": "Verbonden", + "stat_port": "Poort", + "search_devices": "Apparaten zoeken...", + "no_devices": "Geen apparaten", + "no_devices_desc": "Er zijn momenteel geen CDAP-apparaten verbonden. Apparaten verschijnen hier zodra ze verbinding maken met de gateway.", + "gateway_disabled": "Gateway uitgeschakeld", + "gateway_disabled_desc": "Schakel de CDAP-gateway in door CDAP_ENABLED=true in de serverconfiguratie te zetten.", + "gateway_active": "Actief", + "toggle_enable": "CDAP inschakelen", + "toggle_disable": "CDAP uitschakelen", + "enabled_restart": "CDAP ingeschakeld. Een serverherstart is vereist om wijzigingen toe te passen.", + "disabled_restart": "CDAP uitgeschakeld. Een serverherstart is vereist om wijzigingen toe te passen.", + "widgets": "Widgets", + "type_all": "Alle", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-agent", + "type_network": "Netwerk", + "type_camera": "Camera", + "type_custom": "Aangepast", + "active_alerts": "Actieve waarschuwingen", + "alert_fired": "Melding geactiveerd", + "alert_cleared": "Waarschuwing gewist", + "no_alerts": "Geen waarschuwingen", + "connect_terminal": "Terminal verbinden", + "table_search": "Zoeken...", + "just_now": "Zojuist", + "terminal_connecting": "Verbinden met apparaat...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Terminalverbinding mislukt", + "linked_devices": "Gekoppelde apparaten", + "link_device": "Apparaat koppelen", + "unlink_device": "Ontkoppelen", + "no_linked_devices": "Geen gekoppelde apparaten", + "unlink_confirm": "Weet u zeker dat u dit apparaat wilt ontkoppelen?", + "link_prompt": "Voer de peer-ID in om aan dit apparaat te koppelen:", + "connect_desktop": "Desktop verbinden", + "connect_video": "Stream verbinden", + "connect_files": "Bestanden bekijken", + "connect_audio": "Audio verbinden", + "upload_file": "Upload", + "desktop_connecting": "Verbinden met bureaublad...", + "video_connecting": "Verbinden...", + "files_connecting": "Verbinden...", + "audio_connecting": "Audio verbinden...", + "audio_streaming": "Audio streamen", + "clipboard_in": "Klembord inkomend", + "clipboard_out": "Klembord uitgaand", + "monitor_select": "Monitor selecteren", + "keyframe_request": "Keyframe aanvragen", + "quality_auto": "Automatische kwaliteit" + }, + "desktop": { + "switch_mode": "Modus wisselen", + "console_mode": "Consolemodus", + "loading": "Laden", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Sluiten", + "widgets_mode": "Widgetmodus", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Widget toevoegen", + "remove_widget": "Widget verwijderen", + "configure": "Configureren", + "search_widgets": "Widgets zoeken...", + "cat_monitoring": "Monitoring", + "cat_devices": "Apparaten", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Notities...", + "search_placeholder": "Zoeken...", + "search_pages": "Pages", + "search_devices": "Apparaten zoeken", + "search_no_results": "No results", + "exit_desktop": "Exit Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Apparaatstatus", + "widget_server_health": "Servergezondheid", + "widget_system_stats": "Systeemstatistieken", + "widget_device_list": "Apparaatlijst", + "widget_quick_actions": "Snelle acties", + "widget_recent_activity": "Recente activiteit", + "widget_notes": "Notes", + "widget_network_monitor": "Netwerkmonitor", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP-apparaten", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Apparaatraster", + "widget_multi_gauge": "Meervoudige meter", + "widget_weekly_chart": "Weekgrafiek", + "widget_quick_controls": "Snelle bediening", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Verbindingsstatistieken", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Gebruikerssessies", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Geen apparaten", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Openen", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "URL instellen", + "label_server_uptime": "Serveruptime", + "label_merged_info": "Samengevoegde informatie", + "label_with_notes": "Met notities", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Totaal apparaten", + "label_throughput": "Throughput", + "label_active_relays": "Actieve relays", + "label_total_relayed": "Totaal doorgestuurd", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Apparaten filteren", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Geen CDAP-apparaten", + "action_add_widget": "Widget toevoegen", + "label_merged_server_info": "Samengevoegde serverinformatie", + "wp_images": "Afbeeldingen", + "wp_colors": "Effen kleuren", + "wp_custom_color": "Aangepaste kleur", + "wp_fit_style": "Stijl", + "wp_fill": "Vullen", + "wp_fit": "Passend", + "wp_stretch": "Uitrekken", + "wp_center": "Centreren", + "widget_calendar": "Calendar", + "widget_process_monitor": "Procesmonitor", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Databasestatistieken", + "widget_docker_containers": "Docker-containers", + "widget_shell_command": "Shellopdracht", + "widget_device_map": "Apparaatkaart", + "widget_remote_connect": "Externe verbinding", + "label_no_online": "Geen online apparaten", + "label_no_events": "Geen gebeurtenissen", + "label_event_title": "Gebeurtenistitel", + "label_no_data": "Geen gegevens", + "label_download_speed": "Downloadsnelheid", + "label_latency": "Latency", + "label_server": "Serverinstantie", + "label_run_test": "Run Test", + "label_testing": "Testen", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Geen containers", + "label_docker_unavailable": "Docker niet beschikbaar", + "label_no_command": "Geen opdracht", + "label_no_output": "Geen uitvoer", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Voorinstelling opslaan", + "label_load_preset": "Load Preset", + "label_preset_name": "Naam van voorinstelling", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automatisch rangschikken", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 gelijke kolommen", + "label_2col_wide": "2 brede kolommen", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widgetgroep", + "ungroup_widgets": "Widgets degroeperen", + "group_widgets": "Widgets groeperen", + "snap_layouts": "Snap-layouts", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Vastzetten linksboven", + "snap_top_right": "Vastzetten rechtsboven", + "snap_bottom_left": "Vastzetten linksonder", + "snap_bottom_right": "Vastzetten rechtsonder", + "aero_shake": "Venster schudden", + "zone_resize": "Zonegrootte wijzigen", + "zone_borders": "Zonegrenzen", + "app_drawer": "Applications", + "search_apps": "Apps zoeken", + "edit_shortcuts": "Snelkoppelingen bewerken", + "widgets": "Widgetlijst", + "theme": "Theme", + "fullscreen": "Volledig scherm", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "wp_unavailable": "Achtergronden niet beschikbaar", + "wp_download_hint": "Download achtergronden om ze hier te gebruiken.", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Klik om aan te melden", + "username_placeholder": "Gebruikersnaam", + "password_placeholder": "Wachtwoord", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Verificatiecode vereist", + "totp_subtitle": "Voer de zescijferige code uit uw authenticator-app in.", + "back_to_login": "Terug naar aanmelden", + "fill_all_fields": "Vul alle velden in", + "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord", + "invalid_code": "Ongeldige verificatiecode", + "enter_6_digits": "Voer 6 cijfers in", + "network_error": "Netwerkfout. Probeer het opnieuw.", + "session_expired": "Uw sessie is verlopen. Meld u opnieuw aan." + }, + "tokens": { + "title": "Toegangstokens", + "subtitle": "Beheer API-toegangstokens voor integraties en automatisering", + "enrollment_mode": "Registratiemodus", + "mode_open": "Open registratie", + "mode_open_desc": "Elke geldige client kan registratie aanvragen.", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Totaal", + "active": "Active", + "used": "Used", + "revoked": "Token succesvol ingetrokken", + "search_placeholder": "Tokens zoeken...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Bulk genereren", + "create": "Token aanmaken", + "edit": "Bewerken", + "token": "Token", + "name": "Tokennaam", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Token succesvol aangemaakt", + "actions": "Actions", + "name_placeholder": "Voer tokennaam in", + "max_uses": "Max Uses", + "max_uses_hint": "Maximaal aantal toegestane gebruiken voor dit token.", + "expires_in": "Expires In", + "no_expiration": "Geen vervaldatum", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Optionele notitie", + "count": "Count", + "count_range": "Aantal moet tussen 1 en 100 liggen", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token aangemaakt", + "tokens_generated": "Tokens gegenereerd", + "copy_warning": "Kopieer dit token nu. U kunt het niet meer zien!", + "copy_token": "Token kopiëren", + "copied": "Token naar klembord gekopieerd", + "revoke": "Intrekken", + "revoke_confirm": "Weet u zeker dat u dit token wilt intrekken? Deze actie kan niet ongedaan worden gemaakt.", + "revoked_success": "Token succesvol ingetrokken", + "no_tokens": "Geen tokens aangemaakt", + "expired": "Verlopen", + "never": "Never", + "save": "Opslaan", + "cancel": "Annuleren", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Volgende", + "prev": "Vorige", + "skip": "Rondleiding overslaan", + "finish": "Voltooien", + "close": "Sluiten", + "step_of": "Stap {current} van {total}", + "console_sidebar_title": "Consolenavigatie", + "console_sidebar_text": "Gebruik de zijbalk om te schakelen tussen apparaten, gebruikers, instellingen en hulpmiddelen.", + "console_expand_title": "Zijbalk uitklappen", + "console_expand_text": "Open de zijbalk om alle consoleonderdelen en hulpmiddelen te zien.", + "console_search_title": "Snel zoeken", + "console_search_text": "Gebruik zoeken om apparaten, instellingen en acties sneller te vinden.", + "console_dashboard_title": "Overzicht controleren", + "console_dashboard_text": "Het overzicht vat serverstatus, apparaten en recente activiteit samen.", + "console_devices_title": "Apparaatlijst", + "console_devices_text": "Hier kunt u alle geregistreerde apparaten zoeken, filteren en beheren.", + "console_settings_title": "Instellingen", + "console_settings_text": "Beheer beveiliging, authenticatie, updates en integraties.", + "console_desktop_title": "Desktopmodus", + "console_desktop_text": "Schakel naar de widgetdesktop om een aangepaste operationele weergave te maken.", + "console_complete_title": "Console gereed", + "console_complete_text": "U kent nu de belangrijkste onderdelen van de BetterDesk-console.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "De bovenbalk bevat vensterbesturing, zoeken en snelkoppelingen.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Open de widgetkiezer om nieuwe kaarten op de desktop te plaatsen.", + "desktop_widgets_title": "Widgets", + "desktop_widgets_text": "Widgets tonen live operationele gegevens en snelle acties.", + "desktop_add_widget_title": "Widgets toevoegen", + "desktop_add_widget_text": "Kies een widget en plaats deze waar u hem nodig hebt.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "Snap-layouts", + "desktop_snap_text": "Gebruik snap-layouts om widgets snel in zones te ordenen.", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Verplaats, groepeer en wijzig vensters zoals op een moderne desktop.", + "desktop_search_title": "Apps zoeken", + "desktop_search_text": "Zoek beschikbare widgets en hulpmiddelen vanuit de launcher.", + "desktop_complete_title": "Desktop gereed", + "desktop_complete_text": "De desktopmodus is ingesteld en klaar voor aanpassing.", + "devices_folders_title": "Mappen en groepen", + "devices_folders_text": "Organiseer apparaten in mappen of dynamische groepen.", + "devices_search_title": "Apparaten zoeken", + "devices_search_text": "Filter op ID, hostnaam, platform, gebruiker of tags.", + "devices_table_title": "Apparaattabel", + "devices_table_text": "Open acties via het menu van elke rij of dubbelklik voor details.", + "devices_complete_title": "Apparaatbeheer gereed", + "devices_complete_text": "U kunt apparaten nu zoeken, groeperen en beheren.", + "settings_tabs_title": "Instellingssecties", + "settings_tabs_text": "Schakel tussen server-, beveiligings-, authenticatie- en UI-instellingen.", + "settings_content_title": "Configuratie bewerken", + "settings_content_text": "Sla wijzigingen per sectie op om de configuratie overzichtelijk te houden.", + "settings_complete_title": "Instellingen gereed", + "settings_complete_text": "U kent nu de belangrijkste configuratieonderdelen.", + "help": "Help", + "tour_console": "Consoletour", + "tour_desktop": "Desktoptour", + "tour_devices": "Apparaattour", + "tour_settings": "Instellingentour", + "reset_all": "Alle tours resetten", + "tour_remote": "Remote-tour", + "tour_organization": "Organisatietour", + "tour_cdap": "CDAP-tour", + "tour_chat": "Chattour", + "remote_toolbar_title": "Remote-werkbalk", + "remote_toolbar_text": "Beheer kwaliteit, monitoren, klembord, opname en sessieacties.", + "remote_canvas_title": "Extern scherm", + "remote_canvas_text": "Klik in het schermgebied om toetsenbord en muis naar het apparaat te sturen.", + "remote_clipboard_title": "Klembord", + "remote_clipboard_text": "Synchroniseer tekst veilig tussen browser en extern apparaat.", + "remote_complete_title": "Remote-sessie gereed", + "remote_complete_text": "U kunt nu een sessie bedienen en bewaken.", + "org_overview_title": "Organisatieoverzicht", + "org_overview_text": "Bekijk leden, apparaten en beleid van de organisatie in één oogopslag.", + "org_create_title": "Organisatie maken", + "org_create_text": "Maak een nieuwe organisatie om apparaten en gebruikers te scheiden.", + "org_members_title": "Leden beheren", + "org_members_text": "Wijs gebruikers toe en stel organisatiespecifieke rollen in.", + "org_devices_title": "Apparaten toewijzen", + "org_devices_text": "Wijs apparaten toe aan een organisatie zodat gegevens netjes binnen de juiste scope blijven.", + "org_policies_title": "Beleid configureren", + "org_policies_text": "Beheer toegangsregels, bestandsoverdracht en sessielimieten.", + "org_complete_title": "Organisatie gereed", + "org_complete_text": "De organisatie is voorbereid voor gebruikers, apparaten en beleid.", + "cdap_devices_title": "CDAP-apparaten", + "cdap_devices_text": "Bekijk alle verbonden CDAP-apparaten — IoT-sensoren, PLC's, bridges en aangepaste agenten. Groene indicatoren tonen live verbindingen.", + "cdap_widgets_title": "Widget-dashboard", + "cdap_widgets_text": "Widgets tonen realtime gegevens van apparaten. Meters, schakelaars, LED's, grafieken — elk widgettype visualiseert een ander soort gegevens.", + "cdap_commands_title": "Opdrachten verzenden", + "cdap_commands_text": "Communiceer met apparaten door opdrachten te sturen. Sommige opdrachten vereisen bevestiging. Het opdrachtlogboek houdt de geschiedenis bij van alle verzonden opdrachten.", + "cdap_terminal_title": "Apparaatterminal", + "cdap_terminal_text": "Open een terminalsessie naar CDAP-agenten voor geavanceerde diagnostiek of handmatige configuratie. Typ opdrachten rechtstreeks.", + "cdap_complete_title": "CDAP-overzicht voltooid!", + "cdap_complete_text": "Verken apparaatwidgets, verzend opdrachten en gebruik de terminal of bestandsbrowser voor dieper beheer. CDAP-agenten rapporteren automatisch statistieken.", + "chat_contacts_title": "Contacten", + "chat_contacts_text": "Selecteer operators, agents of groepen voor een gesprek.", + "chat_send_title": "Berichten verzenden", + "chat_send_text": "Schrijf berichten, verzend bestanden en gebruik leesbevestigingen.", + "chat_file_title": "Bestanden delen", + "chat_file_text": "Bestanden worden versleuteld overgedragen wanneer end-to-end-versleuteling actief is.", + "chat_complete_title": "Chat gereed", + "chat_complete_text": "U kunt nu veilig communiceren met gebruikers en operators.", + "disable_tutorials": "Rondleidingen uitschakelen", + "enable_tutorials": "Rondleidingen inschakelen" + }, + "help_request": { + "title": "Hulpverzoeken", + "subtitle": "Ondersteuningsverzoeken van eindgebruikers", + "new_request": "Nieuw hulpverzoek", + "device": "Apparaat", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Geen hulpverzoeken", + "notification": "Melding voor hulpverzoek", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisaties", + "create": "Maken", + "edit": "Bewerken", + "detail": "Details", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Apparaten", + "invitations": "Invitations", + "settings": "Instellingen", + "add_user": "Add User", + "assign_device": "Apparaat toewijzen", + "create_invitation": "Uitnodiging maken", + "delete_confirm": "Deze organisatie verwijderen?", + "no_orgs": "Geen organisaties", + "no_orgs_hint": "Maak een organisatie om gebruikers en apparaten gescheiden te beheren.", + "connection_policy": "Verbindingsbeleid", + "allow_file_transfer": "Bestandsoverdracht toestaan", + "allow_clipboard": "Klembord toestaan", + "max_session_duration": "Maximale sessieduur", + "role_owner": "Owner", + "role_admin": "Beheerder", + "role_operator": "Operator", + "role_user": "Lid", + "username": "Gebruikersnaam", + "password": "Wachtwoord", + "display_name": "Weergavenaam", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Apparaat-ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Toegewezen gebruiker", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Geen gebruikers", + "no_devices": "Geen apparaten", + "no_invitations": "Geen uitnodigingen", + "user_added": "User added", + "user_removed": "Gebruiker verwijderd", + "user_updated": "Gebruiker bijgewerkt", + "device_assigned": "Apparaat toegewezen", + "device_unassigned": "Apparaattoewijzing verwijderd", + "invitation_created": "Uitnodiging aangemaakt", + "settings_saved": "Organisatie-instellingen opgeslagen", + "org_deleted": "Organisatie verwijderd", + "confirm_remove_user": "Deze gebruiker uit de organisatie verwijderen?", + "confirm_unassign_device": "Dit apparaat uit de organisatie verwijderen?", + "confirm_delete_org": "Deze organisatie permanent verwijderen?", + "edit_role": "Rol bewerken", + "raw_settings": "Ruwe instellingen", + "key": "Key", + "value": "Value", + "save": "Opslaan", + "policy_unattended": "Onbeheerde toegang", + "policy_attended": "Beheerde toegang", + "policy_ask": "Always ask", + "expires_hours": "Verloopt over uren", + "loading_failed": "Organisaties konden niet worden geladen", + "name_slug_required": "Naam en slug zijn verplicht", + "org_created": "Organisatie aangemaakt", + "org_updated": "Organisatie bijgewerkt", + "create_new_user": "Nieuwe gebruiker maken", + "add_existing_user": "Bestaande gebruiker toevoegen", + "none_available": "none", + "select_user": "Gebruiker selecteren", + "org_role": "Organisatierol", + "link_user_hint": "Koppel een bestaande gebruiker aan deze organisatie.", + "no_available_users": "Geen beschikbare gebruikers", + "user_linked": "Gebruiker gekoppeld" + }, + "chat": { + "e2e_enabled": "End-to-end versleuteld", + "e2e_establishing": "Beveiligd kanaal wordt opgezet...", + "e2e_established": "Beveiligd kanaal opgezet", + "e2e_unsupported": "E2E-versleuteling wordt niet ondersteund in deze browser", + "typing_indicator": "aan het typen...", + "read_receipt": "Gelezen", + "delivered": "Bezorgd", + "file_share": "Bestand", + "file_too_large": "Bestand te groot (max 50MB)", + "file_encrypted": "Versleutelde bestandsoverdracht", + "presence_online": "Online", + "presence_away": "Afwezig", + "presence_busy": "Bezet", + "presence_offline": "Offline", + "key_rotation": "Beveiligingssleutels vernieuwd", + "new_message": "Nieuw bericht", + "title": "Chat", + "contacts": "Contacten", + "groups": "Groepen", + "no_contacts": "Nog geen contacten", + "no_groups": "Nog geen groepen", + "no_messages": "Nog geen berichten", + "no_results": "Geen resultaten gevonden", + "select_conversation": "Selecteer een gesprek om te beginnen met chatten", + "type_message": "Typ een bericht...", + "send": "Verzenden", + "attach_file": "Bestand bijvoegen", + "emoji": "Emoji", + "search_messages": "Berichten zoeken", + "create_group": "Groep aanmaken", + "group_name": "Groepsnaam", + "group_members": "Leden", + "cancel": "Annuleren", + "create": "Aanmaken", + "members": "leden", + "today": "Vandaag", + "yesterday": "Gisteren", + "react": "Reageren", + "my_presence": "Mijn status", + "search_placeholder": "Contacten en berichten zoeken", + "select_conversation_hint": "Selecteer een gesprek om berichten te bekijken", + "info": "Informatie", + "group_name_placeholder": "Voer een groepsnaam in" + }, + "toast": { + "device_connected": "Apparaat verbonden", + "device_disconnected": "Apparaat losgekoppeld", + "session_started": "Sessie gestart", + "session_ended": "Sessie beëindigd", + "file_upload_complete": "Bestandsupload voltooid", + "settings_saved": "Instellingen opgeslagen", + "error_generic": "Er is een fout opgetreden", + "connection_lost": "Verbinding verloren", + "reconnecting": "Opnieuw verbinden" + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Diagnostische hulpmiddelen en beheertaken voor BetterDesk-operators.", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Verzenden", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Tekst invoeren", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Go-serverlog", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Controleer ICMP-bereikbaarheid en pakketverlies.", + "tcp_title": "TCP-poorttest", + "tcp_desc": "Controleer of een TCP-poort bereikbaar is vanaf de server.", + "ssl_title": "TLS-certificaatcontrole", + "ssl_desc": "Inspecteer certificaatketen, vervaldatum en hostnaammatch.", + "http_title": "HTTP-verzoek", + "http_desc": "Voer een eenvoudige HTTP(S)-controle uit en bekijk statuscode en headers.", + "dns_title": "DNS Lookup", + "dns_desc": "Los DNS-records op vanaf de serveromgeving.", + "whois_title": "DNS Records", + "whois_desc": "Zoek domeinregistratie- en netwerkgegevens op.", + "speed_title": "Speed Test", + "speed_desc": "Meet ruwe downloaddoorvoer vanaf de console.", + "run_speed_test": "Snelheidstest uitvoeren", + "wol_title": "Wake-on-LAN", + "wol_desc": "Stuur een Wake-on-LAN magic packet naar een apparaat.", + "wol_sent": "Wake-on-LAN-pakket verzonden", + "hash_title": "Hash berekenen", + "hash_desc": "Bereken SHA-256 of andere hashes voor tekstinvoer.", + "password_title": "Wachtwoordgenerator", + "password_desc": "Genereer sterke willekeurige wachtwoorden voor beheerdoeleinden.", + "jwt_title": "JWT Decoder", + "jwt_desc": "Decodeer JWT-header en payload zonder de handtekening te verifiëren.", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 coderen of decoderen.", + "url_title": "URL Encoder", + "url_desc": "URL-waarden coderen of decoderen.", + "processes_title": "Processen", + "processes_desc": "Toon actieve serverprocessen en resourcegebruik.", + "disk_title": "Disk Usage", + "disk_desc": "Bekijk schijfgebruik en vrije ruimte.", + "db_title": "Databasecontrole", + "db_desc": "Bekijk databasestatistieken en basisgezondheid.", + "docker_title": "Docker-containers", + "docker_desc": "Toon lokale containers en hun status.", + "logs_title": "Log Viewer", + "logs_desc": "Bekijk recente console- en serverlogs.", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Geldig vanaf", + "valid_to": "Geldig tot", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Geen gegevens", + "no_docker": "Docker is niet beschikbaar of er zijn geen containers.", + "no_logs": "Geen logs beschikbaar" + }, + "policies": { + "title": "Organisatiebeleid", + "subtitle": "Beheer beveiligings-, verbindings- en functiebeleid voor organisaties", + "select_org": "Organisatie", + "select_org_placeholder": "Selecteer een organisatie...", + "select_org_first": "Selecteer een organisatie om het beleidsauditlogboek te bekijken.", + "configured": "Geconfigureerd", + "connection_title": "Verbindingsbeleid", + "connection_desc": "Beheer hoe externe sessies worden opgezet", + "connection_mode": "Verbindingsmodus", + "mode_attended": "Begeleid (vereist gebruikersgoedkeuring)", + "mode_unattended": "Onbegeleid (altijd toestaan)", + "mode_ask": "Altijd vragen", + "max_session": "Max. sessieduur (minuten)", + "idle_lock": "Vergrendeling bij inactiviteit (minuten)", + "wallpaper_policy": "Achtergrond tijdens sessie", + "wallpaper_show": "Tonen", + "wallpaper_hide_session": "Verbergen tijdens sessie", + "wallpaper_hide_always": "Altijd verbergen", + "features_title": "Functiebeleid", + "features_desc": "Specifieke functies voor apparaten in- of uitschakelen", + "allow_file_transfer": "Bestandsoverdracht toestaan", + "allow_clipboard": "Klembord-synchronisatie toestaan", + "allow_audio": "Audio-streaming toestaan", + "allow_recording": "Sessieopname toestaan", + "security_title": "Beveiligingsbeleid", + "security_desc": "Beveiligingsvereisten afdwingen voor organisatieapparaten", + "require_2fa": "2FA vereist voor onbegeleide toegang", + "password_min_length": "Minimale wachtwoordlengte", + "password_require_special": "Speciale tekens vereist", + "password_max_age": "Max. wachtwoordleeftijd (dagen, 0=nooit)", + "allowed_operators": "Toegestane operatorrollen (kommagescheiden)", + "network_title": "Netwerkbeleid", + "network_desc": "Relay-servers en directe verbindingen beheren", + "block_direct_p2p": "Direct P2P blokkeren (relay afdwingen)", + "allowed_relays": "Toegestane relay-servers (één per regel)", + "ip_allowlist": "IP-whitelist (CIDR, één per regel)", + "update_title": "Updatebeleid", + "update_desc": "Automatische updates en updatekanalen beheren", + "auto_update": "Auto-update inschakelen", + "update_channel": "Updatekanaal", + "audit_title": "Beleidswijzigingen", + "audit_desc": "Recente beleidswijzigingsgeschiedenis", + "no_audit": "Geen beleidswijzigingen geregistreerd.", + "save_success": "Beleid opgeslagen", + "save_failed": "Beleid kon niet worden opgeslagen", + "load_failed": "Beleid kon niet worden geladen", + "block_direct_p2p_hint": "Gilt fur Gerate in dieser Organisatie. Der globale Standard wird unter Instellingen → Verbindingsstrategie festgelegt." + }, + "attestation": { + "title": "Apparaatattestatie", + "subtitle": "Apparaatidentiteitsverificatie en hardware-vingerafdrukken monitoren", + "verified": "Geverifieerd", + "pending": "In afwachting", + "failed": "Mislukt", + "device_list": "Attestatierecords", + "device_list_desc": "Hardware-vingerafdrukken en identiteitsverificatiestatus", + "col_device": "Apparaat-ID", + "col_hostname": "Hostnaam", + "col_fingerprint": "Vingerafdruk", + "col_status": "Status", + "col_last_check": "Laatste controle", + "col_actions": "Acties", + "no_records": "Geen attestatierecords gevonden.", + "verify_success": "Attestatie succesvol geverifieerd", + "verify_failed": "Attestatieverificatie mislukt", + "revoke_success": "Attestatie ingetrokken", + "revoke_failed": "Attestatie kon niet worden ingetrokken" + }, + "fleet": { + "title": "Vlootbeheer", + "tab_resources": "Bronnen", + "tab_tasks": "Taken", + "tab_builder": "Bouwer", + "tab_compliance": "Compliance", + "res_title": "Bronnenmapping", + "res_all_types": "Alle typen", + "res_type_printer": "Printer", + "res_type_network_drive": "Netwerkschijf", + "res_type_dns": "DNS-server", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Bron toevoegen", + "res_name": "Bronnaam", + "res_type": "Type", + "res_address": "Adres / Pad", + "res_target": "Doel", + "res_scope": "Bereik", + "res_scope_org": "Organisatie", + "res_scope_group": "Groep", + "res_scope_device": "Apparaat", + "res_scope_value": "Bereikwaarde", + "res_status": "Status", + "res_active": "Actief", + "res_inactive": "Inactief", + "res_no_data": "Geen bronnen gevonden. Klik op 'Toevoegen'.", + "res_confirm_delete": "Weet u zeker dat u deze bron wilt verwijderen?", + "task_title": "Taakplanner", + "task_all_status": "Alle statussen", + "task_status_pending": "Wachtend", + "task_status_running": "Lopend", + "task_status_success": "Geslaagd", + "task_status_failed": "Mislukt", + "task_search": "Taken zoeken…", + "task_create": "Taak aanmaken", + "task_name": "Taaknaam", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Installatie", + "task_type_update": "Bijwerken", + "task_type_restart": "Herstart", + "task_type_deploy": "Implementatie", + "task_type_scan": "Scan", + "task_targets": "Doelen", + "task_targets_help": "Apparaat-ID's of groepsnamen, gescheiden door komma's", + "task_schedule": "Planning", + "task_schedule_once": "Eenmalig", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Planningswaarde", + "task_script": "Script / Opdracht", + "task_retries": "Pogingen", + "task_timeout": "Timeout (s)", + "task_last_run": "Laatste uitvoering", + "task_no_data": "Geen taken gevonden. Maak een nieuwe taak aan.", + "task_confirm_delete": "Weet u zeker dat u deze taak wilt verwijderen?", + "task_output": "Taakuitvoer", + "task_retry": "Opnieuw", + "builder_title": "Visuele workflowbouwer", + "builder_select_workflow": "Workflow selecteren…", + "builder_new": "Nieuw", + "builder_save": "Opslaan", + "builder_export": "Exporteren", + "builder_execute": "Uitvoeren", + "builder_dry_run": "Testrun", + "builder_triggers": "Triggers", + "builder_conditions": "Voorwaarden", + "builder_actions": "Acties", + "builder_results": "Resultaten", + "builder_transforms": "Transformaties", + "builder_properties": "Eigenschappen", + "builder_no_selection": "Selecteer een knooppunt om eigenschappen te bewerken.", + "workflow_name": "Workflownaam:", + "comp_title": "Software-compliance", + "comp_compliant": "Conform", + "comp_warning": "Waarschuwing", + "comp_critical": "Kritiek", + "comp_score": "Gem. score", + "comp_device": "Apparaat", + "comp_hostname": "Hostnaam", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Problemen", + "comp_last_scan": "Laatste scan", + "comp_scan": "Scannen", + "comp_scan_all": "Alles scannen", + "comp_remediate": "Herstellen", + "comp_remediate_confirm": "Auto-herstel op dit apparaat uitvoeren?", + "comp_no_data": "Geen compliancegegevens. Voer een scan uit.", + "save": "Opslaan", + "cancel": "Annuleren", + "close": "Sluiten", + "edit": "Bewerken", + "delete": "Verwijderen", + "actions": "Acties", + "all_orgs": "Alle organisaties", + "builder_node_trigger_manual": "Handmatige trigger", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Gebeurtenistrigger", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Apparaat herstarten", + "builder_node_action_file_deploy": "Bestand uitrollen", + "builder_node_action_message": "Bericht verzenden", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Waarschuwing aanmaken", + "builder_node_result_chain": "Volgende actie koppelen", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "Organisatie selecteren...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Netwerkstation", + "type_dns": "DNS-record", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Resource toevoegen", + "edit_resource": "Resource bewerken", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adres", + "scope_org": "Organisatie", + "scope_group": "Groep", + "scope_device": "Apparaat", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Dit item verwijderen?", + "all_statuses": "Alle statussen", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Mislukt", + "search_tasks": "Taken zoeken...", + "create_task": "Taak maken", + "edit_task": "Taak bewerken", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Bestand uitrollen", + "task_type_registry": "Registry", + "target_devices": "Doelapparaten", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Scriptinhoud", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Laden...", + "no_output": "Geen uitvoer", + "error_loading": "Laden mislukt", + "select_workflow": "Workflow selecteren", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Handmatig", + "node_schedule": "Schedule", + "node_event": "Gebeurtenis", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Herstarten", + "node_file_deploy": "Bestand uitrollen", + "node_send_message": "Bericht verzenden", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Waarschuwing verzenden", + "node_chain": "Keten", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Alle organisaties", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Apparaat", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Herstelactie voor dit item starten?" + }, + "scaling": { + "title": "Schaling & Relay-beheer", + "tab_overview": "Overzicht", + "tab_relays": "Relay-knooppunten", + "tab_rules": "Toewijzingsregels", + "tab_capacity": "Capaciteitsplanning", + "arch_title": "Netwerkarchitectuur", + "arch_loading": "Architectuurdiagram laden...", + "stat_relay_nodes": "Relay-knooppunten", + "stat_total_devices": "Totaal apparaten", + "stat_active_sessions": "Actieve sessies", + "stat_bandwidth": "Totale bandbreedte", + "relay_health": "Relay-status", + "no_relays": "Geen relay-knooppunten geconfigureerd. Voeg uw eerste knooppunt toe om de belasting te verdelen.", + "relay_search": "Relays zoeken...", + "relay_add": "Relay-knooppunt toevoegen", + "relay_edit": "Relay-knooppunt bewerken", + "col_name": "Naam", + "col_address": "Adres", + "col_location": "Locatie", + "col_devices": "Apparaten", + "col_sessions": "Sessies", + "col_bandwidth": "Bandbreedte", + "col_status": "Status", + "col_actions": "Acties", + "col_priority": "Prioriteit", + "col_rule_name": "Regelnaam", + "col_match": "Overeenkomst", + "col_target_relay": "Doel-relay", + "col_fallback": "Terugval", + "status_online": "Online", + "status_degraded": "Verslechterd", + "status_offline": "Offline", + "status_enabled": "Ingeschakeld", + "status_disabled": "Uitgeschakeld", + "confirm_delete_relay": "Weet u zeker dat u dit relay-knooppunt wilt verwijderen?", + "confirm_delete_rule": "Weet u zeker dat u deze toewijzingsregel wilt verwijderen?", + "rules_hint": "Toewijzingsregels bepalen welke relay-server specifieke apparaatgroepen bedient. Regels worden geëvalueerd op prioriteit (laagste eerst).", + "rule_add": "Regel toevoegen", + "rule_edit": "Regel bewerken", + "rule_match_type": "Overeenkomsttype", + "match_subnet": "Subnet", + "match_group": "Apparaatgroep", + "match_tag": "Apparaat-tag", + "match_location": "Locatie", + "rule_match_value": "Overeenkomstwaarde", + "fallback_master": "Masterserver", + "fallback_nearest": "Dichtstbijzijnde relay", + "relay_max_sessions": "Max. sessies", + "relay_max_bandwidth": "Max. bandbreedte (Mbps)", + "cap_tiers": "Capaciteitsniveaus", + "cap_loading": "Capaciteitsgegevens laden...", + "cap_recommendations": "Aanbevelingen", + "cap_no_recs": "Geen aanbevelingen beschikbaar.", + "cap_planning": "Infrastructuurplanning", + "cap_config": "Configuratie", + "cap_max_devices": "Max. apparaten", + "cap_max_sessions": "Max. sessies", + "cap_current": "Huidig", + "cap_utilization": "Bezettingsgraad", + "cap_tier_devices": "Apparaatcapaciteit", + "cap_tier_sessions": "Sessiecapaciteit", + "cap_tier_bandwidth": "Bandbreedtecapaciteit", + "cap_single_sqlite": "Enkele server (SQLite)", + "cap_single_pg": "Enkele server (PostgreSQL)", + "cap_master_3": "Master + 3 relays", + "cap_master_10": "Master + 10 relays", + "rec_no_relays": "Geen relay-knooppunten geconfigureerd. Overweeg relays toe te voegen voor betere prestaties en redundantie.", + "rec_devices_high": "Apparaatgebruik is hoog. Overweeg meer relay-knooppunten toe te voegen.", + "rec_sessions_high": "Sessiecapaciteit nadert zijn limiet. Overweeg infrastructuurupgrade.", + "rec_cpu_high": "Sommige relay-knooppunten melden hoog CPU-gebruik. Overweeg loadbalancing.", + "rec_all_good": "Alle systemen opereren binnen normale parameters. Geen actie vereist.", + "save": "Opslaan", + "cancel": "Annuleren", + "edit": "Bewerken", + "delete": "Verwijderen", + "close": "Sluiten", + "no_rules": "Geen toewijzingsregels.", + "relays_info_banner": "Relaynodes helpen sessies verdelen over meerdere netwerklocaties. Sla wijzigingen op en herstart services indien nodig.", + "relay_name_address_required": "Relaynaam en adres zijn verplicht", + "relay_save_failed": "Relay kon niet worden opgeslagen", + "relay_delete_failed": "Relay kon niet worden verwijderd", + "relay_saved": "Relay opgeslagen", + "relay_deleted": "Relay verwijderd", + "rule_name_value_required": "Regelnaam en waarde zijn verplicht", + "rule_save_failed": "Regel kon niet worden opgeslagen", + "rule_delete_failed": "Regel kon niet worden verwijderd", + "rule_saved": "Regel opgeslagen", + "rule_deleted": "Regel verwijderd" + }, + "cross_platform": { + "title": "Platformonafhankelijke compatibiliteit", + "tab_matrix": "Compatibiliteitsmatrix", + "tab_distribution": "Verdeling", + "tab_protocols": "Protocollen", + "tab_limitations": "Beperkingen", + "matrix_hint": "Functie-ondersteuningsmatrix voor alle ondersteunde platforms. Groen = volledige ondersteuning, Geel = gedeeltelijk, Grijs = niet beschikbaar, Blauw = gepland.", + "col_feature": "Functie", + "legend_full": "Volledige ondersteuning", + "legend_partial": "Gedeeltelijke ondersteuning", + "legend_none": "Niet beschikbaar", + "legend_planned": "Gepland", + "platform_breakdown": "Platformverdeling", + "arch_breakdown": "Architectuurverdeling", + "version_breakdown": "Versieverdeling", + "summary": "Samenvatting", + "total_devices": "Totaal apparaten", + "unique_platforms": "Platforms", + "unique_archs": "Architecturen", + "unique_versions": "Clientversies", + "no_devices": "Nog geen apparaten geregistreerd.", + "protocols_hint": "Protocolcapaciteitsonderhandeling zorgt ervoor dat elke client alleen ondersteunde functies ontvangt. De server past zijn gedrag aan op basis van gerapporteerde capaciteiten.", + "capability_negotiation": "Capaciteitsonderhandeling", + "codec_support": "Codec-ondersteuning (online apparaten)", + "feature_support": "Functie-ondersteuning (online apparaten)", + "no_codec_data": "Geen codec-gegevens van online apparaten.", + "no_feature_data": "Geen functiegegevens van online apparaten.", + "protobuf_schema": "ClientCapabilities Protobuf-schema", + "diagram_client": "Client", + "diagram_server": "BetterDesk-server", + "diagram_peer": "Externe peer", + "limitations_hint": "Elk platform heeft specifieke beperkingen die de beschikbare functies beïnvloeden. Controleer deze bij het plannen van implementaties.", + "feat_desktop_client": "Desktop-client", + "feat_background_agent": "Achtergrondagent", + "feat_remote_target": "Extern doel", + "feat_screen_capture": "Schermopname", + "feat_input_injection": "Invoer-injectie", + "feat_file_transfer": "Bestandsoverdracht", + "feat_clipboard_sync": "Klembord-synchronisatie", + "feat_audio_streaming": "Audio-streaming", + "feat_chat": "Chat", + "feat_h264": "H.264-codec", + "feat_vp9": "VP9-codec", + "feat_av1": "AV1-codec", + "feat_cdap_agent": "CDAP-agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webbrowser", + "platform_chromeos": "ChromeOS", + "status_production": "Productie", + "status_testing": "Test", + "status_planned": "Gepland", + "status_limited": "Beperkt", + "status_experimental": "Experimenteel", + "limit_win_uac": "UAC-verhoging vereist voor service-installatie en invoer-injectie op beveiligde bureaubladen.", + "limit_win_service": "Draait als NSSM-service; vereist beheerdersrechten voor installatie.", + "limit_win_firewall": "Windows Firewall-regels moeten poorten 21115-21119 toestaan voor relay-verbindingen.", + "limit_linux_wayland": "Wayland-compositors beperken programmatische schermopname; PipeWire portal-API vereist.", + "limit_linux_pipewire": "Audio-opname vereist PipeWire; PulseAudio-fallback beschikbaar maar beperkt.", + "limit_linux_arm": "ARM64-builds beschikbaar; sommige codecs kunnen software-decodering gebruiken (langzamer).", + "limit_mac_screen": "Schermopname-toestemming vereist in Systeeminstellingen > Privacy en beveiliging.", + "limit_mac_signing": "Agent moet ondertekend zijn met Apple Developer ID voor distributie.", + "limit_mac_notarize": "Notarisatie vereist voor macOS Gatekeeper (niet-App Store-distributie).", + "limit_android_projection": "MediaProjection API vereist toestemming van de gebruiker voor elke schermopnamesessie.", + "limit_android_accessibility": "Invoer-injectie vereist AccessibilityService; beperkt vanaf Android 14+.", + "limit_android_battery": "Achtergrondservice beperkt door Doze-modus; mogelijk batterijoptimalisatie-uitzondering nodig.", + "limit_ios_capture": "Apple verbiedt schermopname op de achtergrond; alleen viewer-modus ondersteund.", + "limit_ios_input": "Geen invoer-injectie toegestaan; alleen extern bekijken en chat.", + "limit_ios_appstore": "Distributie alleen via App Store; TestFlight voor bètatests.", + "limit_web_https": "WebCodecs API en WebRTC vereisen HTTPS; HTTP valt terug op JMuxer (beperkte codecs).", + "limit_web_codec": "Codec-ondersteuning afhankelijk van browser; H.264 breed ondersteund, VP9/AV1 varieert.", + "limit_web_performance": "Prestaties beperkt door browser-sandbox; geen directe hardwareversnelling.", + "limit_chrome_crostini": "Volledige agent-ondersteuning alleen binnen de Crostini Linux-container.", + "limit_chrome_pwa": "PWA-modus biedt alleen webcapaciteiten; geen native agentfuncties.", + "limit_chrome_input": "Invoer-injectie buiten de Crostini-container niet ondersteund.", + "feat_session_recording": "Sitzungsaufzeichnung", + "feat_multi_monitor": "Multi-Monitor", + "feat_unattended_access": "Unbeaufsichtigter Zugriff", + "limit_win_virtual_account": "Servicee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade mussen moglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Servicee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Hartung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Beveiligingsaudit", + "tab_overview": "Overzicht", + "tab_events": "Auditgebeurtenissen", + "tab_hardening": "Beveiliging versterken", + "tab_vulnerabilities": "Kwetsbaarheden", + "security_score": "Beveiligingsscore", + "failed_logins": "Mislukte aanmeldingen (24u)", + "active_bans": "Actieve bans", + "api_keys": "API-sleutels", + "old_keys": "Oude sleutels (>90d)", + "security_checks": "Beveiligingscontroles", + "tls_status": "TLS-status", + "pass": "OK", + "warning": "Waarschuwing", + "fail": "Fout", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "TLS / WSS", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "all_events": "Alle gebeurtenissen", + "event_login_failed": "Aanmelding mislukt", + "event_login_success": "Aanmelding geslaagd", + "event_peer_banned": "Apparaat verbannen", + "event_ip_banned": "IP verbannen", + "event_config_changed": "Configuratie gewijzigd", + "event_key_created": "Sleutel aangemaakt", + "refresh": "Vernieuwen", + "col_time": "Tijd", + "col_action": "Actie", + "col_actor": "Actor", + "col_target": "Doel", + "col_ip": "IP-adres", + "col_details": "Details", + "no_events": "Geen auditgebeurtenissen gevonden.", + "hardening_hint": "Beveiligingsversterkingsprioriteiten voor uw BetterDesk-implementatie. Gesorteerd op ernst.", + "no_hardening": "Geen versterkingsitems beschikbaar.", + "vuln_hint": "Resultaten van de kwetsbaarheidsscan voor afhankelijkheden. Voer npm audit regelmatig uit.", + "no_vulns": "Geen kwetsbaarheden gevonden. Uw afhankelijkheden zijn veilig." + }, + "languages": { + "title": "Taalbeheer", + "total_languages": "Totaal aantal talen", + "fully_translated": "Volledig vertaald", + "needs_review": "Moet worden nagekeken", + "reference_keys": "Referentiesleutels", + "no_languages": "Geen talen gevonden", + "badge_reference": "Referentie", + "badge_review": "Nalezen", + "badge_complete": "Volledig", + "coverage": "dekking", + "keys": "sleutels", + "missing": "ontbrekend", + "extra": "extra", + "view_missing": "Ontbrekende sleutels bekijken", + "fix_missing": "Fix Missing", + "missing_keys_for": "Ontbrekende sleutels voor", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "en nog {n}...", + "all_keys_present": "Alle sleutels aanwezig", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Ontbrekende sleutels in {code} moeten handmatig worden vertaald.", + "no_fix_needed": "Geen correctie nodig" + }, + "resource_control": { + "title": "Resourcebeheer", + "tab_overview": "Overzicht", + "tab_usb": "USB Control", + "tab_optical": "Optische stations", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Quota", + "compliance_by_category": "Naleving per categorie", + "device_compliance": "Apparaatnaleving", + "search_devices": "Apparaten zoeken...", + "col_device": "Apparaat", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Totaal apparaten", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Nalevingspercentage", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configureren", + "no_devices": "Geen apparaten gevonden", + "usb_title": "USB-opslag", + "usb_hint": "Beheer beleid voor verwisselbare USB-opslag.", + "usb_storage_policy": "USB-opslagbeleid", + "usb_whitelist": "USB-toegestane lijst", + "usb_whitelist_hint": "Eén apparaat-ID of serienummer per regel.", + "usb_audit_log": "USB-auditlog", + "optical_title": "Optische stations", + "optical_hint": "Beheer toegang tot cd/dvd/blu-ray-stations.", + "optical_policy": "Beleid voor optische stations", + "optical_audit_log": "Auditlog optische stations", + "monitors_title": "Monitoren", + "monitors_hint": "Beperk het aantal schermen en de scherminstellingen.", + "monitors_max_count": "Maximaal aantal monitoren", + "monitors_max_hint": "0 betekent geen limiet.", + "monitors_resolution": "Resolutielimiet", + "monitors_brightness": "Helderheidslimiet", + "monitors_power_schedule": "Stroomschema voor monitoren", + "monitors_power_hint": "Optioneel schema voor automatisch uitschakelen of dimmen.", + "disks_title": "Schijven", + "disks_hint": "Beperk opslagapparaten en bewaak schijfgezondheid.", + "disks_readonly": "Alleen-lezen-modus afdwingen", + "disks_encryption": "Versleuteling vereisen", + "disks_smart": "SMART-gezondheid controleren", + "disks_hidden": "Verborgen paden", + "disks_hidden_hint": "Paden die voor bestandsbrowser en bestandsoverdracht verborgen moeten blijven.", + "quotas_title": "Quota en limieten", + "quotas_hint": "Beperk bandbreedte, opslag en processen.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Bandbreedtelimiet", + "quotas_bandwidth_hint": "Maximale overdrachtssnelheid per sessie.", + "quotas_disk_quota": "Schijfquota", + "quotas_disk_hint": "Maximale opslagruimte die BetterDesk-functies mogen gebruiken.", + "quotas_process_whitelist": "Toegestane processenlijst", + "quotas_process_hint": "Eén procesnaam per regel.", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Toegestane lijst", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Updatebeheer", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Huidige versie", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Nu controleren", + "checking": "Checking…", + "up_to_date": "Alles is actueel", + "update_available": "Update beschikbaar", + "changelog": "Release Notes", + "no_changelog": "Geen changelog beschikbaar", + "files_changed": "Gewijzigde bestanden", + "files": "Bestanden", + "changes_unavailable": "Wijzigingen niet beschikbaar", + "create_backup": "Back-up maken", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installeren...", + "creating_backup": "Back-up maken...", + "downloading": "Downloaden...", + "install_success": "Update succesvol geïnstalleerd", + "install_failed": "Installatie van update mislukt", + "restarting": "Services herstarten...", + "restart_complete": "Herstart voltooid", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Versie-informatie niet beschikbaar", + "backups_title": "Back-ups", + "backups_desc": "Herstel of beheer eerder gemaakte updateback-ups.", + "no_backups": "Geen back-ups gevonden", + "restore": "Restore", + "restore_confirm": "Deze back-up herstellen?", + "restore_success": "Back-up succesvol hersteld", + "baseline_set": "Baseline ingesteld", + "commits_behind": "Commits achter", + "total_files": "Totaal bestanden", + "applied": "Applied", + "failed": "Mislukt", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Go-server", + "component_agent": "Agent", + "component_scripts": "Installatiescripts", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Go-toolchain controleren...", + "go_not_found": "Go is niet gevonden", + "go_check_failed": "Go-controle mislukt", + "server_building": "Serverbinary bouwen...", + "server_built": "Serverbinary gebouwd", + "server_build_failed": "Serverbuild mislukt", + "server_deployed": "Serverbinary uitgerold", + "server_deploy_failed": "Serverbinary kon niet worden uitgerold", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Serverbroncode downloaden...", + "delete": "Verwijderen", + "delete_confirm": "Back-up {name} permanent verwijderen? Dit kan niet ongedaan worden gemaakt.", + "delete_success": "Back-up verwijderd", + "delete_failed": "Back-up kon niet worden verwijderd", + "retention_label": "Bewaartermijn", + "retention_hint": "Aantal dagen om updateback-ups te bewaren.", + "retention_saved": "Bewaartermijn opgeslagen", + "retention_invalid": "Ongeldige bewaartermijn", + "retention_required_for_prune": "Bewaartermijn is vereist om op te schonen", + "prune_now": "Apply now", + "prune_confirm": "Alleen de {n} meest recente back-ups behouden en de rest verwijderen?", + "prune_done": "{n} back-up(s) opgeschoond", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Updatestrategie", + "strategy_download": "Voorgebouwde binary downloaden", + "strategy_compile": "Lokaal compileren", + "both_available": "Download en compilatie beschikbaar", + "download_available": "Download beschikbaar", + "no_method": "Geen updatemethode beschikbaar", + "no_release": "No release", + "available": "Beschikbaar", + "server_downloading": "Serverbinary downloaden...", + "server_downloaded": "Serverbinary gedownload", + "server_download_failed": "Serverbinary kon niet worden gedownload", + "server_download_note": "Als er geen releasebinary beschikbaar is, bouw de server lokaal met Go.", + "install_go_hint": "Installeer Go om de serverbinary lokaal te bouwen.", + "strategy_install_go": "Go installeren en compileren", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Automatische update beschikbaar", + "toolchain_ready": "Toolchain gereed", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Toolchain downloaden...", + "toolchain_failed": "Toolchaininstallatie mislukt", + "modal_title": "Update installeren", + "modal_done_title": "Update voltooid", + "modal_close": "Sluiten", + "modal_reload_now": "Nu herladen", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Webconsole bijwerken", + "phase_server": "Servercomponent bijwerken", + "phase_restart": "Services herstarten", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Back-up overgeslagen", + "server_skipped": "Serverupdate overgeslagen", + "server_not_selected": "Go server not selected", + "server_processing": "Servercomponent verwerken...", + "no_restart_needed": "Geen herstart nodig", + "complete": "Voltooid", + "complete_summary": "Updateproces voltooid.", + "complete_with_errors": "Update voltooid met waarschuwingen", + "modal_done_with_errors_title": "Update voltooid met aandachtspunten", + "console_will_restart": "De webconsole wordt opnieuw gestart.", + "restart_complete_msg": "Herstart voltooid. Vernieuw de pagina indien nodig.", + "refresh_recommended": "Vernieuwen aanbevolen", + "confirm_title": "Update bevestigen", + "confirm_with_backup": "Er wordt eerst een back-up gemaakt voordat de update wordt geïnstalleerd.", + "confirm_no_backup": "De update wordt zonder back-up geïnstalleerd.", + "server_stale_title": "Serverbinary verouderd", + "server_stale_desc": "De broncode van de Go-server is bijgewerkt, maar de actieve binary is niet opnieuw gebouwd. Bouw deze nu opnieuw om beveiligings- en bibliotheekupdates toe te passen.", + "rebuild_server": "Serverbinary opnieuw bouwen", + "rebuilding_server": "Server opnieuw bouwen...", + "rebuild_server_success": "Serverbinary opnieuw gebouwd en herstart", + "rebuild_server_failed": "Serverbinary kon niet opnieuw worden gebouwd" + }, + "permissions": { + "title": "Machtigingen", + "subtitle": "Beheer fijnmazige machtigingen per serverrol.", + "info_title": "Rolgebaseerde machtigingen", + "info_desc": "Standaardrollen hebben ingebouwde machtigingen. U kunt specifieke machtigingen per rol overschrijven zonder de rolhiërarchie te wijzigen.", + "select_role": "Rol selecteren", + "select_role_placeholder": "Kies een rol...", + "reset_overrides": "Overschrijvingen resetten", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Serverniveau", + "custom": "Custom", + "default": "Default", + "revert": "Terugdraaien", + "saved": "Machtiging opgeslagen", + "reverted": "Machtiging teruggedraaid", + "all_reverted": "Alle overschrijvingen zijn teruggedraaid", + "confirm_reset": "Alle machtiging-overschrijvingen voor deze rol verwijderen?", + "empty_title": "Selecteer een rol", + "empty_desc": "Kies links een rol om de machtigingen te bekijken.", + "locked_title": "Super Admin", + "locked_desc": "Deze rol erft zijn basisgedrag uit de ingebouwde beveiligingshiërarchie.", + "cat_device": "Apparaten", + "cat_user": "Users", + "cat_server": "Serversysteem", + "cat_org": "Organisaties", + "cat_audit": "Audit en observatie", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Apparaten bekijken", + "perm_device_connect": "Met apparaten verbinden", + "perm_device_edit": "Apparaten bewerken", + "perm_device_delete": "Apparaten verwijderen", + "perm_device_ban": "Apparaten blokkeren", + "perm_device_change_id": "Apparaat-ID wijzigen", + "perm_user_view": "Gebruikers bekijken", + "perm_user_create": "Gebruikers maken", + "perm_user_edit": "Gebruikers bewerken", + "perm_user_delete": "Gebruikers verwijderen", + "perm_server_config": "Server configureren", + "perm_server_keys": "Serversleutels beheren", + "perm_org_create": "Organisaties maken", + "perm_org_edit": "Organisaties bewerken", + "perm_org_delete": "Organisaties verwijderen", + "perm_org_manage_users": "Organisatiegebruikers beheren", + "perm_org_manage_devices": "Organisatieapparaten beheren", + "perm_audit_view": "Auditlogs bekijken", + "perm_metrics_view": "Metrieken bekijken", + "perm_blocklist_edit": "Blokkeerlijst bewerken", + "perm_cdap_view": "CDAP bekijken", + "perm_cdap_command": "CDAP-commando’s uitvoeren", + "perm_cdap_terminal": "CDAP-terminal openen", + "perm_cdap_files": "CDAP-bestanden beheren", + "perm_enrollment_manage": "Registraties beheren", + "perm_enrollment_approve": "Registraties goedkeuren", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Branding bewerken", + "perm_server_attestation": "Server-Prestatieattestierung" + }, + "notifications": { + "title": "Meldingen", + "empty": "Geen nieuwe meldingen", + "mark_all_read": "Alles als gelezen markeren", + "see_all": "Alle hulpverzoeken bekijken", + "help_request": "Hulpverzoek", + "just_now": "just now" + }, + "accessibility": { + "title": "Toegankelijkheid", + "subtitle": "Pas de console aan voor zicht, beweging en lezen.", + "close": "Toegankelijkheidsmenu sluiten", + "profiles": "Snelle profielen", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Grotere tekst, sterker contrast en duidelijkere focusindicatoren.", + "profile_dyslexia": "Dyslexievriendelijk", + "profile_dyslexia_hint": "Leesbaar lettertype, ruimere spatiëring en rustigere tekstblokken.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Vermindert beweging en schakelt niet-essentiële animaties uit.", + "profile_color_assist": "Kleurondersteuning", + "profile_color_assist_hint": "Past kleuren aan en benadrukt links en koppen voor betere herkenbaarheid.", + "reading": "Lezen", + "font_size": "Tekstgrootte", + "line_height": "Regelhoogte", + "letter_spacing": "Letterspatiëring", + "word_spacing": "Woordspatiëring", + "readable_font": "Leesbaar lettertype", + "readable_font_hint": "Gebruik een lettertype dat voor lange tekstblokken gemakkelijker te lezen is.", + "dyslexia_spacing": "Dyslexiespatiëring", + "dyslexia_spacing_hint": "Vergroot regel-, woord- en letterafstand voor comfortabeler lezen.", + "visual": "Visueel", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Hoog contrast donker", + "contrast_high_light": "Hoog contrast licht", + "contrast_yellow_black": "Geel op zwart", + "color_filter": "Kleurfilter", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Verzadiging", + "underline_links": "Links onderstrepen", + "underline_links_hint": "Maak links visueel herkenbaar zonder alleen op kleur te vertrouwen.", + "highlight_links": "Links markeren", + "highlight_links_hint": "Voeg een zachte achtergrond toe aan klikbare links.", + "highlight_headings": "Koppen markeren", + "highlight_headings_hint": "Maak sectiekoppen duidelijker zichtbaar.", + "hide_media": "Dim media", + "hide_media_hint": "Verberg decoratieve afbeeldingen en niet-essentiële media.", + "interaction": "Interactie", + "strong_focus": "Sterke focusrand", + "strong_focus_hint": "Toon een duidelijke rand rond het actieve element.", + "large_cursor": "Grote cursor", + "large_cursor_hint": "Vergroot de cursorindicatoren in interactieve weergaven.", + "reduce_motion": "Beweging verminderen", + "reduce_motion_hint": "Beperk overgangen, parallax en bewegende effecten.", + "pause_animations": "Animaties pauzeren", + "pause_animations_hint": "Stop niet-essentiële animaties terwijl deze instelling actief is.", + "reading_guide": "Leesliniaal", + "reading_guide_hint": "Toon een horizontale gids die de huidige leesregel volgt.", + "reading_mask": "Leesmasker", + "reading_mask_hint": "Dim inhoud buiten het actieve leesgebied.", + "preview": "Voorbeeld", + "preview_title": "Voorbeeldtitel", + "preview_text": "Dit voorbeeld toont hoe tekst, links en knoppen eruitzien met de huidige toegankelijkheidsinstellingen.", + "preview_link": "Voorbeeldlink", + "preview_status": "Online", + "preview_button": "Voorbeeldknop", + "preview_secondary": "Secondary", + "reset": "Resetten", + "done": "Gereed" + }, + "server_mgmt": { + "title": "Serverbeheer", + "subtitle": "Cockpit-achtig paneel voor de BetterDesk-consolehost (BÈTA).", + "beta_tooltip": "Deze serverbeheerfuncties zijn nog in bèta.", + "notice_title": "Serverbeheer", + "notice_body": "Gebruik deze hulpmiddelen voorzichtig. Wijzigingen kunnen actieve services beïnvloeden.", + "tab_overview": "Overzicht", + "tab_terminal": "Terminal", + "tab_files": "Bestanden", + "tab_services": "Services", + "cpu": "CPU", + "memory": "Geheugen", + "load": "Laden", + "disks": "Schijven", + "history": "Geschiedenis", + "host_info": "Host info", + "cores": "cores", + "uptime": "Uptime", + "no_disks": "Geen schijven gevonden", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "Interactieve PTY-terminal beschikbaar", + "term_connect": "Verbinden", + "term_disconnect": "Verbinding verbreken", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Terminalfout", + "term_warning": "Terminalwaarschuwing", + "term_hint": "Voer opdrachten uit met dezelfde zorg als op de server zelf.", + "term_lib_failed": "Terminalbibliotheek kon niet worden geladen", + "files_up": "Omhoog", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Naam", + "files_size": "Grootte", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Deze map is leeg", + "files_error": "Bestanden konden niet worden geladen", + "read_failed": "Bestand kon niet worden gelezen", + "save_failed": "Bestand kon niet worden opgeslagen", + "rename_failed": "Naam wijzigen mislukt", + "delete_failed": "Verwijderen mislukt", + "delete_confirm": "Dit item verwijderen?", + "mkdir_prompt": "Nieuwe mapnaam", + "mkdir_failed": "Map kon niet worden gemaakt", + "file_saved": "Bestand opgeslagen", + "binary_warn": "Dit lijkt een binair bestand. Bewerken kan het bestand beschadigen.", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Services zoeken...", + "svc_name": "Service", + "svc_state": "Status", + "svc_description": "Description", + "svc_empty": "Geen services gevonden", + "svc_load_failed": "Services konden niet worden geladen", + "svc_action_failed": "Serviceactie mislukt", + "svc_confirm": "Run", + "svc_start": "Starten", + "svc_stop": "Stoppen", + "svc_restart": "Herstarten", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk Agent downloaden", + "choose_platform": "Platform kiezen", + "choose_platform_hint": "Selecteer het installatieprogramma dat bij uw besturingssysteem past.", + "download": "Downloaden", + "building": "Bouwen…", + "failed": "Build mislukt", + "need_help": "Hulp nodig?", + "powered_by": "Aangedreven door" + }, + "server_attestation": { + "title": "Serverattetering", + "subtitle": "Prestatiebenchmark die de capaciteit voor gelijktijdige externe verbindingen bepaalt bij een drempel van 80% CPU, RAM en schijf.", + "warning_title": "Belastingstest", + "warning_body": "De benchmark simuleert parallelle WebSocket-verbindingen naar de signaal- en relayservers. Voer uit tijdens daluren — deze test belast de productieomgeving.", + "run_benchmark": "Benchmark uitvoeren", + "abort": "Afbreken", + "download_report": "JSON-rapport downloaden", + "last_test": "Laatste test", + "no_test_yet": "Er is nog geen benchmark uitgevoerd", + "max_connections": "Maximale verbindingen", + "threshold_80": "80%-drempel — eindstatistieken", + "disk": "Schijf", + "ramp_chart": "Belastingsrampgrafiek", + "connections": "Verbindingen", + "connections_short": "verb.", + "tier_guide_title": "Wat betekent elk niveau?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "NIET BEOORDEELD", + "tier_bronze_desc": "1–25 gelijktijdige verbindingen — kleine VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 verbindingen — middensegmentserver (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 verbindingen — hogeprestatiestserver (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 verbindingen — enterprise-infrastructuur (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ verbindingen — turboclasse: dedicated hardware, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Opmerking: in Docker kunnen CPU/RAM-statistieken de containerlimieten weerspiegelen in plaats van de fysieke host.", + "badge_tooltip": "BetterDesk-serverattetering — serverprestaties certificering", + "confirm_run": "Deze benchmark zal de server belasten met gesimuleerde verbindingen. Doorgaan?", + "starting": "Starten...", + "complete": "Benchmark voltooid", + "signal_peers": "Signaalpeer's", + "relay_sessions": "Relaysessies", + "page_error": "Fout beim Laden der Serverattestatiesseite", + "mode_estimated": "Geschatzt (WebSocket nicht erreichbar)", + "incomplete": "Benchmark abgeschlossen ohne gultige Einstufung" + }, + "commercialization": { + "title": "Commercialisatie", + "subtitle": "Supportpakketten, factureerbare sessies en rapporten", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Vroege functie — facturering en pakketten zijn in actieve ontwikkeling.", + "tabs": { + "overview": "Overzicht", + "packages": "Pakketten & contracten", + "sessions": "Sessies", + "reports": "Rapporten", + "settings": "Geavanceerde instellingen" }, - "branding": { - "identity_title": "Merkidentiteit", - "identity_desc": "Pas de applicatienaam en beschrijving aan die in de console worden weergegeven", - "app_name": "Applicatienaam", - "app_description": "Applicatiebeschrijving", - "logo_title": "Logo", - "logo_desc": "Kies hoe uw logo wordt weergegeven in de zijbalk en op de inlogpagina", - "logo_type_icon": "Materiaalpictogram", - "logo_type_svg": "SVG-code", - "logo_type_image": "Afbeeldings-URL", - "logo_icon_name": "Pictogramnaam", - "logo_icon_hint": "Voer een Material Icons-naam in (bijv: dns, cloud, security). Zie fonts.google.com/icons", - "logo_svg_code": "SVG-code", - "logo_svg_hint": "Plak hier uw SVG-markup. Ondersteunt volledige -elementen met paden en stijlen.", - "logo_image_upload": "Afbeelding uploaden", - "logo_image_choose": "Afbeeldingsbestand kiezen", - "logo_image_hint": "PNG, JPG, GIF, WebP of SVG. Max 1,5 MB. Afbeelding wordt opgeslagen als base64-gegevens.", - "logo_image_url": "Afbeeldingsgegevens / URL", - "logo_image_url_hint": "Automatisch ingevuld bij uploaden of plak handmatig een URL.", - "logo_image_too_large": "Afbeelding is te groot. Maximale grootte: 1,5 MB.", - "logo_image_invalid_type": "Ongeldig bestandstype. Gebruik PNG, JPG, GIF, WebP of SVG.", - "preview": "Voorbeeld", - "colors_title": "Kleurenschema", - "colors_desc": "Pas het kleurenpalet aan. Laat leeg voor standaardwaarden.", - "colors_backgrounds": "Achtergronden", - "colors_text": "Tekst", - "colors_accents": "Accentkleuren", - "colors_borders": "Randen", - "import_export_title": "Importeren / Exporteren", - "import_export_desc": "Sla uw thema op als JSON-bestand of importeer er een van een andere instantie", - "export_theme": "Thema exporteren", - "import_theme": "Thema importeren", - "reset_defaults": "Standaardinstellingen herstellen", - "save_branding": "Huisstijl opslaan", - "saved": "Huisstijl succesvol opgeslagen. Herladen...", - "exported": "Thema geëxporteerd", - "imported": "Thema succesvol geïmporteerd. Herladen...", - "import_error": "Importeren van thema mislukt. Ongeldig bestandsformaat.", - "reset_confirm": "Weet u zeker dat u de huisstijl wilt herstellen naar standaard? Deze actie kan niet ongedaan worden gemaakt.", - "reset_success": "Huisstijl hersteld naar standaard. Herladen...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Primaire tekst die als merklogo wordt weergegeven", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Secundaire tekst onder het logo (bijv. productnaam of slogan)", - "logo_upload_success": "Logo succesvol geüpload.", - "typography_title": "Typography", - "typography_desc": "Kies lettertypen voor koppen en lopende tekst. Lettertypen worden naar de server gedownload voor self-hosting.", - "font_heading": "Lettertype voor koppen", - "font_heading_hint": "Gebruikt voor koppen (H1-H6) en tekstlogo", - "font_body": "Body Font", - "font_body_hint": "Gebruikt voor lopende tekst en UI-elementen", - "font_search_placeholder": "Lettertypen zoeken...", - "font_system_default": "Systeemstandaard", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "Lettertypen gedownload op de server", - "powered_by": "Entwickelt von", - "background_title": "Hintergrund & Erscheinungsbild", - "background_desc": "Ein Konsolen-Hintergrundbild, Farbverlauf oder einfarbigen Hintergrund festlegen. Karten schweben daruber.", - "bg_type_none": "Keiner", - "bg_type_color": "Einfarbig", - "bg_type_gradient": "Farbverlauf", - "bg_type_image": "Bild", - "bg_color": "Hintergrundfarbe", - "bg_gradient": "CSS-Farbverlauf", - "bg_gradient_hint": "Beliebiger gultiger CSS-Farbverlauf, z. B. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Hintergrundbild hochladen", - "bg_image_choose": "Bildbestand auswahlen", - "bg_image_hint": "PNG, JPG, WebP oder GIF. Maximal 8 MB. Auf dem Server opgeslagen.", - "bg_image_url": "Bildpfad / URL", - "bg_size": "Bildgrosse", - "bg_size_cover": "Abdecken (Bildschirm fullen)", - "bg_size_contain": "Einpassen (Contain)", - "bg_size_auto": "Auto (origineel)", - "bg_blur": "Hintergrundunscharfe", - "bg_overlay": "Dunkle Uberlagerung", - "bg_overlay_hint": "Verdunkelt den Hintergrund fur bessere Lesbarkeit des Textes.", - "bg_image_too_large": "Bild ist zu gross. Maximale Grosse betragt 8 MB.", - "bg_image_invalid_type": "Ungultiger Bestandtyp. Bitte PNG, JPG, WebP oder GIF verwenden.", - "bg_upload_success": "Hintergrundbild erfolgreich hochgeladen.", - "login_title": "Anmeldeseite", - "login_desc": "Uberschrift, Untertitel und Hintergrund des Anmeldebildschirms anpassen.", - "login_heading": "Anmeldeuberschrift", - "login_heading_placeholder": "Willkommen zuruck", - "login_subheading": "Anmeldeuntertitel", - "login_subheading_placeholder": "Bei Ihrem Konto anmelden", - "login_bg_inherit": "Wie die Konsole", - "agent_title": "Agent-Downloadseite", - "agent_desc": "Das offentliche Agent-Downloadportal fur Endbenutzer anpassen.", - "agent_show_powered": "\"Powered by BetterDesk\" anzeigen", - "agent_show_powered_hint": "Die BetterDesk-Zuschreibung in der Fusszeile des Downloadportals anzeigen.", - "footer_title": "Fusszeile & Copyright", - "footer_desc": "Eine benutzerdefinierte Fusszeile hinzufugen, die auf dem Anmeldebildschirm und in der Konsolenseitenleiste angezeigt wird.", - "footer_text": "Fusszeilentext", - "footer_text_hint": "z. B. ein Urheberrechtshinweis oder Firmenname.", - "show_powered": "BetterDesk-Zuschreibung anzeigen", - "show_powered_hint": "Den BetterDesk-Namen und die Version in der Anmeldefusszeile und Seitenleiste anzeigen.", - "custom_css_title": "Benutzerdefiniertes CSS", - "custom_css_desc": "Geavanceerd: Benutzerdefiniertes CSS einfugen, das auf der gesamten Konsole und der Anmeldeseite angewendet wird.", - "custom_css_hint": "Mit Vorsicht verwenden. Ungultige oder unsichere Regeln werden bereinigt. Maximal 20.000 Zeichen." + "clock": { + "title": "Servertijd (NTP)", + "check_now": "Nu controleren", + "unsynced": "Serverklok niet gesynchroniseerd — factureerbare sessies kunnen worden geblokkeerd" }, - "device_detail": { - "tab_overview": "Overzicht", - "tab_tags": "Tags en notities", - "tab_actions": "Acties", - "section_identity": "Identiteit", - "section_network": "Netwerk", - "section_timestamps": "Tijdstempels", - "section_connect": "Verbinding", - "section_manage": "Beheer", - "folder": "Map", - "status_tier": "Statusniveau", - "device_banned": "Dit apparaat is verbannen", - "no_reason": "Geen reden opgegeven", - "tags": "Tags", - "no_tags": "Geen tags toegewezen aan dit apparaat", - "tag_placeholder": "Voer een tagnaam in...", - "add_tag": "Toevoegen", - "tag_exists": "Deze tag bestaat al", - "notes": "Notities", - "notes_placeholder": "Notities over dit apparaat toevoegen...", - "danger_zone": "Gevarenzone", - "action_connect_web": "Web remote", - "action_connect_web_desc": "Verbinden via browser extern bureaublad", - "action_native_remote": "BetterDesk extern", - "action_native_remote_desc": "Native JPEG-stream — geen plugin vereist", - "action_connect_desktop": "Desktopclient", - "action_connect_desktop_desc": "Openen in desktop-client-app", - "action_change_id_desc": "Wijzig het registratie-ID van het apparaat", - "action_ban_desc": "Voorkom dat dit apparaat verbinding maakt", - "action_unban_desc": "Sta dit apparaat weer toe om verbinding te maken", - "action_delete_desc": "Verwijder dit apparaat permanent", - "tab_hardware": "Hardware", - "tab_metrics": "Metrieken", - "section_system": "Systeem", - "section_cpu": "Processor", - "section_memory": "Geheugen", - "section_displays": "Beeldschermen", - "section_encoding": "Coderingscapaciteit", - "section_live_metrics": "Live metrics", - "section_current_usage": "Huidig gebruik", - "section_usage_history": "Gebruiksgeschiedenis", - "os": "Besturingssysteem", - "version": "Clientversie", - "cpu_model": "CPU-model", - "cpu_cores": "CPU-kernen", - "cpu_freq": "CPU-frequentie", - "total_memory": "Totaal geheugen", - "metric_memory": "Geheugen", - "metric_disk": "Schijf", - "metrics_updated": "Bijgewerkt", - "device_groups": "Groepen", - "no_sysinfo": "Geen hardware-informatie beschikbaar", - "no_sysinfo_hint": "Systeeminformatie verschijnt nadat het apparaat een sysinfo-rapport heeft verzonden", - "no_metrics": "Geen metrische gegevens beschikbaar", - "no_metrics_hint": "Metrics verschijnen nadat het apparaat heartbeat-rapporten heeft verzonden", - "chart_oldest": "← Oudste", - "chart_newest": "Nieuwste →", - "tab_services": "Services", - "tab_processes": "Processen", - "tab_events": "Gebeurtenissen", - "tab_activity": "Activiteit", - "tab_files": "Bestanden", - "agent_lazy_hint": "Klik op dit tabblad om live gegevens van de agent te laden", - "agent_offline": "Agent is niet online", - "agent_timeout": "Agent reageerde niet op tijd", - "agent_error": "Gegevens van agent konden niet worden geladen", - "service_name": "Naam", - "service_display": "Weergavenaam", - "service_status": "Status", - "service_start": "Startmodus", - "process_name": "Naam", - "process_user": "Gebruiker", - "process_memory": "Geheugen" + "stats": { + "active_sessions": "Actieve factureerbare sessies" }, - "inventory": { - "title": "Inventaris", - "subtitle": "Hardware- en software-inventaris van beheerde apparaten", - "device_id": "Apparaat-ID", - "hostname": "Hostnaam", - "os": "Besturingssysteem", - "cpu": "CPU", - "cpu_cores": "CPU-kernen", - "cpu_usage": "CPU-gebruik", - "memory": "Geheugen", - "memory_total": "Totaal geheugen", - "memory_used": "Gebruikt geheugen", - "memory_available": "Beschikbaar geheugen", - "memory_usage": "Geheugengebruik", - "swap": "Swap", - "disks": "Schijven", - "disk_count": "Aantal schijven", - "network": "Netwerk", - "network_interfaces": "Netwerkinterfaces", - "software": "Software", - "software_count": "Geïnstalleerde software", - "system": "Systeem", - "kernel": "Kernel", - "architecture": "Architectuur", - "uptime": "Uptime", - "frequency": "Frequentie", - "physical_cores": "Fysieke kernen", - "logical_cores": "Logische kernen", - "model": "Model", - "usage": "Gebruik", - "total": "Totaal", - "used": "Gebruikt", - "available": "Beschikbaar", - "mount_point": "Koppelpunt", - "removable": "Verwisselbaar", - "mac_address": "MAC-adres", - "ip_addresses": "IP-adressen", - "traffic": "Verkeer", - "collect_now": "Nu verzamelen", - "collector_running": "Verzameling bezig", - "collector_stopped": "Verzameling gestopt", - "last_upload": "Laatste upload", - "total_uploads": "Totaal", - "last_seen": "Laatst gezien", - "collected_at": "Verzameld op", - "no_data": "Geen inventarisgegevens beschikbaar. Klik op \"Nu verzamelen\" om systeeminformatie te verkrijgen.", - "no_devices": "Geen apparaten met inventarisgegevens gevonden", - "detail_title": "Apparaat-inventarisdetail", - "telemetry": "Telemetrie", - "view_detail": "Detail bekijken", - "export": "Exporteren", - "refresh": "Vernieuwen" + "packages": { + "new": "Nieuw pakket", + "name": "Naam", + "included_minutes": "Inbegrepen minuten", + "overage_rate": "Overage tarief / u", + "currency": "Valuta", + "heading": "Supportpakketten", + "prompt_name": "Pakketnaam", + "create_title": "Nieuw pakket voor organisatie", + "create_submit": "Pakket aanmaken", + "select_org": "Organisatie", + "select_org_placeholder": "Selecteer organisatie…" }, - "tickets": { - "title": "Helpdesk", - "subtitle": "Ondersteuningstickets en probleemregistratie", - "create": "Nieuw ticket", - "edit": "Ticket bewerken", - "delete": "Ticket verwijderen", - "detail": "Ticketdetail", - "ticket_id": "Ticket-ID", - "ticket_title": "Titel", - "description": "Beschrijving", - "status": "Status", - "priority": "Prioriteit", - "category": "Categorie", - "assigned_to": "Toegewezen aan", - "created_by": "Aangemaakt door", - "device": "Apparaat", - "sla_due": "SLA-deadline", - "created_at": "Aangemaakt", - "updated_at": "Bijgewerkt", - "resolved_at": "Opgelost", - "closed_at": "Gesloten", - "status_open": "Openstaand", - "status_in_progress": "In behandeling", - "status_resolved": "Opgelost", - "status_closed": "Gesloten", - "priority_low": "Laag", - "priority_medium": "Gemiddeld", - "priority_high": "Hoog", - "priority_critical": "Kritiek", - "category_general": "Algemeen", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Netwerk", - "category_access": "Toegang", - "category_other": "Overig", - "comments": "Opmerkingen", - "add_comment": "Opmerking toevoegen", - "comment_placeholder": "Schrijf een opmerking...", - "internal_note": "Interne notitie (niet zichtbaar voor eindgebruikers)", - "attachments": "Bijlagen", - "upload_attachment": "Bijlage uploaden", - "download": "Downloaden", - "connect_device": "Verbinden met apparaat", - "no_tickets": "Geen tickets gevonden", - "no_comments": "Geen opmerkingen", - "no_attachments": "Geen bijlagen", - "title_required": "Titel is vereist", - "delete_confirm": "Weet u zeker dat u ticket #{id} wilt verwijderen?", - "delete_success": "Ticket succesvol verwijderd", - "created_success": "Ticket succesvol aangemaakt", - "updated_success": "Ticket succesvol bijgewerkt", - "sla_overdue": "SLA overschreden", - "filter_all": "Alle", - "search_placeholder": "Tickets zoeken...", - "assign_to_me": "Aan mij toewijzen", - "unassign": "Toewijzing verwijderen", - "stats_total": "Totaal", - "stats_open": "Openstaande tickets", - "stats_in_progress": "In behandeling", - "stats_resolved": "Opgelost", - "stats_closed": "Gesloten" - }, - "activity": { - "title": "Activiteitsmonitoring", - "subtitle": "Applicatiegebruik en inactiviteitsregistratie", - "device": "Apparaat", - "hostname": "Hostnaam", - "sessions": "Sessies", - "idle_time": "Inactieve tijd", - "active_time": "Actieve tijd", - "last_report": "Laatste rapport", - "top_apps": "Meest gebruikte applicaties", - "app_name": "Applicatie", - "window_title": "Venstertitel", - "category": "Categorie", - "duration": "Duur", - "started_at": "Gestart", - "ended_at": "Beëindigd", - "session_count": "Aantal sessies", - "total_active": "Totaal actief", - "total_idle": "Totaal inactief", - "detail_count": "Gedetailleerde records", - "no_data": "Geen activiteitsgegevens beschikbaar", - "no_sessions": "Geen sessies geregistreerd", - "filter_from": "Van", - "filter_to": "Tot", - "filter_apply": "Filter toepassen", - "hours": "uren", - "minutes": "minuten", - "seconds": "seconden", - "category_browser": "Browser", - "category_productivity": "Productiviteit", - "category_communication": "Communicatie", - "category_development": "Ontwikkeling", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "Systeem", - "category_other": "Overig", - "summary": "Samenvatting", - "details": "Details", - "refresh": "Vernieuwen", - "search": "Apparaten zoeken...", - "date_range": "Date Range", - "device_id": "Apparaat-ID", - "session_start": "Sessiestart", - "session_end": "Sessieeinde", - "user": "Gebruiker", - "no_activity": "Geen activiteit geregistreerd", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Geen applicaties" - }, - "automation": { - "title": "Automatisering en waarschuwingen", - "subtitle": "Alarmregels, externe commando's en SMTP-configuratie", - "rules": "Alarmregels", - "rules_subtitle": "Definieer voorwaarden die meldingen activeren", - "alerts": "Waarschuwingsgeschiedenis", - "alerts_subtitle": "Bekijk en bevestig geactiveerde waarschuwingen", - "commands": "Externe commando's", - "commands_subtitle": "Verstuur commando's naar externe apparaten", - "smtp": "SMTP-configuratie", - "smtp_subtitle": "Instellingen voor e-mailmeldingen", - "rule_name": "Regelnaam", - "description": "Beschrijving", - "condition_type": "Voorwaardetype", - "condition_op": "Operator", - "condition_value": "Drempelwaarde", - "severity": "Ernst", - "scope_device": "Doelapparaat", - "scope_all": "Alle apparaten", - "cooldown": "Hersteltijd (seconden)", - "notify_emails": "Meldingse-mails", - "enabled": "Ingeschakeld", - "disabled": "Uitgeschakeld", - "create_rule": "Regel aanmaken", - "edit_rule": "Regel bewerken", - "delete_rule": "Regel verwijderen", - "acknowledge": "Bevestigen", - "acknowledged": "Bevestigd", - "unacknowledged": "Niet bevestigd", - "triggered_at": "Geactiveerd op", - "severity_info": "Informatie", - "severity_warning": "Waarschuwing", - "severity_critical": "Kritiek", - "op_gt": "Groter dan", - "op_gte": "Groter dan of gelijk aan", - "op_lt": "Kleiner dan", - "op_lte": "Kleiner dan of gelijk aan", - "op_eq": "Gelijk aan", - "op_neq": "Niet gelijk aan", - "type_cpu_usage": "CPU-gebruik (%)", - "type_memory_usage": "Geheugengebruik (%)", - "type_disk_usage": "Schijfgebruik (%)", - "type_offline_duration": "Offline duur (s)", - "type_idle_duration": "Inactieve duur (s)", - "type_custom": "Aangepast", - "command_type": "Commandotype", - "command_payload": "Commando / Script", - "command_result": "Resultaat", - "command_status": "Status", - "send_command": "Commando verzenden", - "status_pending": "Wachtend", - "status_running": "Actief", - "status_completed": "Voltooid", - "status_failed": "Mislukt", - "smtp_host": "SMTP-host", - "smtp_port": "Poort", - "smtp_secure": "TLS gebruiken", - "smtp_user": "Gebruikersnaam", - "smtp_pass": "Wachtwoord", - "smtp_from": "Afzenderadres", - "smtp_test": "Verbinding testen", - "smtp_save": "Configuratie opslaan", - "smtp_test_success": "Verbinding geslaagd", - "smtp_test_failed": "Verbinding mislukt", - "no_rules": "Geen alarmregels geconfigureerd", - "no_alerts": "Geen geactiveerde waarschuwingen", - "no_commands": "Geen commando's verzonden", - "id_payload_required": "Apparaat-ID en payload zijn vereist", - "no_commands_sent": "Nog geen commando's verzonden" - }, - "file_transfer": { - "title": "Bestandsoverdracht", - "transfers": "Overdrachten", - "new_transfer": "Nieuwe overdracht", - "upload": "Uploaden", - "download": "Downloaden", - "direction": "Richting", - "filename": "Bestandsnaam", - "file_size": "Bestandsgrootte", - "mime_type": "MIME-type", - "progress": "Voortgang", - "status": "Status", - "device": "Apparaat", - "initiated_by": "Gestart door", - "created_at": "Aangemaakt op", - "cancel": "Annuleren", - "cancel_confirm": "Weet u zeker dat u deze overdracht wilt annuleren?", - "download_file": "Bestand downloaden", - "browse_files": "Bestanden bladeren", - "select_file": "Bestand selecteren", - "select_device": "Apparaat selecteren", - "no_transfers": "Geen bestandsoverdrachten", - "status_pending": "Wachtend", - "status_active": "Actief", - "status_completed": "Voltooid", - "status_failed": "Mislukt", - "status_cancelled": "Geannuleerd", - "bytes_transferred": "Overgedragen bytes", - "chunks": "Blokken", - "transfer_started": "Overdracht gestart", - "transfer_completed": "Overdracht voltooid", - "transfer_failed": "Overdracht mislukt", - "transfer_cancelled": "Overdracht geannuleerd", - "max_file_size": "Maximale bestandsgrootte: 4 GB", - "error_too_large": "Het bestand is te groot", - "error_no_device": "Geen apparaat geselecteerd", - "error_no_file": "Geen bestand geselecteerd" - }, - "network": { - "title": "Netwerkmonitoring", - "targets": "Monitoringdoelen", - "add_target": "Doel toevoegen", - "edit_target": "Doel bewerken", - "delete_target": "Doel verwijderen", - "delete_confirm": "Weet u zeker dat u dit doel wilt verwijderen?", - "target_name": "Naam", - "host": "Host", - "port": "Poort", - "url": "URL", - "check_type": "Controletype", - "timeout": "Time-out", - "interval": "Intervaltijd", - "enabled": "Ingeschakeld", - "status": "Status", - "last_check": "Laatste controle", - "last_rtt": "Laatste RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Bereikbaar", - "status_down": "Onbereikbaar", - "status_unknown": "Onbekend", - "check_now": "Nu controleren", - "history": "Controlegeschiedenis", - "stats": "Statistieken", - "total_targets": "Totaal doelen", - "targets_up": "Bereikbare doelen", - "targets_down": "Onbereikbare doelen", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP-poort", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Netwerkhulpmiddelen", - "ping_tool": "Pingtest", - "tcp_tool": "TCP-poortcontrole", - "http_tool": "HTTP-controle", - "dns_tool": "DNS-resolutie", - "monitor_start": "Monitoring starten", - "monitor_stop": "Monitoring stoppen", - "monitor_running": "Monitoring actief", - "monitor_stopped": "Monitoring gestopt", - "no_targets": "Geen monitoringdoelen geconfigureerd", - "no_history": "Geen controlegeschiedenis beschikbaar", - "error_code": "Fout", - "status_code": "HTTP-statuscode", - "search_targets": "Doelen zoeken...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Controlehistorie", - "name_host_required": "Naam en host zijn verplicht", - "uptime": "Uptime", - "response_time": "Reactietijd", - "avg_response": "Gemiddelde reactie", - "charts": "Grafieken", - "realtime": "Realtime", - "response_time_ms": "Reactietijd (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Laatste 24 uur", - "last_7d": "Laatste 7 dagen", - "last_30d": "Laatste 30 dagen" - }, - "dataguard": { - "title": "DataGuard", - "policies": "DLP-beleid", - "add_policy": "Beleid toevoegen", - "edit_policy": "Beleid bewerken", - "delete_policy": "Beleid verwijderen", - "delete_confirm": "Weet u zeker dat u dit beleid wilt verwijderen?", - "policy_name": "Naam", - "policy_description": "Beschrijving", - "status": "Status", - "enabled": "Ingeschakeld", - "disabled": "Uitgeschakeld", - "rules": "Regels", - "add_rule": "Regel toevoegen", - "rule_type": "Regeltype", - "rule_type_usb": "USB-apparaat", - "rule_type_file": "Bestandsbewerking", - "action": "Actie", - "action_allow": "Toestaan", - "action_block": "Blokkeren", - "action_log": "Alleen loggen", - "filter": "Filter", - "vid": "Fabrikant-ID (VID)", - "pid": "Product-ID (PID)", - "serial": "Serienummer", - "device_class": "Apparaatklasse", - "drive_type": "Schijftype", - "file_extensions": "Bestandsextensies", - "events": "DLP-events", - "event_source": "Bron", - "event_source_usb": "USB", - "event_source_file": "Bestand", - "event_type": "Eventtype", - "event_details": "Details", - "no_policies": "Geen DLP-beleid geconfigureerd", - "no_events": "Geen DLP-events geregistreerd", - "stats": "Statistieken", - "total_events": "Totaal events", - "blocked_events": "Geblokkeerd", - "logged_events": "Gelogd", - "usb_events": "USB-events", - "file_events": "Bestandsevents", - "device_id": "Apparaat-ID", - "policy_matched": "Overeenkomend beleid", - "timestamp": "Tijdstempel", - "drive_removable": "Verwisselbaar", - "drive_fixed": "Vast", - "drive_network": "Netwerk", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Onbekend", - "total_policies": "Totaal beleid", - "active_policies": "Actief beleid", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Beleid", - "tab_events": "Events", - "search_policies": "Beleid zoeken...", - "create_policy": "Beleid maken", - "policy_type": "Beleidstype", - "scope": "Scope", - "events_count": "Events", - "search_events": "Gebeurtenissen zoeken...", - "event_time": "Event Time", - "device": "Apparaat", - "policy": "Beleid", - "detail": "Detail", - "scope_help": "Komma-gescheiden apparaat-ID’s of leeg voor alle apparaten", - "scope_all": "Alle", - "active": "Active", - "type_file_type": "Bestandstype", - "type_clipboard": "Klembord", - "type_screen_share": "Scherm delen", - "type_file_transfer": "Bestandsoverdracht", - "policy_desc": "Beleidsbeschrijving", - "type_usb": "USB" + "sessions": { + "device": "Apparaat", + "operator": "Operator", + "duration": "Duur", + "phase": "Fase", + "amount": "Bedrag" }, "reports": { - "title": "Rapporten", - "generate": "Rapport genereren", - "generate_csv": "CSV exporteren", - "report_type": "Rapporttype", - "type_devices": "Apparaatoverzicht", - "type_activity": "Activiteitsoverzicht", - "type_security": "Beveiligingsrapport", - "type_tickets": "Ticketrapport", - "type_network": "Netwerkrapport", - "type_inventory": "Inventarisrapport", - "type_alerts": "Waarschuwingsrapport", - "saved": "Opgeslagen rapporten", - "save_report": "Rapport opslaan", - "delete_report": "Rapport verwijderen", - "delete_confirm": "Weet u zeker dat u dit opgeslagen rapport wilt verwijderen?", - "no_saved": "Geen opgeslagen rapporten", - "report_title": "Titel", - "created_by": "Aangemaakt door", - "created_at": "Aangemaakt op", - "filters": "Filters", - "date_from": "Van", - "date_to": "Tot", - "device_filter": "Apparaat-ID", - "generated_at": "Gegenereerd op", - "section": "Gegevenssectie", - "total_devices": "Totaal apparaten", - "online": "Online", - "offline": "Offline", - "banned": "Verbannen", - "platform_distribution": "Platformdistributie", - "top_applications": "Meest gebruikte applicaties", - "total_active": "Totaal actieve tijd", - "total_idle": "Totaal inactieve tijd", - "dlp_stats": "DLP-statistieken", - "banned_devices": "Verbannen apparaten", - "audit_logs": "Auditlogs", - "ticket_stats": "Ticketstatistieken", - "category_distribution": "Categoriedistributie", - "priority_distribution": "Prioriteitsdistributie", - "targets_status": "Doelstatus", - "os_distribution": "OS-distributie", - "avg_ram": "Gemiddeld RAM", - "alert_rules": "Alarmregels", - "recent_alerts": "Recente waarschuwingen", - "tab_generate": "Genereren", - "tab_saved": "Opgeslagen rapporten", - "type_devices_desc": "Overzicht van alle geregistreerde apparaten", - "type_activity_desc": "Applicatiegebruik en sessiestatistieken", - "type_security_desc": "Beveiligingsgebeurtenissen en verbannen apparaten", - "type_tickets_desc": "Statistieken en overzicht van ondersteuningstickets", - "type_network_desc": "Netwerkmonitoring en uptimegegevens", - "type_inventory_desc": "Hardware- en software-inventaris", - "type_alerts_desc": "Waarschuwingen en regelgeschiedenis", - "report_name": "Rapportnaam", - "format": "Formaat", - "save": "Opslaan", - "preview": "Voorbeeld", - "download": "Downloaden", - "delete_saved": "Opgeslagen rapport verwijderen", - "raw_json": "Raw JSON" + "session": "Sessie", + "summary": "Samenvatting", + "date": "Datum" }, - "tenants": { - "title": "Multi-tenancy", - "list": "Tenants", - "add_tenant": "Tenant toevoegen", - "edit_tenant": "Tenant bewerken", - "delete_tenant": "Tenant verwijderen", - "delete_confirm": "Weet u zeker dat u deze tenant wilt verwijderen? Alle apparaat- en gebruikerstoewijzingen worden verwijderd.", - "name": "Naam", - "slug": "Slug", - "contact_name": "Contactnaam", - "contact_email": "Contact-e-mail", - "max_devices": "Max apparaten", - "max_devices_hint": "0 = onbeperkt", - "notes": "Notities", - "active": "Actief", - "inactive": "Inactief", - "devices": "Apparaten", - "users": "Gebruikers", - "assign_device": "Apparaat toewijzen", - "assign_devices": "Apparaten toewijzen", - "remove_device": "Apparaat verwijderen", - "assign_user": "Gebruiker toewijzen", - "remove_user": "Gebruiker verwijderen", - "no_tenants": "Geen tenants geconfigureerd", - "no_devices": "Geen apparaten toegewezen aan deze tenant", - "no_users": "Geen gebruikers toegewezen aan deze tenant", - "stats": "Tenantstatistieken", - "total_devices": "Totaal apparaten", - "online_devices": "Online apparaten", - "total_users": "Totaal gebruikers", - "created_at": "Aangemaakt op", - "updated_at": "Bijgewerkt op", - "slug_exists": "Tenant-slug bestaat al", - "total_tenants": "Totaal tenants", - "active_tenants": "Actieve tenants", - "search": "Tenant zoeken...", - "create_tenant": "Tenant aanmaken", - "detail": "Tenantdetails", - "contact": "Contact", - "enabled": "Ingeschakeld", - "disabled": "Tenants uitgeschakeld", - "max": "Max", - "info": "Tenantinformatie", - "status": "Status" + "contracts": { + "title": "Organisatiecontracten", + "new": "Pakket toewijzen", + "org": "Organisatie", + "package": "Pakket", + "remaining": "Resterende minuten", + "status": "Status", + "actions": "Acties", + "suspend": "Opschorten", + "activate": "Activeren", + "select_org": "Selecteer organisatie", + "select_package": "Selecteer pakket", + "no_orgs": "Geen organisaties gevonden", + "no_packages": "Maak eerst een pakket aan" }, - "registrations": { - "title": "Apparaatregistraties", - "subtitle": "Beheer registratieverzoeken van apparaten ontdekt via LAN", - "search_placeholder": "Zoeken op apparaat-ID, hostnaam of IP...", - "no_registrations": "Geen registratieverzoeken", - "col_device_id": "Apparaat-ID", - "col_hostname": "Hostnaam", - "col_platform": "Platform", - "col_ip": "IP-adres", - "col_version": "Versie", - "col_status": "Status", - "col_requested": "Aangevraagd", - "col_actions": "Acties", - "status_pending": "Wachtend", - "status_approved": "Goedgekeurd", - "status_rejected": "Afgewezen", - "approve_btn": "Goedkeuren", - "approve_confirm": "Weet u zeker dat u dit apparaat wilt goedkeuren? Het ontvangt de serverreferenties en kan automatisch verbinding maken.", - "approved_success": "Apparaatregistratie succesvol goedgekeurd", - "reject_btn": "Afwijzen", - "reject_title": "Registratie afwijzen", - "reject_confirm": "Weet u zeker dat u dit registratieverzoek wilt afwijzen?", - "reject_reason": "Reden (optioneel)", - "reject_reason_placeholder": "Voer de reden van afwijzing in...", - "rejected_success": "Apparaatregistratie afgewezen", - "delete_confirm": "Weet u zeker dat u dit registratierecord wilt verwijderen?", - "deleted_success": "Registratierecord verwijderd", - "enrollment_title": "Apparaatregistratie", - "enrollment_subtitle": "Openstaande registratieverzoeken van BetterDesk-desktopclients", - "enrollment_empty": "Geen openstaande registratieverzoeken", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Weergavenaam", - "enrollment_display_name_placeholder": "Voer een naam voor dit apparaat in...", - "enrollment_sync_mode": "Synchronisatiemodus", - "enrollment_sync_silent": "Stil — minimale telemetrie", - "enrollment_sync_standard": "Standaard — gebalanceerde synchronisatie", - "enrollment_sync_turbo": "Turbo — agressieve synchronisatie", - "enrollment_approved_success": "Apparaatregistratie goedgekeurd", - "enrollment_rejected_success": "Apparaatregistratie geweigerd", - "approve_title": "Gerat genehmigen", - "field_name": "Geratename", - "field_name_placeholder": "Name fur dieses Gerat eingeben...", - "field_sync_mode": "Synchronisatiemodus", - "sync_standard": "Standaard — gebalanceerde synchronisatie", - "sync_silent": "Lautlos — minimale Telemetrie", - "sync_turbo": "Turbo — agressieve synchronisatie", - "field_tags": "Tags", - "field_tags_placeholder": "Kommagetrennte Tags (z. B. Buro, Laptop)...", - "field_tags_existing": "Vorhandene Tags", - "field_tag_add_placeholder": "Neues Tag hinzufugen...", - "field_tag_add_btn": "Hinzufugen", - "field_groups": "Gerategruppen", - "field_folder": "Map", - "field_folder_none": "Kein Map", - "reject_ban_option": "Dieses Gerat sperren", - "reject_ban_hint": "Das Gerat wird gesperrt und kann keine neuen Registrierungsanfragen senden.", - "banner_open_mode": "Registrierung ist offen — neue RustDesk-Clients registrieren sich ohne Goedkeuring des Operators. Verwalteten Modus in den Instellingen festlegen, um diese Warteschlange zu nutzen.", - "banner_locked_mode": "Registrierung ist gesperrt — nur token-gebundene Gerate konnen sich registrieren. Der verwaltete Modus ist fur die Goedkeuring onbekender Clients durch den Operator erforderlich.", - "enrollment_settings_link": "Registrierungsinstellingen" + "export": { + "csv": "Exporteer CSV", + "pdf": "Exporteer PDF", + "sessions_csv": "Exporteer sessies CSV" }, - "backup": { - "title": "Back-up", - "desc": "Download een volledige back-up van de consoleconfiguratie, gebruikers, groepen en instellingen. Peer-gegevens van de Go-server worden meegenomen wanneer de BetterDesk-backend actief is.", - "restore_title": "Herstellen", - "restore_desc": "Upload een eerder gedownloaded back-upbestand om de consoleconfiguratie te herstellen. Selecteer hieronder welke secties u wilt herstellen.", - "stat_users": "Gebruikers", - "stat_settings": "Instellingen", - "stat_folders": "Mappen", - "stat_groups": "Groepen", - "stat_strategies": "Strategieën", - "stat_backend": "Backend", - "download": "Back-up downloaden", - "creating": "Back-up maken...", - "download_success": "Back-up succesvol gedownload", - "upload": "Back-up uploaden", - "restore_confirm": "Weet u zeker dat u wilt herstellen vanuit deze back-up? De geselecteerde secties worden overschreven.", - "restore_success": "Back-up succesvol hersteld. Sommige wijzigingen vereisen mogelijk het herladen van de pagina.", - "restored": "Hersteld", - "skipped": "Overgeslagen", - "backup_date": "Back-updatum", - "opt_settings": "Console-instellingen", - "opt_branding": "Huisstijl / Thema", - "opt_folders": "Apparaatmappen", - "opt_groups": "Gebruikers- en apparaatgroepen", - "opt_addressbooks": "Adresboeken", - "opt_users": "Gebruikersaccounts", - "opt_users_warning": "Destructief: vervangt ALLE gebruikersaccounts met back-upgegevens. U kunt worden uitgelogd.", - "no_file": "Geen back-upbestand geselecteerd", - "invalid_json": "Ongeldig back-upbestand: ongeldig JSON", - "invalid_format": "Ongeldig back-upbestand: is geen BetterDesk-back-up", - "stat_database": "Database-Engine", - "stat_keys": "Serverschlussel enthalten", - "stat_env": "Omgevingsbestand", - "stat_uploads": "Branding-Bestanden", - "restart_required": "Einige wiederhergestellte Komponenten (Schlussel / .env / Go-Database) erfordern einen Serviceherstart, damit die Anderungen wirksam werden.", - "security_warning": "Dieses Backup enthalt Geheimen (Serverschlussel, Omgevingsbestand, Passwort-Hashes und 2FA-Geheimen). Sicher aufbewahren und niemals teilen.", - "restore_warning": "Das Herstellen von Geheimenn, der Omgevingsbestand oder der Go-Server-Database uberschreibt die Serveridentitat und erfordert danach einen Serviceherstart.", - "opt_database": "Database (alle tabellen)", - "opt_database_hint": "Importiert alle Konsolendaten erneut. Wird sofort angewendet, kein Herstart erforderlich.", - "opt_uploads": "Branding-Bestanden", - "opt_uploads_hint": "Logo's en geüploade afbeeldingen.", - "opt_secrets": "Serverschlussel & Geheimen", - "opt_secrets_warning": "Uberschreibt die Ed25519-Serveridentitat, den API-Schlussel und das Sessiegeheim. Erfordert einen Serviceherstart.", - "opt_env": "Omgevingsbestand (.env)", - "opt_env_warning": "Uberschreibt SESSION_SECRET, API-Schlussel, Database-DSN, Ports und TLS-Instellingen. Erfordert einen Serviceherstart.", - "opt_godb": "Go-Server-Database", - "opt_godb_warning": "Uberschreibt die SQLite-Database des Go-Servers (nur SQLite-Backend). Erfordert einen Serviceherstart." + "report": { + "title": "Werkrapport", + "subtitle": "Beschrijf het uitgevoerde werk tijdens deze remote sessie.", + "category": "Categorie", + "ticket_ref": "Ticketreferentie", + "summary": "Uitgevoerd werk", + "skip": "Nu overslaan", + "submit": "Rapport verzenden", + "summary_required": "Samenvatting is verplicht", + "saved": "Werkrapport opgeslagen" }, - "cdap": { - "device_detail": "Apparaatdetails", - "loading": "Laden...", - "loading_widgets": "Apparaatwidgets laden...", - "load_error": "Apparaatgegevens konden niet worden geladen", - "connected": "Verbonden", - "disconnected": "Verbinding verbroken", - "device_offline_msg": "Het apparaat is momenteel offline. Widgetwaarden kunnen verouderd zijn.", - "no_widgets": "Geen widgets beschikbaar", - "no_widgets_desc": "Dit apparaat heeft geen CDAP-manifest met widgetdefinities geregistreerd.", - "command_log": "Commando-log", - "clear_log": "Logboek wissen", - "confirm_command": "Command bevestigen", - "select_option": "Selecteren", - "cdap_status": "CDAP-status", - "cdap_enabled": "CDAP ingeschakeld", - "cdap_disabled": "CDAP uitgeschakeld", - "cdap_devices": "CDAP-apparaten", - "cdap_connections": "Actieve verbindingen", - "send_command": "Command verzenden", - "command_sent": "Commando succesvol verzonden", - "command_failed": "Commando verzenden mislukt", - "devices_title": "CDAP-apparaten", - "devices_subtitle": "Apparaten verbonden via Custom Device Application Protocol", - "stat_connected": "Verbonden", - "stat_port": "Poort", - "search_devices": "Apparaten zoeken...", - "no_devices": "Geen apparaten", - "no_devices_desc": "Er zijn momenteel geen CDAP-apparaten verbonden. Apparaten verschijnen hier zodra ze verbinding maken met de gateway.", - "gateway_disabled": "Gateway uitgeschakeld", - "gateway_disabled_desc": "Schakel de CDAP-gateway in door CDAP_ENABLED=true in de serverconfiguratie te zetten.", - "gateway_active": "Actief", - "toggle_enable": "CDAP inschakelen", - "toggle_disable": "CDAP uitschakelen", - "enabled_restart": "CDAP ingeschakeld. Een serverherstart is vereist om wijzigingen toe te passen.", - "disabled_restart": "CDAP uitgeschakeld. Een serverherstart is vereist om wijzigingen toe te passen.", - "widgets": "Widgets", - "type_all": "Alle", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-agent", - "type_network": "Netwerk", - "type_camera": "Camera", - "type_custom": "Aangepast", - "active_alerts": "Actieve waarschuwingen", - "alert_fired": "Melding geactiveerd", - "alert_cleared": "Waarschuwing gewist", - "no_alerts": "Geen waarschuwingen", - "connect_terminal": "Terminal verbinden", - "table_search": "Zoeken...", - "just_now": "Zojuist", - "terminal_connecting": "Verbinden met apparaat...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Terminalverbinding mislukt", - "linked_devices": "Gekoppelde apparaten", - "link_device": "Apparaat koppelen", - "unlink_device": "Ontkoppelen", - "no_linked_devices": "Geen gekoppelde apparaten", - "unlink_confirm": "Weet u zeker dat u dit apparaat wilt ontkoppelen?", - "link_prompt": "Voer de peer-ID in om aan dit apparaat te koppelen:", - "connect_desktop": "Desktop verbinden", - "connect_video": "Stream verbinden", - "connect_files": "Bestanden bekijken", - "connect_audio": "Audio verbinden", - "upload_file": "Upload", - "desktop_connecting": "Verbinden met bureaublad...", - "video_connecting": "Verbinden...", - "files_connecting": "Verbinden...", - "audio_connecting": "Audio verbinden...", - "audio_streaming": "Audio streamen", - "clipboard_in": "Klembord inkomend", - "clipboard_out": "Klembord uitgaand", - "monitor_select": "Monitor selecteren", - "keyframe_request": "Keyframe aanvragen", - "quality_auto": "Automatische kwaliteit" + "empty": { + "packages": "Nog geen pakketten. Maak er een met de knop hierboven.", + "contracts": "Nog geen organisatiecontracten. Wijs een pakket toe aan een organisatie.", + "sessions": "Nog geen factureerbare sessies geregistreerd.", + "reports": "Nog geen werkrapporten ingediend." }, - "desktop": { - "switch_mode": "Modus wisselen", - "console_mode": "Consolemodus", - "loading": "Laden", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Sluiten", - "widgets_mode": "Widgetmodus", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Widget toevoegen", - "remove_widget": "Widget verwijderen", - "configure": "Configureren", - "search_widgets": "Widgets zoeken...", - "cat_monitoring": "Monitoring", - "cat_devices": "Apparaten", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Notities...", - "search_placeholder": "Zoeken...", - "search_pages": "Pages", - "search_devices": "Apparaten zoeken", - "search_no_results": "No results", - "exit_desktop": "Exit Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Apparaatstatus", - "widget_server_health": "Servergezondheid", - "widget_system_stats": "Systeemstatistieken", - "widget_device_list": "Apparaatlijst", - "widget_quick_actions": "Snelle acties", - "widget_recent_activity": "Recente activiteit", - "widget_notes": "Notes", - "widget_network_monitor": "Netwerkmonitor", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP-apparaten", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Apparaatraster", - "widget_multi_gauge": "Meervoudige meter", - "widget_weekly_chart": "Weekgrafiek", - "widget_quick_controls": "Snelle bediening", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Verbindingsstatistieken", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Gebruikerssessies", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Geen apparaten", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Openen", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "URL instellen", - "label_server_uptime": "Serveruptime", - "label_merged_info": "Samengevoegde informatie", - "label_with_notes": "Met notities", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Totaal apparaten", - "label_throughput": "Throughput", - "label_active_relays": "Actieve relays", - "label_total_relayed": "Totaal doorgestuurd", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Apparaten filteren", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Geen CDAP-apparaten", - "action_add_widget": "Widget toevoegen", - "label_merged_server_info": "Samengevoegde serverinformatie", - "wp_images": "Afbeeldingen", - "wp_colors": "Effen kleuren", - "wp_custom_color": "Aangepaste kleur", - "wp_fit_style": "Stijl", - "wp_fill": "Vullen", - "wp_fit": "Passend", - "wp_stretch": "Uitrekken", - "wp_center": "Centreren", - "widget_calendar": "Calendar", - "widget_process_monitor": "Procesmonitor", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Databasestatistieken", - "widget_docker_containers": "Docker-containers", - "widget_shell_command": "Shellopdracht", - "widget_device_map": "Apparaatkaart", - "widget_remote_connect": "Externe verbinding", - "label_no_online": "Geen online apparaten", - "label_no_events": "Geen gebeurtenissen", - "label_event_title": "Gebeurtenistitel", - "label_no_data": "Geen gegevens", - "label_download_speed": "Downloadsnelheid", - "label_latency": "Latency", - "label_server": "Serverinstantie", - "label_run_test": "Run Test", - "label_testing": "Testen", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Geen containers", - "label_docker_unavailable": "Docker niet beschikbaar", - "label_no_command": "Geen opdracht", - "label_no_output": "Geen uitvoer", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Voorinstelling opslaan", - "label_load_preset": "Load Preset", - "label_preset_name": "Naam van voorinstelling", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automatisch rangschikken", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 gelijke kolommen", - "label_2col_wide": "2 brede kolommen", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widgetgroep", - "ungroup_widgets": "Widgets degroeperen", - "group_widgets": "Widgets groeperen", - "snap_layouts": "Snap-layouts", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Vastzetten linksboven", - "snap_top_right": "Vastzetten rechtsboven", - "snap_bottom_left": "Vastzetten linksonder", - "snap_bottom_right": "Vastzetten rechtsonder", - "aero_shake": "Venster schudden", - "zone_resize": "Zonegrootte wijzigen", - "zone_borders": "Zonegrenzen", - "app_drawer": "Applications", - "search_apps": "Apps zoeken", - "edit_shortcuts": "Snelkoppelingen bewerken", - "widgets": "Widgetlijst", - "theme": "Theme", - "fullscreen": "Volledig scherm", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "wp_unavailable": "Achtergronden niet beschikbaar", - "wp_download_hint": "Download achtergronden om ze hier te gebruiken.", - "help": "Help" + "assign": { + "title": "Bestaand pakket toewijzen", + "submit": "Toewijzen" }, - "desktop_login": { - "click_to_sign_in": "Klik om aan te melden", - "username_placeholder": "Gebruikersnaam", - "password_placeholder": "Wachtwoord", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Verificatiecode vereist", - "totp_subtitle": "Voer de zescijferige code uit uw authenticator-app in.", - "back_to_login": "Terug naar aanmelden", - "fill_all_fields": "Vul alle velden in", - "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord", - "invalid_code": "Ongeldige verificatiecode", - "enter_6_digits": "Voer 6 cijfers in", - "network_error": "Netwerkfout. Probeer het opnieuw.", - "session_expired": "Uw sessie is verlopen. Meld u opnieuw aan." - }, - "tokens": { - "title": "Toegangstokens", - "subtitle": "Beheer API-toegangstokens voor integraties en automatisering", - "enrollment_mode": "Registratiemodus", - "mode_open": "Open registratie", - "mode_open_desc": "Elke geldige client kan registratie aanvragen.", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Totaal", - "active": "Active", - "used": "Used", - "revoked": "Token succesvol ingetrokken", - "search_placeholder": "Tokens zoeken...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Bulk genereren", - "create": "Token aanmaken", - "edit": "Bewerken", - "token": "Token", - "name": "Tokennaam", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Token succesvol aangemaakt", - "actions": "Actions", - "name_placeholder": "Voer tokennaam in", - "max_uses": "Max Uses", - "max_uses_hint": "Maximaal aantal toegestane gebruiken voor dit token.", - "expires_in": "Expires In", - "no_expiration": "Geen vervaldatum", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Optionele notitie", - "count": "Count", - "count_range": "Aantal moet tussen 1 en 100 liggen", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token aangemaakt", - "tokens_generated": "Tokens gegenereerd", - "copy_warning": "Kopieer dit token nu. U kunt het niet meer zien!", - "copy_token": "Token kopiëren", - "copied": "Token naar klembord gekopieerd", - "revoke": "Intrekken", - "revoke_confirm": "Weet u zeker dat u dit token wilt intrekken? Deze actie kan niet ongedaan worden gemaakt.", - "revoked_success": "Token succesvol ingetrokken", - "no_tokens": "Geen tokens aangemaakt", - "expired": "Verlopen", - "never": "Never", - "save": "Opslaan", - "cancel": "Annuleren", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Volgende", - "prev": "Vorige", - "skip": "Rondleiding overslaan", - "finish": "Voltooien", - "close": "Sluiten", - "step_of": "Stap {current} van {total}", - "console_sidebar_title": "Consolenavigatie", - "console_sidebar_text": "Gebruik de zijbalk om te schakelen tussen apparaten, gebruikers, instellingen en hulpmiddelen.", - "console_expand_title": "Zijbalk uitklappen", - "console_expand_text": "Open de zijbalk om alle consoleonderdelen en hulpmiddelen te zien.", - "console_search_title": "Snel zoeken", - "console_search_text": "Gebruik zoeken om apparaten, instellingen en acties sneller te vinden.", - "console_dashboard_title": "Overzicht controleren", - "console_dashboard_text": "Het overzicht vat serverstatus, apparaten en recente activiteit samen.", - "console_devices_title": "Apparaatlijst", - "console_devices_text": "Hier kunt u alle geregistreerde apparaten zoeken, filteren en beheren.", - "console_settings_title": "Instellingen", - "console_settings_text": "Beheer beveiliging, authenticatie, updates en integraties.", - "console_desktop_title": "Desktopmodus", - "console_desktop_text": "Schakel naar de widgetdesktop om een aangepaste operationele weergave te maken.", - "console_complete_title": "Console gereed", - "console_complete_text": "U kent nu de belangrijkste onderdelen van de BetterDesk-console.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "De bovenbalk bevat vensterbesturing, zoeken en snelkoppelingen.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Open de widgetkiezer om nieuwe kaarten op de desktop te plaatsen.", - "desktop_widgets_title": "Widgets", - "desktop_widgets_text": "Widgets tonen live operationele gegevens en snelle acties.", - "desktop_add_widget_title": "Widgets toevoegen", - "desktop_add_widget_text": "Kies een widget en plaats deze waar u hem nodig hebt.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "Snap-layouts", - "desktop_snap_text": "Gebruik snap-layouts om widgets snel in zones te ordenen.", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Verplaats, groepeer en wijzig vensters zoals op een moderne desktop.", - "desktop_search_title": "Apps zoeken", - "desktop_search_text": "Zoek beschikbare widgets en hulpmiddelen vanuit de launcher.", - "desktop_complete_title": "Desktop gereed", - "desktop_complete_text": "De desktopmodus is ingesteld en klaar voor aanpassing.", - "devices_folders_title": "Mappen en groepen", - "devices_folders_text": "Organiseer apparaten in mappen of dynamische groepen.", - "devices_search_title": "Apparaten zoeken", - "devices_search_text": "Filter op ID, hostnaam, platform, gebruiker of tags.", - "devices_table_title": "Apparaattabel", - "devices_table_text": "Open acties via het menu van elke rij of dubbelklik voor details.", - "devices_complete_title": "Apparaatbeheer gereed", - "devices_complete_text": "U kunt apparaten nu zoeken, groeperen en beheren.", - "settings_tabs_title": "Instellingssecties", - "settings_tabs_text": "Schakel tussen server-, beveiligings-, authenticatie- en UI-instellingen.", - "settings_content_title": "Configuratie bewerken", - "settings_content_text": "Sla wijzigingen per sectie op om de configuratie overzichtelijk te houden.", - "settings_complete_title": "Instellingen gereed", - "settings_complete_text": "U kent nu de belangrijkste configuratieonderdelen.", - "help": "Help", - "tour_console": "Consoletour", - "tour_desktop": "Desktoptour", - "tour_devices": "Apparaattour", - "tour_settings": "Instellingentour", - "reset_all": "Alle tours resetten", - "tour_remote": "Remote-tour", - "tour_organization": "Organisatietour", - "tour_cdap": "CDAP-tour", - "tour_chat": "Chattour", - "remote_toolbar_title": "Remote-werkbalk", - "remote_toolbar_text": "Beheer kwaliteit, monitoren, klembord, opname en sessieacties.", - "remote_canvas_title": "Extern scherm", - "remote_canvas_text": "Klik in het schermgebied om toetsenbord en muis naar het apparaat te sturen.", - "remote_clipboard_title": "Klembord", - "remote_clipboard_text": "Synchroniseer tekst veilig tussen browser en extern apparaat.", - "remote_complete_title": "Remote-sessie gereed", - "remote_complete_text": "U kunt nu een sessie bedienen en bewaken.", - "org_overview_title": "Organisatieoverzicht", - "org_overview_text": "Bekijk leden, apparaten en beleid van de organisatie in één oogopslag.", - "org_create_title": "Organisatie maken", - "org_create_text": "Maak een nieuwe organisatie om apparaten en gebruikers te scheiden.", - "org_members_title": "Leden beheren", - "org_members_text": "Wijs gebruikers toe en stel organisatiespecifieke rollen in.", - "org_devices_title": "Apparaten toewijzen", - "org_devices_text": "Wijs apparaten toe aan een organisatie zodat gegevens netjes binnen de juiste scope blijven.", - "org_policies_title": "Beleid configureren", - "org_policies_text": "Beheer toegangsregels, bestandsoverdracht en sessielimieten.", - "org_complete_title": "Organisatie gereed", - "org_complete_text": "De organisatie is voorbereid voor gebruikers, apparaten en beleid.", - "cdap_devices_title": "CDAP-apparaten", - "cdap_devices_text": "Bekijk alle verbonden CDAP-apparaten — IoT-sensoren, PLC's, bridges en aangepaste agenten. Groene indicatoren tonen live verbindingen.", - "cdap_widgets_title": "Widget-dashboard", - "cdap_widgets_text": "Widgets tonen realtime gegevens van apparaten. Meters, schakelaars, LED's, grafieken — elk widgettype visualiseert een ander soort gegevens.", - "cdap_commands_title": "Opdrachten verzenden", - "cdap_commands_text": "Communiceer met apparaten door opdrachten te sturen. Sommige opdrachten vereisen bevestiging. Het opdrachtlogboek houdt de geschiedenis bij van alle verzonden opdrachten.", - "cdap_terminal_title": "Apparaatterminal", - "cdap_terminal_text": "Open een terminalsessie naar CDAP-agenten voor geavanceerde diagnostiek of handmatige configuratie. Typ opdrachten rechtstreeks.", - "cdap_complete_title": "CDAP-overzicht voltooid!", - "cdap_complete_text": "Verken apparaatwidgets, verzend opdrachten en gebruik de terminal of bestandsbrowser voor dieper beheer. CDAP-agenten rapporteren automatisch statistieken.", - "chat_contacts_title": "Contacten", - "chat_contacts_text": "Selecteer operators, agents of groepen voor een gesprek.", - "chat_send_title": "Berichten verzenden", - "chat_send_text": "Schrijf berichten, verzend bestanden en gebruik leesbevestigingen.", - "chat_file_title": "Bestanden delen", - "chat_file_text": "Bestanden worden versleuteld overgedragen wanneer end-to-end-versleuteling actief is.", - "chat_complete_title": "Chat gereed", - "chat_complete_text": "U kunt nu veilig communiceren met gebruikers en operators.", - "disable_tutorials": "Rondleidingen uitschakelen", - "enable_tutorials": "Rondleidingen inschakelen" - }, - "help_request": { - "title": "Hulpverzoeken", - "subtitle": "Ondersteuningsverzoeken van eindgebruikers", - "new_request": "Nieuw hulpverzoek", - "device": "Apparaat", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Geen hulpverzoeken", - "notification": "Melding voor hulpverzoek", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisaties", - "create": "Maken", - "edit": "Bewerken", - "detail": "Details", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Apparaten", - "invitations": "Invitations", - "settings": "Instellingen", - "add_user": "Add User", - "assign_device": "Apparaat toewijzen", - "create_invitation": "Uitnodiging maken", - "delete_confirm": "Deze organisatie verwijderen?", - "no_orgs": "Geen organisaties", - "no_orgs_hint": "Maak een organisatie om gebruikers en apparaten gescheiden te beheren.", - "connection_policy": "Verbindingsbeleid", - "allow_file_transfer": "Bestandsoverdracht toestaan", - "allow_clipboard": "Klembord toestaan", - "max_session_duration": "Maximale sessieduur", - "role_owner": "Owner", - "role_admin": "Beheerder", - "role_operator": "Operator", - "role_user": "Lid", - "username": "Gebruikersnaam", - "password": "Wachtwoord", - "display_name": "Weergavenaam", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Apparaat-ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Toegewezen gebruiker", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Geen gebruikers", - "no_devices": "Geen apparaten", - "no_invitations": "Geen uitnodigingen", - "user_added": "User added", - "user_removed": "Gebruiker verwijderd", - "user_updated": "Gebruiker bijgewerkt", - "device_assigned": "Apparaat toegewezen", - "device_unassigned": "Apparaattoewijzing verwijderd", - "invitation_created": "Uitnodiging aangemaakt", - "settings_saved": "Organisatie-instellingen opgeslagen", - "org_deleted": "Organisatie verwijderd", - "confirm_remove_user": "Deze gebruiker uit de organisatie verwijderen?", - "confirm_unassign_device": "Dit apparaat uit de organisatie verwijderen?", - "confirm_delete_org": "Deze organisatie permanent verwijderen?", - "edit_role": "Rol bewerken", - "raw_settings": "Ruwe instellingen", - "key": "Key", - "value": "Value", - "save": "Opslaan", - "policy_unattended": "Onbeheerde toegang", - "policy_attended": "Beheerde toegang", - "policy_ask": "Always ask", - "expires_hours": "Verloopt over uren", - "loading_failed": "Organisaties konden niet worden geladen", - "name_slug_required": "Naam en slug zijn verplicht", - "org_created": "Organisatie aangemaakt", - "org_updated": "Organisatie bijgewerkt", - "create_new_user": "Nieuwe gebruiker maken", - "add_existing_user": "Bestaande gebruiker toevoegen", - "none_available": "none", - "select_user": "Gebruiker selecteren", - "org_role": "Organisatierol", - "link_user_hint": "Koppel een bestaande gebruiker aan deze organisatie.", - "no_available_users": "Geen beschikbare gebruikers", - "user_linked": "Gebruiker gekoppeld" - }, - "chat": { - "e2e_enabled": "End-to-end versleuteld", - "e2e_establishing": "Beveiligd kanaal wordt opgezet...", - "e2e_established": "Beveiligd kanaal opgezet", - "e2e_unsupported": "E2E-versleuteling wordt niet ondersteund in deze browser", - "typing_indicator": "aan het typen...", - "read_receipt": "Gelezen", - "delivered": "Bezorgd", - "file_share": "Bestand", - "file_too_large": "Bestand te groot (max 50MB)", - "file_encrypted": "Versleutelde bestandsoverdracht", - "presence_online": "Online", - "presence_away": "Afwezig", - "presence_busy": "Bezet", - "presence_offline": "Offline", - "key_rotation": "Beveiligingssleutels vernieuwd", - "new_message": "Nieuw bericht", - "title": "Chat", - "contacts": "Contacten", - "groups": "Groepen", - "no_contacts": "Nog geen contacten", - "no_groups": "Nog geen groepen", - "no_messages": "Nog geen berichten", - "no_results": "Geen resultaten gevonden", - "select_conversation": "Selecteer een gesprek om te beginnen met chatten", - "type_message": "Typ een bericht...", - "send": "Verzenden", - "attach_file": "Bestand bijvoegen", - "emoji": "Emoji", - "search_messages": "Berichten zoeken", - "create_group": "Groep aanmaken", - "group_name": "Groepsnaam", - "group_members": "Leden", - "cancel": "Annuleren", - "create": "Aanmaken", - "members": "leden", - "today": "Vandaag", - "yesterday": "Gisteren", - "react": "Reageren", - "my_presence": "Mijn status", - "search_placeholder": "Contacten en berichten zoeken", - "select_conversation_hint": "Selecteer een gesprek om berichten te bekijken", - "info": "Informatie", - "group_name_placeholder": "Voer een groepsnaam in" - }, - "toast": { - "device_connected": "Apparaat verbonden", - "device_disconnected": "Apparaat losgekoppeld", - "session_started": "Sessie gestart", - "session_ended": "Sessie beëindigd", - "file_upload_complete": "Bestandsupload voltooid", - "settings_saved": "Instellingen opgeslagen", - "error_generic": "Er is een fout opgetreden", - "connection_lost": "Verbinding verloren", - "reconnecting": "Opnieuw verbinden" - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Diagnostische hulpmiddelen en beheertaken voor BetterDesk-operators.", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Verzenden", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Tekst invoeren", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Go-serverlog", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Controleer ICMP-bereikbaarheid en pakketverlies.", - "tcp_title": "TCP-poorttest", - "tcp_desc": "Controleer of een TCP-poort bereikbaar is vanaf de server.", - "ssl_title": "TLS-certificaatcontrole", - "ssl_desc": "Inspecteer certificaatketen, vervaldatum en hostnaammatch.", - "http_title": "HTTP-verzoek", - "http_desc": "Voer een eenvoudige HTTP(S)-controle uit en bekijk statuscode en headers.", - "dns_title": "DNS Lookup", - "dns_desc": "Los DNS-records op vanaf de serveromgeving.", - "whois_title": "DNS Records", - "whois_desc": "Zoek domeinregistratie- en netwerkgegevens op.", - "speed_title": "Speed Test", - "speed_desc": "Meet ruwe downloaddoorvoer vanaf de console.", - "run_speed_test": "Snelheidstest uitvoeren", - "wol_title": "Wake-on-LAN", - "wol_desc": "Stuur een Wake-on-LAN magic packet naar een apparaat.", - "wol_sent": "Wake-on-LAN-pakket verzonden", - "hash_title": "Hash berekenen", - "hash_desc": "Bereken SHA-256 of andere hashes voor tekstinvoer.", - "password_title": "Wachtwoordgenerator", - "password_desc": "Genereer sterke willekeurige wachtwoorden voor beheerdoeleinden.", - "jwt_title": "JWT Decoder", - "jwt_desc": "Decodeer JWT-header en payload zonder de handtekening te verifiëren.", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 coderen of decoderen.", - "url_title": "URL Encoder", - "url_desc": "URL-waarden coderen of decoderen.", - "processes_title": "Processen", - "processes_desc": "Toon actieve serverprocessen en resourcegebruik.", - "disk_title": "Disk Usage", - "disk_desc": "Bekijk schijfgebruik en vrije ruimte.", - "db_title": "Databasecontrole", - "db_desc": "Bekijk databasestatistieken en basisgezondheid.", - "docker_title": "Docker-containers", - "docker_desc": "Toon lokale containers en hun status.", - "logs_title": "Log Viewer", - "logs_desc": "Bekijk recente console- en serverlogs.", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Geldig vanaf", - "valid_to": "Geldig tot", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Geen gegevens", - "no_docker": "Docker is niet beschikbaar of er zijn geen containers.", - "no_logs": "Geen logs beschikbaar" - }, - "policies": { - "title": "Organisatiebeleid", - "subtitle": "Beheer beveiligings-, verbindings- en functiebeleid voor organisaties", - "select_org": "Organisatie", - "select_org_placeholder": "Selecteer een organisatie...", - "select_org_first": "Selecteer een organisatie om het beleidsauditlogboek te bekijken.", - "configured": "Geconfigureerd", - "connection_title": "Verbindingsbeleid", - "connection_desc": "Beheer hoe externe sessies worden opgezet", - "connection_mode": "Verbindingsmodus", - "mode_attended": "Begeleid (vereist gebruikersgoedkeuring)", - "mode_unattended": "Onbegeleid (altijd toestaan)", - "mode_ask": "Altijd vragen", - "max_session": "Max. sessieduur (minuten)", - "idle_lock": "Vergrendeling bij inactiviteit (minuten)", - "wallpaper_policy": "Achtergrond tijdens sessie", - "wallpaper_show": "Tonen", - "wallpaper_hide_session": "Verbergen tijdens sessie", - "wallpaper_hide_always": "Altijd verbergen", - "features_title": "Functiebeleid", - "features_desc": "Specifieke functies voor apparaten in- of uitschakelen", - "allow_file_transfer": "Bestandsoverdracht toestaan", - "allow_clipboard": "Klembord-synchronisatie toestaan", - "allow_audio": "Audio-streaming toestaan", - "allow_recording": "Sessieopname toestaan", - "security_title": "Beveiligingsbeleid", - "security_desc": "Beveiligingsvereisten afdwingen voor organisatieapparaten", - "require_2fa": "2FA vereist voor onbegeleide toegang", - "password_min_length": "Minimale wachtwoordlengte", - "password_require_special": "Speciale tekens vereist", - "password_max_age": "Max. wachtwoordleeftijd (dagen, 0=nooit)", - "allowed_operators": "Toegestane operatorrollen (kommagescheiden)", - "network_title": "Netwerkbeleid", - "network_desc": "Relay-servers en directe verbindingen beheren", - "block_direct_p2p": "Direct P2P blokkeren (relay afdwingen)", - "allowed_relays": "Toegestane relay-servers (één per regel)", - "ip_allowlist": "IP-whitelist (CIDR, één per regel)", - "update_title": "Updatebeleid", - "update_desc": "Automatische updates en updatekanalen beheren", - "auto_update": "Auto-update inschakelen", - "update_channel": "Updatekanaal", - "audit_title": "Beleidswijzigingen", - "audit_desc": "Recente beleidswijzigingsgeschiedenis", - "no_audit": "Geen beleidswijzigingen geregistreerd.", - "save_success": "Beleid opgeslagen", - "save_failed": "Beleid kon niet worden opgeslagen", - "load_failed": "Beleid kon niet worden geladen", - "block_direct_p2p_hint": "Gilt fur Gerate in dieser Organisatie. Der globale Standard wird unter Instellingen → Verbindingsstrategie festgelegt." - }, - "attestation": { - "title": "Apparaatattestatie", - "subtitle": "Apparaatidentiteitsverificatie en hardware-vingerafdrukken monitoren", - "verified": "Geverifieerd", - "pending": "In afwachting", - "failed": "Mislukt", - "device_list": "Attestatierecords", - "device_list_desc": "Hardware-vingerafdrukken en identiteitsverificatiestatus", - "col_device": "Apparaat-ID", - "col_hostname": "Hostnaam", - "col_fingerprint": "Vingerafdruk", - "col_status": "Status", - "col_last_check": "Laatste controle", - "col_actions": "Acties", - "no_records": "Geen attestatierecords gevonden.", - "verify_success": "Attestatie succesvol geverifieerd", - "verify_failed": "Attestatieverificatie mislukt", - "revoke_success": "Attestatie ingetrokken", - "revoke_failed": "Attestatie kon niet worden ingetrokken" - }, - "fleet": { - "title": "Vlootbeheer", - "tab_resources": "Bronnen", - "tab_tasks": "Taken", - "tab_builder": "Bouwer", - "tab_compliance": "Compliance", - "res_title": "Bronnenmapping", - "res_all_types": "Alle typen", - "res_type_printer": "Printer", - "res_type_network_drive": "Netwerkschijf", - "res_type_dns": "DNS-server", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Bron toevoegen", - "res_name": "Bronnaam", - "res_type": "Type", - "res_address": "Adres / Pad", - "res_target": "Doel", - "res_scope": "Bereik", - "res_scope_org": "Organisatie", - "res_scope_group": "Groep", - "res_scope_device": "Apparaat", - "res_scope_value": "Bereikwaarde", - "res_status": "Status", - "res_active": "Actief", - "res_inactive": "Inactief", - "res_no_data": "Geen bronnen gevonden. Klik op 'Toevoegen'.", - "res_confirm_delete": "Weet u zeker dat u deze bron wilt verwijderen?", - "task_title": "Taakplanner", - "task_all_status": "Alle statussen", - "task_status_pending": "Wachtend", - "task_status_running": "Lopend", - "task_status_success": "Geslaagd", - "task_status_failed": "Mislukt", - "task_search": "Taken zoeken…", - "task_create": "Taak aanmaken", - "task_name": "Taaknaam", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Installatie", - "task_type_update": "Bijwerken", - "task_type_restart": "Herstart", - "task_type_deploy": "Implementatie", - "task_type_scan": "Scan", - "task_targets": "Doelen", - "task_targets_help": "Apparaat-ID's of groepsnamen, gescheiden door komma's", - "task_schedule": "Planning", - "task_schedule_once": "Eenmalig", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Planningswaarde", - "task_script": "Script / Opdracht", - "task_retries": "Pogingen", - "task_timeout": "Timeout (s)", - "task_last_run": "Laatste uitvoering", - "task_no_data": "Geen taken gevonden. Maak een nieuwe taak aan.", - "task_confirm_delete": "Weet u zeker dat u deze taak wilt verwijderen?", - "task_output": "Taakuitvoer", - "task_retry": "Opnieuw", - "builder_title": "Visuele workflowbouwer", - "builder_select_workflow": "Workflow selecteren…", - "builder_new": "Nieuw", - "builder_save": "Opslaan", - "builder_export": "Exporteren", - "builder_execute": "Uitvoeren", - "builder_dry_run": "Testrun", - "builder_triggers": "Triggers", - "builder_conditions": "Voorwaarden", - "builder_actions": "Acties", - "builder_results": "Resultaten", - "builder_transforms": "Transformaties", - "builder_properties": "Eigenschappen", - "builder_no_selection": "Selecteer een knooppunt om eigenschappen te bewerken.", - "workflow_name": "Workflownaam:", - "comp_title": "Software-compliance", - "comp_compliant": "Conform", - "comp_warning": "Waarschuwing", - "comp_critical": "Kritiek", - "comp_score": "Gem. score", - "comp_device": "Apparaat", - "comp_hostname": "Hostnaam", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Problemen", - "comp_last_scan": "Laatste scan", - "comp_scan": "Scannen", - "comp_scan_all": "Alles scannen", - "comp_remediate": "Herstellen", - "comp_remediate_confirm": "Auto-herstel op dit apparaat uitvoeren?", - "comp_no_data": "Geen compliancegegevens. Voer een scan uit.", - "save": "Opslaan", - "cancel": "Annuleren", - "close": "Sluiten", - "edit": "Bewerken", - "delete": "Verwijderen", - "actions": "Acties", - "all_orgs": "Alle organisaties", - "builder_node_trigger_manual": "Handmatige trigger", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Gebeurtenistrigger", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Apparaat herstarten", - "builder_node_action_file_deploy": "Bestand uitrollen", - "builder_node_action_message": "Bericht verzenden", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Waarschuwing aanmaken", - "builder_node_result_chain": "Volgende actie koppelen", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "Organisatie selecteren...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Netwerkstation", - "type_dns": "DNS-record", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Resource toevoegen", - "edit_resource": "Resource bewerken", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adres", - "scope_org": "Organisatie", - "scope_group": "Groep", - "scope_device": "Apparaat", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Dit item verwijderen?", - "all_statuses": "Alle statussen", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Mislukt", - "search_tasks": "Taken zoeken...", - "create_task": "Taak maken", - "edit_task": "Taak bewerken", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Bestand uitrollen", - "task_type_registry": "Registry", - "target_devices": "Doelapparaten", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Scriptinhoud", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Laden...", - "no_output": "Geen uitvoer", - "error_loading": "Laden mislukt", - "select_workflow": "Workflow selecteren", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Handmatig", - "node_schedule": "Schedule", - "node_event": "Gebeurtenis", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Herstarten", - "node_file_deploy": "Bestand uitrollen", - "node_send_message": "Bericht verzenden", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Waarschuwing verzenden", - "node_chain": "Keten", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Alle organisaties", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Apparaat", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Herstelactie voor dit item starten?" - }, - "scaling": { - "title": "Schaling & Relay-beheer", - "tab_overview": "Overzicht", - "tab_relays": "Relay-knooppunten", - "tab_rules": "Toewijzingsregels", - "tab_capacity": "Capaciteitsplanning", - "arch_title": "Netwerkarchitectuur", - "arch_loading": "Architectuurdiagram laden...", - "stat_relay_nodes": "Relay-knooppunten", - "stat_total_devices": "Totaal apparaten", - "stat_active_sessions": "Actieve sessies", - "stat_bandwidth": "Totale bandbreedte", - "relay_health": "Relay-status", - "no_relays": "Geen relay-knooppunten geconfigureerd. Voeg uw eerste knooppunt toe om de belasting te verdelen.", - "relay_search": "Relays zoeken...", - "relay_add": "Relay-knooppunt toevoegen", - "relay_edit": "Relay-knooppunt bewerken", - "col_name": "Naam", - "col_address": "Adres", - "col_location": "Locatie", - "col_devices": "Apparaten", - "col_sessions": "Sessies", - "col_bandwidth": "Bandbreedte", - "col_status": "Status", - "col_actions": "Acties", - "col_priority": "Prioriteit", - "col_rule_name": "Regelnaam", - "col_match": "Overeenkomst", - "col_target_relay": "Doel-relay", - "col_fallback": "Terugval", - "status_online": "Online", - "status_degraded": "Verslechterd", - "status_offline": "Offline", - "status_enabled": "Ingeschakeld", - "status_disabled": "Uitgeschakeld", - "confirm_delete_relay": "Weet u zeker dat u dit relay-knooppunt wilt verwijderen?", - "confirm_delete_rule": "Weet u zeker dat u deze toewijzingsregel wilt verwijderen?", - "rules_hint": "Toewijzingsregels bepalen welke relay-server specifieke apparaatgroepen bedient. Regels worden geëvalueerd op prioriteit (laagste eerst).", - "rule_add": "Regel toevoegen", - "rule_edit": "Regel bewerken", - "rule_match_type": "Overeenkomsttype", - "match_subnet": "Subnet", - "match_group": "Apparaatgroep", - "match_tag": "Apparaat-tag", - "match_location": "Locatie", - "rule_match_value": "Overeenkomstwaarde", - "fallback_master": "Masterserver", - "fallback_nearest": "Dichtstbijzijnde relay", - "relay_max_sessions": "Max. sessies", - "relay_max_bandwidth": "Max. bandbreedte (Mbps)", - "cap_tiers": "Capaciteitsniveaus", - "cap_loading": "Capaciteitsgegevens laden...", - "cap_recommendations": "Aanbevelingen", - "cap_no_recs": "Geen aanbevelingen beschikbaar.", - "cap_planning": "Infrastructuurplanning", - "cap_config": "Configuratie", - "cap_max_devices": "Max. apparaten", - "cap_max_sessions": "Max. sessies", - "cap_current": "Huidig", - "cap_utilization": "Bezettingsgraad", - "cap_tier_devices": "Apparaatcapaciteit", - "cap_tier_sessions": "Sessiecapaciteit", - "cap_tier_bandwidth": "Bandbreedtecapaciteit", - "cap_single_sqlite": "Enkele server (SQLite)", - "cap_single_pg": "Enkele server (PostgreSQL)", - "cap_master_3": "Master + 3 relays", - "cap_master_10": "Master + 10 relays", - "rec_no_relays": "Geen relay-knooppunten geconfigureerd. Overweeg relays toe te voegen voor betere prestaties en redundantie.", - "rec_devices_high": "Apparaatgebruik is hoog. Overweeg meer relay-knooppunten toe te voegen.", - "rec_sessions_high": "Sessiecapaciteit nadert zijn limiet. Overweeg infrastructuurupgrade.", - "rec_cpu_high": "Sommige relay-knooppunten melden hoog CPU-gebruik. Overweeg loadbalancing.", - "rec_all_good": "Alle systemen opereren binnen normale parameters. Geen actie vereist.", - "save": "Opslaan", - "cancel": "Annuleren", - "edit": "Bewerken", - "delete": "Verwijderen", - "close": "Sluiten", - "no_rules": "Geen toewijzingsregels.", - "relays_info_banner": "Relaynodes helpen sessies verdelen over meerdere netwerklocaties. Sla wijzigingen op en herstart services indien nodig.", - "relay_name_address_required": "Relaynaam en adres zijn verplicht", - "relay_save_failed": "Relay kon niet worden opgeslagen", - "relay_delete_failed": "Relay kon niet worden verwijderd", - "relay_saved": "Relay opgeslagen", - "relay_deleted": "Relay verwijderd", - "rule_name_value_required": "Regelnaam en waarde zijn verplicht", - "rule_save_failed": "Regel kon niet worden opgeslagen", - "rule_delete_failed": "Regel kon niet worden verwijderd", - "rule_saved": "Regel opgeslagen", - "rule_deleted": "Regel verwijderd" - }, - "cross_platform": { - "title": "Platformonafhankelijke compatibiliteit", - "tab_matrix": "Compatibiliteitsmatrix", - "tab_distribution": "Verdeling", - "tab_protocols": "Protocollen", - "tab_limitations": "Beperkingen", - "matrix_hint": "Functie-ondersteuningsmatrix voor alle ondersteunde platforms. Groen = volledige ondersteuning, Geel = gedeeltelijk, Grijs = niet beschikbaar, Blauw = gepland.", - "col_feature": "Functie", - "legend_full": "Volledige ondersteuning", - "legend_partial": "Gedeeltelijke ondersteuning", - "legend_none": "Niet beschikbaar", - "legend_planned": "Gepland", - "platform_breakdown": "Platformverdeling", - "arch_breakdown": "Architectuurverdeling", - "version_breakdown": "Versieverdeling", - "summary": "Samenvatting", - "total_devices": "Totaal apparaten", - "unique_platforms": "Platforms", - "unique_archs": "Architecturen", - "unique_versions": "Clientversies", - "no_devices": "Nog geen apparaten geregistreerd.", - "protocols_hint": "Protocolcapaciteitsonderhandeling zorgt ervoor dat elke client alleen ondersteunde functies ontvangt. De server past zijn gedrag aan op basis van gerapporteerde capaciteiten.", - "capability_negotiation": "Capaciteitsonderhandeling", - "codec_support": "Codec-ondersteuning (online apparaten)", - "feature_support": "Functie-ondersteuning (online apparaten)", - "no_codec_data": "Geen codec-gegevens van online apparaten.", - "no_feature_data": "Geen functiegegevens van online apparaten.", - "protobuf_schema": "ClientCapabilities Protobuf-schema", - "diagram_client": "Client", - "diagram_server": "BetterDesk-server", - "diagram_peer": "Externe peer", - "limitations_hint": "Elk platform heeft specifieke beperkingen die de beschikbare functies beïnvloeden. Controleer deze bij het plannen van implementaties.", - "feat_desktop_client": "Desktop-client", - "feat_background_agent": "Achtergrondagent", - "feat_remote_target": "Extern doel", - "feat_screen_capture": "Schermopname", - "feat_input_injection": "Invoer-injectie", - "feat_file_transfer": "Bestandsoverdracht", - "feat_clipboard_sync": "Klembord-synchronisatie", - "feat_audio_streaming": "Audio-streaming", - "feat_chat": "Chat", - "feat_h264": "H.264-codec", - "feat_vp9": "VP9-codec", - "feat_av1": "AV1-codec", - "feat_cdap_agent": "CDAP-agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webbrowser", - "platform_chromeos": "ChromeOS", - "status_production": "Productie", - "status_testing": "Test", - "status_planned": "Gepland", - "status_limited": "Beperkt", - "status_experimental": "Experimenteel", - "limit_win_uac": "UAC-verhoging vereist voor service-installatie en invoer-injectie op beveiligde bureaubladen.", - "limit_win_service": "Draait als NSSM-service; vereist beheerdersrechten voor installatie.", - "limit_win_firewall": "Windows Firewall-regels moeten poorten 21115-21119 toestaan voor relay-verbindingen.", - "limit_linux_wayland": "Wayland-compositors beperken programmatische schermopname; PipeWire portal-API vereist.", - "limit_linux_pipewire": "Audio-opname vereist PipeWire; PulseAudio-fallback beschikbaar maar beperkt.", - "limit_linux_arm": "ARM64-builds beschikbaar; sommige codecs kunnen software-decodering gebruiken (langzamer).", - "limit_mac_screen": "Schermopname-toestemming vereist in Systeeminstellingen > Privacy en beveiliging.", - "limit_mac_signing": "Agent moet ondertekend zijn met Apple Developer ID voor distributie.", - "limit_mac_notarize": "Notarisatie vereist voor macOS Gatekeeper (niet-App Store-distributie).", - "limit_android_projection": "MediaProjection API vereist toestemming van de gebruiker voor elke schermopnamesessie.", - "limit_android_accessibility": "Invoer-injectie vereist AccessibilityService; beperkt vanaf Android 14+.", - "limit_android_battery": "Achtergrondservice beperkt door Doze-modus; mogelijk batterijoptimalisatie-uitzondering nodig.", - "limit_ios_capture": "Apple verbiedt schermopname op de achtergrond; alleen viewer-modus ondersteund.", - "limit_ios_input": "Geen invoer-injectie toegestaan; alleen extern bekijken en chat.", - "limit_ios_appstore": "Distributie alleen via App Store; TestFlight voor bètatests.", - "limit_web_https": "WebCodecs API en WebRTC vereisen HTTPS; HTTP valt terug op JMuxer (beperkte codecs).", - "limit_web_codec": "Codec-ondersteuning afhankelijk van browser; H.264 breed ondersteund, VP9/AV1 varieert.", - "limit_web_performance": "Prestaties beperkt door browser-sandbox; geen directe hardwareversnelling.", - "limit_chrome_crostini": "Volledige agent-ondersteuning alleen binnen de Crostini Linux-container.", - "limit_chrome_pwa": "PWA-modus biedt alleen webcapaciteiten; geen native agentfuncties.", - "limit_chrome_input": "Invoer-injectie buiten de Crostini-container niet ondersteund.", - "feat_session_recording": "Sitzungsaufzeichnung", - "feat_multi_monitor": "Multi-Monitor", - "feat_unattended_access": "Unbeaufsichtigter Zugriff", - "limit_win_virtual_account": "Servicee laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade mussen moglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Servicee laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Hartung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Beveiligingsaudit", - "tab_overview": "Overzicht", - "tab_events": "Auditgebeurtenissen", - "tab_hardening": "Beveiliging versterken", - "tab_vulnerabilities": "Kwetsbaarheden", - "security_score": "Beveiligingsscore", - "failed_logins": "Mislukte aanmeldingen (24u)", - "active_bans": "Actieve bans", - "api_keys": "API-sleutels", - "old_keys": "Oude sleutels (>90d)", - "security_checks": "Beveiligingscontroles", - "tls_status": "TLS-status", - "pass": "OK", - "warning": "Waarschuwing", - "fail": "Fout", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "TLS / WSS", - "enabled": "Ingeschakeld", - "disabled": "Uitgeschakeld", - "all_events": "Alle gebeurtenissen", - "event_login_failed": "Aanmelding mislukt", - "event_login_success": "Aanmelding geslaagd", - "event_peer_banned": "Apparaat verbannen", - "event_ip_banned": "IP verbannen", - "event_config_changed": "Configuratie gewijzigd", - "event_key_created": "Sleutel aangemaakt", - "refresh": "Vernieuwen", - "col_time": "Tijd", - "col_action": "Actie", - "col_actor": "Actor", - "col_target": "Doel", - "col_ip": "IP-adres", - "col_details": "Details", - "no_events": "Geen auditgebeurtenissen gevonden.", - "hardening_hint": "Beveiligingsversterkingsprioriteiten voor uw BetterDesk-implementatie. Gesorteerd op ernst.", - "no_hardening": "Geen versterkingsitems beschikbaar.", - "vuln_hint": "Resultaten van de kwetsbaarheidsscan voor afhankelijkheden. Voer npm audit regelmatig uit.", - "no_vulns": "Geen kwetsbaarheden gevonden. Uw afhankelijkheden zijn veilig." - }, - "languages": { - "title": "Taalbeheer", - "total_languages": "Totaal aantal talen", - "fully_translated": "Volledig vertaald", - "needs_review": "Moet worden nagekeken", - "reference_keys": "Referentiesleutels", - "no_languages": "Geen talen gevonden", - "badge_reference": "Referentie", - "badge_review": "Nalezen", - "badge_complete": "Volledig", - "coverage": "dekking", - "keys": "sleutels", - "missing": "ontbrekend", - "extra": "extra", - "view_missing": "Ontbrekende sleutels bekijken", - "fix_missing": "Fix Missing", - "missing_keys_for": "Ontbrekende sleutels voor", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "en nog {n}...", - "all_keys_present": "Alle sleutels aanwezig", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Ontbrekende sleutels in {code} moeten handmatig worden vertaald.", - "no_fix_needed": "Geen correctie nodig" - }, - "resource_control": { - "title": "Resourcebeheer", - "tab_overview": "Overzicht", - "tab_usb": "USB Control", - "tab_optical": "Optische stations", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Quota", - "compliance_by_category": "Naleving per categorie", - "device_compliance": "Apparaatnaleving", - "search_devices": "Apparaten zoeken...", - "col_device": "Apparaat", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Totaal apparaten", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Nalevingspercentage", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configureren", - "no_devices": "Geen apparaten gevonden", - "usb_title": "USB-opslag", - "usb_hint": "Beheer beleid voor verwisselbare USB-opslag.", - "usb_storage_policy": "USB-opslagbeleid", - "usb_whitelist": "USB-toegestane lijst", - "usb_whitelist_hint": "Eén apparaat-ID of serienummer per regel.", - "usb_audit_log": "USB-auditlog", - "optical_title": "Optische stations", - "optical_hint": "Beheer toegang tot cd/dvd/blu-ray-stations.", - "optical_policy": "Beleid voor optische stations", - "optical_audit_log": "Auditlog optische stations", - "monitors_title": "Monitoren", - "monitors_hint": "Beperk het aantal schermen en de scherminstellingen.", - "monitors_max_count": "Maximaal aantal monitoren", - "monitors_max_hint": "0 betekent geen limiet.", - "monitors_resolution": "Resolutielimiet", - "monitors_brightness": "Helderheidslimiet", - "monitors_power_schedule": "Stroomschema voor monitoren", - "monitors_power_hint": "Optioneel schema voor automatisch uitschakelen of dimmen.", - "disks_title": "Schijven", - "disks_hint": "Beperk opslagapparaten en bewaak schijfgezondheid.", - "disks_readonly": "Alleen-lezen-modus afdwingen", - "disks_encryption": "Versleuteling vereisen", - "disks_smart": "SMART-gezondheid controleren", - "disks_hidden": "Verborgen paden", - "disks_hidden_hint": "Paden die voor bestandsbrowser en bestandsoverdracht verborgen moeten blijven.", - "quotas_title": "Quota en limieten", - "quotas_hint": "Beperk bandbreedte, opslag en processen.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Bandbreedtelimiet", - "quotas_bandwidth_hint": "Maximale overdrachtssnelheid per sessie.", - "quotas_disk_quota": "Schijfquota", - "quotas_disk_hint": "Maximale opslagruimte die BetterDesk-functies mogen gebruiken.", - "quotas_process_whitelist": "Toegestane processenlijst", - "quotas_process_hint": "Eén procesnaam per regel.", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Toegestane lijst", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Updatebeheer", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Huidige versie", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Nu controleren", - "checking": "Checking…", - "up_to_date": "Alles is actueel", - "update_available": "Update beschikbaar", - "changelog": "Release Notes", - "no_changelog": "Geen changelog beschikbaar", - "files_changed": "Gewijzigde bestanden", - "files": "Bestanden", - "changes_unavailable": "Wijzigingen niet beschikbaar", - "create_backup": "Back-up maken", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installeren...", - "creating_backup": "Back-up maken...", - "downloading": "Downloaden...", - "install_success": "Update succesvol geïnstalleerd", - "install_failed": "Installatie van update mislukt", - "restarting": "Services herstarten...", - "restart_complete": "Herstart voltooid", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Versie-informatie niet beschikbaar", - "backups_title": "Back-ups", - "backups_desc": "Herstel of beheer eerder gemaakte updateback-ups.", - "no_backups": "Geen back-ups gevonden", - "restore": "Restore", - "restore_confirm": "Deze back-up herstellen?", - "restore_success": "Back-up succesvol hersteld", - "baseline_set": "Baseline ingesteld", - "commits_behind": "Commits achter", - "total_files": "Totaal bestanden", - "applied": "Applied", - "failed": "Mislukt", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Go-server", - "component_agent": "Agent", - "component_scripts": "Installatiescripts", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Go-toolchain controleren...", - "go_not_found": "Go is niet gevonden", - "go_check_failed": "Go-controle mislukt", - "server_building": "Serverbinary bouwen...", - "server_built": "Serverbinary gebouwd", - "server_build_failed": "Serverbuild mislukt", - "server_deployed": "Serverbinary uitgerold", - "server_deploy_failed": "Serverbinary kon niet worden uitgerold", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Serverbroncode downloaden...", - "delete": "Verwijderen", - "delete_confirm": "Back-up {name} permanent verwijderen? Dit kan niet ongedaan worden gemaakt.", - "delete_success": "Back-up verwijderd", - "delete_failed": "Back-up kon niet worden verwijderd", - "retention_label": "Bewaartermijn", - "retention_hint": "Aantal dagen om updateback-ups te bewaren.", - "retention_saved": "Bewaartermijn opgeslagen", - "retention_invalid": "Ongeldige bewaartermijn", - "retention_required_for_prune": "Bewaartermijn is vereist om op te schonen", - "prune_now": "Apply now", - "prune_confirm": "Alleen de {n} meest recente back-ups behouden en de rest verwijderen?", - "prune_done": "{n} back-up(s) opgeschoond", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Updatestrategie", - "strategy_download": "Voorgebouwde binary downloaden", - "strategy_compile": "Lokaal compileren", - "both_available": "Download en compilatie beschikbaar", - "download_available": "Download beschikbaar", - "no_method": "Geen updatemethode beschikbaar", - "no_release": "No release", - "available": "Beschikbaar", - "server_downloading": "Serverbinary downloaden...", - "server_downloaded": "Serverbinary gedownload", - "server_download_failed": "Serverbinary kon niet worden gedownload", - "server_download_note": "Als er geen releasebinary beschikbaar is, bouw de server lokaal met Go.", - "install_go_hint": "Installeer Go om de serverbinary lokaal te bouwen.", - "strategy_install_go": "Go installeren en compileren", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Automatische update beschikbaar", - "toolchain_ready": "Toolchain gereed", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Toolchain downloaden...", - "toolchain_failed": "Toolchaininstallatie mislukt", - "modal_title": "Update installeren", - "modal_done_title": "Update voltooid", - "modal_close": "Sluiten", - "modal_reload_now": "Nu herladen", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Webconsole bijwerken", - "phase_server": "Servercomponent bijwerken", - "phase_restart": "Services herstarten", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Back-up overgeslagen", - "server_skipped": "Serverupdate overgeslagen", - "server_not_selected": "Go server not selected", - "server_processing": "Servercomponent verwerken...", - "no_restart_needed": "Geen herstart nodig", - "complete": "Voltooid", - "complete_summary": "Updateproces voltooid.", - "complete_with_errors": "Update voltooid met waarschuwingen", - "modal_done_with_errors_title": "Update voltooid met aandachtspunten", - "console_will_restart": "De webconsole wordt opnieuw gestart.", - "restart_complete_msg": "Herstart voltooid. Vernieuw de pagina indien nodig.", - "refresh_recommended": "Vernieuwen aanbevolen", - "confirm_title": "Update bevestigen", - "confirm_with_backup": "Er wordt eerst een back-up gemaakt voordat de update wordt geïnstalleerd.", - "confirm_no_backup": "De update wordt zonder back-up geïnstalleerd.", - "server_stale_title": "Serverbinary verouderd", - "server_stale_desc": "De broncode van de Go-server is bijgewerkt, maar de actieve binary is niet opnieuw gebouwd. Bouw deze nu opnieuw om beveiligings- en bibliotheekupdates toe te passen.", - "rebuild_server": "Serverbinary opnieuw bouwen", - "rebuilding_server": "Server opnieuw bouwen...", - "rebuild_server_success": "Serverbinary opnieuw gebouwd en herstart", - "rebuild_server_failed": "Serverbinary kon niet opnieuw worden gebouwd" - }, - "permissions": { - "title": "Machtigingen", - "subtitle": "Beheer fijnmazige machtigingen per serverrol.", - "info_title": "Rolgebaseerde machtigingen", - "info_desc": "Standaardrollen hebben ingebouwde machtigingen. U kunt specifieke machtigingen per rol overschrijven zonder de rolhiërarchie te wijzigen.", - "select_role": "Rol selecteren", - "select_role_placeholder": "Kies een rol...", - "reset_overrides": "Overschrijvingen resetten", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Serverniveau", - "custom": "Custom", - "default": "Default", - "revert": "Terugdraaien", - "saved": "Machtiging opgeslagen", - "reverted": "Machtiging teruggedraaid", - "all_reverted": "Alle overschrijvingen zijn teruggedraaid", - "confirm_reset": "Alle machtiging-overschrijvingen voor deze rol verwijderen?", - "empty_title": "Selecteer een rol", - "empty_desc": "Kies links een rol om de machtigingen te bekijken.", - "locked_title": "Super Admin", - "locked_desc": "Deze rol erft zijn basisgedrag uit de ingebouwde beveiligingshiërarchie.", - "cat_device": "Apparaten", - "cat_user": "Users", - "cat_server": "Serversysteem", - "cat_org": "Organisaties", - "cat_audit": "Audit en observatie", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Apparaten bekijken", - "perm_device_connect": "Met apparaten verbinden", - "perm_device_edit": "Apparaten bewerken", - "perm_device_delete": "Apparaten verwijderen", - "perm_device_ban": "Apparaten blokkeren", - "perm_device_change_id": "Apparaat-ID wijzigen", - "perm_user_view": "Gebruikers bekijken", - "perm_user_create": "Gebruikers maken", - "perm_user_edit": "Gebruikers bewerken", - "perm_user_delete": "Gebruikers verwijderen", - "perm_server_config": "Server configureren", - "perm_server_keys": "Serversleutels beheren", - "perm_org_create": "Organisaties maken", - "perm_org_edit": "Organisaties bewerken", - "perm_org_delete": "Organisaties verwijderen", - "perm_org_manage_users": "Organisatiegebruikers beheren", - "perm_org_manage_devices": "Organisatieapparaten beheren", - "perm_audit_view": "Auditlogs bekijken", - "perm_metrics_view": "Metrieken bekijken", - "perm_blocklist_edit": "Blokkeerlijst bewerken", - "perm_cdap_view": "CDAP bekijken", - "perm_cdap_command": "CDAP-commando’s uitvoeren", - "perm_cdap_terminal": "CDAP-terminal openen", - "perm_cdap_files": "CDAP-bestanden beheren", - "perm_enrollment_manage": "Registraties beheren", - "perm_enrollment_approve": "Registraties goedkeuren", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Branding bewerken", - "perm_server_attestation": "Server-Prestatieattestierung" - }, - "notifications": { - "title": "Meldingen", - "empty": "Geen nieuwe meldingen", - "mark_all_read": "Alles als gelezen markeren", - "see_all": "Alle hulpverzoeken bekijken", - "help_request": "Hulpverzoek", - "just_now": "just now" - }, - "accessibility": { - "title": "Toegankelijkheid", - "subtitle": "Pas de console aan voor zicht, beweging en lezen.", - "close": "Toegankelijkheidsmenu sluiten", - "profiles": "Snelle profielen", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Grotere tekst, sterker contrast en duidelijkere focusindicatoren.", - "profile_dyslexia": "Dyslexievriendelijk", - "profile_dyslexia_hint": "Leesbaar lettertype, ruimere spatiëring en rustigere tekstblokken.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Vermindert beweging en schakelt niet-essentiële animaties uit.", - "profile_color_assist": "Kleurondersteuning", - "profile_color_assist_hint": "Past kleuren aan en benadrukt links en koppen voor betere herkenbaarheid.", - "reading": "Lezen", - "font_size": "Tekstgrootte", - "line_height": "Regelhoogte", - "letter_spacing": "Letterspatiëring", - "word_spacing": "Woordspatiëring", - "readable_font": "Leesbaar lettertype", - "readable_font_hint": "Gebruik een lettertype dat voor lange tekstblokken gemakkelijker te lezen is.", - "dyslexia_spacing": "Dyslexiespatiëring", - "dyslexia_spacing_hint": "Vergroot regel-, woord- en letterafstand voor comfortabeler lezen.", - "visual": "Visueel", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Hoog contrast donker", - "contrast_high_light": "Hoog contrast licht", - "contrast_yellow_black": "Geel op zwart", - "color_filter": "Kleurfilter", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Verzadiging", - "underline_links": "Links onderstrepen", - "underline_links_hint": "Maak links visueel herkenbaar zonder alleen op kleur te vertrouwen.", - "highlight_links": "Links markeren", - "highlight_links_hint": "Voeg een zachte achtergrond toe aan klikbare links.", - "highlight_headings": "Koppen markeren", - "highlight_headings_hint": "Maak sectiekoppen duidelijker zichtbaar.", - "hide_media": "Dim media", - "hide_media_hint": "Verberg decoratieve afbeeldingen en niet-essentiële media.", - "interaction": "Interactie", - "strong_focus": "Sterke focusrand", - "strong_focus_hint": "Toon een duidelijke rand rond het actieve element.", - "large_cursor": "Grote cursor", - "large_cursor_hint": "Vergroot de cursorindicatoren in interactieve weergaven.", - "reduce_motion": "Beweging verminderen", - "reduce_motion_hint": "Beperk overgangen, parallax en bewegende effecten.", - "pause_animations": "Animaties pauzeren", - "pause_animations_hint": "Stop niet-essentiële animaties terwijl deze instelling actief is.", - "reading_guide": "Leesliniaal", - "reading_guide_hint": "Toon een horizontale gids die de huidige leesregel volgt.", - "reading_mask": "Leesmasker", - "reading_mask_hint": "Dim inhoud buiten het actieve leesgebied.", - "preview": "Voorbeeld", - "preview_title": "Voorbeeldtitel", - "preview_text": "Dit voorbeeld toont hoe tekst, links en knoppen eruitzien met de huidige toegankelijkheidsinstellingen.", - "preview_link": "Voorbeeldlink", - "preview_status": "Online", - "preview_button": "Voorbeeldknop", - "preview_secondary": "Secondary", - "reset": "Resetten", - "done": "Gereed" - }, - "server_mgmt": { - "title": "Serverbeheer", - "subtitle": "Cockpit-achtig paneel voor de BetterDesk-consolehost (BÈTA).", - "beta_tooltip": "Deze serverbeheerfuncties zijn nog in bèta.", - "notice_title": "Serverbeheer", - "notice_body": "Gebruik deze hulpmiddelen voorzichtig. Wijzigingen kunnen actieve services beïnvloeden.", - "tab_overview": "Overzicht", - "tab_terminal": "Terminal", - "tab_files": "Bestanden", - "tab_services": "Services", - "cpu": "CPU", - "memory": "Geheugen", - "load": "Laden", - "disks": "Schijven", - "history": "Geschiedenis", - "host_info": "Host info", - "cores": "cores", - "uptime": "Uptime", - "no_disks": "Geen schijven gevonden", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "Interactieve PTY-terminal beschikbaar", - "term_connect": "Verbinden", - "term_disconnect": "Verbinding verbreken", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Terminalfout", - "term_warning": "Terminalwaarschuwing", - "term_hint": "Voer opdrachten uit met dezelfde zorg als op de server zelf.", - "term_lib_failed": "Terminalbibliotheek kon niet worden geladen", - "files_up": "Omhoog", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Naam", - "files_size": "Grootte", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Deze map is leeg", - "files_error": "Bestanden konden niet worden geladen", - "read_failed": "Bestand kon niet worden gelezen", - "save_failed": "Bestand kon niet worden opgeslagen", - "rename_failed": "Naam wijzigen mislukt", - "delete_failed": "Verwijderen mislukt", - "delete_confirm": "Dit item verwijderen?", - "mkdir_prompt": "Nieuwe mapnaam", - "mkdir_failed": "Map kon niet worden gemaakt", - "file_saved": "Bestand opgeslagen", - "binary_warn": "Dit lijkt een binair bestand. Bewerken kan het bestand beschadigen.", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Services zoeken...", - "svc_name": "Service", - "svc_state": "Status", - "svc_description": "Description", - "svc_empty": "Geen services gevonden", - "svc_load_failed": "Services konden niet worden geladen", - "svc_action_failed": "Serviceactie mislukt", - "svc_confirm": "Run", - "svc_start": "Starten", - "svc_stop": "Stoppen", - "svc_restart": "Herstarten", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk Agent downloaden", - "choose_platform": "Platform kiezen", - "choose_platform_hint": "Selecteer het installatieprogramma dat bij uw besturingssysteem past.", - "download": "Downloaden", - "building": "Bouwen…", - "failed": "Build mislukt", - "need_help": "Hulp nodig?", - "powered_by": "Aangedreven door" - }, - "server_attestation": { - "title": "Serverattetering", - "subtitle": "Prestatiebenchmark die de capaciteit voor gelijktijdige externe verbindingen bepaalt bij een drempel van 80% CPU, RAM en schijf.", - "warning_title": "Belastingstest", - "warning_body": "De benchmark simuleert parallelle WebSocket-verbindingen naar de signaal- en relayservers. Voer uit tijdens daluren — deze test belast de productieomgeving.", - "run_benchmark": "Benchmark uitvoeren", - "abort": "Afbreken", - "download_report": "JSON-rapport downloaden", - "last_test": "Laatste test", - "no_test_yet": "Er is nog geen benchmark uitgevoerd", - "max_connections": "Maximale verbindingen", - "threshold_80": "80%-drempel — eindstatistieken", - "disk": "Schijf", - "ramp_chart": "Belastingsrampgrafiek", - "connections": "Verbindingen", - "connections_short": "verb.", - "tier_guide_title": "Wat betekent elk niveau?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "NIET BEOORDEELD", - "tier_bronze_desc": "1–25 gelijktijdige verbindingen — kleine VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 verbindingen — middensegmentserver (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 verbindingen — hogeprestatiestserver (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 verbindingen — enterprise-infrastructuur (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ verbindingen — turboclasse: dedicated hardware, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Opmerking: in Docker kunnen CPU/RAM-statistieken de containerlimieten weerspiegelen in plaats van de fysieke host.", - "badge_tooltip": "BetterDesk-serverattetering — serverprestaties certificering", - "confirm_run": "Deze benchmark zal de server belasten met gesimuleerde verbindingen. Doorgaan?", - "starting": "Starten...", - "complete": "Benchmark voltooid", - "signal_peers": "Signaalpeer's", - "relay_sessions": "Relaysessies", - "page_error": "Fout beim Laden der Serverattestatiesseite", - "mode_estimated": "Geschatzt (WebSocket nicht erreichbar)", - "incomplete": "Benchmark abgeschlossen ohne gultige Einstufung" + "form": { + "cancel": "Annuleren" } + } } diff --git a/web-nodejs/lang/pl.json b/web-nodejs/lang/pl.json index 48322e58..8f7172e1 100644 --- a/web-nodejs/lang/pl.json +++ b/web-nodejs/lang/pl.json @@ -1,3577 +1,3670 @@ { - "meta": { - "lang": "pl", - "name": "Polish", - "native_name": "Polski", - "direction": "ltr" - }, - "common": { - "loading": "Ładowanie...", - "confirm": "Potwierdź", - "alert": "Uwaga", - "prompt": "Wprowadź wartość", - "copied": "Skopiowano do schowka", - "save": "Zapisz", - "saved": "Zapisano", - "error": "Błąd", - "success": "Sukces", - "warning": "Ostrzeżenie", - "info": "Informacja", - "all": "Wszystkie", - "cancel": "Anuluj", - "delete": "Usuń", - "actions": "Akcje", - "close": "Zamknij", - "required": "wymagane", - "name_required": "Nazwa jest wymagana", - "active": "Aktywny", - "inactive": "Nieaktywny", - "invalid_json": "Nieprawidłowy JSON", - "field_required": "{field} jest wymagane", - "back": "Powrót", - "edit": "Edytuj", - "yes": "Tak", - "no": "Nie" - }, - "nav": { - "main": "Główne", - "tools": "Narzędzia", - "system": "System", - "dashboard": "Panel", - "devices": "Urządzenia", - "keys": "Klucze", - "generator": "Generator", - "settings": "Ustawienia", - "users": "Użytkownicy", - "inventory": "Inwentaryzacja", - "tickets": "Zgłoszenia", - "help_requests": "Prośby o pomoc", - "activity": "Aktywność", - "automation": "Automatyzacja", - "file_transfer": "Przesyłanie plików", - "network": "Sieć", - "dataguard": "DataGuard", - "reports": "Raporty", - "tenants": "Organizacje", - "registrations": "Żądania rejestracji", - "management": "Zarządzanie", - "toggle_sidebar": "Przełącz pasek boczny", - "cdap": "Urządzenia CDAP", - "fleet": "Flota", - "scaling": "Skalowanie", - "cross_platform": "Wieloplatformowość", - "tokens": "Tokeny urządzeń", - "organizations": "Organizacje", - "policies": "Polityki", - "attestation": "Atestacja", - "remote": "Pulpit zdalny", - "toolkit": "Narzędziownik", - "security_audit": "Audyt Bezpieczeństwa", - "permissions": "Uprawnienia", - "languages": "Języki", - "resource_control": "Kontrola Zasobów", - "sdk_studio": "SDK Studio", - "chat": "Czat", - "help": "Pomoc", - "expand_sidebar": "Rozwiń pasek boczny", - "toggle_theme": "Przełącz motyw", - "login": "Logowanie", - "server_management": "Zarządzanie serwerem", - "server_attestation": "Atest serwera" - }, - "auth": { - "login": "Zaloguj", - "logout": "Wyloguj", - "login_title": "Logowanie", - "login_subtitle": "Zaloguj się do BetterDesk Console", - "username": "Użytkownik", - "username_placeholder": "Wprowadź nazwę użytkownika", - "password": "Hasło", - "password_placeholder": "Wprowadź hasło", - "remember_me": "Zapamiętaj mnie", - "login_failed": "Logowanie nie powiodło się. Sprawdź dane logowania.", - "or": "lub", - "login_sso": "Zaloguj przez SSO", - "login_sso_with": "Zaloguj przez {{provider}}", - "oidc_denied": "Dostęp został odrzucony przez dostawcę tożsamości.", - "oidc_invalid": "Nieprawidłowe wywołanie zwrotne OIDC. Spróbuj ponownie.", - "oidc_failed": "Uwierzytelnianie OIDC nie powiodło się. Spróbuj ponownie.", - "oidc_error": "Wystąpił błąd podczas logowania SSO.", - "oidc_no_account": "Twoje konto nie zostało znalezione, a automatyczna rejestracja jest wyłączona.", - "invalid_credentials": "Nieprawidłowa nazwa użytkownika lub hasło.", - "username_collision": "Lokalne konto o tej nazwie już istnieje. Zaloguj się lokalnym hasłem lub poproś administratora o zmianę nazwy albo usunięcie konfliktowego konta.", - "pro_only_account": "To konto jest przeznaczone wyłącznie dla klienta RustDesk. Użyj aplikacji RustDesk, aby się zalogować.", - "fill_all_fields": "Wypełnij wszystkie pola", - "logout_confirm": "Czy na pewno chcesz się wylogować?", - "change_password": "Zmień hasło", - "password_required": "Hasło jest wymagane", - "totp_title": "Uwierzytelnianie dwuskładnikowe", - "totp_subtitle": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", - "totp_code": "Kod weryfikacyjny", - "totp_verify": "Zweryfikuj", - "totp_use_recovery": "Użyj kodu odzyskiwania", - "totp_use_code": "Użyj kodu z aplikacji", - "totp_recovery_code": "Kod odzyskiwania", - "totp_back_to_login": "Powrót do logowania", - "totp_invalid_code": "Nieprawidłowy kod weryfikacyjny. Spróbuj ponownie.", - "totp_enter_code": "Wprowadź 6-cyfrowy kod", - "totp_enter_recovery": "Wprowadź kod odzyskiwania", - "totp_session_expired": "Sesja wygasła. Zaloguj się ponownie.", - "totp_rate_limited": "Zbyt wiele prób. Spróbuj ponownie później.", - "totp_already_enabled": "Uwierzytelnianie dwuskładnikowe jest już włączone", - "passwords_mismatch": "Hasła nie są identyczne", - "emergency_mode_banner": "Serwer Go jest nieosiągalny — tryb awaryjny (tylko admin, ograniczona funkcjonalność)" - }, - "dashboard": { - "title": "Panel", - "subtitle": "Przegląd serwera BetterDesk", - "total_devices": "Wszystkie urządzenia", - "online_now": "Teraz online", - "banned": "Zablokowane", - "active_connections": "Aktywne połączenia", - "offline_devices": "Offline", - "server_status": "Status serwera", - "quick_actions": "Szybkie akcje", - "manage_devices": "Zarządzaj urządzeniami", - "view_keys": "Wyświetl klucze serwera", - "generate_config": "Generuj konfigurację klienta", - "server_settings": "Skonfiguruj ustawienia", - "greeting_morning": "Dzień dobry, {name}", - "greeting_afternoon": "Dzień dobry, {name}", - "greeting_evening": "Dobry wieczór, {name}", - "greeting_night": "Dobranoc, {name}", - "health_overview": "Przegląd stanu", - "devices_online": "Urządzenia online", - "active_alerts": "Aktywne alerty", - "recent_connections": "Wszystkie urządzenia", - "server_uptime": "Czas pracy serwera", - "activity_feed": "Ostatnia aktywność", - "no_recent_activity": "Brak ostatniej aktywności", - "just_now": "przed chwilą", - "ago": "temu", - "tip_desktop_mode": "Wypróbuj tryb pulpitu z wieloma oknami i widżetami monitorowania.", - "tip_keyboard_shortcuts": "Naciśnij Ctrl+K w dowolnym miejscu, aby otworzyć paletę szybkiego wyszukiwania.", - "tip_address_book": "Synchronizuj książkę adresową między urządzeniami, logując się z klienta RustDesk.", - "tip_2fa": "Włącz uwierzytelnianie dwuskładnikowe w Ustawieniach, aby zwiększyć bezpieczeństwo konta.", - "tip_bulk_actions": "Zaznacz wiele urządzeń i użyj akcji zbiorczych, aby zarządzać nimi jednocześnie.", - "tip_theme": "Przełączaj między ciemnym a jasnym motywem w ustawieniach paska bocznego.", - "tip_cdap": "Podłącz urządzenia IoT i czujniki przemysłowe przez bramkę CDAP.", - "tip_tutorials": "Kliknij przycisk pomocy w prawym dolnym rogu, aby uruchomić interaktywne samouczki." - }, - "devices": { - "title": "Urządzenia", - "id": "ID", - "hostname": "Nazwa hosta", - "username": "Użytkownik", - "platform": "Platforma", - "version": "Wersja", - "ip_address": "Adres IP", - "note": "Notatka", - "last_seen": "Ostatnio widziano", - "last_online": "Ostatnio online", - "first_seen": "Pierwsze połączenie", - "created": "Utworzono", - "status": "Status", - "ban_reason": "Powód blokady", - "actions": "Akcje", - "search_placeholder": "Szukaj urządzeń...", - "filter_all": "Wszystkie", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Zablokowane", - "selected": "zaznaczono", - "showing": "Pokazuję", - "of": "z", - "sync_status": "Synchronizuj status", - "sync_success": "Status zsynchronizowany", - "empty_title": "Nie znaleziono urządzeń", - "empty_text": "Żadne urządzenie nie pasuje do filtrów", - "edit_title": "Szczegóły urządzenia", - "delete_title": "Usuń urządzenie", - "delete_confirm": "Czy na pewno chcesz usunąć urządzenie {id}?", - "delete_warning": "Za chwilę trwale usuniesz to urządzenie:", - "delete_permanent": "Ta operacja jest nieodwracalna. Wszystkie dane powiązane z tym urządzeniem zostaną trwale usunięte z bazy danych.", - "delete_success": "Urządzenie usunięte", - "revoke_option": "Odwołaj urządzenie (rozłącz + zablokuj ponowną rejestrację)", - "revoke_hint": "Urządzenie zostanie natychmiast rozłączone i trwale zablokowane przed ponownym połączeniem z tym serwerem.", - "revoke_success": "Urządzenie odwołane i dodane do czarnej listy", - "details": "Szczegóły urządzenia", - "ban_title": "Zablokuj urządzenie", - "ban_confirm": "Czy na pewno chcesz zablokować urządzenie {id}?", - "ban_success": "Urządzenie zablokowane", - "unban_title": "Odblokuj urządzenie", - "unban_confirm": "Czy na pewno chcesz odblokować urządzenie {id}?", - "unban_success": "Urządzenie odblokowane", - "change_id": "Zmień ID", - "change_id_title": "Zmień ID urządzenia", - "new_id": "Nowe ID", - "change_id_hint": "6-16 znaków, tylko litery, cyfry, myślniki i podkreślenia", - "change_id_success": "ID urządzenia zmienione", - "id_length_error": "ID musi mieć 6-16 znaków", - "id_format_error": "ID może zawierać tylko litery, cyfry, myślniki i podkreślenia", - "bulk_delete_title": "Usuń wiele urządzeń", - "bulk_delete_confirm": "Czy na pewno chcesz usunąć {count} urządzeń?", - "bulk_delete_success": "Usunięto {count} urządzeń", - "columns": "Kolumny", - "toggle_columns": "Przełącz widoczność kolumn", - "not_found": "Nie znaleziono urządzenia", - "delete_failed": "Nie udało się usunąć urządzenia", - "restore_failed": "Nie udało się przywrócić urządzenia", - "change_id_failed": "Nie udało się zmienić ID urządzenia", - "invalid_id": "Nieprawidłowe ID urządzenia (wymagane 6-16 znaków)", - "invalid_id_format": "Nieprawidłowy format ID (tylko litery, cyfry, myślniki i podkreślenia)", - "id_exists": "Urządzenie o tym ID już istnieje", - "no_selection": "Nie wybrano żadnych urządzeń", - "device_type": "Typ", - "tags": "Tagi", - "filter_type_all": "Wszystkie typy", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "Połączono przez CDAP", - "revoke": "Odwołaj", - "access_policy": "Polityka dostępu", - "filter_by_tags": "Filtruj po tagach", - "no_tags": "Brak tagów", - "all_groups": "Wszystkie grupy", - "create_group": "Utwórz grupę", - "manage_groups": "Zarządzaj grupami", - "group_name": "Nazwa grupy", - "group_name_placeholder": "np. Komputery media", - "dynamic_group": "Grupa dynamiczna z tagu", - "dynamic_group_hint": "Urządzenia z tym tagiem dołączają automatycznie.", - "tag_filter": "Filtr tagu", - "group_allowed_users": "Dozwoleni użytkownicy", - "group_allowed_users_hint": "Pozostaw puste, aby grupa była widoczna dla wszystkich z uprawnieniami do urządzeń.", - "group_allowed_user_groups": "Dozwolone grupy użytkowników", - "group_allowed_user_groups_hint": "Użytkownicy z wybranych grup mogą uzyskać dostęp do tej grupy urządzeń.", - "manage_user_groups": "Zarządzaj grupami użytkowników", - "no_user_groups": "Brak grup użytkowników", - "edit_group": "Edytuj grupę", - "delete_group": "Usuń grupę", - "delete_group_confirm": "Usunąć grupę urządzeń {name}?", - "group_deleted": "Grupa urządzeń usunięta", - "folder_group_readonly": "Grupy powiązane z folderami są zarządzane z poziomu folderów.", - "group_tag_required": "Filtr tagu jest wymagany dla grup dynamicznych", - "group_invalid": "Nieprawidłowy identyfikator grupy", - "group_not_found": "Nie znaleziono grupy", - "group_saved": "Grupa urządzeń zapisana", - "groups_saved": "Grupy urządzenia zapisane", + "meta": { + "lang": "pl", + "name": "Polish", + "native_name": "Polski", + "direction": "ltr" + }, + "common": { + "loading": "Ładowanie...", + "confirm": "Potwierdź", + "alert": "Uwaga", + "prompt": "Wprowadź wartość", + "copied": "Skopiowano do schowka", + "save": "Zapisz", + "saved": "Zapisano", + "error": "Błąd", + "success": "Sukces", + "warning": "Ostrzeżenie", + "info": "Informacja", + "all": "Wszystkie", + "cancel": "Anuluj", + "delete": "Usuń", + "actions": "Akcje", + "close": "Zamknij", + "required": "wymagane", + "name_required": "Nazwa jest wymagana", + "active": "Aktywny", + "inactive": "Nieaktywny", + "invalid_json": "Nieprawidłowy JSON", + "field_required": "{field} jest wymagane", + "back": "Powrót", + "edit": "Edytuj", + "yes": "Tak", + "no": "Nie" + }, + "nav": { + "main": "Główne", + "tools": "Narzędzia", + "system": "System", + "dashboard": "Panel", + "devices": "Urządzenia", + "keys": "Klucze", + "generator": "Generator", + "settings": "Ustawienia", + "users": "Użytkownicy", + "inventory": "Inwentaryzacja", + "tickets": "Zgłoszenia", + "help_requests": "Prośby o pomoc", + "activity": "Aktywność", + "automation": "Automatyzacja", + "file_transfer": "Przesyłanie plików", + "network": "Sieć", + "dataguard": "DataGuard", + "reports": "Raporty", + "tenants": "Organizacje", + "registrations": "Żądania rejestracji", + "management": "Zarządzanie", + "toggle_sidebar": "Przełącz pasek boczny", + "cdap": "Urządzenia CDAP", + "fleet": "Flota", + "scaling": "Skalowanie", + "cross_platform": "Wieloplatformowość", + "tokens": "Tokeny urządzeń", + "organizations": "Organizacje", + "policies": "Polityki", + "attestation": "Atestacja", + "remote": "Pulpit zdalny", + "toolkit": "Narzędziownik", + "security_audit": "Audyt Bezpieczeństwa", + "permissions": "Uprawnienia", + "languages": "Języki", + "resource_control": "Kontrola Zasobów", + "sdk_studio": "SDK Studio", + "chat": "Czat", + "help": "Pomoc", + "expand_sidebar": "Rozwiń pasek boczny", + "toggle_theme": "Przełącz motyw", + "login": "Logowanie", + "server_management": "Zarządzanie serwerem", + "server_attestation": "Atest serwera", + "commercialization": "Komercjalizacja" + }, + "auth": { + "login": "Zaloguj", + "logout": "Wyloguj", + "login_title": "Logowanie", + "login_subtitle": "Zaloguj się do BetterDesk Console", + "username": "Użytkownik", + "username_placeholder": "Wprowadź nazwę użytkownika", + "password": "Hasło", + "password_placeholder": "Wprowadź hasło", + "remember_me": "Zapamiętaj mnie", + "login_failed": "Logowanie nie powiodło się. Sprawdź dane logowania.", + "or": "lub", + "login_sso": "Zaloguj przez SSO", + "login_sso_with": "Zaloguj przez {{provider}}", + "oidc_denied": "Dostęp został odrzucony przez dostawcę tożsamości.", + "oidc_invalid": "Nieprawidłowe wywołanie zwrotne OIDC. Spróbuj ponownie.", + "oidc_failed": "Uwierzytelnianie OIDC nie powiodło się. Spróbuj ponownie.", + "oidc_error": "Wystąpił błąd podczas logowania SSO.", + "oidc_no_account": "Twoje konto nie zostało znalezione, a automatyczna rejestracja jest wyłączona.", + "invalid_credentials": "Nieprawidłowa nazwa użytkownika lub hasło.", + "username_collision": "Lokalne konto o tej nazwie już istnieje. Zaloguj się lokalnym hasłem lub poproś administratora o zmianę nazwy albo usunięcie konfliktowego konta.", + "pro_only_account": "To konto jest przeznaczone wyłącznie dla klienta RustDesk. Użyj aplikacji RustDesk, aby się zalogować.", + "fill_all_fields": "Wypełnij wszystkie pola", + "logout_confirm": "Czy na pewno chcesz się wylogować?", + "change_password": "Zmień hasło", + "password_required": "Hasło jest wymagane", + "totp_title": "Uwierzytelnianie dwuskładnikowe", + "totp_subtitle": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", + "totp_code": "Kod weryfikacyjny", + "totp_verify": "Zweryfikuj", + "totp_use_recovery": "Użyj kodu odzyskiwania", + "totp_use_code": "Użyj kodu z aplikacji", + "totp_recovery_code": "Kod odzyskiwania", + "totp_back_to_login": "Powrót do logowania", + "totp_invalid_code": "Nieprawidłowy kod weryfikacyjny. Spróbuj ponownie.", + "totp_enter_code": "Wprowadź 6-cyfrowy kod", + "totp_enter_recovery": "Wprowadź kod odzyskiwania", + "totp_session_expired": "Sesja wygasła. Zaloguj się ponownie.", + "totp_rate_limited": "Zbyt wiele prób. Spróbuj ponownie później.", + "totp_already_enabled": "Uwierzytelnianie dwuskładnikowe jest już włączone", + "passwords_mismatch": "Hasła nie są identyczne", + "emergency_mode_banner": "Serwer Go jest nieosiągalny — tryb awaryjny (tylko admin, ograniczona funkcjonalność)" + }, + "dashboard": { + "title": "Panel", + "subtitle": "Przegląd serwera BetterDesk", + "total_devices": "Wszystkie urządzenia", + "online_now": "Teraz online", + "banned": "Zablokowane", + "active_connections": "Aktywne połączenia", + "offline_devices": "Offline", + "server_status": "Status serwera", + "quick_actions": "Szybkie akcje", + "manage_devices": "Zarządzaj urządzeniami", + "view_keys": "Wyświetl klucze serwera", + "generate_config": "Generuj konfigurację klienta", + "server_settings": "Skonfiguruj ustawienia", + "greeting_morning": "Dzień dobry, {name}", + "greeting_afternoon": "Dzień dobry, {name}", + "greeting_evening": "Dobry wieczór, {name}", + "greeting_night": "Dobranoc, {name}", + "health_overview": "Przegląd stanu", + "devices_online": "Urządzenia online", + "active_alerts": "Aktywne alerty", + "recent_connections": "Wszystkie urządzenia", + "server_uptime": "Czas pracy serwera", + "activity_feed": "Ostatnia aktywność", + "no_recent_activity": "Brak ostatniej aktywności", + "just_now": "przed chwilą", + "ago": "temu", + "tip_desktop_mode": "Wypróbuj tryb pulpitu z wieloma oknami i widżetami monitorowania.", + "tip_keyboard_shortcuts": "Naciśnij Ctrl+K w dowolnym miejscu, aby otworzyć paletę szybkiego wyszukiwania.", + "tip_address_book": "Synchronizuj książkę adresową między urządzeniami, logując się z klienta RustDesk.", + "tip_2fa": "Włącz uwierzytelnianie dwuskładnikowe w Ustawieniach, aby zwiększyć bezpieczeństwo konta.", + "tip_bulk_actions": "Zaznacz wiele urządzeń i użyj akcji zbiorczych, aby zarządzać nimi jednocześnie.", + "tip_theme": "Przełączaj między ciemnym a jasnym motywem w ustawieniach paska bocznego.", + "tip_cdap": "Podłącz urządzenia IoT i czujniki przemysłowe przez bramkę CDAP.", + "tip_tutorials": "Kliknij przycisk pomocy w prawym dolnym rogu, aby uruchomić interaktywne samouczki." + }, + "devices": { + "title": "Urządzenia", + "id": "ID", + "hostname": "Nazwa hosta", + "username": "Użytkownik", + "platform": "Platforma", + "version": "Wersja", + "ip_address": "Adres IP", + "note": "Notatka", + "last_seen": "Ostatnio widziano", + "last_online": "Ostatnio online", + "first_seen": "Pierwsze połączenie", + "created": "Utworzono", + "status": "Status", + "ban_reason": "Powód blokady", + "actions": "Akcje", + "search_placeholder": "Szukaj urządzeń...", + "filter_all": "Wszystkie", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Zablokowane", + "selected": "zaznaczono", + "showing": "Pokazuję", + "of": "z", + "sync_status": "Synchronizuj status", + "sync_success": "Status zsynchronizowany", + "empty_title": "Nie znaleziono urządzeń", + "empty_text": "Żadne urządzenie nie pasuje do filtrów", + "edit_title": "Szczegóły urządzenia", + "delete_title": "Usuń urządzenie", + "delete_confirm": "Czy na pewno chcesz usunąć urządzenie {id}?", + "delete_warning": "Za chwilę trwale usuniesz to urządzenie:", + "delete_permanent": "Ta operacja jest nieodwracalna. Wszystkie dane powiązane z tym urządzeniem zostaną trwale usunięte z bazy danych.", + "delete_success": "Urządzenie usunięte", + "revoke_option": "Odwołaj urządzenie (rozłącz + zablokuj ponowną rejestrację)", + "revoke_hint": "Urządzenie zostanie natychmiast rozłączone i trwale zablokowane przed ponownym połączeniem z tym serwerem.", + "revoke_success": "Urządzenie odwołane i dodane do czarnej listy", + "details": "Szczegóły urządzenia", + "ban_title": "Zablokuj urządzenie", + "ban_confirm": "Czy na pewno chcesz zablokować urządzenie {id}?", + "ban_success": "Urządzenie zablokowane", + "unban_title": "Odblokuj urządzenie", + "unban_confirm": "Czy na pewno chcesz odblokować urządzenie {id}?", + "unban_success": "Urządzenie odblokowane", + "change_id": "Zmień ID", + "change_id_title": "Zmień ID urządzenia", + "new_id": "Nowe ID", + "change_id_hint": "6-16 znaków, tylko litery, cyfry, myślniki i podkreślenia", + "change_id_success": "ID urządzenia zmienione", + "id_length_error": "ID musi mieć 6-16 znaków", + "id_format_error": "ID może zawierać tylko litery, cyfry, myślniki i podkreślenia", + "bulk_delete_title": "Usuń wiele urządzeń", + "bulk_delete_confirm": "Czy na pewno chcesz usunąć {count} urządzeń?", + "bulk_delete_success": "Usunięto {count} urządzeń", + "columns": "Kolumny", + "toggle_columns": "Przełącz widoczność kolumn", + "not_found": "Nie znaleziono urządzenia", + "delete_failed": "Nie udało się usunąć urządzenia", + "restore_failed": "Nie udało się przywrócić urządzenia", + "change_id_failed": "Nie udało się zmienić ID urządzenia", + "invalid_id": "Nieprawidłowe ID urządzenia (wymagane 6-16 znaków)", + "invalid_id_format": "Nieprawidłowy format ID (tylko litery, cyfry, myślniki i podkreślenia)", + "id_exists": "Urządzenie o tym ID już istnieje", + "no_selection": "Nie wybrano żadnych urządzeń", + "device_type": "Typ", + "tags": "Tagi", + "filter_type_all": "Wszystkie typy", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "Połączono przez CDAP", + "revoke": "Odwołaj", + "access_policy": "Polityka dostępu", + "filter_by_tags": "Filtruj po tagach", + "no_tags": "Brak tagów", + "all_groups": "Wszystkie grupy", + "create_group": "Utwórz grupę", + "manage_groups": "Zarządzaj grupami", + "group_name": "Nazwa grupy", + "group_name_placeholder": "np. Komputery media", + "dynamic_group": "Grupa dynamiczna z tagu", + "dynamic_group_hint": "Urządzenia z tym tagiem dołączają automatycznie.", + "tag_filter": "Filtr tagu", + "group_allowed_users": "Dozwoleni użytkownicy", + "group_allowed_users_hint": "Pozostaw puste, aby grupa była widoczna dla wszystkich z uprawnieniami do urządzeń.", + "group_allowed_user_groups": "Dozwolone grupy użytkowników", + "group_allowed_user_groups_hint": "Użytkownicy z wybranych grup mogą uzyskać dostęp do tej grupy urządzeń.", + "manage_user_groups": "Zarządzaj grupami użytkowników", + "no_user_groups": "Brak grup użytkowników", + "edit_group": "Edytuj grupę", + "delete_group": "Usuń grupę", + "delete_group_confirm": "Usunąć grupę urządzeń {name}?", + "group_deleted": "Grupa urządzeń usunięta", + "folder_group_readonly": "Grupy powiązane z folderami są zarządzane z poziomu folderów.", + "group_tag_required": "Filtr tagu jest wymagany dla grup dynamicznych", + "group_invalid": "Nieprawidłowy identyfikator grupy", + "group_not_found": "Nie znaleziono grupy", + "group_saved": "Grupa urządzeń zapisana", + "groups_saved": "Grupy urządzenia zapisane", "group_membership_added": "Dodano do grupy", "group_membership_removed": "Usunięto z grupy", - "no_groups": "Brak grup", - "manual_groups": "Grupy ręczne", - "dynamic_memberships": "Członkostwa dynamiczne", - "unattended_access": "Dostęp nienadzorowany", - "enable_unattended": "Włącz dostęp nienadzorowany", - "access_password": "Hasło dostępu", - "password_configured": "Hasło ustawione", - "no_password": "Brak hasła", - "new_password": "Nowe hasło (zostaw puste aby zachować obecne)", - "clear_password": "Wyczyść hasło", - "access_schedule": "Harmonogram dostępu", - "enable_schedule": "Włącz dostęp czasowy", - "allowed_days": "Dozwolone dni", - "start_time": "Godzina rozpoczęcia", - "end_time": "Godzina zakończenia", - "timezone": "Strefa czasowa", - "allowed_operators": "Dozwoleni operatorzy", - "all_operators": "Wszyscy operatorzy (zostaw puste)", - "operators_hint": "Nazwy użytkowników oddzielone przecinkiem. Pozostaw puste aby zezwolić wszystkim.", - "last_updated_by": "Ostatnio zaktualizowane przez", - "access_policy_saved": "Polityka dostępu zapisana", - "display_name": "Nazwa wyświetlana", - "display_name_placeholder": "Własna nazwa (zastępuje hostname)", - "note_placeholder": "Notatki o tym urządzeniu", - "tabs": { - "overview": "Przegląd", - "hardware": "Sprzęt", - "metrics": "Metryki", - "connections": "Połączenia", - "audit": "Audyt", - "info": "Informacje", - "history": "Historia" - }, - "hardware": { - "cpu": "Procesor", - "memory": "Pamięć", - "disk": "Dysk", - "os": "System operacyjny", - "hostname": "Nazwa hosta", - "uptime": "Czas pracy", - "load_avg": "Średnie obciążenie", - "network": "Sieć", - "no_data": "Brak danych o sprzęcie", - "title": "Informacje sprzętowe", - "gpu": "Karta graficzna" - }, - "no_signal_tooltip": "Klient niedawno kontaktował API, ale nie jest zarejestrowany na serwerze sygnałowym (UDP :21116). Uruchom ponownie klienta po migracji serwera.", - "per_page": "Na stronę" + "no_groups": "Brak grup", + "manual_groups": "Grupy ręczne", + "dynamic_memberships": "Członkostwa dynamiczne", + "unattended_access": "Dostęp nienadzorowany", + "enable_unattended": "Włącz dostęp nienadzorowany", + "access_password": "Hasło dostępu", + "password_configured": "Hasło ustawione", + "no_password": "Brak hasła", + "new_password": "Nowe hasło (zostaw puste aby zachować obecne)", + "clear_password": "Wyczyść hasło", + "access_schedule": "Harmonogram dostępu", + "enable_schedule": "Włącz dostęp czasowy", + "allowed_days": "Dozwolone dni", + "start_time": "Godzina rozpoczęcia", + "end_time": "Godzina zakończenia", + "timezone": "Strefa czasowa", + "allowed_operators": "Dozwoleni operatorzy", + "all_operators": "Wszyscy operatorzy (zostaw puste)", + "operators_hint": "Nazwy użytkowników oddzielone przecinkiem. Pozostaw puste aby zezwolić wszystkim.", + "last_updated_by": "Ostatnio zaktualizowane przez", + "access_policy_saved": "Polityka dostępu zapisana", + "display_name": "Nazwa wyświetlana", + "display_name_placeholder": "Własna nazwa (zastępuje hostname)", + "note_placeholder": "Notatki o tym urządzeniu", + "tabs": { + "overview": "Przegląd", + "hardware": "Sprzęt", + "metrics": "Metryki", + "connections": "Połączenia", + "audit": "Audyt", + "info": "Informacje", + "history": "Historia" }, - "keys": { - "title": "Klucze serwera", - "subtitle": "Klucz publiczny i konfiguracja dla klientów RustDesk", - "public_key": "Klucz publiczny", - "qr_code": "Kod QR", - "server_info": "Informacje o serwerze", - "download": "Pobierz klucz", - "show_qr": "Pokaż QR", - "qr_hint": "Zeskanuj kod QR aplikacją mobilną RustDesk", - "no_key": "Nie znaleziono klucza publicznego", - "no_key_to_copy": "Brak klucza do skopiowania", - "no_qr": "Kod QR niedostępny", - "download_success": "Plik klucza pobrany", - "not_found": "Nie znaleziono klucza", - "api_not_found": "Nie znaleziono klucza API" - }, - "settings": { - "title": "Ustawienia", - "subtitle": "Konfiguracja konsoli i ustawienia konta", - "tab_general": "Ogólne", - "tab_server": "Serwer", - "tab_branding": "Wygląd", - "tab_backup": "Kopia zapasowa", - "tab_auth": "Uwierzytelnianie", - "tab_advanced": "Zaawansowane", - "connection_mode_title": "Strategia połączeń", - "connection_mode_desc": "Określa, jak klienci RustDesk łączą się ze sobą: bezpośrednio P2P (hole punch) gdy to możliwe, lub zawsze przez relay.", - "connection_mode_label": "Domyślny tryb połączenia", - "connection_mode_p2p_first": "P2P najpierw (zalecane) — próba połączenia bezpośredniego, potem relay", - "connection_mode_relay_only": "Tylko relay — wszystkie sesje przez serwer pośredniczący", - "connection_mode_advanced": "Opcje zaawansowane", - "connection_mode_fallback_ms": "Limit czasu P2P przed relay (ms)", - "connection_mode_same_nat_relay": "Wymuszaj relay, gdy obie strony mają ten sam publiczny IP (NAT hairpin)", - "connection_mode_network_hint": "P2P wymaga UDP 21116 między klientami. Na serwerze: sygnał TCP/UDP 21116, relay 21117, test NAT 21115. Klient web zawsze używa relay.", - "connection_mode_save": "Zapisz", - "connection_mode_save_restart": "Zapisz i uruchom serwer ponownie", - "connection_mode_saved": "Tryb połączenia zapisany", - "connection_mode_restart_started": "Restart serwera zainicjowany", - "connection_mode_restart_failed": "Restart serwera nie powiódł się", - "connection_mode_not_configurable": "Nie można zmienić trybu na tym wdrożeniu (brak unit systemd lub docker-compose)", - "connection_mode_compose_error": "Nie znaleziono sekcji environment serwera w docker-compose.yml", - "connection_mode_source_saved": "Zapisano w", - "connection_mode_source_defaults": "Domyślne ustawienia serwera (brak zapisu z panelu)", - "connection_mode_runtime": "Aktywny serwer", - "advanced_title": "Pliki konfiguracyjne", - "advanced_desc": "Edytuj pliki konfiguracyjne serwera bezpośrednio w panelu. Zmiany mogą wymagać ponownego uruchomienia usług. Przed zapisem tworzona jest kopia zapasowa poprzedniej wersji.", - "advanced_warning": "Te pliki zawierają dane wrażliwe (klucze API, hasła do bazy, sekrety sesji). Edytuj tylko, jeśli wiesz, co robisz. Błędna składnia może uniemożliwić start serwera.", - "advanced_files_label": "Pliki", - "advanced_select_file": "Wybierz plik z listy, aby wyświetlić lub edytować jego zawartość.", - "advanced_reload": "Odśwież", - "advanced_save": "Zapisz plik", - "advanced_apply_restart": "Zastosuj (restart usługi)", - "advanced_saved": "Plik konfiguracyjny zapisany", - "advanced_restart_after_save": "Konfiguracja zapisana. Uruchomić ponownie powiązaną usługę, aby zmiany weszły w życie?", - "advanced_restart_confirm": "Uruchomić ponownie powiązane usługi BetterDesk? Aktywne połączenia mogą na chwilę zostać przerwane.", - "advanced_restart_console_confirm": "Uruchomić ponownie usługę konsoli web? Sesja w przeglądarce na chwilę się rozłączy; strona odświeży się po powrocie konsoli.", - "advanced_restart_started": "Restart usługi został zainicjowany", - "advanced_restart_done": "Konsola uruchomiona ponownie — przeładowanie strony…", - "advanced_restart_polling": "Oczekiwanie na powrót konsoli…", - "advanced_restart_timeout": "Restart wysłany, ale konsola nie odpowiedziała na czas. Sprawdź logi systemd/NSSM i odśwież stronę ręcznie.", - "advanced_restart_failed": "Restart usługi nie powiódł się (brak uprawnień lub usługa nie jest zainstalowana)", - "advanced_save_confirm": "Zapisać zmiany w tym pliku? Zostanie utworzona kopia zapasowa poprzedniej wersji.", - "advanced_unsaved_confirm": "Masz niezapisane zmiany. Odrzucić je?", - "advanced_no_files": "Brak dostępnych plików konfiguracyjnych w tym systemie.", - "advanced_readonly": "tylko odczyt", - "advanced_missing": "brak", - "advanced_new_file": "Nowy plik (zostanie utworzony po zapisie)", - "advanced_new_file_hint": "Nowy plik — dodaj treść i zapisz", - "advanced_backup_created": "utworzono kopię zapasową", - "advanced_restart_console": "Uruchom ponownie usługę konsoli (np. systemctl restart betterdesk-console), aby zmiany w .env weszły w życie.", - "advanced_restart_goserver": "Uruchom ponownie serwer Go BetterDesk, aby przeładować listę blokad.", - "advanced_restart_systemd": "Po edycji unitów systemd wykonaj: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Uruchom ponownie odpowiednią usługę, aby zmiany weszły w życie.", - "advanced_error_unknown": "Nieznany plik konfiguracyjny", - "advanced_error_not_found": "Plik nie istnieje", - "advanced_error_not_file": "Ścieżka nie wskazuje na zwykły plik", - "advanced_error_too_large": "Plik przekracza maksymalny rozmiar edycji (512 KB)", - "advanced_error_binary": "Plików binarnych nie można edytować w panelu", - "advanced_error_invalid": "Nieprawidłowa zawartość pliku", - "advanced_error_not_writable": "Plik nie jest zapisywalny przez proces konsoli", - "advanced_file_console-env": "Środowisko konsoli (.env)", - "advanced_file_console-env-local": "Nadpisania konsoli (.env.local)", - "advanced_file_go-blocklist": "Lista blokad serwera Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (jednostka usługi)", - "advanced_file_systemd-server": "systemd: betterdesk-server (jednostka usługi)", - "advanced_file_console-session-secret": "Sekret sesji konsoli (.session_secret)", - "advanced_file_go-audit-log": "Dziennik audytu serwera Go (audit.jsonl)", - "advanced_file_build-env": "Środowisko budowania agenta (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfiguracja)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkiestracja)", - "advanced_restart_none": "Ten plik nie wymaga restartu usługi.", - "enrollment_title": "Rejestracja urządzeń (RustDesk)", - "enrollment_desc": "Określa, jak nowi klienci RustDesk rejestrują się na serwerze i jak operator zatwierdza żądania na stronie Żądań rejestracji.", - "enrollment_require_approval": "Wymagaj akceptacji operatora (tryb Zarządzany)", - "enrollment_require_approval_hint": "Po włączeniu nieznani klienci trafiają do kolejki do momentu zatwierdzenia w Żądaniach rejestracji.", - "enrollment_rich_approve": "Pełny formularz przy akceptacji (nazwa, folder, grupy, tagi)", - "enrollment_rich_approve_hint": "Pokazuje rozbudowany dialog przy zatwierdzaniu rejestracji enrollment i LAN.", - "enrollment_tag_picker": "Wybór tagów z listy istniejących", - "enrollment_tag_picker_hint": "Umożliwia wybór tagów z listy używanej na stronie Urządzenia zamiast samego wpisywania.", - "enrollment_open_requests": "Otwórz żądania rejestracji", - "enrollment_pending_count": "{count} oczekujących żądań rejestracji", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Skonfiguruj zewnętrzne uwierzytelnianie przez LDAP lub Active Directory. Użytkownicy będą mogli logować się za pomocą poświadczeń domenowych.", - "ldap_enabled": "Włącz uwierzytelnianie LDAP", - "ldap_enabled_hint": "Po włączeniu użytkownicy mogą logować się za pomocą poświadczeń LDAP/AD. Konta lokalne nadal działają jako awaryjne.", - "ldap_connection": "Połączenie z serwerem", - "ldap_host": "Host", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Pomiń weryfikację TLS", - "ldap_timeout": "Timeout połączenia (s)", - "ldap_timeout_hint": "Czas oczekiwania na odpowiedź serwera LDAP w sekundach", - "ldap_bind_mode": "Tryb wiązania", - "ldap_direct_bind": "Bezpośrednie wiązanie", - "ldap_direct_bind_hint": "Wiązanie bezpośrednio za pomocą szablonu DN zamiast konta serwisowego do wyszukiwania.", - "ldap_bind_dn": "Bind DN (konto serwisowe)", - "ldap_bind_dn_hint": "Distinguished Name konta serwisowego tylko do odczytu, używanego do wyszukiwania użytkowników.", - "ldap_bind_password": "Hasło Bind", - "ldap_base_dn": "Base DN", - "ldap_base_dn_hint": "Baza wyszukiwania użytkowników, np. dc=example,dc=com", - "ldap_user_filter": "Filtr użytkownika", - "ldap_user_filter_hint": "Filtr LDAP do wyszukiwania użytkowników. Użyj {{username}} jako placeholder. Domyślnie: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Szablon DN bezpośredniego wiązania", - "ldap_direct_bind_dn_hint": "Szablon DN do bezpośredniego wiązania. Użyj {{username}} jako placeholder, np. uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Atrybuty użytkownika", - "ldap_attr_id": "Atrybut nazwy użytkownika", - "ldap_attr_email": "Atrybut e-mail", - "ldap_attr_name": "Atrybut nazwy wyświetlanej", - "ldap_group_mapping": "Mapowanie grup → ról", - "ldap_group_base_dn": "Base DN grup", - "ldap_group_base_dn_hint": "Pozostaw puste, aby użyć głównego Base DN", - "ldap_group_filter": "Filtr grup", - "ldap_group_attr_name": "Atrybut nazwy grupy", - "ldap_default_role": "Domyślna rola", - "ldap_default_role_hint": "Rola przypisywana użytkownikom, których grupy LDAP nie pasują do żadnego mapowania", - "ldap_role_viewer": "Przeglądający", - "ldap_role_operator": "Operator", - "ldap_role_admin": "Administrator", - "ldap_group_role_map": "Mapa grup → ról", - "ldap_group_role_map_hint": "Mapuj grupy LDAP na role BetterDesk. Format: GroupDN=rola oddzielone | (pipe). Przykład: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Testuj połączenie", - "ldap_testing": "Testowanie...", - "ldap_test_success": "Połączenie pomyślne! Serwer LDAP jest osiągalny i poświadczenia bind są prawidłowe.", - "ldap_test_failed": "Połączenie nie powiodło się", - "ldap_save": "Zapisz konfigurację LDAP", - "ldap_saved": "Konfiguracja LDAP została zapisana pomyślnie", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfiguracja Single Sign-On przez dostawcę OpenID Connect (Azure AD, Okta, Google, Keycloak itp.).", - "oidc_enabled": "Włącz uwierzytelnianie OIDC", - "oidc_enabled_hint": "Pozwól użytkownikom logować się przez zewnętrznego dostawcę tożsamości", - "oidc_provider": "Dostawca tożsamości", - "oidc_display_name": "Tekst na przycisku", - "oidc_display_name_hint": "Tekst wyświetlany na przycisku logowania (np. Azure AD, Okta)", - "oidc_issuer_url": "URL wystawcy", - "oidc_issuer_url_hint": "URL wystawcy OpenID Connect (odkrywanie będzie automatyczne)", - "oidc_client_id": "ID klienta", - "oidc_client_secret": "Sekret klienta", - "oidc_redirect_url": "URL przekierowania (Callback)", - "oidc_redirect_url_hint": "Musi dokładnie odpowiadać konfiguracji w dostawcy. Zwykle: http(s)://twoj-serwer:21114/api/auth/oidc/callback", - "oidc_scopes": "Zakresy", - "oidc_use_pkce": "Użyj PKCE (zalecane)", - "oidc_auto_discovery": "Auto-odkrywanie", - "oidc_allow_signup": "Automatyczne tworzenie użytkowników", - "oidc_manual_endpoints": "Ręczne adresy URL endpointów", - "oidc_authorization_url": "Endpoint autoryzacji", - "oidc_token_url": "Endpoint tokenów", - "oidc_userinfo_url": "Endpoint informacji o użytkowniku", - "oidc_claim_mapping": "Mapowanie pól (claims)", - "oidc_claim_username": "Pole nazwy użytkownika", - "oidc_claim_email": "Pole e-mail", - "oidc_claim_name": "Pole wyświetlanej nazwy", - "oidc_claim_groups": "Pole grup", - "oidc_role_mapping": "Mapowanie ról", - "oidc_default_role": "Domyślna rola", - "oidc_group_role_map": "Mapowanie grupa → rola", - "oidc_group_role_map_hint": "Jedno mapowanie na linię: nazwa_grupy=rola (np. admins=admin, operators=operator)", - "oidc_test_discovery": "Test odkrywania", - "oidc_testing": "Testowanie...", - "oidc_test_success": "Odkrywanie powiodło się! Endpointy rozwiązane.", - "oidc_test_failed": "Odkrywanie nie powiodło się", - "oidc_issuer_required": "URL wystawcy jest wymagany do testu odkrywania", - "oidc_save": "Zapisz konfigurację OIDC", - "oidc_saved": "Konfiguracja OIDC została zapisana pomyślnie", - "language": "Język", - "change_password": "Zmiana hasła", - "password_desc": "Zaktualizuj hasło do konta", - "current_password": "Obecne hasło", - "new_password": "Nowe hasło", - "confirm_password": "Potwierdź hasło", - "save_password": "Zmień hasło", - "password_changed": "Hasło zostało zmienione", - "fill_all_fields": "Wypełnij wszystkie pola", - "passwords_not_match": "Hasła nie są identyczne", - "password_requirements": "Wymagania dotyczące hasła", - "password_requirements_not_met": "Hasło nie spełnia wymagań", - "req_length": "Minimum 8 znaków", - "req_uppercase": "Co najmniej jedna wielka litera", - "req_lowercase": "Co najmniej jedna mała litera", - "req_number": "Co najmniej jedna cyfra", - "server_info": "Informacje o serwerze", - "version": "Wersja", - "database": "Baza danych", - "uptime": "Czas działania", - "audit_log": "Dziennik audytu", - "audit_desc": "Ostatnia aktywność w konsoli", - "no_audit_logs": "Brak wpisów w dzienniku", - "tutorials_title": "Samouczki i przewodniki", - "tutorials_desc": "Zarządzaj przewodnikami i nakładkami pomocy wyświetlanymi w konsoli", - "tutorials_enabled": "Włącz samouczki", - "tutorials_enabled_hint": "Po wyłączeniu samouczki nie będą uruchamiane automatycznie, a przycisk pomocy zostanie ukryty", - "tutorials_reset_hint": "Oznacz wszystkie samouczki jako niewyświetlone, aby mogły zostać pokazane ponownie", - "tutorials_enabled_toast": "Samouczki włączone", - "tutorials_disabled_toast": "Samouczki wyłączone", - "tutorials_reset_toast": "Wszystkie samouczki zostały zresetowane", - "backend_title": "Backend serwera", - "backend_desc": "Wybierz backend serwera do zarządzania urządzeniami oraz usług sygnalizacji/relay.", - "backend_original": "Oryginalny", - "backend_enhanced": "Rozszerzony", - "backend_rustdesk_desc": "Standardowe serwery sygnalizacji i relay RustDesk (hbbs + hbbr). Podstawowe REST API z ograniczonymi endpointami.", - "backend_betterdesk_desc": "Rozszerzony serwer Go z pełnym REST API, uwierzytelnianiem JWT, bloklistą, tagami, zdarzeniami WebSocket w czasie rzeczywistym i logowaniem audytu.", - "backend_feature_signal": "Serwer sygnalizacji (rejestracja ID)", - "backend_feature_relay": "Serwer relay (przekaźnik połączeń)", - "backend_feature_basic_api": "Podstawowe REST API", - "backend_feature_full_api": "Pełne REST API (34+ endpointów)", - "backend_feature_jwt": "Uwierzytelnianie JWT i TOTP 2FA", - "backend_feature_blocklist": "Zarządzanie bloklistą IP/ID", - "backend_feature_tags": "Tagi i grupowanie urządzeń", - "backend_feature_audit": "Logowanie zdarzeń audytu", - "backend_feature_websocket": "Zdarzenia WebSocket w czasie rzeczywistym", - "backend_connection": "Połączenie", - "backend_api_url": "Adres API", - "backend_test": "Testuj połączenie", - "backend_testing": "Testowanie...", - "backend_save": "Zastosuj backend", - "backend_saved": "Backend serwera został zmieniony. Zarządzanie urządzeniami będzie teraz obsługiwane przez nowy backend.", - "backend_save_failed": "Nie udało się przełączyć backendu serwera", - "backend_test_success": "Połączenie udane! Serwer jest dostępny.", - "backend_test_failed": "Połączenie nieudane. Serwer jest niedostępny.", - "backend_confirm_switch": "Czy na pewno chcesz przełączyć backend serwera? Zmieni to sposób zarządzania urządzeniami.", - "backend_unreachable": "Nie można przełączyć: docelowy serwer jest niedostępny. Najpierw uruchom serwer.", - "invalid_backend": "Nieprawidłowy wybór backendu. Wybierz 'rustdesk' lub 'betterdesk'.", - "backend_status_running": "Połączono", - "backend_status_unreachable": "Niedostępny", - "backend_status_error": "Błąd", - "backend_status_unknown": "Nieznany", - "totp_title": "Uwierzytelnianie dwuskładnikowe", - "totp_desc": "Dodaj dodatkową warstwę zabezpieczeń za pomocą aplikacji TOTP (Google Authenticator, Microsoft Authenticator, Authy itp.)", - "totp_enabled": "2FA włączone", - "totp_enabled_desc": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym.", - "totp_disabled": "2FA wyłączone", - "totp_disabled_desc": "Włącz uwierzytelnianie dwuskładnikowe dla dodatkowego bezpieczeństwa konta.", - "totp_setup": "Włącz 2FA", - "totp_disable": "Wyłącz 2FA", - "totp_step1": "Zainstaluj aplikację uwierzytelniającą na telefonie", - "totp_step2": "Zeskanuj poniższy kod QR", - "totp_step3": "Wprowadź 6-cyfrowy kod, aby zweryfikować", - "totp_manual_key": "Klucz ręczny", - "totp_enter_code": "Wprowadź kod weryfikacyjny", - "totp_verify_enable": "Zweryfikuj i włącz", - "totp_enabled_success": "Uwierzytelnianie dwuskładnikowe włączone!", - "totp_recovery_warning": "Zapisz te kody odzyskiwania w bezpiecznym miejscu. Każdy kod może być użyty tylko raz. Jeśli stracisz dostęp do aplikacji uwierzytelniającej, możesz użyć tych kodów do zalogowania.", - "totp_done": "Gotowe", - "totp_disable_warning": "Wyłączenie uwierzytelniania dwuskładnikowego zmniejszy bezpieczeństwo konta. Wprowadź hasło, aby potwierdzić.", - "totp_disabled_success": "Uwierzytelnianie dwuskładnikowe zostało wyłączone." - }, - "audit": { - "time": "Czas", - "user": "Użytkownik", - "action": "Akcja", - "details": "Szczegóły", - "action_login": "Logowanie", - "action_login_failed": "Nieudane logowanie", - "action_logout": "Wylogowanie", - "action_password_change": "Zmiana hasła", - "action_2fa_enable": "Włączono 2FA", - "action_2fa_disable": "Wyłączono 2FA", - "action_user_create": "Utworzono użytkownika", - "action_user_update": "Zaktualizowano użytkownika", - "action_user_delete": "Usunięto użytkownika", - "action_settings_update": "Zaktualizowano ustawienia", - "action_device_ban": "Zbanowano urządzenie", - "action_device_unban": "Odbanowano urządzenie", - "action_device_delete": "Usunięto urządzenie" - }, - "generator": { - "title": "Generator Agenta", - "subtitle": "Twórz oznakowane instalatory agenta BetterDesk dla użytkowników końcowych", - "bundles_title": "Pakiety agenta", - "new_bundle": "Nowy pakiet", - "editor_title": "Edytor pakietu", - "empty_state": "Wybierz pakiet po lewej stronie lub utwórz nowy.", - "loading": "Ładowanie…", - "no_bundles": "Brak pakietów. Utwórz pierwszy.", - "bundle_name": "Nazwa pakietu", - "bundle_name_hint": "Etykieta wewnętrzna — nie jest pokazywana użytkownikom końcowym.", - "short_link": "Krótki link do pobrania", - "short_link_hint": "Fragment publicznego adresu (/d/…). Tylko małe litery, cyfry i myślniki (2–32 znaki). Uzupełniany z nazwy pakietu — skróć go dla łatwiejszego zapamiętania (np. acme).", - "connection_section": "Połączenie z serwerem", - "server_host": "Publiczny adres serwera", - "server_host_placeholder": "wsparcie.example.com lub 203.0.113.10", - "server_host_hint": "Domena lub publiczny adres IP, pod którym użytkownicy docierają do serwera BetterDesk. Port jest pobierany z konfiguracji konsoli.", - "use_https": "Używaj HTTPS / WSS (zalecane)", - "enrollment_token": "Rejestracja urządzenia", - "enrollment_token_pending": "Indywidualnie po zatwierdzeniu", - "enrollment_token_set": "Indywidualnie — zatwierdź w Rejestracjach", - "enrollment_token_hint": "Każda instalacja rejestruje się samodzielnie. Zatwierdzaj nowe urządzenia w panelu Rejestracje; serwer wydaje wtedy unikalny klucz dostępu dla każdego komputera.", - "enrollment_per_device": "Indywidualnie — zatwierdź w Rejestracjach", - "branding_section": "Branding", - "company_name": "Nazwa firmy / marki", - "short_text": "Krótki opis", - "contact_email": "E-mail kontaktowy", - "contact_phone": "Telefon kontaktowy", - "contact_url": "Strona internetowa", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG lub WebP. Maksymalnie 256 KB.", - "logo_clear": "Usuń logo", - "primary_color": "Kolor podstawowy", - "accent_color": "Kolor nagłówka", - "background_color": "Tło okna", - "surface_color": "Tło kart", - "text_color": "Kolor tekstu", - "text_muted_color": "Kolor tekstu drugorzędnego", - "status_ready_color": "Kolor wskaźnika gotowości", - "header_text_color": "Kolor tekstu nagłówka", - "default_lang": "Domyślny język", - "allow_unattended": "Zezwól na dostęp bez nadzoru", - "allow_unattended_hint": "Gdy włączone, agent pokazuje stałe hasło do dostępu operatora.", - "save": "Zapisz pakiet", - "revoke": "Wycofaj", - "unrevoke": "Przywróć", - "revoked": "Wycofany", - "preview_title": "Podgląd na żywo", - "preview_hint": "Przybliżony wygląd okna agenta widzianego przez użytkownika.", - "preview_default_name": "Wsparcie BetterDesk", - "preview_status_ready": "Gotowy", - "preview_id": "Twoje ID", - "preview_password": "Hasło", - "preview_chat": "Czat ze wsparciem", - "preview_settings": "Ustawienia (tylko admin)", - "preview_quit": "Zakończ (tylko admin)", - "download_link_title": "Link do pobrania", - "download_link_hint": "Udostępnij ten link użytkownikom — zobaczą oznakowaną stronę pobierania. Stare linki z losowym ID nadal działają po zmianie krótkiego linku.", - "open_portal": "Otwórz", - "created": "Pakiet utworzony", - "saved": "Pakiet zapisany", - "deleted": "Pakiet usunięty", - "revoked_ok": "Pakiet wycofany", - "unrevoked_ok": "Pakiet ponownie aktywny", - "link_copied": "Link skopiowany do schowka", - "copy_failed": "Nie udało się automatycznie skopiować — skopiuj ręcznie", - "unsaved_confirm": "Odrzucić niezapisane zmiany?", - "confirm_revoke": "Wycofać ten pakiet? Link do pobrania przestanie działać.", - "confirm_unrevoke": "Ponownie aktywować ten pakiet?", - "confirm_delete": "Trwale usunąć ten pakiet? Tej operacji nie można cofnąć.", - "builds_title": "Buildy klienta", - "builds_hint": "Instalatory kompilowane na tym serwerze dla każdej platformy. Przebuduj po naprawie toolchaina lub aktualizacji źródeł agenta.", - "builds_loading": "Ładowanie statusu buildów…", - "builds_empty": "Brak buildów w kolejce — zapisz pakiet lub kliknij Przebuduj wszystkie.", - "rebuild_all": "Przebuduj wszystkie", - "rebuilding_all": "Kolejkowanie buildów…", - "rebuild_queued": "Wszystkie platformy dodane do kolejki", - "rebuild_confirm": "Przebudować instalatory dla wszystkich platform? Gotowe artefakty zostaną zastąpione.", - "build_status_ready": "Gotowy", - "build_status_pending": "W kolejce", - "build_status_building": "Budowanie", - "build_status_failed": "Nieudany", - "builds_summary": "{{ready}} gotowych · {{pending}} w kolejce · {{building}} budowanie · {{failed}} nieudanych", - "build_error_hint": "Błąd buildu", - "errors": { - "validation_failed": "Walidacja nie powiodła się", - "name_required": "Nazwa pakietu jest wymagana", - "company_name_required": "Nazwa firmy jest wymagana", - "logo_invalid": "Logo musi być prawidłowym plikiem graficznym", - "logo_too_large": "Logo może mieć maks. 256 KB", - "logo_read_failed": "Nie udało się odczytać pliku z logo", - "primary_color_invalid": "Kolor podstawowy musi być wartością hex (np. #2563eb)", - "accent_color_invalid": "Kolor nagłówka musi być wartością hex (np. #1e293b)", - "contact_url_invalid": "Strona kontaktowa musi być prawidłowym URL", - "server_host_required": "Publiczny adres serwera jest wymagany", - "server_host_invalid": "Podaj prawidłową domenę lub adres IPv4", - "token_failed": "Nie udało się wygenerować tokenu rejestracji — sprawdź połączenie z serwerem", - "rebuild_revoked": "Nie można przebudować wycofanego pakietu — najpierw go przywróć", - "slug_invalid": "Krótki link może zawierać tylko małe litery, cyfry i myślniki", - "slug_too_short": "Krótki link musi mieć co najmniej 2 znaki", - "slug_too_long": "Krótki link może mieć maksymalnie 32 znaki", - "slug_taken": "Ten krótki link jest już używany przez inny pakiet" - }, - "legacy_title": "Generator konfiguracji klienta", - "config_options": "Opcje konfiguracji", - "server_address": "Adres serwera", - "server_address_hint": "Domena lub adres IP serwera", - "custom_port": "Własny port", - "port_hint": "Zostaw puste dla domyślnego (21116)", - "relay_server": "Serwer relay", - "relay_placeholder": "Taki sam jak serwer ID jeśli puste", - "relay_hint": "Opcjonalnie: osobny adres serwera relay", - "include_key": "Dołącz klucz publiczny do konfiguracji", - "generate": "Generuj konfigurację", - "output": "Wygenerowana konfiguracja", - "usage_title": "Dane połączenia", - "generated": "Konfiguracja wygenerowana", - "server_required": "Adres serwera jest wymagany", - "nothing_to_copy": "Najpierw wygeneruj konfigurację", - "preview_help": "Poproś o pomoc" - }, - "download": { - "title": "Pobierz Agenta BetterDesk", - "choose_platform": "Wybierz platformę", - "choose_platform_hint": "Wybierz instalator odpowiadający Twojemu systemowi operacyjnemu.", - "download": "Pobierz", - "building": "Budowanie…", - "failed": "Budowanie nieudane", - "need_help": "Potrzebujesz pomocy?", - "powered_by": "Napędzane przez" - }, - "server": { - "port": "Port", - "api_port": "Port API", - "id_server": "Serwer ID", - "relay_server": "Serwer Relay", - "api_key": "Klucz API" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Zablokowany", - "running": "Działa", - "stopped": "Zatrzymany", - "unknown": "Nieznany", - "checking": "Sprawdzanie...", - "label": "Status", - "no_signal": "Brak sygnału" - }, - "actions": { - "refresh": "Odśwież", - "copy": "Kopiuj", - "connect": "Połącz", - "connect_desktop": "Połącz przez klienta desktop", - "remote_viewer": "Podgląd zdalny", - "cdap_viewer": "Podgląd CDAP (zrzuty)", - "web_remote": "Pulpit zdalny", - "details": "Szczegóły", - "edit": "Edytuj", - "delete": "Usuń", - "ban": "Zablokuj", - "unban": "Odblokuj", - "save": "Zapisz", - "cancel": "Anuluj", - "confirm": "Potwierdź", - "close": "Zamknij", - "clear": "Wyczyść", - "ok": "OK", - "saved": "Zapisano pomyślnie", - "back": "Powrót", - "create": "Utwórz", - "dismiss": "Ukryj", - "view_all": "Zobacz wszystkie", - "add": "Dodaj", - "remove": "Usuń" - }, - "time": { - "just_now": "Przed chwilą", - "seconds_ago": "{count}s temu", - "minutes_ago": "{count}m temu", - "hours_ago": "{count}h temu", - "days_ago": "{count}d temu", - "day_mon": "Pon", - "day_tue": "Wt", - "day_wed": "Śr", - "day_thu": "Czw", - "day_fri": "Pt", - "day_sat": "Sob", - "day_sun": "Ndz" - }, - "users": { - "title": "Zarządzanie użytkownikami", - "subtitle": "Zarządzaj użytkownikami konsoli i uprawnieniami", - "add_user": "Dodaj użytkownika", - "edit_user": "Edytuj użytkownika", - "username": "Nazwa użytkownika", - "username_placeholder": "Wprowadź nazwę użytkownika", - "username_hint": "3-32 znaki, tylko litery, cyfry i podkreślenia", - "password": "Hasło", - "password_placeholder": "Wprowadź hasło", - "password_hint": "Minimum 8 znaków z dużymi literami, cyframi i symbolami", - "password_leave_empty": "Zostaw puste, aby zachować obecne", - "role": "Rola", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Obserwator", - "role_pro": "Pro (tylko API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Admin serwera", - "role_global_admin": "Admin globalny", - "role_hint": "To jest rola obowiązująca na poziomie całego serwera. Super Admin ma pełny dostęp. Admin serwera zarządza konfiguracją serwera i kluczami. Admin globalny zarządza użytkownikami, organizacjami i urządzeniami, ale nie może zmieniać konfiguracji serwera. Administrator jest równoważny Super Adminowi. Operatorzy zarządzają urządzeniami. Obserwatorzy mają dostęp tylko do odczytu. Pro aktywuje tryb Pro w kliencie RustDesk (tylko API). Role w poszczególnych organizacjach konfigurujesz osobno w sekcji Organizacje danego użytkownika.", - "user_groups": "Grupy użytkowników", - "user_groups_hint": "Grupy użytkowników mogą nadawać dostęp do wybranych grup urządzeń.", - "loading_user_groups": "Ładowanie grup użytkowników...", - "no_user_groups": "Brak dostępnych grup użytkowników", - "create_user_group": "Utwórz grupę", - "edit_user_group": "Edytuj grupę użytkowników", - "delete_user_group": "Usuń grupę użytkowników", - "delete_user_group_confirm": "Usunąć grupę użytkowników {name}? Członkowie stracą dostęp nadany przez tę grupę.", - "user_group_created": "Grupa użytkowników utworzona", - "user_group_updated": "Grupa użytkowników zaktualizowana", - "user_group_deleted": "Grupa użytkowników usunięta", - "user_group_not_found": "Nie znaleziono grupy użytkowników", - "group_name": "Nazwa grupy", - "group_name_placeholder": "Operatorzy", - "group_note": "Notatka", - "group_note_placeholder": "Opcjonalna notatka", - "group_name_required": "Nazwa grupy jest wymagana", - "group_members_count": "{count} członków", - "created": "Utworzono", - "last_login": "Ostatnie logowanie", - "never": "Nigdy", - "actions": "Akcje", - "create": "Utwórz użytkownika", - "edit": "Edytuj", - "reset_password": "Resetuj hasło", - "new_password": "Nowe hasło", - "delete_title": "Usuń użytkownika", - "delete_confirm": "Czy na pewno chcesz usunąć użytkownika {username}?", - "delete_success": "Użytkownik został usunięty", - "user_created": "Użytkownik został utworzony", - "user_updated": "Użytkownik został zaktualizowany", - "password_reset_success": "Hasło zostało zresetowane", - "empty_title": "Brak użytkowników", - "empty_text": "Dodaj użytkowników, aby zarządzać dostępem do konsoli", - "fill_required": "Wypełnij wszystkie wymagane pola", - "invalid_username": "Nazwa użytkownika musi mieć 3-32 znaki, tylko litery, cyfry i podkreślenia", - "username_exists": "Nazwa użytkownika już istnieje", - "weak_password": "Hasło jest zbyt słabe", - "password_too_short": "Hasło musi mieć co najmniej 8 znaków", - "invalid_role": "Nieprawidłowa rola", - "cannot_demote_self": "Nie możesz zdegradować samego siebie", - "cannot_delete_self": "Nie możesz usunąć własnego konta", - "last_admin": "Nie można usunąć ostatniego administratora", - "admin_only": "Ta funkcja jest dostępna tylko dla administratorów", - "password_required": "Hasło jest wymagane", - "not_found": "Nie znaleziono użytkownika", - "strength_weak": "Słabe", - "strength_medium": "Średnie", - "strength_strong": "Silne", - "security_tips_title": "Najlepsze praktyki bezpieczeństwa", - "tip_strong_passwords": "Używaj silnych, unikalnych haseł dla każdego użytkownika", - "tip_unique_accounts": "Twórz indywidualne konta dla każdej osoby", - "tip_viewer_role": "Używaj roli obserwatora dla użytkowników, którzy potrzebują tylko odczytu", - "tip_operator_role": "Używaj roli operatora dla użytkowników, którzy muszą zarządzać urządzeniami, ale nie użytkownikami", - "tip_audit_logs": "Regularnie przeglądaj dzienniki dla podejrzanej aktywności", - "organizations": "Organizacje", - "user_organizations": "Organizacje użytkownika {username}", - "no_organizations": "Użytkownik nie jest przypisany do żadnej organizacji", - "org_removed": "Przypisanie do organizacji usunięte", - "server_role_label": "Rola serwerowa", - "server_role_hint": "Określa, co użytkownik może robić w całej konsoli (dostęp do panelu, konfiguracja serwera, audyt itd.).", - "org_membership_section": "Członkostwo w organizacjach", - "org_membership_hint": "Użytkownik może należeć do wielu organizacji. Rola w organizacji obowiązuje tylko wewnątrz tej organizacji i jest niezależna od roli serwerowej powyżej.", - "column_organizations": "Organizacje", - "provider": "Dostawca", - "provider_local": "Lokalny", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Zarządzane przez dostawcę tożsamości", - "provider_managed_hint": "To konto jest zarządzane przez zewnętrznego dostawcę tożsamości (LDAP/AD lub SSO). Hasło i rola są kontrolowane przez dostawcę i nie można ich tu zmienić.", - "no_orgs_short": "—", - "org_count_one": "{count} organizacja", - "org_count_many": "{count} organizacji", - "all_orgs_assigned": "Użytkownik jest już członkiem każdej organizacji." - }, - "folders": { - "title": "Foldery", - "create": "Utwórz folder", - "edit": "Edytuj folder", - "delete": "Usuń folder", - "name": "Nazwa folderu", - "name_placeholder": "Wprowadź nazwę folderu", - "name_required": "Nazwa folderu jest wymagana", - "name_too_long": "Nazwa folderu jest za długa (max 50 znaków)", - "color": "Kolor", - "icon": "Ikona", - "not_found": "Nie znaleziono folderu", - "delete_confirm": "Czy na pewno chcesz usunąć ten folder? Urządzenia zostaną odłączone.", - "delete_success": "Folder został usunięty", - "created": "Folder został utworzony", - "updated": "Folder został zaktualizowany", - "no_devices_selected": "Nie wybrano urządzeń", - "devices_moved": "Urządzenia zostały przeniesione", - "device_assigned": "Urządzenie przypisane do folderu", - "unassigned": "Nieprzypisane", - "all_devices": "Wszystkie urządzenia", - "drag_hint": "Przeciągnij urządzenia do folderów, aby je zorganizować", - "move_to": "Przenieś do", - "toggle_sidebar": "Zwiń/rozwiń panel" + "hardware": { + "cpu": "Procesor", + "memory": "Pamięć", + "disk": "Dysk", + "os": "System operacyjny", + "hostname": "Nazwa hosta", + "uptime": "Czas pracy", + "load_avg": "Średnie obciążenie", + "network": "Sieć", + "no_data": "Brak danych o sprzęcie", + "title": "Informacje sprzętowe", + "gpu": "Karta graficzna" }, + "no_signal_tooltip": "Klient niedawno kontaktował API, ale nie jest zarejestrowany na serwerze sygnałowym (UDP :21116). Uruchom ponownie klienta po migracji serwera.", + "per_page": "Na stronę" + }, + "keys": { + "title": "Klucze serwera", + "subtitle": "Klucz publiczny i konfiguracja dla klientów RustDesk", + "public_key": "Klucz publiczny", + "qr_code": "Kod QR", + "server_info": "Informacje o serwerze", + "download": "Pobierz klucz", + "show_qr": "Pokaż QR", + "qr_hint": "Zeskanuj kod QR aplikacją mobilną RustDesk", + "no_key": "Nie znaleziono klucza publicznego", + "no_key_to_copy": "Brak klucza do skopiowania", + "no_qr": "Kod QR niedostępny", + "download_success": "Plik klucza pobrany", + "not_found": "Nie znaleziono klucza", + "api_not_found": "Nie znaleziono klucza API" + }, + "settings": { + "title": "Ustawienia", + "subtitle": "Konfiguracja konsoli i ustawienia konta", + "tab_general": "Ogólne", + "tab_server": "Serwer", + "tab_branding": "Wygląd", + "tab_backup": "Kopia zapasowa", + "tab_auth": "Uwierzytelnianie", + "tab_advanced": "Zaawansowane", + "connection_mode_title": "Strategia połączeń", + "connection_mode_desc": "Określa, jak klienci RustDesk łączą się ze sobą: bezpośrednio P2P (hole punch) gdy to możliwe, lub zawsze przez relay.", + "connection_mode_label": "Domyślny tryb połączenia", + "connection_mode_p2p_first": "P2P najpierw (zalecane) — próba połączenia bezpośredniego, potem relay", + "connection_mode_relay_only": "Tylko relay — wszystkie sesje przez serwer pośredniczący", + "connection_mode_advanced": "Opcje zaawansowane", + "connection_mode_fallback_ms": "Limit czasu P2P przed relay (ms)", + "connection_mode_same_nat_relay": "Wymuszaj relay, gdy obie strony mają ten sam publiczny IP (NAT hairpin)", + "connection_mode_network_hint": "P2P wymaga UDP 21116 między klientami. Na serwerze: sygnał TCP/UDP 21116, relay 21117, test NAT 21115. Klient web zawsze używa relay.", + "connection_mode_save": "Zapisz", + "connection_mode_save_restart": "Zapisz i uruchom serwer ponownie", + "connection_mode_saved": "Tryb połączenia zapisany", + "connection_mode_restart_started": "Restart serwera zainicjowany", + "connection_mode_restart_failed": "Restart serwera nie powiódł się", + "connection_mode_not_configurable": "Nie można zmienić trybu na tym wdrożeniu (brak unit systemd lub docker-compose)", + "connection_mode_compose_error": "Nie znaleziono sekcji environment serwera w docker-compose.yml", + "connection_mode_source_saved": "Zapisano w", + "connection_mode_source_defaults": "Domyślne ustawienia serwera (brak zapisu z panelu)", + "connection_mode_runtime": "Aktywny serwer", + "advanced_title": "Pliki konfiguracyjne", + "advanced_desc": "Edytuj pliki konfiguracyjne serwera bezpośrednio w panelu. Zmiany mogą wymagać ponownego uruchomienia usług. Przed zapisem tworzona jest kopia zapasowa poprzedniej wersji.", + "advanced_warning": "Te pliki zawierają dane wrażliwe (klucze API, hasła do bazy, sekrety sesji). Edytuj tylko, jeśli wiesz, co robisz. Błędna składnia może uniemożliwić start serwera.", + "advanced_files_label": "Pliki", + "advanced_select_file": "Wybierz plik z listy, aby wyświetlić lub edytować jego zawartość.", + "advanced_reload": "Odśwież", + "advanced_save": "Zapisz plik", + "advanced_apply_restart": "Zastosuj (restart usługi)", + "advanced_saved": "Plik konfiguracyjny zapisany", + "advanced_restart_after_save": "Konfiguracja zapisana. Uruchomić ponownie powiązaną usługę, aby zmiany weszły w życie?", + "advanced_restart_confirm": "Uruchomić ponownie powiązane usługi BetterDesk? Aktywne połączenia mogą na chwilę zostać przerwane.", + "advanced_restart_console_confirm": "Uruchomić ponownie usługę konsoli web? Sesja w przeglądarce na chwilę się rozłączy; strona odświeży się po powrocie konsoli.", + "advanced_restart_started": "Restart usługi został zainicjowany", + "advanced_restart_done": "Konsola uruchomiona ponownie — przeładowanie strony…", + "advanced_restart_polling": "Oczekiwanie na powrót konsoli…", + "advanced_restart_timeout": "Restart wysłany, ale konsola nie odpowiedziała na czas. Sprawdź logi systemd/NSSM i odśwież stronę ręcznie.", + "advanced_restart_failed": "Restart usługi nie powiódł się (brak uprawnień lub usługa nie jest zainstalowana)", + "advanced_save_confirm": "Zapisać zmiany w tym pliku? Zostanie utworzona kopia zapasowa poprzedniej wersji.", + "advanced_unsaved_confirm": "Masz niezapisane zmiany. Odrzucić je?", + "advanced_no_files": "Brak dostępnych plików konfiguracyjnych w tym systemie.", + "advanced_readonly": "tylko odczyt", + "advanced_missing": "brak", + "advanced_new_file": "Nowy plik (zostanie utworzony po zapisie)", + "advanced_new_file_hint": "Nowy plik — dodaj treść i zapisz", + "advanced_backup_created": "utworzono kopię zapasową", + "advanced_restart_console": "Uruchom ponownie usługę konsoli (np. systemctl restart betterdesk-console), aby zmiany w .env weszły w życie.", + "advanced_restart_goserver": "Uruchom ponownie serwer Go BetterDesk, aby przeładować listę blokad.", + "advanced_restart_systemd": "Po edycji unitów systemd wykonaj: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Uruchom ponownie odpowiednią usługę, aby zmiany weszły w życie.", + "advanced_error_unknown": "Nieznany plik konfiguracyjny", + "advanced_error_not_found": "Plik nie istnieje", + "advanced_error_not_file": "Ścieżka nie wskazuje na zwykły plik", + "advanced_error_too_large": "Plik przekracza maksymalny rozmiar edycji (512 KB)", + "advanced_error_binary": "Plików binarnych nie można edytować w panelu", + "advanced_error_invalid": "Nieprawidłowa zawartość pliku", + "advanced_error_not_writable": "Plik nie jest zapisywalny przez proces konsoli", + "advanced_file_console-env": "Środowisko konsoli (.env)", + "advanced_file_console-env-local": "Nadpisania konsoli (.env.local)", + "advanced_file_go-blocklist": "Lista blokad serwera Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (jednostka usługi)", + "advanced_file_systemd-server": "systemd: betterdesk-server (jednostka usługi)", + "advanced_file_console-session-secret": "Sekret sesji konsoli (.session_secret)", + "advanced_file_go-audit-log": "Dziennik audytu serwera Go (audit.jsonl)", + "advanced_file_build-env": "Środowisko budowania agenta (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (konfiguracja)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkiestracja)", + "advanced_restart_none": "Ten plik nie wymaga restartu usługi.", + "enrollment_title": "Rejestracja urządzeń (RustDesk)", + "enrollment_desc": "Określa, jak nowi klienci RustDesk rejestrują się na serwerze i jak operator zatwierdza żądania na stronie Żądań rejestracji.", + "enrollment_require_approval": "Wymagaj akceptacji operatora (tryb Zarządzany)", + "enrollment_require_approval_hint": "Po włączeniu nieznani klienci trafiają do kolejki do momentu zatwierdzenia w Żądaniach rejestracji.", + "enrollment_rich_approve": "Pełny formularz przy akceptacji (nazwa, folder, grupy, tagi)", + "enrollment_rich_approve_hint": "Pokazuje rozbudowany dialog przy zatwierdzaniu rejestracji enrollment i LAN.", + "enrollment_tag_picker": "Wybór tagów z listy istniejących", + "enrollment_tag_picker_hint": "Umożliwia wybór tagów z listy używanej na stronie Urządzenia zamiast samego wpisywania.", + "enrollment_open_requests": "Otwórz żądania rejestracji", + "enrollment_pending_count": "{count} oczekujących żądań rejestracji", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Skonfiguruj zewnętrzne uwierzytelnianie przez LDAP lub Active Directory. Użytkownicy będą mogli logować się za pomocą poświadczeń domenowych.", + "ldap_enabled": "Włącz uwierzytelnianie LDAP", + "ldap_enabled_hint": "Po włączeniu użytkownicy mogą logować się za pomocą poświadczeń LDAP/AD. Konta lokalne nadal działają jako awaryjne.", + "ldap_connection": "Połączenie z serwerem", + "ldap_host": "Host", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Pomiń weryfikację TLS", + "ldap_timeout": "Timeout połączenia (s)", + "ldap_timeout_hint": "Czas oczekiwania na odpowiedź serwera LDAP w sekundach", + "ldap_bind_mode": "Tryb wiązania", + "ldap_direct_bind": "Bezpośrednie wiązanie", + "ldap_direct_bind_hint": "Wiązanie bezpośrednio za pomocą szablonu DN zamiast konta serwisowego do wyszukiwania.", + "ldap_bind_dn": "Bind DN (konto serwisowe)", + "ldap_bind_dn_hint": "Distinguished Name konta serwisowego tylko do odczytu, używanego do wyszukiwania użytkowników.", + "ldap_bind_password": "Hasło Bind", + "ldap_base_dn": "Base DN", + "ldap_base_dn_hint": "Baza wyszukiwania użytkowników, np. dc=example,dc=com", + "ldap_user_filter": "Filtr użytkownika", + "ldap_user_filter_hint": "Filtr LDAP do wyszukiwania użytkowników. Użyj {{username}} jako placeholder. Domyślnie: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Szablon DN bezpośredniego wiązania", + "ldap_direct_bind_dn_hint": "Szablon DN do bezpośredniego wiązania. Użyj {{username}} jako placeholder, np. uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Atrybuty użytkownika", + "ldap_attr_id": "Atrybut nazwy użytkownika", + "ldap_attr_email": "Atrybut e-mail", + "ldap_attr_name": "Atrybut nazwy wyświetlanej", + "ldap_group_mapping": "Mapowanie grup → ról", + "ldap_group_base_dn": "Base DN grup", + "ldap_group_base_dn_hint": "Pozostaw puste, aby użyć głównego Base DN", + "ldap_group_filter": "Filtr grup", + "ldap_group_attr_name": "Atrybut nazwy grupy", + "ldap_default_role": "Domyślna rola", + "ldap_default_role_hint": "Rola przypisywana użytkownikom, których grupy LDAP nie pasują do żadnego mapowania", + "ldap_role_viewer": "Przeglądający", + "ldap_role_operator": "Operator", + "ldap_role_admin": "Administrator", + "ldap_group_role_map": "Mapa grup → ról", + "ldap_group_role_map_hint": "Mapuj grupy LDAP na role BetterDesk. Format: GroupDN=rola oddzielone | (pipe). Przykład: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Testuj połączenie", + "ldap_testing": "Testowanie...", + "ldap_test_success": "Połączenie pomyślne! Serwer LDAP jest osiągalny i poświadczenia bind są prawidłowe.", + "ldap_test_failed": "Połączenie nie powiodło się", + "ldap_save": "Zapisz konfigurację LDAP", + "ldap_saved": "Konfiguracja LDAP została zapisana pomyślnie", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfiguracja Single Sign-On przez dostawcę OpenID Connect (Azure AD, Okta, Google, Keycloak itp.).", + "oidc_enabled": "Włącz uwierzytelnianie OIDC", + "oidc_enabled_hint": "Pozwól użytkownikom logować się przez zewnętrznego dostawcę tożsamości", + "oidc_provider": "Dostawca tożsamości", + "oidc_display_name": "Tekst na przycisku", + "oidc_display_name_hint": "Tekst wyświetlany na przycisku logowania (np. Azure AD, Okta)", + "oidc_issuer_url": "URL wystawcy", + "oidc_issuer_url_hint": "URL wystawcy OpenID Connect (odkrywanie będzie automatyczne)", + "oidc_client_id": "ID klienta", + "oidc_client_secret": "Sekret klienta", + "oidc_redirect_url": "URL przekierowania (Callback)", + "oidc_redirect_url_hint": "Musi dokładnie odpowiadać konfiguracji w dostawcy. Zwykle: http(s)://twoj-serwer:21114/api/auth/oidc/callback", + "oidc_scopes": "Zakresy", + "oidc_use_pkce": "Użyj PKCE (zalecane)", + "oidc_auto_discovery": "Auto-odkrywanie", + "oidc_allow_signup": "Automatyczne tworzenie użytkowników", + "oidc_manual_endpoints": "Ręczne adresy URL endpointów", + "oidc_authorization_url": "Endpoint autoryzacji", + "oidc_token_url": "Endpoint tokenów", + "oidc_userinfo_url": "Endpoint informacji o użytkowniku", + "oidc_claim_mapping": "Mapowanie pól (claims)", + "oidc_claim_username": "Pole nazwy użytkownika", + "oidc_claim_email": "Pole e-mail", + "oidc_claim_name": "Pole wyświetlanej nazwy", + "oidc_claim_groups": "Pole grup", + "oidc_role_mapping": "Mapowanie ról", + "oidc_default_role": "Domyślna rola", + "oidc_group_role_map": "Mapowanie grupa → rola", + "oidc_group_role_map_hint": "Jedno mapowanie na linię: nazwa_grupy=rola (np. admins=admin, operators=operator)", + "oidc_test_discovery": "Test odkrywania", + "oidc_testing": "Testowanie...", + "oidc_test_success": "Odkrywanie powiodło się! Endpointy rozwiązane.", + "oidc_test_failed": "Odkrywanie nie powiodło się", + "oidc_issuer_required": "URL wystawcy jest wymagany do testu odkrywania", + "oidc_save": "Zapisz konfigurację OIDC", + "oidc_saved": "Konfiguracja OIDC została zapisana pomyślnie", + "language": "Język", + "change_password": "Zmiana hasła", + "password_desc": "Zaktualizuj hasło do konta", + "current_password": "Obecne hasło", + "new_password": "Nowe hasło", + "confirm_password": "Potwierdź hasło", + "save_password": "Zmień hasło", + "password_changed": "Hasło zostało zmienione", + "fill_all_fields": "Wypełnij wszystkie pola", + "passwords_not_match": "Hasła nie są identyczne", + "password_requirements": "Wymagania dotyczące hasła", + "password_requirements_not_met": "Hasło nie spełnia wymagań", + "req_length": "Minimum 8 znaków", + "req_uppercase": "Co najmniej jedna wielka litera", + "req_lowercase": "Co najmniej jedna mała litera", + "req_number": "Co najmniej jedna cyfra", + "server_info": "Informacje o serwerze", + "version": "Wersja", + "database": "Baza danych", + "uptime": "Czas działania", + "audit_log": "Dziennik audytu", + "audit_desc": "Ostatnia aktywność w konsoli", + "no_audit_logs": "Brak wpisów w dzienniku", + "tutorials_title": "Samouczki i przewodniki", + "tutorials_desc": "Zarządzaj przewodnikami i nakładkami pomocy wyświetlanymi w konsoli", + "tutorials_enabled": "Włącz samouczki", + "tutorials_enabled_hint": "Po wyłączeniu samouczki nie będą uruchamiane automatycznie, a przycisk pomocy zostanie ukryty", + "tutorials_reset_hint": "Oznacz wszystkie samouczki jako niewyświetlone, aby mogły zostać pokazane ponownie", + "tutorials_enabled_toast": "Samouczki włączone", + "tutorials_disabled_toast": "Samouczki wyłączone", + "tutorials_reset_toast": "Wszystkie samouczki zostały zresetowane", + "backend_title": "Backend serwera", + "backend_desc": "Wybierz backend serwera do zarządzania urządzeniami oraz usług sygnalizacji/relay.", + "backend_original": "Oryginalny", + "backend_enhanced": "Rozszerzony", + "backend_rustdesk_desc": "Standardowe serwery sygnalizacji i relay RustDesk (hbbs + hbbr). Podstawowe REST API z ograniczonymi endpointami.", + "backend_betterdesk_desc": "Rozszerzony serwer Go z pełnym REST API, uwierzytelnianiem JWT, bloklistą, tagami, zdarzeniami WebSocket w czasie rzeczywistym i logowaniem audytu.", + "backend_feature_signal": "Serwer sygnalizacji (rejestracja ID)", + "backend_feature_relay": "Serwer relay (przekaźnik połączeń)", + "backend_feature_basic_api": "Podstawowe REST API", + "backend_feature_full_api": "Pełne REST API (34+ endpointów)", + "backend_feature_jwt": "Uwierzytelnianie JWT i TOTP 2FA", + "backend_feature_blocklist": "Zarządzanie bloklistą IP/ID", + "backend_feature_tags": "Tagi i grupowanie urządzeń", + "backend_feature_audit": "Logowanie zdarzeń audytu", + "backend_feature_websocket": "Zdarzenia WebSocket w czasie rzeczywistym", + "backend_connection": "Połączenie", + "backend_api_url": "Adres API", + "backend_test": "Testuj połączenie", + "backend_testing": "Testowanie...", + "backend_save": "Zastosuj backend", + "backend_saved": "Backend serwera został zmieniony. Zarządzanie urządzeniami będzie teraz obsługiwane przez nowy backend.", + "backend_save_failed": "Nie udało się przełączyć backendu serwera", + "backend_test_success": "Połączenie udane! Serwer jest dostępny.", + "backend_test_failed": "Połączenie nieudane. Serwer jest niedostępny.", + "backend_confirm_switch": "Czy na pewno chcesz przełączyć backend serwera? Zmieni to sposób zarządzania urządzeniami.", + "backend_unreachable": "Nie można przełączyć: docelowy serwer jest niedostępny. Najpierw uruchom serwer.", + "invalid_backend": "Nieprawidłowy wybór backendu. Wybierz 'rustdesk' lub 'betterdesk'.", + "backend_status_running": "Połączono", + "backend_status_unreachable": "Niedostępny", + "backend_status_error": "Błąd", + "backend_status_unknown": "Nieznany", + "totp_title": "Uwierzytelnianie dwuskładnikowe", + "totp_desc": "Dodaj dodatkową warstwę zabezpieczeń za pomocą aplikacji TOTP (Google Authenticator, Microsoft Authenticator, Authy itp.)", + "totp_enabled": "2FA włączone", + "totp_enabled_desc": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym.", + "totp_disabled": "2FA wyłączone", + "totp_disabled_desc": "Włącz uwierzytelnianie dwuskładnikowe dla dodatkowego bezpieczeństwa konta.", + "totp_setup": "Włącz 2FA", + "totp_disable": "Wyłącz 2FA", + "totp_step1": "Zainstaluj aplikację uwierzytelniającą na telefonie", + "totp_step2": "Zeskanuj poniższy kod QR", + "totp_step3": "Wprowadź 6-cyfrowy kod, aby zweryfikować", + "totp_manual_key": "Klucz ręczny", + "totp_enter_code": "Wprowadź kod weryfikacyjny", + "totp_verify_enable": "Zweryfikuj i włącz", + "totp_enabled_success": "Uwierzytelnianie dwuskładnikowe włączone!", + "totp_recovery_warning": "Zapisz te kody odzyskiwania w bezpiecznym miejscu. Każdy kod może być użyty tylko raz. Jeśli stracisz dostęp do aplikacji uwierzytelniającej, możesz użyć tych kodów do zalogowania.", + "totp_done": "Gotowe", + "totp_disable_warning": "Wyłączenie uwierzytelniania dwuskładnikowego zmniejszy bezpieczeństwo konta. Wprowadź hasło, aby potwierdzić.", + "totp_disabled_success": "Uwierzytelnianie dwuskładnikowe zostało wyłączone." + }, + "audit": { + "time": "Czas", + "user": "Użytkownik", + "action": "Akcja", + "details": "Szczegóły", + "action_login": "Logowanie", + "action_login_failed": "Nieudane logowanie", + "action_logout": "Wylogowanie", + "action_password_change": "Zmiana hasła", + "action_2fa_enable": "Włączono 2FA", + "action_2fa_disable": "Wyłączono 2FA", + "action_user_create": "Utworzono użytkownika", + "action_user_update": "Zaktualizowano użytkownika", + "action_user_delete": "Usunięto użytkownika", + "action_settings_update": "Zaktualizowano ustawienia", + "action_device_ban": "Zbanowano urządzenie", + "action_device_unban": "Odbanowano urządzenie", + "action_device_delete": "Usunięto urządzenie" + }, + "generator": { + "title": "Generator Agenta", + "subtitle": "Twórz oznakowane instalatory agenta BetterDesk dla użytkowników końcowych", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Wczesna funkcja — generator pakietów agenta jest w aktywnym rozwoju.", + "bundles_title": "Pakiety agenta", + "new_bundle": "Nowy pakiet", + "editor_title": "Edytor pakietu", + "empty_state": "Wybierz pakiet po lewej stronie lub utwórz nowy.", + "loading": "Ładowanie…", + "no_bundles": "Brak pakietów. Utwórz pierwszy.", + "bundle_name": "Nazwa pakietu", + "bundle_name_hint": "Etykieta wewnętrzna — nie jest pokazywana użytkownikom końcowym.", + "short_link": "Krótki link do pobrania", + "short_link_hint": "Fragment publicznego adresu (/d/…). Tylko małe litery, cyfry i myślniki (2–32 znaki). Uzupełniany z nazwy pakietu — skróć go dla łatwiejszego zapamiętania (np. acme).", + "connection_section": "Połączenie z serwerem", + "server_host": "Publiczny adres serwera", + "server_host_placeholder": "wsparcie.example.com lub 203.0.113.10", + "server_host_hint": "Domena lub publiczny adres IP, pod którym użytkownicy docierają do serwera BetterDesk. Port jest pobierany z konfiguracji konsoli.", + "use_https": "Używaj HTTPS / WSS (zalecane)", + "enrollment_token": "Rejestracja urządzenia", + "enrollment_token_pending": "Indywidualnie po zatwierdzeniu", + "enrollment_token_set": "Indywidualnie — zatwierdź w Rejestracjach", + "enrollment_token_hint": "Każda instalacja rejestruje się samodzielnie. Zatwierdzaj nowe urządzenia w panelu Rejestracje; serwer wydaje wtedy unikalny klucz dostępu dla każdego komputera.", + "enrollment_per_device": "Indywidualnie — zatwierdź w Rejestracjach", + "branding_section": "Branding", + "company_name": "Nazwa firmy / marki", + "short_text": "Krótki opis", + "contact_email": "E-mail kontaktowy", + "contact_phone": "Telefon kontaktowy", + "contact_url": "Strona internetowa", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG lub WebP. Maksymalnie 256 KB.", + "logo_clear": "Usuń logo", + "primary_color": "Kolor podstawowy", + "accent_color": "Kolor nagłówka", + "background_color": "Tło okna", + "surface_color": "Tło kart", + "text_color": "Kolor tekstu", + "text_muted_color": "Kolor tekstu drugorzędnego", + "status_ready_color": "Kolor wskaźnika gotowości", + "header_text_color": "Kolor tekstu nagłówka", + "default_lang": "Domyślny język", + "allow_unattended": "Zezwól na dostęp bez nadzoru", + "allow_unattended_hint": "Gdy włączone, agent pokazuje stałe hasło do dostępu operatora.", + "save": "Zapisz pakiet", + "revoke": "Wycofaj", + "unrevoke": "Przywróć", + "revoked": "Wycofany", + "preview_title": "Podgląd na żywo", + "preview_hint": "Przybliżony wygląd okna agenta widzianego przez użytkownika.", + "preview_default_name": "Wsparcie BetterDesk", + "preview_status_ready": "Gotowy", + "preview_id": "Twoje ID", + "preview_password": "Hasło", + "preview_chat": "Czat ze wsparciem", + "preview_settings": "Ustawienia (tylko admin)", + "preview_quit": "Zakończ (tylko admin)", + "download_link_title": "Link do pobrania", + "download_link_hint": "Udostępnij ten link użytkownikom — zobaczą oznakowaną stronę pobierania. Stare linki z losowym ID nadal działają po zmianie krótkiego linku.", + "open_portal": "Otwórz", + "created": "Pakiet utworzony", + "saved": "Pakiet zapisany", + "deleted": "Pakiet usunięty", + "revoked_ok": "Pakiet wycofany", + "unrevoked_ok": "Pakiet ponownie aktywny", + "link_copied": "Link skopiowany do schowka", + "copy_failed": "Nie udało się automatycznie skopiować — skopiuj ręcznie", + "unsaved_confirm": "Odrzucić niezapisane zmiany?", + "confirm_revoke": "Wycofać ten pakiet? Link do pobrania przestanie działać.", + "confirm_unrevoke": "Ponownie aktywować ten pakiet?", + "confirm_delete": "Trwale usunąć ten pakiet? Tej operacji nie można cofnąć.", + "builds_title": "Buildy klienta", + "builds_hint": "Instalatory kompilowane na tym serwerze dla każdej platformy. Przebuduj po naprawie toolchaina lub aktualizacji źródeł agenta.", + "builds_loading": "Ładowanie statusu buildów…", + "builds_empty": "Brak buildów w kolejce — zapisz pakiet lub kliknij Przebuduj wszystkie.", + "rebuild_all": "Przebuduj wszystkie", + "rebuilding_all": "Kolejkowanie buildów…", + "rebuild_queued": "Wszystkie platformy dodane do kolejki", + "rebuild_confirm": "Przebudować instalatory dla wszystkich platform? Gotowe artefakty zostaną zastąpione.", + "build_status_ready": "Gotowy", + "build_status_pending": "W kolejce", + "build_status_building": "Budowanie", + "build_status_failed": "Nieudany", + "builds_summary": "{{ready}} gotowych · {{pending}} w kolejce · {{building}} budowanie · {{failed}} nieudanych", + "build_error_hint": "Błąd buildu", "errors": { - "forbidden_title": "Brak dostępu", - "forbidden_message": "Nie masz uprawnień do tego zasobu.", - "not_found_title": "Nie znaleziono strony", - "not_found_message": "Strona, której szukasz, nie istnieje lub została przeniesiona.", - "server_error_title": "Błąd serwera", - "server_error_message": "Coś poszło nie tak. Spróbuj ponownie później.", - "go_home": "Strona główna", - "try_again": "Spróbuj ponownie", - "load_devices_failed": "Nie udało się załadować urządzeń", - "load_key_failed": "Nie udało się załadować klucza", - "load_qr_failed": "Nie udało się załadować kodu QR", - "load_audit_failed": "Nie udało się załadować dziennika", - "load_users_failed": "Nie udało się załadować użytkowników", - "load_folders_failed": "Nie udało się załadować folderów", - "download_failed": "Pobieranie nie powiodło się", - "logout_failed": "Wylogowanie nie powiodło się", - "password_change_failed": "Nie udało się zmienić hasła", - "language_change_failed": "Nie udało się zmienić języka", - "ban_failed": "Nie udało się zablokować urządzenia", - "unban_failed": "Nie udało się odblokować urządzenia", - "delete_failed": "Nie udało się usunąć urządzenia", - "change_id_failed": "Nie udało się zmienić ID urządzenia", - "bulk_delete_failed": "Nie udało się usunąć urządzeń", - "sync_failed": "Nie udało się zsynchronizować statusu", - "error": "Błąd", - "not_found": "Nie znaleziono", - "server_error": "Błąd serwera", - "load_device_failed": "Nie udało się załadować urządzenia", - "load_orgs_failed": "Nie udało się załadować organizacji" + "validation_failed": "Walidacja nie powiodła się", + "name_required": "Nazwa pakietu jest wymagana", + "company_name_required": "Nazwa firmy jest wymagana", + "logo_invalid": "Logo musi być prawidłowym plikiem graficznym", + "logo_too_large": "Logo może mieć maks. 256 KB", + "logo_read_failed": "Nie udało się odczytać pliku z logo", + "primary_color_invalid": "Kolor podstawowy musi być wartością hex (np. #2563eb)", + "accent_color_invalid": "Kolor nagłówka musi być wartością hex (np. #1e293b)", + "contact_url_invalid": "Strona kontaktowa musi być prawidłowym URL", + "server_host_required": "Publiczny adres serwera jest wymagany", + "server_host_invalid": "Podaj prawidłową domenę lub adres IPv4", + "token_failed": "Nie udało się wygenerować tokenu rejestracji — sprawdź połączenie z serwerem", + "rebuild_revoked": "Nie można przebudować wycofanego pakietu — najpierw go przywróć", + "slug_invalid": "Krótki link może zawierać tylko małe litery, cyfry i myślniki", + "slug_too_short": "Krótki link musi mieć co najmniej 2 znaki", + "slug_too_long": "Krótki link może mieć maksymalnie 32 znaki", + "slug_taken": "Ten krótki link jest już używany przez inny pakiet" }, - "remote": { - "title": "Pulpit Zdalny", - "connecting": "Łączenie...", - "waiting_password": "Oczekiwanie na hasło", - "authenticating": "Uwierzytelnianie...", - "streaming": "Połączono", - "disconnected": "Rozłączono", - "error": "Błąd", - "status_idle": "Bezczynny", - "password_required": "Wymagane Hasło", - "enter_password_for": "Wprowadź hasło dla urządzenia", - "password_placeholder": "Hasło urządzenia", - "connect": "Połącz", - "reconnect": "Połącz ponownie", - "use_cdap_fallback": "Użyj podglądu CDAP", - "cdap_fallback_hint": "Otwiera lekki podgląd JPEG przez bd-signal/CDAP zamiast przekaźnika RustDesk. Przydatny, gdy urządzenie jest niedostępne przez relay, ale podłączone do kanału zarządzania.", - "disconnect": "Rozłącz", - "back_to_devices": "Powrót do Urządzeń", - "fullscreen": "Pełny ekran", - "toggle_audio": "Przełącz dźwięk", - "send_keys": "Wyślij klawisze", - "scale_mode": "Tryb skalowania", - "scale_fit": "Dopasuj do okna", - "scale_fill": "Wypełnij okno", - "scale_original": "Rozmiar oryginalny (1:1)", - "scale_stretch": "Rozciągnij", - "actions": "Akcje", - "lock_screen": "Zablokuj ekran", - "restart_remote": "Restartuj zdalne urządzenie", - "refresh_screen": "Odśwież ekran", - "clipboard_paste": "Wklej ze schowka", - "clipboard_empty": "Schowek jest pusty", - "clipboard_denied": "Odmowa dostępu do schowka. Wymagane HTTPS lub brak uprawnień.", - "block_input": "Blokuj wprowadzanie", - "display_settings": "Ustawienia wyświetlania", - "image_quality": "Jakość obrazu", - "quality_best": "Najlepsza (pełna jakość, 60fps)", - "quality_balanced": "Zrównoważony", - "quality_low": "Wydajność", - "codec": "Kodek wideo", - "codec_auto": "Automatyczny (zalecane)", - "show_cursor": "Pokaż zdalny kursor", - "lock_after_session": "Zablokuj po sesji", - "privacy_mode": "Tryb prywatności", - "disable_clipboard": "Wyłącz schowek", - "chat": "Czat", - "chat_placeholder": "Wpisz wiadomość...", - "record": "Nagrywaj ekran", - "view_only": "Tylko podgląd", - "pin_toolbar": "Przypnij pasek", - "monitors": "Monitory", - "select_monitor": "Wybierz monitor", - "quality_speed": "Szybkość (niska jakość, 60fps)", - "quality_quality": "Jakość (najlepsza, 30fps)", - "recording_started": "Nagrywanie rozpoczęte", - "recording_stopped": "Nagrywanie zakończone", - "download_recording": "Pobierz nagranie", - "e2e_encrypted": "Szyfrowanie end-to-end", - "e2e_key_exchange": "Nawiązywanie bezpiecznego kanału...", - "confirm_restart": "Czy na pewno chcesz zrestartować zdalne urządzenie?", - "webcodecs_not_supported": "Twoja przeglądarka nie obsługuje WebCodecs API. Użyj Chrome 94+ lub Edge 94+.", - "webcodecs_insecure_context": "WebCodecs niedostępne przez HTTP. Wideo używa dekodowania programowego. Dla lepszej wydajności użyj HTTPS.", - "webcodecs_fallback_active": "Aktywny programowy dekoder wideo (ograniczona wydajność)", - "click_to_start": "Kliknij, aby rozpocząć", - "autoplay_blocked": "Przeglądarka wymaga interakcji użytkownika, aby rozpocząć odtwarzanie wideo i audio.", - "start_playback": "Rozpocznij odtwarzanie", - "new_connection": "Nowe połączenie", - "device_id_placeholder": "Wpisz ID urządzenia", - "http_warning": "Tryb HTTP: ograniczony do dekodowania H.264 programowego (~15 FPS). Użyj HTTPS dla pełnej wydajności (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Transfer plików", - "file_upload": "Wyślij", - "file_download": "Pobierz", - "file_empty": "Ten folder jest pusty", - "file_loading": "Ładowanie...", - "file_timeout": "Zdalne urządzenie nie odpowiedziało. Transfer plików może nie być obsługiwany lub jest wyłączony na zdalnym komputerze.", - "file_transfers": "Transfery", - "file_complete": "Zakończono", - "file_error": "Transfer nieudany", - "file_show_hidden": "Pokaż ukryte pliki", - "file_new_folder": "Nowy folder", - "file_new_folder_prompt": "Podaj nazwę folderu:", - "file_parent": "Folder nadrzędny", - "file_root": "Katalog główny", - "file_rename": "Zmień nazwę", - "file_rename_prompt": "Podaj nową nazwę:", - "file_delete_confirm": "Czy na pewno chcesz usunąć ten element?", - "file_cancelled": "Transfer anulowany", - "2fa_required": "Wymagana weryfikacja 2FA", - "2fa_hint": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", - "2fa_invalid": "Wprowadź prawidłowy 6-cyfrowy kod", - "verify": "Weryfikuj" + "legacy_title": "Generator konfiguracji klienta", + "config_options": "Opcje konfiguracji", + "server_address": "Adres serwera", + "server_address_hint": "Domena lub adres IP serwera", + "custom_port": "Własny port", + "port_hint": "Zostaw puste dla domyślnego (21116)", + "relay_server": "Serwer relay", + "relay_placeholder": "Taki sam jak serwer ID jeśli puste", + "relay_hint": "Opcjonalnie: osobny adres serwera relay", + "include_key": "Dołącz klucz publiczny do konfiguracji", + "generate": "Generuj konfigurację", + "output": "Wygenerowana konfiguracja", + "usage_title": "Dane połączenia", + "generated": "Konfiguracja wygenerowana", + "server_required": "Adres serwera jest wymagany", + "nothing_to_copy": "Najpierw wygeneruj konfigurację", + "preview_help": "Poproś o pomoc" + }, + "download": { + "title": "Pobierz Agenta BetterDesk", + "choose_platform": "Wybierz platformę", + "choose_platform_hint": "Wybierz instalator odpowiadający Twojemu systemowi operacyjnemu.", + "download": "Pobierz", + "building": "Budowanie…", + "failed": "Budowanie nieudane", + "need_help": "Potrzebujesz pomocy?", + "powered_by": "Napędzane przez" + }, + "server": { + "port": "Port", + "api_port": "Port API", + "id_server": "Serwer ID", + "relay_server": "Serwer Relay", + "api_key": "Klucz API" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Zablokowany", + "running": "Działa", + "stopped": "Zatrzymany", + "unknown": "Nieznany", + "checking": "Sprawdzanie...", + "label": "Status", + "no_signal": "Brak sygnału" + }, + "actions": { + "refresh": "Odśwież", + "copy": "Kopiuj", + "connect": "Połącz", + "connect_desktop": "Połącz przez klienta desktop", + "remote_viewer": "Podgląd zdalny", + "cdap_viewer": "Podgląd CDAP (zrzuty)", + "web_remote": "Pulpit zdalny", + "details": "Szczegóły", + "edit": "Edytuj", + "delete": "Usuń", + "ban": "Zablokuj", + "unban": "Odblokuj", + "save": "Zapisz", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "close": "Zamknij", + "clear": "Wyczyść", + "ok": "OK", + "saved": "Zapisano pomyślnie", + "back": "Powrót", + "create": "Utwórz", + "dismiss": "Ukryj", + "view_all": "Zobacz wszystkie", + "add": "Dodaj", + "remove": "Usuń" + }, + "time": { + "just_now": "Przed chwilą", + "seconds_ago": "{count}s temu", + "minutes_ago": "{count}m temu", + "hours_ago": "{count}h temu", + "days_ago": "{count}d temu", + "day_mon": "Pon", + "day_tue": "Wt", + "day_wed": "Śr", + "day_thu": "Czw", + "day_fri": "Pt", + "day_sat": "Sob", + "day_sun": "Ndz" + }, + "users": { + "title": "Zarządzanie użytkownikami", + "subtitle": "Zarządzaj użytkownikami konsoli i uprawnieniami", + "add_user": "Dodaj użytkownika", + "edit_user": "Edytuj użytkownika", + "username": "Nazwa użytkownika", + "username_placeholder": "Wprowadź nazwę użytkownika", + "username_hint": "3-32 znaki, tylko litery, cyfry i podkreślenia", + "password": "Hasło", + "password_placeholder": "Wprowadź hasło", + "password_hint": "Minimum 8 znaków z dużymi literami, cyframi i symbolami", + "password_leave_empty": "Zostaw puste, aby zachować obecne", + "role": "Rola", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Obserwator", + "role_pro": "Pro (tylko API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Admin serwera", + "role_global_admin": "Admin globalny", + "role_hint": "To jest rola obowiązująca na poziomie całego serwera. Super Admin ma pełny dostęp. Admin serwera zarządza konfiguracją serwera i kluczami. Admin globalny zarządza użytkownikami, organizacjami i urządzeniami, ale nie może zmieniać konfiguracji serwera. Administrator jest równoważny Super Adminowi. Operatorzy zarządzają urządzeniami. Obserwatorzy mają dostęp tylko do odczytu. Pro aktywuje tryb Pro w kliencie RustDesk (tylko API). Role w poszczególnych organizacjach konfigurujesz osobno w sekcji Organizacje danego użytkownika.", + "user_groups": "Grupy użytkowników", + "user_groups_hint": "Grupy użytkowników mogą nadawać dostęp do wybranych grup urządzeń.", + "loading_user_groups": "Ładowanie grup użytkowników...", + "no_user_groups": "Brak dostępnych grup użytkowników", + "create_user_group": "Utwórz grupę", + "edit_user_group": "Edytuj grupę użytkowników", + "delete_user_group": "Usuń grupę użytkowników", + "delete_user_group_confirm": "Usunąć grupę użytkowników {name}? Członkowie stracą dostęp nadany przez tę grupę.", + "user_group_created": "Grupa użytkowników utworzona", + "user_group_updated": "Grupa użytkowników zaktualizowana", + "user_group_deleted": "Grupa użytkowników usunięta", + "user_group_not_found": "Nie znaleziono grupy użytkowników", + "group_name": "Nazwa grupy", + "group_name_placeholder": "Operatorzy", + "group_note": "Notatka", + "group_note_placeholder": "Opcjonalna notatka", + "group_name_required": "Nazwa grupy jest wymagana", + "group_members_count": "{count} członków", + "created": "Utworzono", + "last_login": "Ostatnie logowanie", + "never": "Nigdy", + "actions": "Akcje", + "create": "Utwórz użytkownika", + "edit": "Edytuj", + "reset_password": "Resetuj hasło", + "new_password": "Nowe hasło", + "delete_title": "Usuń użytkownika", + "delete_confirm": "Czy na pewno chcesz usunąć użytkownika {username}?", + "delete_success": "Użytkownik został usunięty", + "user_created": "Użytkownik został utworzony", + "user_updated": "Użytkownik został zaktualizowany", + "password_reset_success": "Hasło zostało zresetowane", + "empty_title": "Brak użytkowników", + "empty_text": "Dodaj użytkowników, aby zarządzać dostępem do konsoli", + "fill_required": "Wypełnij wszystkie wymagane pola", + "invalid_username": "Nazwa użytkownika musi mieć 3-32 znaki, tylko litery, cyfry i podkreślenia", + "username_exists": "Nazwa użytkownika już istnieje", + "weak_password": "Hasło jest zbyt słabe", + "password_too_short": "Hasło musi mieć co najmniej 8 znaków", + "invalid_role": "Nieprawidłowa rola", + "cannot_demote_self": "Nie możesz zdegradować samego siebie", + "cannot_delete_self": "Nie możesz usunąć własnego konta", + "last_admin": "Nie można usunąć ostatniego administratora", + "admin_only": "Ta funkcja jest dostępna tylko dla administratorów", + "password_required": "Hasło jest wymagane", + "not_found": "Nie znaleziono użytkownika", + "strength_weak": "Słabe", + "strength_medium": "Średnie", + "strength_strong": "Silne", + "security_tips_title": "Najlepsze praktyki bezpieczeństwa", + "tip_strong_passwords": "Używaj silnych, unikalnych haseł dla każdego użytkownika", + "tip_unique_accounts": "Twórz indywidualne konta dla każdej osoby", + "tip_viewer_role": "Używaj roli obserwatora dla użytkowników, którzy potrzebują tylko odczytu", + "tip_operator_role": "Używaj roli operatora dla użytkowników, którzy muszą zarządzać urządzeniami, ale nie użytkownikami", + "tip_audit_logs": "Regularnie przeglądaj dzienniki dla podejrzanej aktywności", + "organizations": "Organizacje", + "user_organizations": "Organizacje użytkownika {username}", + "no_organizations": "Użytkownik nie jest przypisany do żadnej organizacji", + "org_removed": "Przypisanie do organizacji usunięte", + "server_role_label": "Rola serwerowa", + "server_role_hint": "Określa, co użytkownik może robić w całej konsoli (dostęp do panelu, konfiguracja serwera, audyt itd.).", + "org_membership_section": "Członkostwo w organizacjach", + "org_membership_hint": "Użytkownik może należeć do wielu organizacji. Rola w organizacji obowiązuje tylko wewnątrz tej organizacji i jest niezależna od roli serwerowej powyżej.", + "column_organizations": "Organizacje", + "provider": "Dostawca", + "provider_local": "Lokalny", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Zarządzane przez dostawcę tożsamości", + "provider_managed_hint": "To konto jest zarządzane przez zewnętrznego dostawcę tożsamości (LDAP/AD lub SSO). Hasło i rola są kontrolowane przez dostawcę i nie można ich tu zmienić.", + "no_orgs_short": "—", + "org_count_one": "{count} organizacja", + "org_count_many": "{count} organizacji", + "all_orgs_assigned": "Użytkownik jest już członkiem każdej organizacji." + }, + "folders": { + "title": "Foldery", + "create": "Utwórz folder", + "edit": "Edytuj folder", + "delete": "Usuń folder", + "name": "Nazwa folderu", + "name_placeholder": "Wprowadź nazwę folderu", + "name_required": "Nazwa folderu jest wymagana", + "name_too_long": "Nazwa folderu jest za długa (max 50 znaków)", + "color": "Kolor", + "icon": "Ikona", + "not_found": "Nie znaleziono folderu", + "delete_confirm": "Czy na pewno chcesz usunąć ten folder? Urządzenia zostaną odłączone.", + "delete_success": "Folder został usunięty", + "created": "Folder został utworzony", + "updated": "Folder został zaktualizowany", + "no_devices_selected": "Nie wybrano urządzeń", + "devices_moved": "Urządzenia zostały przeniesione", + "device_assigned": "Urządzenie przypisane do folderu", + "unassigned": "Nieprzypisane", + "all_devices": "Wszystkie urządzenia", + "drag_hint": "Przeciągnij urządzenia do folderów, aby je zorganizować", + "move_to": "Przenieś do", + "toggle_sidebar": "Zwiń/rozwiń panel" + }, + "errors": { + "forbidden_title": "Brak dostępu", + "forbidden_message": "Nie masz uprawnień do tego zasobu.", + "not_found_title": "Nie znaleziono strony", + "not_found_message": "Strona, której szukasz, nie istnieje lub została przeniesiona.", + "server_error_title": "Błąd serwera", + "server_error_message": "Coś poszło nie tak. Spróbuj ponownie później.", + "go_home": "Strona główna", + "try_again": "Spróbuj ponownie", + "load_devices_failed": "Nie udało się załadować urządzeń", + "load_key_failed": "Nie udało się załadować klucza", + "load_qr_failed": "Nie udało się załadować kodu QR", + "load_audit_failed": "Nie udało się załadować dziennika", + "load_users_failed": "Nie udało się załadować użytkowników", + "load_folders_failed": "Nie udało się załadować folderów", + "download_failed": "Pobieranie nie powiodło się", + "logout_failed": "Wylogowanie nie powiodło się", + "password_change_failed": "Nie udało się zmienić hasła", + "language_change_failed": "Nie udało się zmienić języka", + "ban_failed": "Nie udało się zablokować urządzenia", + "unban_failed": "Nie udało się odblokować urządzenia", + "delete_failed": "Nie udało się usunąć urządzenia", + "change_id_failed": "Nie udało się zmienić ID urządzenia", + "bulk_delete_failed": "Nie udało się usunąć urządzeń", + "sync_failed": "Nie udało się zsynchronizować statusu", + "error": "Błąd", + "not_found": "Nie znaleziono", + "server_error": "Błąd serwera", + "load_device_failed": "Nie udało się załadować urządzenia", + "load_orgs_failed": "Nie udało się załadować organizacji" + }, + "remote": { + "title": "Pulpit Zdalny", + "connecting": "Łączenie...", + "waiting_password": "Oczekiwanie na hasło", + "authenticating": "Uwierzytelnianie...", + "streaming": "Połączono", + "disconnected": "Rozłączono", + "error": "Błąd", + "status_idle": "Bezczynny", + "password_required": "Wymagane Hasło", + "enter_password_for": "Wprowadź hasło dla urządzenia", + "password_placeholder": "Hasło urządzenia", + "connect": "Połącz", + "reconnect": "Połącz ponownie", + "use_cdap_fallback": "Użyj podglądu CDAP", + "cdap_fallback_hint": "Otwiera lekki podgląd JPEG przez bd-signal/CDAP zamiast przekaźnika RustDesk. Przydatny, gdy urządzenie jest niedostępne przez relay, ale podłączone do kanału zarządzania.", + "disconnect": "Rozłącz", + "back_to_devices": "Powrót do Urządzeń", + "fullscreen": "Pełny ekran", + "toggle_audio": "Przełącz dźwięk", + "send_keys": "Wyślij klawisze", + "scale_mode": "Tryb skalowania", + "scale_fit": "Dopasuj do okna", + "scale_fill": "Wypełnij okno", + "scale_original": "Rozmiar oryginalny (1:1)", + "scale_stretch": "Rozciągnij", + "actions": "Akcje", + "lock_screen": "Zablokuj ekran", + "restart_remote": "Restartuj zdalne urządzenie", + "refresh_screen": "Odśwież ekran", + "clipboard_paste": "Wklej ze schowka", + "clipboard_empty": "Schowek jest pusty", + "clipboard_denied": "Odmowa dostępu do schowka. Wymagane HTTPS lub brak uprawnień.", + "block_input": "Blokuj wprowadzanie", + "display_settings": "Ustawienia wyświetlania", + "image_quality": "Jakość obrazu", + "quality_best": "Najlepsza (pełna jakość, 60fps)", + "quality_balanced": "Zrównoważony", + "quality_low": "Wydajność", + "codec": "Kodek wideo", + "codec_auto": "Automatyczny (zalecane)", + "show_cursor": "Pokaż zdalny kursor", + "lock_after_session": "Zablokuj po sesji", + "privacy_mode": "Tryb prywatności", + "disable_clipboard": "Wyłącz schowek", + "chat": "Czat", + "chat_placeholder": "Wpisz wiadomość...", + "record": "Nagrywaj ekran", + "view_only": "Tylko podgląd", + "pin_toolbar": "Przypnij pasek", + "monitors": "Monitory", + "select_monitor": "Wybierz monitor", + "quality_speed": "Szybkość (niska jakość, 60fps)", + "quality_quality": "Jakość (najlepsza, 30fps)", + "recording_started": "Nagrywanie rozpoczęte", + "recording_stopped": "Nagrywanie zakończone", + "download_recording": "Pobierz nagranie", + "e2e_encrypted": "Szyfrowanie end-to-end", + "e2e_key_exchange": "Nawiązywanie bezpiecznego kanału...", + "confirm_restart": "Czy na pewno chcesz zrestartować zdalne urządzenie?", + "webcodecs_not_supported": "Twoja przeglądarka nie obsługuje WebCodecs API. Użyj Chrome 94+ lub Edge 94+.", + "webcodecs_insecure_context": "WebCodecs niedostępne przez HTTP. Wideo używa dekodowania programowego. Dla lepszej wydajności użyj HTTPS.", + "webcodecs_fallback_active": "Aktywny programowy dekoder wideo (ograniczona wydajność)", + "click_to_start": "Kliknij, aby rozpocząć", + "autoplay_blocked": "Przeglądarka wymaga interakcji użytkownika, aby rozpocząć odtwarzanie wideo i audio.", + "start_playback": "Rozpocznij odtwarzanie", + "new_connection": "Nowe połączenie", + "device_id_placeholder": "Wpisz ID urządzenia", + "http_warning": "Tryb HTTP: ograniczony do dekodowania H.264 programowego (~15 FPS). Użyj HTTPS dla pełnej wydajności (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Transfer plików", + "file_upload": "Wyślij", + "file_download": "Pobierz", + "file_empty": "Ten folder jest pusty", + "file_loading": "Ładowanie...", + "file_timeout": "Zdalne urządzenie nie odpowiedziało. Transfer plików może nie być obsługiwany lub jest wyłączony na zdalnym komputerze.", + "file_transfers": "Transfery", + "file_complete": "Zakończono", + "file_error": "Transfer nieudany", + "file_show_hidden": "Pokaż ukryte pliki", + "file_new_folder": "Nowy folder", + "file_new_folder_prompt": "Podaj nazwę folderu:", + "file_parent": "Folder nadrzędny", + "file_root": "Katalog główny", + "file_rename": "Zmień nazwę", + "file_rename_prompt": "Podaj nową nazwę:", + "file_delete_confirm": "Czy na pewno chcesz usunąć ten element?", + "file_cancelled": "Transfer anulowany", + "2fa_required": "Wymagana weryfikacja 2FA", + "2fa_hint": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", + "2fa_invalid": "Wprowadź prawidłowy 6-cyfrowy kod", + "verify": "Weryfikuj" + }, + "branding": { + "identity_title": "Identyfikacja marki", + "identity_desc": "Dostosuj nazwę i opis aplikacji wyświetlane w konsoli", + "app_name": "Nazwa aplikacji", + "app_description": "Opis aplikacji", + "logo_title": "Logo", + "logo_desc": "Wybierz sposób wyświetlania logo w pasku bocznym i na stronie logowania", + "logo_type_text": "Logo tekstowe", + "logo_type_icon": "Ikona Material", + "logo_type_svg": "Kod SVG", + "logo_type_image": "URL obrazu", + "logo_text": "Tekst logo", + "logo_text_hint": "Główny tekst wyświetlany jako logo marki", + "logo_text_accent": "Tekst akcentowy", + "logo_text_accent_hint": "Tekst pod logo (np. nazwa produktu lub hasło)", + "logo_icon_name": "Nazwa ikony", + "logo_icon_hint": "Wpisz nazwę ikony Material Icons (np. dns, cloud, security). Zobacz fonts.google.com/icons", + "logo_svg_code": "Kod SVG", + "logo_svg_hint": "Wklej kod SVG. Obsługuje pełne elementy ze ścieżkami i stylami.", + "logo_image_upload": "Wgraj obrazek", + "logo_image_choose": "Wybierz plik obrazu", + "logo_image_hint": "PNG, JPG, GIF, WebP lub SVG. Maks. 2 MB. Obraz jest zapisywany na serwerze.", + "logo_image_url": "Ścieżka / URL obrazu", + "logo_image_url_hint": "Wypełniane automatycznie po wgraniu pliku, lub wpisz URL / ścieżkę ręcznie.", + "logo_image_too_large": "Obraz jest za duży. Maksymalny rozmiar to 2 MB.", + "logo_image_invalid_type": "Nieprawidłowy typ pliku. Użyj PNG, JPG, GIF, WebP lub SVG.", + "logo_upload_success": "Logo zostało wgrane pomyślnie.", + "preview": "Podgląd", + "colors_title": "Schemat kolorów", + "colors_desc": "Dostosuj paletę kolorów. Pozostaw puste, aby użyć domyślnych.", + "colors_backgrounds": "Tła", + "colors_text": "Tekst", + "colors_accents": "Kolory akcentowe", + "colors_borders": "Obramowania", + "typography_title": "Typografia", + "typography_desc": "Wybierz czcionki dla nagłówków i tekstu. Czcionki są pobierane na serwer do samodzielnego hostingu.", + "font_heading": "Czcionka nagłówków", + "font_heading_hint": "Używana dla nagłówków (H1–H6) i logo tekstowego", + "font_body": "Czcionka treści", + "font_body_hint": "Używana dla tekstu i elementów interfejsu", + "font_search_placeholder": "Szukaj czcionek...", + "font_system_default": "Domyślna systemowa", + "font_clear": "Wyczyść", + "font_cat_all": "Wszystkie", + "font_downloaded_count": "czcionek pobranych na serwer", + "import_export_title": "Import / Eksport", + "import_export_desc": "Zapisz swój motyw jako plik JSON lub zaimportuj z innej instancji", + "export_theme": "Eksportuj motyw", + "import_theme": "Importuj motyw", + "reset_defaults": "Przywróć domyślne", + "save_branding": "Zapisz wygląd", + "saved": "Wygląd zapisany pomyślnie. Przeładowywanie...", + "exported": "Motyw wyeksportowany", + "imported": "Motyw zaimportowany pomyślnie. Przeładowywanie...", + "import_error": "Nie udało się zaimportować motywu. Nieprawidłowy format pliku.", + "reset_confirm": "Czy na pewno chcesz przywrócić domyślny wygląd? Tej operacji nie można cofnąć.", + "reset_success": "Wygląd przywrócony do domyślnych. Przeładowywanie...", + "powered_by": "Napędzane przez", + "background_title": "Tło i wygląd", + "background_desc": "Ustaw tapetę konsoli, gradient lub jednolite tło. Karty unoszą się nad nim.", + "bg_type_none": "Brak", + "bg_type_color": "Jednolity kolor", + "bg_type_gradient": "Gradient", + "bg_type_image": "Obraz", + "bg_color": "Kolor tła", + "bg_gradient": "Gradient CSS", + "bg_gradient_hint": "Dowolny prawidłowy gradient CSS, np. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Prześlij obraz tła", + "bg_image_choose": "Wybierz plik obrazu", + "bg_image_hint": "PNG, JPG, WebP lub GIF. Maks. 8 MB. Zapisywane na serwerze.", + "bg_image_url": "Ścieżka / URL obrazu", + "bg_size": "Skalowanie obrazu", + "bg_size_cover": "Wypełnij (cały ekran)", + "bg_size_contain": "Dopasuj (zmieść)", + "bg_size_auto": "Auto (oryginał)", + "bg_blur": "Rozmycie tła", + "bg_overlay": "Ciemna nakładka", + "bg_overlay_hint": "Przyciemnia tło dla lepszej czytelności tekstu.", + "bg_image_too_large": "Obraz jest za duży. Maksymalny rozmiar to 8 MB.", + "bg_image_invalid_type": "Nieprawidłowy typ pliku. Użyj PNG, JPG, WebP lub GIF.", + "bg_upload_success": "Obraz tła przesłany pomyślnie.", + "login_title": "Strona logowania", + "login_desc": "Dostosuj nagłówek, podtytuł i tło ekranu logowania.", + "login_heading": "Nagłówek logowania", + "login_heading_placeholder": "Witaj ponownie", + "login_subheading": "Podtytuł logowania", + "login_subheading_placeholder": "Zaloguj się do swojego konta", + "login_bg_inherit": "Tak jak konsola", + "agent_title": "Strona pobierania agenta", + "agent_desc": "Dostosuj publiczny portal pobierania agenta widoczny dla użytkowników.", + "agent_show_powered": "Pokaż \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Wyświetla informację o BetterDesk w stopce portalu pobierania.", + "footer_title": "Stopka i prawa autorskie", + "footer_desc": "Dodaj własny wiersz stopki widoczny na ekranie logowania i w panelu bocznym.", + "footer_text": "Tekst stopki", + "footer_text_hint": "np. informacja o prawach autorskich lub nazwa firmy.", + "show_powered": "Pokaż informację \"BetterDesk\"", + "show_powered_hint": "Wyświetla nazwę i wersję BetterDesk w stopce logowania i panelu bocznym.", + "custom_css_title": "Własny CSS", + "custom_css_desc": "Zaawansowane: wstrzyknij własny CSS stosowany w całej konsoli i na stronie logowania.", + "custom_css_hint": "Używaj ostrożnie. Nieprawidłowe lub niebezpieczne reguły są filtrowane. Maks. 20 000 znaków." + }, + "device_detail": { + "tab_overview": "Przegląd", + "tab_tags": "Tagi i notatki", + "tab_actions": "Akcje", + "section_identity": "Tożsamość", + "section_network": "Sieć", + "section_timestamps": "Znaczniki czasu", + "section_connect": "Połączenie", + "section_manage": "Zarządzanie", + "folder": "Folder", + "status_tier": "Poziom statusu", + "device_banned": "To urządzenie jest zablokowane", + "no_reason": "Nie podano powodu", + "tags": "Tagi", + "no_tags": "Brak tagów przypisanych do tego urządzenia", + "tag_placeholder": "Wprowadź nazwę tagu...", + "add_tag": "Dodaj", + "tag_exists": "Ten tag już istnieje", + "notes": "Notatki", + "notes_placeholder": "Dodaj notatki o tym urządzeniu...", + "danger_zone": "Strefa zagrożenia", + "action_connect_web": "Pulpit zdalny", + "action_connect_web_desc": "Połącz przez przeglądarkę", + "action_native_remote": "Zdalny BetterDesk", + "action_native_remote_desc": "Natywny strumień JPEG — bez wtyczek", + "action_connect_desktop": "Klient desktop", + "action_connect_desktop_desc": "Otwórz w aplikacji desktop", + "action_change_id_desc": "Zmień ID rejestracji urządzenia", + "action_ban_desc": "Zablokuj połączenia tego urządzenia", + "action_unban_desc": "Zezwól na ponowne połączenie", + "action_delete_desc": "Trwale usuń to urządzenie", + "tab_hardware": "Sprzęt", + "tab_metrics": "Metryki", + "tab_services": "Usługi", + "tab_processes": "Procesy", + "tab_events": "Zdarzenia", + "tab_activity": "Aktywność", + "tab_files": "Pliki", + "agent_lazy_hint": "Kliknij tę zakładkę, aby pobrać dane z agenta", + "agent_offline": "Agent jest offline", + "agent_timeout": "Agent nie odpowiedział w terminie", + "agent_error": "Nie udało się pobrać danych z agenta", + "service_name": "Nazwa", + "service_display": "Nazwa wyświetlana", + "service_status": "Stan", + "service_start": "Tryb startu", + "process_name": "Nazwa", + "process_user": "Użytkownik", + "process_memory": "Pamięć", + "section_system": "System", + "section_cpu": "Procesor", + "section_memory": "Pamięć", + "section_displays": "Wyświetlacze", + "section_encoding": "Kodeki", + "section_live_metrics": "Metryki na żywo", + "section_current_usage": "Aktualne użycie", + "section_usage_history": "Historia użycia", + "os": "System operacyjny", + "version": "Wersja klienta", + "cpu_model": "Model procesora", + "cpu_cores": "Rdzenie CPU", + "cpu_freq": "Częstotliwość CPU", + "total_memory": "Całkowita pamięć", + "metric_memory": "Pamięć", + "metric_disk": "Dysk", + "metrics_updated": "Zaktualizowano", + "device_groups": "Grupy", + "no_sysinfo": "Brak informacji o sprzęcie", + "no_sysinfo_hint": "Dane pojawią się po wysłaniu raportu sysinfo przez urządzenie", + "no_metrics": "Brak danych metrycznych", + "no_metrics_hint": "Metryki pojawią się po wysłaniu raportów heartbeat przez urządzenie", + "chart_oldest": "← Najstarsze", + "chart_newest": "Najnowsze →" + }, + "inventory": { + "title": "Inwentaryzacja", + "subtitle": "Inwentaryzacja sprzętu i oprogramowania zarządzanych urządzeń", + "device_id": "ID urządzenia", + "hostname": "Nazwa hosta", + "os": "System operacyjny", + "cpu": "Procesor", + "cpu_cores": "Rdzenie CPU", + "cpu_usage": "Użycie CPU", + "memory": "Pamięć", + "memory_total": "Całkowita pamięć", + "memory_used": "Użyta pamięć", + "memory_available": "Dostępna pamięć", + "memory_usage": "Użycie pamięci", + "swap": "Swap", + "disks": "Dyski", + "disk_count": "Liczba dysków", + "network": "Sieć", + "network_interfaces": "Interfejsy sieciowe", + "software": "Oprogramowanie", + "software_count": "Zainstalowane oprogramowanie", + "system": "System", + "kernel": "Jądro", + "architecture": "Architektura", + "uptime": "Czas działania", + "frequency": "Częstotliwość", + "physical_cores": "Rdzenie fizyczne", + "logical_cores": "Rdzenie logiczne", + "model": "Model", + "usage": "Użycie", + "total": "Razem", + "used": "Użyte", + "available": "Dostępne", + "mount_point": "Punkt montowania", + "removable": "wymienny", + "mac_address": "Adres MAC", + "ip_addresses": "Adresy IP", + "traffic": "Ruch sieciowy", + "collect_now": "Zbierz teraz", + "collector_running": "Kolektor działa", + "collector_stopped": "Kolektor zatrzymany", + "last_upload": "Ostatnie przesłanie", + "total_uploads": "łącznie", + "last_seen": "Ostatnio widziano", + "collected_at": "Zebrano", + "no_data": "Brak danych inwentaryzacji. Kliknij \"Zbierz teraz\", aby zebrać informacje o systemie.", + "no_devices": "Nie znaleziono urządzeń z danymi inwentaryzacji", + "detail_title": "Szczegóły inwentaryzacji urządzenia", + "telemetry": "Telemetria", + "view_detail": "Szczegóły", + "export": "Eksportuj", + "refresh": "Odśwież" + }, + "tickets": { + "title": "Zgłoszenia", + "subtitle": "Zgłoszenia i śledzenie problemów", + "create": "Nowe zgłoszenie", + "edit": "Edytuj zgłoszenie", + "delete": "Usuń zgłoszenie", + "detail": "Szczegóły zgłoszenia", + "ticket_id": "ID zgłoszenia", + "ticket_title": "Tytuł", + "description": "Opis", + "status": "Status", + "priority": "Priorytet", + "category": "Kategoria", + "assigned_to": "Przypisano do", + "created_by": "Utworzono przez", + "device": "Urządzenie", + "sla_due": "Termin SLA", + "created_at": "Utworzono", + "updated_at": "Zaktualizowano", + "resolved_at": "Rozwiązano", + "closed_at": "Zamknięto", + "status_open": "Otwarte", + "status_in_progress": "W toku", + "status_resolved": "Rozwiązane", + "status_closed": "Zamknięte", + "priority_low": "Niski", + "priority_medium": "Średni", + "priority_high": "Wysoki", + "priority_critical": "Krytyczny", + "category_general": "Ogólne", + "category_hardware": "Sprzęt", + "category_software": "Oprogramowanie", + "category_network": "Sieć", + "category_access": "Dostęp", + "category_other": "Inne", + "comments": "Komentarze", + "add_comment": "Dodaj komentarz", + "comment_placeholder": "Napisz komentarz...", + "internal_note": "Notatka wewnętrzna (niewidoczna dla użytkowników)", + "attachments": "Załączniki", + "upload_attachment": "Załącz plik", + "download": "Pobierz", + "connect_device": "Połącz z urządzeniem", + "no_tickets": "Brak zgłoszeń", + "no_comments": "Brak komentarzy", + "no_attachments": "Brak załączników", + "title_required": "Tytuł jest wymagany", + "delete_confirm": "Czy na pewno chcesz usunąć zgłoszenie #{id}?", + "delete_success": "Zgłoszenie usunięte", + "created_success": "Zgłoszenie utworzone", + "updated_success": "Zgłoszenie zaktualizowane", + "sla_overdue": "Przekroczony SLA", + "filter_all": "Wszystkie", + "search_placeholder": "Szukaj zgłoszeń...", + "assign_to_me": "Przypisz do mnie", + "unassign": "Usuń przypisanie", + "stats_total": "Razem", + "stats_open": "Otwarte", + "stats_in_progress": "W toku", + "stats_resolved": "Rozwiązane", + "stats_closed": "Zamknięte" + }, + "activity": { + "title": "Monitorowanie aktywności", + "subtitle": "Śledzenie użycia aplikacji i bezczynności", + "device": "Urządzenie", + "hostname": "Nazwa hosta", + "sessions": "Sesje", + "idle_time": "Czas bezczynności", + "active_time": "Czas aktywności", + "last_report": "Ostatni raport", + "top_apps": "Najczęściej używane aplikacje", + "app_name": "Aplikacja", + "window_title": "Tytuł okna", + "category": "Kategoria", + "duration": "Czas trwania", + "started_at": "Rozpoczęto", + "ended_at": "Zakończono", + "session_count": "Liczba sesji", + "total_active": "Łącznie aktywny", + "total_idle": "Łącznie bezczynny", + "detail_count": "Rekordy szczegółów", + "no_data": "Brak danych o aktywności", + "no_sessions": "Brak zarejestrowanych sesji", + "filter_from": "Od", + "filter_to": "Do", + "filter_apply": "Zastosuj filtr", + "hours": "godziny", + "minutes": "minuty", + "seconds": "sekundy", + "category_browser": "Przeglądarka", + "category_productivity": "Produktywność", + "category_communication": "Komunikacja", + "category_development": "Programowanie", + "category_media": "Media", + "category_gaming": "Gry", + "category_system": "System", + "category_other": "Inne", + "summary": "Podsumowanie", + "details": "Szczegóły", + "refresh": "Odśwież", + "search": "Szukaj urządzeń...", + "date_range": "Zakres dat", + "device_id": "ID urządzenia", + "session_start": "Początek sesji", + "session_end": "Koniec sesji", + "user": "Użytkownik", + "no_activity": "Brak zarejestrowanej aktywności", + "reported_at": "Zgłoszono", + "detail": "Szczegóły", + "no_apps": "Brak aplikacji" + }, + "automation": { + "title": "Automatyzacja i alerty", + "subtitle": "Reguły alertów, zdalne polecenia i konfiguracja SMTP", + "rules": "Reguły alertów", + "rules_subtitle": "Definiuj warunki wyzwalające powiadomienia", + "alerts": "Historia alertów", + "alerts_subtitle": "Przeglądaj i potwierdzaj wyzwolone alerty", + "commands": "Zdalne polecenia", + "commands_subtitle": "Wysyłaj polecenia do zdalnych urządzeń", + "smtp": "Konfiguracja SMTP", + "smtp_subtitle": "Ustawienia powiadomień e-mail", + "rule_name": "Nazwa reguły", + "description": "Opis", + "condition_type": "Typ warunku", + "condition_op": "Operator", + "condition_value": "Próg", + "severity": "Ważność", + "scope_device": "Urządzenie docelowe", + "scope_all": "Wszystkie urządzenia", + "cooldown": "Okres chłodzenia (sekundy)", + "notify_emails": "E-maile powiadomień", + "enabled": "Włączony", + "disabled": "Wyłączony", + "create_rule": "Utwórz regułę", + "edit_rule": "Edytuj regułę", + "delete_rule": "Usuń regułę", + "acknowledge": "Potwierdź", + "acknowledged": "Potwierdzone", + "unacknowledged": "Niepotwierdzone", + "triggered_at": "Wyzwolono", + "severity_info": "Informacja", + "severity_warning": "Ostrzeżenie", + "severity_critical": "Krytyczny", + "op_gt": "Większy niż", + "op_gte": "Większy lub równy", + "op_lt": "Mniejszy niż", + "op_lte": "Mniejszy lub równy", + "op_eq": "Równy", + "op_neq": "Różny od", + "type_cpu_usage": "Użycie CPU (%)", + "type_memory_usage": "Użycie pamięci (%)", + "type_disk_usage": "Użycie dysku (%)", + "type_offline_duration": "Czas offline (s)", + "type_idle_duration": "Czas bezczynności (s)", + "type_custom": "Niestandardowy", + "command_type": "Typ polecenia", + "command_payload": "Polecenie / skrypt", + "command_result": "Wynik", + "command_status": "Status", + "send_command": "Wyślij polecenie", + "status_pending": "Oczekuje", + "status_running": "W trakcie", + "status_completed": "Zakończono", + "status_failed": "Błąd", + "smtp_host": "Host SMTP", + "smtp_port": "Port", + "smtp_secure": "Użyj TLS", + "smtp_user": "Nazwa użytkownika", + "smtp_pass": "Hasło", + "smtp_from": "Adres nadawcy", + "smtp_test": "Testuj połączenie", + "smtp_save": "Zapisz konfigurację", + "smtp_test_success": "Połączenie udane", + "smtp_test_failed": "Połączenie nieudane", + "no_rules": "Brak skonfigurowanych reguł alertów", + "no_alerts": "Brak wyzwolonych alertów", + "no_commands": "Brak wysłanych poleceń", + "id_payload_required": "ID urządzenia i payload są wymagane", + "no_commands_sent": "Nie wysłano jeszcze żadnych poleceń" + }, + "file_transfer": { + "title": "Przesyłanie plików", + "transfers": "Transfery", + "new_transfer": "Nowy transfer", + "upload": "Wyślij", + "download": "Pobierz", + "direction": "Kierunek", + "filename": "Nazwa pliku", + "file_size": "Rozmiar pliku", + "mime_type": "Typ MIME", + "progress": "Postęp", + "status": "Status", + "device": "Urządzenie", + "initiated_by": "Zainicjowane przez", + "created_at": "Utworzono", + "cancel": "Anuluj", + "cancel_confirm": "Czy na pewno chcesz anulować ten transfer?", + "download_file": "Pobierz plik", + "browse_files": "Przeglądaj pliki", + "select_file": "Wybierz plik", + "select_device": "Wybierz urządzenie", + "no_transfers": "Brak transferów plików", + "status_pending": "Oczekuje", + "status_active": "Aktywny", + "status_completed": "Zakończono", + "status_failed": "Błąd", + "status_cancelled": "Anulowano", + "bytes_transferred": "Przesłane bajty", + "chunks": "Fragmenty", + "transfer_started": "Transfer rozpoczęty", + "transfer_completed": "Transfer zakończony", + "transfer_failed": "Transfer nieudany", + "transfer_cancelled": "Transfer anulowany", + "max_file_size": "Maksymalny rozmiar pliku: 4 GB", + "error_too_large": "Plik jest za duży", + "error_no_device": "Nie wybrano urządzenia", + "error_no_file": "Nie wybrano pliku" + }, + "network": { + "title": "Monitoring sieci", + "targets": "Cele monitorowania", + "add_target": "Dodaj cel", + "edit_target": "Edytuj cel", + "delete_target": "Usuń cel", + "delete_confirm": "Czy na pewno chcesz usunąć ten cel?", + "target_name": "Nazwa", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Typ sprawdzania", + "timeout": "Limit czasu (ms)", + "interval": "Interwał (ms)", + "enabled": "Włączony", + "status": "Status", + "last_check": "Ostatnie sprawdzenie", + "last_rtt": "Ostatni RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Dostępny", + "status_down": "Niedostępny", + "status_unknown": "Nieznany", + "check_now": "Sprawdź teraz", + "history": "Historia sprawdzeń", + "stats": "Statystyki", + "total_targets": "Łączna liczba celów", + "targets_up": "Cele dostępne", + "targets_down": "Cele niedostępne", + "type_ping": "Ping (ICMP)", + "type_tcp": "Port TCP", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Narzędzia sieciowe", + "ping_tool": "Test ping", + "tcp_tool": "Sprawdzenie portu TCP", + "http_tool": "Sprawdzenie HTTP", + "dns_tool": "Rozwiązywanie DNS", + "monitor_start": "Uruchom monitor", + "monitor_stop": "Zatrzymaj monitor", + "monitor_running": "Monitor jest uruchomiony", + "monitor_stopped": "Monitor jest zatrzymany", + "no_targets": "Brak skonfigurowanych celów monitorowania", + "no_history": "Brak historii sprawdzeń", + "error_code": "Błąd", + "status_code": "Kod statusu HTTP", + "search_targets": "Szukaj celów...", + "name": "Nazwa", + "tab_targets": "Cele", + "tab_tools": "Narzędzia", + "avg_latency": "Śr. opóźnienie", + "type": "Typ", + "latency": "Opóźnienie", + "check_history": "Historia sprawdzeń", + "name_host_required": "Nazwa i host są wymagane", + "uptime": "Dostępność", + "response_time": "Czas odpowiedzi", + "avg_response": "Śr. czas odpowiedzi", + "charts": "Wykresy", + "realtime": "Czas rzeczywisty", + "response_time_ms": "Czas odpowiedzi (ms)", + "uptime_percent": "Dostępność (%)", + "last_24h": "Ostatnie 24h", + "last_7d": "Ostatnie 7 dni", + "last_30d": "Ostatnie 30 dni" + }, + "dataguard": { + "title": "DataGuard — ochrona DLP", + "policies": "Polityki DLP", + "add_policy": "Dodaj politykę", + "edit_policy": "Edytuj politykę", + "delete_policy": "Usuń politykę", + "delete_confirm": "Czy na pewno chcesz usunąć tę politykę?", + "policy_name": "Nazwa", + "policy_description": "Opis", + "policy_desc": "Opis polityki", + "status": "Status", + "enabled": "Włączona", + "disabled": "Wyłączona", + "rules": "Reguły", + "add_rule": "Dodaj regułę", + "rule_type": "Typ reguły", + "rule_type_usb": "Urządzenie USB", + "rule_type_file": "Operacja na pliku", + "action": "Akcja", + "action_allow": "Zezwól", + "action_block": "Zablokuj", + "action_log": "Tylko loguj", + "filter": "Filtr", + "vid": "ID producenta (VID)", + "pid": "ID produktu (PID)", + "serial": "Numer seryjny", + "device_class": "Klasa urządzenia", + "drive_type": "Typ dysku", + "file_extensions": "Rozszerzenia plików", + "events": "Zdarzenia DLP", + "event_source": "Źródło", + "event_source_usb": "USB", + "event_source_file": "Plik", + "event_type": "Typ zdarzenia", + "event_details": "Szczegóły", + "no_policies": "Brak skonfigurowanych polityk DLP", + "no_events": "Brak zarejestrowanych zdarzeń DLP", + "stats": "Statystyki", + "total_events": "Łącznie zdarzeń", + "blocked_events": "Zablokowane", + "logged_events": "Zalogowane", + "usb_events": "Zdarzenia USB", + "file_events": "Zdarzenia plików", + "device_id": "ID urządzenia", + "policy_matched": "Dopasowana polityka", + "timestamp": "Znacznik czasu", + "drive_removable": "Wymienny", + "drive_fixed": "Stały", + "drive_network": "Sieciowy", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Nieznany", + "total_policies": "Łącznie polityk", + "active_policies": "Aktywne polityki", + "violations": "Naruszenia", + "blocked": "Zablokowane", + "tab_policies": "Polityki", + "tab_events": "Zdarzenia", + "search_policies": "Szukaj polityk...", + "create_policy": "Utwórz politykę", + "policy_type": "Typ polityki", + "scope": "Zakres", + "events_count": "Zdarzenia", + "search_events": "Szukaj zdarzeń...", + "event_time": "Czas zdarzenia", + "device": "Urządzenie", + "policy": "Polityka", + "detail": "Szczegóły", + "scope_help": "ID urządzeń oddzielone przecinkami, lub puste dla wszystkich", + "scope_all": "Wszystkie urządzenia", + "active": "Aktywna", + "type_file_type": "Typ pliku", + "type_usb": "USB", + "type_clipboard": "Schowek", + "type_screen_share": "Udostępnianie ekranu", + "type_file_transfer": "Transfer plików" + }, + "reports": { + "title": "Raporty", + "generate": "Generuj raport", + "generate_csv": "Eksportuj CSV", + "report_type": "Typ raportu", + "type_devices": "Podsumowanie urządzeń", + "type_activity": "Podsumowanie aktywności", + "type_security": "Raport bezpieczeństwa", + "type_tickets": "Raport zgłoszeń", + "type_network": "Raport sieci", + "type_inventory": "Raport inwentaryzacji", + "type_alerts": "Raport alertów", + "saved": "Zapisane raporty", + "save_report": "Zapisz raport", + "delete_report": "Usuń raport", + "delete_confirm": "Czy na pewno chcesz usunąć ten zapisany raport?", + "no_saved": "Brak zapisanych raportów", + "report_title": "Tytuł", + "created_by": "Utworzony przez", + "created_at": "Utworzono", + "filters": "Filtry", + "date_from": "Od", + "date_to": "Do", + "device_filter": "ID urządzenia", + "generated_at": "Wygenerowano", + "section": "Sekcja danych", + "total_devices": "Łącznie urządzeń", + "online": "Online", + "offline": "Offline", + "banned": "Zbanowane", + "platform_distribution": "Rozkład platform", + "top_applications": "Top aplikacje", + "total_active": "Łączny czas aktywności", + "total_idle": "Łączny czas bezczynności", + "dlp_stats": "Statystyki DLP", + "banned_devices": "Zbanowane urządzenia", + "audit_logs": "Logi audytu", + "ticket_stats": "Statystyki zgłoszeń", + "category_distribution": "Rozkład kategorii", + "priority_distribution": "Rozkład priorytetów", + "targets_status": "Status celów", + "os_distribution": "Rozkład systemów operacyjnych", + "avg_ram": "Średni RAM", + "alert_rules": "Reguły alertów", + "recent_alerts": "Ostatnie alerty", + "tab_generate": "Generuj raport", + "tab_saved": "Zapisane raporty", + "type_devices_desc": "Przegląd urządzeń, platform i statusów", + "type_activity_desc": "Podsumowanie aktywności i czasu bezczynności", + "type_security_desc": "Blokady, zdarzenia DLP i logi audytu", + "type_tickets_desc": "Statystyki zgłoszeń i wydajność SLA", + "type_network_desc": "Cele monitorowania sieci i dane dostępności", + "type_inventory_desc": "Podsumowanie inwentaryzacji sprzętu i oprogramowania", + "type_alerts_desc": "Reguły alertów i historia wyzwolonych alertów", + "report_name": "Nazwa raportu", + "format": "Format", + "save": "Zapisz raport", + "preview": "Podgląd", + "download": "Pobierz", + "delete_saved": "Usuń raport", + "raw_json": "Surowy JSON" + }, + "tenants": { + "title": "Organizacje", + "list": "Organizacje", + "add_tenant": "Dodaj organizację", + "edit_tenant": "Edytuj organizację", + "delete_tenant": "Usuń organizację", + "delete_confirm": "Czy na pewno chcesz usunąć tę organizację? Wszystkie przypisania urządzeń i użytkowników zostaną usunięte.", + "name": "Nazwa", + "slug": "Identyfikator", + "contact_name": "Osoba kontaktowa", + "contact_email": "Email kontaktowy", + "max_devices": "Maks. urządzeń", + "max_devices_hint": "0 = bez limitu", + "notes": "Notatki", + "active": "Aktywna", + "inactive": "Nieaktywna", + "devices": "Urządzenia", + "users": "Użytkownicy", + "assign_device": "Przypisz urządzenie", + "assign_devices": "Przypisz urządzenia", + "remove_device": "Usuń urządzenie", + "assign_user": "Przypisz użytkownika", + "remove_user": "Usuń użytkownika", + "no_tenants": "Brak skonfigurowanych organizacji", + "no_devices": "Brak urządzeń przypisanych do tej organizacji", + "no_users": "Brak użytkowników przypisanych do tej organizacji", + "stats": "Statystyki organizacji", + "total_devices": "Łącznie urządzeń", + "online_devices": "Urządzenia online", + "total_users": "Łącznie użytkowników", + "created_at": "Utworzono", + "updated_at": "Zaktualizowano", + "slug_exists": "Identyfikator organizacji już istnieje", + "total_tenants": "Łącznie organizacji", + "active_tenants": "Aktywne organizacje", + "search": "Szukaj organizacji...", + "create_tenant": "Utwórz organizację", + "detail": "Szczegóły organizacji", + "contact": "Kontakt", + "enabled": "Włączona", + "disabled": "Wyłączona", + "max": "maks.", + "info": "Informacje", + "status": "Status" + }, + "registrations": { + "title": "Żądania rejestracji urządzeń", + "subtitle": "Przeglądaj oczekujące żądania zatwierdzenia rejestracji urządzeń", + "search_placeholder": "Szukaj po ID urządzenia, nazwie hosta lub IP...", + "no_registrations": "Brak żądań rejestracji urządzeń", + "col_device_id": "ID urządzenia", + "col_hostname": "Nazwa hosta", + "col_platform": "Platforma", + "col_ip": "Adres IP", + "col_version": "Wersja", + "col_status": "Status", + "col_requested": "Żądanie", + "col_actions": "Akcje", + "status_pending": "Oczekujące", + "status_approved": "Zatwierdzone", + "status_rejected": "Odrzucone", + "approve_btn": "Zatwierdź", + "approve_confirm": "Czy na pewno chcesz zatwierdzić to urządzenie? Otrzyma ono dane uwierzytelniające serwera i będzie mogło się automatycznie połączyć.", + "approved_success": "Rejestracja urządzenia zatwierdzona pomyślnie", + "reject_btn": "Odrzuć", + "reject_title": "Odrzuć rejestrację", + "reject_confirm": "Czy na pewno chcesz odrzucić to żądanie rejestracji?", + "reject_reason": "Powód (opcjonalnie)", + "reject_reason_placeholder": "Podaj powód odrzucenia...", + "rejected_success": "Rejestracja urządzenia odrzucona", + "delete_confirm": "Czy na pewno chcesz usunąć ten wpis rejestracji?", + "deleted_success": "Wpis rejestracji usunięty", + "enrollment_title": "Rejestracja urządzeń", + "enrollment_subtitle": "Oczekujące żądania rejestracji od klientów BetterDesk", + "enrollment_empty": "Brak oczekujących żądań rejestracji", + "enrollment_approve": "Zatwierdź", + "enrollment_reject": "Odrzuć", + "enrollment_display_name": "Nazwa wyświetlana", + "enrollment_display_name_placeholder": "Wpisz nazwę dla tego urządzenia...", + "enrollment_sync_mode": "Tryb synchronizacji", + "enrollment_sync_silent": "Cichy — minimalna telemetria", + "enrollment_sync_standard": "Standardowy — zbalansowana synchronizacja", + "enrollment_sync_turbo": "Turbo — agresywna synchronizacja", + "enrollment_approved_success": "Rejestracja urządzenia zatwierdzona", + "enrollment_rejected_success": "Rejestracja urządzenia odrzucona", + "approve_title": "Zatwierdź urządzenie", + "field_name": "Nazwa urządzenia", + "field_name_placeholder": "Wpisz nazwę dla tego urządzenia...", + "field_sync_mode": "Tryb synchronizacji", + "sync_standard": "Standardowy — zbalansowana synchronizacja", + "sync_silent": "Cichy — minimalna telemetria", + "sync_turbo": "Turbo — agresywna synchronizacja", + "field_tags": "Tagi", + "field_tags_placeholder": "Tagi oddzielone przecinkami (np. biuro, laptop)...", + "field_tags_existing": "Istniejące tagi", + "field_tag_add_placeholder": "Dodaj nowy tag...", + "field_tag_add_btn": "Dodaj", + "field_groups": "Grupy urządzeń", + "field_folder": "Folder", + "field_folder_none": "Bez folderu", + "reject_ban_option": "Zablokuj to urządzenie", + "reject_ban_hint": "Urządzenie zostanie zablokowane i nie będzie mogło ponownie wysyłać żądań rejestracji.", + "banner_open_mode": "Rejestracja jest otwarta — nowi klienci RustDesk rejestrują się bez akceptacji operatora. Ustaw tryb Zarządzany w Ustawieniach, aby korzystać z tej kolejki.", + "banner_locked_mode": "Rejestracja jest zablokowana — tylko urządzenia z tokenem mogą się zarejestrować. Do akceptacji nieznanych klientów wymagany jest tryb Zarządzany.", + "enrollment_settings_link": "Ustawienia rejestracji" + }, + "backup": { + "title": "Kopia zapasowa", + "desc": "Pobierz pełną kopię zapasową do odtworzenia po awarii — bazę danych, klucze tożsamości serwera, plik środowiska, pliki marki oraz dane serwera Go. Archiwum (.tar.gz) można przywrócić na nowej maszynie, aby ponownie uruchomić cały serwer.", + "restore_title": "Przywracanie", + "restore_desc": "Prześlij wcześniej pobrane archiwum kopii (.tar.gz) lub starszy zrzut konfiguracji JSON. Wybierz poniżej które komponenty przywrócić.", + "stat_users": "Użytkownicy", + "stat_settings": "Ustawienia", + "stat_folders": "Foldery", + "stat_groups": "Grupy", + "stat_strategies": "Strategie", + "stat_backend": "Backend", + "stat_database": "Silnik bazy danych", + "stat_keys": "Klucze serwera w kopii", + "stat_env": "Plik środowiska", + "stat_uploads": "Pliki marki", + "download": "Pobierz kopię", + "creating": "Tworzenie kopii...", + "download_success": "Kopia zapasowa pobrana pomyślnie", + "upload": "Prześlij kopię", + "restore_confirm": "Czy na pewno chcesz przywrócić dane z tej kopii? Wybrane komponenty zostaną nadpisane.", + "restore_success": "Kopia zapasowa przywrócona pomyślnie. Niektóre zmiany mogą wymagać odświeżenia strony.", + "restart_required": "Niektóre przywrócone komponenty (klucze / .env / baza Go) wymagają restartu usługi, aby zadziałać.", + "restored": "Przywrócono", + "skipped": "Pominięto", + "backup_date": "Data kopii", + "security_warning": "Ta kopia zawiera dane wrażliwe (klucze serwera, plik środowiska, hashe haseł i sekrety 2FA). Przechowuj ją bezpiecznie i nigdy nie udostępniaj.", + "restore_warning": "Przywrócenie sekretów, pliku środowiska lub bazy serwera Go nadpisuje tożsamość serwera i wymaga następnie restartu usługi.", + "opt_database": "Baza danych (wszystkie tabele)", + "opt_database_hint": "Ponownie importuje wszystkie dane konsoli. Stosowane na żywo, bez restartu.", + "opt_uploads": "Pliki marki", + "opt_uploads_hint": "Logo i przesłane obrazy.", + "opt_secrets": "Klucze i sekrety serwera", + "opt_secrets_warning": "Nadpisuje tożsamość Ed25519 serwera, klucz API i sekret sesji. Wymaga restartu usługi.", + "opt_env": "Plik środowiska (.env)", + "opt_env_warning": "Nadpisuje SESSION_SECRET, klucz API, DSN bazy, porty i ustawienia TLS. Wymaga restartu usługi.", + "opt_godb": "Baza danych serwera Go", + "opt_godb_warning": "Nadpisuje bazę SQLite serwera Go (tylko backend SQLite). Wymaga restartu usługi.", + "opt_settings": "Ustawienia konsoli", + "opt_branding": "Wygląd / Motyw", + "opt_folders": "Foldery urządzeń", + "opt_groups": "Grupy użytkowników i urządzeń", + "opt_addressbooks": "Książki adresowe", + "opt_users": "Konta użytkowników", + "opt_users_warning": "Destrukcyjne: zastępuje WSZYSTKIE konta użytkowników danymi z kopii. Możesz zostać wylogowany.", + "no_file": "Nie wybrano pliku kopii zapasowej", + "invalid_json": "Nieprawidłowy plik kopii: nie jest poprawnym JSON", + "invalid_format": "Nieprawidłowy plik kopii: to nie jest kopia BetterDesk" + }, + "cdap": { + "device_detail": "Urządzenie CDAP", + "loading": "Ładowanie...", + "loading_widgets": "Ładowanie widgetów urządzenia...", + "load_error": "Nie udało się załadować danych urządzenia", + "connected": "Połączony", + "disconnected": "Rozłączony", + "device_offline_msg": "Urządzenie jest obecnie offline. Wartości widgetów mogą być nieaktualne.", + "no_widgets": "Brak dostępnych widgetów", + "no_widgets_desc": "To urządzenie nie zarejestrowało manifestu CDAP z definicjami widgetów.", + "command_log": "Dziennik poleceń", + "clear_log": "Wyczyść dziennik", + "confirm_command": "Potwierdź polecenie", + "select_option": "Wybierz", + "cdap_status": "Status CDAP", + "cdap_enabled": "CDAP włączony", + "cdap_disabled": "CDAP wyłączony", + "cdap_devices": "Urządzenia CDAP", + "cdap_connections": "Aktywne połączenia", + "send_command": "Wyślij polecenie", + "command_sent": "Polecenie wysłane pomyślnie", + "command_failed": "Nie udało się wysłać polecenia", + "devices_title": "Urządzenia CDAP", + "devices_subtitle": "Podłączone urządzenia poprzez Custom Device Application Protocol", + "stat_connected": "Połączone", + "stat_port": "Port", + "search_devices": "Szukaj urządzeń...", + "no_devices": "Brak podłączonych urządzeń", + "no_devices_desc": "Żadne urządzenia CDAP nie są obecnie połączone. Urządzenia pojawią się tutaj po połączeniu z bramą.", + "gateway_disabled": "Brama CDAP wyłączona", + "gateway_disabled_desc": "Włącz bramę CDAP ustawiając CDAP_ENABLED=true w konfiguracji serwera.", + "gateway_active": "Aktywna", + "toggle_enable": "Włącz CDAP", + "toggle_disable": "Wyłącz CDAP", + "enabled_restart": "CDAP włączony. Wymagany restart serwera aby zastosować zmiany.", + "disabled_restart": "CDAP wyłączony. Wymagany restart serwera aby zastosować zmiany.", + "widgets": "widgetów", + "type_all": "Wszystkie", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agent OS", + "type_network": "Sieć", + "type_camera": "Kamera", + "type_custom": "Niestandardowe", + "active_alerts": "Aktywne alerty", + "alert_fired": "Alert wyzwolony", + "alert_cleared": "Alert wyczyszczony", + "no_alerts": "Brak aktywnych alertów", + "connect_terminal": "Połącz Terminal", + "table_search": "Szukaj...", + "just_now": "Przed chwilą", + "terminal_connecting": "Łączenie z urządzeniem...", + "terminal_disconnected": "Rozłączono", + "terminal_error": "Połączenie terminala nie powiodło się", + "linked_devices": "Powiązane urządzenia", + "link_device": "Powiąż urządzenie", + "unlink_device": "Odłącz", + "no_linked_devices": "Brak powiązanych urządzeń", + "unlink_confirm": "Czy na pewno chcesz odłączyć to urządzenie?", + "link_prompt": "Wprowadź Peer ID do powiązania z tym urządzeniem:", + "connect_desktop": "Połącz pulpit", + "connect_video": "Połącz strumień", + "connect_files": "Przeglądaj pliki", + "connect_audio": "Połącz audio", + "upload_file": "Wyślij", + "desktop_connecting": "Łączenie...", + "video_connecting": "Łączenie...", + "files_connecting": "Łączenie...", + "audio_connecting": "Łączenie...", + "audio_streaming": "Strumieniowanie", + "clipboard_in": "Schowek odebrany", + "clipboard_out": "Schowek wysłany", + "monitor_select": "Wybierz monitor", + "keyframe_request": "Żądaj klatki kluczowej", + "quality_auto": "Automatyczna jakość" + }, + "notifications": { + "title": "Powiadomienia", + "empty": "Brak nowych powiadomień", + "mark_all_read": "Oznacz wszystkie jako przeczytane", + "see_all": "Zobacz wszystkie prośby o pomoc", + "help_request": "Prośba o pomoc", + "just_now": "przed chwilą" + }, + "desktop": { + "switch_mode": "Tryb pulpitu", + "console_mode": "Tryb konsoli", + "loading": "Ładowanie...", + "minimize": "Minimalizuj", + "maximize": "Maksymalizuj", + "restore": "Przywróć", + "close": "Zamknij", + "widgets_mode": "Widżety", + "windows_mode": "Okna", + "wallpaper": "Tapeta", + "add_widget": "Dodaj widżet", + "remove_widget": "Usuń widżet", + "pop_out_widget": "Wysuń", + "pop_in_widget": "Przywróć", + "configure": "Konfiguruj", + "search_widgets": "Szukaj widżetów...", + "cat_monitoring": "Monitoring", + "cat_devices": "Urządzenia", + "cat_tools": "Narzędzia", + "cat_general": "Ogólne", + "notes_placeholder": "Pisz notatki tutaj...", + "search_placeholder": "Szukaj urządzeń, stron, ustawień...", + "search_pages": "Strony", + "search_devices": "Urządzenia", + "search_no_results": "Brak wyników", + "exit_desktop": "Wyjdź z trybu pulpitu", + "refresh": "Odśwież", + "fullscreen": "Pełny ekran", + "help": "Pomoc", + "widget_clock": "Zegar", + "widget_device_status": "Status urządzeń", + "widget_server_health": "Info serwera", + "widget_system_stats": "Wskaźniki urządzeń", + "widget_device_list": "Lista urządzeń", + "widget_quick_actions": "Szybkie akcje", + "widget_recent_activity": "Ostatnia aktywność", + "widget_notes": "Notatki", + "widget_network_monitor": "Monitor sieci", + "widget_tickets_summary": "Zgłoszenia", + "widget_iframe": "Strona web", + "widget_cdap_devices": "Urządzenia CDAP", + "widget_uptime": "Czas działania", + "widget_port_status": "Status portów", + "widget_device_grid": "Siatka urządzeń", + "widget_multi_gauge": "Wskaźniki serwera", + "widget_weekly_chart": "Aktywność tygodniowa", + "widget_quick_controls": "Szybka kontrola", + "widget_bandwidth": "Przepustowość", + "widget_connection_stats": "Statystyki połączeń", + "widget_weather": "Pogoda", + "widget_world_clock": "Zegar światowy", + "widget_bookmarks": "Zakładki", + "widget_user_sessions": "Sesje użytkowników", + "widget_alert_feed": "Alerty", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Razem", + "label_blocked": "Zablokowane", + "label_banned": "Zbanowane", + "label_active": "Aktywne", + "label_service": "Usługa", + "label_port": "Port", + "label_uptime_prefix": "Czas działania:", + "label_uptime": "Czas działania", + "label_no_devices": "Brak urządzeń", + "label_no_activity": "Brak aktywności", + "label_no_targets": "Brak celów", + "label_unavailable": "Niedostępne", + "label_open": "Otwarte", + "label_in_progress": "W toku", + "label_resolved": "Rozwiązane", + "label_set_url": "Ustaw URL w konfiguracji", + "label_server_uptime": "Czas działania serwera", + "label_merged_info": "Scalono z widgetem Info serwera", + "label_with_notes": "Z notatkami", + "label_metric": "Metryka", + "label_count": "Liczba", + "label_total_devices": "Razem urządzeń", + "label_throughput": "Przepustowość", + "label_active_relays": "Aktywne przekaźniki", + "label_total_relayed": "Razem przekazane", + "label_total_bytes": "Razem bajtów", + "label_filter_devices": "Filtruj urządzenia...", + "label_all": "Wszystkie", + "label_ban": "Zbanuj", + "label_unban": "Odbanuj", + "label_connect": "Połącz", + "label_no_cdap_devices": "Brak urządzeń CDAP", + "action_add_widget": "Dodaj widget", + "label_merged_server_info": "Scalono z widgetem Info serwera", + "wp_images": "Obrazy", + "wp_colors": "Kolory", + "wp_custom_color": "Własny kolor", + "wp_fit_style": "Styl", + "wp_fill": "Wypełnij", + "wp_fit": "Dopasuj", + "wp_stretch": "Rozciągnij", + "wp_center": "Wyśrodkuj", + "wp_unavailable": "Obrazy tapet nie są zainstalowane na tym serwerze.", + "wp_download_hint": "Umieść pliki PNG w katalogu public/wallpapers/ aby włączyć wybór tapety.", + "widget_calendar": "Kalendarz", + "widget_process_monitor": "Monitor procesów", + "widget_disk_usage": "Użycie dysku", + "widget_log_viewer": "Przeglądarka logów", + "widget_speed_test": "Test prędkości", + "widget_database_stats": "Statystyki bazy", + "widget_docker_containers": "Kontenery Docker", + "widget_shell_command": "Polecenie powłoki", + "widget_device_map": "Mapa urządzeń", + "widget_remote_connect": "Zdalne połączenie", + "label_no_online": "Brak urządzeń online", + "label_no_events": "Brak wydarzeń na dziś", + "label_event_title": "Tytuł wydarzenia:", + "label_no_data": "Brak danych", + "label_download_speed": "Prędkość pobierania", + "label_latency": "Opóźnienie", + "label_server": "Serwer", + "label_run_test": "Uruchom test", + "label_testing": "Testowanie...", + "label_table": "Tabela", + "label_rows": "Wiersze", + "label_last_backup": "Ostatni backup", + "label_no_containers": "Brak kontenerów", + "label_docker_unavailable": "Docker niedostępny", + "label_no_command": "Brak skonfigurowanego polecenia", + "label_no_output": "Brak wyniku", + "label_run": "Uruchom", + "label_presets": "Szablony", + "label_save_preset": "Zapisz szablon", + "label_load_preset": "Wczytaj szablon", + "label_preset_name": "Nazwa szablonu:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimalny", + "label_preset_developer": "Deweloper", + "label_snap_layout": "Układ przyciągania", + "label_auto_arrange": "Automatyczne rozmieszczenie", + "label_zone_layout": "Układ stref", + "label_2col_equal": "2 kolumny (równe)", + "label_2col_wide": "2 kolumny (60/40)", + "label_3col": "3 kolumny", + "label_2x2_grid": "Siatka 2×2", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Grupa widżetów", + "ungroup_widgets": "Rozgrupuj widżety", + "group_widgets": "Grupuj wybrane widżety", + "snap_layouts": "Układy przyciągania", + "snap_left": "Przyciągnij w lewo", + "snap_right": "Przyciągnij w prawo", + "snap_top_left": "Przyciągnij lewy górny", + "snap_top_right": "Przyciągnij prawy górny", + "snap_bottom_left": "Przyciągnij lewy dolny", + "snap_bottom_right": "Przyciągnij prawy dolny", + "aero_shake": "Potrząśnij aby zminimalizować inne", + "zone_resize": "Przeciągnij granicę aby zmienić rozmiar stref", + "zone_borders": "Przeciągane granice stref", + "app_drawer": "Aplikacje", + "search_apps": "Szukaj aplikacji...", + "edit_shortcuts": "Edytuj skróty", + "widgets": "Widżety", + "theme": "Motyw" + }, + "desktop_login": { + "click_to_sign_in": "Kliknij lub naciśnij klawisz, aby się zalogować", + "username_placeholder": "Nazwa użytkownika", + "password_placeholder": "Hasło", + "sign_in": "Zaloguj się", + "verify": "Zweryfikuj", + "totp_title": "Uwierzytelnianie dwuskładnikowe", + "totp_subtitle": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", + "back_to_login": "Powrót do logowania", + "fill_all_fields": "Wypełnij wszystkie pola", + "invalid_credentials": "Nieprawidłowa nazwa użytkownika lub hasło", + "invalid_code": "Nieprawidłowy kod weryfikacyjny", + "enter_6_digits": "Wprowadź wszystkie 6 cyfr", + "network_error": "Błąd sieci — sprawdź połączenie", + "session_expired": "Sesja wygasła. Zaloguj się ponownie." + }, + "permissions": { + "title": "Uprawnienia", + "subtitle": "Zarządzaj uprawnieniami ról i niestandardowymi nadpisaniami", + "info_title": "Jak działają uprawnienia", + "info_desc": "Każda rola ma domyślne uprawnienia. Możesz dodawać lub usuwać poszczególne uprawnienia dla każdej roli, przełączając je poniżej. Niestandardowe nadpisania są podświetlone i mogą być w każdej chwili przywrócone do domyślnych.", + "select_role": "Wybierz rolę", + "select_role_placeholder": "Wybierz rolę...", + "reset_overrides": "Resetuj nadpisania", + "granted": "Przyznane", + "overrides": "Nadpisania", + "level": "Poziom", + "super_admin_tag": "Pełny dostęp", + "server_level_tag": "Poziom serwera", + "custom": "Własne", + "default": "Domyślne", + "revert": "Przywróć domyślne", + "saved": "Uprawnienie zaktualizowane", + "reverted": "Przywrócono domyślne", + "all_reverted": "Wszystkie nadpisania przywrócone", + "confirm_reset": "Zresetować wszystkie niestandardowe nadpisania dla tej roli?", + "empty_title": "Wybierz rolę", + "empty_desc": "Wybierz rolę z listy powyżej, aby przeglądać i zarządzać jej uprawnieniami.", + "locked_title": "Super Admin", + "locked_desc": "Super Admin ma domyślnie wszystkie uprawnienia i nie można ich dostosowywać.", + "cat_device": "Urządzenia", + "cat_user": "Użytkownicy", + "cat_server": "Serwer", + "cat_org": "Organizacje", + "cat_audit": "Audyt i monitoring", + "cat_cdap": "CDAP", + "cat_enrollment": "Rejestracja", + "cat_chat": "Czat", + "cat_branding": "Branding", + "perm_device_view": "Przeglądanie urządzeń", + "perm_device_connect": "Łączenie z urządzeniami", + "perm_device_edit": "Edycja urządzeń", + "perm_device_delete": "Usuwanie urządzeń", + "perm_device_ban": "Banowanie / odbanowanie urządzeń", + "perm_device_change_id": "Zmiana ID urządzenia", + "perm_user_view": "Przeglądanie użytkowników", + "perm_user_create": "Tworzenie użytkowników", + "perm_user_edit": "Edycja użytkowników", + "perm_user_delete": "Usuwanie użytkowników", + "perm_server_config": "Konfiguracja serwera", + "perm_server_keys": "Zarządzanie kluczami API", + "perm_server_attestation": "Atest wydajności serwera", + "perm_org_create": "Tworzenie organizacji", + "perm_org_edit": "Edycja organizacji", + "perm_org_delete": "Usuwanie organizacji", + "perm_org_manage_users": "Zarządzanie użytkownikami organizacji", + "perm_org_manage_devices": "Zarządzanie urządzeniami organizacji", + "perm_audit_view": "Przeglądanie logów audytu", + "perm_metrics_view": "Przeglądanie metryk", + "perm_blocklist_edit": "Edycja listy zablokowanych", + "perm_cdap_view": "Przeglądanie urządzeń CDAP", + "perm_cdap_command": "Wysyłanie komend CDAP", + "perm_cdap_terminal": "Dostęp do terminala CDAP", + "perm_cdap_files": "Dostęp do plików CDAP", + "perm_enrollment_manage": "Zarządzanie rejestracją", + "perm_enrollment_approve": "Zatwierdzanie rejestracji", + "perm_chat_access": "Dostęp do czatu", + "perm_branding_edit": "Edycja brandingu" + }, + "tokens": { + "title": "Tokeny urządzeń", + "subtitle": "Zarządzaj tokenami rejestracji do automatycznego wdrażania urządzeń", + "enrollment_mode": "Tryb rejestracji", + "mode_open": "Otwarty", + "mode_open_desc": "Każde urządzenie może się zarejestrować bez tokenu", + "mode_managed": "Zarządzany", + "mode_managed_desc": "Urządzenia potrzebują tokenu lub zatwierdzenia operatora do rejestracji", + "mode_locked": "Zablokowany", + "mode_locked_desc": "Tylko urządzenia z ważnym tokenem mogą się zarejestrować", + "total": "Łącznie tokenów", + "active": "Aktywne", + "used": "Wykorzystane", + "revoked": "Unieważnione", + "search_placeholder": "Szukaj tokenów...", + "status_pending": "Oczekujący", + "status_active": "Aktywny", + "status_used": "Wykorzystany", + "status_revoked": "Unieważniony", + "status_expired": "Wygasły", + "bulk_generate": "Generuj masowo", + "create": "Utwórz token", + "edit": "Edytuj token", + "token": "Prefiks tokenu", + "name": "Nazwa", + "status": "Status", + "uses": "Użycia", + "bound_peer": "Przypisane urządzenie", + "expires": "Wygasa", + "created": "Utworzono", + "actions": "Akcje", + "name_placeholder": "np. Komputery biurowe", + "max_uses": "Maksymalna liczba użyć", + "max_uses_hint": "0 = bez limitu", + "expires_in": "Wygasa za", + "no_expiration": "Bez wygaśnięcia", + "expires_1h": "1 godzina", + "expires_24h": "24 godziny", + "expires_7d": "7 dni", + "expires_30d": "30 dni", + "note": "Notatka", + "note_placeholder": "Opcjonalna notatka o tym tokenie...", + "count": "Ilość", + "count_range": "Liczba tokenów do wygenerowania (1-100)", + "name_prefix": "Prefiks nazwy", + "generate": "Generuj", + "token_created": "Token utworzony", + "tokens_generated": "Tokeny wygenerowane", + "copy_warning": "Skopiuj token teraz. Nie będzie pokazany ponownie.", + "copy_token": "Kopiuj token", + "copied": "Skopiowano!", + "revoke": "Unieważnij", + "revoke_confirm": "Czy na pewno chcesz unieważnić ten token? Urządzenia już zarejestrowane za jego pomocą nie zostaną dotknięte.", + "revoked_success": "Token został unieważniony", + "no_tokens": "Nie znaleziono tokenów", + "expired": "Wygasły", + "never": "Nigdy", + "save": "Zapisz", + "cancel": "Anuluj", + "unlimited": "Bez limitu" + }, + "tutorial": { + "next": "Dalej", + "prev": "Wstecz", + "skip": "Pomiń", + "finish": "Zakończ", + "close": "Zamknij", + "step_of": "{current} z {total}", + "console_sidebar_title": "Pasek nawigacji", + "console_sidebar_text": "Dostęp do wszystkich modułów. Kliknij dowolną ikonę, aby przejść do sekcji. Pasek dostosowuje się do rozmiaru ekranu.", + "console_expand_title": "Rozwiń pasek boczny", + "console_expand_text": "Kliknij tutaj, aby rozwinąć pasek boczny i zobaczyć pełne etykiety. Kliknij ponownie, aby zwinąć.", + "console_search_title": "Szybkie wyszukiwanie", + "console_search_text": "Wyszukuj urządzenia, ustawienia lub akcje. Skrót klawiszowy: Ctrl+K.", + "console_dashboard_title": "Pulpit", + "console_dashboard_text": "Twoje centrum dowodzenia pokazujące status serwera, urządzenia online i szybkie akcje. Monitoruj ważne wskaźniki na pierwszy rzut oka.", + "console_devices_title": "Zarządzanie urządzeniami", + "console_devices_text": "Przeglądaj, wyszukuj i zarządzaj podłączonymi urządzeniami. Filtruj według statusu, przypisuj tagi i konfiguruj ustawienia.", + "console_settings_title": "Ustawienia", + "console_settings_text": "Konfiguruj zachowanie serwera, opcje bezpieczeństwa, branding i zarządzanie użytkownikami. Dostosuj BetterDesk do swoich potrzeb.", + "console_desktop_title": "Tryb pulpitu", + "console_desktop_text": "Przełącz na tryb pulpitu z przestrzenią roboczą opartą na oknach i widgetach. Idealny do wielozadaniowości i monitoringu.", + "console_complete_title": "Gotowe!", + "console_complete_text": "Odkrywaj kategorie paska bocznego, aby poznać wszystkie funkcje. Kliknij ikonę Pomoc, aby uruchomić poradnik ponownie.", + "desktop_topbar_title": "Górny pasek", + "desktop_topbar_text": "Górny pasek pokazuje zegar, szybkie kontrolki i dostęp do szuflady aplikacji. Kliknij ikonę siatki, aby przeglądać wszystkie aplikacje.", + "desktop_drawer_title": "Szuflada aplikacji", + "desktop_drawer_text": "Otwórz szufladę aplikacji, aby wyszukać i uruchomić dowolną funkcję konsoli w pływającym oknie. Aplikacje posortowane są według kategorii.", + "desktop_widgets_title": "Panel widgetów", + "desktop_widgets_text": "Twoja konfigurowalna przestrzeń robocza. Widgety wyświetlają informacje na żywo i zapewniają szybki dostęp do funkcji. Przeciągnij, aby zmienić układ.", + "desktop_add_widget_title": "Dodaj widgety", + "desktop_add_widget_text": "Kliknij tutaj, aby przeglądać dostępne widgety. Wybierz spośród monitorów, list urządzeń, notatek i innych.", + "desktop_taskbar_title": "Pasek zadań", + "desktop_taskbar_text": "Otwarte aplikacje pojawiają się tutaj. Kliknij, aby fokusować lub minimalizować okna. Najedź na ikony, aby zobaczyć nazwy.", + "desktop_snap_title": "Układy Snap", + "desktop_snap_text": "Przeciągnij okna do krawędzi ekranu, aby je przyciągnąć, lub najedź na przycisk maksymalizacji, aby zobaczyć gotowe układy. Spróbuj Aero Shake!", + "desktop_windows_title": "Okna aplikacji", + "desktop_windows_text": "Aplikacje otwierają się w przeciągalnych, skalowalnych oknach. Minimalizuj, maksymalizuj lub zamykaj z paska tytułu. Okna są nad widgetami.", + "desktop_search_title": "Szybkie wyszukiwanie", + "desktop_search_text": "Szukaj urządzeń, stron i ustawień. Naciśnij Ctrl+K w dowolnym miejscu, aby otworzyć wyszukiwarkę.", + "desktop_complete_title": "Tryb pulpitu gotowy!", + "desktop_complete_text": "Spróbuj otwierać aplikacje z szuflady i układać okna obok siebie. Użyj presetów widgetów do szybkiego ustawiania pulpitu.", + "devices_folders_title": "Foldery urządzeń", + "devices_folders_text": "Organizuj urządzenia w folderach. Kliknij folder, aby filtrować listę. Kliknij prawym przyciskiem, aby zmienić nazwę lub usunąć.", + "devices_search_title": "Wyszukiwanie i filtrowanie", + "devices_search_text": "Szukaj po ID, nazwie hosta lub platformie. Użyj przycisków statusu, aby wyświetlić tylko online, offline lub wszystkie.", + "devices_table_title": "Lista urządzeń", + "devices_table_text": "Kliknij wiersz urządzenia, aby zobaczyć szczegóły. Menu kebab po prawej umożliwia szybkie akcje: połącz, edytuj tagi lub usuń.", + "devices_complete_title": "Zarządzanie urządzeniami gotowe!", + "devices_complete_text": "Przeciągnij urządzenia między folderami, aby je organizować. Kliknij dwukrotnie urządzenie, aby otworzyć panel szczegółów.", + "settings_tabs_title": "Kategorie ustawień", + "settings_tabs_text": "Przełączaj między sekcjami: Ogólne, Bezpieczeństwo, Wygląd i inne konfiguracje.", + "settings_content_title": "Konfiguracja", + "settings_content_text": "Każda sekcja zawiera konkretne ustawienia serwera i konsoli. Zmiany są zapisywane po kliknięciu Zapisz.", + "settings_complete_title": "Przegląd ustawień", + "settings_complete_text": "Sprawdź ustawienia Bezpieczeństwa dla 2FA, kluczy API i zarządzania użytkownikami. Odwiedź Wygląd, aby dostosować wygląd konsoli.", + "help": "Pomoc i samouczki", + "tour_console": "Przewodnik po konsoli", + "tour_desktop": "Przewodnik po trybie pulpitu", + "tour_devices": "Przewodnik po urządzeniach", + "tour_settings": "Przewodnik po ustawieniach", + "reset_all": "Resetuj wszystkie samouczki", + "disable_tutorials": "Wyłącz samouczki", + "enable_tutorials": "Włącz samouczki", + "tour_remote": "Przewodnik po sesji zdalnej", + "tour_organization": "Konfiguracja organizacji", + "tour_cdap": "Przegląd CDAP", + "tour_chat": "Podstawy czatu", + "remote_toolbar_title": "Pasek narzędzi sesji zdalnej", + "remote_toolbar_text": "Pasek narzędzi daje dostęp do sterowania ekranem, synchronizacji schowka, klawiszy specjalnych i ustawień jakości. Tryb pełnoekranowy przełączysz klawiszem F11.", + "remote_canvas_title": "Ekran zdalny", + "remote_canvas_text": "To jest ekran zdalnego urządzenia. Kliknij w jego obszar, aby rozpocząć sterowanie. Ruch myszy i klawiatura są przekazywane automatycznie.", + "remote_clipboard_title": "Synchronizacja schowka", + "remote_clipboard_text": "Kopiuj i wklejaj tekst między swoim komputerem a urządzeniem zdalnym. Używaj Ctrl+C / Ctrl+V normalnie, gdy fokus jest na ekranie zdalnym.", + "remote_complete_title": "Sesja zdalna gotowa!", + "remote_complete_text": "Używaj przycisków na pasku narzędzi do klawiszy specjalnych (Ctrl+Alt+Del, PrintScreen) i przełączania monitorów. Naciśnij Escape albo kliknij Rozłącz, aby zakończyć sesję.", + "org_overview_title": "Organizacje", + "org_overview_text": "Organizacje pozwalają grupować użytkowników, urządzenia i polityki. Każda organizacja ma własnego administratora, operatorów i ustawienia.", + "org_create_title": "Utwórz organizację", + "org_create_text": "Kliknij tutaj, aby utworzyć nową organizację. Podaj nazwę, identyfikator URL i opcjonalny opis. Zostaniesz właścicielem nowej organizacji.", + "org_members_title": "Zarządzaj członkami", + "org_members_text": "Zaproś użytkowników przez e-mail, przypisz role (admin, operator, użytkownik) i zarządzaj dostępem. Członkowie widzą urządzenia przypisane do swojej organizacji.", + "org_devices_title": "Przypisz urządzenia", + "org_devices_text": "Dodaj urządzenia do organizacji. Przypisane tutaj urządzenia odziedziczą polityki organizacji i będą widoczne dla jej członków.", + "org_policies_title": "Polityki organizacji", + "org_policies_text": "Ustaw polityki bezpieczeństwa organizacji, takie jak wymagania haseł, limity czasu sesji, wymuszanie 2FA i reguły rejestracji urządzeń.", + "org_complete_title": "Konfiguracja organizacji zakończona!", + "org_complete_text": "Zaproś zespół i przypisz urządzenia, aby zacząć korzystać z zarządzania w zakresie organizacji. Polityki zastosują się automatycznie do wszystkich członków.", + "cdap_devices_title": "Urządzenia CDAP", + "cdap_devices_text": "Zobacz wszystkie połączone urządzenia CDAP — czujniki IoT, sterowniki PLC, mosty i niestandardowe agenty. Zielone wskaźniki pokazują aktywne połączenia.", + "cdap_widgets_title": "Panel widgetów", + "cdap_widgets_text": "Widgety pokazują dane z urządzeń w czasie rzeczywistym. Wskaźniki, przełączniki, diody LED i wykresy wizualizują różne typy danych.", + "cdap_commands_title": "Wysyłanie poleceń", + "cdap_commands_text": "Wchodź w interakcję z urządzeniami, wysyłając polecenia. Niektóre polecenia wymagają potwierdzenia. Dziennik poleceń przechowuje historię wszystkich wysłanych poleceń.", + "cdap_terminal_title": "Terminal urządzenia", + "cdap_terminal_text": "Otwórz sesję terminala do agentów CDAP, aby wykonać zaawansowaną diagnostykę lub ręczną konfigurację. Wpisuj polecenia bezpośrednio.", + "cdap_complete_title": "Przegląd CDAP zakończony!", + "cdap_complete_text": "Przeglądaj widgety urządzeń, wysyłaj polecenia i korzystaj z terminala lub przeglądarki plików do głębszego zarządzania. Agenci CDAP automatycznie raportują metryki.", + "chat_contacts_title": "Kontakty i grupy", + "chat_contacts_text": "Zobacz kontakty i grupy czatu. Kliknij dowolny kontakt, aby otworzyć rozmowę. Zielone kropki oznaczają użytkowników online.", + "chat_send_title": "Wysyłanie wiadomości", + "chat_send_text": "Wpisz wiadomość i naciśnij Enter, aby ją wysłać. Wiadomości są szyfrowane end-to-end, gdy obie strony obsługują E2E.", + "chat_file_title": "Udostępnianie plików", + "chat_file_text": "Kliknij ikonę załącznika, aby udostępnić pliki. Pliki są szyfrowane i mogą mieć do 50 MB.", + "chat_complete_title": "Czat gotowy!", + "chat_complete_text": "Rozmawiaj z operatorami i użytkownikami końcowymi w czasie rzeczywistym. Twórz grupy do komunikacji zespołowej. Wszystkie wiadomości obsługują potwierdzenia odczytu." + }, + "help_request": { + "title": "Prośby o pomoc", + "subtitle": "Zarządzaj prośbami o pomoc z klientów desktopowych", + "new_request": "Nowa prośba o pomoc", + "device": "Urządzenie", + "hostname": "Nazwa hosta", + "message": "Wiadomość", + "status": "Status", + "pending": "Oczekująca", + "accepted": "Zaakceptowana", + "resolved": "Rozwiązana", + "accept": "Akceptuj", + "resolve": "Rozwiąż", + "no_requests": "Brak próśb o pomoc", + "notification": "Prośba o pomoc od", + "stats_total": "Łącznie", + "filter_all": "Wszystkie" + }, + "organizations": { + "title": "Organizacje", + "create": "Utwórz organizację", + "edit": "Edytuj organizację", + "detail": "Szczegóły organizacji", + "name": "Nazwa", + "slug": "Identyfikator (URL)", + "logo_url": "URL logo", + "users": "Użytkownicy", + "devices": "Urządzenia", + "invitations": "Zaproszenia", + "settings": "Ustawienia", + "add_user": "Dodaj użytkownika", + "assign_device": "Przypisz urządzenie", + "create_invitation": "Utwórz zaproszenie", + "delete_confirm": "Usunąć tę organizację? Zostaną usunięci wszyscy powiązani użytkownicy, urządzenia i ustawienia.", + "no_orgs": "Brak organizacji", + "no_orgs_hint": "Utwórz pierwszą organizację, aby rozpocząć zarządzanie urządzeniami i użytkownikami.", + "connection_policy": "Polityka połączeń", + "allow_file_transfer": "Zezwól na transfer plików", + "allow_clipboard": "Zezwól na schowek", + "max_session_duration": "Maks. czas sesji (min)", + "role_owner": "Właściciel", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Członek", + "username": "Nazwa użytkownika", + "password": "Hasło", + "display_name": "Nazwa wyświetlana", + "email": "Email", + "role": "Rola", + "last_login": "Ostatnie logowanie", + "actions": "Akcje", + "device_id": "ID urządzenia", + "department": "Dział", + "building": "Budynek", + "location": "Lokalizacja", + "assigned_user": "Przypisany użytkownik", + "token": "Token", + "expires": "Wygasa", + "used": "Użyto", + "no_users": "Brak użytkowników w tej organizacji.", + "no_devices": "Brak urządzeń przypisanych do tej organizacji.", + "no_invitations": "Brak zaproszeń.", + "user_added": "Użytkownik dodany", + "user_removed": "Użytkownik usunięty", + "user_updated": "Rola użytkownika zaktualizowana", + "device_assigned": "Urządzenie przypisane", + "device_unassigned": "Urządzenie odłączone", + "invitation_created": "Zaproszenie utworzone", + "settings_saved": "Ustawienia zapisane", + "org_deleted": "Organizacja usunięta", + "confirm_remove_user": "Usunąć tego użytkownika z organizacji?", + "confirm_unassign_device": "Odłączyć to urządzenie od organizacji?", + "confirm_delete_org": "Usunąć tę organizację i wszystkie powiązane dane?", + "edit_role": "Zmień rolę", + "raw_settings": "Surowe ustawienia", + "key": "Klucz", + "value": "Wartość", + "save": "Zapisz ustawienia", + "policy_unattended": "Bez nadzoru (natychmiast)", + "policy_attended": "Z potwierdzeniem", + "policy_ask": "Zawsze pytaj", + "expires_hours": "Wygaśnięcie (godziny)", + "loading_failed": "Nie udało się załadować danych organizacji", + "name_slug_required": "Nazwa i slug są wymagane", + "org_created": "Organizacja utworzona", + "org_updated": "Organizacja zaktualizowana", + "create_new_user": "Utwórz nowego", + "add_existing_user": "Dodaj istniejącego", + "none_available": "brak", + "select_user": "Wybierz użytkownika", + "org_role": "Rola w organizacji", + "link_user_hint": "Wybrany użytkownik zostanie powiązany z tą organizacją przy użyciu danych jego konta serwerowego.", + "no_available_users": "Wszyscy użytkownicy serwera są już powiązani z tą organizacją.", + "user_linked": "Użytkownik powiązany z organizacją" + }, + "chat": { + "e2e_enabled": "Szyfrowanie end-to-end", + "e2e_establishing": "Nawiązywanie bezpiecznego kanału...", + "e2e_established": "Bezpieczny kanał nawiązany", + "e2e_unsupported": "Szyfrowanie E2E nie jest obsługiwane w tej przeglądarce", + "typing_indicator": "pisze...", + "read_receipt": "Przeczytano", + "delivered": "Dostarczono", + "file_share": "Plik", + "file_too_large": "Plik za duży (maks. 50MB)", + "file_encrypted": "Szyfrowany transfer pliku", + "presence_online": "Online", + "presence_away": "Zaraz wracam", + "presence_busy": "Zajęty", + "presence_offline": "Offline", + "key_rotation": "Klucze bezpieczeństwa odnowione", + "new_message": "Nowa wiadomość", + "title": "Czat", + "contacts": "Kontakty", + "groups": "Grupy", + "no_contacts": "Brak kontaktów", + "no_groups": "Brak grup", + "no_messages": "Brak wiadomości", + "no_results": "Brak wyników", + "select_conversation": "Wybierz rozmowę aby rozpocząć czat", + "select_conversation_hint": "Wybierz rozmowę, aby wyświetlić wiadomości", + "type_message": "Wpisz wiadomość...", + "send": "Wyślij", + "attach_file": "Dołącz plik", + "emoji": "Emoji", + "info": "Informacje", + "search_messages": "Szukaj wiadomości", + "create_group": "Utwórz grupę", + "group_name": "Nazwa grupy", + "group_name_placeholder": "Wpisz nazwę grupy", + "group_members": "Członkowie", + "cancel": "Anuluj", + "create": "Utwórz", + "members": "członków", + "today": "Dzisiaj", + "yesterday": "Wczoraj", + "react": "Reaguj", + "my_presence": "Mój status", + "search_placeholder": "Szukaj kontaktów i wiadomości" + }, + "toast": { + "device_connected": "Urządzenie połączone", + "device_disconnected": "Urządzenie rozłączone", + "session_started": "Sesja zdalna rozpoczęta", + "session_ended": "Sesja zdalna zakończona", + "file_upload_complete": "Przesyłanie pliku zakończone", + "settings_saved": "Ustawienia zapisane", + "error_generic": "Wystąpił błąd", + "connection_lost": "Utracono połączenie", + "reconnecting": "Ponowne łączenie..." + }, + "theme": { + "dark": "Ciemny", + "light": "Jasny", + "auto": "Systemowy", + "title": "Motyw" + }, + "days": { + "mon": "Pon", + "tue": "Wt", + "wed": "Śr", + "thu": "Czw", + "fri": "Pt", + "sat": "Sob", + "sun": "Ndz" + }, + "toolkit": { + "title": "Narzędziownik", + "subtitle": "Narzędzia administracyjne i diagnostyczne", + "cat_network": "Sieć", + "cat_crypto": "Kryptografia", + "cat_encoding": "Kodowanie", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domena", + "run": "Uruchom", + "generate": "Generuj", + "encode": "Koduj", + "decode": "Dekoduj", + "send": "Wyślij", + "refresh": "Odśwież", + "algorithm": "Algorytm", + "input_text": "Tekst wejściowy", + "enter_text": "Wpisz tekst...", + "length": "Długość", + "options": "Opcje", + "source": "Źródło", + "lines": "Linie", + "log_console": "Konsola", + "log_go": "Serwer Go", + "mac_address": "Adres MAC", + "broadcast": "Adres rozgłoszeniowy", + "ping_title": "Ping", + "ping_desc": "Sprawdź dostępność hosta i opóźnienie", + "tcp_title": "Test portu TCP", + "tcp_desc": "Testuj łączność portu TCP", + "ssl_title": "Inspektor SSL", + "ssl_desc": "Sprawdź szczegóły certyfikatu SSL/TLS", + "http_title": "Kontrola stanu HTTP", + "http_desc": "Zweryfikuj status endpointu HTTP", + "dns_title": "Wyszukiwanie DNS", + "dns_desc": "Rozwiąż nazwę hosta na adres IP", + "whois_title": "Rekordy DNS", + "whois_desc": "Odpytaj rekordy A, AAAA, MX, TXT, NS", + "speed_title": "Test prędkości", + "speed_desc": "Zmierz przepustowość pobierania", + "run_speed_test": "Uruchom test prędkości", + "wol_title": "Wake-on-LAN", + "wol_desc": "Wyślij pakiet magiczny aby obudzić urządzenie", + "wol_sent": "Pakiet magiczny wysłany", + "hash_title": "Generator hashy", + "hash_desc": "Generuj hashe kryptograficzne", + "password_title": "Generator haseł", + "password_desc": "Generuj bezpieczne losowe hasło", + "jwt_title": "Dekoder JWT", + "jwt_desc": "Dekoduj i sprawdź tokeny JSON Web", + "jwt_token": "Token JWT", + "base64_title": "Base64", + "base64_desc": "Koduj lub dekoduj dane Base64", + "url_title": "Koder URL", + "url_desc": "Koduj lub dekoduj komponenty URL", + "processes_title": "Lista procesów", + "processes_desc": "Wyświetl uruchomione procesy systemowe", + "disk_title": "Użycie dysku", + "disk_desc": "Wyświetl użycie partycji dyskowych", + "db_title": "Statystyki bazy danych", + "db_desc": "Wyświetl statystyki tabel bazy danych", + "docker_title": "Kontenery Docker", + "docker_desc": "Wyświetl uruchomione kontenery Docker", + "logs_title": "Przeglądarka logów", + "logs_desc": "Wyświetl ostatnie wpisy logów", + "ip_address": "IP", + "latency": "Opóźnienie", + "ttl": "TTL", + "status": "Status", + "resolved": "Rozwiązano", + "subject": "Podmiot", + "issuer": "Wystawca", + "valid_from": "Ważny od", + "valid_to": "Ważny do", + "days_left": "Dni do wygaśnięcia", + "days": "dni", + "protocol": "Protokół", + "cipher": "Szyfr", + "alt_names": "Nazwy alternatywne", + "chain": "Łańcuch", + "record_type": "Typ", + "record_value": "Wartość", + "hash_value": "Hash", + "entropy": "Entropia", + "very_strong": "Bardzo silne", + "strong": "Silne", + "weak": "Słabe", + "expiry": "Wygaśnięcie", + "expired": "Wygasło", + "valid": "Ważny", + "process_name": "Nazwa", + "db_type": "Typ", + "db_size": "Rozmiar", + "table_name": "Tabela", + "row_count": "Wiersze", + "no_data": "Brak dostępnych danych", + "no_docker": "Nie znaleziono kontenerów Docker lub Docker niedostępny", + "no_logs": "Brak dostępnych wpisów logów" + }, + "policies": { + "title": "Polityki organizacji", + "subtitle": "Zarządzaj politykami bezpieczeństwa, połączeń i funkcji dla organizacji", + "select_org": "Organizacja", + "select_org_placeholder": "Wybierz organizację...", + "select_org_first": "Wybierz organizację, aby zobaczyć dziennik zmian polityk.", + "configured": "Skonfigurowano", + "connection_title": "Polityka połączeń", + "connection_desc": "Kontroluj sposób nawiązywania sesji zdalnych", + "connection_mode": "Tryb połączenia", + "mode_attended": "Z obsługą (wymaga zatwierdzenia użytkownika)", + "mode_unattended": "Bez obsługi (zawsze zezwalaj)", + "mode_ask": "Zawsze pytaj", + "max_session": "Maks. czas sesji (minuty)", + "idle_lock": "Blokada bezczynności (minuty)", + "wallpaper_policy": "Tapeta podczas sesji", + "wallpaper_show": "Pokaż", + "wallpaper_hide_session": "Ukryj podczas sesji", + "wallpaper_hide_always": "Zawsze ukrywaj", + "features_title": "Polityka funkcji", + "features_desc": "Włącz lub wyłącz określone funkcje dla urządzeń", + "allow_file_transfer": "Zezwól na przesyłanie plików", + "allow_clipboard": "Zezwól na synchronizację schowka", + "allow_audio": "Zezwól na strumieniowanie dźwięku", + "allow_recording": "Zezwól na nagrywanie sesji", + "security_title": "Polityka bezpieczeństwa", + "security_desc": "Wymuszaj wymagania bezpieczeństwa dla urządzeń organizacji", + "require_2fa": "Wymagaj 2FA dla dostępu bez obsługi", + "password_min_length": "Minimalna długość hasła", + "password_require_special": "Wymagaj znaków specjalnych", + "password_max_age": "Maks. wiek hasła (dni, 0=nigdy)", + "allowed_operators": "Dozwolone role operatorów (po przecinku)", + "network_title": "Polityka sieciowa", + "network_desc": "Kontroluj serwery relay i bezpośrednie połączenia", + "block_direct_p2p": "Blokuj bezpośrednie P2P (wymuszaj relay)", + "block_direct_p2p_hint": "Dotyczy urządzeń w tej organizacji. Domyślny tryb globalny ustawiasz w Ustawienia → Strategia połączeń.", + "allowed_relays": "Dozwolone serwery relay (po jednym w linii)", + "ip_allowlist": "Lista dozwolonych IP (CIDR, po jednym w linii)", + "update_title": "Polityka aktualizacji", + "update_desc": "Kontroluj automatyczne aktualizacje i kanały aktualizacji", + "auto_update": "Włącz automatyczne aktualizacje", + "update_channel": "Kanał aktualizacji", + "audit_title": "Zmiany polityk", + "audit_desc": "Historia ostatnich zmian polityk", + "no_audit": "Brak zarejestrowanych zmian polityk.", + "save_success": "Polityka zapisana pomyślnie", + "save_failed": "Nie udało się zapisać polityki", + "load_failed": "Nie udało się wczytać polityk" + }, + "attestation": { + "title": "Atestacja urządzeń", + "subtitle": "Monitoruj weryfikację tożsamości urządzeń i odciski sprzętowe", + "verified": "Zweryfikowane", + "pending": "Oczekujące", + "failed": "Nieudane", + "device_list": "Rekordy atestacji urządzeń", + "device_list_desc": "Odciski sprzętowe i status weryfikacji tożsamości", + "col_device": "ID urządzenia", + "col_hostname": "Nazwa hosta", + "col_fingerprint": "Odcisk", + "col_status": "Status", + "col_last_check": "Ostatnie sprawdzenie", + "col_actions": "Akcje", + "no_records": "Nie znaleziono rekordów atestacji.", + "verify_success": "Urządzenie oznaczone jako zweryfikowane", + "verify_failed": "Nie udało się zweryfikować urządzenia", + "revoke_success": "Atestacja urządzenia odwołana", + "revoke_failed": "Nie udało się odwołać atestacji" + }, + "fleet": { + "title": "Zarządzanie flotą", + "tab_resources": "Zasoby", + "tab_tasks": "Zadania", + "tab_builder": "Konstruktor", + "tab_compliance": "Zgodność", + "res_title": "Mapowanie zasobów", + "res_all_types": "Wszystkie typy", + "res_type_printer": "Drukarka", + "res_type_network_drive": "Dysk sieciowy", + "res_type_dns": "Serwer DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Dodaj zasób", + "res_name": "Nazwa zasobu", + "res_type": "Typ", + "res_address": "Adres / Ścieżka", + "res_target": "Cel", + "res_scope": "Zakres", + "res_scope_org": "Organizacja", + "res_scope_group": "Grupa", + "res_scope_device": "Urządzenie", + "res_scope_value": "Wartość zakresu", + "res_status": "Status", + "res_active": "Aktywny", + "res_inactive": "Nieaktywny", + "res_no_data": "Nie znaleziono zasobów. Kliknij 'Dodaj zasób', aby utworzyć.", + "res_confirm_delete": "Czy na pewno chcesz usunąć ten zasób?", + "task_title": "Harmonogram zadań", + "task_all_status": "Wszystkie statusy", + "task_status_pending": "Oczekujące", + "task_status_running": "W toku", + "task_status_success": "Sukces", + "task_status_failed": "Błąd", + "task_search": "Szukaj zadań…", + "task_create": "Utwórz zadanie", + "task_name": "Nazwa zadania", + "task_type": "Typ", + "task_type_script": "Skrypt", + "task_type_install": "Instalacja", + "task_type_update": "Aktualizacja", + "task_type_restart": "Ponowne uruchomienie", + "task_type_deploy": "Wdrożenie", + "task_type_scan": "Skan", + "task_targets": "Cele", + "task_targets_help": "ID urządzeń lub nazwy grup, oddzielone przecinkami", + "task_schedule": "Harmonogram", + "task_schedule_once": "Jednorazowo", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interwał", + "task_schedule_value": "Wartość harmonogramu", + "task_script": "Skrypt / Polecenie", + "task_retries": "Ponowienia", + "task_timeout": "Timeout (s)", + "task_last_run": "Ostatnie uruchomienie", + "task_no_data": "Nie znaleziono zadań. Kliknij 'Utwórz zadanie', aby rozpocząć.", + "task_confirm_delete": "Czy na pewno chcesz usunąć to zadanie?", + "task_output": "Wyjście zadania", + "task_retry": "Ponów", + "builder_title": "Konstruktor przepływów", + "builder_select_workflow": "Wybierz przepływ…", + "builder_new": "Nowy", + "builder_save": "Zapisz", + "builder_export": "Eksportuj", + "builder_execute": "Wykonaj", + "builder_dry_run": "Test", + "builder_triggers": "Wyzwalacze", + "builder_conditions": "Warunki", + "builder_actions": "Akcje", + "builder_results": "Wyniki", + "builder_transforms": "Transformacje", + "builder_properties": "Właściwości", + "builder_no_selection": "Wybierz węzeł, aby edytować jego właściwości.", + "workflow_name": "Nazwa przepływu:", + "comp_title": "Zgodność oprogramowania", + "comp_compliant": "Zgodne", + "comp_warning": "Ostrzeżenie", + "comp_critical": "Krytyczne", + "comp_score": "Śr. wynik", + "comp_device": "Urządzenie", + "comp_hostname": "Nazwa hosta", + "comp_os": "System", + "comp_score_col": "Wynik", + "comp_issues": "Problemy", + "comp_last_scan": "Ostatni skan", + "comp_scan": "Skanuj", + "comp_scan_all": "Skanuj wszystko", + "comp_remediate": "Napraw", + "comp_remediate_confirm": "Uruchomić auto-naprawę na tym urządzeniu?", + "comp_no_data": "Brak danych zgodności. Uruchom skan, aby rozpocząć.", + "save": "Zapisz", + "cancel": "Anuluj", + "close": "Zamknij", + "edit": "Edytuj", + "delete": "Usuń", + "actions": "Akcje", + "all_orgs": "Wszystkie organizacje", + "select_org_placeholder": "Wybierz organizację…", + "all_types": "Wszystkie typy", + "type_printer": "Drukarka", + "type_network_drive": "Dysk sieciowy", + "type_dns": "Serwer DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Dodaj zasób", + "edit_resource": "Edytuj zasób", + "col_name": "Nazwa", + "col_type": "Typ", + "col_target": "Cel", + "col_scope": "Zakres", + "col_status": "Status", + "col_actions": "Akcje", + "no_resources": "Nie znaleziono zasobów. Kliknij 'Dodaj zasób', aby utworzyć.", + "active": "Aktywny", + "inactive": "Nieaktywny", + "address": "Adres / Ścieżka", + "scope_org": "Organizacja", + "scope_group": "Grupa", + "scope_device": "Urządzenie", + "scope_value": "Wartość zakresu", + "scope_value_hint": "Nazwa organizacji, grupy lub ID urządzenia", + "confirm_delete": "Czy na pewno chcesz usunąć ten element?", + "all_statuses": "Wszystkie statusy", + "status_pending": "Oczekujące", + "status_running": "W toku", + "status_success": "Sukces", + "status_failed": "Błąd", + "search_tasks": "Szukaj zadań…", + "create_task": "Utwórz zadanie", + "edit_task": "Edytuj zadanie", + "col_task_name": "Nazwa zadania", + "col_task_type": "Typ", + "col_schedule": "Harmonogram", + "col_last_run": "Ostatnie uruchomienie", + "no_tasks": "Nie znaleziono zadań. Kliknij 'Utwórz zadanie', aby rozpocząć.", + "task_type_file_deploy": "Wdrożenie pliku", + "task_type_registry": "Rejestr", + "target_devices": "Urządzenia docelowe", + "target_hint": "ID urządzeń lub nazwy grup, oddzielone przecinkami", + "schedule_immediate": "Natychmiast", + "schedule_once": "Jednorazowo", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Skrypt / Polecenie", + "retry_count": "Ponowienia", + "timeout_sec": "Limit czasu (s)", + "loading": "Ładowanie", + "no_output": "Brak danych wyjściowych", + "error_loading": "Błąd ładowania danych", + "select_workflow": "Wybierz przepływ…", + "new_workflow": "Nowy", + "export": "Eksportuj", + "execute": "Wykonaj", + "dry_run": "Test", + "node_triggers": "Wyzwalacze", + "node_manual": "Ręczny wyzwalacz", + "node_schedule": "Harmonogram", + "node_event": "Wyzwalacz zdarzenia", + "node_conditions": "Warunki", + "node_os_check": "Sprawdzenie OS", + "node_threshold": "Próg", + "node_time_window": "Okno czasowe", + "node_actions": "Akcje", + "node_run_script": "Uruchom skrypt", + "node_install": "Zainstaluj oprogr.", + "node_restart": "Restart usługi", + "node_file_deploy": "Wdróż plik", + "node_send_message": "Wyślij wiadomość", + "node_results": "Wyniki", + "node_log_output": "Wyjście logów", + "node_send_alert": "Wyślij alert", + "node_chain": "Łańcuch przepływów", + "node_transforms": "Transformacje", + "node_parse_json": "Parsuj JSON", + "node_filter": "Filtruj", + "node_delay": "Opóźnienie", + "node_properties": "Właściwości", + "all_organizations": "Wszystkie organizacje", + "scan_all": "Skanuj wszystko", + "compliant": "Zgodne", + "non_compliant": "Ostrzeżenie", + "critical_issues": "Krytyczne", + "avg_score": "Śr. wynik", + "col_device": "Urządzenie", + "col_hostname": "Nazwa hosta", + "col_os": "System", + "col_score": "Wynik", + "col_issues": "Problemy", + "col_last_scan": "Ostatni skan", + "no_compliance_data": "Brak danych zgodności. Uruchom skan, aby rozpocząć.", + "confirm_remediate": "Uruchomić auto-naprawę na tym urządzeniu?", + "builder_node_trigger_manual": "Wyzwalacz ręczny", + "builder_node_trigger_schedule": "Harmonogram", + "builder_node_trigger_event": "Wyzwalacz zdarzenia", + "builder_node_cond_os": "Sprawdzenie systemu", + "builder_node_cond_threshold": "Próg", + "builder_node_cond_time_window": "Okno czasowe", + "builder_node_action_script": "Uruchom skrypt", + "builder_node_action_install": "Zainstaluj oprogramowanie", + "builder_node_action_restart": "Restart usługi", + "builder_node_action_file_deploy": "Wdróż plik", + "builder_node_action_message": "Wyślij wiadomość", + "builder_node_result_log": "Wyjście logów", + "builder_node_result_alert": "Wyślij alert", + "builder_node_result_chain": "Połącz z przepływem", + "builder_node_transform_parse": "Parsuj JSON", + "builder_node_transform_filter": "Filtruj", + "builder_node_transform_delay": "Opóźnienie" + }, + "scaling": { + "title": "Skalowanie i zarządzanie przekaźnikami", + "tab_overview": "Przegląd", + "tab_relays": "Węzły przekaźnikowe", + "tab_rules": "Reguły przypisania", + "tab_capacity": "Planowanie pojemności", + "arch_title": "Architektura sieci", + "arch_loading": "Ładowanie diagramu architektury...", + "stat_relay_nodes": "Węzły przekaźnikowe", + "stat_total_devices": "Łączna liczba urządzeń", + "stat_active_sessions": "Aktywne sesje", + "stat_bandwidth": "Całkowita przepustowość", + "relay_health": "Stan przekaźników", + "no_relays": "Brak skonfigurowanych węzłów przekaźnikowych. Dodaj pierwszy węzeł, aby rozkładać obciążenie.", + "relay_search": "Szukaj przekaźników...", + "relay_add": "Dodaj węzeł przekaźnikowy", + "relay_edit": "Edytuj węzeł przekaźnikowy", + "col_name": "Nazwa", + "col_address": "Adres", + "col_location": "Lokalizacja", + "col_devices": "Urządzenia", + "col_sessions": "Sesje", + "col_bandwidth": "Przepustowość", + "col_status": "Status", + "col_actions": "Akcje", + "col_priority": "Priorytet", + "col_rule_name": "Nazwa reguły", + "col_match": "Dopasowanie", + "col_target_relay": "Docelowy przekaźnik", + "col_fallback": "Zapasowy", + "status_online": "Online", + "status_degraded": "Pogorszony", + "status_offline": "Offline", + "status_enabled": "Włączony", + "status_disabled": "Wyłączony", + "confirm_delete_relay": "Czy na pewno chcesz usunąć ten węzeł przekaźnikowy?", + "confirm_delete_rule": "Czy na pewno chcesz usunąć tę regułę przypisania?", + "relays_info_banner": "Ta lista ma charakter informacyjny. Faktycznie używane przez klientów serwery przekaźnikowe konfiguruje się zmienną środowiskową RELAY_SERVERS po stronie serwera BetterDesk.", + "relay_name_address_required": "Nazwa i adres są wymagane.", + "relay_save_failed": "Nie udało się zapisać węzła przekaźnikowego.", + "relay_delete_failed": "Nie udało się usunąć węzła przekaźnikowego.", + "relay_saved": "Węzeł przekaźnikowy zapisany.", + "relay_deleted": "Węzeł przekaźnikowy usunięty.", + "rule_name_value_required": "Nazwa reguły oraz wartość dopasowania są wymagane.", + "rule_save_failed": "Nie udało się zapisać reguły.", + "rule_delete_failed": "Nie udało się usunąć reguły.", + "rule_saved": "Reguła zapisana.", + "rule_deleted": "Reguła usunięta.", + "rules_hint": "Reguły przypisania określają, który serwer przekaźnikowy obsługuje określone grupy urządzeń. Reguły są oceniane według priorytetu (najniższy pierwszy).", + "no_rules": "Brak reguł przypisania.", + "rule_add": "Dodaj regułę", + "rule_edit": "Edytuj regułę", + "rule_match_type": "Typ dopasowania", + "match_subnet": "Podsieć", + "match_group": "Grupa urządzeń", + "match_tag": "Tag urządzenia", + "match_location": "Lokalizacja", + "rule_match_value": "Wartość dopasowania", + "fallback_master": "Serwer główny", + "fallback_nearest": "Najbliższy przekaźnik", + "relay_max_sessions": "Maks. sesji", + "relay_max_bandwidth": "Maks. przepustowość (Mbps)", + "cap_tiers": "Poziomy pojemności", + "cap_loading": "Ładowanie danych pojemności...", + "cap_recommendations": "Zalecenia", + "cap_no_recs": "Brak dostępnych zaleceń.", + "cap_planning": "Planowanie infrastruktury", + "cap_config": "Konfiguracja", + "cap_max_devices": "Maks. urządzeń", + "cap_max_sessions": "Maks. sesji", + "cap_current": "Aktualny", + "cap_utilization": "Wykorzystanie", + "cap_tier_devices": "Pojemność urządzeń", + "cap_tier_sessions": "Pojemność sesji", + "cap_tier_bandwidth": "Pojemność przepustowości", + "cap_single_sqlite": "Pojedynczy serwer (SQLite)", + "cap_single_pg": "Pojedynczy serwer (PostgreSQL)", + "cap_master_3": "Główny + 3 przekaźniki", + "cap_master_10": "Główny + 10 przekaźników", + "rec_no_relays": "Brak skonfigurowanych węzłów. Rozważ dodanie przekaźników dla lepszej wydajności i redundancji.", + "rec_devices_high": "Wykorzystanie urządzeń jest wysokie. Rozważ dodanie więcej przekaźników.", + "rec_sessions_high": "Pojemność sesji zbliża się do limitu. Rozważ rozbudowę infrastruktury.", + "rec_cpu_high": "Niektóre przekaźniki zgłaszają wysokie użycie CPU. Rozważ równoważenie obciążenia.", + "rec_all_good": "Wszystkie systemy działają w normalnych parametrach. Nie jest wymagana żadna akcja.", + "save": "Zapisz", + "cancel": "Anuluj", + "edit": "Edytuj", + "delete": "Usuń", + "close": "Zamknij" + }, + "cross_platform": { + "title": "Kompatybilność wieloplatformowa", + "tab_matrix": "Macierz kompatybilności", + "tab_distribution": "Dystrybucja", + "tab_protocols": "Protokoły", + "tab_limitations": "Ograniczenia", + "matrix_hint": "Macierz obsługi funkcji na wszystkich wspieranych platformach. Zielony = pełne wsparcie, żółty = częściowe, szary = niedostępne, niebieski = planowane.", + "col_feature": "Funkcja", + "legend_full": "Pełne wsparcie", + "legend_partial": "Częściowe wsparcie", + "legend_none": "Niedostępne", + "legend_planned": "Planowane", + "platform_breakdown": "Podział platform", + "arch_breakdown": "Podział architektur", + "version_breakdown": "Podział wersji", + "summary": "Podsumowanie", + "total_devices": "Razem urządzeń", + "unique_platforms": "Platformy", + "unique_archs": "Architektury", + "unique_versions": "Wersje klienta", + "no_devices": "Brak zarejestrowanych urządzeń.", + "protocols_hint": "Negocjacja możliwości protokołu zapewnia, że każdy klient otrzymuje tylko obsługiwane funkcje. Serwer dostosowuje zachowanie na podstawie zgłoszonych możliwości.", + "capability_negotiation": "Negocjacja możliwości", + "codec_support": "Obsługa kodeków (urządzenia online)", + "feature_support": "Obsługa funkcji (urządzenia online)", + "no_codec_data": "Brak danych o kodekach z urządzeń online.", + "no_feature_data": "Brak danych o funkcjach z urządzeń online.", + "protobuf_schema": "Schemat Protobuf ClientCapabilities", + "diagram_client": "Klient", + "diagram_server": "Serwer BetterDesk", + "diagram_peer": "Zdalny peer", + "limitations_hint": "Każda platforma ma specyficzne ograniczenia wpływające na dostępne funkcje. Zwróć uwagę na te ograniczenia przy planowaniu wdrożeń.", + "feat_desktop_client": "Klient desktopowy", + "feat_background_agent": "Agent w tle", + "feat_remote_target": "Cel zdalny", + "feat_screen_capture": "Przechwytywanie ekranu", + "feat_input_injection": "Wstrzykiwanie wejścia", + "feat_file_transfer": "Transfer plików", + "feat_clipboard_sync": "Synchronizacja schowka", + "feat_audio_streaming": "Strumieniowanie audio", + "feat_chat": "Czat", + "feat_h264": "Kodek H.264", + "feat_vp9": "Kodek VP9", + "feat_av1": "Kodek AV1", + "feat_cdap_agent": "Agent CDAP", + "feat_session_recording": "Nagrywanie sesji", + "feat_multi_monitor": "Wiele monitorów", + "feat_unattended_access": "Dostęp nienadzorowany", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Przeglądarka", + "platform_chromeos": "ChromeOS", + "status_production": "Produkcja", + "status_testing": "Testowanie", + "status_planned": "Planowane", + "status_limited": "Ograniczone", + "status_experimental": "Eksperymentalne", + "limit_win_uac": "Wymagana elevacja UAC do instalacji usługi i wstrzykiwania wejścia na bezpiecznych pulpitach.", + "limit_win_service": "Działa jako usługa NSSM pod izolowanymi kontami wirtualnymi (NT SERVICE\\); uprawnienia administratora wymagane tylko do instalacji.", + "limit_win_firewall": "Reguły Zapory Windows muszą zezwalać na porty 21115-21119 dla połączeń relay.", + "limit_win_virtual_account": "Usługi działają pod izolowanymi kontami wirtualnymi zamiast LocalSystem; niestandardowe ścieżki logów mogą wymagać dostosowania ACL.", + "limit_linux_wayland": "Kompozytory Wayland ograniczają programowe przechwytywanie ekranu; wymagane API portalu PipeWire.", + "limit_linux_pipewire": "Przechwytywanie audio wymaga PipeWire; fallback PulseAudio dostępny ale ograniczony.", + "limit_linux_arm": "Kompilacje ARM64 dostępne; niektóre kodeki mogą używać dekodowania programowego (wolniejsze).", + "limit_linux_unprivileged": "Usługi działają jako dedykowany nieuprzywilejowany użytkownik 'betterdesk' z zabezpieczeniami systemd (NoNewPrivileges, ProtectSystem=strict).", + "limit_mac_screen": "Wymagane uprawnienie Screen Recording w Preferencjach systemowych > Prywatność.", + "limit_mac_signing": "Agent musi być podpisany Apple Developer ID do dystrybucji.", + "limit_mac_notarize": "Notaryzacja wymagana dla macOS Gatekeeper (dystrybucja poza App Store).", + "limit_android_projection": "API MediaProjection wymaga zgody użytkownika dla każdej sesji przechwytywania ekranu.", + "limit_android_accessibility": "Wstrzykiwanie wejścia wymaga AccessibilityService; ograniczone w Android 14+.", + "limit_android_battery": "Usługa w tle ograniczona przez tryb Doze; może wymagać zwolnienia z optymalizacji baterii.", + "limit_ios_capture": "Apple zabrania przechwytywania ekranu w tle; obsługiwany tylko tryb podglądu.", + "limit_ios_input": "Wstrzykiwanie wejścia niedozwolone; tylko zdalny podgląd i czat.", + "limit_ios_appstore": "Dystrybucja wyłącznie przez App Store; TestFlight do testów beta.", + "limit_web_https": "API WebCodecs i WebRTC wymagają HTTPS; HTTP korzysta z JMuxer (ograniczone kodeki).", + "limit_web_codec": "Obsługa kodeków zależy od przeglądarki; H.264 szeroko wspierany, VP9/AV1 różnie.", + "limit_web_performance": "Wydajność ograniczona przez sandbox przeglądarki; brak bezpośredniego sprzętowego przyspieszenia.", + "limit_chrome_crostini": "Pełne wsparcie agenta tylko wewnątrz kontenera Linux Crostini.", + "limit_chrome_pwa": "Tryb PWA zapewnia tylko funkcje webowe; brak natywnych możliwości agenta.", + "limit_chrome_input": "Wstrzykiwanie wejścia nieobsługiwane poza kontenerem Crostini." + }, + "security_audit": { + "title": "Audyt Bezpieczeństwa", + "tab_overview": "Przegląd", + "tab_events": "Zdarzenia audytu", + "tab_hardening": "Utwardzanie", + "tab_vulnerabilities": "Podatności", + "security_score": "Wynik bezpieczeństwa", + "failed_logins": "Nieudane logowania (24h)", + "active_bans": "Aktywne blokady", + "api_keys": "Klucze API", + "old_keys": "Stare klucze (>90d)", + "security_checks": "Kontrole bezpieczeństwa", + "tls_status": "Status TLS", + "pass": "OK", + "warning": "Ostrzeżenie", + "fail": "Błąd", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "Bezpieczny WebSocket", + "enabled": "Włączony", + "disabled": "Wyłączony", + "all_events": "Wszystkie zdarzenia", + "event_login_failed": "Logowanie nieudane", + "event_login_success": "Logowanie udane", + "event_peer_banned": "Urządzenie zablokowane", + "event_ip_banned": "IP zablokowany", + "event_config_changed": "Zmiana konfiguracji", + "event_key_created": "Klucz utworzony", + "refresh": "Odśwież", + "col_time": "Czas", + "col_action": "Akcja", + "col_actor": "Aktor", + "col_target": "Cel", + "col_ip": "Adres IP", + "col_details": "Szczegóły", + "no_events": "Nie znaleziono zdarzeń audytu.", + "hardening_hint": "Priorytety utwardzania bezpieczeństwa dla Twojego wdrożenia BetterDesk. Elementy posortowane według ważności.", + "no_hardening": "Brak elementów utwardzania.", + "vuln_hint": "Wyniki skanowania podatności zależności. Uruchamiaj npm audit regularnie.", + "no_vulns": "Nie znaleziono podatności. Twoje zależności są bezpieczne." + }, + "languages": { + "title": "Zarządzanie językami", + "total_languages": "Liczba języków", + "fully_translated": "W pełni przetłumaczone", + "needs_review": "Wymaga przeglądu", + "reference_keys": "Klucze referencyjne", + "no_languages": "Nie znaleziono plików językowych.", + "badge_reference": "Referencyjny", + "badge_review": "Wymaga przeglądu", + "badge_complete": "Kompletny", + "coverage": "pokrycie", + "keys": "klucze", + "missing": "brakujące", + "extra": "nadmiarowe", + "view_missing": "Pokaż brakujące", + "fix_missing": "Wymagane ręczne tłumaczenie", + "missing_keys_for": "Brakujące klucze dla", + "missing_keys_count": "brakujących kluczy (pokazano wartości referencyjne EN/PL)", + "and_more": "i jeszcze {n}...", + "all_keys_present": "Wszystkie klucze są obecne!", + "confirm_fix": "Automatyczne uzupełnianie języka {code} jest wyłączone.", + "fixed_title": "Wymagane ręczne tłumaczenie", + "fixed_msg": "Brakujące klucze w {code} muszą zostać przetłumaczone ręcznie.", + "no_fix_needed": "Brak brakujących kluczy do uzupełnienia." + }, + "resource_control": { + "title": "Kontrola zasobów", + "tab_overview": "Przegląd", + "tab_usb": "Kontrola USB", + "tab_optical": "Napędy optyczne", + "tab_monitors": "Monitory", + "tab_disks": "Dostęp do dysków", + "tab_quotas": "Limity zasobów", + "compliance_by_category": "Zgodność według kategorii", + "device_compliance": "Zgodność urządzeń", + "search_devices": "Szukaj urządzeń...", + "col_device": "Urządzenie", + "col_platform": "Platforma", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optyczne", + "col_monitors": "Monitory", + "col_disks": "Dyski", + "col_quotas": "Limity", + "col_actions": "Akcje", + "stat_total_devices": "Łącznie urządzeń", + "stat_compliant": "Zgodne", + "stat_partial": "Częściowe", + "stat_noncompliant": "Niezgodne", + "stat_compliance_rate": "Wskaźnik zgodności", + "badge_na": "Nie dotyczy", + "badge_compliant": "OK", + "badge_partial": "Częściowo", + "badge_noncompliant": "Błąd", + "btn_configure": "Konfiguruj", + "no_devices": "Nie znaleziono urządzeń", + "usb_title": "Kontrola portów USB", + "usb_hint": "Kontroluj dostęp do urządzeń pamięci USB dla wybranego urządzenia albo domyślnej polityki organizacji.", + "usb_storage_policy": "Polityka pamięci USB", + "usb_whitelist": "Dozwolone urządzenia (po jednym w linii)", + "usb_whitelist_hint": "VID:PID (np. 0781:5583)", + "usb_audit_log": "Loguj podłączanie urządzeń USB", + "optical_title": "Kontrola napędów optycznych", + "optical_hint": "Kontroluj dostęp do napędów CD/DVD/Blu-ray dla wybranego urządzenia.", + "optical_policy": "Polityka napędów optycznych", + "optical_audit_log": "Loguj dostęp do napędów optycznych", + "monitors_title": "Zarządzanie monitorami", + "monitors_hint": "Konfiguruj ustawienia monitorów, w tym maksymalną liczbę, wymuszenie rozdzielczości, jasność i harmonogram zasilania.", + "monitors_max_count": "Maksymalna liczba monitorów (0 = bez limitu)", + "monitors_max_hint": "0 oznacza brak limitu", + "monitors_resolution": "Maks. rozdzielczość", + "monitors_brightness": "Limit jasności", + "monitors_power_schedule": "Harmonogram zasilania", + "monitors_power_hint": "np. off:22:00-06:00", + "disks_title": "Kontrola dostępu do dysków", + "disks_hint": "Konfiguruj polityki dostępu do dysków, w tym tryb tylko do odczytu, wymuszanie szyfrowania i widoczność partycji.", + "disks_readonly": "Wymuś tryb tylko do odczytu", + "disks_encryption": "Wymagaj szyfrowania (BitLocker/LUKS)", + "disks_smart": "Włącz monitoring S.M.A.R.T.", + "disks_hidden": "Ukryte partycje", + "disks_hidden_hint": "Litery dysków lub punkty montowania oddzielone przecinkami", + "quotas_title": "Limity zasobów", + "quotas_hint": "Ustaw limity CPU, RAM, przepustowości i przestrzeni dyskowej dla użytkowników wybranego urządzenia.", + "quotas_cpu": "Limit CPU", + "quotas_ram": "Limit RAM", + "quotas_bandwidth": "Limit przepustowości (Mbps)", + "quotas_bandwidth_hint": "0 = bez limitu", + "quotas_disk_quota": "Limit dysku (GB)", + "quotas_disk_hint": "0 = bez limitu", + "quotas_process_whitelist": "Lista dozwolonych procesów (po jednym w linii)", + "quotas_process_hint": "np. chrome.exe, code.exe", + "policy_allowed": "Dozwolone", + "policy_blocked": "Zablokowane", + "policy_whitelist": "Tylko lista dozwolonych", + "policy_any": "Dowolne" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Wizualny edytor przepływów dla mostów CDAP", + "new_flow": "Nowy Przepływ", + "open_flow": "Otwórz Przepływ", + "save_flow": "Zapisz Przepływ", + "import_flow": "Importuj Przepływ", + "run_flow": "Uruchom", + "debug": "Debuguj", + "deploy": "Wdróż", + "undo": "Cofnij", + "redo": "Ponów", + "untitled": "Przepływ bez nazwy", + "code_mode": "Tryb kodu", + "toggle_grid": "Przełącz siatkę", + "zoom_in": "Przybliż", + "zoom_out": "Oddal", + "zoom_fit": "Dopasuj do ekranu", + "palette": "Paleta węzłów", + "search_nodes": "Szukaj węzłów...", + "cat_sources": "Źródła", + "cat_processing": "Przetwarzanie", + "cat_outputs": "Wyjścia", + "empty_title": "Zacznij budować", + "empty_desc": "Przeciągnij węzły z palety, aby rozpocząć budowanie przepływu", + "browse_templates": "Przeglądaj szablony", + "inspector": "Inspektor", + "select_node": "Wybierz węzeł, aby wyświetlić jego właściwości", + "console": "Konsola", + "clear_console": "Wyczyść", + "console_ready": "Studio gotowe", + "label": "Etykieta", + "configuration": "Konfiguracja", + "connections": "Połączenia", + "inputs": "Wejścia", + "outputs": "Wyjścia", + "delete_node": "Usuń węzeł", + "nodes": "Węzły", + "wires": "Połączenia", + "status_ready": "Gotowy", + "status_deployed": "Wdrożony", + "flow_name": "Nazwa przepływu", + "flow_desc": "Opis", + "loading": "Ładowanie...", + "no_flows": "Brak zapisanych przepływów", + "confirm_delete": "Czy na pewno chcesz usunąć ten przepływ?", + "templates": "Szablony", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Telemetria urządzenia", + "node_database_query": "Zapytanie bazy danych", + "node_file_watch": "Obserwacja plików", + "node_filter": "Filtr", + "node_transform": "Transformacja", + "node_aggregate": "Agregacja", + "node_delay": "Opóźnienie", + "node_debounce": "Debounce", + "node_switch": "Przełącznik", + "node_merge": "Scalanie", + "node_script": "Skrypt", + "node_widget_update": "Aktualizacja widgetu", + "node_alert": "Alert", + "node_command": "Komenda", + "node_log": "Log", + "node_rest_call": "Wywołanie REST", + "node_mqtt_publish": "Publikacja MQTT", + "node_database_write": "Zapis do bazy danych", + "node_email": "E-mail", + "node_modbus_write": "Zapis Modbus" + }, + "updates": { + "tab_title": "Aktualizacje", + "title": "Aktualizacje oprogramowania", + "desc": "Sprawdź nowe wersje i zaktualizuj konsolę BetterDesk oraz serwer Go z repozytorium GitHub", + "current_version": "Zainstalowana wersja", + "latest_version": "Najnowszy commit", + "status": "Status", + "check_now": "Sprawdź aktualizacje", + "checking": "Sprawdzanie…", + "up_to_date": "Aktualna wersja", + "update_available": "Dostępna aktualizacja", + "changelog": "Ostatnie commity", + "no_changelog": "Brak informacji o wydaniu", + "files_changed": "Zmienione pliki", + "files": "plików", + "changes_unavailable": "Nie udało się pobrać listy zmian. Nadal możesz zainstalować aktualizację.", + "create_backup": "Utwórz kopię zapasową przed aktualizacją", + "install": "Zainstaluj", + "install_confirm": "Czy na pewno chcesz zainstalować tę aktualizację? Wszystkie obsługiwane zmienione komponenty zostaną zaktualizowane automatycznie, a konsola zostanie zrestartowana po aktualizacji.", + "installing": "Instalowanie aktualizacji…", + "creating_backup": "Tworzenie kopii zapasowej…", + "downloading": "Pobieranie plików…", + "install_success": "Aktualizacja zainstalowana pomyślnie. Konsola jest restartowana…", + "install_failed": "Instalacja aktualizacji nie powiodła się", + "restarting": "Oczekiwanie na restart konsoli…", + "restart_complete": "Konsola zrestartowana pomyślnie", + "restart_timeout": "Aktualizacja została zastosowana, ale przeglądarka nie potwierdziła restartu automatycznie. Odśwież konsolę, aby sprawdzić nową wersję.", + "no_version": "Nie wybrano wersji aktualizacji. Najpierw sprawdź dostępne aktualizacje.", + "backups_title": "Kopie zapasowe aktualizacji", + "backups_desc": "Kopie zapasowe tworzone automatycznie przed każdą aktualizacją", + "no_backups": "Brak kopii zapasowych aktualizacji", + "restore": "Przywróć", + "restore_confirm": "Czy na pewno chcesz przywrócić z tej kopii zapasowej? Zmienione pliki zostaną nadpisane.", + "restore_success": "Kopia zapasowa przywrócona pomyślnie. Konsola jest restartowana…", + "delete": "Usuń", + "delete_confirm": "Trwale usunąć kopię zapasową {name}? Tej operacji nie można cofnąć.", + "delete_success": "Kopia zapasowa usunięta", + "delete_failed": "Nie udało się usunąć kopii zapasowej", + "retention_label": "Zachowaj N najnowszych kopii", + "retention_hint": "Starsze kopie są usuwane automatycznie po każdej aktualizacji. Wpisz 0, aby zachować wszystkie.", + "retention_saved": "Ustawienie retencji zapisane", + "retention_invalid": "Retencja musi być liczbą całkowitą między 0 a 1000", + "retention_required_for_prune": "Najpierw ustaw wartość retencji większą od 0", + "prune_now": "Zastosuj teraz", + "prune_confirm": "Zachować tylko {n} najnowszych kopii i usunąć resztę?", + "prune_done": "Usunięto {n} kopii", + "total_size": "Całkowity rozmiar", + "backups_count": "kopii", + "baseline_set": "Punkt odniesienia ustawiony", + "commits_behind": "commitów do tyłu", + "total_files": "Łączna liczba plików", + "applied": "Zastosowane", + "failed": "Nieudane", + "skipped": "Pominięte", + "removed": "Usunięte", + "auto": "Auto", + "manual": "Ręcznie", + "component_console": "Konsola Web", + "component_server": "Serwer Go", + "component_agent": "Agent", + "component_scripts": "Skrypty i Docker", + "component_other": "Inne", + "server_rebuild_warning": "Źródła serwera Go uległy zmianie — binarka serwera zostanie zaktualizowana automatycznie.", + "include_server": "Serwer Go zostanie zaktualizowany automatycznie", + "checking_go": "Sprawdzanie Go…", + "go_not_found": "Go nie zainstalowane", + "go_check_failed": "Nie udało się sprawdzić dostępności Go", + "server_building": "Kompilacja serwera Go… To może zająć kilka minut.", + "server_built": "Binarka serwera skompilowana", + "server_build_failed": "Kompilacja serwera nie powiodła się", + "server_stale_title": "Nieaktualna binarka serwera", + "server_stale_desc": "Źródła serwera Go zostały zaktualizowane, ale działająca binarka nie została przebudowana. Przebuduj ją teraz, aby zastosować aktualizacje bezpieczeństwa i bibliotek.", + "rebuild_server": "Przebuduj binarkę serwera", + "rebuilding_server": "Przebudowywanie…", + "rebuild_server_success": "Binarka serwera przebudowana i zrestartowana", + "rebuild_server_failed": "Przebudowa binarki serwera nie powiodła się", + "docker_title": "Wdrożenie obrazów Docker", + "docker_desc": "Konsola działa z gotowego obrazu kontenera. Aktualizacje wykonujesz przez pobranie nowszych obrazów z GHCR, a nie instalację z panelu ani przebudowę Go.", + "docker_install_note": "Instalacja z panelu jest wyłączona w Dockerze. Uruchom powyższe polecenia na hoście, a następnie odśwież stronę.", + "docker_update_available": "Dostępne nowe obrazy kontenerów", + "docker_sha_unknown": "Aktualne (nieznany commit obrazu)", + "docker_images": "Obrazy", + "server_deployed": "Binarka serwera wdrożona", + "server_deploy_failed": "Wdrożenie serwera nie powiodło się", + "server_build_note": "Kompilacja serwera może zająć 1-5 minut. Usługa aktualizacji uruchomi ją automatycznie, gdy będzie potrzebna.", + "server_source_downloading": "Pobieranie źródeł serwera…", + "strategy_label": "Metoda aktualizacji", + "strategy_download": "Pobierz gotową binarkę", + "strategy_compile": "Skompiluj ze źródeł", + "both_available": "Pobieranie i kompilacja", + "download_available": "Pobieranie dostępne", + "no_method": "Brak metody aktualizacji", + "no_release": "Brak wydania", + "available": "Dostępne", + "server_downloading": "Pobieranie binarki serwera…", + "server_downloaded": "Binarka serwera pobrana", + "server_download_failed": "Pobieranie binarki serwera nie powiodło się", + "server_download_note": "Gotowa binarka zostanie pobrana z GitHub Releases. Zwykle trwa to mniej niż minutę.", + "install_go_hint": "Zainstaluj Go z https://go.dev/dl/ aby włączyć kompilację lub opublikuj wydanie z gotowymi binarkami", + "strategy_install_go": "Pobierz Go i skompiluj automatycznie", + "strategy_install_go_hint": "Pobiera lub odświeża oficjalny zestaw Go (~120 MB) w katalogu danych konsoli, a następnie kompiluje serwer, gdy jest to potrzebne.", + "auto_strategy": "Auto", + "auto_strategy_hint": "Konsola wybierze najlepszą dostępną metodę oraz automatycznie pobierze lub zaktualizuje wymagane narzędzia.", + "auto_available": "Automatyczna przebudowa gotowa", + "toolchain_ready": "Zestaw zainstalowany", + "toolchain_will_install": "Zestaw Go zostanie zainstalowany lub zaktualizowany automatycznie", + "toolchain_downloading": "Pobieranie zestawu Go…", + "toolchain_failed": "Instalacja zestawu Go nie powiodła się", + "modal_title": "Instalowanie aktualizacji", + "modal_done_title": "Aktualizacja zakończona", + "modal_close": "Zamknij", + "modal_reload_now": "Odśwież konsolę", + "phase_confirm": "Potwierdzenie", + "phase_backup": "Kopia zapasowa", + "phase_console": "Pliki konsoli", + "phase_server": "Serwer Go", + "phase_restart": "Ponowne uruchomienie", + "phase_done": "Gotowe", + "preparing": "Przygotowywanie…", + "backup_skipped": "Kopia zapasowa pominięta (wybór operatora)", + "server_skipped": "Serwer Go pominięty", + "server_not_selected": "Brak zmian serwera Go", + "server_processing": "Przetwarzanie aktualizacji serwera Go…", + "no_restart_needed": "Restart nie jest wymagany", + "complete": "Aktualizacja zastosowana", + "complete_summary": "Aktualizacja została zastosowana pomyślnie.", + "complete_with_errors": "Aktualizacja zakończona, ale niektóre kroki się nie powiodły. Szczegóły poniżej.", + "modal_done_with_errors_title": "Aktualizacja zakończona z błędami", + "console_will_restart": "Proces konsoli zostanie teraz zrestartowany…", + "restart_complete_msg": "Konsola zakończyła restart. Kliknij Odśwież, aby załadować nową wersję. Strona zostanie odświeżona automatycznie za 8 sekund.", + "refresh_recommended": "Zmieniły się statyczne zasoby — odśwież stronę, aby zobaczyć nowy interfejs.", + "confirm_title": "Zastosuj aktualizację", + "confirm_with_backup": "Kopia zapasowa zostanie utworzona automatycznie.", + "confirm_no_backup": "Kopia zapasowa nie zostanie utworzona (na własne ryzyko)." + }, + "accessibility": { + "title": "Dostępność", + "subtitle": "Dostosuj konsolę do wzroku, ruchu i komfortu czytania.", + "close": "Zamknij menu dostępności", + "profiles": "Szybkie profile", + "profile_low_vision": "Słabszy wzrok", + "profile_low_vision_hint": "Większy tekst, mocny kontrast i fokus.", + "profile_dyslexia": "Komfort czytania", + "profile_dyslexia_hint": "Czytelna czcionka i szersze odstępy.", + "profile_motion_safe": "Bez ruchu", + "profile_motion_safe_hint": "Ogranicza przejścia i pauzuje animacje.", + "profile_color_assist": "Wsparcie kolorów", + "profile_color_assist_hint": "Filtr kolorów, etykiety i wyróżnione linki.", + "reading": "Czytanie", + "font_size": "Rozmiar tekstu", + "line_height": "Wysokość linii", + "letter_spacing": "Odstępy liter", + "word_spacing": "Odstępy słów", + "readable_font": "Czytelna czcionka", + "readable_font_hint": "Używa szerokich, znajomych kształtów liter.", + "dyslexia_spacing": "Odstępy dla dysleksji", + "dyslexia_spacing_hint": "Dodaje odstępy w dłuższych tekstach.", + "visual": "Widoczność", + "contrast": "Kontrast", + "contrast_normal": "Normalny", + "contrast_high_dark": "Wysoki kontrast ciemny", + "contrast_high_light": "Wysoki kontrast jasny", + "contrast_yellow_black": "Żółty na czarnym", + "color_filter": "Filtr widzenia kolorów", + "filter_none": "Brak", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsja", + "saturation": "Nasycenie kolorów", + "underline_links": "Podkreśl linki", + "underline_links_hint": "Pokazuje linki bez polegania na kolorze.", + "highlight_links": "Wyróżnij akcje", + "highlight_links_hint": "Obrysowuje linki i przyciski.", + "highlight_headings": "Wyróżnij nagłówki", + "highlight_headings_hint": "Oznacza tytuły sekcji paskiem koloru.", + "hide_media": "Przyciemnij media", + "hide_media_hint": "Przyciemnia obrazy, wideo i płótna.", + "interaction": "Interakcja", + "strong_focus": "Silny fokus", + "strong_focus_hint": "Pokazuje duży obrys fokusu klawiatury.", + "large_cursor": "Duży kursor", + "large_cursor_hint": "Używa większego kursora o wysokim kontraście.", + "reduce_motion": "Ogranicz ruch", + "reduce_motion_hint": "Skraca przejścia i płynne przewijanie.", + "pause_animations": "Pauzuj animacje", + "pause_animations_hint": "Zatrzymuje zapętlony ruch wizualny.", + "reading_guide": "Prowadnica czytania", + "reading_guide_hint": "Podąża za kursorem jasną linią.", + "reading_mask": "Maska czytania", + "reading_mask_hint": "Przyciemnia treść nad i pod kursorem.", + "preview": "Podgląd", + "preview_title": "Podgląd przestrzeni operatora", + "preview_text": "Sprawdź, czy tekst, linki, kontrolki i statusy są wygodne do czytania przed zamknięciem menu.", + "preview_link": "Link do szczegółów urządzenia", + "preview_status": "Online", + "preview_button": "Główna akcja", + "preview_secondary": "Drugorzędna", + "reset": "Resetuj", + "done": "Gotowe" + }, + "server_mgmt": { + "title": "Zarządzanie serwerem", + "subtitle": "Panel typu Cockpit dla hosta konsoli BetterDesk (BETA).", + "beta_tooltip": "Funkcja beta — w aktywnym rozwoju.", + "notice_title": "Funkcja w wersji beta", + "notice_body": "Te narzędzia działają na hoście, na którym uruchomiony jest proces konsoli BetterDesk. Wszystkie operacje są audytowane. Zakres funkcji będzie rozszerzany w kolejnych wydaniach.", + "tab_overview": "Przegląd", + "tab_terminal": "Terminal", + "tab_files": "Pliki", + "tab_services": "Usługi", + "cpu": "CPU", + "memory": "Pamięć", + "load": "Średnie obciążenie", + "disks": "Dyski", + "history": "Historia (ostatnie 60 próbek)", + "host_info": "Informacje o hoście", + "cores": "rdzeni", + "uptime": "Czas pracy", + "no_disks": "Brak danych o dyskach", + "info_hostname": "Nazwa hosta", + "info_platform": "Platforma", + "info_kernel": "Jądro", + "info_node": "Node.js", + "info_process_id": "ID procesu", + "info_pty_available": "PTY dostępne", + "term_connect": "Połącz", + "term_disconnect": "Rozłącz", + "term_clear": "Wyczyść", + "term_status": "Status", + "term_connecting": "Łączenie…", + "term_connected": "Połączono", + "term_disconnected": "Rozłączono", + "term_error": "Błąd połączenia", + "term_warning": "Polecenia wykonywane są jako użytkownik procesu konsoli. Dodaj regułę sudoers, aby umożliwić eskalację uprawnień.", + "term_hint": "Wskazówka: wpisz `sudo -i`, aby uzyskać uprawnienia root (wymaga konfiguracji sudoers).", + "term_lib_failed": "Nie udało się załadować biblioteki terminala", + "files_up": "Poziom wyżej", + "files_go": "Idź", + "files_mkdir": "Nowy folder", + "files_name": "Nazwa", + "files_size": "Rozmiar", + "files_perms": "Uprawnienia", + "files_mtime": "Zmodyfikowano", + "files_rename": "Zmień nazwę", + "files_rename_prompt": "Nowa nazwa:", + "files_empty": "Pusty katalog", + "files_error": "Nie udało się odczytać katalogu", + "read_failed": "Nie udało się odczytać pliku", + "save_failed": "Nie udało się zapisać pliku", + "rename_failed": "Nie udało się zmienić nazwy", + "delete_failed": "Nie udało się usunąć", + "delete_confirm": "Usunąć tę pozycję?", + "mkdir_prompt": "Nazwa nowego folderu:", + "mkdir_failed": "Nie udało się utworzyć folderu", + "file_saved": "Plik zapisany", + "binary_warn": "Plik binarny — tylko podgląd", + "encoding_utf8": "Tekst UTF-8", + "truncated": "obcięty", + "full": "pełny", + "svc_search_placeholder": "Szukaj usług…", + "svc_name": "Usługa", + "svc_state": "Stan", + "svc_description": "Opis", + "svc_empty": "Nie znaleziono usług", + "svc_load_failed": "Nie udało się załadować usług", + "svc_action_failed": "Akcja nie powiodła się", + "svc_confirm": "Uruchomić", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Uruchom ponownie", + "svc_reload": "Przeładuj", + "svc_enable": "Włącz", + "svc_disable": "Wyłącz", + "svc_status": "Status" + }, + "server_attestation": { + "title": "Atest serwera", + "subtitle": "Benchmark wydajności określający pojemność równoległych połączeń zdalnych przy progu 80% obciążenia CPU, RAM i dysku.", + "warning_title": "Test obciążeniowy", + "warning_body": "Benchmark symuluje równoległe połączenia WebSocket do serwera sygnałowego i relay. Uruchamiaj poza godzinami szczytu — test obciąża produkcję.", + "run_benchmark": "Uruchom benchmark", + "abort": "Anuluj", + "download_report": "Pobierz raport JSON", + "last_test": "Ostatni test", + "no_test_yet": "Nie przeprowadzono jeszcze benchmarku", + "max_connections": "Maks. połączeń", + "threshold_80": "Próg 80% — metryki końcowe", + "disk": "Dysk", + "ramp_chart": "Wykres rampy obciążenia", + "connections": "Połączenia", + "connections_short": "poł.", + "tier_guide_title": "Co oznacza tier?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "BRAK", + "tier_bronze_desc": "1–25 równoległych połączeń — mały VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 połączeń — serwer średniej klasy (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 połączeń — serwer wydajny (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 połączeń — infrastruktura enterprise (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ połączeń — turbo klasy: dedykowany hardware, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Uwaga: w Dockerze metryki CPU/RAM mogą odzwierciedlać limit kontenera, nie fizycznego hosta.", + "badge_tooltip": "BetterDesk Server Attestation — certyfikat wydajności serwera", + "confirm_run": "Benchmark obciąży serwer symulując wiele połączeń. Kontynuować?", + "starting": "Uruchamianie…", + "complete": "Benchmark zakończony", + "signal_peers": "Peery signal", + "relay_sessions": "Sesje relay", + "page_error": "Nie udało się załadować strony atestu serwera", + "mode_estimated": "Szacunek (WebSocket niedostępny)", + "incomplete": "Benchmark zakończony bez przypisanego tieru" + }, + "commercialization": { + "title": "Komercjalizacja", + "subtitle": "Pakiety wsparcia, sesje rozliczeniowe i raporty pracy", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Wczesna funkcja — moduł rozliczeń i pakietów jest w aktywnym rozwoju.", + "tabs": { + "overview": "Przegląd", + "packages": "Pakiety i kontrakty", + "sessions": "Sesje", + "reports": "Raporty", + "settings": "Ustawienia zaawansowane" }, - "branding": { - "identity_title": "Identyfikacja marki", - "identity_desc": "Dostosuj nazwę i opis aplikacji wyświetlane w konsoli", - "app_name": "Nazwa aplikacji", - "app_description": "Opis aplikacji", - "logo_title": "Logo", - "logo_desc": "Wybierz sposób wyświetlania logo w pasku bocznym i na stronie logowania", - "logo_type_text": "Logo tekstowe", - "logo_type_icon": "Ikona Material", - "logo_type_svg": "Kod SVG", - "logo_type_image": "URL obrazu", - "logo_text": "Tekst logo", - "logo_text_hint": "Główny tekst wyświetlany jako logo marki", - "logo_text_accent": "Tekst akcentowy", - "logo_text_accent_hint": "Tekst pod logo (np. nazwa produktu lub hasło)", - "logo_icon_name": "Nazwa ikony", - "logo_icon_hint": "Wpisz nazwę ikony Material Icons (np. dns, cloud, security). Zobacz fonts.google.com/icons", - "logo_svg_code": "Kod SVG", - "logo_svg_hint": "Wklej kod SVG. Obsługuje pełne elementy ze ścieżkami i stylami.", - "logo_image_upload": "Wgraj obrazek", - "logo_image_choose": "Wybierz plik obrazu", - "logo_image_hint": "PNG, JPG, GIF, WebP lub SVG. Maks. 2 MB. Obraz jest zapisywany na serwerze.", - "logo_image_url": "Ścieżka / URL obrazu", - "logo_image_url_hint": "Wypełniane automatycznie po wgraniu pliku, lub wpisz URL / ścieżkę ręcznie.", - "logo_image_too_large": "Obraz jest za duży. Maksymalny rozmiar to 2 MB.", - "logo_image_invalid_type": "Nieprawidłowy typ pliku. Użyj PNG, JPG, GIF, WebP lub SVG.", - "logo_upload_success": "Logo zostało wgrane pomyślnie.", - "preview": "Podgląd", - "colors_title": "Schemat kolorów", - "colors_desc": "Dostosuj paletę kolorów. Pozostaw puste, aby użyć domyślnych.", - "colors_backgrounds": "Tła", - "colors_text": "Tekst", - "colors_accents": "Kolory akcentowe", - "colors_borders": "Obramowania", - "typography_title": "Typografia", - "typography_desc": "Wybierz czcionki dla nagłówków i tekstu. Czcionki są pobierane na serwer do samodzielnego hostingu.", - "font_heading": "Czcionka nagłówków", - "font_heading_hint": "Używana dla nagłówków (H1–H6) i logo tekstowego", - "font_body": "Czcionka treści", - "font_body_hint": "Używana dla tekstu i elementów interfejsu", - "font_search_placeholder": "Szukaj czcionek...", - "font_system_default": "Domyślna systemowa", - "font_clear": "Wyczyść", - "font_cat_all": "Wszystkie", - "font_downloaded_count": "czcionek pobranych na serwer", - "import_export_title": "Import / Eksport", - "import_export_desc": "Zapisz swój motyw jako plik JSON lub zaimportuj z innej instancji", - "export_theme": "Eksportuj motyw", - "import_theme": "Importuj motyw", - "reset_defaults": "Przywróć domyślne", - "save_branding": "Zapisz wygląd", - "saved": "Wygląd zapisany pomyślnie. Przeładowywanie...", - "exported": "Motyw wyeksportowany", - "imported": "Motyw zaimportowany pomyślnie. Przeładowywanie...", - "import_error": "Nie udało się zaimportować motywu. Nieprawidłowy format pliku.", - "reset_confirm": "Czy na pewno chcesz przywrócić domyślny wygląd? Tej operacji nie można cofnąć.", - "reset_success": "Wygląd przywrócony do domyślnych. Przeładowywanie...", - "powered_by": "Napędzane przez", - "background_title": "Tło i wygląd", - "background_desc": "Ustaw tapetę konsoli, gradient lub jednolite tło. Karty unoszą się nad nim.", - "bg_type_none": "Brak", - "bg_type_color": "Jednolity kolor", - "bg_type_gradient": "Gradient", - "bg_type_image": "Obraz", - "bg_color": "Kolor tła", - "bg_gradient": "Gradient CSS", - "bg_gradient_hint": "Dowolny prawidłowy gradient CSS, np. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Prześlij obraz tła", - "bg_image_choose": "Wybierz plik obrazu", - "bg_image_hint": "PNG, JPG, WebP lub GIF. Maks. 8 MB. Zapisywane na serwerze.", - "bg_image_url": "Ścieżka / URL obrazu", - "bg_size": "Skalowanie obrazu", - "bg_size_cover": "Wypełnij (cały ekran)", - "bg_size_contain": "Dopasuj (zmieść)", - "bg_size_auto": "Auto (oryginał)", - "bg_blur": "Rozmycie tła", - "bg_overlay": "Ciemna nakładka", - "bg_overlay_hint": "Przyciemnia tło dla lepszej czytelności tekstu.", - "bg_image_too_large": "Obraz jest za duży. Maksymalny rozmiar to 8 MB.", - "bg_image_invalid_type": "Nieprawidłowy typ pliku. Użyj PNG, JPG, WebP lub GIF.", - "bg_upload_success": "Obraz tła przesłany pomyślnie.", - "login_title": "Strona logowania", - "login_desc": "Dostosuj nagłówek, podtytuł i tło ekranu logowania.", - "login_heading": "Nagłówek logowania", - "login_heading_placeholder": "Witaj ponownie", - "login_subheading": "Podtytuł logowania", - "login_subheading_placeholder": "Zaloguj się do swojego konta", - "login_bg_inherit": "Tak jak konsola", - "agent_title": "Strona pobierania agenta", - "agent_desc": "Dostosuj publiczny portal pobierania agenta widoczny dla użytkowników.", - "agent_show_powered": "Pokaż \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Wyświetla informację o BetterDesk w stopce portalu pobierania.", - "footer_title": "Stopka i prawa autorskie", - "footer_desc": "Dodaj własny wiersz stopki widoczny na ekranie logowania i w panelu bocznym.", - "footer_text": "Tekst stopki", - "footer_text_hint": "np. informacja o prawach autorskich lub nazwa firmy.", - "show_powered": "Pokaż informację \"BetterDesk\"", - "show_powered_hint": "Wyświetla nazwę i wersję BetterDesk w stopce logowania i panelu bocznym.", - "custom_css_title": "Własny CSS", - "custom_css_desc": "Zaawansowane: wstrzyknij własny CSS stosowany w całej konsoli i na stronie logowania.", - "custom_css_hint": "Używaj ostrożnie. Nieprawidłowe lub niebezpieczne reguły są filtrowane. Maks. 20 000 znaków." + "clock": { + "title": "Czas serwera (NTP)", + "check_now": "Sprawdź teraz", + "unsynced": "Zegar serwera nie jest zsynchronizowany — sesje rozliczeniowe mogą być zablokowane" }, - "device_detail": { - "tab_overview": "Przegląd", - "tab_tags": "Tagi i notatki", - "tab_actions": "Akcje", - "section_identity": "Tożsamość", - "section_network": "Sieć", - "section_timestamps": "Znaczniki czasu", - "section_connect": "Połączenie", - "section_manage": "Zarządzanie", - "folder": "Folder", - "status_tier": "Poziom statusu", - "device_banned": "To urządzenie jest zablokowane", - "no_reason": "Nie podano powodu", - "tags": "Tagi", - "no_tags": "Brak tagów przypisanych do tego urządzenia", - "tag_placeholder": "Wprowadź nazwę tagu...", - "add_tag": "Dodaj", - "tag_exists": "Ten tag już istnieje", - "notes": "Notatki", - "notes_placeholder": "Dodaj notatki o tym urządzeniu...", - "danger_zone": "Strefa zagrożenia", - "action_connect_web": "Pulpit zdalny", - "action_connect_web_desc": "Połącz przez przeglądarkę", - "action_native_remote": "Zdalny BetterDesk", - "action_native_remote_desc": "Natywny strumień JPEG — bez wtyczek", - "action_connect_desktop": "Klient desktop", - "action_connect_desktop_desc": "Otwórz w aplikacji desktop", - "action_change_id_desc": "Zmień ID rejestracji urządzenia", - "action_ban_desc": "Zablokuj połączenia tego urządzenia", - "action_unban_desc": "Zezwól na ponowne połączenie", - "action_delete_desc": "Trwale usuń to urządzenie", - "tab_hardware": "Sprzęt", - "tab_metrics": "Metryki", - "tab_services": "Usługi", - "tab_processes": "Procesy", - "tab_events": "Zdarzenia", - "tab_activity": "Aktywność", - "tab_files": "Pliki", - "agent_lazy_hint": "Kliknij tę zakładkę, aby pobrać dane z agenta", - "agent_offline": "Agent jest offline", - "agent_timeout": "Agent nie odpowiedział w terminie", - "agent_error": "Nie udało się pobrać danych z agenta", - "service_name": "Nazwa", - "service_display": "Nazwa wyświetlana", - "service_status": "Stan", - "service_start": "Tryb startu", - "process_name": "Nazwa", - "process_user": "Użytkownik", - "process_memory": "Pamięć", - "section_system": "System", - "section_cpu": "Procesor", - "section_memory": "Pamięć", - "section_displays": "Wyświetlacze", - "section_encoding": "Kodeki", - "section_live_metrics": "Metryki na żywo", - "section_current_usage": "Aktualne użycie", - "section_usage_history": "Historia użycia", - "os": "System operacyjny", - "version": "Wersja klienta", - "cpu_model": "Model procesora", - "cpu_cores": "Rdzenie CPU", - "cpu_freq": "Częstotliwość CPU", - "total_memory": "Całkowita pamięć", - "metric_memory": "Pamięć", - "metric_disk": "Dysk", - "metrics_updated": "Zaktualizowano", - "device_groups": "Grupy", - "no_sysinfo": "Brak informacji o sprzęcie", - "no_sysinfo_hint": "Dane pojawią się po wysłaniu raportu sysinfo przez urządzenie", - "no_metrics": "Brak danych metrycznych", - "no_metrics_hint": "Metryki pojawią się po wysłaniu raportów heartbeat przez urządzenie", - "chart_oldest": "← Najstarsze", - "chart_newest": "Najnowsze →" + "stats": { + "active_sessions": "Aktywne sesje rozliczeniowe" }, - "inventory": { - "title": "Inwentaryzacja", - "subtitle": "Inwentaryzacja sprzętu i oprogramowania zarządzanych urządzeń", - "device_id": "ID urządzenia", - "hostname": "Nazwa hosta", - "os": "System operacyjny", - "cpu": "Procesor", - "cpu_cores": "Rdzenie CPU", - "cpu_usage": "Użycie CPU", - "memory": "Pamięć", - "memory_total": "Całkowita pamięć", - "memory_used": "Użyta pamięć", - "memory_available": "Dostępna pamięć", - "memory_usage": "Użycie pamięci", - "swap": "Swap", - "disks": "Dyski", - "disk_count": "Liczba dysków", - "network": "Sieć", - "network_interfaces": "Interfejsy sieciowe", - "software": "Oprogramowanie", - "software_count": "Zainstalowane oprogramowanie", - "system": "System", - "kernel": "Jądro", - "architecture": "Architektura", - "uptime": "Czas działania", - "frequency": "Częstotliwość", - "physical_cores": "Rdzenie fizyczne", - "logical_cores": "Rdzenie logiczne", - "model": "Model", - "usage": "Użycie", - "total": "Razem", - "used": "Użyte", - "available": "Dostępne", - "mount_point": "Punkt montowania", - "removable": "wymienny", - "mac_address": "Adres MAC", - "ip_addresses": "Adresy IP", - "traffic": "Ruch sieciowy", - "collect_now": "Zbierz teraz", - "collector_running": "Kolektor działa", - "collector_stopped": "Kolektor zatrzymany", - "last_upload": "Ostatnie przesłanie", - "total_uploads": "łącznie", - "last_seen": "Ostatnio widziano", - "collected_at": "Zebrano", - "no_data": "Brak danych inwentaryzacji. Kliknij \"Zbierz teraz\", aby zebrać informacje o systemie.", - "no_devices": "Nie znaleziono urządzeń z danymi inwentaryzacji", - "detail_title": "Szczegóły inwentaryzacji urządzenia", - "telemetry": "Telemetria", - "view_detail": "Szczegóły", - "export": "Eksportuj", - "refresh": "Odśwież" + "packages": { + "new": "Nowy pakiet", + "name": "Nazwa", + "included_minutes": "Minuty w pakiecie", + "overage_rate": "Stawka po limicie / h", + "currency": "Waluta", + "heading": "Pakiety wsparcia", + "prompt_name": "Nazwa pakietu", + "create_title": "Nowy pakiet dla organizacji", + "create_submit": "Utwórz pakiet", + "select_org": "Organizacja", + "select_org_placeholder": "Wybierz organizację…" }, - "tickets": { - "title": "Zgłoszenia", - "subtitle": "Zgłoszenia i śledzenie problemów", - "create": "Nowe zgłoszenie", - "edit": "Edytuj zgłoszenie", - "delete": "Usuń zgłoszenie", - "detail": "Szczegóły zgłoszenia", - "ticket_id": "ID zgłoszenia", - "ticket_title": "Tytuł", - "description": "Opis", - "status": "Status", - "priority": "Priorytet", - "category": "Kategoria", - "assigned_to": "Przypisano do", - "created_by": "Utworzono przez", - "device": "Urządzenie", - "sla_due": "Termin SLA", - "created_at": "Utworzono", - "updated_at": "Zaktualizowano", - "resolved_at": "Rozwiązano", - "closed_at": "Zamknięto", - "status_open": "Otwarte", - "status_in_progress": "W toku", - "status_resolved": "Rozwiązane", - "status_closed": "Zamknięte", - "priority_low": "Niski", - "priority_medium": "Średni", - "priority_high": "Wysoki", - "priority_critical": "Krytyczny", - "category_general": "Ogólne", - "category_hardware": "Sprzęt", - "category_software": "Oprogramowanie", - "category_network": "Sieć", - "category_access": "Dostęp", - "category_other": "Inne", - "comments": "Komentarze", - "add_comment": "Dodaj komentarz", - "comment_placeholder": "Napisz komentarz...", - "internal_note": "Notatka wewnętrzna (niewidoczna dla użytkowników)", - "attachments": "Załączniki", - "upload_attachment": "Załącz plik", - "download": "Pobierz", - "connect_device": "Połącz z urządzeniem", - "no_tickets": "Brak zgłoszeń", - "no_comments": "Brak komentarzy", - "no_attachments": "Brak załączników", - "title_required": "Tytuł jest wymagany", - "delete_confirm": "Czy na pewno chcesz usunąć zgłoszenie #{id}?", - "delete_success": "Zgłoszenie usunięte", - "created_success": "Zgłoszenie utworzone", - "updated_success": "Zgłoszenie zaktualizowane", - "sla_overdue": "Przekroczony SLA", - "filter_all": "Wszystkie", - "search_placeholder": "Szukaj zgłoszeń...", - "assign_to_me": "Przypisz do mnie", - "unassign": "Usuń przypisanie", - "stats_total": "Razem", - "stats_open": "Otwarte", - "stats_in_progress": "W toku", - "stats_resolved": "Rozwiązane", - "stats_closed": "Zamknięte" - }, - "activity": { - "title": "Monitorowanie aktywności", - "subtitle": "Śledzenie użycia aplikacji i bezczynności", - "device": "Urządzenie", - "hostname": "Nazwa hosta", - "sessions": "Sesje", - "idle_time": "Czas bezczynności", - "active_time": "Czas aktywności", - "last_report": "Ostatni raport", - "top_apps": "Najczęściej używane aplikacje", - "app_name": "Aplikacja", - "window_title": "Tytuł okna", - "category": "Kategoria", - "duration": "Czas trwania", - "started_at": "Rozpoczęto", - "ended_at": "Zakończono", - "session_count": "Liczba sesji", - "total_active": "Łącznie aktywny", - "total_idle": "Łącznie bezczynny", - "detail_count": "Rekordy szczegółów", - "no_data": "Brak danych o aktywności", - "no_sessions": "Brak zarejestrowanych sesji", - "filter_from": "Od", - "filter_to": "Do", - "filter_apply": "Zastosuj filtr", - "hours": "godziny", - "minutes": "minuty", - "seconds": "sekundy", - "category_browser": "Przeglądarka", - "category_productivity": "Produktywność", - "category_communication": "Komunikacja", - "category_development": "Programowanie", - "category_media": "Media", - "category_gaming": "Gry", - "category_system": "System", - "category_other": "Inne", - "summary": "Podsumowanie", - "details": "Szczegóły", - "refresh": "Odśwież", - "search": "Szukaj urządzeń...", - "date_range": "Zakres dat", - "device_id": "ID urządzenia", - "session_start": "Początek sesji", - "session_end": "Koniec sesji", - "user": "Użytkownik", - "no_activity": "Brak zarejestrowanej aktywności", - "reported_at": "Zgłoszono", - "detail": "Szczegóły", - "no_apps": "Brak aplikacji" - }, - "automation": { - "title": "Automatyzacja i alerty", - "subtitle": "Reguły alertów, zdalne polecenia i konfiguracja SMTP", - "rules": "Reguły alertów", - "rules_subtitle": "Definiuj warunki wyzwalające powiadomienia", - "alerts": "Historia alertów", - "alerts_subtitle": "Przeglądaj i potwierdzaj wyzwolone alerty", - "commands": "Zdalne polecenia", - "commands_subtitle": "Wysyłaj polecenia do zdalnych urządzeń", - "smtp": "Konfiguracja SMTP", - "smtp_subtitle": "Ustawienia powiadomień e-mail", - "rule_name": "Nazwa reguły", - "description": "Opis", - "condition_type": "Typ warunku", - "condition_op": "Operator", - "condition_value": "Próg", - "severity": "Ważność", - "scope_device": "Urządzenie docelowe", - "scope_all": "Wszystkie urządzenia", - "cooldown": "Okres chłodzenia (sekundy)", - "notify_emails": "E-maile powiadomień", - "enabled": "Włączony", - "disabled": "Wyłączony", - "create_rule": "Utwórz regułę", - "edit_rule": "Edytuj regułę", - "delete_rule": "Usuń regułę", - "acknowledge": "Potwierdź", - "acknowledged": "Potwierdzone", - "unacknowledged": "Niepotwierdzone", - "triggered_at": "Wyzwolono", - "severity_info": "Informacja", - "severity_warning": "Ostrzeżenie", - "severity_critical": "Krytyczny", - "op_gt": "Większy niż", - "op_gte": "Większy lub równy", - "op_lt": "Mniejszy niż", - "op_lte": "Mniejszy lub równy", - "op_eq": "Równy", - "op_neq": "Różny od", - "type_cpu_usage": "Użycie CPU (%)", - "type_memory_usage": "Użycie pamięci (%)", - "type_disk_usage": "Użycie dysku (%)", - "type_offline_duration": "Czas offline (s)", - "type_idle_duration": "Czas bezczynności (s)", - "type_custom": "Niestandardowy", - "command_type": "Typ polecenia", - "command_payload": "Polecenie / skrypt", - "command_result": "Wynik", - "command_status": "Status", - "send_command": "Wyślij polecenie", - "status_pending": "Oczekuje", - "status_running": "W trakcie", - "status_completed": "Zakończono", - "status_failed": "Błąd", - "smtp_host": "Host SMTP", - "smtp_port": "Port", - "smtp_secure": "Użyj TLS", - "smtp_user": "Nazwa użytkownika", - "smtp_pass": "Hasło", - "smtp_from": "Adres nadawcy", - "smtp_test": "Testuj połączenie", - "smtp_save": "Zapisz konfigurację", - "smtp_test_success": "Połączenie udane", - "smtp_test_failed": "Połączenie nieudane", - "no_rules": "Brak skonfigurowanych reguł alertów", - "no_alerts": "Brak wyzwolonych alertów", - "no_commands": "Brak wysłanych poleceń", - "id_payload_required": "ID urządzenia i payload są wymagane", - "no_commands_sent": "Nie wysłano jeszcze żadnych poleceń" - }, - "file_transfer": { - "title": "Przesyłanie plików", - "transfers": "Transfery", - "new_transfer": "Nowy transfer", - "upload": "Wyślij", - "download": "Pobierz", - "direction": "Kierunek", - "filename": "Nazwa pliku", - "file_size": "Rozmiar pliku", - "mime_type": "Typ MIME", - "progress": "Postęp", - "status": "Status", - "device": "Urządzenie", - "initiated_by": "Zainicjowane przez", - "created_at": "Utworzono", - "cancel": "Anuluj", - "cancel_confirm": "Czy na pewno chcesz anulować ten transfer?", - "download_file": "Pobierz plik", - "browse_files": "Przeglądaj pliki", - "select_file": "Wybierz plik", - "select_device": "Wybierz urządzenie", - "no_transfers": "Brak transferów plików", - "status_pending": "Oczekuje", - "status_active": "Aktywny", - "status_completed": "Zakończono", - "status_failed": "Błąd", - "status_cancelled": "Anulowano", - "bytes_transferred": "Przesłane bajty", - "chunks": "Fragmenty", - "transfer_started": "Transfer rozpoczęty", - "transfer_completed": "Transfer zakończony", - "transfer_failed": "Transfer nieudany", - "transfer_cancelled": "Transfer anulowany", - "max_file_size": "Maksymalny rozmiar pliku: 4 GB", - "error_too_large": "Plik jest za duży", - "error_no_device": "Nie wybrano urządzenia", - "error_no_file": "Nie wybrano pliku" - }, - "network": { - "title": "Monitoring sieci", - "targets": "Cele monitorowania", - "add_target": "Dodaj cel", - "edit_target": "Edytuj cel", - "delete_target": "Usuń cel", - "delete_confirm": "Czy na pewno chcesz usunąć ten cel?", - "target_name": "Nazwa", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Typ sprawdzania", - "timeout": "Limit czasu (ms)", - "interval": "Interwał (ms)", - "enabled": "Włączony", - "status": "Status", - "last_check": "Ostatnie sprawdzenie", - "last_rtt": "Ostatni RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Dostępny", - "status_down": "Niedostępny", - "status_unknown": "Nieznany", - "check_now": "Sprawdź teraz", - "history": "Historia sprawdzeń", - "stats": "Statystyki", - "total_targets": "Łączna liczba celów", - "targets_up": "Cele dostępne", - "targets_down": "Cele niedostępne", - "type_ping": "Ping (ICMP)", - "type_tcp": "Port TCP", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Narzędzia sieciowe", - "ping_tool": "Test ping", - "tcp_tool": "Sprawdzenie portu TCP", - "http_tool": "Sprawdzenie HTTP", - "dns_tool": "Rozwiązywanie DNS", - "monitor_start": "Uruchom monitor", - "monitor_stop": "Zatrzymaj monitor", - "monitor_running": "Monitor jest uruchomiony", - "monitor_stopped": "Monitor jest zatrzymany", - "no_targets": "Brak skonfigurowanych celów monitorowania", - "no_history": "Brak historii sprawdzeń", - "error_code": "Błąd", - "status_code": "Kod statusu HTTP", - "search_targets": "Szukaj celów...", - "name": "Nazwa", - "tab_targets": "Cele", - "tab_tools": "Narzędzia", - "avg_latency": "Śr. opóźnienie", - "type": "Typ", - "latency": "Opóźnienie", - "check_history": "Historia sprawdzeń", - "name_host_required": "Nazwa i host są wymagane", - "uptime": "Dostępność", - "response_time": "Czas odpowiedzi", - "avg_response": "Śr. czas odpowiedzi", - "charts": "Wykresy", - "realtime": "Czas rzeczywisty", - "response_time_ms": "Czas odpowiedzi (ms)", - "uptime_percent": "Dostępność (%)", - "last_24h": "Ostatnie 24h", - "last_7d": "Ostatnie 7 dni", - "last_30d": "Ostatnie 30 dni" - }, - "dataguard": { - "title": "DataGuard — ochrona DLP", - "policies": "Polityki DLP", - "add_policy": "Dodaj politykę", - "edit_policy": "Edytuj politykę", - "delete_policy": "Usuń politykę", - "delete_confirm": "Czy na pewno chcesz usunąć tę politykę?", - "policy_name": "Nazwa", - "policy_description": "Opis", - "policy_desc": "Opis polityki", - "status": "Status", - "enabled": "Włączona", - "disabled": "Wyłączona", - "rules": "Reguły", - "add_rule": "Dodaj regułę", - "rule_type": "Typ reguły", - "rule_type_usb": "Urządzenie USB", - "rule_type_file": "Operacja na pliku", - "action": "Akcja", - "action_allow": "Zezwól", - "action_block": "Zablokuj", - "action_log": "Tylko loguj", - "filter": "Filtr", - "vid": "ID producenta (VID)", - "pid": "ID produktu (PID)", - "serial": "Numer seryjny", - "device_class": "Klasa urządzenia", - "drive_type": "Typ dysku", - "file_extensions": "Rozszerzenia plików", - "events": "Zdarzenia DLP", - "event_source": "Źródło", - "event_source_usb": "USB", - "event_source_file": "Plik", - "event_type": "Typ zdarzenia", - "event_details": "Szczegóły", - "no_policies": "Brak skonfigurowanych polityk DLP", - "no_events": "Brak zarejestrowanych zdarzeń DLP", - "stats": "Statystyki", - "total_events": "Łącznie zdarzeń", - "blocked_events": "Zablokowane", - "logged_events": "Zalogowane", - "usb_events": "Zdarzenia USB", - "file_events": "Zdarzenia plików", - "device_id": "ID urządzenia", - "policy_matched": "Dopasowana polityka", - "timestamp": "Znacznik czasu", - "drive_removable": "Wymienny", - "drive_fixed": "Stały", - "drive_network": "Sieciowy", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Nieznany", - "total_policies": "Łącznie polityk", - "active_policies": "Aktywne polityki", - "violations": "Naruszenia", - "blocked": "Zablokowane", - "tab_policies": "Polityki", - "tab_events": "Zdarzenia", - "search_policies": "Szukaj polityk...", - "create_policy": "Utwórz politykę", - "policy_type": "Typ polityki", - "scope": "Zakres", - "events_count": "Zdarzenia", - "search_events": "Szukaj zdarzeń...", - "event_time": "Czas zdarzenia", - "device": "Urządzenie", - "policy": "Polityka", - "detail": "Szczegóły", - "scope_help": "ID urządzeń oddzielone przecinkami, lub puste dla wszystkich", - "scope_all": "Wszystkie urządzenia", - "active": "Aktywna", - "type_file_type": "Typ pliku", - "type_usb": "USB", - "type_clipboard": "Schowek", - "type_screen_share": "Udostępnianie ekranu", - "type_file_transfer": "Transfer plików" + "sessions": { + "device": "Urządzenie", + "operator": "Operator", + "duration": "Czas", + "phase": "Faza", + "amount": "Kwota" }, "reports": { - "title": "Raporty", - "generate": "Generuj raport", - "generate_csv": "Eksportuj CSV", - "report_type": "Typ raportu", - "type_devices": "Podsumowanie urządzeń", - "type_activity": "Podsumowanie aktywności", - "type_security": "Raport bezpieczeństwa", - "type_tickets": "Raport zgłoszeń", - "type_network": "Raport sieci", - "type_inventory": "Raport inwentaryzacji", - "type_alerts": "Raport alertów", - "saved": "Zapisane raporty", - "save_report": "Zapisz raport", - "delete_report": "Usuń raport", - "delete_confirm": "Czy na pewno chcesz usunąć ten zapisany raport?", - "no_saved": "Brak zapisanych raportów", - "report_title": "Tytuł", - "created_by": "Utworzony przez", - "created_at": "Utworzono", - "filters": "Filtry", - "date_from": "Od", - "date_to": "Do", - "device_filter": "ID urządzenia", - "generated_at": "Wygenerowano", - "section": "Sekcja danych", - "total_devices": "Łącznie urządzeń", - "online": "Online", - "offline": "Offline", - "banned": "Zbanowane", - "platform_distribution": "Rozkład platform", - "top_applications": "Top aplikacje", - "total_active": "Łączny czas aktywności", - "total_idle": "Łączny czas bezczynności", - "dlp_stats": "Statystyki DLP", - "banned_devices": "Zbanowane urządzenia", - "audit_logs": "Logi audytu", - "ticket_stats": "Statystyki zgłoszeń", - "category_distribution": "Rozkład kategorii", - "priority_distribution": "Rozkład priorytetów", - "targets_status": "Status celów", - "os_distribution": "Rozkład systemów operacyjnych", - "avg_ram": "Średni RAM", - "alert_rules": "Reguły alertów", - "recent_alerts": "Ostatnie alerty", - "tab_generate": "Generuj raport", - "tab_saved": "Zapisane raporty", - "type_devices_desc": "Przegląd urządzeń, platform i statusów", - "type_activity_desc": "Podsumowanie aktywności i czasu bezczynności", - "type_security_desc": "Blokady, zdarzenia DLP i logi audytu", - "type_tickets_desc": "Statystyki zgłoszeń i wydajność SLA", - "type_network_desc": "Cele monitorowania sieci i dane dostępności", - "type_inventory_desc": "Podsumowanie inwentaryzacji sprzętu i oprogramowania", - "type_alerts_desc": "Reguły alertów i historia wyzwolonych alertów", - "report_name": "Nazwa raportu", - "format": "Format", - "save": "Zapisz raport", - "preview": "Podgląd", - "download": "Pobierz", - "delete_saved": "Usuń raport", - "raw_json": "Surowy JSON" + "session": "Sesja", + "summary": "Podsumowanie", + "date": "Data" }, - "tenants": { - "title": "Organizacje", - "list": "Organizacje", - "add_tenant": "Dodaj organizację", - "edit_tenant": "Edytuj organizację", - "delete_tenant": "Usuń organizację", - "delete_confirm": "Czy na pewno chcesz usunąć tę organizację? Wszystkie przypisania urządzeń i użytkowników zostaną usunięte.", - "name": "Nazwa", - "slug": "Identyfikator", - "contact_name": "Osoba kontaktowa", - "contact_email": "Email kontaktowy", - "max_devices": "Maks. urządzeń", - "max_devices_hint": "0 = bez limitu", - "notes": "Notatki", - "active": "Aktywna", - "inactive": "Nieaktywna", - "devices": "Urządzenia", - "users": "Użytkownicy", - "assign_device": "Przypisz urządzenie", - "assign_devices": "Przypisz urządzenia", - "remove_device": "Usuń urządzenie", - "assign_user": "Przypisz użytkownika", - "remove_user": "Usuń użytkownika", - "no_tenants": "Brak skonfigurowanych organizacji", - "no_devices": "Brak urządzeń przypisanych do tej organizacji", - "no_users": "Brak użytkowników przypisanych do tej organizacji", - "stats": "Statystyki organizacji", - "total_devices": "Łącznie urządzeń", - "online_devices": "Urządzenia online", - "total_users": "Łącznie użytkowników", - "created_at": "Utworzono", - "updated_at": "Zaktualizowano", - "slug_exists": "Identyfikator organizacji już istnieje", - "total_tenants": "Łącznie organizacji", - "active_tenants": "Aktywne organizacje", - "search": "Szukaj organizacji...", - "create_tenant": "Utwórz organizację", - "detail": "Szczegóły organizacji", - "contact": "Kontakt", - "enabled": "Włączona", - "disabled": "Wyłączona", - "max": "maks.", - "info": "Informacje", - "status": "Status" + "contracts": { + "title": "Kontrakty organizacji", + "new": "Przypisz pakiet", + "org": "Organizacja", + "package": "Pakiet", + "remaining": "Pozostałe minuty", + "status": "Status", + "actions": "Akcje", + "suspend": "Wstrzymaj", + "activate": "Aktywuj", + "select_org": "Wybierz organizację", + "select_package": "Wybierz pakiet", + "no_orgs": "Brak organizacji", + "no_packages": "Najpierw utwórz pakiet" }, - "registrations": { - "title": "Żądania rejestracji urządzeń", - "subtitle": "Przeglądaj oczekujące żądania zatwierdzenia rejestracji urządzeń", - "search_placeholder": "Szukaj po ID urządzenia, nazwie hosta lub IP...", - "no_registrations": "Brak żądań rejestracji urządzeń", - "col_device_id": "ID urządzenia", - "col_hostname": "Nazwa hosta", - "col_platform": "Platforma", - "col_ip": "Adres IP", - "col_version": "Wersja", - "col_status": "Status", - "col_requested": "Żądanie", - "col_actions": "Akcje", - "status_pending": "Oczekujące", - "status_approved": "Zatwierdzone", - "status_rejected": "Odrzucone", - "approve_btn": "Zatwierdź", - "approve_confirm": "Czy na pewno chcesz zatwierdzić to urządzenie? Otrzyma ono dane uwierzytelniające serwera i będzie mogło się automatycznie połączyć.", - "approved_success": "Rejestracja urządzenia zatwierdzona pomyślnie", - "reject_btn": "Odrzuć", - "reject_title": "Odrzuć rejestrację", - "reject_confirm": "Czy na pewno chcesz odrzucić to żądanie rejestracji?", - "reject_reason": "Powód (opcjonalnie)", - "reject_reason_placeholder": "Podaj powód odrzucenia...", - "rejected_success": "Rejestracja urządzenia odrzucona", - "delete_confirm": "Czy na pewno chcesz usunąć ten wpis rejestracji?", - "deleted_success": "Wpis rejestracji usunięty", - "enrollment_title": "Rejestracja urządzeń", - "enrollment_subtitle": "Oczekujące żądania rejestracji od klientów BetterDesk", - "enrollment_empty": "Brak oczekujących żądań rejestracji", - "enrollment_approve": "Zatwierdź", - "enrollment_reject": "Odrzuć", - "enrollment_display_name": "Nazwa wyświetlana", - "enrollment_display_name_placeholder": "Wpisz nazwę dla tego urządzenia...", - "enrollment_sync_mode": "Tryb synchronizacji", - "enrollment_sync_silent": "Cichy — minimalna telemetria", - "enrollment_sync_standard": "Standardowy — zbalansowana synchronizacja", - "enrollment_sync_turbo": "Turbo — agresywna synchronizacja", - "enrollment_approved_success": "Rejestracja urządzenia zatwierdzona", - "enrollment_rejected_success": "Rejestracja urządzenia odrzucona", - "approve_title": "Zatwierdź urządzenie", - "field_name": "Nazwa urządzenia", - "field_name_placeholder": "Wpisz nazwę dla tego urządzenia...", - "field_sync_mode": "Tryb synchronizacji", - "sync_standard": "Standardowy — zbalansowana synchronizacja", - "sync_silent": "Cichy — minimalna telemetria", - "sync_turbo": "Turbo — agresywna synchronizacja", - "field_tags": "Tagi", - "field_tags_placeholder": "Tagi oddzielone przecinkami (np. biuro, laptop)...", - "field_tags_existing": "Istniejące tagi", - "field_tag_add_placeholder": "Dodaj nowy tag...", - "field_tag_add_btn": "Dodaj", - "field_groups": "Grupy urządzeń", - "field_folder": "Folder", - "field_folder_none": "Bez folderu", - "reject_ban_option": "Zablokuj to urządzenie", - "reject_ban_hint": "Urządzenie zostanie zablokowane i nie będzie mogło ponownie wysyłać żądań rejestracji.", - "banner_open_mode": "Rejestracja jest otwarta — nowi klienci RustDesk rejestrują się bez akceptacji operatora. Ustaw tryb Zarządzany w Ustawieniach, aby korzystać z tej kolejki.", - "banner_locked_mode": "Rejestracja jest zablokowana — tylko urządzenia z tokenem mogą się zarejestrować. Do akceptacji nieznanych klientów wymagany jest tryb Zarządzany.", - "enrollment_settings_link": "Ustawienia rejestracji" + "assign": { + "title": "Przypisz istniejący pakiet", + "submit": "Przypisz" }, - "backup": { - "title": "Kopia zapasowa", - "desc": "Pobierz pełną kopię zapasową do odtworzenia po awarii — bazę danych, klucze tożsamości serwera, plik środowiska, pliki marki oraz dane serwera Go. Archiwum (.tar.gz) można przywrócić na nowej maszynie, aby ponownie uruchomić cały serwer.", - "restore_title": "Przywracanie", - "restore_desc": "Prześlij wcześniej pobrane archiwum kopii (.tar.gz) lub starszy zrzut konfiguracji JSON. Wybierz poniżej które komponenty przywrócić.", - "stat_users": "Użytkownicy", - "stat_settings": "Ustawienia", - "stat_folders": "Foldery", - "stat_groups": "Grupy", - "stat_strategies": "Strategie", - "stat_backend": "Backend", - "stat_database": "Silnik bazy danych", - "stat_keys": "Klucze serwera w kopii", - "stat_env": "Plik środowiska", - "stat_uploads": "Pliki marki", - "download": "Pobierz kopię", - "creating": "Tworzenie kopii...", - "download_success": "Kopia zapasowa pobrana pomyślnie", - "upload": "Prześlij kopię", - "restore_confirm": "Czy na pewno chcesz przywrócić dane z tej kopii? Wybrane komponenty zostaną nadpisane.", - "restore_success": "Kopia zapasowa przywrócona pomyślnie. Niektóre zmiany mogą wymagać odświeżenia strony.", - "restart_required": "Niektóre przywrócone komponenty (klucze / .env / baza Go) wymagają restartu usługi, aby zadziałać.", - "restored": "Przywrócono", - "skipped": "Pominięto", - "backup_date": "Data kopii", - "security_warning": "Ta kopia zawiera dane wrażliwe (klucze serwera, plik środowiska, hashe haseł i sekrety 2FA). Przechowuj ją bezpiecznie i nigdy nie udostępniaj.", - "restore_warning": "Przywrócenie sekretów, pliku środowiska lub bazy serwera Go nadpisuje tożsamość serwera i wymaga następnie restartu usługi.", - "opt_database": "Baza danych (wszystkie tabele)", - "opt_database_hint": "Ponownie importuje wszystkie dane konsoli. Stosowane na żywo, bez restartu.", - "opt_uploads": "Pliki marki", - "opt_uploads_hint": "Logo i przesłane obrazy.", - "opt_secrets": "Klucze i sekrety serwera", - "opt_secrets_warning": "Nadpisuje tożsamość Ed25519 serwera, klucz API i sekret sesji. Wymaga restartu usługi.", - "opt_env": "Plik środowiska (.env)", - "opt_env_warning": "Nadpisuje SESSION_SECRET, klucz API, DSN bazy, porty i ustawienia TLS. Wymaga restartu usługi.", - "opt_godb": "Baza danych serwera Go", - "opt_godb_warning": "Nadpisuje bazę SQLite serwera Go (tylko backend SQLite). Wymaga restartu usługi.", - "opt_settings": "Ustawienia konsoli", - "opt_branding": "Wygląd / Motyw", - "opt_folders": "Foldery urządzeń", - "opt_groups": "Grupy użytkowników i urządzeń", - "opt_addressbooks": "Książki adresowe", - "opt_users": "Konta użytkowników", - "opt_users_warning": "Destrukcyjne: zastępuje WSZYSTKIE konta użytkowników danymi z kopii. Możesz zostać wylogowany.", - "no_file": "Nie wybrano pliku kopii zapasowej", - "invalid_json": "Nieprawidłowy plik kopii: nie jest poprawnym JSON", - "invalid_format": "Nieprawidłowy plik kopii: to nie jest kopia BetterDesk" + "form": { + "cancel": "Anuluj" }, - "cdap": { - "device_detail": "Urządzenie CDAP", - "loading": "Ładowanie...", - "loading_widgets": "Ładowanie widgetów urządzenia...", - "load_error": "Nie udało się załadować danych urządzenia", - "connected": "Połączony", - "disconnected": "Rozłączony", - "device_offline_msg": "Urządzenie jest obecnie offline. Wartości widgetów mogą być nieaktualne.", - "no_widgets": "Brak dostępnych widgetów", - "no_widgets_desc": "To urządzenie nie zarejestrowało manifestu CDAP z definicjami widgetów.", - "command_log": "Dziennik poleceń", - "clear_log": "Wyczyść dziennik", - "confirm_command": "Potwierdź polecenie", - "select_option": "Wybierz", - "cdap_status": "Status CDAP", - "cdap_enabled": "CDAP włączony", - "cdap_disabled": "CDAP wyłączony", - "cdap_devices": "Urządzenia CDAP", - "cdap_connections": "Aktywne połączenia", - "send_command": "Wyślij polecenie", - "command_sent": "Polecenie wysłane pomyślnie", - "command_failed": "Nie udało się wysłać polecenia", - "devices_title": "Urządzenia CDAP", - "devices_subtitle": "Podłączone urządzenia poprzez Custom Device Application Protocol", - "stat_connected": "Połączone", - "stat_port": "Port", - "search_devices": "Szukaj urządzeń...", - "no_devices": "Brak podłączonych urządzeń", - "no_devices_desc": "Żadne urządzenia CDAP nie są obecnie połączone. Urządzenia pojawią się tutaj po połączeniu z bramą.", - "gateway_disabled": "Brama CDAP wyłączona", - "gateway_disabled_desc": "Włącz bramę CDAP ustawiając CDAP_ENABLED=true w konfiguracji serwera.", - "gateway_active": "Aktywna", - "toggle_enable": "Włącz CDAP", - "toggle_disable": "Wyłącz CDAP", - "enabled_restart": "CDAP włączony. Wymagany restart serwera aby zastosować zmiany.", - "disabled_restart": "CDAP wyłączony. Wymagany restart serwera aby zastosować zmiany.", - "widgets": "widgetów", - "type_all": "Wszystkie", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agent OS", - "type_network": "Sieć", - "type_camera": "Kamera", - "type_custom": "Niestandardowe", - "active_alerts": "Aktywne alerty", - "alert_fired": "Alert wyzwolony", - "alert_cleared": "Alert wyczyszczony", - "no_alerts": "Brak aktywnych alertów", - "connect_terminal": "Połącz Terminal", - "table_search": "Szukaj...", - "just_now": "Przed chwilą", - "terminal_connecting": "Łączenie z urządzeniem...", - "terminal_disconnected": "Rozłączono", - "terminal_error": "Połączenie terminala nie powiodło się", - "linked_devices": "Powiązane urządzenia", - "link_device": "Powiąż urządzenie", - "unlink_device": "Odłącz", - "no_linked_devices": "Brak powiązanych urządzeń", - "unlink_confirm": "Czy na pewno chcesz odłączyć to urządzenie?", - "link_prompt": "Wprowadź Peer ID do powiązania z tym urządzeniem:", - "connect_desktop": "Połącz pulpit", - "connect_video": "Połącz strumień", - "connect_files": "Przeglądaj pliki", - "connect_audio": "Połącz audio", - "upload_file": "Wyślij", - "desktop_connecting": "Łączenie...", - "video_connecting": "Łączenie...", - "files_connecting": "Łączenie...", - "audio_connecting": "Łączenie...", - "audio_streaming": "Strumieniowanie", - "clipboard_in": "Schowek odebrany", - "clipboard_out": "Schowek wysłany", - "monitor_select": "Wybierz monitor", - "keyframe_request": "Żądaj klatki kluczowej", - "quality_auto": "Automatyczna jakość" + "export": { + "csv": "Eksport CSV", + "pdf": "Eksport PDF", + "sessions_csv": "Eksport sesji CSV" }, - "notifications": { - "title": "Powiadomienia", - "empty": "Brak nowych powiadomień", - "mark_all_read": "Oznacz wszystkie jako przeczytane", - "see_all": "Zobacz wszystkie prośby o pomoc", - "help_request": "Prośba o pomoc", - "just_now": "przed chwilą" + "empty": { + "packages": "Brak pakietów. Utwórz pierwszy przyciskiem powyżej.", + "contracts": "Brak kontraktów organizacji. Przypisz pakiet do organizacji.", + "sessions": "Brak zarejestrowanych sesji rozliczeniowych.", + "reports": "Brak przesłanych raportów pracy." }, - "desktop": { - "switch_mode": "Tryb pulpitu", - "console_mode": "Tryb konsoli", - "loading": "Ładowanie...", - "minimize": "Minimalizuj", - "maximize": "Maksymalizuj", - "restore": "Przywróć", - "close": "Zamknij", - "widgets_mode": "Widżety", - "windows_mode": "Okna", - "wallpaper": "Tapeta", - "add_widget": "Dodaj widżet", - "remove_widget": "Usuń widżet", - "pop_out_widget": "Wysuń", - "pop_in_widget": "Przywróć", - "configure": "Konfiguruj", - "search_widgets": "Szukaj widżetów...", - "cat_monitoring": "Monitoring", - "cat_devices": "Urządzenia", - "cat_tools": "Narzędzia", - "cat_general": "Ogólne", - "notes_placeholder": "Pisz notatki tutaj...", - "search_placeholder": "Szukaj urządzeń, stron, ustawień...", - "search_pages": "Strony", - "search_devices": "Urządzenia", - "search_no_results": "Brak wyników", - "exit_desktop": "Wyjdź z trybu pulpitu", - "refresh": "Odśwież", - "fullscreen": "Pełny ekran", - "help": "Pomoc", - "widget_clock": "Zegar", - "widget_device_status": "Status urządzeń", - "widget_server_health": "Info serwera", - "widget_system_stats": "Wskaźniki urządzeń", - "widget_device_list": "Lista urządzeń", - "widget_quick_actions": "Szybkie akcje", - "widget_recent_activity": "Ostatnia aktywność", - "widget_notes": "Notatki", - "widget_network_monitor": "Monitor sieci", - "widget_tickets_summary": "Zgłoszenia", - "widget_iframe": "Strona web", - "widget_cdap_devices": "Urządzenia CDAP", - "widget_uptime": "Czas działania", - "widget_port_status": "Status portów", - "widget_device_grid": "Siatka urządzeń", - "widget_multi_gauge": "Wskaźniki serwera", - "widget_weekly_chart": "Aktywność tygodniowa", - "widget_quick_controls": "Szybka kontrola", - "widget_bandwidth": "Przepustowość", - "widget_connection_stats": "Statystyki połączeń", - "widget_weather": "Pogoda", - "widget_world_clock": "Zegar światowy", - "widget_bookmarks": "Zakładki", - "widget_user_sessions": "Sesje użytkowników", - "widget_alert_feed": "Alerty", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Razem", - "label_blocked": "Zablokowane", - "label_banned": "Zbanowane", - "label_active": "Aktywne", - "label_service": "Usługa", - "label_port": "Port", - "label_uptime_prefix": "Czas działania:", - "label_uptime": "Czas działania", - "label_no_devices": "Brak urządzeń", - "label_no_activity": "Brak aktywności", - "label_no_targets": "Brak celów", - "label_unavailable": "Niedostępne", - "label_open": "Otwarte", - "label_in_progress": "W toku", - "label_resolved": "Rozwiązane", - "label_set_url": "Ustaw URL w konfiguracji", - "label_server_uptime": "Czas działania serwera", - "label_merged_info": "Scalono z widgetem Info serwera", - "label_with_notes": "Z notatkami", - "label_metric": "Metryka", - "label_count": "Liczba", - "label_total_devices": "Razem urządzeń", - "label_throughput": "Przepustowość", - "label_active_relays": "Aktywne przekaźniki", - "label_total_relayed": "Razem przekazane", - "label_total_bytes": "Razem bajtów", - "label_filter_devices": "Filtruj urządzenia...", - "label_all": "Wszystkie", - "label_ban": "Zbanuj", - "label_unban": "Odbanuj", - "label_connect": "Połącz", - "label_no_cdap_devices": "Brak urządzeń CDAP", - "action_add_widget": "Dodaj widget", - "label_merged_server_info": "Scalono z widgetem Info serwera", - "wp_images": "Obrazy", - "wp_colors": "Kolory", - "wp_custom_color": "Własny kolor", - "wp_fit_style": "Styl", - "wp_fill": "Wypełnij", - "wp_fit": "Dopasuj", - "wp_stretch": "Rozciągnij", - "wp_center": "Wyśrodkuj", - "wp_unavailable": "Obrazy tapet nie są zainstalowane na tym serwerze.", - "wp_download_hint": "Umieść pliki PNG w katalogu public/wallpapers/ aby włączyć wybór tapety.", - "widget_calendar": "Kalendarz", - "widget_process_monitor": "Monitor procesów", - "widget_disk_usage": "Użycie dysku", - "widget_log_viewer": "Przeglądarka logów", - "widget_speed_test": "Test prędkości", - "widget_database_stats": "Statystyki bazy", - "widget_docker_containers": "Kontenery Docker", - "widget_shell_command": "Polecenie powłoki", - "widget_device_map": "Mapa urządzeń", - "widget_remote_connect": "Zdalne połączenie", - "label_no_online": "Brak urządzeń online", - "label_no_events": "Brak wydarzeń na dziś", - "label_event_title": "Tytuł wydarzenia:", - "label_no_data": "Brak danych", - "label_download_speed": "Prędkość pobierania", - "label_latency": "Opóźnienie", - "label_server": "Serwer", - "label_run_test": "Uruchom test", - "label_testing": "Testowanie...", - "label_table": "Tabela", - "label_rows": "Wiersze", - "label_last_backup": "Ostatni backup", - "label_no_containers": "Brak kontenerów", - "label_docker_unavailable": "Docker niedostępny", - "label_no_command": "Brak skonfigurowanego polecenia", - "label_no_output": "Brak wyniku", - "label_run": "Uruchom", - "label_presets": "Szablony", - "label_save_preset": "Zapisz szablon", - "label_load_preset": "Wczytaj szablon", - "label_preset_name": "Nazwa szablonu:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimalny", - "label_preset_developer": "Deweloper", - "label_snap_layout": "Układ przyciągania", - "label_auto_arrange": "Automatyczne rozmieszczenie", - "label_zone_layout": "Układ stref", - "label_2col_equal": "2 kolumny (równe)", - "label_2col_wide": "2 kolumny (60/40)", - "label_3col": "3 kolumny", - "label_2x2_grid": "Siatka 2×2", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Grupa widżetów", - "ungroup_widgets": "Rozgrupuj widżety", - "group_widgets": "Grupuj wybrane widżety", - "snap_layouts": "Układy przyciągania", - "snap_left": "Przyciągnij w lewo", - "snap_right": "Przyciągnij w prawo", - "snap_top_left": "Przyciągnij lewy górny", - "snap_top_right": "Przyciągnij prawy górny", - "snap_bottom_left": "Przyciągnij lewy dolny", - "snap_bottom_right": "Przyciągnij prawy dolny", - "aero_shake": "Potrząśnij aby zminimalizować inne", - "zone_resize": "Przeciągnij granicę aby zmienić rozmiar stref", - "zone_borders": "Przeciągane granice stref", - "app_drawer": "Aplikacje", - "search_apps": "Szukaj aplikacji...", - "edit_shortcuts": "Edytuj skróty", - "widgets": "Widżety", - "theme": "Motyw" - }, - "desktop_login": { - "click_to_sign_in": "Kliknij lub naciśnij klawisz, aby się zalogować", - "username_placeholder": "Nazwa użytkownika", - "password_placeholder": "Hasło", - "sign_in": "Zaloguj się", - "verify": "Zweryfikuj", - "totp_title": "Uwierzytelnianie dwuskładnikowe", - "totp_subtitle": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", - "back_to_login": "Powrót do logowania", - "fill_all_fields": "Wypełnij wszystkie pola", - "invalid_credentials": "Nieprawidłowa nazwa użytkownika lub hasło", - "invalid_code": "Nieprawidłowy kod weryfikacyjny", - "enter_6_digits": "Wprowadź wszystkie 6 cyfr", - "network_error": "Błąd sieci — sprawdź połączenie", - "session_expired": "Sesja wygasła. Zaloguj się ponownie." - }, - "permissions": { - "title": "Uprawnienia", - "subtitle": "Zarządzaj uprawnieniami ról i niestandardowymi nadpisaniami", - "info_title": "Jak działają uprawnienia", - "info_desc": "Każda rola ma domyślne uprawnienia. Możesz dodawać lub usuwać poszczególne uprawnienia dla każdej roli, przełączając je poniżej. Niestandardowe nadpisania są podświetlone i mogą być w każdej chwili przywrócone do domyślnych.", - "select_role": "Wybierz rolę", - "select_role_placeholder": "Wybierz rolę...", - "reset_overrides": "Resetuj nadpisania", - "granted": "Przyznane", - "overrides": "Nadpisania", - "level": "Poziom", - "super_admin_tag": "Pełny dostęp", - "server_level_tag": "Poziom serwera", - "custom": "Własne", - "default": "Domyślne", - "revert": "Przywróć domyślne", - "saved": "Uprawnienie zaktualizowane", - "reverted": "Przywrócono domyślne", - "all_reverted": "Wszystkie nadpisania przywrócone", - "confirm_reset": "Zresetować wszystkie niestandardowe nadpisania dla tej roli?", - "empty_title": "Wybierz rolę", - "empty_desc": "Wybierz rolę z listy powyżej, aby przeglądać i zarządzać jej uprawnieniami.", - "locked_title": "Super Admin", - "locked_desc": "Super Admin ma domyślnie wszystkie uprawnienia i nie można ich dostosowywać.", - "cat_device": "Urządzenia", - "cat_user": "Użytkownicy", - "cat_server": "Serwer", - "cat_org": "Organizacje", - "cat_audit": "Audyt i monitoring", - "cat_cdap": "CDAP", - "cat_enrollment": "Rejestracja", - "cat_chat": "Czat", - "cat_branding": "Branding", - "perm_device_view": "Przeglądanie urządzeń", - "perm_device_connect": "Łączenie z urządzeniami", - "perm_device_edit": "Edycja urządzeń", - "perm_device_delete": "Usuwanie urządzeń", - "perm_device_ban": "Banowanie / odbanowanie urządzeń", - "perm_device_change_id": "Zmiana ID urządzenia", - "perm_user_view": "Przeglądanie użytkowników", - "perm_user_create": "Tworzenie użytkowników", - "perm_user_edit": "Edycja użytkowników", - "perm_user_delete": "Usuwanie użytkowników", - "perm_server_config": "Konfiguracja serwera", - "perm_server_keys": "Zarządzanie kluczami API", - "perm_server_attestation": "Atest wydajności serwera", - "perm_org_create": "Tworzenie organizacji", - "perm_org_edit": "Edycja organizacji", - "perm_org_delete": "Usuwanie organizacji", - "perm_org_manage_users": "Zarządzanie użytkownikami organizacji", - "perm_org_manage_devices": "Zarządzanie urządzeniami organizacji", - "perm_audit_view": "Przeglądanie logów audytu", - "perm_metrics_view": "Przeglądanie metryk", - "perm_blocklist_edit": "Edycja listy zablokowanych", - "perm_cdap_view": "Przeglądanie urządzeń CDAP", - "perm_cdap_command": "Wysyłanie komend CDAP", - "perm_cdap_terminal": "Dostęp do terminala CDAP", - "perm_cdap_files": "Dostęp do plików CDAP", - "perm_enrollment_manage": "Zarządzanie rejestracją", - "perm_enrollment_approve": "Zatwierdzanie rejestracji", - "perm_chat_access": "Dostęp do czatu", - "perm_branding_edit": "Edycja brandingu" - }, - "tokens": { - "title": "Tokeny urządzeń", - "subtitle": "Zarządzaj tokenami rejestracji do automatycznego wdrażania urządzeń", - "enrollment_mode": "Tryb rejestracji", - "mode_open": "Otwarty", - "mode_open_desc": "Każde urządzenie może się zarejestrować bez tokenu", - "mode_managed": "Zarządzany", - "mode_managed_desc": "Urządzenia potrzebują tokenu lub zatwierdzenia operatora do rejestracji", - "mode_locked": "Zablokowany", - "mode_locked_desc": "Tylko urządzenia z ważnym tokenem mogą się zarejestrować", - "total": "Łącznie tokenów", - "active": "Aktywne", - "used": "Wykorzystane", - "revoked": "Unieważnione", - "search_placeholder": "Szukaj tokenów...", - "status_pending": "Oczekujący", - "status_active": "Aktywny", - "status_used": "Wykorzystany", - "status_revoked": "Unieważniony", - "status_expired": "Wygasły", - "bulk_generate": "Generuj masowo", - "create": "Utwórz token", - "edit": "Edytuj token", - "token": "Prefiks tokenu", - "name": "Nazwa", - "status": "Status", - "uses": "Użycia", - "bound_peer": "Przypisane urządzenie", - "expires": "Wygasa", - "created": "Utworzono", - "actions": "Akcje", - "name_placeholder": "np. Komputery biurowe", - "max_uses": "Maksymalna liczba użyć", - "max_uses_hint": "0 = bez limitu", - "expires_in": "Wygasa za", - "no_expiration": "Bez wygaśnięcia", - "expires_1h": "1 godzina", - "expires_24h": "24 godziny", - "expires_7d": "7 dni", - "expires_30d": "30 dni", - "note": "Notatka", - "note_placeholder": "Opcjonalna notatka o tym tokenie...", - "count": "Ilość", - "count_range": "Liczba tokenów do wygenerowania (1-100)", - "name_prefix": "Prefiks nazwy", - "generate": "Generuj", - "token_created": "Token utworzony", - "tokens_generated": "Tokeny wygenerowane", - "copy_warning": "Skopiuj token teraz. Nie będzie pokazany ponownie.", - "copy_token": "Kopiuj token", - "copied": "Skopiowano!", - "revoke": "Unieważnij", - "revoke_confirm": "Czy na pewno chcesz unieważnić ten token? Urządzenia już zarejestrowane za jego pomocą nie zostaną dotknięte.", - "revoked_success": "Token został unieważniony", - "no_tokens": "Nie znaleziono tokenów", - "expired": "Wygasły", - "never": "Nigdy", - "save": "Zapisz", - "cancel": "Anuluj", - "unlimited": "Bez limitu" - }, - "tutorial": { - "next": "Dalej", - "prev": "Wstecz", - "skip": "Pomiń", - "finish": "Zakończ", - "close": "Zamknij", - "step_of": "{current} z {total}", - "console_sidebar_title": "Pasek nawigacji", - "console_sidebar_text": "Dostęp do wszystkich modułów. Kliknij dowolną ikonę, aby przejść do sekcji. Pasek dostosowuje się do rozmiaru ekranu.", - "console_expand_title": "Rozwiń pasek boczny", - "console_expand_text": "Kliknij tutaj, aby rozwinąć pasek boczny i zobaczyć pełne etykiety. Kliknij ponownie, aby zwinąć.", - "console_search_title": "Szybkie wyszukiwanie", - "console_search_text": "Wyszukuj urządzenia, ustawienia lub akcje. Skrót klawiszowy: Ctrl+K.", - "console_dashboard_title": "Pulpit", - "console_dashboard_text": "Twoje centrum dowodzenia pokazujące status serwera, urządzenia online i szybkie akcje. Monitoruj ważne wskaźniki na pierwszy rzut oka.", - "console_devices_title": "Zarządzanie urządzeniami", - "console_devices_text": "Przeglądaj, wyszukuj i zarządzaj podłączonymi urządzeniami. Filtruj według statusu, przypisuj tagi i konfiguruj ustawienia.", - "console_settings_title": "Ustawienia", - "console_settings_text": "Konfiguruj zachowanie serwera, opcje bezpieczeństwa, branding i zarządzanie użytkownikami. Dostosuj BetterDesk do swoich potrzeb.", - "console_desktop_title": "Tryb pulpitu", - "console_desktop_text": "Przełącz na tryb pulpitu z przestrzenią roboczą opartą na oknach i widgetach. Idealny do wielozadaniowości i monitoringu.", - "console_complete_title": "Gotowe!", - "console_complete_text": "Odkrywaj kategorie paska bocznego, aby poznać wszystkie funkcje. Kliknij ikonę Pomoc, aby uruchomić poradnik ponownie.", - "desktop_topbar_title": "Górny pasek", - "desktop_topbar_text": "Górny pasek pokazuje zegar, szybkie kontrolki i dostęp do szuflady aplikacji. Kliknij ikonę siatki, aby przeglądać wszystkie aplikacje.", - "desktop_drawer_title": "Szuflada aplikacji", - "desktop_drawer_text": "Otwórz szufladę aplikacji, aby wyszukać i uruchomić dowolną funkcję konsoli w pływającym oknie. Aplikacje posortowane są według kategorii.", - "desktop_widgets_title": "Panel widgetów", - "desktop_widgets_text": "Twoja konfigurowalna przestrzeń robocza. Widgety wyświetlają informacje na żywo i zapewniają szybki dostęp do funkcji. Przeciągnij, aby zmienić układ.", - "desktop_add_widget_title": "Dodaj widgety", - "desktop_add_widget_text": "Kliknij tutaj, aby przeglądać dostępne widgety. Wybierz spośród monitorów, list urządzeń, notatek i innych.", - "desktop_taskbar_title": "Pasek zadań", - "desktop_taskbar_text": "Otwarte aplikacje pojawiają się tutaj. Kliknij, aby fokusować lub minimalizować okna. Najedź na ikony, aby zobaczyć nazwy.", - "desktop_snap_title": "Układy Snap", - "desktop_snap_text": "Przeciągnij okna do krawędzi ekranu, aby je przyciągnąć, lub najedź na przycisk maksymalizacji, aby zobaczyć gotowe układy. Spróbuj Aero Shake!", - "desktop_windows_title": "Okna aplikacji", - "desktop_windows_text": "Aplikacje otwierają się w przeciągalnych, skalowalnych oknach. Minimalizuj, maksymalizuj lub zamykaj z paska tytułu. Okna są nad widgetami.", - "desktop_search_title": "Szybkie wyszukiwanie", - "desktop_search_text": "Szukaj urządzeń, stron i ustawień. Naciśnij Ctrl+K w dowolnym miejscu, aby otworzyć wyszukiwarkę.", - "desktop_complete_title": "Tryb pulpitu gotowy!", - "desktop_complete_text": "Spróbuj otwierać aplikacje z szuflady i układać okna obok siebie. Użyj presetów widgetów do szybkiego ustawiania pulpitu.", - "devices_folders_title": "Foldery urządzeń", - "devices_folders_text": "Organizuj urządzenia w folderach. Kliknij folder, aby filtrować listę. Kliknij prawym przyciskiem, aby zmienić nazwę lub usunąć.", - "devices_search_title": "Wyszukiwanie i filtrowanie", - "devices_search_text": "Szukaj po ID, nazwie hosta lub platformie. Użyj przycisków statusu, aby wyświetlić tylko online, offline lub wszystkie.", - "devices_table_title": "Lista urządzeń", - "devices_table_text": "Kliknij wiersz urządzenia, aby zobaczyć szczegóły. Menu kebab po prawej umożliwia szybkie akcje: połącz, edytuj tagi lub usuń.", - "devices_complete_title": "Zarządzanie urządzeniami gotowe!", - "devices_complete_text": "Przeciągnij urządzenia między folderami, aby je organizować. Kliknij dwukrotnie urządzenie, aby otworzyć panel szczegółów.", - "settings_tabs_title": "Kategorie ustawień", - "settings_tabs_text": "Przełączaj między sekcjami: Ogólne, Bezpieczeństwo, Wygląd i inne konfiguracje.", - "settings_content_title": "Konfiguracja", - "settings_content_text": "Każda sekcja zawiera konkretne ustawienia serwera i konsoli. Zmiany są zapisywane po kliknięciu Zapisz.", - "settings_complete_title": "Przegląd ustawień", - "settings_complete_text": "Sprawdź ustawienia Bezpieczeństwa dla 2FA, kluczy API i zarządzania użytkownikami. Odwiedź Wygląd, aby dostosować wygląd konsoli.", - "help": "Pomoc i samouczki", - "tour_console": "Przewodnik po konsoli", - "tour_desktop": "Przewodnik po trybie pulpitu", - "tour_devices": "Przewodnik po urządzeniach", - "tour_settings": "Przewodnik po ustawieniach", - "reset_all": "Resetuj wszystkie samouczki", - "disable_tutorials": "Wyłącz samouczki", - "enable_tutorials": "Włącz samouczki", - "tour_remote": "Przewodnik po sesji zdalnej", - "tour_organization": "Konfiguracja organizacji", - "tour_cdap": "Przegląd CDAP", - "tour_chat": "Podstawy czatu", - "remote_toolbar_title": "Pasek narzędzi sesji zdalnej", - "remote_toolbar_text": "Pasek narzędzi daje dostęp do sterowania ekranem, synchronizacji schowka, klawiszy specjalnych i ustawień jakości. Tryb pełnoekranowy przełączysz klawiszem F11.", - "remote_canvas_title": "Ekran zdalny", - "remote_canvas_text": "To jest ekran zdalnego urządzenia. Kliknij w jego obszar, aby rozpocząć sterowanie. Ruch myszy i klawiatura są przekazywane automatycznie.", - "remote_clipboard_title": "Synchronizacja schowka", - "remote_clipboard_text": "Kopiuj i wklejaj tekst między swoim komputerem a urządzeniem zdalnym. Używaj Ctrl+C / Ctrl+V normalnie, gdy fokus jest na ekranie zdalnym.", - "remote_complete_title": "Sesja zdalna gotowa!", - "remote_complete_text": "Używaj przycisków na pasku narzędzi do klawiszy specjalnych (Ctrl+Alt+Del, PrintScreen) i przełączania monitorów. Naciśnij Escape albo kliknij Rozłącz, aby zakończyć sesję.", - "org_overview_title": "Organizacje", - "org_overview_text": "Organizacje pozwalają grupować użytkowników, urządzenia i polityki. Każda organizacja ma własnego administratora, operatorów i ustawienia.", - "org_create_title": "Utwórz organizację", - "org_create_text": "Kliknij tutaj, aby utworzyć nową organizację. Podaj nazwę, identyfikator URL i opcjonalny opis. Zostaniesz właścicielem nowej organizacji.", - "org_members_title": "Zarządzaj członkami", - "org_members_text": "Zaproś użytkowników przez e-mail, przypisz role (admin, operator, użytkownik) i zarządzaj dostępem. Członkowie widzą urządzenia przypisane do swojej organizacji.", - "org_devices_title": "Przypisz urządzenia", - "org_devices_text": "Dodaj urządzenia do organizacji. Przypisane tutaj urządzenia odziedziczą polityki organizacji i będą widoczne dla jej członków.", - "org_policies_title": "Polityki organizacji", - "org_policies_text": "Ustaw polityki bezpieczeństwa organizacji, takie jak wymagania haseł, limity czasu sesji, wymuszanie 2FA i reguły rejestracji urządzeń.", - "org_complete_title": "Konfiguracja organizacji zakończona!", - "org_complete_text": "Zaproś zespół i przypisz urządzenia, aby zacząć korzystać z zarządzania w zakresie organizacji. Polityki zastosują się automatycznie do wszystkich członków.", - "cdap_devices_title": "Urządzenia CDAP", - "cdap_devices_text": "Zobacz wszystkie połączone urządzenia CDAP — czujniki IoT, sterowniki PLC, mosty i niestandardowe agenty. Zielone wskaźniki pokazują aktywne połączenia.", - "cdap_widgets_title": "Panel widgetów", - "cdap_widgets_text": "Widgety pokazują dane z urządzeń w czasie rzeczywistym. Wskaźniki, przełączniki, diody LED i wykresy wizualizują różne typy danych.", - "cdap_commands_title": "Wysyłanie poleceń", - "cdap_commands_text": "Wchodź w interakcję z urządzeniami, wysyłając polecenia. Niektóre polecenia wymagają potwierdzenia. Dziennik poleceń przechowuje historię wszystkich wysłanych poleceń.", - "cdap_terminal_title": "Terminal urządzenia", - "cdap_terminal_text": "Otwórz sesję terminala do agentów CDAP, aby wykonać zaawansowaną diagnostykę lub ręczną konfigurację. Wpisuj polecenia bezpośrednio.", - "cdap_complete_title": "Przegląd CDAP zakończony!", - "cdap_complete_text": "Przeglądaj widgety urządzeń, wysyłaj polecenia i korzystaj z terminala lub przeglądarki plików do głębszego zarządzania. Agenci CDAP automatycznie raportują metryki.", - "chat_contacts_title": "Kontakty i grupy", - "chat_contacts_text": "Zobacz kontakty i grupy czatu. Kliknij dowolny kontakt, aby otworzyć rozmowę. Zielone kropki oznaczają użytkowników online.", - "chat_send_title": "Wysyłanie wiadomości", - "chat_send_text": "Wpisz wiadomość i naciśnij Enter, aby ją wysłać. Wiadomości są szyfrowane end-to-end, gdy obie strony obsługują E2E.", - "chat_file_title": "Udostępnianie plików", - "chat_file_text": "Kliknij ikonę załącznika, aby udostępnić pliki. Pliki są szyfrowane i mogą mieć do 50 MB.", - "chat_complete_title": "Czat gotowy!", - "chat_complete_text": "Rozmawiaj z operatorami i użytkownikami końcowymi w czasie rzeczywistym. Twórz grupy do komunikacji zespołowej. Wszystkie wiadomości obsługują potwierdzenia odczytu." - }, - "help_request": { - "title": "Prośby o pomoc", - "subtitle": "Zarządzaj prośbami o pomoc z klientów desktopowych", - "new_request": "Nowa prośba o pomoc", - "device": "Urządzenie", - "hostname": "Nazwa hosta", - "message": "Wiadomość", - "status": "Status", - "pending": "Oczekująca", - "accepted": "Zaakceptowana", - "resolved": "Rozwiązana", - "accept": "Akceptuj", - "resolve": "Rozwiąż", - "no_requests": "Brak próśb o pomoc", - "notification": "Prośba o pomoc od", - "stats_total": "Łącznie", - "filter_all": "Wszystkie" - }, - "organizations": { - "title": "Organizacje", - "create": "Utwórz organizację", - "edit": "Edytuj organizację", - "detail": "Szczegóły organizacji", - "name": "Nazwa", - "slug": "Identyfikator (URL)", - "logo_url": "URL logo", - "users": "Użytkownicy", - "devices": "Urządzenia", - "invitations": "Zaproszenia", - "settings": "Ustawienia", - "add_user": "Dodaj użytkownika", - "assign_device": "Przypisz urządzenie", - "create_invitation": "Utwórz zaproszenie", - "delete_confirm": "Usunąć tę organizację? Zostaną usunięci wszyscy powiązani użytkownicy, urządzenia i ustawienia.", - "no_orgs": "Brak organizacji", - "no_orgs_hint": "Utwórz pierwszą organizację, aby rozpocząć zarządzanie urządzeniami i użytkownikami.", - "connection_policy": "Polityka połączeń", - "allow_file_transfer": "Zezwól na transfer plików", - "allow_clipboard": "Zezwól na schowek", - "max_session_duration": "Maks. czas sesji (min)", - "role_owner": "Właściciel", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Członek", - "username": "Nazwa użytkownika", - "password": "Hasło", - "display_name": "Nazwa wyświetlana", - "email": "Email", - "role": "Rola", - "last_login": "Ostatnie logowanie", - "actions": "Akcje", - "device_id": "ID urządzenia", - "department": "Dział", - "building": "Budynek", - "location": "Lokalizacja", - "assigned_user": "Przypisany użytkownik", - "token": "Token", - "expires": "Wygasa", - "used": "Użyto", - "no_users": "Brak użytkowników w tej organizacji.", - "no_devices": "Brak urządzeń przypisanych do tej organizacji.", - "no_invitations": "Brak zaproszeń.", - "user_added": "Użytkownik dodany", - "user_removed": "Użytkownik usunięty", - "user_updated": "Rola użytkownika zaktualizowana", - "device_assigned": "Urządzenie przypisane", - "device_unassigned": "Urządzenie odłączone", - "invitation_created": "Zaproszenie utworzone", - "settings_saved": "Ustawienia zapisane", - "org_deleted": "Organizacja usunięta", - "confirm_remove_user": "Usunąć tego użytkownika z organizacji?", - "confirm_unassign_device": "Odłączyć to urządzenie od organizacji?", - "confirm_delete_org": "Usunąć tę organizację i wszystkie powiązane dane?", - "edit_role": "Zmień rolę", - "raw_settings": "Surowe ustawienia", - "key": "Klucz", - "value": "Wartość", - "save": "Zapisz ustawienia", - "policy_unattended": "Bez nadzoru (natychmiast)", - "policy_attended": "Z potwierdzeniem", - "policy_ask": "Zawsze pytaj", - "expires_hours": "Wygaśnięcie (godziny)", - "loading_failed": "Nie udało się załadować danych organizacji", - "name_slug_required": "Nazwa i slug są wymagane", - "org_created": "Organizacja utworzona", - "org_updated": "Organizacja zaktualizowana", - "create_new_user": "Utwórz nowego", - "add_existing_user": "Dodaj istniejącego", - "none_available": "brak", - "select_user": "Wybierz użytkownika", - "org_role": "Rola w organizacji", - "link_user_hint": "Wybrany użytkownik zostanie powiązany z tą organizacją przy użyciu danych jego konta serwerowego.", - "no_available_users": "Wszyscy użytkownicy serwera są już powiązani z tą organizacją.", - "user_linked": "Użytkownik powiązany z organizacją" - }, - "chat": { - "e2e_enabled": "Szyfrowanie end-to-end", - "e2e_establishing": "Nawiązywanie bezpiecznego kanału...", - "e2e_established": "Bezpieczny kanał nawiązany", - "e2e_unsupported": "Szyfrowanie E2E nie jest obsługiwane w tej przeglądarce", - "typing_indicator": "pisze...", - "read_receipt": "Przeczytano", - "delivered": "Dostarczono", - "file_share": "Plik", - "file_too_large": "Plik za duży (maks. 50MB)", - "file_encrypted": "Szyfrowany transfer pliku", - "presence_online": "Online", - "presence_away": "Zaraz wracam", - "presence_busy": "Zajęty", - "presence_offline": "Offline", - "key_rotation": "Klucze bezpieczeństwa odnowione", - "new_message": "Nowa wiadomość", - "title": "Czat", - "contacts": "Kontakty", - "groups": "Grupy", - "no_contacts": "Brak kontaktów", - "no_groups": "Brak grup", - "no_messages": "Brak wiadomości", - "no_results": "Brak wyników", - "select_conversation": "Wybierz rozmowę aby rozpocząć czat", - "select_conversation_hint": "Wybierz rozmowę, aby wyświetlić wiadomości", - "type_message": "Wpisz wiadomość...", - "send": "Wyślij", - "attach_file": "Dołącz plik", - "emoji": "Emoji", - "info": "Informacje", - "search_messages": "Szukaj wiadomości", - "create_group": "Utwórz grupę", - "group_name": "Nazwa grupy", - "group_name_placeholder": "Wpisz nazwę grupy", - "group_members": "Członkowie", - "cancel": "Anuluj", - "create": "Utwórz", - "members": "członków", - "today": "Dzisiaj", - "yesterday": "Wczoraj", - "react": "Reaguj", - "my_presence": "Mój status", - "search_placeholder": "Szukaj kontaktów i wiadomości" - }, - "toast": { - "device_connected": "Urządzenie połączone", - "device_disconnected": "Urządzenie rozłączone", - "session_started": "Sesja zdalna rozpoczęta", - "session_ended": "Sesja zdalna zakończona", - "file_upload_complete": "Przesyłanie pliku zakończone", - "settings_saved": "Ustawienia zapisane", - "error_generic": "Wystąpił błąd", - "connection_lost": "Utracono połączenie", - "reconnecting": "Ponowne łączenie..." - }, - "theme": { - "dark": "Ciemny", - "light": "Jasny", - "auto": "Systemowy", - "title": "Motyw" - }, - "days": { - "mon": "Pon", - "tue": "Wt", - "wed": "Śr", - "thu": "Czw", - "fri": "Pt", - "sat": "Sob", - "sun": "Ndz" - }, - "toolkit": { - "title": "Narzędziownik", - "subtitle": "Narzędzia administracyjne i diagnostyczne", - "cat_network": "Sieć", - "cat_crypto": "Kryptografia", - "cat_encoding": "Kodowanie", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domena", - "run": "Uruchom", - "generate": "Generuj", - "encode": "Koduj", - "decode": "Dekoduj", - "send": "Wyślij", - "refresh": "Odśwież", - "algorithm": "Algorytm", - "input_text": "Tekst wejściowy", - "enter_text": "Wpisz tekst...", - "length": "Długość", - "options": "Opcje", - "source": "Źródło", - "lines": "Linie", - "log_console": "Konsola", - "log_go": "Serwer Go", - "mac_address": "Adres MAC", - "broadcast": "Adres rozgłoszeniowy", - "ping_title": "Ping", - "ping_desc": "Sprawdź dostępność hosta i opóźnienie", - "tcp_title": "Test portu TCP", - "tcp_desc": "Testuj łączność portu TCP", - "ssl_title": "Inspektor SSL", - "ssl_desc": "Sprawdź szczegóły certyfikatu SSL/TLS", - "http_title": "Kontrola stanu HTTP", - "http_desc": "Zweryfikuj status endpointu HTTP", - "dns_title": "Wyszukiwanie DNS", - "dns_desc": "Rozwiąż nazwę hosta na adres IP", - "whois_title": "Rekordy DNS", - "whois_desc": "Odpytaj rekordy A, AAAA, MX, TXT, NS", - "speed_title": "Test prędkości", - "speed_desc": "Zmierz przepustowość pobierania", - "run_speed_test": "Uruchom test prędkości", - "wol_title": "Wake-on-LAN", - "wol_desc": "Wyślij pakiet magiczny aby obudzić urządzenie", - "wol_sent": "Pakiet magiczny wysłany", - "hash_title": "Generator hashy", - "hash_desc": "Generuj hashe kryptograficzne", - "password_title": "Generator haseł", - "password_desc": "Generuj bezpieczne losowe hasło", - "jwt_title": "Dekoder JWT", - "jwt_desc": "Dekoduj i sprawdź tokeny JSON Web", - "jwt_token": "Token JWT", - "base64_title": "Base64", - "base64_desc": "Koduj lub dekoduj dane Base64", - "url_title": "Koder URL", - "url_desc": "Koduj lub dekoduj komponenty URL", - "processes_title": "Lista procesów", - "processes_desc": "Wyświetl uruchomione procesy systemowe", - "disk_title": "Użycie dysku", - "disk_desc": "Wyświetl użycie partycji dyskowych", - "db_title": "Statystyki bazy danych", - "db_desc": "Wyświetl statystyki tabel bazy danych", - "docker_title": "Kontenery Docker", - "docker_desc": "Wyświetl uruchomione kontenery Docker", - "logs_title": "Przeglądarka logów", - "logs_desc": "Wyświetl ostatnie wpisy logów", - "ip_address": "IP", - "latency": "Opóźnienie", - "ttl": "TTL", - "status": "Status", - "resolved": "Rozwiązano", - "subject": "Podmiot", - "issuer": "Wystawca", - "valid_from": "Ważny od", - "valid_to": "Ważny do", - "days_left": "Dni do wygaśnięcia", - "days": "dni", - "protocol": "Protokół", - "cipher": "Szyfr", - "alt_names": "Nazwy alternatywne", - "chain": "Łańcuch", - "record_type": "Typ", - "record_value": "Wartość", - "hash_value": "Hash", - "entropy": "Entropia", - "very_strong": "Bardzo silne", - "strong": "Silne", - "weak": "Słabe", - "expiry": "Wygaśnięcie", - "expired": "Wygasło", - "valid": "Ważny", - "process_name": "Nazwa", - "db_type": "Typ", - "db_size": "Rozmiar", - "table_name": "Tabela", - "row_count": "Wiersze", - "no_data": "Brak dostępnych danych", - "no_docker": "Nie znaleziono kontenerów Docker lub Docker niedostępny", - "no_logs": "Brak dostępnych wpisów logów" - }, - "policies": { - "title": "Polityki organizacji", - "subtitle": "Zarządzaj politykami bezpieczeństwa, połączeń i funkcji dla organizacji", - "select_org": "Organizacja", - "select_org_placeholder": "Wybierz organizację...", - "select_org_first": "Wybierz organizację, aby zobaczyć dziennik zmian polityk.", - "configured": "Skonfigurowano", - "connection_title": "Polityka połączeń", - "connection_desc": "Kontroluj sposób nawiązywania sesji zdalnych", - "connection_mode": "Tryb połączenia", - "mode_attended": "Z obsługą (wymaga zatwierdzenia użytkownika)", - "mode_unattended": "Bez obsługi (zawsze zezwalaj)", - "mode_ask": "Zawsze pytaj", - "max_session": "Maks. czas sesji (minuty)", - "idle_lock": "Blokada bezczynności (minuty)", - "wallpaper_policy": "Tapeta podczas sesji", - "wallpaper_show": "Pokaż", - "wallpaper_hide_session": "Ukryj podczas sesji", - "wallpaper_hide_always": "Zawsze ukrywaj", - "features_title": "Polityka funkcji", - "features_desc": "Włącz lub wyłącz określone funkcje dla urządzeń", - "allow_file_transfer": "Zezwól na przesyłanie plików", - "allow_clipboard": "Zezwól na synchronizację schowka", - "allow_audio": "Zezwól na strumieniowanie dźwięku", - "allow_recording": "Zezwól na nagrywanie sesji", - "security_title": "Polityka bezpieczeństwa", - "security_desc": "Wymuszaj wymagania bezpieczeństwa dla urządzeń organizacji", - "require_2fa": "Wymagaj 2FA dla dostępu bez obsługi", - "password_min_length": "Minimalna długość hasła", - "password_require_special": "Wymagaj znaków specjalnych", - "password_max_age": "Maks. wiek hasła (dni, 0=nigdy)", - "allowed_operators": "Dozwolone role operatorów (po przecinku)", - "network_title": "Polityka sieciowa", - "network_desc": "Kontroluj serwery relay i bezpośrednie połączenia", - "block_direct_p2p": "Blokuj bezpośrednie P2P (wymuszaj relay)", - "block_direct_p2p_hint": "Dotyczy urządzeń w tej organizacji. Domyślny tryb globalny ustawiasz w Ustawienia → Strategia połączeń.", - "allowed_relays": "Dozwolone serwery relay (po jednym w linii)", - "ip_allowlist": "Lista dozwolonych IP (CIDR, po jednym w linii)", - "update_title": "Polityka aktualizacji", - "update_desc": "Kontroluj automatyczne aktualizacje i kanały aktualizacji", - "auto_update": "Włącz automatyczne aktualizacje", - "update_channel": "Kanał aktualizacji", - "audit_title": "Zmiany polityk", - "audit_desc": "Historia ostatnich zmian polityk", - "no_audit": "Brak zarejestrowanych zmian polityk.", - "save_success": "Polityka zapisana pomyślnie", - "save_failed": "Nie udało się zapisać polityki", - "load_failed": "Nie udało się wczytać polityk" - }, - "attestation": { - "title": "Atestacja urządzeń", - "subtitle": "Monitoruj weryfikację tożsamości urządzeń i odciski sprzętowe", - "verified": "Zweryfikowane", - "pending": "Oczekujące", - "failed": "Nieudane", - "device_list": "Rekordy atestacji urządzeń", - "device_list_desc": "Odciski sprzętowe i status weryfikacji tożsamości", - "col_device": "ID urządzenia", - "col_hostname": "Nazwa hosta", - "col_fingerprint": "Odcisk", - "col_status": "Status", - "col_last_check": "Ostatnie sprawdzenie", - "col_actions": "Akcje", - "no_records": "Nie znaleziono rekordów atestacji.", - "verify_success": "Urządzenie oznaczone jako zweryfikowane", - "verify_failed": "Nie udało się zweryfikować urządzenia", - "revoke_success": "Atestacja urządzenia odwołana", - "revoke_failed": "Nie udało się odwołać atestacji" - }, - "fleet": { - "title": "Zarządzanie flotą", - "tab_resources": "Zasoby", - "tab_tasks": "Zadania", - "tab_builder": "Konstruktor", - "tab_compliance": "Zgodność", - "res_title": "Mapowanie zasobów", - "res_all_types": "Wszystkie typy", - "res_type_printer": "Drukarka", - "res_type_network_drive": "Dysk sieciowy", - "res_type_dns": "Serwer DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Dodaj zasób", - "res_name": "Nazwa zasobu", - "res_type": "Typ", - "res_address": "Adres / Ścieżka", - "res_target": "Cel", - "res_scope": "Zakres", - "res_scope_org": "Organizacja", - "res_scope_group": "Grupa", - "res_scope_device": "Urządzenie", - "res_scope_value": "Wartość zakresu", - "res_status": "Status", - "res_active": "Aktywny", - "res_inactive": "Nieaktywny", - "res_no_data": "Nie znaleziono zasobów. Kliknij 'Dodaj zasób', aby utworzyć.", - "res_confirm_delete": "Czy na pewno chcesz usunąć ten zasób?", - "task_title": "Harmonogram zadań", - "task_all_status": "Wszystkie statusy", - "task_status_pending": "Oczekujące", - "task_status_running": "W toku", - "task_status_success": "Sukces", - "task_status_failed": "Błąd", - "task_search": "Szukaj zadań…", - "task_create": "Utwórz zadanie", - "task_name": "Nazwa zadania", - "task_type": "Typ", - "task_type_script": "Skrypt", - "task_type_install": "Instalacja", - "task_type_update": "Aktualizacja", - "task_type_restart": "Ponowne uruchomienie", - "task_type_deploy": "Wdrożenie", - "task_type_scan": "Skan", - "task_targets": "Cele", - "task_targets_help": "ID urządzeń lub nazwy grup, oddzielone przecinkami", - "task_schedule": "Harmonogram", - "task_schedule_once": "Jednorazowo", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interwał", - "task_schedule_value": "Wartość harmonogramu", - "task_script": "Skrypt / Polecenie", - "task_retries": "Ponowienia", - "task_timeout": "Timeout (s)", - "task_last_run": "Ostatnie uruchomienie", - "task_no_data": "Nie znaleziono zadań. Kliknij 'Utwórz zadanie', aby rozpocząć.", - "task_confirm_delete": "Czy na pewno chcesz usunąć to zadanie?", - "task_output": "Wyjście zadania", - "task_retry": "Ponów", - "builder_title": "Konstruktor przepływów", - "builder_select_workflow": "Wybierz przepływ…", - "builder_new": "Nowy", - "builder_save": "Zapisz", - "builder_export": "Eksportuj", - "builder_execute": "Wykonaj", - "builder_dry_run": "Test", - "builder_triggers": "Wyzwalacze", - "builder_conditions": "Warunki", - "builder_actions": "Akcje", - "builder_results": "Wyniki", - "builder_transforms": "Transformacje", - "builder_properties": "Właściwości", - "builder_no_selection": "Wybierz węzeł, aby edytować jego właściwości.", - "workflow_name": "Nazwa przepływu:", - "comp_title": "Zgodność oprogramowania", - "comp_compliant": "Zgodne", - "comp_warning": "Ostrzeżenie", - "comp_critical": "Krytyczne", - "comp_score": "Śr. wynik", - "comp_device": "Urządzenie", - "comp_hostname": "Nazwa hosta", - "comp_os": "System", - "comp_score_col": "Wynik", - "comp_issues": "Problemy", - "comp_last_scan": "Ostatni skan", - "comp_scan": "Skanuj", - "comp_scan_all": "Skanuj wszystko", - "comp_remediate": "Napraw", - "comp_remediate_confirm": "Uruchomić auto-naprawę na tym urządzeniu?", - "comp_no_data": "Brak danych zgodności. Uruchom skan, aby rozpocząć.", - "save": "Zapisz", - "cancel": "Anuluj", - "close": "Zamknij", - "edit": "Edytuj", - "delete": "Usuń", - "actions": "Akcje", - "all_orgs": "Wszystkie organizacje", - "select_org_placeholder": "Wybierz organizację…", - "all_types": "Wszystkie typy", - "type_printer": "Drukarka", - "type_network_drive": "Dysk sieciowy", - "type_dns": "Serwer DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Dodaj zasób", - "edit_resource": "Edytuj zasób", - "col_name": "Nazwa", - "col_type": "Typ", - "col_target": "Cel", - "col_scope": "Zakres", - "col_status": "Status", - "col_actions": "Akcje", - "no_resources": "Nie znaleziono zasobów. Kliknij 'Dodaj zasób', aby utworzyć.", - "active": "Aktywny", - "inactive": "Nieaktywny", - "address": "Adres / Ścieżka", - "scope_org": "Organizacja", - "scope_group": "Grupa", - "scope_device": "Urządzenie", - "scope_value": "Wartość zakresu", - "scope_value_hint": "Nazwa organizacji, grupy lub ID urządzenia", - "confirm_delete": "Czy na pewno chcesz usunąć ten element?", - "all_statuses": "Wszystkie statusy", - "status_pending": "Oczekujące", - "status_running": "W toku", - "status_success": "Sukces", - "status_failed": "Błąd", - "search_tasks": "Szukaj zadań…", - "create_task": "Utwórz zadanie", - "edit_task": "Edytuj zadanie", - "col_task_name": "Nazwa zadania", - "col_task_type": "Typ", - "col_schedule": "Harmonogram", - "col_last_run": "Ostatnie uruchomienie", - "no_tasks": "Nie znaleziono zadań. Kliknij 'Utwórz zadanie', aby rozpocząć.", - "task_type_file_deploy": "Wdrożenie pliku", - "task_type_registry": "Rejestr", - "target_devices": "Urządzenia docelowe", - "target_hint": "ID urządzeń lub nazwy grup, oddzielone przecinkami", - "schedule_immediate": "Natychmiast", - "schedule_once": "Jednorazowo", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Skrypt / Polecenie", - "retry_count": "Ponowienia", - "timeout_sec": "Limit czasu (s)", - "loading": "Ładowanie", - "no_output": "Brak danych wyjściowych", - "error_loading": "Błąd ładowania danych", - "select_workflow": "Wybierz przepływ…", - "new_workflow": "Nowy", - "export": "Eksportuj", - "execute": "Wykonaj", - "dry_run": "Test", - "node_triggers": "Wyzwalacze", - "node_manual": "Ręczny wyzwalacz", - "node_schedule": "Harmonogram", - "node_event": "Wyzwalacz zdarzenia", - "node_conditions": "Warunki", - "node_os_check": "Sprawdzenie OS", - "node_threshold": "Próg", - "node_time_window": "Okno czasowe", - "node_actions": "Akcje", - "node_run_script": "Uruchom skrypt", - "node_install": "Zainstaluj oprogr.", - "node_restart": "Restart usługi", - "node_file_deploy": "Wdróż plik", - "node_send_message": "Wyślij wiadomość", - "node_results": "Wyniki", - "node_log_output": "Wyjście logów", - "node_send_alert": "Wyślij alert", - "node_chain": "Łańcuch przepływów", - "node_transforms": "Transformacje", - "node_parse_json": "Parsuj JSON", - "node_filter": "Filtruj", - "node_delay": "Opóźnienie", - "node_properties": "Właściwości", - "all_organizations": "Wszystkie organizacje", - "scan_all": "Skanuj wszystko", - "compliant": "Zgodne", - "non_compliant": "Ostrzeżenie", - "critical_issues": "Krytyczne", - "avg_score": "Śr. wynik", - "col_device": "Urządzenie", - "col_hostname": "Nazwa hosta", - "col_os": "System", - "col_score": "Wynik", - "col_issues": "Problemy", - "col_last_scan": "Ostatni skan", - "no_compliance_data": "Brak danych zgodności. Uruchom skan, aby rozpocząć.", - "confirm_remediate": "Uruchomić auto-naprawę na tym urządzeniu?", - "builder_node_trigger_manual": "Wyzwalacz ręczny", - "builder_node_trigger_schedule": "Harmonogram", - "builder_node_trigger_event": "Wyzwalacz zdarzenia", - "builder_node_cond_os": "Sprawdzenie systemu", - "builder_node_cond_threshold": "Próg", - "builder_node_cond_time_window": "Okno czasowe", - "builder_node_action_script": "Uruchom skrypt", - "builder_node_action_install": "Zainstaluj oprogramowanie", - "builder_node_action_restart": "Restart usługi", - "builder_node_action_file_deploy": "Wdróż plik", - "builder_node_action_message": "Wyślij wiadomość", - "builder_node_result_log": "Wyjście logów", - "builder_node_result_alert": "Wyślij alert", - "builder_node_result_chain": "Połącz z przepływem", - "builder_node_transform_parse": "Parsuj JSON", - "builder_node_transform_filter": "Filtruj", - "builder_node_transform_delay": "Opóźnienie" - }, - "scaling": { - "title": "Skalowanie i zarządzanie przekaźnikami", - "tab_overview": "Przegląd", - "tab_relays": "Węzły przekaźnikowe", - "tab_rules": "Reguły przypisania", - "tab_capacity": "Planowanie pojemności", - "arch_title": "Architektura sieci", - "arch_loading": "Ładowanie diagramu architektury...", - "stat_relay_nodes": "Węzły przekaźnikowe", - "stat_total_devices": "Łączna liczba urządzeń", - "stat_active_sessions": "Aktywne sesje", - "stat_bandwidth": "Całkowita przepustowość", - "relay_health": "Stan przekaźników", - "no_relays": "Brak skonfigurowanych węzłów przekaźnikowych. Dodaj pierwszy węzeł, aby rozkładać obciążenie.", - "relay_search": "Szukaj przekaźników...", - "relay_add": "Dodaj węzeł przekaźnikowy", - "relay_edit": "Edytuj węzeł przekaźnikowy", - "col_name": "Nazwa", - "col_address": "Adres", - "col_location": "Lokalizacja", - "col_devices": "Urządzenia", - "col_sessions": "Sesje", - "col_bandwidth": "Przepustowość", - "col_status": "Status", - "col_actions": "Akcje", - "col_priority": "Priorytet", - "col_rule_name": "Nazwa reguły", - "col_match": "Dopasowanie", - "col_target_relay": "Docelowy przekaźnik", - "col_fallback": "Zapasowy", - "status_online": "Online", - "status_degraded": "Pogorszony", - "status_offline": "Offline", - "status_enabled": "Włączony", - "status_disabled": "Wyłączony", - "confirm_delete_relay": "Czy na pewno chcesz usunąć ten węzeł przekaźnikowy?", - "confirm_delete_rule": "Czy na pewno chcesz usunąć tę regułę przypisania?", - "relays_info_banner": "Ta lista ma charakter informacyjny. Faktycznie używane przez klientów serwery przekaźnikowe konfiguruje się zmienną środowiskową RELAY_SERVERS po stronie serwera BetterDesk.", - "relay_name_address_required": "Nazwa i adres są wymagane.", - "relay_save_failed": "Nie udało się zapisać węzła przekaźnikowego.", - "relay_delete_failed": "Nie udało się usunąć węzła przekaźnikowego.", - "relay_saved": "Węzeł przekaźnikowy zapisany.", - "relay_deleted": "Węzeł przekaźnikowy usunięty.", - "rule_name_value_required": "Nazwa reguły oraz wartość dopasowania są wymagane.", - "rule_save_failed": "Nie udało się zapisać reguły.", - "rule_delete_failed": "Nie udało się usunąć reguły.", - "rule_saved": "Reguła zapisana.", - "rule_deleted": "Reguła usunięta.", - "rules_hint": "Reguły przypisania określają, który serwer przekaźnikowy obsługuje określone grupy urządzeń. Reguły są oceniane według priorytetu (najniższy pierwszy).", - "no_rules": "Brak reguł przypisania.", - "rule_add": "Dodaj regułę", - "rule_edit": "Edytuj regułę", - "rule_match_type": "Typ dopasowania", - "match_subnet": "Podsieć", - "match_group": "Grupa urządzeń", - "match_tag": "Tag urządzenia", - "match_location": "Lokalizacja", - "rule_match_value": "Wartość dopasowania", - "fallback_master": "Serwer główny", - "fallback_nearest": "Najbliższy przekaźnik", - "relay_max_sessions": "Maks. sesji", - "relay_max_bandwidth": "Maks. przepustowość (Mbps)", - "cap_tiers": "Poziomy pojemności", - "cap_loading": "Ładowanie danych pojemności...", - "cap_recommendations": "Zalecenia", - "cap_no_recs": "Brak dostępnych zaleceń.", - "cap_planning": "Planowanie infrastruktury", - "cap_config": "Konfiguracja", - "cap_max_devices": "Maks. urządzeń", - "cap_max_sessions": "Maks. sesji", - "cap_current": "Aktualny", - "cap_utilization": "Wykorzystanie", - "cap_tier_devices": "Pojemność urządzeń", - "cap_tier_sessions": "Pojemność sesji", - "cap_tier_bandwidth": "Pojemność przepustowości", - "cap_single_sqlite": "Pojedynczy serwer (SQLite)", - "cap_single_pg": "Pojedynczy serwer (PostgreSQL)", - "cap_master_3": "Główny + 3 przekaźniki", - "cap_master_10": "Główny + 10 przekaźników", - "rec_no_relays": "Brak skonfigurowanych węzłów. Rozważ dodanie przekaźników dla lepszej wydajności i redundancji.", - "rec_devices_high": "Wykorzystanie urządzeń jest wysokie. Rozważ dodanie więcej przekaźników.", - "rec_sessions_high": "Pojemność sesji zbliża się do limitu. Rozważ rozbudowę infrastruktury.", - "rec_cpu_high": "Niektóre przekaźniki zgłaszają wysokie użycie CPU. Rozważ równoważenie obciążenia.", - "rec_all_good": "Wszystkie systemy działają w normalnych parametrach. Nie jest wymagana żadna akcja.", - "save": "Zapisz", - "cancel": "Anuluj", - "edit": "Edytuj", - "delete": "Usuń", - "close": "Zamknij" - }, - "cross_platform": { - "title": "Kompatybilność wieloplatformowa", - "tab_matrix": "Macierz kompatybilności", - "tab_distribution": "Dystrybucja", - "tab_protocols": "Protokoły", - "tab_limitations": "Ograniczenia", - "matrix_hint": "Macierz obsługi funkcji na wszystkich wspieranych platformach. Zielony = pełne wsparcie, żółty = częściowe, szary = niedostępne, niebieski = planowane.", - "col_feature": "Funkcja", - "legend_full": "Pełne wsparcie", - "legend_partial": "Częściowe wsparcie", - "legend_none": "Niedostępne", - "legend_planned": "Planowane", - "platform_breakdown": "Podział platform", - "arch_breakdown": "Podział architektur", - "version_breakdown": "Podział wersji", - "summary": "Podsumowanie", - "total_devices": "Razem urządzeń", - "unique_platforms": "Platformy", - "unique_archs": "Architektury", - "unique_versions": "Wersje klienta", - "no_devices": "Brak zarejestrowanych urządzeń.", - "protocols_hint": "Negocjacja możliwości protokołu zapewnia, że każdy klient otrzymuje tylko obsługiwane funkcje. Serwer dostosowuje zachowanie na podstawie zgłoszonych możliwości.", - "capability_negotiation": "Negocjacja możliwości", - "codec_support": "Obsługa kodeków (urządzenia online)", - "feature_support": "Obsługa funkcji (urządzenia online)", - "no_codec_data": "Brak danych o kodekach z urządzeń online.", - "no_feature_data": "Brak danych o funkcjach z urządzeń online.", - "protobuf_schema": "Schemat Protobuf ClientCapabilities", - "diagram_client": "Klient", - "diagram_server": "Serwer BetterDesk", - "diagram_peer": "Zdalny peer", - "limitations_hint": "Każda platforma ma specyficzne ograniczenia wpływające na dostępne funkcje. Zwróć uwagę na te ograniczenia przy planowaniu wdrożeń.", - "feat_desktop_client": "Klient desktopowy", - "feat_background_agent": "Agent w tle", - "feat_remote_target": "Cel zdalny", - "feat_screen_capture": "Przechwytywanie ekranu", - "feat_input_injection": "Wstrzykiwanie wejścia", - "feat_file_transfer": "Transfer plików", - "feat_clipboard_sync": "Synchronizacja schowka", - "feat_audio_streaming": "Strumieniowanie audio", - "feat_chat": "Czat", - "feat_h264": "Kodek H.264", - "feat_vp9": "Kodek VP9", - "feat_av1": "Kodek AV1", - "feat_cdap_agent": "Agent CDAP", - "feat_session_recording": "Nagrywanie sesji", - "feat_multi_monitor": "Wiele monitorów", - "feat_unattended_access": "Dostęp nienadzorowany", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Przeglądarka", - "platform_chromeos": "ChromeOS", - "status_production": "Produkcja", - "status_testing": "Testowanie", - "status_planned": "Planowane", - "status_limited": "Ograniczone", - "status_experimental": "Eksperymentalne", - "limit_win_uac": "Wymagana elevacja UAC do instalacji usługi i wstrzykiwania wejścia na bezpiecznych pulpitach.", - "limit_win_service": "Działa jako usługa NSSM pod izolowanymi kontami wirtualnymi (NT SERVICE\\); uprawnienia administratora wymagane tylko do instalacji.", - "limit_win_firewall": "Reguły Zapory Windows muszą zezwalać na porty 21115-21119 dla połączeń relay.", - "limit_win_virtual_account": "Usługi działają pod izolowanymi kontami wirtualnymi zamiast LocalSystem; niestandardowe ścieżki logów mogą wymagać dostosowania ACL.", - "limit_linux_wayland": "Kompozytory Wayland ograniczają programowe przechwytywanie ekranu; wymagane API portalu PipeWire.", - "limit_linux_pipewire": "Przechwytywanie audio wymaga PipeWire; fallback PulseAudio dostępny ale ograniczony.", - "limit_linux_arm": "Kompilacje ARM64 dostępne; niektóre kodeki mogą używać dekodowania programowego (wolniejsze).", - "limit_linux_unprivileged": "Usługi działają jako dedykowany nieuprzywilejowany użytkownik 'betterdesk' z zabezpieczeniami systemd (NoNewPrivileges, ProtectSystem=strict).", - "limit_mac_screen": "Wymagane uprawnienie Screen Recording w Preferencjach systemowych > Prywatność.", - "limit_mac_signing": "Agent musi być podpisany Apple Developer ID do dystrybucji.", - "limit_mac_notarize": "Notaryzacja wymagana dla macOS Gatekeeper (dystrybucja poza App Store).", - "limit_android_projection": "API MediaProjection wymaga zgody użytkownika dla każdej sesji przechwytywania ekranu.", - "limit_android_accessibility": "Wstrzykiwanie wejścia wymaga AccessibilityService; ograniczone w Android 14+.", - "limit_android_battery": "Usługa w tle ograniczona przez tryb Doze; może wymagać zwolnienia z optymalizacji baterii.", - "limit_ios_capture": "Apple zabrania przechwytywania ekranu w tle; obsługiwany tylko tryb podglądu.", - "limit_ios_input": "Wstrzykiwanie wejścia niedozwolone; tylko zdalny podgląd i czat.", - "limit_ios_appstore": "Dystrybucja wyłącznie przez App Store; TestFlight do testów beta.", - "limit_web_https": "API WebCodecs i WebRTC wymagają HTTPS; HTTP korzysta z JMuxer (ograniczone kodeki).", - "limit_web_codec": "Obsługa kodeków zależy od przeglądarki; H.264 szeroko wspierany, VP9/AV1 różnie.", - "limit_web_performance": "Wydajność ograniczona przez sandbox przeglądarki; brak bezpośredniego sprzętowego przyspieszenia.", - "limit_chrome_crostini": "Pełne wsparcie agenta tylko wewnątrz kontenera Linux Crostini.", - "limit_chrome_pwa": "Tryb PWA zapewnia tylko funkcje webowe; brak natywnych możliwości agenta.", - "limit_chrome_input": "Wstrzykiwanie wejścia nieobsługiwane poza kontenerem Crostini." - }, - "security_audit": { - "title": "Audyt Bezpieczeństwa", - "tab_overview": "Przegląd", - "tab_events": "Zdarzenia audytu", - "tab_hardening": "Utwardzanie", - "tab_vulnerabilities": "Podatności", - "security_score": "Wynik bezpieczeństwa", - "failed_logins": "Nieudane logowania (24h)", - "active_bans": "Aktywne blokady", - "api_keys": "Klucze API", - "old_keys": "Stare klucze (>90d)", - "security_checks": "Kontrole bezpieczeństwa", - "tls_status": "Status TLS", - "pass": "OK", - "warning": "Ostrzeżenie", - "fail": "Błąd", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "Bezpieczny WebSocket", - "enabled": "Włączony", - "disabled": "Wyłączony", - "all_events": "Wszystkie zdarzenia", - "event_login_failed": "Logowanie nieudane", - "event_login_success": "Logowanie udane", - "event_peer_banned": "Urządzenie zablokowane", - "event_ip_banned": "IP zablokowany", - "event_config_changed": "Zmiana konfiguracji", - "event_key_created": "Klucz utworzony", - "refresh": "Odśwież", - "col_time": "Czas", - "col_action": "Akcja", - "col_actor": "Aktor", - "col_target": "Cel", - "col_ip": "Adres IP", - "col_details": "Szczegóły", - "no_events": "Nie znaleziono zdarzeń audytu.", - "hardening_hint": "Priorytety utwardzania bezpieczeństwa dla Twojego wdrożenia BetterDesk. Elementy posortowane według ważności.", - "no_hardening": "Brak elementów utwardzania.", - "vuln_hint": "Wyniki skanowania podatności zależności. Uruchamiaj npm audit regularnie.", - "no_vulns": "Nie znaleziono podatności. Twoje zależności są bezpieczne." - }, - "languages": { - "title": "Zarządzanie językami", - "total_languages": "Liczba języków", - "fully_translated": "W pełni przetłumaczone", - "needs_review": "Wymaga przeglądu", - "reference_keys": "Klucze referencyjne", - "no_languages": "Nie znaleziono plików językowych.", - "badge_reference": "Referencyjny", - "badge_review": "Wymaga przeglądu", - "badge_complete": "Kompletny", - "coverage": "pokrycie", - "keys": "klucze", - "missing": "brakujące", - "extra": "nadmiarowe", - "view_missing": "Pokaż brakujące", - "fix_missing": "Wymagane ręczne tłumaczenie", - "missing_keys_for": "Brakujące klucze dla", - "missing_keys_count": "brakujących kluczy (pokazano wartości referencyjne EN/PL)", - "and_more": "i jeszcze {n}...", - "all_keys_present": "Wszystkie klucze są obecne!", - "confirm_fix": "Automatyczne uzupełnianie języka {code} jest wyłączone.", - "fixed_title": "Wymagane ręczne tłumaczenie", - "fixed_msg": "Brakujące klucze w {code} muszą zostać przetłumaczone ręcznie.", - "no_fix_needed": "Brak brakujących kluczy do uzupełnienia." - }, - "resource_control": { - "title": "Kontrola zasobów", - "tab_overview": "Przegląd", - "tab_usb": "Kontrola USB", - "tab_optical": "Napędy optyczne", - "tab_monitors": "Monitory", - "tab_disks": "Dostęp do dysków", - "tab_quotas": "Limity zasobów", - "compliance_by_category": "Zgodność według kategorii", - "device_compliance": "Zgodność urządzeń", - "search_devices": "Szukaj urządzeń...", - "col_device": "Urządzenie", - "col_platform": "Platforma", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optyczne", - "col_monitors": "Monitory", - "col_disks": "Dyski", - "col_quotas": "Limity", - "col_actions": "Akcje", - "stat_total_devices": "Łącznie urządzeń", - "stat_compliant": "Zgodne", - "stat_partial": "Częściowe", - "stat_noncompliant": "Niezgodne", - "stat_compliance_rate": "Wskaźnik zgodności", - "badge_na": "Nie dotyczy", - "badge_compliant": "OK", - "badge_partial": "Częściowo", - "badge_noncompliant": "Błąd", - "btn_configure": "Konfiguruj", - "no_devices": "Nie znaleziono urządzeń", - "usb_title": "Kontrola portów USB", - "usb_hint": "Kontroluj dostęp do urządzeń pamięci USB dla wybranego urządzenia albo domyślnej polityki organizacji.", - "usb_storage_policy": "Polityka pamięci USB", - "usb_whitelist": "Dozwolone urządzenia (po jednym w linii)", - "usb_whitelist_hint": "VID:PID (np. 0781:5583)", - "usb_audit_log": "Loguj podłączanie urządzeń USB", - "optical_title": "Kontrola napędów optycznych", - "optical_hint": "Kontroluj dostęp do napędów CD/DVD/Blu-ray dla wybranego urządzenia.", - "optical_policy": "Polityka napędów optycznych", - "optical_audit_log": "Loguj dostęp do napędów optycznych", - "monitors_title": "Zarządzanie monitorami", - "monitors_hint": "Konfiguruj ustawienia monitorów, w tym maksymalną liczbę, wymuszenie rozdzielczości, jasność i harmonogram zasilania.", - "monitors_max_count": "Maksymalna liczba monitorów (0 = bez limitu)", - "monitors_max_hint": "0 oznacza brak limitu", - "monitors_resolution": "Maks. rozdzielczość", - "monitors_brightness": "Limit jasności", - "monitors_power_schedule": "Harmonogram zasilania", - "monitors_power_hint": "np. off:22:00-06:00", - "disks_title": "Kontrola dostępu do dysków", - "disks_hint": "Konfiguruj polityki dostępu do dysków, w tym tryb tylko do odczytu, wymuszanie szyfrowania i widoczność partycji.", - "disks_readonly": "Wymuś tryb tylko do odczytu", - "disks_encryption": "Wymagaj szyfrowania (BitLocker/LUKS)", - "disks_smart": "Włącz monitoring S.M.A.R.T.", - "disks_hidden": "Ukryte partycje", - "disks_hidden_hint": "Litery dysków lub punkty montowania oddzielone przecinkami", - "quotas_title": "Limity zasobów", - "quotas_hint": "Ustaw limity CPU, RAM, przepustowości i przestrzeni dyskowej dla użytkowników wybranego urządzenia.", - "quotas_cpu": "Limit CPU", - "quotas_ram": "Limit RAM", - "quotas_bandwidth": "Limit przepustowości (Mbps)", - "quotas_bandwidth_hint": "0 = bez limitu", - "quotas_disk_quota": "Limit dysku (GB)", - "quotas_disk_hint": "0 = bez limitu", - "quotas_process_whitelist": "Lista dozwolonych procesów (po jednym w linii)", - "quotas_process_hint": "np. chrome.exe, code.exe", - "policy_allowed": "Dozwolone", - "policy_blocked": "Zablokowane", - "policy_whitelist": "Tylko lista dozwolonych", - "policy_any": "Dowolne" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Wizualny edytor przepływów dla mostów CDAP", - "new_flow": "Nowy Przepływ", - "open_flow": "Otwórz Przepływ", - "save_flow": "Zapisz Przepływ", - "import_flow": "Importuj Przepływ", - "run_flow": "Uruchom", - "debug": "Debuguj", - "deploy": "Wdróż", - "undo": "Cofnij", - "redo": "Ponów", - "untitled": "Przepływ bez nazwy", - "code_mode": "Tryb kodu", - "toggle_grid": "Przełącz siatkę", - "zoom_in": "Przybliż", - "zoom_out": "Oddal", - "zoom_fit": "Dopasuj do ekranu", - "palette": "Paleta węzłów", - "search_nodes": "Szukaj węzłów...", - "cat_sources": "Źródła", - "cat_processing": "Przetwarzanie", - "cat_outputs": "Wyjścia", - "empty_title": "Zacznij budować", - "empty_desc": "Przeciągnij węzły z palety, aby rozpocząć budowanie przepływu", - "browse_templates": "Przeglądaj szablony", - "inspector": "Inspektor", - "select_node": "Wybierz węzeł, aby wyświetlić jego właściwości", - "console": "Konsola", - "clear_console": "Wyczyść", - "console_ready": "Studio gotowe", - "label": "Etykieta", - "configuration": "Konfiguracja", - "connections": "Połączenia", - "inputs": "Wejścia", - "outputs": "Wyjścia", - "delete_node": "Usuń węzeł", - "nodes": "Węzły", - "wires": "Połączenia", - "status_ready": "Gotowy", - "status_deployed": "Wdrożony", - "flow_name": "Nazwa przepływu", - "flow_desc": "Opis", - "loading": "Ładowanie...", - "no_flows": "Brak zapisanych przepływów", - "confirm_delete": "Czy na pewno chcesz usunąć ten przepływ?", - "templates": "Szablony", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Telemetria urządzenia", - "node_database_query": "Zapytanie bazy danych", - "node_file_watch": "Obserwacja plików", - "node_filter": "Filtr", - "node_transform": "Transformacja", - "node_aggregate": "Agregacja", - "node_delay": "Opóźnienie", - "node_debounce": "Debounce", - "node_switch": "Przełącznik", - "node_merge": "Scalanie", - "node_script": "Skrypt", - "node_widget_update": "Aktualizacja widgetu", - "node_alert": "Alert", - "node_command": "Komenda", - "node_log": "Log", - "node_rest_call": "Wywołanie REST", - "node_mqtt_publish": "Publikacja MQTT", - "node_database_write": "Zapis do bazy danych", - "node_email": "E-mail", - "node_modbus_write": "Zapis Modbus" - }, - "updates": { - "tab_title": "Aktualizacje", - "title": "Aktualizacje oprogramowania", - "desc": "Sprawdź nowe wersje i zaktualizuj konsolę BetterDesk oraz serwer Go z repozytorium GitHub", - "current_version": "Zainstalowana wersja", - "latest_version": "Najnowszy commit", - "status": "Status", - "check_now": "Sprawdź aktualizacje", - "checking": "Sprawdzanie…", - "up_to_date": "Aktualna wersja", - "update_available": "Dostępna aktualizacja", - "changelog": "Ostatnie commity", - "no_changelog": "Brak informacji o wydaniu", - "files_changed": "Zmienione pliki", - "files": "plików", - "changes_unavailable": "Nie udało się pobrać listy zmian. Nadal możesz zainstalować aktualizację.", - "create_backup": "Utwórz kopię zapasową przed aktualizacją", - "install": "Zainstaluj", - "install_confirm": "Czy na pewno chcesz zainstalować tę aktualizację? Wszystkie obsługiwane zmienione komponenty zostaną zaktualizowane automatycznie, a konsola zostanie zrestartowana po aktualizacji.", - "installing": "Instalowanie aktualizacji…", - "creating_backup": "Tworzenie kopii zapasowej…", - "downloading": "Pobieranie plików…", - "install_success": "Aktualizacja zainstalowana pomyślnie. Konsola jest restartowana…", - "install_failed": "Instalacja aktualizacji nie powiodła się", - "restarting": "Oczekiwanie na restart konsoli…", - "restart_complete": "Konsola zrestartowana pomyślnie", - "restart_timeout": "Aktualizacja została zastosowana, ale przeglądarka nie potwierdziła restartu automatycznie. Odśwież konsolę, aby sprawdzić nową wersję.", - "no_version": "Nie wybrano wersji aktualizacji. Najpierw sprawdź dostępne aktualizacje.", - "backups_title": "Kopie zapasowe aktualizacji", - "backups_desc": "Kopie zapasowe tworzone automatycznie przed każdą aktualizacją", - "no_backups": "Brak kopii zapasowych aktualizacji", - "restore": "Przywróć", - "restore_confirm": "Czy na pewno chcesz przywrócić z tej kopii zapasowej? Zmienione pliki zostaną nadpisane.", - "restore_success": "Kopia zapasowa przywrócona pomyślnie. Konsola jest restartowana…", - "delete": "Usuń", - "delete_confirm": "Trwale usunąć kopię zapasową {name}? Tej operacji nie można cofnąć.", - "delete_success": "Kopia zapasowa usunięta", - "delete_failed": "Nie udało się usunąć kopii zapasowej", - "retention_label": "Zachowaj N najnowszych kopii", - "retention_hint": "Starsze kopie są usuwane automatycznie po każdej aktualizacji. Wpisz 0, aby zachować wszystkie.", - "retention_saved": "Ustawienie retencji zapisane", - "retention_invalid": "Retencja musi być liczbą całkowitą między 0 a 1000", - "retention_required_for_prune": "Najpierw ustaw wartość retencji większą od 0", - "prune_now": "Zastosuj teraz", - "prune_confirm": "Zachować tylko {n} najnowszych kopii i usunąć resztę?", - "prune_done": "Usunięto {n} kopii", - "total_size": "Całkowity rozmiar", - "backups_count": "kopii", - "baseline_set": "Punkt odniesienia ustawiony", - "commits_behind": "commitów do tyłu", - "total_files": "Łączna liczba plików", - "applied": "Zastosowane", - "failed": "Nieudane", - "skipped": "Pominięte", - "removed": "Usunięte", - "auto": "Auto", - "manual": "Ręcznie", - "component_console": "Konsola Web", - "component_server": "Serwer Go", - "component_agent": "Agent", - "component_scripts": "Skrypty i Docker", - "component_other": "Inne", - "server_rebuild_warning": "Źródła serwera Go uległy zmianie — binarka serwera zostanie zaktualizowana automatycznie.", - "include_server": "Serwer Go zostanie zaktualizowany automatycznie", - "checking_go": "Sprawdzanie Go…", - "go_not_found": "Go nie zainstalowane", - "go_check_failed": "Nie udało się sprawdzić dostępności Go", - "server_building": "Kompilacja serwera Go… To może zająć kilka minut.", - "server_built": "Binarka serwera skompilowana", - "server_build_failed": "Kompilacja serwera nie powiodła się", - "server_stale_title": "Nieaktualna binarka serwera", - "server_stale_desc": "Źródła serwera Go zostały zaktualizowane, ale działająca binarka nie została przebudowana. Przebuduj ją teraz, aby zastosować aktualizacje bezpieczeństwa i bibliotek.", - "rebuild_server": "Przebuduj binarkę serwera", - "rebuilding_server": "Przebudowywanie…", - "rebuild_server_success": "Binarka serwera przebudowana i zrestartowana", - "rebuild_server_failed": "Przebudowa binarki serwera nie powiodła się", - "docker_title": "Wdrożenie obrazów Docker", - "docker_desc": "Konsola działa z gotowego obrazu kontenera. Aktualizacje wykonujesz przez pobranie nowszych obrazów z GHCR, a nie instalację z panelu ani przebudowę Go.", - "docker_install_note": "Instalacja z panelu jest wyłączona w Dockerze. Uruchom powyższe polecenia na hoście, a następnie odśwież stronę.", - "docker_update_available": "Dostępne nowe obrazy kontenerów", - "docker_sha_unknown": "Aktualne (nieznany commit obrazu)", - "docker_images": "Obrazy", - "server_deployed": "Binarka serwera wdrożona", - "server_deploy_failed": "Wdrożenie serwera nie powiodło się", - "server_build_note": "Kompilacja serwera może zająć 1-5 minut. Usługa aktualizacji uruchomi ją automatycznie, gdy będzie potrzebna.", - "server_source_downloading": "Pobieranie źródeł serwera…", - "strategy_label": "Metoda aktualizacji", - "strategy_download": "Pobierz gotową binarkę", - "strategy_compile": "Skompiluj ze źródeł", - "both_available": "Pobieranie i kompilacja", - "download_available": "Pobieranie dostępne", - "no_method": "Brak metody aktualizacji", - "no_release": "Brak wydania", - "available": "Dostępne", - "server_downloading": "Pobieranie binarki serwera…", - "server_downloaded": "Binarka serwera pobrana", - "server_download_failed": "Pobieranie binarki serwera nie powiodło się", - "server_download_note": "Gotowa binarka zostanie pobrana z GitHub Releases. Zwykle trwa to mniej niż minutę.", - "install_go_hint": "Zainstaluj Go z https://go.dev/dl/ aby włączyć kompilację lub opublikuj wydanie z gotowymi binarkami", - "strategy_install_go": "Pobierz Go i skompiluj automatycznie", - "strategy_install_go_hint": "Pobiera lub odświeża oficjalny zestaw Go (~120 MB) w katalogu danych konsoli, a następnie kompiluje serwer, gdy jest to potrzebne.", - "auto_strategy": "Auto", - "auto_strategy_hint": "Konsola wybierze najlepszą dostępną metodę oraz automatycznie pobierze lub zaktualizuje wymagane narzędzia.", - "auto_available": "Automatyczna przebudowa gotowa", - "toolchain_ready": "Zestaw zainstalowany", - "toolchain_will_install": "Zestaw Go zostanie zainstalowany lub zaktualizowany automatycznie", - "toolchain_downloading": "Pobieranie zestawu Go…", - "toolchain_failed": "Instalacja zestawu Go nie powiodła się", - "modal_title": "Instalowanie aktualizacji", - "modal_done_title": "Aktualizacja zakończona", - "modal_close": "Zamknij", - "modal_reload_now": "Odśwież konsolę", - "phase_confirm": "Potwierdzenie", - "phase_backup": "Kopia zapasowa", - "phase_console": "Pliki konsoli", - "phase_server": "Serwer Go", - "phase_restart": "Ponowne uruchomienie", - "phase_done": "Gotowe", - "preparing": "Przygotowywanie…", - "backup_skipped": "Kopia zapasowa pominięta (wybór operatora)", - "server_skipped": "Serwer Go pominięty", - "server_not_selected": "Brak zmian serwera Go", - "server_processing": "Przetwarzanie aktualizacji serwera Go…", - "no_restart_needed": "Restart nie jest wymagany", - "complete": "Aktualizacja zastosowana", - "complete_summary": "Aktualizacja została zastosowana pomyślnie.", - "complete_with_errors": "Aktualizacja zakończona, ale niektóre kroki się nie powiodły. Szczegóły poniżej.", - "modal_done_with_errors_title": "Aktualizacja zakończona z błędami", - "console_will_restart": "Proces konsoli zostanie teraz zrestartowany…", - "restart_complete_msg": "Konsola zakończyła restart. Kliknij Odśwież, aby załadować nową wersję. Strona zostanie odświeżona automatycznie za 8 sekund.", - "refresh_recommended": "Zmieniły się statyczne zasoby — odśwież stronę, aby zobaczyć nowy interfejs.", - "confirm_title": "Zastosuj aktualizację", - "confirm_with_backup": "Kopia zapasowa zostanie utworzona automatycznie.", - "confirm_no_backup": "Kopia zapasowa nie zostanie utworzona (na własne ryzyko)." - }, - "accessibility": { - "title": "Dostępność", - "subtitle": "Dostosuj konsolę do wzroku, ruchu i komfortu czytania.", - "close": "Zamknij menu dostępności", - "profiles": "Szybkie profile", - "profile_low_vision": "Słabszy wzrok", - "profile_low_vision_hint": "Większy tekst, mocny kontrast i fokus.", - "profile_dyslexia": "Komfort czytania", - "profile_dyslexia_hint": "Czytelna czcionka i szersze odstępy.", - "profile_motion_safe": "Bez ruchu", - "profile_motion_safe_hint": "Ogranicza przejścia i pauzuje animacje.", - "profile_color_assist": "Wsparcie kolorów", - "profile_color_assist_hint": "Filtr kolorów, etykiety i wyróżnione linki.", - "reading": "Czytanie", - "font_size": "Rozmiar tekstu", - "line_height": "Wysokość linii", - "letter_spacing": "Odstępy liter", - "word_spacing": "Odstępy słów", - "readable_font": "Czytelna czcionka", - "readable_font_hint": "Używa szerokich, znajomych kształtów liter.", - "dyslexia_spacing": "Odstępy dla dysleksji", - "dyslexia_spacing_hint": "Dodaje odstępy w dłuższych tekstach.", - "visual": "Widoczność", - "contrast": "Kontrast", - "contrast_normal": "Normalny", - "contrast_high_dark": "Wysoki kontrast ciemny", - "contrast_high_light": "Wysoki kontrast jasny", - "contrast_yellow_black": "Żółty na czarnym", - "color_filter": "Filtr widzenia kolorów", - "filter_none": "Brak", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsja", - "saturation": "Nasycenie kolorów", - "underline_links": "Podkreśl linki", - "underline_links_hint": "Pokazuje linki bez polegania na kolorze.", - "highlight_links": "Wyróżnij akcje", - "highlight_links_hint": "Obrysowuje linki i przyciski.", - "highlight_headings": "Wyróżnij nagłówki", - "highlight_headings_hint": "Oznacza tytuły sekcji paskiem koloru.", - "hide_media": "Przyciemnij media", - "hide_media_hint": "Przyciemnia obrazy, wideo i płótna.", - "interaction": "Interakcja", - "strong_focus": "Silny fokus", - "strong_focus_hint": "Pokazuje duży obrys fokusu klawiatury.", - "large_cursor": "Duży kursor", - "large_cursor_hint": "Używa większego kursora o wysokim kontraście.", - "reduce_motion": "Ogranicz ruch", - "reduce_motion_hint": "Skraca przejścia i płynne przewijanie.", - "pause_animations": "Pauzuj animacje", - "pause_animations_hint": "Zatrzymuje zapętlony ruch wizualny.", - "reading_guide": "Prowadnica czytania", - "reading_guide_hint": "Podąża za kursorem jasną linią.", - "reading_mask": "Maska czytania", - "reading_mask_hint": "Przyciemnia treść nad i pod kursorem.", - "preview": "Podgląd", - "preview_title": "Podgląd przestrzeni operatora", - "preview_text": "Sprawdź, czy tekst, linki, kontrolki i statusy są wygodne do czytania przed zamknięciem menu.", - "preview_link": "Link do szczegółów urządzenia", - "preview_status": "Online", - "preview_button": "Główna akcja", - "preview_secondary": "Drugorzędna", - "reset": "Resetuj", - "done": "Gotowe" - }, - "server_mgmt": { - "title": "Zarządzanie serwerem", - "subtitle": "Panel typu Cockpit dla hosta konsoli BetterDesk (BETA).", - "beta_tooltip": "Funkcja beta — w aktywnym rozwoju.", - "notice_title": "Funkcja w wersji beta", - "notice_body": "Te narzędzia działają na hoście, na którym uruchomiony jest proces konsoli BetterDesk. Wszystkie operacje są audytowane. Zakres funkcji będzie rozszerzany w kolejnych wydaniach.", - "tab_overview": "Przegląd", - "tab_terminal": "Terminal", - "tab_files": "Pliki", - "tab_services": "Usługi", - "cpu": "CPU", - "memory": "Pamięć", - "load": "Średnie obciążenie", - "disks": "Dyski", - "history": "Historia (ostatnie 60 próbek)", - "host_info": "Informacje o hoście", - "cores": "rdzeni", - "uptime": "Czas pracy", - "no_disks": "Brak danych o dyskach", - "info_hostname": "Nazwa hosta", - "info_platform": "Platforma", - "info_kernel": "Jądro", - "info_node": "Node.js", - "info_process_id": "ID procesu", - "info_pty_available": "PTY dostępne", - "term_connect": "Połącz", - "term_disconnect": "Rozłącz", - "term_clear": "Wyczyść", - "term_status": "Status", - "term_connecting": "Łączenie…", - "term_connected": "Połączono", - "term_disconnected": "Rozłączono", - "term_error": "Błąd połączenia", - "term_warning": "Polecenia wykonywane są jako użytkownik procesu konsoli. Dodaj regułę sudoers, aby umożliwić eskalację uprawnień.", - "term_hint": "Wskazówka: wpisz `sudo -i`, aby uzyskać uprawnienia root (wymaga konfiguracji sudoers).", - "term_lib_failed": "Nie udało się załadować biblioteki terminala", - "files_up": "Poziom wyżej", - "files_go": "Idź", - "files_mkdir": "Nowy folder", - "files_name": "Nazwa", - "files_size": "Rozmiar", - "files_perms": "Uprawnienia", - "files_mtime": "Zmodyfikowano", - "files_rename": "Zmień nazwę", - "files_rename_prompt": "Nowa nazwa:", - "files_empty": "Pusty katalog", - "files_error": "Nie udało się odczytać katalogu", - "read_failed": "Nie udało się odczytać pliku", - "save_failed": "Nie udało się zapisać pliku", - "rename_failed": "Nie udało się zmienić nazwy", - "delete_failed": "Nie udało się usunąć", - "delete_confirm": "Usunąć tę pozycję?", - "mkdir_prompt": "Nazwa nowego folderu:", - "mkdir_failed": "Nie udało się utworzyć folderu", - "file_saved": "Plik zapisany", - "binary_warn": "Plik binarny — tylko podgląd", - "encoding_utf8": "Tekst UTF-8", - "truncated": "obcięty", - "full": "pełny", - "svc_search_placeholder": "Szukaj usług…", - "svc_name": "Usługa", - "svc_state": "Stan", - "svc_description": "Opis", - "svc_empty": "Nie znaleziono usług", - "svc_load_failed": "Nie udało się załadować usług", - "svc_action_failed": "Akcja nie powiodła się", - "svc_confirm": "Uruchomić", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Uruchom ponownie", - "svc_reload": "Przeładuj", - "svc_enable": "Włącz", - "svc_disable": "Wyłącz", - "svc_status": "Status" - }, - "server_attestation": { - "title": "Atest serwera", - "subtitle": "Benchmark wydajności określający pojemność równoległych połączeń zdalnych przy progu 80% obciążenia CPU, RAM i dysku.", - "warning_title": "Test obciążeniowy", - "warning_body": "Benchmark symuluje równoległe połączenia WebSocket do serwera sygnałowego i relay. Uruchamiaj poza godzinami szczytu — test obciąża produkcję.", - "run_benchmark": "Uruchom benchmark", - "abort": "Anuluj", - "download_report": "Pobierz raport JSON", - "last_test": "Ostatni test", - "no_test_yet": "Nie przeprowadzono jeszcze benchmarku", - "max_connections": "Maks. połączeń", - "threshold_80": "Próg 80% — metryki końcowe", - "disk": "Dysk", - "ramp_chart": "Wykres rampy obciążenia", - "connections": "Połączenia", - "connections_short": "poł.", - "tier_guide_title": "Co oznacza tier?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "BRAK", - "tier_bronze_desc": "1–25 równoległych połączeń — mały VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 połączeń — serwer średniej klasy (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 połączeń — serwer wydajny (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 połączeń — infrastruktura enterprise (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ połączeń — turbo klasy: dedykowany hardware, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Uwaga: w Dockerze metryki CPU/RAM mogą odzwierciedlać limit kontenera, nie fizycznego hosta.", - "badge_tooltip": "BetterDesk Server Attestation — certyfikat wydajności serwera", - "confirm_run": "Benchmark obciąży serwer symulując wiele połączeń. Kontynuować?", - "starting": "Uruchamianie…", - "complete": "Benchmark zakończony", - "signal_peers": "Peery signal", - "relay_sessions": "Sesje relay", - "page_error": "Nie udało się załadować strony atestu serwera", - "mode_estimated": "Szacunek (WebSocket niedostępny)", - "incomplete": "Benchmark zakończony bez przypisanego tieru" + "report": { + "title": "Raport pracy", + "subtitle": "Opisz wykonaną pracę podczas tej sesji zdalnej.", + "category": "Kategoria", + "ticket_ref": "Numer zgłoszenia", + "summary": "Wykonana praca", + "skip": "Pomiń na razie", + "submit": "Wyślij raport", + "summary_required": "Podsumowanie jest wymagane", + "saved": "Raport pracy zapisany" } + } } diff --git a/web-nodejs/lang/pt.json b/web-nodejs/lang/pt.json index f476f743..889e5fac 100644 --- a/web-nodejs/lang/pt.json +++ b/web-nodejs/lang/pt.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "pt", - "name": "Portuguese", - "native_name": "Português", - "direction": "ltr" + "meta": { + "lang": "pt", + "name": "Portuguese", + "native_name": "Português", + "direction": "ltr" + }, + "common": { + "loading": "Carregando...", + "confirm": "Confirmar", + "alert": "Alerta", + "prompt": "Insira o valor", + "copied": "Copiado para a área de transferência", + "save": "Salvar", + "saved": "Salvo", + "error": "Erro", + "success": "Sucesso", + "warning": "Aviso", + "info": "Informação", + "all": "Todos", + "cancel": "Cancelar", + "delete": "Excluir", + "actions": "Ações", + "close": "Fechar", + "required": "Obrigatório", + "name_required": "O nome é obrigatório", + "active": "Ativo", + "inactive": "Inativo", + "invalid_json": "JSON inválido", + "field_required": "O campo {field} é obrigatório", + "back": "Voltar", + "edit": "Editar", + "yes": "Sim", + "no": "Não" + }, + "nav": { + "main": "Principal", + "tools": "Ferramentas", + "system": "Sistema", + "dashboard": "Painel", + "devices": "Dispositivos", + "keys": "Chaves", + "generator": "Gerador", + "settings": "Configurações", + "users": "Utilizadores", + "inventory": "Inventário", + "tickets": "Tickets", + "help_requests": "Solicitações de ajuda", + "activity": "Atividade", + "automation": "Automação", + "file_transfer": "Transferência de ficheiros", + "network": "Rede", + "dataguard": "DataGuard", + "reports": "Relatórios", + "tenants": "Inquilinos", + "registrations": "Registos", + "management": "Gerenciamento", + "toggle_sidebar": "Alternar barra lateral", + "cdap": "Dispositivos CDAP", + "fleet": "Frota", + "scaling": "Escalabilidade", + "cross_platform": "Multiplataforma", + "tokens": "Tokens de acesso", + "organizations": "Organizações", + "policies": "Políticas", + "attestation": "Atestação", + "remote": "Acesso remoto", + "toolkit": "Toolkit", + "security_audit": "Auditoria de Segurança", + "languages": "Idiomas", + "resource_control": "Controle de recursos", + "chat": "Chat", + "help": "Ajuda", + "expand_sidebar": "Expandir barra lateral", + "toggle_theme": "Alternar tema", + "sdk_studio": "SDK Studio", + "login": "Entrar", + "permissions": "Permissões", + "server_management": "Gestão do servidor", + "server_attestation": "Atestação do servidor", + "commercialization": "Comercialização" + }, + "auth": { + "login": "Entrar", + "logout": "Sair", + "login_title": "Iniciar sessão", + "login_subtitle": "Entrar na consola BetterDesk", + "username": "Nome de utilizador", + "username_placeholder": "Insira o nome de utilizador", + "password": "Palavra-passe", + "password_placeholder": "Insira a palavra-passe", + "remember_me": "Lembrar-me", + "login_failed": "Falha no início de sessão. Verifique as suas credenciais.", + "invalid_credentials": "Nome de utilizador ou palavra-passe inválidos.", + "username_collision": "Já existe uma conta local com este nome de utilizador. Inicie sessão com a sua palavra-passe local ou peça a um administrador para renomear ou remover a conta em conflito.", + "fill_all_fields": "Preencha todos os campos", + "logout_confirm": "Tem a certeza que deseja sair?", + "change_password": "Alterar palavra-passe", + "password_required": "A palavra-passe é obrigatória", + "totp_title": "Autenticação de dois fatores", + "totp_subtitle": "Insira o código de 6 dígitos da sua aplicação de autenticação", + "totp_code": "Código de verificação", + "totp_verify": "Verificar", + "totp_use_recovery": "Usar um código de recuperação", + "totp_use_code": "Usar código do autenticador", + "totp_recovery_code": "Código de recuperação", + "totp_back_to_login": "Voltar ao início de sessão", + "totp_invalid_code": "Código de verificação inválido. Tente novamente.", + "totp_enter_code": "Insira um código de 6 dígitos", + "totp_enter_recovery": "Insira um código de recuperação", + "totp_session_expired": "Sessão expirada. Por favor, inicie sessão novamente.", + "totp_already_enabled": "A autenticação de dois fatores já está ativada", + "pro_only_account": "Esta conta e apenas para o cliente de ambiente de trabalho RustDesk. Utilize a aplicacao RustDesk para iniciar sessao.", + "passwords_mismatch": "As palavras-passe nao coincidem", + "or": "ou", + "login_sso": "Entrar com SSO", + "login_sso_with": "Entrar com {{provider}}", + "oidc_denied": "O acesso foi negado pelo provedor de identidade.", + "oidc_invalid": "Callback OIDC inválido. Tente novamente.", + "oidc_failed": "A autenticação OIDC falhou. Tente novamente.", + "oidc_error": "Ocorreu um erro durante o login SSO.", + "oidc_no_account": "Sua conta não foi encontrada e o registro automático está desativado.", + "totp_rate_limited": "Muitas tentativas. Tente novamente mais tarde.", + "emergency_mode_banner": "Servidor Go inacessível — executando em modo de emergência (somente administrador, funcionalidade limitada)" + }, + "dashboard": { + "title": "Painel", + "subtitle": "Visão geral do seu servidor RustDesk", + "total_devices": "Total de dispositivos", + "online_now": "Online agora", + "banned": "Banidos", + "active_connections": "Conexões ativas", + "offline_devices": "Offline", + "server_status": "Estado do servidor", + "quick_actions": "Ações rápidas", + "manage_devices": "Gerir dispositivos conectados", + "view_keys": "Ver chaves do servidor", + "generate_config": "Gerar configuração do cliente", + "server_settings": "Definir configurações", + "greeting_morning": "Bom dia, {name}", + "greeting_afternoon": "Boa tarde, {name}", + "greeting_evening": "Boa noite, {name}", + "greeting_night": "Boa noite, {name}", + "health_overview": "Visao geral da saude", + "devices_online": "Dispositivos online", + "active_alerts": "Alertas ativos", + "recent_connections": "Total de dispositivos", + "server_uptime": "Tempo de atividade do servidor", + "activity_feed": "Atividade recente", + "no_recent_activity": "Sem atividade recente", + "just_now": "agora mesmo", + "ago": "atras", + "tip_desktop_mode": "Experimente o Modo Desktop para um espaco de trabalho com varias janelas e widgets de monitorizacao.", + "tip_keyboard_shortcuts": "Prima Ctrl+K em qualquer lugar para abrir a paleta de comandos de pesquisa rapida.", + "tip_address_book": "Sincronize o seu livro de enderecos entre dispositivos iniciando sessao a partir do cliente RustDesk.", + "tip_2fa": "Ative a autenticacao de dois fatores nas Definicoes para maior seguranca da conta.", + "tip_bulk_actions": "Selecione varios dispositivos e utilize acoes em massa para os gerir de uma so vez.", + "tip_theme": "Alterne entre os temas escuro e claro nas definicoes da barra lateral.", + "tip_cdap": "Ligue dispositivos IoT e sensores industriais atraves do gateway CDAP.", + "tip_tutorials": "Clique no botao de ajuda no canto inferior direito para tutoriais interativos." + }, + "devices": { + "title": "Dispositivos", + "id": "ID", + "hostname": "Nome do host", + "username": "Nome de utilizador", + "platform": "Plataforma", + "version": "Versão", + "ip_address": "Endereço IP", + "note": "Nota", + "last_seen": "Última vez visto", + "last_online": "Última vez online", + "first_seen": "Primeira vez visto", + "created": "Criado", + "status": "Estado", + "ban_reason": "Motivo do banimento", + "actions": "Ações", + "search_placeholder": "Pesquisar dispositivos...", + "filter_all": "Todos", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banidos", + "selected": "selecionado(s)", + "showing": "A mostrar", + "of": "de", + "sync_status": "Estado de sincronização", + "sync_success": "Estado sincronizado com sucesso", + "empty_title": "Nenhum dispositivo encontrado", + "empty_text": "Nenhum dispositivo corresponde aos filtros atuais", + "edit_title": "Detalhes do dispositivo", + "delete_title": "Excluir dispositivo", + "delete_confirm": "Tem a certeza que deseja excluir o dispositivo {id}?", + "delete_warning": "Está prestes a excluir permanentemente este dispositivo:", + "delete_permanent": "Esta ação não pode ser revertida. Todos os dados associados a este dispositivo serão permanentemente removidos da base de dados.", + "delete_success": "Dispositivo excluído com sucesso", + "revoke_option": "Revogar dispositivo", + "revoke_hint": "Bloquear ID do dispositivo e desconectar conexões ativas", + "revoke_success": "Dispositivo revogado com sucesso", + "details": "Detalhes do dispositivo", + "ban_title": "Banir dispositivo", + "ban_confirm": "Tem a certeza que deseja banir o dispositivo {id}?", + "ban_success": "Dispositivo banido com sucesso", + "unban_title": "Desbanir dispositivo", + "unban_confirm": "Tem a certeza que deseja desbanir o dispositivo {id}?", + "unban_success": "Dispositivo desbanido com sucesso", + "change_id": "Alterar ID", + "change_id_title": "Alterar ID do dispositivo", + "new_id": "Novo ID", + "change_id_hint": "6-16 caracteres, apenas letras, números, hífens e underscores", + "change_id_success": "ID do dispositivo alterado com sucesso", + "id_length_error": "O ID deve ter 6-16 caracteres", + "id_format_error": "O ID só pode conter letras, números, hífens e underscores", + "bulk_delete_title": "Excluir vários dispositivos", + "bulk_delete_confirm": "Tem a certeza que deseja excluir {count} dispositivos?", + "bulk_delete_success": "{count} dispositivos excluídos com sucesso", + "columns": "Colunas", + "toggle_columns": "Alternar colunas visíveis", + "not_found": "Dispositivo não encontrado", + "delete_failed": "Não foi possível excluir o dispositivo", + "change_id_failed": "Não foi possível alterar o ID do dispositivo", + "invalid_id": "ID de dispositivo inválido", + "invalid_id_format": "Formato de ID inválido", + "id_exists": "Este ID de dispositivo já existe", + "no_selection": "Nenhum dispositivo selecionado", + "device_type": "Tipo de dispositivo", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Conectado", + "revoke": "Revogar", + "access_policy": "Política de acesso", + "unattended_access": "Acesso não supervisionado", + "enable_unattended": "Ativar acesso não supervisionado", + "access_password": "Senha de acesso", + "password_configured": "Senha configurada", + "no_password": "Nenhuma senha configurada", + "new_password": "Nova senha", + "clear_password": "Limpar senha", + "access_schedule": "Agenda de acesso", + "enable_schedule": "Ativar agenda", + "allowed_days": "Dias permitidos", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Operadores permitidos", + "all_operators": "Todos os operadores", + "operators_hint": "Deixe vazio para permitir acesso a todos os operadores.", + "last_updated_by": "Última atualização por", + "access_policy_saved": "Política de acesso salva", + "tabs": { + "overview": "Visão geral", + "hardware": "Hardware", + "metrics": "Métricas", + "connections": "Conexões", + "audit": "Audit", + "info": "Info", + "history": "Histórico" }, - "common": { - "loading": "Carregando...", - "confirm": "Confirmar", - "alert": "Alerta", - "prompt": "Insira o valor", - "copied": "Copiado para a área de transferência", - "save": "Salvar", - "saved": "Salvo", - "error": "Erro", - "success": "Sucesso", - "warning": "Aviso", - "info": "Informação", - "all": "Todos", - "cancel": "Cancelar", - "delete": "Excluir", - "actions": "Ações", - "close": "Fechar", - "required": "Obrigatório", - "name_required": "O nome é obrigatório", - "active": "Ativo", - "inactive": "Inativo", - "invalid_json": "JSON inválido", - "field_required": "O campo {field} é obrigatório", - "back": "Voltar", - "edit": "Editar", - "yes": "Sim", - "no": "Não" + "hardware": { + "cpu": "Processador", + "memory": "Memória", + "disk": "Disco", + "os": "Sistema operativo", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Carga média", + "network": "Adaptadores de rede", + "no_data": "Nenhum dado de hardware disponível", + "title": "Informação de hardware", + "gpu": "Placa gráfica" }, - "nav": { - "main": "Principal", - "tools": "Ferramentas", - "system": "Sistema", - "dashboard": "Painel", - "devices": "Dispositivos", - "keys": "Chaves", - "generator": "Gerador", - "settings": "Configurações", - "users": "Utilizadores", - "inventory": "Inventário", - "tickets": "Tickets", - "help_requests": "Solicitações de ajuda", - "activity": "Atividade", - "automation": "Automação", - "file_transfer": "Transferência de ficheiros", - "network": "Rede", - "dataguard": "DataGuard", - "reports": "Relatórios", - "tenants": "Inquilinos", - "registrations": "Registos", - "management": "Gerenciamento", - "toggle_sidebar": "Alternar barra lateral", - "cdap": "Dispositivos CDAP", - "fleet": "Frota", - "scaling": "Escalabilidade", - "cross_platform": "Multiplataforma", - "tokens": "Tokens de acesso", - "organizations": "Organizações", - "policies": "Políticas", - "attestation": "Atestação", - "remote": "Acesso remoto", - "toolkit": "Toolkit", - "security_audit": "Auditoria de Segurança", - "languages": "Idiomas", - "resource_control": "Controle de recursos", - "chat": "Chat", - "help": "Ajuda", - "expand_sidebar": "Expandir barra lateral", - "toggle_theme": "Alternar tema", - "sdk_studio": "SDK Studio", - "login": "Entrar", - "permissions": "Permissões", - "server_management": "Gestão do servidor", - "server_attestation": "Atestação do servidor" - }, - "auth": { - "login": "Entrar", - "logout": "Sair", - "login_title": "Iniciar sessão", - "login_subtitle": "Entrar na consola BetterDesk", - "username": "Nome de utilizador", - "username_placeholder": "Insira o nome de utilizador", - "password": "Palavra-passe", - "password_placeholder": "Insira a palavra-passe", - "remember_me": "Lembrar-me", - "login_failed": "Falha no início de sessão. Verifique as suas credenciais.", - "invalid_credentials": "Nome de utilizador ou palavra-passe inválidos.", - "username_collision": "Já existe uma conta local com este nome de utilizador. Inicie sessão com a sua palavra-passe local ou peça a um administrador para renomear ou remover a conta em conflito.", - "fill_all_fields": "Preencha todos os campos", - "logout_confirm": "Tem a certeza que deseja sair?", - "change_password": "Alterar palavra-passe", - "password_required": "A palavra-passe é obrigatória", - "totp_title": "Autenticação de dois fatores", - "totp_subtitle": "Insira o código de 6 dígitos da sua aplicação de autenticação", - "totp_code": "Código de verificação", - "totp_verify": "Verificar", - "totp_use_recovery": "Usar um código de recuperação", - "totp_use_code": "Usar código do autenticador", - "totp_recovery_code": "Código de recuperação", - "totp_back_to_login": "Voltar ao início de sessão", - "totp_invalid_code": "Código de verificação inválido. Tente novamente.", - "totp_enter_code": "Insira um código de 6 dígitos", - "totp_enter_recovery": "Insira um código de recuperação", - "totp_session_expired": "Sessão expirada. Por favor, inicie sessão novamente.", - "totp_already_enabled": "A autenticação de dois fatores já está ativada", - "pro_only_account": "Esta conta e apenas para o cliente de ambiente de trabalho RustDesk. Utilize a aplicacao RustDesk para iniciar sessao.", - "passwords_mismatch": "As palavras-passe nao coincidem", - "or": "ou", - "login_sso": "Entrar com SSO", - "login_sso_with": "Entrar com {{provider}}", - "oidc_denied": "O acesso foi negado pelo provedor de identidade.", - "oidc_invalid": "Callback OIDC inválido. Tente novamente.", - "oidc_failed": "A autenticação OIDC falhou. Tente novamente.", - "oidc_error": "Ocorreu um erro durante o login SSO.", - "oidc_no_account": "Sua conta não foi encontrada e o registro automático está desativado.", - "totp_rate_limited": "Muitas tentativas. Tente novamente mais tarde.", - "emergency_mode_banner": "Servidor Go inacessível — executando em modo de emergência (somente administrador, funcionalidade limitada)" - }, - "dashboard": { - "title": "Painel", - "subtitle": "Visão geral do seu servidor RustDesk", - "total_devices": "Total de dispositivos", - "online_now": "Online agora", - "banned": "Banidos", - "active_connections": "Conexões ativas", - "offline_devices": "Offline", - "server_status": "Estado do servidor", - "quick_actions": "Ações rápidas", - "manage_devices": "Gerir dispositivos conectados", - "view_keys": "Ver chaves do servidor", - "generate_config": "Gerar configuração do cliente", - "server_settings": "Definir configurações", - "greeting_morning": "Bom dia, {name}", - "greeting_afternoon": "Boa tarde, {name}", - "greeting_evening": "Boa noite, {name}", - "greeting_night": "Boa noite, {name}", - "health_overview": "Visao geral da saude", - "devices_online": "Dispositivos online", - "active_alerts": "Alertas ativos", - "recent_connections": "Total de dispositivos", - "server_uptime": "Tempo de atividade do servidor", - "activity_feed": "Atividade recente", - "no_recent_activity": "Sem atividade recente", - "just_now": "agora mesmo", - "ago": "atras", - "tip_desktop_mode": "Experimente o Modo Desktop para um espaco de trabalho com varias janelas e widgets de monitorizacao.", - "tip_keyboard_shortcuts": "Prima Ctrl+K em qualquer lugar para abrir a paleta de comandos de pesquisa rapida.", - "tip_address_book": "Sincronize o seu livro de enderecos entre dispositivos iniciando sessao a partir do cliente RustDesk.", - "tip_2fa": "Ative a autenticacao de dois fatores nas Definicoes para maior seguranca da conta.", - "tip_bulk_actions": "Selecione varios dispositivos e utilize acoes em massa para os gerir de uma so vez.", - "tip_theme": "Alterne entre os temas escuro e claro nas definicoes da barra lateral.", - "tip_cdap": "Ligue dispositivos IoT e sensores industriais atraves do gateway CDAP.", - "tip_tutorials": "Clique no botao de ajuda no canto inferior direito para tutoriais interativos." - }, - "devices": { - "title": "Dispositivos", - "id": "ID", - "hostname": "Nome do host", - "username": "Nome de utilizador", - "platform": "Plataforma", - "version": "Versão", - "ip_address": "Endereço IP", - "note": "Nota", - "last_seen": "Última vez visto", - "last_online": "Última vez online", - "first_seen": "Primeira vez visto", - "created": "Criado", - "status": "Estado", - "ban_reason": "Motivo do banimento", - "actions": "Ações", - "search_placeholder": "Pesquisar dispositivos...", - "filter_all": "Todos", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banidos", - "selected": "selecionado(s)", - "showing": "A mostrar", - "of": "de", - "sync_status": "Estado de sincronização", - "sync_success": "Estado sincronizado com sucesso", - "empty_title": "Nenhum dispositivo encontrado", - "empty_text": "Nenhum dispositivo corresponde aos filtros atuais", - "edit_title": "Detalhes do dispositivo", - "delete_title": "Excluir dispositivo", - "delete_confirm": "Tem a certeza que deseja excluir o dispositivo {id}?", - "delete_warning": "Está prestes a excluir permanentemente este dispositivo:", - "delete_permanent": "Esta ação não pode ser revertida. Todos os dados associados a este dispositivo serão permanentemente removidos da base de dados.", - "delete_success": "Dispositivo excluído com sucesso", - "revoke_option": "Revogar dispositivo", - "revoke_hint": "Bloquear ID do dispositivo e desconectar conexões ativas", - "revoke_success": "Dispositivo revogado com sucesso", - "details": "Detalhes do dispositivo", - "ban_title": "Banir dispositivo", - "ban_confirm": "Tem a certeza que deseja banir o dispositivo {id}?", - "ban_success": "Dispositivo banido com sucesso", - "unban_title": "Desbanir dispositivo", - "unban_confirm": "Tem a certeza que deseja desbanir o dispositivo {id}?", - "unban_success": "Dispositivo desbanido com sucesso", - "change_id": "Alterar ID", - "change_id_title": "Alterar ID do dispositivo", - "new_id": "Novo ID", - "change_id_hint": "6-16 caracteres, apenas letras, números, hífens e underscores", - "change_id_success": "ID do dispositivo alterado com sucesso", - "id_length_error": "O ID deve ter 6-16 caracteres", - "id_format_error": "O ID só pode conter letras, números, hífens e underscores", - "bulk_delete_title": "Excluir vários dispositivos", - "bulk_delete_confirm": "Tem a certeza que deseja excluir {count} dispositivos?", - "bulk_delete_success": "{count} dispositivos excluídos com sucesso", - "columns": "Colunas", - "toggle_columns": "Alternar colunas visíveis", - "not_found": "Dispositivo não encontrado", - "delete_failed": "Não foi possível excluir o dispositivo", - "change_id_failed": "Não foi possível alterar o ID do dispositivo", - "invalid_id": "ID de dispositivo inválido", - "invalid_id_format": "Formato de ID inválido", - "id_exists": "Este ID de dispositivo já existe", - "no_selection": "Nenhum dispositivo selecionado", - "device_type": "Tipo de dispositivo", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Conectado", - "revoke": "Revogar", - "access_policy": "Política de acesso", - "unattended_access": "Acesso não supervisionado", - "enable_unattended": "Ativar acesso não supervisionado", - "access_password": "Senha de acesso", - "password_configured": "Senha configurada", - "no_password": "Nenhuma senha configurada", - "new_password": "Nova senha", - "clear_password": "Limpar senha", - "access_schedule": "Agenda de acesso", - "enable_schedule": "Ativar agenda", - "allowed_days": "Dias permitidos", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Operadores permitidos", - "all_operators": "Todos os operadores", - "operators_hint": "Deixe vazio para permitir acesso a todos os operadores.", - "last_updated_by": "Última atualização por", - "access_policy_saved": "Política de acesso salva", - "tabs": { - "overview": "Visão geral", - "hardware": "Hardware", - "metrics": "Métricas", - "connections": "Conexões", - "audit": "Audit", - "info": "Info", - "history": "Histórico" - }, - "hardware": { - "cpu": "Processador", - "memory": "Memória", - "disk": "Disco", - "os": "Sistema operativo", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Carga média", - "network": "Adaptadores de rede", - "no_data": "Nenhum dado de hardware disponível", - "title": "Informação de hardware", - "gpu": "Placa gráfica" - }, - "display_name": "Nome exibido", - "display_name_placeholder": "Digite um nome exibido...", - "note_placeholder": "Digite uma nota...", - "tags": "Tags", - "filter_by_tags": "Filtrar por tags", - "no_tags": "No tags", - "all_groups": "Todos os grupos", - "create_group": "Criar grupo", - "manage_groups": "Gerenciar grupos", - "group_name": "Nome do grupo", - "group_name_placeholder": "ex.: PCs de mídia", - "dynamic_group": "Grupo dinâmico por tag", - "dynamic_group_hint": "Dispositivos com esta tag entram automaticamente.", - "tag_filter": "Tag filter", - "group_allowed_users": "Usuários permitidos", - "group_allowed_users_hint": "Deixe vazio para manter o grupo visível para todos com permissões de dispositivo.", - "group_tag_required": "O filtro de tag é obrigatório para grupos dinâmicos", - "group_invalid": "Identificador de grupo inválido", - "group_not_found": "Grupo não encontrado", - "group_saved": "Grupo de dispositivos salvo", - "groups_saved": "Grupos de dispositivos salvos", + "display_name": "Nome exibido", + "display_name_placeholder": "Digite um nome exibido...", + "note_placeholder": "Digite uma nota...", + "tags": "Tags", + "filter_by_tags": "Filtrar por tags", + "no_tags": "No tags", + "all_groups": "Todos os grupos", + "create_group": "Criar grupo", + "manage_groups": "Gerenciar grupos", + "group_name": "Nome do grupo", + "group_name_placeholder": "ex.: PCs de mídia", + "dynamic_group": "Grupo dinâmico por tag", + "dynamic_group_hint": "Dispositivos com esta tag entram automaticamente.", + "tag_filter": "Tag filter", + "group_allowed_users": "Usuários permitidos", + "group_allowed_users_hint": "Deixe vazio para manter o grupo visível para todos com permissões de dispositivo.", + "group_tag_required": "O filtro de tag é obrigatório para grupos dinâmicos", + "group_invalid": "Identificador de grupo inválido", + "group_not_found": "Grupo não encontrado", + "group_saved": "Grupo de dispositivos salvo", + "groups_saved": "Grupos de dispositivos salvos", "group_membership_added": "Adicionado ao grupo", "group_membership_removed": "Removido do grupo", - "no_groups": "Ainda não há grupos", - "manual_groups": "Grupos manuais", - "dynamic_memberships": "Associações dinâmicas", - "group_allowed_user_groups": "Grupos de usuários permitidos", - "group_allowed_user_groups_hint": "Usuários nos grupos selecionados podem acessar este grupo de dispositivos.", - "no_user_groups": "Sem grupos de usuários", - "edit_group": "Editar grupo", - "delete_group": "Excluir grupo", - "delete_group_confirm": "Excluir o grupo de dispositivos {name}?", - "group_deleted": "Grupo de dispositivos excluído", - "folder_group_readonly": "Grupos baseados em pastas são gerenciados em Pastas.", - "manage_user_groups": "Gerenciar grupos de usuários", - "restore_failed": "Erro al restaurar o dispositivo", - "no_signal_tooltip": "O cliente contactou a API recentemente, mas não está registado no servidor de sinal (UDP :21116). Reinicie o cliente após a migração do servidor.", - "per_page": "Por página" - }, - "keys": { - "title": "Chaves do servidor", - "subtitle": "Chave pública e configuração para clientes RustDesk", - "public_key": "Chave pública", - "qr_code": "Código QR", - "server_info": "Informação do servidor", - "download": "Transferir chave", - "show_qr": "Mostrar QR", - "qr_hint": "Digitalize este código QR com o aplicativo móvel RustDesk", - "no_key": "Nenhuma chave pública encontrada", - "no_key_to_copy": "Nenhuma chave para copiar", - "no_qr": "Código QR não disponível", - "download_success": "Ficheiro da chave transferido", - "not_found": "Chave não encontrada", - "api_not_found": "Chave de API não encontrada" - }, - "settings": { - "title": "Configurações", - "subtitle": "Configuração da consola e definições da conta", - "tab_general": "Geral", - "tab_server": "Servidor", - "tab_branding": "Marca", - "tab_backup": "Backup", - "language": "Idioma", - "change_password": "Alterar palavra-passe", - "password_desc": "Atualizar a palavra-passe da sua conta", - "current_password": "Palavra-passe atual", - "new_password": "Nova palavra-passe", - "confirm_password": "Confirmar palavra-passe", - "save_password": "Atualizar palavra-passe", - "password_changed": "Palavra-passe alterada com sucesso", - "fill_all_fields": "Preencha todos os campos", - "passwords_not_match": "As palavras-passe não correspondem", - "password_requirements": "Requisitos da palavra-passe", - "password_requirements_not_met": "A palavra-passe não cumpre os requisitos", - "req_length": "Pelo menos 8 caracteres", - "req_uppercase": "Pelo menos uma letra maiúscula", - "req_lowercase": "Pelo menos uma letra minúscula", - "req_number": "Pelo menos um número", - "server_info": "Informação do servidor", - "version": "Versão", - "database": "Base de dados", - "uptime": "Tempo de atividade", - "audit_log": "Registo de auditoria", - "audit_desc": "Atividade recente da consola", - "no_audit_logs": "Nenhum registo de auditoria encontrado", - "backend_title": "Backend do servidor", - "backend_desc": "Escolha o backend do servidor para gestão de dispositivos e serviços de sinal/relay.", - "backend_original": "Original", - "backend_enhanced": "Melhorado", - "backend_rustdesk_desc": "Servidores de sinal e relay padrão do RustDesk (hbbs + hbbr). API HTTP básica com endpoints limitados.", - "backend_betterdesk_desc": "Servidor melhorado baseado em Go com API REST completa, autenticação JWT, lista de bloqueio, etiquetas, eventos WebSocket em tempo real e registo de auditoria.", - "backend_feature_signal": "Servidor de sinal (registo de ID)", - "backend_feature_relay": "Servidor relay (encaminhamento de conexões)", - "backend_feature_basic_api": "API REST básica", - "backend_feature_full_api": "API REST completa (34+ endpoints)", - "backend_feature_jwt": "Autenticação JWT e TOTP 2FA", - "backend_feature_blocklist": "Gestão de lista de bloqueio IP/ID", - "backend_feature_tags": "Etiquetas e agrupamento de dispositivos", - "backend_feature_audit": "Registo de eventos de auditoria", - "backend_feature_websocket": "Eventos WebSocket em tempo real", - "backend_connection": "Conexão", - "backend_api_url": "URL da API", - "backend_test": "Testar conexão", - "backend_testing": "A testar...", - "backend_save": "Aplicar backend", - "backend_saved": "Backend do servidor alterado com sucesso. Os dados dos dispositivos serão agora geridos pelo novo backend.", - "backend_save_failed": "Falha ao alterar o backend do servidor", - "backend_test_success": "Conexão bem-sucedida! O servidor está acessível.", - "backend_test_failed": "Falha na conexão. O servidor não está acessível.", - "backend_confirm_switch": "Tem a certeza que deseja alterar o backend do servidor? Isto alterará a gestão dos dispositivos.", - "backend_unreachable": "Não é possível alterar: o servidor de destino não está acessível. Inicie primeiro o servidor.", - "invalid_backend": "Seleção de backend inválida. Escolha 'rustdesk' ou 'betterdesk'.", - "backend_status_running": "Conectado", - "backend_status_unreachable": "Inacessível", - "backend_status_error": "Erro", - "backend_status_unknown": "Desconhecido", - "totp_title": "Autenticação de dois fatores", - "totp_desc": "Adicione uma camada extra de segurança com aplicações de autenticação TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", - "totp_enabled": "2FA ativado", - "totp_enabled_desc": "A sua conta está protegida pela autenticação de dois fatores.", - "totp_disabled": "2FA não ativado", - "totp_disabled_desc": "Ative a autenticação de dois fatores para maior segurança da conta.", - "totp_setup": "Ativar 2FA", - "totp_disable": "Desativar 2FA", - "totp_step1": "Instale uma aplicação de autenticação no seu telemóvel", - "totp_step2": "Digitalize o código QR abaixo", - "totp_step3": "Insira o código de 6 dígitos para verificar", - "totp_manual_key": "Chave manual", - "totp_enter_code": "Insira o código de verificação", - "totp_verify_enable": "Verificar e ativar", - "totp_enabled_success": "Autenticação de dois fatores ativada!", - "totp_recovery_warning": "Guarde estes códigos de recuperação num local seguro. Cada código só pode ser usado uma vez. Se perder o acesso à sua aplicação de autenticação, pode usar estes códigos para iniciar sessão.", - "totp_done": "Concluído", - "totp_disable_warning": "Desativar a autenticação de dois fatores tornará a sua conta menos segura. Insira a sua palavra-passe para confirmar.", - "totp_disabled_success": "A autenticação de dois fatores foi desativada.", - "tutorials_title": "Tutoriais interativos", - "tutorials_desc": "Mostra dicas guiadas curtas para áreas novas ou alteradas da console.", - "tutorials_enabled": "Ativar tutoriais", - "tutorials_enabled_hint": "Quando ativado, tutoriais aparecem automaticamente para áreas que você ainda não concluiu.", - "tutorials_reset_hint": "Limpa todo o progresso salvo para que os tutoriais apareçam novamente.", - "tutorials_enabled_toast": "Tutoriais ativados", - "tutorials_disabled_toast": "Tutoriais desativados", - "tutorials_reset_toast": "Progresso dos tutoriais redefinido", - "tab_auth": "Autenticação", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Configure autenticação externa via LDAP ou Active Directory. Os usuários poderão entrar com suas credenciais de domínio.", - "ldap_enabled": "Ativar autenticação LDAP", - "ldap_enabled_hint": "Quando ativado, os usuários podem entrar com credenciais LDAP/AD. Contas locais continuam funcionando como fallback.", - "ldap_connection": "Conexão do servidor", - "ldap_host": "Host", - "ldap_port": "Porta", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Ignorar verificação TLS", - "ldap_timeout": "Tempo limite da conexão (s)", - "ldap_timeout_hint": "Segundos para aguardar a resposta do servidor LDAP", - "ldap_bind_mode": "Modo de bind", - "ldap_direct_bind": "Bind direto", - "ldap_direct_bind_hint": "Fazer bind diretamente com um modelo de DN em vez de usar uma conta de serviço para pesquisar.", - "ldap_bind_dn": "DN de bind (conta de serviço)", - "ldap_bind_dn_hint": "Nome distinto de uma conta de serviço somente leitura usada para pesquisar usuários.", - "ldap_bind_password": "Senha de bind", - "ldap_base_dn": "DN base", - "ldap_base_dn_hint": "Base de pesquisa para encontrar usuários, por exemplo dc=example,dc=com", - "ldap_user_filter": "Filtro de usuário", - "ldap_user_filter_hint": "Filtro LDAP para localizar usuários. Use {{username}} como placeholder. Padrão: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Modelo de DN para bind direto", - "ldap_direct_bind_dn_hint": "Modelo de DN para bind direto. Use {{username}} como placeholder, por exemplo uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Atributos do usuário", - "ldap_attr_id": "Atributo de nome de usuário", - "ldap_attr_email": "Atributo de e-mail", - "ldap_attr_name": "Atributo de nome exibido", - "ldap_group_mapping": "Mapeamento grupo → função", - "ldap_group_base_dn": "DN base de grupos", - "ldap_group_base_dn_hint": "Deixe vazio para usar o DN base principal", - "ldap_group_filter": "Filtro de grupos", - "ldap_group_attr_name": "Atributo de nome do grupo", - "ldap_default_role": "Função padrão", - "ldap_default_role_hint": "Função atribuída a usuários cujos grupos LDAP não correspondem a nenhum mapeamento", - "ldap_role_viewer": "Visualizador", - "ldap_role_operator": "Operador", - "ldap_role_admin": "Administrador", - "ldap_group_role_map": "Mapa grupo → função", - "ldap_group_role_map_hint": "Mapeie grupos LDAP para funções do BetterDesk. Formato: GroupDN=função separado por | (pipe). Exemplo: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Testar conexão", - "ldap_testing": "Testando...", - "ldap_test_success": "Conexão bem-sucedida! O servidor LDAP está acessível e as credenciais de bind são válidas.", - "ldap_test_failed": "Falha na conexão", - "ldap_save": "Salvar configuração LDAP", - "ldap_saved": "Configuração LDAP salva com sucesso", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Configure login único usando um provedor OpenID Connect (Azure AD, Okta, Google, Keycloak etc.).", - "oidc_enabled": "Ativar autenticação OIDC", - "oidc_enabled_hint": "Permitir que usuários entrem com um provedor de identidade externo", - "oidc_provider": "Provedor de identidade", - "oidc_display_name": "Nome exibido no botão", - "oidc_display_name_hint": "Texto mostrado no botão de login (por exemplo, Azure AD, Okta)", - "oidc_issuer_url": "URL do emissor", - "oidc_issuer_url_hint": "URL do emissor OpenID Connect (a descoberta é automática)", - "oidc_client_id": "ID do cliente", - "oidc_client_secret": "Segredo do cliente", - "oidc_redirect_url": "URL de redirecionamento (callback)", - "oidc_redirect_url_hint": "Deve corresponder exatamente à configuração no seu IdP. Normalmente: http(s)://seu-servidor:21114/api/auth/oidc/callback", - "oidc_scopes": "Escopos", - "oidc_use_pkce": "Usar PKCE (recomendado)", - "oidc_auto_discovery": "Descoberta automática", - "oidc_allow_signup": "Criar usuários automaticamente", - "oidc_manual_endpoints": "URLs de endpoints manuais", - "oidc_authorization_url": "Endpoint de autorização", - "oidc_token_url": "Endpoint de token", - "oidc_userinfo_url": "Endpoint UserInfo", - "oidc_claim_mapping": "Mapeamento de claims", - "oidc_claim_username": "Claim de nome de usuário", - "oidc_claim_email": "Claim de e-mail", - "oidc_claim_name": "Claim de nome exibido", - "oidc_claim_groups": "Claim de grupos", - "oidc_role_mapping": "Mapeamento de funções", - "oidc_default_role": "Função padrão", - "oidc_group_role_map": "Mapeamento grupo → função", - "oidc_group_role_map_hint": "Um mapeamento por linha: nome_do_grupo=função (por exemplo, admins=admin, operators=operator)", - "oidc_test_discovery": "Testar descoberta", - "oidc_testing": "Testando...", - "oidc_test_success": "Descoberta bem-sucedida! Endpoints resolvidos.", - "oidc_test_failed": "Falha na descoberta", - "oidc_issuer_required": "A URL do emissor é obrigatória para testar a descoberta", - "oidc_save": "Salvar configuração OIDC", - "oidc_saved": "Configuração OIDC salva com sucesso", - "tab_advanced": "Avançado", - "connection_mode_title": "Estratégia de ligação", - "connection_mode_desc": "Controla como se conectan los clientes de escritorio RustDesk: P2P directo (hole punch) cuando sea posible, o sempre a través de retransmisión.", - "connection_mode_label": "Modo de ligação predeterminado", - "connection_mode_p2p_first": "P2P primero (recomendado) — tentar ligação direta, usar retransmisión como alternativa", - "connection_mode_relay_only": "Solo retransmisión — todas las sessões usan el servidor de retransmisión", - "connection_mode_advanced": "Opções avançadas", - "connection_mode_fallback_ms": "Tempo limite de fallback P2P (ms)", - "connection_mode_same_nat_relay": "Forçar retransmisión cuando ambos pares partilham la misma IP pública (NAT hairpin)", - "connection_mode_network_hint": "P2P requer que el porta UDP 21116 sea accesible entre los clientes. Signal TCP 21116, relay TCP 21117, NAT test 21115 devem estar abertas en el servidor. Los clientes de navegador web sempre usan retransmisión.", - "connection_mode_save": "Guardar", - "connection_mode_save_restart": "Guardar y reiniciar servidor", - "connection_mode_saved": "Modo de ligação guardado", - "connection_mode_restart_started": "Reinicio do servidor iniciado", - "connection_mode_restart_failed": "Erro al reiniciar el servidor", - "connection_mode_not_configurable": "El modo de ligação não é possível cambiar en este despliegue (no se encontrou unidad systemd ni docker-compose)", - "connection_mode_compose_error": "Não foi possível encontrar la secção de ambiente do servidor em docker-compose.yml", - "connection_mode_source_saved": "Guardado en", - "connection_mode_source_defaults": "A usar valores predefinidos do servidor (no modificables desde el painel)", - "connection_mode_runtime": "Servidor ativo", - "advanced_title": "Ficheiros de configuração", - "advanced_desc": "Edita los ficheiros de configuração do servidor diretamente. Los alterações podem exigir reiniciar los serviços. Se crea una cópia de segurança antes de cada guardado.", - "advanced_warning": "Estos ficheiros contienen segredos (chaves API, palavra-passes de base de dados, segredos de sesión). Edita solo si sabes lo que estás haciendo. Una sintaxe incorreta puede impedir que el servidor arranque.", - "advanced_files_label": "Ficheiros", - "advanced_select_file": "Selecciona un ficheiro de la lista para ver ou editar su conteúdo.", - "advanced_reload": "Recarregar", - "advanced_save": "Guardar ficheiro", - "advanced_apply_restart": "Aplicar (reiniciar serviço)", - "advanced_saved": "Ficheiro de configuração guardado", - "advanced_restart_after_save": "Configuração guardada. Reiniciar el serviço afetado agora para que los alterações surtan efecto?", - "advanced_restart_confirm": "Reiniciar el(los) serviço(s) BetterDesk relacionado(s)? Las ligações activas pueden interrumpirse brevemente.", - "advanced_restart_console_confirm": "Reiniciar el serviço de consola web? La sessão do navegador se desligará brevemente y la página se recarregará cuando la consola voltar.", - "advanced_restart_started": "Reinicio del serviço iniciado", - "advanced_restart_done": "Consola reiniciada — rea carregar página…", - "advanced_restart_polling": "A aguardar que la consola voltar a estar en línea…", - "advanced_restart_timeout": "Se envió el reinicio pero la consola no respondeu a tempo. Revisa los registros de systemd/NSSM y recarga manualmente.", - "advanced_restart_failed": "Erro al reiniciar el serviço (privilégios insuficientes o serviço não instalado)", - "advanced_save_confirm": "Guardar alterações en este ficheiro? Se creará una cópia de segurança de la versão anterior.", - "advanced_unsaved_confirm": "Tienes alterações por guardar. Descartarlos?", - "advanced_no_files": "No hay ficheiros de configuração disponíveis en este sistema.", - "advanced_readonly": "somente leitura", - "advanced_missing": "em faltante", - "advanced_new_file": "Nuevo ficheiro (no se crea hasta que guardes)", - "advanced_new_file_hint": "Nuevo ficheiro — agrega conteúdo y guarda", - "advanced_backup_created": "cópia de segurança criada", - "advanced_restart_console": "Reinicia el serviço de consola web (p. ej. systemctl restart betterdesk-console) para que los alterações en .env surtan efecto.", - "advanced_restart_goserver": "Reinicia el servidor Go de BetterDesk para que se carreguem los alterações en la lista de bloqueio.", - "advanced_restart_systemd": "Depois de editar las unidades de systemd, ejecuta: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Reinicia el serviço afetado para que los alterações surtan efecto.", - "advanced_error_unknown": "Ficheiro de configuração desconhecido", - "advanced_error_not_found": "El ficheiro não existe", - "advanced_error_not_file": "La caminho no es un ficheiro regular", - "advanced_error_too_large": "El ficheiro excede el tamaño máximo editável (512 KB)", - "advanced_error_binary": "Los ficheiros binários não é possíveln editar en el painel", - "advanced_error_invalid": "Contenido de ficheiro no válido", - "advanced_error_not_writable": "El ficheiro no es editável por el proceso de consola", - "advanced_file_console-env": "Ambiente de la consola (.env)", - "advanced_file_console-env-local": "Anulaciones de la consola (.env.local)", - "advanced_file_go-blocklist": "Lista de bloqueo do servidor Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unidade de serviço)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unidade de serviço)", - "advanced_file_console-session-secret": "Segredo de sesión de la consola (.session_secret)", - "advanced_file_go-audit-log": "Registro de auditoría do servidor Go (audit.jsonl)", - "advanced_file_build-env": "Ambiente de compilação del agente (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuração do supervisor)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orquestração)", - "advanced_restart_none": "No se requer reinicio del serviço para este ficheiro.", - "enrollment_title": "Registo de dispositivo (RustDesk)", - "enrollment_desc": "Controla como se registam los novos clientes RustDesk y cómo los operadores os aprovam en la página de pedidos de registo.", - "enrollment_require_approval": "Requer aprovação del operador (modo gerido)", - "enrollment_require_approval_hint": "Cuando está ativado, los clientes desconhecidos se ponen en fila até um operador los aprueba en Pedidos de registo.", - "enrollment_rich_approve": "Formulario de aprovação completo (nome, pasta, grupos, etiquetas)", - "enrollment_rich_approve_hint": "Muestra un diálogo detalhado al aprovar pedidos de registo o registro LAN.", - "enrollment_tag_picker": "Escolher etiquetas de las etiquetas de dispositivos existentes", - "enrollment_tag_picker_hint": "Permite aos operadores selecionar etiquetas de la lista usada en la página de Dispositivos em vez de solo escribirlas.", - "enrollment_open_requests": "Pedidos de registo abiertas", - "enrollment_pending_count": "{count} solicitud(es) de registo pendente(s)" - }, - "audit": { - "time": "Hora", - "user": "Utilizador", - "action": "Ação", - "details": "Detalhes", - "action_login": "Login", - "action_login_failed": "Falha no login", - "action_logout": "Logout", - "action_password_change": "Senha alterada", - "action_2fa_enable": "2FA ativado", - "action_2fa_disable": "2FA desativado", - "action_user_create": "Usuário criado", - "action_user_update": "Usuário atualizado", - "action_user_delete": "Usuário excluído", - "action_settings_update": "Configurações atualizadas", - "action_device_ban": "Dispositivo bloqueado", - "action_device_unban": "Bloqueio do dispositivo removido", - "action_device_delete": "Dispositivo excluído" - }, - "generator": { - "title": "Gerador de configuração do cliente", - "subtitle": "Gerar configuração para clientes RustDesk", - "config_options": "Opções de configuração", - "server_address": "Endereço do servidor", - "server_address_hint": "Domínio ou endereço IP do seu servidor", - "custom_port": "Porta personalizada", - "port_hint": "Deixe vazio para predefinição (21116)", - "relay_server": "Servidor relay", - "relay_placeholder": "Igual ao servidor ID se vazio", - "relay_hint": "Opcional: endereço separado do servidor relay", - "include_key": "Incluir chave pública na configuração", - "generate": "Gerar configuração", - "output": "Saída da configuração", - "usage_title": "Detalhes da conexão", - "generated": "Configuração gerada", - "server_required": "O endereço do servidor é obrigatório", - "nothing_to_copy": "Gere primeiro uma configuração", - "bundles_title": "Pacotes do agente", - "new_bundle": "Novo pacote", - "editor_title": "Editor de pacotes", - "empty_state": "Selecione um pacote à esquerda ou crie um novo para começar.", - "loading": "Carregando…", - "no_bundles": "Ainda não há pacotes. Crie seu primeiro pacote.", - "bundle_name": "Nome do pacote", - "bundle_name_hint": "Apenas um rótulo interno — não é exibido aos usuários finais.", - "short_link": "Link de download curto", - "short_link_hint": "Usado na URL pública (/d/…). Apenas letras minúsculas, números e hífens (2–32 caracteres). Preenchido automaticamente a partir do nome do pacote — encurte para facilitar o compartilhamento (ex.: acme).", - "branding_section": "Marca", - "company_name": "Nome da empresa/marca", - "short_text": "Descrição curta", - "contact_email": "E-mail de contato", - "contact_phone": "Telefone de contato", - "contact_url": "Site de contato", - "logo": "Logotipo", - "logo_hint": "PNG, JPEG, SVG ou WebP. Máximo de 256 KB.", - "logo_clear": "Remover logotipo", - "primary_color": "Cor principal", - "accent_color": "Cor do cabeçalho", - "default_lang": "Idioma padrão", - "allow_unattended": "Permitir acesso não supervisionado", - "allow_unattended_hint": "Quando ativado, o agente mostra uma senha persistente para acesso de operadores.", - "save": "Salvar pacote", - "revoke": "Revogar", - "unrevoke": "Reativar", - "revoked": "Revogado", - "preview_title": "Prévia ao vivo", - "preview_hint": "Aparência aproximada da janela do agente para usuários finais.", - "preview_default_name": "Suporte BetterDesk", - "preview_status_ready": "Pronto", - "preview_id": "Seu ID", - "preview_password": "Senha", - "preview_chat": "Conversar com o suporte", - "preview_settings": "Configurações (somente admin)", - "preview_quit": "Sair (somente admin)", - "download_link_title": "Link de download", - "download_link_hint": "Compartilhe este link com usuários finais. Eles verão uma página de download com sua marca. Links hex antigos continuam funcionando após alterar o link curto.", - "open_portal": "Abrir", - "created": "Pacote criado", - "saved": "Pacote salvo", - "deleted": "Pacote excluído", - "revoked_ok": "Pacote revogado", - "unrevoked_ok": "Pacote reativado", - "link_copied": "Link copiado para a área de transferência", - "copy_failed": "A cópia automática falhou — copie manualmente", - "unsaved_confirm": "Descartar alterações não salvas?", - "confirm_revoke": "Revogar este pacote? O link de download deixará de funcionar.", - "confirm_unrevoke": "Reativar este pacote?", - "confirm_delete": "Excluir este pacote permanentemente? Esta ação não pode ser desfeita.", - "errors": { - "validation_failed": "Falha na validação", - "name_required": "O nome do pacote é obrigatório", - "company_name_required": "O nome da empresa é obrigatório", - "logo_invalid": "O logotipo deve ser um arquivo de imagem válido", - "logo_too_large": "O logotipo deve ter no máximo 256 KB", - "logo_read_failed": "Não foi possível ler o arquivo do logotipo", - "primary_color_invalid": "A cor principal deve ser um valor hexadecimal (por exemplo, #2563eb)", - "accent_color_invalid": "A cor do cabeçalho deve ser um valor hexadecimal (por exemplo, #1e293b)", - "contact_url_invalid": "O site de contato deve ser uma URL válida", - "server_host_required": "O endereço público do servidor é obrigatório", - "server_host_invalid": "Ingrese un nome de dominio o dirección IPv4 válido", - "token_failed": "Não foi possível gerar el token de registo — compruebe la conectividad do servidor", - "rebuild_revoked": "Não é possível recompilar un pacote revogado — voltar a ativarlo primero", - "slug_invalid": "O link curto só pode conter letras minúsculas, números e hífens", - "slug_too_short": "O link curto deve ter pelo menos 2 caracteres", - "slug_too_long": "O link curto deve ter no máximo 32 caracteres", - "slug_taken": "Este link curto já é usado por outro pacote" - }, - "legacy_title": "Gerador de configuração do cliente", - "connection_section": "Ligação al servidor", - "server_host": "Endereço público do servidor", - "server_host_placeholder": "support.example.com o 203.0.113.10", - "server_host_hint": "Nome de dominio o IP pública donde los utilizadors finales acceden a su servidor BetterDesk. El porta se toma de la configuração de la consola.", - "use_https": "Usar HTTPS / WSS (recomendado)", - "enrollment_token": "Registro de dispositivo", - "enrollment_token_pending": "Por dispositivo tras aprovação", - "enrollment_token_set": "Por dispositivo — aprovar en Registros", - "enrollment_token_hint": "Cada instalação regista-se sozinha. Aprueba nuevos dispositivos en el painel de Registros; el servidor emite entonces una chave de acceso única por computador.", - "enrollment_per_device": "Por dispositivo — aprovar en Registros", - "background_color": "Fundo de ventana", - "surface_color": "Fundo de tarjeta", - "text_color": "Color del texto", - "text_muted_color": "Cor do texto atenuado", - "status_ready_color": "Color del indicador de pronto", - "header_text_color": "Color del texto de cabeçalho", - "builds_title": "Compilações de cliente", - "builds_hint": "Instaladores compilados en este servidor para cada plataforma. Recompilar después de corregir erroes de la cadena de herramientas o actualizar el código fuente del agente.", - "builds_loading": "A carregar estado de compilação…", - "builds_empty": "Aún no hay compilaciones en fila — guarda el paquete o haz clic en Recompilar tudo.", - "rebuild_all": "Recompilar tudo", - "rebuilding_all": "Poniendo en fila las reconstrucciones…", - "rebuild_queued": "Todas las compilaciones de plataforma en fila", - "rebuild_confirm": "Recompilar tudos los instaladores de plataforma para este paquete? Los artefactos prontos existentes serão substituídos.", - "build_status_ready": "Pronto", - "build_status_pending": "En fila", - "build_status_building": "A compilar", - "build_status_failed": "Falhou", - "builds_summary": "{{ready}} pronto · {{pending}} en fila · {{building}} compilando · {{failed}} falhou", - "build_error_hint": "Erro de compilação", - "preview_help": "Solicitar ajuda" - }, - "server": { - "port": "Porta", - "api_port": "Porta da API", - "id_server": "Servidor de ID", - "relay_server": "Servidor relay", - "api_key": "Chave da API" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banido", - "running": "Em execução", - "stopped": "Parado", - "unknown": "Desconhecido", - "checking": "A verificar...", - "label": "Status", - "no_signal": "Sem sinal" - }, - "actions": { - "refresh": "Atualizar", - "copy": "Copiar", - "connect": "Conectar", - "connect_desktop": "Conectar via cliente desktop", - "remote_viewer": "Visualizador remoto", - "web_remote": "Remoto Web", - "details": "Detalhes", - "edit": "Editar", - "delete": "Excluir", - "ban": "Banir", - "unban": "Desbanir", - "save": "Salvar", - "cancel": "Cancelar", - "confirm": "Confirmar", - "close": "Fechar", - "clear": "Limpar", - "ok": "OK", - "saved": "Guardado com sucesso", - "back": "Voltar", - "create": "Criar", - "dismiss": "Dispensar", - "view_all": "Ver tudo", - "cdap_viewer": "Visualizador de snapshot CDAP", - "add": "Adicionar", - "remove": "Remover" - }, - "time": { - "just_now": "Agora mesmo", - "seconds_ago": "há {count} segundo(s)", - "minutes_ago": "há {count} minuto(s)", - "hours_ago": "há {count} hora(s)", - "days_ago": "há {count} dia(s)", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Gestão de utilizadores", - "subtitle": "Gerir utilizadores e permissões da consola", - "add_user": "Adicionar utilizador", - "edit_user": "Editar utilizador", - "username": "Nome de utilizador", - "username_placeholder": "Insira o nome de utilizador", - "username_hint": "3-32 caracteres, apenas letras, números e underscores", - "password": "Palavra-passe", - "password_placeholder": "Insira a palavra-passe", - "password_hint": "Mínimo 8 caracteres com maiúsculas, minúsculas, números e símbolos", - "password_leave_empty": "Deixe vazio para manter a atual", - "role": "Papel", - "role_admin": "Administrador", - "role_operator": "Operador", - "role_viewer": "Observador", - "role_hint": "Observadores podem apenas visualizar dados, operadores podem gerir dispositivos, administradores têm acesso total", - "created": "Criado", - "last_login": "Último início de sessão", - "never": "Nunca", - "actions": "Ações", - "create": "Criar utilizador", - "edit": "Editar", - "reset_password": "Redefinir palavra-passe", - "new_password": "Nova palavra-passe", - "delete_title": "Excluir utilizador", - "delete_confirm": "Tem a certeza que deseja excluir o utilizador {username}?", - "delete_success": "Utilizador excluído com sucesso", - "user_created": "Utilizador criado com sucesso", - "user_updated": "Utilizador atualizado com sucesso", - "password_reset_success": "Palavra-passe redefinida com sucesso", - "empty_title": "Nenhum utilizador encontrado", - "empty_text": "Adicione utilizadores para gerir o acesso à consola", - "fill_required": "Preencha todos os campos obrigatórios", - "invalid_username": "O nome de utilizador deve ter 3-32 caracteres, apenas letras, números e underscores", - "username_exists": "O nome de utilizador já existe", - "weak_password": "A palavra-passe é demasiado fraca", - "password_too_short": "A palavra-passe deve ter pelo menos 8 caracteres", - "invalid_role": "Papel inválido", - "cannot_demote_self": "Não pode despromover-se a si mesmo", - "cannot_delete_self": "Não pode excluir a sua própria conta", - "last_admin": "Não é possível excluir o último administrador", - "admin_only": "Esta funcionalidade está disponível apenas para administradores", - "password_required": "A palavra-passe é obrigatória", - "not_found": "Utilizador não encontrado", - "strength_weak": "Fraca", - "strength_medium": "Média", - "strength_strong": "Forte", - "security_tips_title": "Boas práticas de segurança", - "tip_strong_passwords": "Use palavras-passe fortes e únicas para cada utilizador", - "tip_unique_accounts": "Crie contas individuais para cada pessoa", - "tip_viewer_role": "Use o papel de observador para utilizadores que precisam apenas de acesso de leitura", - "tip_operator_role": "Use o papel de operador para utilizadores que precisam de gerir dispositivos mas não utilizadores", - "tip_audit_logs": "Revise regularmente os registos de auditoria para atividade suspeita", - "role_pro": "Profissional", - "role_super_admin": "Super Admin", - "role_server_admin": "Administrador do servidor", - "role_global_admin": "Administrador global", - "organizations": "Organizações", - "user_organizations": "Organizações de {username}", - "no_organizations": "Sem organizações", - "org_removed": "Usuário removido da organização", - "server_role_label": "Função do servidor", - "server_role_hint": "Define o que o usuário pode fazer em toda a console (acesso ao painel, configuração do servidor, auditoria etc.).", - "org_membership_section": "Associação à organização", - "org_membership_hint": "Um usuário pode pertencer a várias organizações. A função da organização controla apenas permissões dentro dessa organização e é independente da função do servidor acima.", - "column_organizations": "Organizações", - "no_orgs_short": "—", - "org_count_one": "{count} organização", - "org_count_many": "{count} organizações", - "all_orgs_assigned": "O usuário já pertence a todas as organizações.", - "user_groups": "Grupos de usuários", - "user_groups_hint": "Grupos de usuários podem conceder acesso a grupos de dispositivos selecionados.", - "loading_user_groups": "Carregando grupos de usuários...", - "no_user_groups": "Nenhum grupo de usuários disponível", - "create_user_group": "Criar grupo", - "edit_user_group": "Editar grupo de usuários", - "delete_user_group": "Excluir grupo de usuários", - "delete_user_group_confirm": "Excluir o grupo de usuários {name}? Os membros perderão o acesso concedido por este grupo.", - "user_group_created": "Grupo de usuários criado", - "user_group_updated": "Grupo de usuários atualizado", - "user_group_deleted": "Grupo de usuários excluído", - "user_group_not_found": "Grupo de usuários não encontrado", - "group_name": "Nome do grupo", - "group_name_placeholder": "Operadores", - "group_note": "Note", - "group_note_placeholder": "Nota opcional", - "group_name_required": "O nome do grupo é obrigatório", - "group_members_count": "{count} membros", - "provider": "Fornecedor", - "provider_local": "Local", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Gerido por el fornecedor de identidade", - "provider_managed_hint": "Esta conta está gestionada por un fornecedor de identidade externo (LDAP/AD o SSO). La palavra-passe y el rol son controlados por el fornecedor y não é possíveln cambiar aquí." - }, - "folders": { - "title": "Pastas", - "create": "Criar pasta", - "edit": "Editar pasta", - "delete": "Excluir pasta", - "name": "Nome da pasta", - "name_placeholder": "Insira o nome da pasta", - "name_required": "O nome da pasta é obrigatório", - "name_too_long": "O nome da pasta é demasiado longo (máx. 50 caracteres)", - "color": "Cor", - "icon": "Ícone", - "not_found": "Pasta não encontrada", - "delete_confirm": "Tem a certeza que deseja excluir esta pasta? Os dispositivos serão desassociados.", - "delete_success": "Pasta excluída com sucesso", - "created": "Pasta criada com sucesso", - "updated": "Pasta atualizada com sucesso", - "no_devices_selected": "Nenhum dispositivo selecionado", - "devices_moved": "Dispositivos movidos com sucesso", - "device_assigned": "Dispositivo atribuído à pasta", - "unassigned": "Não atribuído", - "all_devices": "Todos os dispositivos", - "drag_hint": "Arraste dispositivos para as pastas para organizá-los", - "move_to": "Mover para", - "toggle_sidebar": "Alternar barra lateral" - }, + "no_groups": "Ainda não há grupos", + "manual_groups": "Grupos manuais", + "dynamic_memberships": "Associações dinâmicas", + "group_allowed_user_groups": "Grupos de usuários permitidos", + "group_allowed_user_groups_hint": "Usuários nos grupos selecionados podem acessar este grupo de dispositivos.", + "no_user_groups": "Sem grupos de usuários", + "edit_group": "Editar grupo", + "delete_group": "Excluir grupo", + "delete_group_confirm": "Excluir o grupo de dispositivos {name}?", + "group_deleted": "Grupo de dispositivos excluído", + "folder_group_readonly": "Grupos baseados em pastas são gerenciados em Pastas.", + "manage_user_groups": "Gerenciar grupos de usuários", + "restore_failed": "Erro al restaurar o dispositivo", + "no_signal_tooltip": "O cliente contactou a API recentemente, mas não está registado no servidor de sinal (UDP :21116). Reinicie o cliente após a migração do servidor.", + "per_page": "Por página" + }, + "keys": { + "title": "Chaves do servidor", + "subtitle": "Chave pública e configuração para clientes RustDesk", + "public_key": "Chave pública", + "qr_code": "Código QR", + "server_info": "Informação do servidor", + "download": "Transferir chave", + "show_qr": "Mostrar QR", + "qr_hint": "Digitalize este código QR com o aplicativo móvel RustDesk", + "no_key": "Nenhuma chave pública encontrada", + "no_key_to_copy": "Nenhuma chave para copiar", + "no_qr": "Código QR não disponível", + "download_success": "Ficheiro da chave transferido", + "not_found": "Chave não encontrada", + "api_not_found": "Chave de API não encontrada" + }, + "settings": { + "title": "Configurações", + "subtitle": "Configuração da consola e definições da conta", + "tab_general": "Geral", + "tab_server": "Servidor", + "tab_branding": "Marca", + "tab_backup": "Backup", + "language": "Idioma", + "change_password": "Alterar palavra-passe", + "password_desc": "Atualizar a palavra-passe da sua conta", + "current_password": "Palavra-passe atual", + "new_password": "Nova palavra-passe", + "confirm_password": "Confirmar palavra-passe", + "save_password": "Atualizar palavra-passe", + "password_changed": "Palavra-passe alterada com sucesso", + "fill_all_fields": "Preencha todos os campos", + "passwords_not_match": "As palavras-passe não correspondem", + "password_requirements": "Requisitos da palavra-passe", + "password_requirements_not_met": "A palavra-passe não cumpre os requisitos", + "req_length": "Pelo menos 8 caracteres", + "req_uppercase": "Pelo menos uma letra maiúscula", + "req_lowercase": "Pelo menos uma letra minúscula", + "req_number": "Pelo menos um número", + "server_info": "Informação do servidor", + "version": "Versão", + "database": "Base de dados", + "uptime": "Tempo de atividade", + "audit_log": "Registo de auditoria", + "audit_desc": "Atividade recente da consola", + "no_audit_logs": "Nenhum registo de auditoria encontrado", + "backend_title": "Backend do servidor", + "backend_desc": "Escolha o backend do servidor para gestão de dispositivos e serviços de sinal/relay.", + "backend_original": "Original", + "backend_enhanced": "Melhorado", + "backend_rustdesk_desc": "Servidores de sinal e relay padrão do RustDesk (hbbs + hbbr). API HTTP básica com endpoints limitados.", + "backend_betterdesk_desc": "Servidor melhorado baseado em Go com API REST completa, autenticação JWT, lista de bloqueio, etiquetas, eventos WebSocket em tempo real e registo de auditoria.", + "backend_feature_signal": "Servidor de sinal (registo de ID)", + "backend_feature_relay": "Servidor relay (encaminhamento de conexões)", + "backend_feature_basic_api": "API REST básica", + "backend_feature_full_api": "API REST completa (34+ endpoints)", + "backend_feature_jwt": "Autenticação JWT e TOTP 2FA", + "backend_feature_blocklist": "Gestão de lista de bloqueio IP/ID", + "backend_feature_tags": "Etiquetas e agrupamento de dispositivos", + "backend_feature_audit": "Registo de eventos de auditoria", + "backend_feature_websocket": "Eventos WebSocket em tempo real", + "backend_connection": "Conexão", + "backend_api_url": "URL da API", + "backend_test": "Testar conexão", + "backend_testing": "A testar...", + "backend_save": "Aplicar backend", + "backend_saved": "Backend do servidor alterado com sucesso. Os dados dos dispositivos serão agora geridos pelo novo backend.", + "backend_save_failed": "Falha ao alterar o backend do servidor", + "backend_test_success": "Conexão bem-sucedida! O servidor está acessível.", + "backend_test_failed": "Falha na conexão. O servidor não está acessível.", + "backend_confirm_switch": "Tem a certeza que deseja alterar o backend do servidor? Isto alterará a gestão dos dispositivos.", + "backend_unreachable": "Não é possível alterar: o servidor de destino não está acessível. Inicie primeiro o servidor.", + "invalid_backend": "Seleção de backend inválida. Escolha 'rustdesk' ou 'betterdesk'.", + "backend_status_running": "Conectado", + "backend_status_unreachable": "Inacessível", + "backend_status_error": "Erro", + "backend_status_unknown": "Desconhecido", + "totp_title": "Autenticação de dois fatores", + "totp_desc": "Adicione uma camada extra de segurança com aplicações de autenticação TOTP (Google Authenticator, Microsoft Authenticator, Authy, etc.)", + "totp_enabled": "2FA ativado", + "totp_enabled_desc": "A sua conta está protegida pela autenticação de dois fatores.", + "totp_disabled": "2FA não ativado", + "totp_disabled_desc": "Ative a autenticação de dois fatores para maior segurança da conta.", + "totp_setup": "Ativar 2FA", + "totp_disable": "Desativar 2FA", + "totp_step1": "Instale uma aplicação de autenticação no seu telemóvel", + "totp_step2": "Digitalize o código QR abaixo", + "totp_step3": "Insira o código de 6 dígitos para verificar", + "totp_manual_key": "Chave manual", + "totp_enter_code": "Insira o código de verificação", + "totp_verify_enable": "Verificar e ativar", + "totp_enabled_success": "Autenticação de dois fatores ativada!", + "totp_recovery_warning": "Guarde estes códigos de recuperação num local seguro. Cada código só pode ser usado uma vez. Se perder o acesso à sua aplicação de autenticação, pode usar estes códigos para iniciar sessão.", + "totp_done": "Concluído", + "totp_disable_warning": "Desativar a autenticação de dois fatores tornará a sua conta menos segura. Insira a sua palavra-passe para confirmar.", + "totp_disabled_success": "A autenticação de dois fatores foi desativada.", + "tutorials_title": "Tutoriais interativos", + "tutorials_desc": "Mostra dicas guiadas curtas para áreas novas ou alteradas da console.", + "tutorials_enabled": "Ativar tutoriais", + "tutorials_enabled_hint": "Quando ativado, tutoriais aparecem automaticamente para áreas que você ainda não concluiu.", + "tutorials_reset_hint": "Limpa todo o progresso salvo para que os tutoriais apareçam novamente.", + "tutorials_enabled_toast": "Tutoriais ativados", + "tutorials_disabled_toast": "Tutoriais desativados", + "tutorials_reset_toast": "Progresso dos tutoriais redefinido", + "tab_auth": "Autenticação", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Configure autenticação externa via LDAP ou Active Directory. Os usuários poderão entrar com suas credenciais de domínio.", + "ldap_enabled": "Ativar autenticação LDAP", + "ldap_enabled_hint": "Quando ativado, os usuários podem entrar com credenciais LDAP/AD. Contas locais continuam funcionando como fallback.", + "ldap_connection": "Conexão do servidor", + "ldap_host": "Host", + "ldap_port": "Porta", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Ignorar verificação TLS", + "ldap_timeout": "Tempo limite da conexão (s)", + "ldap_timeout_hint": "Segundos para aguardar a resposta do servidor LDAP", + "ldap_bind_mode": "Modo de bind", + "ldap_direct_bind": "Bind direto", + "ldap_direct_bind_hint": "Fazer bind diretamente com um modelo de DN em vez de usar uma conta de serviço para pesquisar.", + "ldap_bind_dn": "DN de bind (conta de serviço)", + "ldap_bind_dn_hint": "Nome distinto de uma conta de serviço somente leitura usada para pesquisar usuários.", + "ldap_bind_password": "Senha de bind", + "ldap_base_dn": "DN base", + "ldap_base_dn_hint": "Base de pesquisa para encontrar usuários, por exemplo dc=example,dc=com", + "ldap_user_filter": "Filtro de usuário", + "ldap_user_filter_hint": "Filtro LDAP para localizar usuários. Use {{username}} como placeholder. Padrão: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Modelo de DN para bind direto", + "ldap_direct_bind_dn_hint": "Modelo de DN para bind direto. Use {{username}} como placeholder, por exemplo uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Atributos do usuário", + "ldap_attr_id": "Atributo de nome de usuário", + "ldap_attr_email": "Atributo de e-mail", + "ldap_attr_name": "Atributo de nome exibido", + "ldap_group_mapping": "Mapeamento grupo → função", + "ldap_group_base_dn": "DN base de grupos", + "ldap_group_base_dn_hint": "Deixe vazio para usar o DN base principal", + "ldap_group_filter": "Filtro de grupos", + "ldap_group_attr_name": "Atributo de nome do grupo", + "ldap_default_role": "Função padrão", + "ldap_default_role_hint": "Função atribuída a usuários cujos grupos LDAP não correspondem a nenhum mapeamento", + "ldap_role_viewer": "Visualizador", + "ldap_role_operator": "Operador", + "ldap_role_admin": "Administrador", + "ldap_group_role_map": "Mapa grupo → função", + "ldap_group_role_map_hint": "Mapeie grupos LDAP para funções do BetterDesk. Formato: GroupDN=função separado por | (pipe). Exemplo: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Testar conexão", + "ldap_testing": "Testando...", + "ldap_test_success": "Conexão bem-sucedida! O servidor LDAP está acessível e as credenciais de bind são válidas.", + "ldap_test_failed": "Falha na conexão", + "ldap_save": "Salvar configuração LDAP", + "ldap_saved": "Configuração LDAP salva com sucesso", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Configure login único usando um provedor OpenID Connect (Azure AD, Okta, Google, Keycloak etc.).", + "oidc_enabled": "Ativar autenticação OIDC", + "oidc_enabled_hint": "Permitir que usuários entrem com um provedor de identidade externo", + "oidc_provider": "Provedor de identidade", + "oidc_display_name": "Nome exibido no botão", + "oidc_display_name_hint": "Texto mostrado no botão de login (por exemplo, Azure AD, Okta)", + "oidc_issuer_url": "URL do emissor", + "oidc_issuer_url_hint": "URL do emissor OpenID Connect (a descoberta é automática)", + "oidc_client_id": "ID do cliente", + "oidc_client_secret": "Segredo do cliente", + "oidc_redirect_url": "URL de redirecionamento (callback)", + "oidc_redirect_url_hint": "Deve corresponder exatamente à configuração no seu IdP. Normalmente: http(s)://seu-servidor:21114/api/auth/oidc/callback", + "oidc_scopes": "Escopos", + "oidc_use_pkce": "Usar PKCE (recomendado)", + "oidc_auto_discovery": "Descoberta automática", + "oidc_allow_signup": "Criar usuários automaticamente", + "oidc_manual_endpoints": "URLs de endpoints manuais", + "oidc_authorization_url": "Endpoint de autorização", + "oidc_token_url": "Endpoint de token", + "oidc_userinfo_url": "Endpoint UserInfo", + "oidc_claim_mapping": "Mapeamento de claims", + "oidc_claim_username": "Claim de nome de usuário", + "oidc_claim_email": "Claim de e-mail", + "oidc_claim_name": "Claim de nome exibido", + "oidc_claim_groups": "Claim de grupos", + "oidc_role_mapping": "Mapeamento de funções", + "oidc_default_role": "Função padrão", + "oidc_group_role_map": "Mapeamento grupo → função", + "oidc_group_role_map_hint": "Um mapeamento por linha: nome_do_grupo=função (por exemplo, admins=admin, operators=operator)", + "oidc_test_discovery": "Testar descoberta", + "oidc_testing": "Testando...", + "oidc_test_success": "Descoberta bem-sucedida! Endpoints resolvidos.", + "oidc_test_failed": "Falha na descoberta", + "oidc_issuer_required": "A URL do emissor é obrigatória para testar a descoberta", + "oidc_save": "Salvar configuração OIDC", + "oidc_saved": "Configuração OIDC salva com sucesso", + "tab_advanced": "Avançado", + "connection_mode_title": "Estratégia de ligação", + "connection_mode_desc": "Controla como se conectan los clientes de escritorio RustDesk: P2P directo (hole punch) cuando sea posible, o sempre a través de retransmisión.", + "connection_mode_label": "Modo de ligação predeterminado", + "connection_mode_p2p_first": "P2P primero (recomendado) — tentar ligação direta, usar retransmisión como alternativa", + "connection_mode_relay_only": "Solo retransmisión — todas las sessões usan el servidor de retransmisión", + "connection_mode_advanced": "Opções avançadas", + "connection_mode_fallback_ms": "Tempo limite de fallback P2P (ms)", + "connection_mode_same_nat_relay": "Forçar retransmisión cuando ambos pares partilham la misma IP pública (NAT hairpin)", + "connection_mode_network_hint": "P2P requer que el porta UDP 21116 sea accesible entre los clientes. Signal TCP 21116, relay TCP 21117, NAT test 21115 devem estar abertas en el servidor. Los clientes de navegador web sempre usan retransmisión.", + "connection_mode_save": "Guardar", + "connection_mode_save_restart": "Guardar y reiniciar servidor", + "connection_mode_saved": "Modo de ligação guardado", + "connection_mode_restart_started": "Reinicio do servidor iniciado", + "connection_mode_restart_failed": "Erro al reiniciar el servidor", + "connection_mode_not_configurable": "El modo de ligação não é possível cambiar en este despliegue (no se encontrou unidad systemd ni docker-compose)", + "connection_mode_compose_error": "Não foi possível encontrar la secção de ambiente do servidor em docker-compose.yml", + "connection_mode_source_saved": "Guardado en", + "connection_mode_source_defaults": "A usar valores predefinidos do servidor (no modificables desde el painel)", + "connection_mode_runtime": "Servidor ativo", + "advanced_title": "Ficheiros de configuração", + "advanced_desc": "Edita los ficheiros de configuração do servidor diretamente. Los alterações podem exigir reiniciar los serviços. Se crea una cópia de segurança antes de cada guardado.", + "advanced_warning": "Estos ficheiros contienen segredos (chaves API, palavra-passes de base de dados, segredos de sesión). Edita solo si sabes lo que estás haciendo. Una sintaxe incorreta puede impedir que el servidor arranque.", + "advanced_files_label": "Ficheiros", + "advanced_select_file": "Selecciona un ficheiro de la lista para ver ou editar su conteúdo.", + "advanced_reload": "Recarregar", + "advanced_save": "Guardar ficheiro", + "advanced_apply_restart": "Aplicar (reiniciar serviço)", + "advanced_saved": "Ficheiro de configuração guardado", + "advanced_restart_after_save": "Configuração guardada. Reiniciar el serviço afetado agora para que los alterações surtan efecto?", + "advanced_restart_confirm": "Reiniciar el(los) serviço(s) BetterDesk relacionado(s)? Las ligações activas pueden interrumpirse brevemente.", + "advanced_restart_console_confirm": "Reiniciar el serviço de consola web? La sessão do navegador se desligará brevemente y la página se recarregará cuando la consola voltar.", + "advanced_restart_started": "Reinicio del serviço iniciado", + "advanced_restart_done": "Consola reiniciada — rea carregar página…", + "advanced_restart_polling": "A aguardar que la consola voltar a estar en línea…", + "advanced_restart_timeout": "Se envió el reinicio pero la consola no respondeu a tempo. Revisa los registros de systemd/NSSM y recarga manualmente.", + "advanced_restart_failed": "Erro al reiniciar el serviço (privilégios insuficientes o serviço não instalado)", + "advanced_save_confirm": "Guardar alterações en este ficheiro? Se creará una cópia de segurança de la versão anterior.", + "advanced_unsaved_confirm": "Tienes alterações por guardar. Descartarlos?", + "advanced_no_files": "No hay ficheiros de configuração disponíveis en este sistema.", + "advanced_readonly": "somente leitura", + "advanced_missing": "em faltante", + "advanced_new_file": "Nuevo ficheiro (no se crea hasta que guardes)", + "advanced_new_file_hint": "Nuevo ficheiro — agrega conteúdo y guarda", + "advanced_backup_created": "cópia de segurança criada", + "advanced_restart_console": "Reinicia el serviço de consola web (p. ej. systemctl restart betterdesk-console) para que los alterações en .env surtan efecto.", + "advanced_restart_goserver": "Reinicia el servidor Go de BetterDesk para que se carreguem los alterações en la lista de bloqueio.", + "advanced_restart_systemd": "Depois de editar las unidades de systemd, ejecuta: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Reinicia el serviço afetado para que los alterações surtan efecto.", + "advanced_error_unknown": "Ficheiro de configuração desconhecido", + "advanced_error_not_found": "El ficheiro não existe", + "advanced_error_not_file": "La caminho no es un ficheiro regular", + "advanced_error_too_large": "El ficheiro excede el tamaño máximo editável (512 KB)", + "advanced_error_binary": "Los ficheiros binários não é possíveln editar en el painel", + "advanced_error_invalid": "Contenido de ficheiro no válido", + "advanced_error_not_writable": "El ficheiro no es editável por el proceso de consola", + "advanced_file_console-env": "Ambiente de la consola (.env)", + "advanced_file_console-env-local": "Anulaciones de la consola (.env.local)", + "advanced_file_go-blocklist": "Lista de bloqueo do servidor Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unidade de serviço)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unidade de serviço)", + "advanced_file_console-session-secret": "Segredo de sesión de la consola (.session_secret)", + "advanced_file_go-audit-log": "Registro de auditoría do servidor Go (audit.jsonl)", + "advanced_file_build-env": "Ambiente de compilação del agente (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (configuração do supervisor)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orquestração)", + "advanced_restart_none": "No se requer reinicio del serviço para este ficheiro.", + "enrollment_title": "Registo de dispositivo (RustDesk)", + "enrollment_desc": "Controla como se registam los novos clientes RustDesk y cómo los operadores os aprovam en la página de pedidos de registo.", + "enrollment_require_approval": "Requer aprovação del operador (modo gerido)", + "enrollment_require_approval_hint": "Cuando está ativado, los clientes desconhecidos se ponen en fila até um operador los aprueba en Pedidos de registo.", + "enrollment_rich_approve": "Formulario de aprovação completo (nome, pasta, grupos, etiquetas)", + "enrollment_rich_approve_hint": "Muestra un diálogo detalhado al aprovar pedidos de registo o registro LAN.", + "enrollment_tag_picker": "Escolher etiquetas de las etiquetas de dispositivos existentes", + "enrollment_tag_picker_hint": "Permite aos operadores selecionar etiquetas de la lista usada en la página de Dispositivos em vez de solo escribirlas.", + "enrollment_open_requests": "Pedidos de registo abiertas", + "enrollment_pending_count": "{count} solicitud(es) de registo pendente(s)" + }, + "audit": { + "time": "Hora", + "user": "Utilizador", + "action": "Ação", + "details": "Detalhes", + "action_login": "Login", + "action_login_failed": "Falha no login", + "action_logout": "Logout", + "action_password_change": "Senha alterada", + "action_2fa_enable": "2FA ativado", + "action_2fa_disable": "2FA desativado", + "action_user_create": "Usuário criado", + "action_user_update": "Usuário atualizado", + "action_user_delete": "Usuário excluído", + "action_settings_update": "Configurações atualizadas", + "action_device_ban": "Dispositivo bloqueado", + "action_device_unban": "Bloqueio do dispositivo removido", + "action_device_delete": "Dispositivo excluído" + }, + "generator": { + "title": "Gerador de configuração do cliente", + "subtitle": "Gerar configuração para clientes RustDesk", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Recurso inicial — o gerador de pacotes de agente está em desenvolvimento ativo.", + "config_options": "Opções de configuração", + "server_address": "Endereço do servidor", + "server_address_hint": "Domínio ou endereço IP do seu servidor", + "custom_port": "Porta personalizada", + "port_hint": "Deixe vazio para predefinição (21116)", + "relay_server": "Servidor relay", + "relay_placeholder": "Igual ao servidor ID se vazio", + "relay_hint": "Opcional: endereço separado do servidor relay", + "include_key": "Incluir chave pública na configuração", + "generate": "Gerar configuração", + "output": "Saída da configuração", + "usage_title": "Detalhes da conexão", + "generated": "Configuração gerada", + "server_required": "O endereço do servidor é obrigatório", + "nothing_to_copy": "Gere primeiro uma configuração", + "bundles_title": "Pacotes do agente", + "new_bundle": "Novo pacote", + "editor_title": "Editor de pacotes", + "empty_state": "Selecione um pacote à esquerda ou crie um novo para começar.", + "loading": "Carregando…", + "no_bundles": "Ainda não há pacotes. Crie seu primeiro pacote.", + "bundle_name": "Nome do pacote", + "bundle_name_hint": "Apenas um rótulo interno — não é exibido aos usuários finais.", + "short_link": "Link de download curto", + "short_link_hint": "Usado na URL pública (/d/…). Apenas letras minúsculas, números e hífens (2–32 caracteres). Preenchido automaticamente a partir do nome do pacote — encurte para facilitar o compartilhamento (ex.: acme).", + "branding_section": "Marca", + "company_name": "Nome da empresa/marca", + "short_text": "Descrição curta", + "contact_email": "E-mail de contato", + "contact_phone": "Telefone de contato", + "contact_url": "Site de contato", + "logo": "Logotipo", + "logo_hint": "PNG, JPEG, SVG ou WebP. Máximo de 256 KB.", + "logo_clear": "Remover logotipo", + "primary_color": "Cor principal", + "accent_color": "Cor do cabeçalho", + "default_lang": "Idioma padrão", + "allow_unattended": "Permitir acesso não supervisionado", + "allow_unattended_hint": "Quando ativado, o agente mostra uma senha persistente para acesso de operadores.", + "save": "Salvar pacote", + "revoke": "Revogar", + "unrevoke": "Reativar", + "revoked": "Revogado", + "preview_title": "Prévia ao vivo", + "preview_hint": "Aparência aproximada da janela do agente para usuários finais.", + "preview_default_name": "Suporte BetterDesk", + "preview_status_ready": "Pronto", + "preview_id": "Seu ID", + "preview_password": "Senha", + "preview_chat": "Conversar com o suporte", + "preview_settings": "Configurações (somente admin)", + "preview_quit": "Sair (somente admin)", + "download_link_title": "Link de download", + "download_link_hint": "Compartilhe este link com usuários finais. Eles verão uma página de download com sua marca. Links hex antigos continuam funcionando após alterar o link curto.", + "open_portal": "Abrir", + "created": "Pacote criado", + "saved": "Pacote salvo", + "deleted": "Pacote excluído", + "revoked_ok": "Pacote revogado", + "unrevoked_ok": "Pacote reativado", + "link_copied": "Link copiado para a área de transferência", + "copy_failed": "A cópia automática falhou — copie manualmente", + "unsaved_confirm": "Descartar alterações não salvas?", + "confirm_revoke": "Revogar este pacote? O link de download deixará de funcionar.", + "confirm_unrevoke": "Reativar este pacote?", + "confirm_delete": "Excluir este pacote permanentemente? Esta ação não pode ser desfeita.", "errors": { - "forbidden_title": "Acesso negado", - "forbidden_message": "Não tem permissão para ver esta página.", - "not_found_title": "Página não encontrada", - "not_found_message": "A página que procura não existe ou foi movida.", - "server_error_title": "Erro do servidor", - "server_error_message": "Algo correu mal. Tente novamente mais tarde.", - "go_home": "Ir para a página inicial", - "try_again": "Tentar novamente", - "load_devices_failed": "Falha ao carregar dispositivos", - "load_key_failed": "Falha ao carregar chave", - "load_qr_failed": "Falha ao carregar QR", - "load_audit_failed": "Falha ao carregar registo de auditoria", - "load_users_failed": "Falha ao carregar utilizadores", - "load_folders_failed": "Falha ao carregar pastas", - "download_failed": "Falha na transferência", - "logout_failed": "Falha ao sair", - "password_change_failed": "Falha ao alterar palavra-passe", - "language_change_failed": "Falha ao alterar idioma", - "ban_failed": "Falha ao banir dispositivo", - "unban_failed": "Falha ao desbanir dispositivo", - "delete_failed": "Falha ao excluir dispositivo", - "change_id_failed": "Falha ao alterar ID do dispositivo", - "bulk_delete_failed": "Falha ao excluir dispositivos", - "sync_failed": "Falha na sincronização", - "error": "Erro", - "not_found": "Nao encontrado", - "server_error": "Erro do servidor", - "load_device_failed": "Falha ao carregar dispositivo", - "load_orgs_failed": "Não foi possível carregar organizações" + "validation_failed": "Falha na validação", + "name_required": "O nome do pacote é obrigatório", + "company_name_required": "O nome da empresa é obrigatório", + "logo_invalid": "O logotipo deve ser um arquivo de imagem válido", + "logo_too_large": "O logotipo deve ter no máximo 256 KB", + "logo_read_failed": "Não foi possível ler o arquivo do logotipo", + "primary_color_invalid": "A cor principal deve ser um valor hexadecimal (por exemplo, #2563eb)", + "accent_color_invalid": "A cor do cabeçalho deve ser um valor hexadecimal (por exemplo, #1e293b)", + "contact_url_invalid": "O site de contato deve ser uma URL válida", + "server_host_required": "O endereço público do servidor é obrigatório", + "server_host_invalid": "Ingrese un nome de dominio o dirección IPv4 válido", + "token_failed": "Não foi possível gerar el token de registo — compruebe la conectividad do servidor", + "rebuild_revoked": "Não é possível recompilar un pacote revogado — voltar a ativarlo primero", + "slug_invalid": "O link curto só pode conter letras minúsculas, números e hífens", + "slug_too_short": "O link curto deve ter pelo menos 2 caracteres", + "slug_too_long": "O link curto deve ter no máximo 32 caracteres", + "slug_taken": "Este link curto já é usado por outro pacote" }, - "remote": { - "title": "Ambiente de trabalho remoto", - "connecting": "A conectar...", - "waiting_password": "A aguardar palavra-passe", - "authenticating": "A autenticar...", - "streaming": "Conectado", - "disconnected": "Desconectado", - "error": "Erro", - "status_idle": "Inativo", - "password_required": "Palavra-passe necessária", - "enter_password_for": "Insira a palavra-passe para o dispositivo", - "password_placeholder": "Palavra-passe do dispositivo", - "connect": "Conectar", - "reconnect": "Reconectar", - "disconnect": "Desconectar", - "back_to_devices": "Voltar aos dispositivos", - "fullscreen": "Ecrã inteiro", - "toggle_audio": "Alternar áudio", - "send_keys": "Enviar teclas", - "scale_mode": "Modo de escala", - "scale_fit": "Ajustar à janela", - "scale_fill": "Preencher janela", - "scale_original": "Tamanho original (1:1)", - "scale_stretch": "Esticar", - "actions": "Ações", - "lock_screen": "Bloquear ecrã", - "restart_remote": "Reiniciar dispositivo remoto", - "refresh_screen": "Atualizar ecrã", - "clipboard_paste": "Colar da área de transferência", - "block_input": "Bloquear entrada", - "display_settings": "Definições do ecrã", - "image_quality": "Qualidade de imagem", - "quality_best": "Melhor qualidade", - "quality_balanced": "Equilibrada", - "quality_low": "Desempenho", - "show_cursor": "Mostrar cursor remoto", - "lock_after_session": "Bloquear após sessão", - "privacy_mode": "Modo de privacidade", - "disable_clipboard": "Desativar área de transferência", - "chat": "Chat", - "chat_placeholder": "Escreva uma mensagem...", - "record": "Gravar ecrã", - "view_only": "Apenas visualização", - "pin_toolbar": "Fixar barra de ferramentas", - "monitors": "Monitors", - "select_monitor": "Selecionar monitor", - "quality_speed": "Velocidade", - "quality_quality": "Qualidade", - "recording_started": "Gravação iniciada", - "recording_stopped": "Gravação interrompida", - "download_recording": "Baixar gravação", - "e2e_encrypted": "Criptografado de ponta a ponta", - "e2e_key_exchange": "Troca de chaves em andamento...", - "confirm_restart": "Tem a certeza que deseja reiniciar o dispositivo remoto?", - "webcodecs_not_supported": "O seu navegador não suporta a API WebCodecs. Use Chrome 94+ ou Edge 94+.", - "webcodecs_insecure_context": "WebCodecs não disponível em HTTP. O vídeo usa o descodificador por software. Para melhor desempenho, use HTTPS.", - "webcodecs_fallback_active": "Descodificador de vídeo por software ativo (desempenho limitado)", - "click_to_start": "Clique para iniciar", - "autoplay_blocked": "O navegador requer interação do utilizador para iniciar vídeo e áudio.", - "start_playback": "Iniciar reprodução", - "new_connection": "Nova conexão", - "device_id_placeholder": "Insira o ID do dispositivo", - "http_warning": "Modo HTTP: limitado à decodificação H.264 por software (~15 FPS). Use HTTPS para desempenho total (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Transferência de arquivos", - "file_upload": "Enviar", - "file_download": "Baixar", - "file_empty": "Esta pasta está vazia", - "file_transfers": "Transferências", - "file_complete": "Concluído", - "file_error": "Transferência falhou", - "file_show_hidden": "Mostrar arquivos ocultos", - "file_new_folder": "Nova pasta", - "file_new_folder_prompt": "Digite o nome da pasta:", - "file_parent": "Pasta superior", - "file_root": "Raiz", - "file_rename": "Renomear", - "file_rename_prompt": "Digite o novo nome:", - "file_delete_confirm": "Tem certeza de que deseja excluir este item?", - "file_cancelled": "Transferência cancelada", - "2fa_required": "Código de dois fatores obrigatório", - "2fa_hint": "Digite o código TOTP de seis dígitos para continuar a sessão.", - "2fa_invalid": "Código 2FA inválido", - "verify": "Verify", - "use_cdap_fallback": "Usar visualizador CDAP", - "cdap_fallback_hint": "Abra o visualizador leve de polling JPEG que usa bd-signal/CDAP em vez do relay RustDesk. Útil quando o peer está offline no relay mas acessível via o canal de gestão do agente.", - "clipboard_empty": "A área de transferência está vazia", - "clipboard_denied": "Acesso à área de transferência negado. HTTPS é obrigatório ou a permissão não foi concedida.", - "file_loading": "Carregando...", - "file_timeout": "O dispositivo remoto não respondeu. A transferência de arquivos pode não ser compatível ou pode estar desativada no computador remoto.", - "codec": "Codec de vídeo", - "codec_auto": "Automático (recomendado)" + "legacy_title": "Gerador de configuração do cliente", + "connection_section": "Ligação al servidor", + "server_host": "Endereço público do servidor", + "server_host_placeholder": "support.example.com o 203.0.113.10", + "server_host_hint": "Nome de dominio o IP pública donde los utilizadors finales acceden a su servidor BetterDesk. El porta se toma de la configuração de la consola.", + "use_https": "Usar HTTPS / WSS (recomendado)", + "enrollment_token": "Registro de dispositivo", + "enrollment_token_pending": "Por dispositivo tras aprovação", + "enrollment_token_set": "Por dispositivo — aprovar en Registros", + "enrollment_token_hint": "Cada instalação regista-se sozinha. Aprueba nuevos dispositivos en el painel de Registros; el servidor emite entonces una chave de acceso única por computador.", + "enrollment_per_device": "Por dispositivo — aprovar en Registros", + "background_color": "Fundo de ventana", + "surface_color": "Fundo de tarjeta", + "text_color": "Color del texto", + "text_muted_color": "Cor do texto atenuado", + "status_ready_color": "Color del indicador de pronto", + "header_text_color": "Color del texto de cabeçalho", + "builds_title": "Compilações de cliente", + "builds_hint": "Instaladores compilados en este servidor para cada plataforma. Recompilar después de corregir erroes de la cadena de herramientas o actualizar el código fuente del agente.", + "builds_loading": "A carregar estado de compilação…", + "builds_empty": "Aún no hay compilaciones en fila — guarda el paquete o haz clic en Recompilar tudo.", + "rebuild_all": "Recompilar tudo", + "rebuilding_all": "Poniendo en fila las reconstrucciones…", + "rebuild_queued": "Todas las compilaciones de plataforma en fila", + "rebuild_confirm": "Recompilar tudos los instaladores de plataforma para este paquete? Los artefactos prontos existentes serão substituídos.", + "build_status_ready": "Pronto", + "build_status_pending": "En fila", + "build_status_building": "A compilar", + "build_status_failed": "Falhou", + "builds_summary": "{{ready}} pronto · {{pending}} en fila · {{building}} compilando · {{failed}} falhou", + "build_error_hint": "Erro de compilação", + "preview_help": "Solicitar ajuda" + }, + "server": { + "port": "Porta", + "api_port": "Porta da API", + "id_server": "Servidor de ID", + "relay_server": "Servidor relay", + "api_key": "Chave da API" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banido", + "running": "Em execução", + "stopped": "Parado", + "unknown": "Desconhecido", + "checking": "A verificar...", + "label": "Status", + "no_signal": "Sem sinal" + }, + "actions": { + "refresh": "Atualizar", + "copy": "Copiar", + "connect": "Conectar", + "connect_desktop": "Conectar via cliente desktop", + "remote_viewer": "Visualizador remoto", + "web_remote": "Remoto Web", + "details": "Detalhes", + "edit": "Editar", + "delete": "Excluir", + "ban": "Banir", + "unban": "Desbanir", + "save": "Salvar", + "cancel": "Cancelar", + "confirm": "Confirmar", + "close": "Fechar", + "clear": "Limpar", + "ok": "OK", + "saved": "Guardado com sucesso", + "back": "Voltar", + "create": "Criar", + "dismiss": "Dispensar", + "view_all": "Ver tudo", + "cdap_viewer": "Visualizador de snapshot CDAP", + "add": "Adicionar", + "remove": "Remover" + }, + "time": { + "just_now": "Agora mesmo", + "seconds_ago": "há {count} segundo(s)", + "minutes_ago": "há {count} minuto(s)", + "hours_ago": "há {count} hora(s)", + "days_ago": "há {count} dia(s)", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Gestão de utilizadores", + "subtitle": "Gerir utilizadores e permissões da consola", + "add_user": "Adicionar utilizador", + "edit_user": "Editar utilizador", + "username": "Nome de utilizador", + "username_placeholder": "Insira o nome de utilizador", + "username_hint": "3-32 caracteres, apenas letras, números e underscores", + "password": "Palavra-passe", + "password_placeholder": "Insira a palavra-passe", + "password_hint": "Mínimo 8 caracteres com maiúsculas, minúsculas, números e símbolos", + "password_leave_empty": "Deixe vazio para manter a atual", + "role": "Papel", + "role_admin": "Administrador", + "role_operator": "Operador", + "role_viewer": "Observador", + "role_hint": "Observadores podem apenas visualizar dados, operadores podem gerir dispositivos, administradores têm acesso total", + "created": "Criado", + "last_login": "Último início de sessão", + "never": "Nunca", + "actions": "Ações", + "create": "Criar utilizador", + "edit": "Editar", + "reset_password": "Redefinir palavra-passe", + "new_password": "Nova palavra-passe", + "delete_title": "Excluir utilizador", + "delete_confirm": "Tem a certeza que deseja excluir o utilizador {username}?", + "delete_success": "Utilizador excluído com sucesso", + "user_created": "Utilizador criado com sucesso", + "user_updated": "Utilizador atualizado com sucesso", + "password_reset_success": "Palavra-passe redefinida com sucesso", + "empty_title": "Nenhum utilizador encontrado", + "empty_text": "Adicione utilizadores para gerir o acesso à consola", + "fill_required": "Preencha todos os campos obrigatórios", + "invalid_username": "O nome de utilizador deve ter 3-32 caracteres, apenas letras, números e underscores", + "username_exists": "O nome de utilizador já existe", + "weak_password": "A palavra-passe é demasiado fraca", + "password_too_short": "A palavra-passe deve ter pelo menos 8 caracteres", + "invalid_role": "Papel inválido", + "cannot_demote_self": "Não pode despromover-se a si mesmo", + "cannot_delete_self": "Não pode excluir a sua própria conta", + "last_admin": "Não é possível excluir o último administrador", + "admin_only": "Esta funcionalidade está disponível apenas para administradores", + "password_required": "A palavra-passe é obrigatória", + "not_found": "Utilizador não encontrado", + "strength_weak": "Fraca", + "strength_medium": "Média", + "strength_strong": "Forte", + "security_tips_title": "Boas práticas de segurança", + "tip_strong_passwords": "Use palavras-passe fortes e únicas para cada utilizador", + "tip_unique_accounts": "Crie contas individuais para cada pessoa", + "tip_viewer_role": "Use o papel de observador para utilizadores que precisam apenas de acesso de leitura", + "tip_operator_role": "Use o papel de operador para utilizadores que precisam de gerir dispositivos mas não utilizadores", + "tip_audit_logs": "Revise regularmente os registos de auditoria para atividade suspeita", + "role_pro": "Profissional", + "role_super_admin": "Super Admin", + "role_server_admin": "Administrador do servidor", + "role_global_admin": "Administrador global", + "organizations": "Organizações", + "user_organizations": "Organizações de {username}", + "no_organizations": "Sem organizações", + "org_removed": "Usuário removido da organização", + "server_role_label": "Função do servidor", + "server_role_hint": "Define o que o usuário pode fazer em toda a console (acesso ao painel, configuração do servidor, auditoria etc.).", + "org_membership_section": "Associação à organização", + "org_membership_hint": "Um usuário pode pertencer a várias organizações. A função da organização controla apenas permissões dentro dessa organização e é independente da função do servidor acima.", + "column_organizations": "Organizações", + "no_orgs_short": "—", + "org_count_one": "{count} organização", + "org_count_many": "{count} organizações", + "all_orgs_assigned": "O usuário já pertence a todas as organizações.", + "user_groups": "Grupos de usuários", + "user_groups_hint": "Grupos de usuários podem conceder acesso a grupos de dispositivos selecionados.", + "loading_user_groups": "Carregando grupos de usuários...", + "no_user_groups": "Nenhum grupo de usuários disponível", + "create_user_group": "Criar grupo", + "edit_user_group": "Editar grupo de usuários", + "delete_user_group": "Excluir grupo de usuários", + "delete_user_group_confirm": "Excluir o grupo de usuários {name}? Os membros perderão o acesso concedido por este grupo.", + "user_group_created": "Grupo de usuários criado", + "user_group_updated": "Grupo de usuários atualizado", + "user_group_deleted": "Grupo de usuários excluído", + "user_group_not_found": "Grupo de usuários não encontrado", + "group_name": "Nome do grupo", + "group_name_placeholder": "Operadores", + "group_note": "Note", + "group_note_placeholder": "Nota opcional", + "group_name_required": "O nome do grupo é obrigatório", + "group_members_count": "{count} membros", + "provider": "Fornecedor", + "provider_local": "Local", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Gerido por el fornecedor de identidade", + "provider_managed_hint": "Esta conta está gestionada por un fornecedor de identidade externo (LDAP/AD o SSO). La palavra-passe y el rol son controlados por el fornecedor y não é possíveln cambiar aquí." + }, + "folders": { + "title": "Pastas", + "create": "Criar pasta", + "edit": "Editar pasta", + "delete": "Excluir pasta", + "name": "Nome da pasta", + "name_placeholder": "Insira o nome da pasta", + "name_required": "O nome da pasta é obrigatório", + "name_too_long": "O nome da pasta é demasiado longo (máx. 50 caracteres)", + "color": "Cor", + "icon": "Ícone", + "not_found": "Pasta não encontrada", + "delete_confirm": "Tem a certeza que deseja excluir esta pasta? Os dispositivos serão desassociados.", + "delete_success": "Pasta excluída com sucesso", + "created": "Pasta criada com sucesso", + "updated": "Pasta atualizada com sucesso", + "no_devices_selected": "Nenhum dispositivo selecionado", + "devices_moved": "Dispositivos movidos com sucesso", + "device_assigned": "Dispositivo atribuído à pasta", + "unassigned": "Não atribuído", + "all_devices": "Todos os dispositivos", + "drag_hint": "Arraste dispositivos para as pastas para organizá-los", + "move_to": "Mover para", + "toggle_sidebar": "Alternar barra lateral" + }, + "errors": { + "forbidden_title": "Acesso negado", + "forbidden_message": "Não tem permissão para ver esta página.", + "not_found_title": "Página não encontrada", + "not_found_message": "A página que procura não existe ou foi movida.", + "server_error_title": "Erro do servidor", + "server_error_message": "Algo correu mal. Tente novamente mais tarde.", + "go_home": "Ir para a página inicial", + "try_again": "Tentar novamente", + "load_devices_failed": "Falha ao carregar dispositivos", + "load_key_failed": "Falha ao carregar chave", + "load_qr_failed": "Falha ao carregar QR", + "load_audit_failed": "Falha ao carregar registo de auditoria", + "load_users_failed": "Falha ao carregar utilizadores", + "load_folders_failed": "Falha ao carregar pastas", + "download_failed": "Falha na transferência", + "logout_failed": "Falha ao sair", + "password_change_failed": "Falha ao alterar palavra-passe", + "language_change_failed": "Falha ao alterar idioma", + "ban_failed": "Falha ao banir dispositivo", + "unban_failed": "Falha ao desbanir dispositivo", + "delete_failed": "Falha ao excluir dispositivo", + "change_id_failed": "Falha ao alterar ID do dispositivo", + "bulk_delete_failed": "Falha ao excluir dispositivos", + "sync_failed": "Falha na sincronização", + "error": "Erro", + "not_found": "Nao encontrado", + "server_error": "Erro do servidor", + "load_device_failed": "Falha ao carregar dispositivo", + "load_orgs_failed": "Não foi possível carregar organizações" + }, + "remote": { + "title": "Ambiente de trabalho remoto", + "connecting": "A conectar...", + "waiting_password": "A aguardar palavra-passe", + "authenticating": "A autenticar...", + "streaming": "Conectado", + "disconnected": "Desconectado", + "error": "Erro", + "status_idle": "Inativo", + "password_required": "Palavra-passe necessária", + "enter_password_for": "Insira a palavra-passe para o dispositivo", + "password_placeholder": "Palavra-passe do dispositivo", + "connect": "Conectar", + "reconnect": "Reconectar", + "disconnect": "Desconectar", + "back_to_devices": "Voltar aos dispositivos", + "fullscreen": "Ecrã inteiro", + "toggle_audio": "Alternar áudio", + "send_keys": "Enviar teclas", + "scale_mode": "Modo de escala", + "scale_fit": "Ajustar à janela", + "scale_fill": "Preencher janela", + "scale_original": "Tamanho original (1:1)", + "scale_stretch": "Esticar", + "actions": "Ações", + "lock_screen": "Bloquear ecrã", + "restart_remote": "Reiniciar dispositivo remoto", + "refresh_screen": "Atualizar ecrã", + "clipboard_paste": "Colar da área de transferência", + "block_input": "Bloquear entrada", + "display_settings": "Definições do ecrã", + "image_quality": "Qualidade de imagem", + "quality_best": "Melhor qualidade", + "quality_balanced": "Equilibrada", + "quality_low": "Desempenho", + "show_cursor": "Mostrar cursor remoto", + "lock_after_session": "Bloquear após sessão", + "privacy_mode": "Modo de privacidade", + "disable_clipboard": "Desativar área de transferência", + "chat": "Chat", + "chat_placeholder": "Escreva uma mensagem...", + "record": "Gravar ecrã", + "view_only": "Apenas visualização", + "pin_toolbar": "Fixar barra de ferramentas", + "monitors": "Monitors", + "select_monitor": "Selecionar monitor", + "quality_speed": "Velocidade", + "quality_quality": "Qualidade", + "recording_started": "Gravação iniciada", + "recording_stopped": "Gravação interrompida", + "download_recording": "Baixar gravação", + "e2e_encrypted": "Criptografado de ponta a ponta", + "e2e_key_exchange": "Troca de chaves em andamento...", + "confirm_restart": "Tem a certeza que deseja reiniciar o dispositivo remoto?", + "webcodecs_not_supported": "O seu navegador não suporta a API WebCodecs. Use Chrome 94+ ou Edge 94+.", + "webcodecs_insecure_context": "WebCodecs não disponível em HTTP. O vídeo usa o descodificador por software. Para melhor desempenho, use HTTPS.", + "webcodecs_fallback_active": "Descodificador de vídeo por software ativo (desempenho limitado)", + "click_to_start": "Clique para iniciar", + "autoplay_blocked": "O navegador requer interação do utilizador para iniciar vídeo e áudio.", + "start_playback": "Iniciar reprodução", + "new_connection": "Nova conexão", + "device_id_placeholder": "Insira o ID do dispositivo", + "http_warning": "Modo HTTP: limitado à decodificação H.264 por software (~15 FPS). Use HTTPS para desempenho total (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Transferência de arquivos", + "file_upload": "Enviar", + "file_download": "Baixar", + "file_empty": "Esta pasta está vazia", + "file_transfers": "Transferências", + "file_complete": "Concluído", + "file_error": "Transferência falhou", + "file_show_hidden": "Mostrar arquivos ocultos", + "file_new_folder": "Nova pasta", + "file_new_folder_prompt": "Digite o nome da pasta:", + "file_parent": "Pasta superior", + "file_root": "Raiz", + "file_rename": "Renomear", + "file_rename_prompt": "Digite o novo nome:", + "file_delete_confirm": "Tem certeza de que deseja excluir este item?", + "file_cancelled": "Transferência cancelada", + "2fa_required": "Código de dois fatores obrigatório", + "2fa_hint": "Digite o código TOTP de seis dígitos para continuar a sessão.", + "2fa_invalid": "Código 2FA inválido", + "verify": "Verify", + "use_cdap_fallback": "Usar visualizador CDAP", + "cdap_fallback_hint": "Abra o visualizador leve de polling JPEG que usa bd-signal/CDAP em vez do relay RustDesk. Útil quando o peer está offline no relay mas acessível via o canal de gestão do agente.", + "clipboard_empty": "A área de transferência está vazia", + "clipboard_denied": "Acesso à área de transferência negado. HTTPS é obrigatório ou a permissão não foi concedida.", + "file_loading": "Carregando...", + "file_timeout": "O dispositivo remoto não respondeu. A transferência de arquivos pode não ser compatível ou pode estar desativada no computador remoto.", + "codec": "Codec de vídeo", + "codec_auto": "Automático (recomendado)" + }, + "branding": { + "identity_title": "Identidade da marca", + "identity_desc": "Personalize o nome e a descrição da aplicação mostrados na consola", + "app_name": "Nome da aplicação", + "app_description": "Descrição da aplicação", + "logo_title": "Logótipo", + "logo_desc": "Escolha como o seu logótipo aparece na barra lateral e na página de início de sessão", + "logo_type_icon": "Ícone Material", + "logo_type_svg": "Código SVG", + "logo_type_image": "URL de imagem", + "logo_icon_name": "Nome do ícone", + "logo_icon_hint": "Insira um nome de Material Icons (ex: dns, cloud, security). Veja fonts.google.com/icons", + "logo_svg_code": "Código SVG", + "logo_svg_hint": "Cole o seu markup SVG aqui. Suporta elementos completos com caminhos e estilos.", + "logo_image_upload": "Carregar imagem", + "logo_image_choose": "Escolher ficheiro de imagem", + "logo_image_hint": "PNG, JPG, GIF, WebP ou SVG. Máx. 1,5 MB. A imagem é guardada como dados base64.", + "logo_image_url": "Dados / URL da imagem", + "logo_image_url_hint": "Preenchido automaticamente ao carregar ou cole um URL manualmente.", + "logo_image_too_large": "A imagem é demasiado grande. Tamanho máximo: 1,5 MB.", + "logo_image_invalid_type": "Tipo de ficheiro inválido. Use PNG, JPG, GIF, WebP ou SVG.", + "preview": "Pré-visualização", + "colors_title": "Esquema de cores", + "colors_desc": "Personalize a paleta de cores. Deixe vazio para os valores predefinidos.", + "colors_backgrounds": "Fundos", + "colors_text": "Texto", + "colors_accents": "Cores de destaque", + "colors_borders": "Bordas", + "import_export_title": "Importar / Exportar", + "import_export_desc": "Guarde o seu tema como ficheiro JSON ou importe um de outra instância", + "export_theme": "Exportar tema", + "import_theme": "Importar tema", + "reset_defaults": "Repor predefinições", + "save_branding": "Salvar marca", + "saved": "Marca salva com sucesso. A recarregar...", + "exported": "Tema exportado", + "imported": "Tema importado com sucesso. A recarregar...", + "import_error": "Falha ao importar tema. Formato de ficheiro inválido.", + "reset_confirm": "Tem a certeza que deseja repor a marca para as predefinições? Esta ação não pode ser revertida.", + "reset_success": "Marca reposta para as predefinições. A recarregar...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Texto principal exibido como logotipo da marca", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Texto secundário abaixo do logotipo (por exemplo, nome do produto ou slogan)", + "logo_upload_success": "Logotipo enviado com sucesso.", + "typography_title": "Typography", + "typography_desc": "Escolha fontes para títulos e texto. As fontes serão baixadas para o servidor para hospedagem local.", + "font_heading": "Fonte dos títulos", + "font_heading_hint": "Usada em títulos (H1-H6) e logotipo em texto", + "font_body": "Body Font", + "font_body_hint": "Usada em texto do corpo e elementos da interface", + "font_search_placeholder": "Pesquisar fontes...", + "font_system_default": "Padrão do sistema", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "Fontes baixadas no servidor", + "powered_by": "Desarrollado por", + "background_title": "Fundo y apariencia", + "background_desc": "Establece un fundo de pantalla, gradiente o color sólido para la consola. Las os cartões flutuam sobre él.", + "bg_type_none": "Nenhum", + "bg_type_color": "Cor sólida", + "bg_type_gradient": "Gradiente", + "bg_type_image": "Imagem", + "bg_color": "Color de fundo", + "bg_gradient": "Gradiente CSS", + "bg_gradient_hint": "Cualquier gradiente CSS válido, p. ej. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Subir imagem de fundo", + "bg_image_choose": "Elegir ficheiro de imagem", + "bg_image_hint": "PNG, JPG, WebP o GIF. Máx. 8 MB. Armazenado no servidor.", + "bg_image_url": "Caminho de imagem / URL", + "bg_size": "Tamaño de imagem", + "bg_size_cover": "Cobrir (llenar pantalla)", + "bg_size_contain": "Conter (ajustar)", + "bg_size_auto": "Automático (original)", + "bg_blur": "Desfoque de fundo", + "bg_overlay": "Sobreposição oscura", + "bg_overlay_hint": "Oscurece el fundo para mejorar la legibilidade do texto.", + "bg_image_too_large": "La imagem es demasiado grande. El tamaño máximo es 8 MB.", + "bg_image_invalid_type": "Tipo de ficheiro no válido. Use PNG, JPG, WebP o GIF.", + "bg_upload_success": "Imagem de fundo subida correctamente.", + "login_title": "Página de início de sessão", + "login_desc": "Personaliza el título, subtítulo y fundo de la pantalla de início de sessão.", + "login_heading": "Cabeçalho de início de sessão", + "login_heading_placeholder": "Bem-vindo de nuevo", + "login_subheading": "Subtítulo de início de sessão", + "login_subheading_placeholder": "Iniciar sesión en su conta", + "login_bg_inherit": "Igual à consola", + "agent_title": "Página de transferência do agente", + "agent_desc": "Personaliza el portal de descarga de agentes público que se muestra a los utilizadors finales.", + "agent_show_powered": "Mostrar «Desarrollado por BetterDesk»", + "agent_show_powered_hint": "Mostrar la atribuição de BetterDesk en el rodapé del portal de descargas.", + "footer_title": "Rodapé y derechos de autor", + "footer_desc": "Agrega una línea de rodapé personalizada que se muestra en la pantalla de início de sessão y en la barra lateral de la consola.", + "footer_text": "Texto del rodapé", + "footer_text_hint": "p. ej. un aviso de copyright o el nome de la empresa.", + "show_powered": "Mostrar atribuição «BetterDesk»", + "show_powered_hint": "Mostrar el nome y la versión de BetterDesk en el rodapé de início de sessão y en la barra lateral.", + "custom_css_title": "CSS personalizado", + "custom_css_desc": "Avançado: inserta CSS personalizado aplicado em toda a consola y la página de início de sessão.", + "custom_css_hint": "Úsalo con cuidado. Las reglas inválidas o no seguras se eliminan. Máximo 20.000 caracteres." + }, + "device_detail": { + "tab_overview": "Visão geral", + "tab_tags": "Etiquetas e notas", + "tab_actions": "Ações", + "section_identity": "Identidade", + "section_network": "Rede", + "section_timestamps": "Marcas temporais", + "section_connect": "Ligação", + "section_manage": "Gestão", + "folder": "Pasta", + "status_tier": "Nível de estado", + "device_banned": "Este dispositivo está banido", + "no_reason": "Nenhum motivo indicado", + "tags": "Etiquetas", + "no_tags": "Nenhuma etiqueta atribuída a este dispositivo", + "tag_placeholder": "Insira um nome de etiqueta...", + "add_tag": "Adicionar", + "tag_exists": "Esta etiqueta já existe", + "notes": "Notas", + "notes_placeholder": "Adicionar notas sobre este dispositivo...", + "danger_zone": "Zona de perigo", + "action_connect_web": "Web remoto", + "action_connect_web_desc": "Conectar via ambiente de trabalho remoto do navegador", + "action_native_remote": "Remote BetterDesk", + "action_native_remote_desc": "Stream JPEG nativo — sem plugin necessário", + "action_connect_desktop": "Cliente desktop", + "action_connect_desktop_desc": "Abrir na aplicação cliente desktop", + "action_change_id_desc": "Alterar o ID de registo do dispositivo", + "action_ban_desc": "Impedir este dispositivo de se conectar", + "action_unban_desc": "Permitir que este dispositivo se conecte novamente", + "action_delete_desc": "Remover permanentemente este dispositivo", + "tab_hardware": "Hardware", + "tab_metrics": "Métricas", + "section_system": "Sistema", + "section_cpu": "Processador", + "section_memory": "Memória", + "section_displays": "Ecrãs", + "section_encoding": "Capacidade de codificação", + "section_live_metrics": "Métricas em tempo real", + "section_current_usage": "Utilização atual", + "section_usage_history": "Histórico de utilização", + "os": "Sistema operativo", + "version": "Versão do cliente", + "cpu_model": "Modelo do CPU", + "cpu_cores": "Núcleos do CPU", + "cpu_freq": "Frequência do CPU", + "total_memory": "Memória total", + "metric_memory": "Memória", + "metric_disk": "Disco", + "metrics_updated": "Atualizado", + "device_groups": "Grupos", + "no_sysinfo": "Nenhuma informação de hardware disponível", + "no_sysinfo_hint": "As informações do sistema aparecerão após o dispositivo enviar um relatório sysinfo", + "no_metrics": "Nenhum dado de métricas disponível", + "no_metrics_hint": "As métricas aparecerão após o dispositivo enviar relatórios heartbeat", + "chart_oldest": "← Mais antigo", + "chart_newest": "Mais recente →", + "tab_services": "Serviços", + "tab_processes": "Processos", + "tab_events": "Eventos", + "tab_activity": "Atividade", + "tab_files": "Arquivos", + "agent_lazy_hint": "Clique nesta aba para carregar dados ao vivo do agente", + "agent_offline": "O agente está offline", + "agent_timeout": "O agente não respondeu a tempo", + "agent_error": "Não foi possível carregar dados do agente", + "service_name": "Nome", + "service_display": "Nome exibido", + "service_status": "Estado", + "service_start": "Modo de início", + "process_name": "Nome", + "process_user": "Utilizador", + "process_memory": "Memória" + }, + "inventory": { + "title": "Inventário", + "subtitle": "Inventário de hardware e software dos dispositivos geridos", + "device_id": "ID do dispositivo", + "hostname": "Nome do host", + "os": "Sistema operativo", + "cpu": "CPU", + "cpu_cores": "Núcleos do CPU", + "cpu_usage": "Utilização do CPU", + "memory": "Memória", + "memory_total": "Memória total", + "memory_used": "Memória usada", + "memory_available": "Memória disponível", + "memory_usage": "Utilização de memória", + "swap": "Swap", + "disks": "Discos", + "disk_count": "Número de discos", + "network": "Rede", + "network_interfaces": "Interfaces de rede", + "software": "Software", + "software_count": "Software instalado", + "system": "Sistema", + "kernel": "Kernel", + "architecture": "Arquitetura", + "uptime": "Tempo de atividade", + "frequency": "Frequência", + "physical_cores": "Núcleos físicos", + "logical_cores": "Núcleos lógicos", + "model": "Modelo", + "usage": "Utilização", + "total": "Total", + "used": "Usado", + "available": "Disponível", + "mount_point": "Ponto de montagem", + "removable": "Removível", + "mac_address": "Endereço MAC", + "ip_addresses": "Endereços IP", + "traffic": "Tráfego", + "collect_now": "Recolher agora", + "collector_running": "Recolha em curso", + "collector_stopped": "Recolha parada", + "last_upload": "Último envio", + "total_uploads": "Total", + "last_seen": "Última vez visto", + "collected_at": "Recolhido em", + "no_data": "Nenhum dado de inventário disponível. Clique em \"Recolher agora\" para obter informações do sistema.", + "no_devices": "Nenhum dispositivo com dados de inventário encontrado", + "detail_title": "Detalhe do inventário do dispositivo", + "telemetry": "Telemetria", + "view_detail": "Ver detalhe", + "export": "Exportar", + "refresh": "Atualizar" + }, + "tickets": { + "title": "Helpdesk", + "subtitle": "Tickets de suporte e rastreamento de problemas", + "create": "Novo ticket", + "edit": "Editar ticket", + "delete": "Excluir ticket", + "detail": "Detalhe do ticket", + "ticket_id": "ID do ticket", + "ticket_title": "Título", + "description": "Descrição", + "status": "Estado", + "priority": "Prioridade", + "category": "Categoria", + "assigned_to": "Atribuído a", + "created_by": "Criado por", + "device": "Dispositivo", + "sla_due": "Prazo SLA", + "created_at": "Criado", + "updated_at": "Atualizado", + "resolved_at": "Resolvido", + "closed_at": "Fechado", + "status_open": "Aberto", + "status_in_progress": "Em curso", + "status_resolved": "Resolvido", + "status_closed": "Fechado", + "priority_low": "Baixa", + "priority_medium": "Média", + "priority_high": "Alta", + "priority_critical": "Crítica", + "category_general": "Geral", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Rede", + "category_access": "Acesso", + "category_other": "Outro", + "comments": "Comentários", + "add_comment": "Adicionar comentário", + "comment_placeholder": "Escreva um comentário...", + "internal_note": "Nota interna (não visível para utilizadores finais)", + "attachments": "Anexos", + "upload_attachment": "Carregar anexo", + "download": "Transferir", + "connect_device": "Conectar ao dispositivo", + "no_tickets": "Nenhum ticket encontrado", + "no_comments": "Sem comentários", + "no_attachments": "Sem anexos", + "title_required": "O título é obrigatório", + "delete_confirm": "Tem a certeza que deseja excluir o ticket #{id}?", + "delete_success": "Ticket excluído com sucesso", + "created_success": "Ticket criado com sucesso", + "updated_success": "Ticket atualizado com sucesso", + "sla_overdue": "SLA ultrapassado", + "filter_all": "Todos", + "search_placeholder": "Pesquisar tickets...", + "assign_to_me": "Atribuir a mim", + "unassign": "Remover atribuição", + "stats_total": "Total", + "stats_open": "Abertos", + "stats_in_progress": "Em curso", + "stats_resolved": "Resolvidos", + "stats_closed": "Fechados" + }, + "activity": { + "title": "Monitorização de atividade", + "subtitle": "Utilização de aplicações e rastreamento de inatividade", + "device": "Dispositivo", + "hostname": "Nome do host", + "sessions": "Sessões", + "idle_time": "Tempo de inatividade", + "active_time": "Tempo ativo", + "last_report": "Último relatório", + "top_apps": "Aplicações principais", + "app_name": "Aplicação", + "window_title": "Título da janela", + "category": "Categoria", + "duration": "Duração", + "started_at": "Iniciado", + "ended_at": "Terminado", + "session_count": "Número de sessões", + "total_active": "Total ativo", + "total_idle": "Total inativo", + "detail_count": "Registos detalhados", + "no_data": "Nenhum dado de atividade disponível", + "no_sessions": "Nenhuma sessão registada", + "filter_from": "De", + "filter_to": "Até", + "filter_apply": "Aplicar filtro", + "hours": "horas", + "minutes": "minutos", + "seconds": "segundos", + "category_browser": "Navegador", + "category_productivity": "Produtividade", + "category_communication": "Comunicação", + "category_development": "Desenvolvimento", + "category_media": "Multimédia", + "category_gaming": "Jogos", + "category_system": "Sistema", + "category_other": "Outro", + "summary": "Resumo", + "details": "Detalhes", + "refresh": "Atualizar", + "search": "Pesquisar dispositivos...", + "date_range": "Date Range", + "device_id": "ID do dispositivo", + "session_start": "Início da sessão", + "session_end": "Fim da sessão", + "user": "Utilizador", + "no_activity": "Nenhuma atividade registrada", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Nenhum aplicativo" + }, + "automation": { + "title": "Automação e alertas", + "subtitle": "Regras de alarme, comandos remotos e configuração SMTP", + "rules": "Regras de alarme", + "rules_subtitle": "Defina condições que acionam notificações", + "alerts": "Histórico de alertas", + "alerts_subtitle": "Visualize e confirme os alertas acionados", + "commands": "Comandos remotos", + "commands_subtitle": "Envie comandos para dispositivos remotos", + "smtp": "Configuração SMTP", + "smtp_subtitle": "Definições de notificação por e-mail", + "rule_name": "Nome da regra", + "description": "Descrição", + "condition_type": "Tipo de condição", + "condition_op": "Operador", + "condition_value": "Limiar", + "severity": "Gravidade", + "scope_device": "Dispositivo alvo", + "scope_all": "Todos os dispositivos", + "cooldown": "Tempo de recuperação (segundos)", + "notify_emails": "E-mails de notificação", + "enabled": "Ativo", + "disabled": "Inativo", + "create_rule": "Criar regra", + "edit_rule": "Editar regra", + "delete_rule": "Excluir regra", + "acknowledge": "Confirmar", + "acknowledged": "Confirmado", + "unacknowledged": "Não confirmado", + "triggered_at": "Acionado em", + "severity_info": "Informação", + "severity_warning": "Aviso", + "severity_critical": "Crítico", + "op_gt": "Maior que", + "op_gte": "Maior ou igual", + "op_lt": "Menor que", + "op_lte": "Menor ou igual", + "op_eq": "Igual a", + "op_neq": "Diferente de", + "type_cpu_usage": "Utilização do CPU (%)", + "type_memory_usage": "Utilização de memória (%)", + "type_disk_usage": "Utilização de disco (%)", + "type_offline_duration": "Duração offline (s)", + "type_idle_duration": "Duração de inatividade (s)", + "type_custom": "Personalizado", + "command_type": "Tipo de comando", + "command_payload": "Comando / Script", + "command_result": "Resultado", + "command_status": "Estado", + "send_command": "Enviar comando", + "status_pending": "Pendente", + "status_running": "Em execução", + "status_completed": "Concluído", + "status_failed": "Falhou", + "smtp_host": "Host SMTP", + "smtp_port": "Porta", + "smtp_secure": "Usar TLS", + "smtp_user": "Nome de utilizador", + "smtp_pass": "Palavra-passe", + "smtp_from": "Endereço do remetente", + "smtp_test": "Testar conexão", + "smtp_save": "Salvar configuração", + "smtp_test_success": "Conexão bem-sucedida", + "smtp_test_failed": "Falha na conexão", + "no_rules": "Nenhuma regra de alarme configurada", + "no_alerts": "Nenhum alerta acionado", + "no_commands": "Nenhum comando enviado", + "id_payload_required": "ID do dispositivo e payload são obrigatórios", + "no_commands_sent": "Ainda não foram enviados comandos" + }, + "file_transfer": { + "title": "Transferência de ficheiros", + "transfers": "Transferências", + "new_transfer": "Nova transferência", + "upload": "Carregar", + "download": "Transferir", + "direction": "Direção", + "filename": "Nome do ficheiro", + "file_size": "Tamanho do ficheiro", + "mime_type": "Tipo MIME", + "progress": "Progresso", + "status": "Estado", + "device": "Dispositivo", + "initiated_by": "Iniciado por", + "created_at": "Criado em", + "cancel": "Cancelar", + "cancel_confirm": "Tem a certeza que deseja cancelar esta transferência?", + "download_file": "Transferir ficheiro", + "browse_files": "Procurar ficheiros", + "select_file": "Selecionar ficheiro", + "select_device": "Selecionar dispositivo", + "no_transfers": "Nenhuma transferência de ficheiros", + "status_pending": "Pendente", + "status_active": "Ativo", + "status_completed": "Concluído", + "status_failed": "Falhou", + "status_cancelled": "Cancelado", + "bytes_transferred": "Bytes transferidos", + "chunks": "Blocos", + "transfer_started": "Transferência iniciada", + "transfer_completed": "Transferência concluída", + "transfer_failed": "Transferência falhou", + "transfer_cancelled": "Transferência cancelada", + "max_file_size": "Tamanho máximo do ficheiro: 4 GB", + "error_too_large": "O ficheiro é demasiado grande", + "error_no_device": "Nenhum dispositivo selecionado", + "error_no_file": "Nenhum ficheiro selecionado" + }, + "network": { + "title": "Monitorização de rede", + "targets": "Alvos de monitorização", + "add_target": "Adicionar alvo", + "edit_target": "Editar alvo", + "delete_target": "Excluir alvo", + "delete_confirm": "Tem a certeza que deseja excluir este alvo?", + "target_name": "Nome", + "host": "Host", + "port": "Porta", + "url": "URL", + "check_type": "Tipo de verificação", + "timeout": "Tempo limite", + "interval": "Intervalo (ms)", + "enabled": "Ativo", + "status": "Estado", + "last_check": "Última verificação", + "last_rtt": "Último RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Acessível", + "status_down": "Inacessível", + "status_unknown": "Desconhecido", + "check_now": "Verificar agora", + "history": "Histórico de verificações", + "stats": "Estatísticas", + "total_targets": "Total de alvos", + "targets_up": "Alvos acessíveis", + "targets_down": "Alvos inacessíveis", + "type_ping": "Ping (ICMP)", + "type_tcp": "Porta TCP", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Ferramentas de rede", + "ping_tool": "Teste de Ping", + "tcp_tool": "Verificação de porta TCP", + "http_tool": "Verificação HTTP", + "dns_tool": "Resolução DNS", + "monitor_start": "Iniciar monitorização", + "monitor_stop": "Parar monitorização", + "monitor_running": "Monitorização em curso", + "monitor_stopped": "Monitorização parada", + "no_targets": "Nenhum alvo de monitorização configurado", + "no_history": "Nenhum histórico de verificações disponível", + "error_code": "Erro", + "status_code": "Código de estado HTTP", + "search_targets": "Pesquisar alvos...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Histórico de verificações", + "name_host_required": "Nome e host são obrigatórios", + "uptime": "Tempo de atividade", + "response_time": "Tempo de resposta", + "avg_response": "Resposta média", + "charts": "Gráficos", + "realtime": "Tempo real", + "response_time_ms": "Tempo de resposta (ms)", + "uptime_percent": "% Tempo de atividade", + "last_24h": "Últimas 24 horas", + "last_7d": "Últimos 7 dias", + "last_30d": "Últimos 30 dias" + }, + "dataguard": { + "title": "DataGuard", + "policies": "Políticas DLP", + "add_policy": "Adicionar política", + "edit_policy": "Editar política", + "delete_policy": "Excluir política", + "delete_confirm": "Tem a certeza que deseja excluir esta política?", + "policy_name": "Nome", + "policy_description": "Descrição", + "status": "Status", + "enabled": "Ativo", + "disabled": "Inativo", + "rules": "Regras", + "add_rule": "Adicionar regra", + "rule_type": "Tipo de regra", + "rule_type_usb": "Dispositivo USB", + "rule_type_file": "Operação de ficheiro", + "action": "Ação", + "action_allow": "Permitir", + "action_block": "Bloquear", + "action_log": "Apenas registar", + "filter": "Filtro", + "vid": "ID do fabricante (VID)", + "pid": "ID do produto (PID)", + "serial": "Número de série", + "device_class": "Classe do dispositivo", + "drive_type": "Tipo de unidade", + "file_extensions": "Extensões de ficheiro", + "events": "Eventos DLP", + "event_source": "Origem", + "event_source_usb": "USB", + "event_source_file": "Ficheiro", + "event_type": "Tipo de evento", + "event_details": "Detalhes", + "no_policies": "Nenhuma política DLP configurada", + "no_events": "Nenhum evento DLP registado", + "stats": "Estatísticas", + "total_events": "Total de eventos", + "blocked_events": "Bloqueados", + "logged_events": "Registados", + "usb_events": "Eventos USB", + "file_events": "Eventos de ficheiro", + "device_id": "ID do dispositivo", + "policy_matched": "Política correspondente", + "timestamp": "Marca temporal", + "drive_removable": "Removível", + "drive_fixed": "Fixo", + "drive_network": "Rede", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Desconhecido", + "total_policies": "Total de políticas", + "active_policies": "Políticas ativas", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Políticas", + "tab_events": "Events", + "search_policies": "Pesquisar políticas...", + "create_policy": "Criar política", + "policy_type": "Tipo de política", + "scope": "Scope", + "events_count": "Events", + "search_events": "Pesquisar eventos...", + "event_time": "Event Time", + "device": "Dispositivo", + "policy": "Política", + "detail": "Detail", + "scope_help": "IDs de dispositivos separados por vírgula ou vazio para todos", + "scope_all": "Todos", + "active": "Active", + "type_file_type": "Tipo de arquivo", + "type_clipboard": "Área de transferência", + "type_screen_share": "Compartilhamento de tela", + "type_file_transfer": "Transferência de arquivos", + "policy_desc": "Descrição da política", + "type_usb": "USB" + }, + "reports": { + "title": "Relatórios", + "generate": "Gerar relatório", + "generate_csv": "Exportar CSV", + "report_type": "Tipo de relatório", + "type_devices": "Resumo de dispositivos", + "type_activity": "Resumo de atividade", + "type_security": "Relatório de segurança", + "type_tickets": "Relatório de tickets", + "type_network": "Relatório de rede", + "type_inventory": "Relatório de inventário", + "type_alerts": "Relatório de alertas", + "saved": "Relatórios guardados", + "save_report": "Guardar relatório", + "delete_report": "Excluir relatório", + "delete_confirm": "Tem a certeza que deseja excluir este relatório guardado?", + "no_saved": "Sem relatórios guardados", + "report_title": "Título", + "created_by": "Criado por", + "created_at": "Criado em", + "filters": "Filtros", + "date_from": "De", + "date_to": "Até", + "device_filter": "ID do dispositivo", + "generated_at": "Gerado em", + "section": "Secção de dados", + "total_devices": "Total de dispositivos", + "online": "Online", + "offline": "Offline", + "banned": "Banidos", + "platform_distribution": "Distribuição de plataformas", + "top_applications": "Aplicações principais", + "total_active": "Tempo total ativo", + "total_idle": "Tempo total inativo", + "dlp_stats": "Estatísticas DLP", + "banned_devices": "Dispositivos banidos", + "audit_logs": "Registos de auditoria", + "ticket_stats": "Estatísticas de tickets", + "category_distribution": "Distribuição de categorias", + "priority_distribution": "Distribuição de prioridades", + "targets_status": "Estado dos alvos", + "os_distribution": "Distribuição de SO", + "avg_ram": "RAM média", + "alert_rules": "Regras de alarme", + "recent_alerts": "Alertas recentes", + "tab_generate": "Gerar", + "tab_saved": "Relatórios guardados", + "type_devices_desc": "Visão geral de todos os dispositivos registados", + "type_activity_desc": "Estatísticas de uso de aplicações e sessões", + "type_security_desc": "Eventos de segurança e dispositivos banidos", + "type_tickets_desc": "Estatísticas e resumo de tickets de suporte", + "type_network_desc": "Dados de monitorização de rede e uptime", + "type_inventory_desc": "Inventário de hardware e software", + "type_alerts_desc": "Histórico de alertas e regras", + "report_name": "Nome do relatório", + "format": "Formato", + "save": "Guardar", + "preview": "Pré-visualizar", + "download": "Transferir", + "delete_saved": "Excluir relatório guardado", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Multi-tenancy", + "list": "Inquilinos", + "add_tenant": "Adicionar inquilino", + "edit_tenant": "Editar inquilino", + "delete_tenant": "Excluir inquilino", + "delete_confirm": "Tem a certeza que deseja excluir este inquilino? Todas as atribuições de dispositivos e utilizadores serão removidas.", + "name": "Nome", + "slug": "Slug", + "contact_name": "Nome do contacto", + "contact_email": "E-mail do contacto", + "max_devices": "Máx. dispositivos", + "max_devices_hint": "0 = ilimitado", + "notes": "Notas", + "active": "Ativo", + "inactive": "Inativo", + "devices": "Dispositivos", + "users": "Utilizadores", + "assign_device": "Atribuir dispositivo", + "assign_devices": "Atribuir dispositivos", + "remove_device": "Remover dispositivo", + "assign_user": "Atribuir utilizador", + "remove_user": "Remover utilizador", + "no_tenants": "Nenhum inquilino configurado", + "no_devices": "Nenhum dispositivo atribuído a este inquilino", + "no_users": "Nenhum utilizador atribuído a este inquilino", + "stats": "Estatísticas do inquilino", + "total_devices": "Total de dispositivos", + "online_devices": "Dispositivos online", + "total_users": "Total de utilizadores", + "created_at": "Criado em", + "updated_at": "Atualizado em", + "slug_exists": "O slug do inquilino já existe", + "total_tenants": "Total de inquilinos", + "active_tenants": "Inquilinos ativos", + "search": "Pesquisar inquilino...", + "create_tenant": "Criar inquilino", + "detail": "Detalhes do inquilino", + "contact": "Contacto", + "enabled": "Ativado", + "disabled": "Desativado", + "max": "Máx", + "info": "Informação do inquilino", + "status": "Estado" + }, + "registrations": { + "title": "Registos de dispositivos", + "subtitle": "Gerir pedidos de registo de dispositivos descobertos via LAN", + "search_placeholder": "Pesquisar por ID do dispositivo, nome do host ou IP...", + "no_registrations": "Nenhum pedido de registo", + "col_device_id": "ID do dispositivo", + "col_hostname": "Nome do host", + "col_platform": "Plataforma", + "col_ip": "Endereço IP", + "col_version": "Versão", + "col_status": "Estado", + "col_requested": "Solicitado", + "col_actions": "Ações", + "status_pending": "Pendente", + "status_approved": "Aprovado", + "status_rejected": "Rejeitado", + "approve_btn": "Aprovar", + "approve_confirm": "Tem a certeza que deseja aprovar este dispositivo? Receberá as credenciais do servidor e poderá conectar-se automaticamente.", + "approved_success": "Registo de dispositivo aprovado com sucesso", + "reject_btn": "Rejeitar", + "reject_title": "Rejeitar registo", + "reject_confirm": "Tem a certeza que deseja rejeitar este pedido de registo?", + "reject_reason": "Motivo (opcional)", + "reject_reason_placeholder": "Insira o motivo da rejeição...", + "rejected_success": "Registo de dispositivo rejeitado", + "delete_confirm": "Tem a certeza que deseja excluir este registo?", + "deleted_success": "Registo excluído", + "enrollment_title": "Registro de dispositivos", + "enrollment_subtitle": "Solicitações pendentes de registro de clientes desktop BetterDesk", + "enrollment_empty": "Nenhuma solicitação de registro pendente", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Nome exibido", + "enrollment_display_name_placeholder": "Digite um nome para este dispositivo...", + "enrollment_sync_mode": "Modo de sincronização", + "enrollment_sync_silent": "Silencioso — telemetria mínima", + "enrollment_sync_standard": "Padrão — sincronização equilibrada", + "enrollment_sync_turbo": "Turbo — sincronização agressiva", + "enrollment_approved_success": "Registro de dispositivo aprovado", + "enrollment_rejected_success": "Registro de dispositivo rejeitado", + "approve_title": "Aprovar dispositivo", + "field_name": "Nome do dispositivo", + "field_name_placeholder": "Ingresa un nome para este dispositivo...", + "field_sync_mode": "Modo de sincronização", + "sync_standard": "Padrão — sincronización equilibrada", + "sync_silent": "Silencioso — telemetria mínima", + "sync_turbo": "Turbo — sincronização agressiva", + "field_tags": "Etiquetas", + "field_tags_placeholder": "Etiquetas separadas por vírgulas (p. ej. oficina, portátil)...", + "field_tags_existing": "Etiquetas existentes", + "field_tag_add_placeholder": "Adicionar nueva etiqueta...", + "field_tag_add_btn": "Adicionar", + "field_groups": "Grupos de dispositivos", + "field_folder": "Pasta", + "field_folder_none": "Sin pasta", + "reject_ban_option": "Banir este dispositivo", + "reject_ban_hint": "El dispositivo será bloqueado y não poderá enviar nuevas pedidos de registro.", + "banner_open_mode": "La registo está abierta — los novos clientes RustDesk se registam sin aprovação del operador. Establece el modo gerido en Configuração para usar esta fila.", + "banner_locked_mode": "La registo está bloqueada — solo los dispositivos vinculados a un por token podem registar-se. El modo gerido es necesario para que el operador apruebe clientes desconhecidos.", + "enrollment_settings_link": "Configuração de registo" + }, + "backup": { + "title": "Backup", + "desc": "Transferira um backup completo da configuração da consola, utilizadores, grupos e definições. Os dados peer do servidor Go são incluídos quando o backend BetterDesk está ativo.", + "restore_title": "Restaurar", + "restore_desc": "Carregue um ficheiro de backup transferido anteriormente para restaurar a configuração da consola. Selecione que secções restaurar abaixo.", + "stat_users": "Utilizadores", + "stat_settings": "Definições", + "stat_folders": "Pastas", + "stat_groups": "Grupos", + "stat_strategies": "Estratégias", + "stat_backend": "Backend", + "download": "Transferir backup", + "creating": "A criar backup...", + "download_success": "Backup transferido com sucesso", + "upload": "Carregar backup", + "restore_confirm": "Tem a certeza que deseja restaurar a partir deste backup? As secções selecionadas serão substituídas.", + "restore_success": "Backup restaurado com sucesso. Algumas alterações podem requerer um recarregamento da página.", + "restored": "Restaurado", + "skipped": "Ignorado", + "backup_date": "Data do backup", + "opt_settings": "Definições da consola", + "opt_branding": "Marca / Tema", + "opt_folders": "Pastas de dispositivos", + "opt_groups": "Grupos de utilizadores e dispositivos", + "opt_addressbooks": "Livros de endereços", + "opt_users": "Contas de utilizadores", + "opt_users_warning": "Destrutivo: substitui TODAS as contas de utilizadores com os dados do backup. Pode ser desconectado.", + "no_file": "Nenhum ficheiro de backup selecionado", + "invalid_json": "Ficheiro de backup inválido: JSON inválido", + "invalid_format": "Ficheiro de backup inválido: não é um backup BetterDesk", + "stat_database": "Motor de base de dados", + "stat_keys": "Chaves do servidor incluidas", + "stat_env": "Ficheiro de ambiente", + "stat_uploads": "Ficheiros de marca", + "restart_required": "Alguns componentes restaurados (chaves / .env / base de dados Go) requern un reinicio del serviço para tomar efecto.", + "security_warning": "Esta cópia de segurança contiene segredos (chaves do servidor, ficheiro de ambiente, hashes de palavra-passes y segredos 2FA). Guárdela de forma segura y nunca la comparta.", + "restore_warning": "Restaurar los segredos, el ficheiro de ambiente o la base de dados do servidor Go sobrescribe la identidade do servidor y requer un reinicio del serviço después.", + "opt_database": "Base de dados (todas las tabelas)", + "opt_database_hint": "Reimporta todos os dados de la consola. Se aplica en vivo, no se requer reinicio.", + "opt_uploads": "Ficheiros de marca", + "opt_uploads_hint": "Logótipos e imagens carregadas.", + "opt_secrets": "Chaves y segredos do servidor", + "opt_secrets_warning": "Sobreescribe la identidade do servidor Ed25519, la chave API y el segredo de sesión. Requer reinicio del serviço.", + "opt_env": "Ficheiro de ambiente (.env)", + "opt_env_warning": "Sobreescribe SESSION_SECRET, chave API, DSN de la base de dados, portas y configuração TLS. Requer reinicio del serviço.", + "opt_godb": "Base de dados do servidor Go", + "opt_godb_warning": "Sobreescribe la base de dados SQLite do servidor Go (solo backend SQLite). Requer reinicio del serviço." + }, + "cdap": { + "device_detail": "Detalhes do dispositivo", + "loading": "A carregar...", + "loading_widgets": "Carregando widgets do dispositivo...", + "load_error": "Não foi possível carregar dados do dispositivo", + "connected": "Conectado", + "disconnected": "Desconectado", + "device_offline_msg": "O dispositivo está offline no momento. Os valores dos widgets podem estar desatualizados.", + "no_widgets": "Sem widgets disponíveis", + "no_widgets_desc": "Este dispositivo não registrou um manifesto CDAP com definições de widgets.", + "command_log": "Registo de comandos", + "clear_log": "Limpar registo", + "confirm_command": "Confirmar comando", + "select_option": "Selecionar", + "cdap_status": "Estado CDAP", + "cdap_enabled": "CDAP ativado", + "cdap_disabled": "CDAP desativado", + "cdap_devices": "Dispositivos CDAP", + "cdap_connections": "Conexões ativas", + "send_command": "Enviar comando", + "command_sent": "Comando enviado com sucesso", + "command_failed": "Falha ao enviar comando", + "devices_title": "Dispositivos CDAP", + "devices_subtitle": "Dispositivos conectados via Custom Device Application Protocol", + "stat_connected": "Ligado", + "stat_port": "Porta", + "search_devices": "Pesquisar dispositivos...", + "no_devices": "Sem dispositivos", + "no_devices_desc": "Nenhum dispositivo CDAP conectado no momento. Dispositivos aparecerão aqui quando se conectarem ao gateway.", + "gateway_disabled": "Gateway desativado", + "gateway_disabled_desc": "Ative o gateway CDAP definindo CDAP_ENABLED=true na configuração do servidor.", + "gateway_active": "Ativo", + "toggle_enable": "Ativar CDAP", + "toggle_disable": "Desativar CDAP", + "enabled_restart": "CDAP ativado. É necessário reiniciar o servidor para aplicar as alterações.", + "disabled_restart": "CDAP desativado. É necessário reiniciar o servidor para aplicar as alterações.", + "widgets": "Widgets", + "type_all": "Todos", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agente OS", + "type_network": "Rede", + "type_camera": "Câmara", + "type_custom": "Personalizado", + "active_alerts": "Alertas ativos", + "alert_fired": "Alerta acionado", + "alert_cleared": "Alerta limpo", + "no_alerts": "Sem alertas", + "connect_terminal": "Conectar terminal", + "table_search": "Pesquisar...", + "just_now": "Agora mesmo", + "terminal_connecting": "Conectando ao dispositivo...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Falha na conexão do terminal", + "linked_devices": "Dispositivos vinculados", + "link_device": "Vincular dispositivo", + "unlink_device": "Desligar", + "no_linked_devices": "Nenhum dispositivo vinculado", + "unlink_confirm": "Tem certeza de que deseja desvincular este dispositivo?", + "link_prompt": "Digite o ID do peer para vincular a este dispositivo:", + "connect_desktop": "Conectar área de trabalho", + "connect_video": "Conectar transmissão", + "connect_files": "Navegar por arquivos", + "connect_audio": "Conectar áudio", + "upload_file": "Upload", + "desktop_connecting": "A conectar ao ambiente de trabalho...", + "video_connecting": "Conectando...", + "files_connecting": "Conectando...", + "audio_connecting": "A conectar áudio...", + "audio_streaming": "Streaming de áudio", + "clipboard_in": "Área de transferência de entrada", + "clipboard_out": "Área de transferência de saída", + "monitor_select": "Selecionar monitor", + "keyframe_request": "Solicitar keyframe", + "quality_auto": "Qualidade automática" + }, + "desktop": { + "switch_mode": "Alternar modo", + "console_mode": "Modo console", + "loading": "Carregando", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Fechar", + "widgets_mode": "Modo widgets", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Adicionar widget", + "remove_widget": "Remover widget", + "configure": "Configurar", + "search_widgets": "Pesquisar widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Dispositivos", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Notas...", + "search_placeholder": "Pesquisar...", + "search_pages": "Pages", + "search_devices": "Pesquisar dispositivos", + "search_no_results": "No results", + "exit_desktop": "Exit Desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Status dos dispositivos", + "widget_server_health": "Saúde do servidor", + "widget_system_stats": "Estatísticas do sistema", + "widget_device_list": "Lista de dispositivos", + "widget_quick_actions": "Ações rápidas", + "widget_recent_activity": "Atividade recente", + "widget_notes": "Notes", + "widget_network_monitor": "Monitor de rede", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Dispositivos CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Grade de dispositivos", + "widget_multi_gauge": "Indicador múltiplo", + "widget_weekly_chart": "Gráfico semanal", + "widget_quick_controls": "Controles rápidos", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Estatísticas de conexão", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sessões de usuário", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Sem dispositivos", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Abrir", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Definir URL", + "label_server_uptime": "Tempo ativo do servidor", + "label_merged_info": "Informações combinadas", + "label_with_notes": "Com notas", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Total de dispositivos", + "label_throughput": "Throughput", + "label_active_relays": "Relays ativos", + "label_total_relayed": "Total retransmitido", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrar dispositivos", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Sem dispositivos CDAP", + "action_add_widget": "Adicionar widget", + "label_merged_server_info": "Informações combinadas do servidor", + "wp_images": "Imagens", + "wp_colors": "Cores sólidas", + "wp_custom_color": "Cor personalizada", + "wp_fit_style": "Estilo", + "wp_fill": "Preencher", + "wp_fit": "Ajustar", + "wp_stretch": "Esticar", + "wp_center": "Centralizar", + "widget_calendar": "Calendar", + "widget_process_monitor": "Monitor de processos", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Estatísticas do banco de dados", + "widget_docker_containers": "Contêineres Docker", + "widget_shell_command": "Comando shell", + "widget_device_map": "Mapa de dispositivos", + "widget_remote_connect": "Conexão remota", + "label_no_online": "Nenhum dispositivo online", + "label_no_events": "Sem eventos", + "label_event_title": "Título do evento", + "label_no_data": "Sem dados", + "label_download_speed": "Velocidade de download", + "label_latency": "Latency", + "label_server": "Instância do servidor", + "label_run_test": "Run Test", + "label_testing": "Testando", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Sem contêineres", + "label_docker_unavailable": "Docker indisponível", + "label_no_command": "Sem comando", + "label_no_output": "Sem saída", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Salvar predefinição", + "label_load_preset": "Load Preset", + "label_preset_name": "Nome da predefinição", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Organizar automaticamente", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 colunas iguais", + "label_2col_wide": "2 colunas largas", + "label_3col": "3 Columns", + "label_2x2_grid": "2×2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Grupo de widgets", + "ungroup_widgets": "Desagrupar widgets", + "group_widgets": "Agrupar widgets", + "snap_layouts": "Layouts de encaixe", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Encaixar no canto superior esquerdo", + "snap_top_right": "Encaixar no canto superior direito", + "snap_bottom_left": "Encaixar no canto inferior esquerdo", + "snap_bottom_right": "Encaixar no canto inferior direito", + "aero_shake": "Sacudir janela", + "zone_resize": "Redimensionar zona", + "zone_borders": "Bordas da zona", + "app_drawer": "Applications", + "search_apps": "Pesquisar apps", + "edit_shortcuts": "Editar atalhos", + "widgets": "Lista de widgets", + "theme": "Theme", + "fullscreen": "Ecrã inteiro", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "wp_unavailable": "Papéis de parede indisponíveis", + "wp_download_hint": "Baixe papéis de parede para usá-los aqui.", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Clique para entrar", + "username_placeholder": "Nome de usuário", + "password_placeholder": "Senha", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Verificação em duas etapas", + "totp_subtitle": "Digite o código de 6 dígitos do seu aplicativo autenticador.", + "back_to_login": "Voltar ao login", + "fill_all_fields": "Preencha todos os campos", + "invalid_credentials": "Credenciais inválidas", + "invalid_code": "Código inválido", + "enter_6_digits": "Digite 6 dígitos", + "network_error": "Erro de rede", + "session_expired": "Sessão expirada" + }, + "tokens": { + "title": "Tokens de acesso", + "subtitle": "Gerir tokens de acesso API para integrações e automação", + "enrollment_mode": "Modo de registro", + "mode_open": "Aberto", + "mode_open_desc": "Qualquer cliente válido pode solicitar registro.", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Total", + "active": "Active", + "used": "Used", + "revoked": "Token revogado com sucesso", + "search_placeholder": "Pesquisar tokens...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Gerar em lote", + "create": "Criar token", + "edit": "Editar", + "token": "Token", + "name": "Nome do token", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Token criado com sucesso", + "actions": "Actions", + "name_placeholder": "Insira o nome do token", + "max_uses": "Max Uses", + "max_uses_hint": "Número máximo de usos permitidos para este token.", + "expires_in": "Expires In", + "no_expiration": "Sem expiração", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Nota opcional", + "count": "Count", + "count_range": "A quantidade deve estar entre 1 e 100", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token criado", + "tokens_generated": "Tokens gerados", + "copy_warning": "Copie este token agora. Não o verá novamente!", + "copy_token": "Copiar token", + "copied": "Token copiado para a área de transferência", + "revoke": "Revogar", + "revoke_confirm": "Tem a certeza que deseja revogar este token? Esta ação não pode ser desfeita.", + "revoked_success": "Token revogado com sucesso", + "no_tokens": "Sem tokens criados", + "expired": "Expirado", + "never": "Never", + "save": "Salvar", + "cancel": "Cancelar", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Seguinte", + "prev": "Anterior", + "skip": "Saltar visita", + "finish": "Concluir", + "close": "Fechar", + "step_of": "Etapa {current} de {total}", + "console_sidebar_title": "Navegação da console", + "console_sidebar_text": "Use a barra lateral para alternar entre dispositivos, usuários, configurações e ferramentas.", + "console_expand_title": "Expandir barra lateral", + "console_expand_text": "Abra a barra lateral para ver todas as seções e ferramentas da console.", + "console_search_title": "Pesquisa rápida", + "console_search_text": "Use a pesquisa para encontrar dispositivos, configurações e ações mais rapidamente.", + "console_dashboard_title": "Verificar painel", + "console_dashboard_text": "O painel resume status do servidor, dispositivos e atividade recente.", + "console_devices_title": "Lista de dispositivos", + "console_devices_text": "Aqui você pode pesquisar, filtrar e gerenciar todos os dispositivos registrados.", + "console_settings_title": "Configurações", + "console_settings_text": "Gerencie segurança, autenticação, atualizações e integrações.", + "console_desktop_title": "Modo desktop", + "console_desktop_text": "Mude para o desktop de widgets para criar uma visão operacional personalizada.", + "console_complete_title": "Console pronta", + "console_complete_text": "Você já conhece as principais áreas da console BetterDesk.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "A barra superior contém controles de janela, pesquisa e atalhos.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Abra o seletor de widgets para colocar novos cartões no desktop.", + "desktop_widgets_title": "Widgets", + "desktop_widgets_text": "Widgets mostram dados operacionais ao vivo e atalhos rápidos.", + "desktop_add_widget_title": "Adicionar widgets", + "desktop_add_widget_text": "Escolha um widget e coloque-o onde precisar.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", + "desktop_snap_title": "Layouts de encaixe", + "desktop_snap_text": "Use layouts de encaixe para organizar widgets rapidamente em zonas.", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Mova, agrupe e redimensione janelas como em um desktop moderno.", + "desktop_search_title": "Pesquisar apps", + "desktop_search_text": "Pesquise widgets e ferramentas disponíveis pelo lançador.", + "desktop_complete_title": "Desktop pronto", + "desktop_complete_text": "O modo desktop está configurado e pronto para personalização.", + "devices_folders_title": "Pastas e grupos", + "devices_folders_text": "Organize dispositivos em pastas ou grupos dinâmicos.", + "devices_search_title": "Pesquisar dispositivos", + "devices_search_text": "Filtre por ID, hostname, plataforma, usuário ou tags.", + "devices_table_title": "Tabela de dispositivos", + "devices_table_text": "Abra ações no menu de cada linha ou dê dois cliques para ver detalhes.", + "devices_complete_title": "Gerenciamento de dispositivos pronto", + "devices_complete_text": "Agora você pode pesquisar, agrupar e gerenciar dispositivos.", + "settings_tabs_title": "Seções de configuração", + "settings_tabs_text": "Alterne entre configurações de servidor, segurança, autenticação e interface.", + "settings_content_title": "Editar configuração", + "settings_content_text": "Salve alterações por seção para manter a configuração clara.", + "settings_complete_title": "Configurações prontas", + "settings_complete_text": "Você já conhece as principais áreas de configuração.", + "help": "Ajuda", + "tour_console": "Tour da console", + "tour_desktop": "Tour do desktop", + "tour_devices": "Tour de dispositivos", + "tour_settings": "Tour de configurações", + "reset_all": "Redefinir todos os tours", + "tour_remote": "Tour remoto", + "tour_organization": "Tour de organização", + "tour_cdap": "Tour CDAP", + "tour_chat": "Tour do chat", + "remote_toolbar_title": "Barra remota", + "remote_toolbar_text": "Controle qualidade, monitores, área de transferência, gravação e ações da sessão.", + "remote_canvas_title": "Tela remota", + "remote_canvas_text": "Clique na área da tela para enviar teclado e mouse ao dispositivo.", + "remote_clipboard_title": "Área de transferência", + "remote_clipboard_text": "Sincronize texto com segurança entre o navegador e o dispositivo remoto.", + "remote_complete_title": "Sessão remota pronta", + "remote_complete_text": "Agora você pode controlar e monitorar uma sessão.", + "org_overview_title": "Visão geral da organização", + "org_overview_text": "Veja membros, dispositivos e políticas da organização de relance.", + "org_create_title": "Criar organização", + "org_create_text": "Crie uma nova organização para separar dispositivos e usuários.", + "org_members_title": "Gerenciar membros", + "org_members_text": "Atribua usuários e defina funções específicas da organização.", + "org_devices_title": "Atribuir dispositivos", + "org_devices_text": "Atribua dispositivos a uma organização para manter os dados dentro do escopo correto.", + "org_policies_title": "Configurar políticas", + "org_policies_text": "Controle regras de acesso, transferência de arquivos e limites de sessão.", + "org_complete_title": "Organização pronta", + "org_complete_text": "A organização está preparada para usuários, dispositivos e políticas.", + "cdap_devices_title": "Dispositivos CDAP", + "cdap_devices_text": "Veja todos os dispositivos CDAP ligados — sensores IoT, PLCs, bridges e agentes personalizados. Indicadores verdes mostram ligações ao vivo.", + "cdap_widgets_title": "Dashboard de widgets", + "cdap_widgets_text": "Os widgets exibem dados em tempo real dos dispositivos. Medidores, interruptores, LEDs, gráficos — cada tipo de widget visualiza um tipo diferente de dados.", + "cdap_commands_title": "Enviar comandos", + "cdap_commands_text": "Interaja com dispositivos enviando comandos. Alguns comandos precisam de confirmação. O registo de comandos mantém o histórico de todos os comandos enviados.", + "cdap_terminal_title": "Terminal do dispositivo", + "cdap_terminal_text": "Abra uma sessão de terminal nos agentes CDAP para diagnóstico avançado ou configuração manual. Digite comandos diretamente.", + "cdap_complete_title": "Visão geral CDAP completa!", + "cdap_complete_text": "Explore os widgets dos dispositivos, envie comandos e use o terminal ou o navegador de ficheiros para gestão mais aprofundada. Os agentes CDAP reportam métricas automaticamente.", + "chat_contacts_title": "Contatos", + "chat_contacts_text": "Selecione operadores, agentes ou grupos para uma conversa.", + "chat_send_title": "Enviar mensagens", + "chat_send_text": "Escreva mensagens, envie arquivos e use confirmações de leitura.", + "chat_file_title": "Compartilhar arquivos", + "chat_file_text": "Arquivos são transferidos criptografados quando a criptografia ponta a ponta está ativa.", + "chat_complete_title": "Chat pronto", + "chat_complete_text": "Agora você pode se comunicar com segurança com usuários e operadores.", + "disable_tutorials": "Desativar tutoriais", + "enable_tutorials": "Ativar tutoriais" + }, + "help_request": { + "title": "Solicitações de ajuda", + "subtitle": "Pedidos de suporte enviados por usuários finais", + "new_request": "Nova solicitação de ajuda", + "device": "Dispositivo", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Sem solicitações de ajuda", + "notification": "Notificação de solicitação de ajuda", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organizações", + "create": "Criar", + "edit": "Editar", + "detail": "Detalhes", + "name": "Name", + "slug": "Slug", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Dispositivos", + "invitations": "Invitations", + "settings": "Configurações", + "add_user": "Add User", + "assign_device": "Atribuir dispositivo", + "create_invitation": "Criar convite", + "delete_confirm": "Excluir esta organização?", + "no_orgs": "Sem organizações", + "no_orgs_hint": "Crie uma organização para gerenciar usuários e dispositivos separadamente.", + "connection_policy": "Política de conexão", + "allow_file_transfer": "Permitir transferência de arquivos", + "allow_clipboard": "Permitir área de transferência", + "max_session_duration": "Duração máxima da sessão", + "role_owner": "Owner", + "role_admin": "Administrador", + "role_operator": "Operator", + "role_user": "Membro", + "username": "Nome de usuário", + "password": "Senha", + "display_name": "Nome exibido", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID do dispositivo", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Usuário atribuído", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Sem usuários", + "no_devices": "Sem dispositivos", + "no_invitations": "Sem convites", + "user_added": "User added", + "user_removed": "Usuário removido", + "user_updated": "Usuário atualizado", + "device_assigned": "Dispositivo atribuído", + "device_unassigned": "Atribuição do dispositivo removida", + "invitation_created": "Convite criado", + "settings_saved": "Configurações da organização salvas", + "org_deleted": "Organização excluída", + "confirm_remove_user": "Remover este usuário da organização?", + "confirm_unassign_device": "Remover este dispositivo da organização?", + "confirm_delete_org": "Excluir esta organização permanentemente?", + "edit_role": "Editar função", + "raw_settings": "Configurações brutas", + "key": "Key", + "value": "Value", + "save": "Salvar", + "policy_unattended": "Acesso não supervisionado", + "policy_attended": "Acesso supervisionado", + "policy_ask": "Always ask", + "expires_hours": "Expira em horas", + "loading_failed": "Não foi possível carregar organizações", + "name_slug_required": "Nome e slug são obrigatórios", + "org_created": "Organização criada", + "org_updated": "Organização atualizada", + "create_new_user": "Criar novo usuário", + "add_existing_user": "Adicionar usuário existente", + "none_available": "none", + "select_user": "Selecionar usuário", + "org_role": "Função na organização", + "link_user_hint": "Vincule um usuário existente a esta organização.", + "no_available_users": "Nenhum usuário disponível", + "user_linked": "Usuário vinculado" + }, + "chat": { + "e2e_enabled": "Criptografia ponta a ponta", + "e2e_establishing": "Estabelecendo canal seguro...", + "e2e_established": "Canal seguro estabelecido", + "e2e_unsupported": "Criptografia E2E não suportada neste navegador", + "typing_indicator": "digitando...", + "read_receipt": "Lido", + "delivered": "Entregue", + "file_share": "Arquivo", + "file_too_large": "Arquivo muito grande (máx. 50MB)", + "file_encrypted": "Transferência de arquivo criptografada", + "presence_online": "Online", + "presence_away": "Ausente", + "presence_busy": "Ocupado", + "presence_offline": "Offline", + "key_rotation": "Chaves de segurança renovadas", + "new_message": "Nova mensagem", + "title": "Chat", + "contacts": "Contatos", + "groups": "Grupos", + "no_contacts": "Nenhum contato ainda", + "no_groups": "Nenhum grupo ainda", + "no_messages": "Nenhuma mensagem ainda", + "no_results": "Nenhum resultado encontrado", + "select_conversation": "Selecione uma conversa para começar a conversar", + "type_message": "Digite uma mensagem...", + "send": "Enviar", + "attach_file": "Anexar arquivo", + "emoji": "Emoji", + "search_messages": "Pesquisar mensagens", + "create_group": "Criar grupo", + "group_name": "Nome do grupo", + "group_members": "Membros", + "cancel": "Cancelar", + "create": "Criar", + "members": "membros", + "today": "Hoje", + "yesterday": "Ontem", + "react": "Reagir", + "my_presence": "Meu status", + "search_placeholder": "Pesquisar contatos e mensagens", + "select_conversation_hint": "Selecione uma conversa para ver as mensagens", + "info": "Informacoes", + "group_name_placeholder": "Introduza o nome do grupo" + }, + "toast": { + "device_connected": "Dispositivo conectado", + "device_disconnected": "Dispositivo desconectado", + "session_started": "Sessão iniciada", + "session_ended": "Sessão encerrada", + "file_upload_complete": "Upload de arquivo concluído", + "settings_saved": "Configurações salvas", + "error_generic": "Ocorreu um erro", + "connection_lost": "Conexão perdida", + "reconnecting": "Reconectando" + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Ferramentas rápidas para diagnóstico, rede, segurança e manutenção.", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Enviar", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Digite o texto...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Servidor Go", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Verificar disponibilidade e latência de um host", + "tcp_title": "Verificação de porta TCP", + "tcp_desc": "Testar conectividade de uma porta TCP", + "ssl_title": "Inspetor SSL", + "ssl_desc": "Inspecionar detalhes do certificado SSL/TLS", + "http_title": "Verificação de saúde HTTP", + "http_desc": "Verificar o status de um endpoint HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Resolver hostname para endereço IP", + "whois_title": "DNS Records", + "whois_desc": "Consultar registros A, AAAA, MX, TXT e NS", + "speed_title": "Speed Test", + "speed_desc": "Medir largura de banda de download", + "run_speed_test": "Executar teste de velocidade", + "wol_title": "Wake-on-LAN", + "wol_desc": "Enviar um pacote mágico para acordar um dispositivo", + "wol_sent": "Pacote mágico enviado", + "hash_title": "Gerador de hash", + "hash_desc": "Gerar hashes criptográficos", + "password_title": "Gerador de senhas", + "password_desc": "Gerar senhas fortes e aleatórias", + "jwt_title": "JWT Decoder", + "jwt_desc": "Decodificar e inspecionar JSON Web Tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Codificar ou decodificar dados Base64", + "url_title": "URL Encoder", + "url_desc": "Codificar ou decodificar componentes de URL", + "processes_title": "Lista de processos", + "processes_desc": "Mostrar processos do sistema em execução", + "disk_title": "Disk Usage", + "disk_desc": "Mostrar uso das partições de disco", + "db_title": "Estatísticas do banco de dados", + "db_desc": "Mostrar estatísticas das tabelas do banco de dados", + "docker_title": "Contêineres Docker", + "docker_desc": "Mostrar contêineres Docker em execução", + "logs_title": "Log Viewer", + "logs_desc": "Mostrar saídas recentes de log", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Válido a partir de", + "valid_to": "Válido até", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Sem dados", + "no_docker": "Nenhum contêiner Docker encontrado ou Docker indisponível", + "no_logs": "Nenhuma linha de log disponível" + }, + "policies": { + "title": "Políticas da organização", + "subtitle": "Gerir políticas de segurança, conexão e funcionalidades para organizações", + "select_org": "Organização", + "select_org_placeholder": "Selecionar organização...", + "select_org_first": "Selecione uma organização para ver o registo de auditoria de políticas.", + "configured": "Configurado", + "connection_title": "Política de conexão", + "connection_desc": "Controlar como as sessões remotas são estabelecidas", + "connection_mode": "Modo de conexão", + "mode_attended": "Assistido (requer aprovação do utilizador)", + "mode_unattended": "Não assistido (permitir sempre)", + "mode_ask": "Perguntar sempre", + "max_session": "Duração máx. da sessão (minutos)", + "idle_lock": "Bloqueio por inatividade (minutos)", + "wallpaper_policy": "Papel de parede durante a sessão", + "wallpaper_show": "Mostrar", + "wallpaper_hide_session": "Ocultar durante a sessão", + "wallpaper_hide_always": "Ocultar sempre", + "features_title": "Política de funcionalidades", + "features_desc": "Ativar ou desativar funcionalidades específicas para dispositivos", + "allow_file_transfer": "Permitir transferência de ficheiros", + "allow_clipboard": "Permitir sincronização da área de transferência", + "allow_audio": "Permitir transmissão de áudio", + "allow_recording": "Permitir gravação de sessão", + "security_title": "Política de segurança", + "security_desc": "Aplicar requisitos de segurança para dispositivos da organização", + "require_2fa": "Exigir 2FA para acesso não assistido", + "password_min_length": "Comprimento mínimo da palavra-passe", + "password_require_special": "Exigir caracteres especiais", + "password_max_age": "Idade máx. da palavra-passe (dias, 0=nunca)", + "allowed_operators": "Funções de operador permitidas (separadas por vírgula)", + "network_title": "Política de rede", + "network_desc": "Controlar servidores relay e conexões diretas", + "block_direct_p2p": "Bloquear P2P direto (forçar relay)", + "allowed_relays": "Servidores relay permitidos (um por linha)", + "ip_allowlist": "Lista branca IP (CIDR, um por linha)", + "update_title": "Política de atualização", + "update_desc": "Controlar atualizações automáticas e canais de atualização", + "auto_update": "Ativar atualização automática", + "update_channel": "Canal de atualização", + "audit_title": "Alterações de políticas", + "audit_desc": "Histórico recente de alterações de políticas", + "no_audit": "Nenhuma alteração de política registada.", + "save_success": "Política salva com sucesso", + "save_failed": "Não foi possível salvar a política", + "load_failed": "Não foi possível carregar políticas", + "block_direct_p2p_hint": "Se aplica a los dispositivos de esta organização. El valor predefinição global está en Configuração → Estratégia de ligação." + }, + "attestation": { + "title": "Atestação de dispositivos", + "subtitle": "Monitorizar verificação de identidade de dispositivos e impressões digitais de hardware", + "verified": "Verificado", + "pending": "Pendente", + "failed": "Falhado", + "device_list": "Registos de atestação", + "device_list_desc": "Impressões digitais de hardware e estado de verificação de identidade", + "col_device": "ID do dispositivo", + "col_hostname": "Nome do host", + "col_fingerprint": "Impressão digital", + "col_status": "Estado", + "col_last_check": "Última verificação", + "col_actions": "Ações", + "no_records": "Nenhum registo de atestação encontrado.", + "verify_success": "Dispositivo marcado como verificado", + "verify_failed": "Não foi possível verificar o dispositivo", + "revoke_success": "Atestação do dispositivo revogada", + "revoke_failed": "Não foi possível revogar a atestação" + }, + "fleet": { + "title": "Gestão de frota", + "tab_resources": "Recursos", + "tab_tasks": "Tarefas", + "tab_builder": "Construtor", + "tab_compliance": "Conformidade", + "res_title": "Mapeamento de recursos", + "res_all_types": "Todos os tipos", + "res_type_printer": "Impressora", + "res_type_network_drive": "Unidade de rede", + "res_type_dns": "Servidor DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Adicionar recurso", + "res_name": "Nome do recurso", + "res_type": "Tipo", + "res_address": "Endereço / Caminho", + "res_target": "Destino", + "res_scope": "Âmbito", + "res_scope_org": "Organização", + "res_scope_group": "Grupo", + "res_scope_device": "Dispositivo", + "res_scope_value": "Valor do âmbito", + "res_status": "Estado", + "res_active": "Ativo", + "res_inactive": "Inativo", + "res_no_data": "Nenhum recurso encontrado. Clique em 'Adicionar'.", + "res_confirm_delete": "Tem a certeza que pretende eliminar este recurso?", + "task_title": "Agendador de tarefas", + "task_all_status": "Todos os estados", + "task_status_pending": "Pendente", + "task_status_running": "Em execução", + "task_status_success": "Sucesso", + "task_status_failed": "Falhado", + "task_search": "Pesquisar tarefas…", + "task_create": "Criar tarefa", + "task_name": "Nome da tarefa", + "task_type": "Tipo", + "task_type_script": "Script", + "task_type_install": "Instalação", + "task_type_update": "Atualização", + "task_type_restart": "Reiniciar", + "task_type_deploy": "Implementação", + "task_type_scan": "Scan", + "task_targets": "Destinos", + "task_targets_help": "IDs de dispositivos ou nomes de grupos, separados por vírgulas", + "task_schedule": "Agendamento", + "task_schedule_once": "Uma vez", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Intervalo", + "task_schedule_value": "Valor do agendamento", + "task_script": "Script / Comando", + "task_retries": "Tentativas", + "task_timeout": "Timeout (s)", + "task_last_run": "Última execução", + "task_no_data": "Nenhuma tarefa encontrada. Crie uma nova tarefa.", + "task_confirm_delete": "Tem a certeza que pretende eliminar esta tarefa?", + "task_output": "Saída da tarefa", + "task_retry": "Repetir", + "builder_title": "Construtor visual de workflows", + "builder_select_workflow": "Selecionar workflow…", + "builder_new": "Novo", + "builder_save": "Guardar", + "builder_export": "Exportar", + "builder_execute": "Executar", + "builder_dry_run": "Simulação", + "builder_triggers": "Triggers", + "builder_conditions": "Condições", + "builder_actions": "Ações", + "builder_results": "Resultados", + "builder_transforms": "Transformações", + "builder_properties": "Propriedades", + "builder_no_selection": "Selecione um nó para editar as suas propriedades.", + "workflow_name": "Nome do workflow:", + "comp_title": "Conformidade de software", + "comp_compliant": "Conforme", + "comp_warning": "Aviso", + "comp_critical": "Crítico", + "comp_score": "Pontuação média", + "comp_device": "Dispositivo", + "comp_hostname": "Nome do host", + "comp_os": "SO", + "comp_score_col": "Pontuação", + "comp_issues": "Problemas", + "comp_last_scan": "Último scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan total", + "comp_remediate": "Remediar", + "comp_remediate_confirm": "Executar auto-remediação neste dispositivo?", + "comp_no_data": "Sem dados de conformidade. Execute um scan.", + "save": "Guardar", + "cancel": "Cancelar", + "close": "Fechar", + "edit": "Editar", + "delete": "Eliminar", + "actions": "Ações", + "all_orgs": "Todas as organizações", + "builder_node_trigger_manual": "Gatilho manual", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Gatilho de evento", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Reiniciar serviço", + "builder_node_action_file_deploy": "Implantar arquivo", + "builder_node_action_message": "Enviar mensagem", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Enviar alerta", + "builder_node_result_chain": "Encadear fluxo", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "Selecionar organização...", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Unidade de rede", + "type_dns": "Servidor DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Adicionar recurso", + "edit_resource": "Editar recurso", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Endereço / caminho", + "scope_org": "Organização", + "scope_group": "Grupo", + "scope_device": "Dispositivo", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Tem certeza de que deseja excluir este item?", + "all_statuses": "Todos os status", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Falhou", + "search_tasks": "Pesquisar tarefas...", + "create_task": "Criar tarefa", + "edit_task": "Editar tarefa", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Implantação de arquivo", + "task_type_registry": "Registry", + "target_devices": "Dispositivos alvo", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / comando", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Carregando...", + "no_output": "Nenhuma saída disponível", + "error_loading": "Erro ao carregar dados", + "select_workflow": "Selecionar fluxo...", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Gatilho manual", + "node_schedule": "Schedule", + "node_event": "Gatilho de evento", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Reiniciar serviço", + "node_file_deploy": "Implantar arquivo", + "node_send_message": "Enviar mensagem", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Enviar alerta", + "node_chain": "Encadear fluxo", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Todas as organizações", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Dispositivo", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Executar remediação automática neste dispositivo?" + }, + "scaling": { + "title": "Escalabilidade e gestão de relés", + "tab_overview": "Visão geral", + "tab_relays": "Nós de relé", + "tab_rules": "Regras de atribuição", + "tab_capacity": "Planeamento de capacidade", + "arch_title": "Arquitetura de rede", + "arch_loading": "A carregar diagrama de arquitetura...", + "stat_relay_nodes": "Nós de relé", + "stat_total_devices": "Total de dispositivos", + "stat_active_sessions": "Sessões ativas", + "stat_bandwidth": "Largura de banda total", + "relay_health": "Estado dos relés", + "no_relays": "Nenhum nó de relé configurado. Adicione o seu primeiro nó para distribuir a carga.", + "relay_search": "Pesquisar relés...", + "relay_add": "Adicionar nó de relé", + "relay_edit": "Editar nó de relé", + "col_name": "Nome", + "col_address": "Endereço", + "col_location": "Localização", + "col_devices": "Dispositivos", + "col_sessions": "Sessões", + "col_bandwidth": "Largura de banda", + "col_status": "Estado", + "col_actions": "Ações", + "col_priority": "Prioridade", + "col_rule_name": "Nome da regra", + "col_match": "Correspondência", + "col_target_relay": "Relé destino", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degradado", + "status_offline": "Offline", + "status_enabled": "Ativado", + "status_disabled": "Desativado", + "confirm_delete_relay": "Tem certeza de que deseja eliminar este nó de relé?", + "confirm_delete_rule": "Tem certeza de que deseja eliminar esta regra de atribuição?", + "rules_hint": "As regras de atribuição determinam qual servidor de relé gere grupos de dispositivos específicos. As regras são avaliadas por prioridade (a mais baixa primeiro).", + "rule_add": "Adicionar regra", + "rule_edit": "Editar regra", + "rule_match_type": "Tipo de correspondência", + "match_subnet": "Sub-rede", + "match_group": "Grupo de dispositivos", + "match_tag": "Tag de dispositivo", + "match_location": "Localização", + "rule_match_value": "Valor de correspondência", + "fallback_master": "Servidor mestre", + "fallback_nearest": "Relé mais próximo", + "relay_max_sessions": "Máx. sessões", + "relay_max_bandwidth": "Máx. largura de banda (Mbps)", + "cap_tiers": "Níveis de capacidade", + "cap_loading": "A carregar dados de capacidade...", + "cap_recommendations": "Recomendações", + "cap_no_recs": "Nenhuma recomendação disponível.", + "cap_planning": "Planeamento de infraestrutura", + "cap_config": "Configuração", + "cap_max_devices": "Máx. dispositivos", + "cap_max_sessions": "Máx. sessões", + "cap_current": "Atual", + "cap_utilization": "Utilização", + "cap_tier_devices": "Capacidade de dispositivos", + "cap_tier_sessions": "Capacidade de sessões", + "cap_tier_bandwidth": "Capacidade de largura de banda", + "cap_single_sqlite": "Servidor único (SQLite)", + "cap_single_pg": "Servidor único (PostgreSQL)", + "cap_master_3": "Mestre + 3 relés", + "cap_master_10": "Mestre + 10 relés", + "rec_no_relays": "Nenhum nó configurado. Considere adicionar relés para melhor desempenho e redundância.", + "rec_devices_high": "A utilização de dispositivos está alta. Considere adicionar mais nós de relé.", + "rec_sessions_high": "A capacidade de sessões aproxima-se do limite. Considere atualizar a infraestrutura.", + "rec_cpu_high": "Alguns nós reportam utilização CPU elevada. Considere balanceamento de carga.", + "rec_all_good": "Todos os sistemas operam dentro de parâmetros normais. Nenhuma ação necessária.", + "save": "Guardar", + "cancel": "Cancelar", + "edit": "Editar", + "delete": "Eliminar", + "close": "Fechar", + "no_rules": "Sem regras de atribuicao.", + "relays_info_banner": "Esta lista é informativa. Os servidores relay realmente usados pelos clientes são configurados pela variável de ambiente RELAY_SERVERS no servidor BetterDesk.", + "relay_name_address_required": "Nome e endereço são obrigatórios.", + "relay_save_failed": "Não foi possível salvar o nó relay.", + "relay_delete_failed": "Não foi possível excluir o nó relay.", + "relay_saved": "Nó relay salvo.", + "relay_deleted": "Nó relay excluído.", + "rule_name_value_required": "Nome da regra e valor de correspondência são obrigatórios.", + "rule_save_failed": "Não foi possível salvar a regra.", + "rule_delete_failed": "Não foi possível excluir a regra.", + "rule_saved": "Regra salva.", + "rule_deleted": "Regra excluída." + }, + "cross_platform": { + "title": "Compatibilidade multiplataforma", + "tab_matrix": "Matriz de compatibilidade", + "tab_distribution": "Distribuição", + "tab_protocols": "Protocolos", + "tab_limitations": "Limitações", + "matrix_hint": "Matriz de suporte de funcionalidades para todas as plataformas suportadas. Verde = suporte completo, Amarelo = parcial, Cinza = não disponível, Azul = planeado.", + "col_feature": "Funcionalidade", + "legend_full": "Suporte completo", + "legend_partial": "Suporte parcial", + "legend_none": "Não disponível", + "legend_planned": "Planeado", + "platform_breakdown": "Distribuição por plataforma", + "arch_breakdown": "Distribuição por arquitetura", + "version_breakdown": "Distribuição por versão", + "summary": "Resumo", + "total_devices": "Total de dispositivos", + "unique_platforms": "Plataformas", + "unique_archs": "Arquiteturas", + "unique_versions": "Versões de cliente", + "no_devices": "Ainda não há dispositivos registados.", + "protocols_hint": "A negociação de capacidades do protocolo garante que cada cliente receba apenas as funcionalidades suportadas. O servidor adapta o seu comportamento com base nas capacidades reportadas.", + "capability_negotiation": "Negociação de capacidades", + "codec_support": "Suporte de codecs (dispositivos online)", + "feature_support": "Suporte de funcionalidades (dispositivos online)", + "no_codec_data": "Sem dados de codecs dos dispositivos online.", + "no_feature_data": "Sem dados de funcionalidades dos dispositivos online.", + "protobuf_schema": "Esquema Protobuf ClientCapabilities", + "diagram_client": "Cliente", + "diagram_server": "Servidor BetterDesk", + "diagram_peer": "Peer remoto", + "limitations_hint": "Cada plataforma tem limitações específicas que afetam as funcionalidades disponíveis. Verifique-as ao planear implementações.", + "feat_desktop_client": "Cliente desktop", + "feat_background_agent": "Agente em segundo plano", + "feat_remote_target": "Alvo remoto", + "feat_screen_capture": "Captura de ecrã", + "feat_input_injection": "Injeção de entrada", + "feat_file_transfer": "Transferência de ficheiros", + "feat_clipboard_sync": "Sincronização da área de transferência", + "feat_audio_streaming": "Streaming de áudio", + "feat_chat": "Chat", + "feat_h264": "Codec H.264", + "feat_vp9": "Codec VP9", + "feat_av1": "Codec AV1", + "feat_cdap_agent": "Agente CDAP", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Navegador web", + "platform_chromeos": "ChromeOS", + "status_production": "Produção", + "status_testing": "Teste", + "status_planned": "Planeado", + "status_limited": "Limitado", + "status_experimental": "Experimental", + "limit_win_uac": "Elevação UAC necessária para instalação do serviço e injeção de entrada em ambientes de trabalho seguros.", + "limit_win_service": "Executa como serviço NSSM; requer direitos de administrador para instalação.", + "limit_win_firewall": "As regras do Windows Firewall devem permitir as portas 21115-21119 para conexões relay.", + "limit_linux_wayland": "Os compositores Wayland restringem a captura programática de ecrã; API do portal PipeWire necessária.", + "limit_linux_pipewire": "A captura de áudio requer PipeWire; fallback PulseAudio disponível mas limitado.", + "limit_linux_arm": "Builds ARM64 disponíveis; alguns codecs podem usar descodificação por software (mais lento).", + "limit_mac_screen": "Permissão de gravação de ecrã necessária em Definições do Sistema > Privacidade e Segurança.", + "limit_mac_signing": "O agente deve ser assinado com Apple Developer ID para distribuição.", + "limit_mac_notarize": "Notarização necessária para macOS Gatekeeper (distribuição fora da App Store).", + "limit_android_projection": "A API MediaProjection requer consentimento do utilizador para cada sessão de captura.", + "limit_android_accessibility": "A injeção de entrada requer AccessibilityService; restringido a partir do Android 14+.", + "limit_android_battery": "Serviço em segundo plano limitado pelo modo Doze; pode necessitar de exceção de otimização de bateria.", + "limit_ios_capture": "A Apple proíbe a captura de ecrã em segundo plano; apenas modo de visualização suportado.", + "limit_ios_input": "Sem injeção de entrada permitida; apenas visualização remota e chat.", + "limit_ios_appstore": "Distribuição apenas pela App Store; TestFlight para testes beta.", + "limit_web_https": "API WebCodecs e WebRTC requerem HTTPS; HTTP recorre a JMuxer (codecs limitados).", + "limit_web_codec": "Suporte de codecs depende do navegador; H.264 amplamente suportado, VP9/AV1 varia.", + "limit_web_performance": "Desempenho limitado pelo sandbox do navegador; sem aceleração de hardware direta.", + "limit_chrome_crostini": "Suporte completo do agente apenas dentro do contentor Linux Crostini.", + "limit_chrome_pwa": "O modo PWA fornece apenas capacidades web; sem funções nativas de agente.", + "limit_chrome_input": "Injeção de entrada fora do contentor Crostini não suportada.", + "feat_session_recording": "Gravação de sessão", + "feat_multi_monitor": "Múltiples monitores", + "feat_unattended_access": "Acesso desacompanhado", + "limit_win_virtual_account": "Los serviços se ejecutan bajo contas virtuales aisladas em vez de LocalSystem; las caminhos de registro personalizadas podem precisar ajuste de ACL.", + "limit_linux_unprivileged": "Los serviços se ejecutan bajo la conta sem privilégios dedicada «betterdesk» con endurecimiento de systemd (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Auditoria de segurança", + "tab_overview": "Visão geral", + "tab_events": "Eventos de auditoria", + "tab_hardening": "Fortalecimento", + "tab_vulnerabilities": "Vulnerabilidades", + "security_score": "Pontuação de segurança", + "failed_logins": "Logins falhados (24h)", + "active_bans": "Bans ativos", + "api_keys": "Chaves API", + "old_keys": "Chaves antigas (>90d)", + "security_checks": "Verificações de segurança", + "tls_status": "Estado TLS", + "pass": "OK", + "warning": "Aviso", + "fail": "Falha", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSockets seguros", + "enabled": "Ativado", + "disabled": "Desativado", + "all_events": "Todos os eventos", + "event_login_failed": "Login falhado", + "event_login_success": "Login bem-sucedido", + "event_peer_banned": "Dispositivo banido", + "event_ip_banned": "IP banido", + "event_config_changed": "Configuração alterada", + "event_key_created": "Chave criada", + "refresh": "Atualizar", + "col_time": "Hora", + "col_action": "Ação", + "col_actor": "Ator", + "col_target": "Alvo", + "col_ip": "Endereço IP", + "col_details": "Detalhes", + "no_events": "Nenhum evento de auditoria encontrado.", + "hardening_hint": "Prioridades de fortalecimento de segurança para sua implantação BetterDesk. Ordenados por gravidade.", + "no_hardening": "Nenhum item de fortalecimento disponível.", + "vuln_hint": "Resultados da verificação de vulnerabilidades de dependências. Execute npm audit regularmente.", + "no_vulns": "Nenhuma vulnerabilidade encontrada. Suas dependências estão seguras." + }, + "languages": { + "title": "Idiomas", + "total_languages": "Total de idiomas", + "fully_translated": "Totalmente traduzido", + "needs_review": "Precisa de revisão", + "reference_keys": "Chaves de referência", + "no_languages": "Nenhum arquivo de idioma encontrado.", + "badge_reference": "Referência", + "badge_review": "Revisar", + "badge_complete": "Completo", + "coverage": "cobertura", + "keys": "chaves", + "missing": "em falta", + "extra": "extra", + "view_missing": "Ver itens ausentes", + "fix_missing": "Fix Missing", + "missing_keys_for": "Chaves ausentes para", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "e mais {n}...", + "all_keys_present": "Todas as chaves estão presentes!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "As chaves ausentes em {code} devem ser traduzidas manualmente.", + "no_fix_needed": "Não há chaves ausentes para completar." + }, + "resource_control": { + "title": "Controle de recursos", + "tab_overview": "Visão geral", + "tab_usb": "USB Control", + "tab_optical": "Unidades ópticas", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Cotas de recursos", + "compliance_by_category": "Conformidade por categoria", + "device_compliance": "Conformidade dos dispositivos", + "search_devices": "Pesquisar dispositivos...", + "col_device": "Dispositivo", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Total de dispositivos", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Taxa de conformidade", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configurar", + "no_devices": "Nenhum dispositivo encontrado", + "usb_title": "Controle de portas USB", + "usb_hint": "Controle o acesso a dispositivos de armazenamento USB para o dispositivo selecionado ou a política padrão da organização.", + "usb_storage_policy": "Política de armazenamento USB", + "usb_whitelist": "Dispositivos permitidos (um por linha)", + "usb_whitelist_hint": "VID:PID (ex.: 0781:5583)", + "usb_audit_log": "Registrar conexões de dispositivos USB", + "optical_title": "Controle de unidades ópticas", + "optical_hint": "Controle o acesso a unidades CD/DVD/Blu-ray para o dispositivo selecionado.", + "optical_policy": "Política de unidades ópticas", + "optical_audit_log": "Registrar acesso a unidades ópticas", + "monitors_title": "Gerenciamento de monitores", + "monitors_hint": "Configure ajustes de monitores, incluindo quantidade máxima, resolução aplicada, brilho e agenda de energia.", + "monitors_max_count": "Quantidade máxima de monitores (0 = ilimitado)", + "monitors_max_hint": "0 significa sem limite", + "monitors_resolution": "Resolução máxima", + "monitors_brightness": "Limite de brilho", + "monitors_power_schedule": "Agenda de energia", + "monitors_power_hint": "ex.: off:22:00-06:00", + "disks_title": "Controle de acesso a discos", + "disks_hint": "Configure políticas de acesso a discos, incluindo modo somente leitura, exigência de criptografia e visibilidade de partições.", + "disks_readonly": "Forçar modo somente leitura", + "disks_encryption": "Exigir criptografia (BitLocker/LUKS)", + "disks_smart": "Ativar monitoramento S.M.A.R.T.", + "disks_hidden": "Partições ocultas", + "disks_hidden_hint": "Letras de unidade ou pontos de montagem separados por vírgula", + "quotas_title": "Cotas de recursos", + "quotas_hint": "Defina cotas de CPU, RAM, largura de banda e disco por usuário para o dispositivo selecionado.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Limite de largura de banda (Mbps)", + "quotas_bandwidth_hint": "0 = ilimitado", + "quotas_disk_quota": "Cota de disco (GB)", + "quotas_disk_hint": "0 = ilimitado", + "quotas_process_whitelist": "Lista permitida de processos (um por linha)", + "quotas_process_hint": "ex.: chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Somente lista permitida", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Atualizações", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Versão instalada", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Verificar agora", + "checking": "Checking…", + "up_to_date": "Atualizado", + "update_available": "Atualização disponível", + "changelog": "Release Notes", + "no_changelog": "Nenhuma nota de versão disponível", + "files_changed": "Arquivos alterados", + "files": "Arquivos", + "changes_unavailable": "Não foi possível carregar a lista de alterações. Você ainda pode instalar a atualização.", + "create_backup": "Criar backup antes da atualização", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Instalando atualização...", + "creating_backup": "Criando backup...", + "downloading": "Baixando arquivos...", + "install_success": "Atualização instalada com sucesso. A console será reiniciada...", + "install_failed": "Falha ao instalar atualização", + "restarting": "Aguardando reinício da console...", + "restart_complete": "Console reiniciada com sucesso", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Nenhuma versão de atualização selecionada. Verifique atualizações primeiro.", + "backups_title": "Backups de atualização", + "backups_desc": "Backups prévios criados automaticamente antes de cada atualização", + "no_backups": "Nenhum backup de atualização encontrado", + "restore": "Restore", + "restore_confirm": "Restaurar este backup?", + "restore_success": "Backup restaurado com sucesso", + "baseline_set": "Referência definida", + "commits_behind": "commits atrás", + "total_files": "Total de arquivos", + "applied": "Applied", + "failed": "Falhou", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Servidor Go", + "component_agent": "Agent", + "component_scripts": "Scripts e Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Verificando Go...", + "go_not_found": "Go não está instalado", + "go_check_failed": "Não foi possível verificar a disponibilidade do Go", + "server_building": "Compilando servidor Go... Isso pode levar alguns minutos.", + "server_built": "Binário do servidor compilado", + "server_build_failed": "Falha na compilação do servidor", + "server_deployed": "Binário do servidor implantado", + "server_deploy_failed": "Falha na implantação do servidor", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Baixando código-fonte do servidor...", + "delete": "Excluir", + "delete_confirm": "Excluir permanentemente o backup {name}? Esta ação não pode ser desfeita.", + "delete_success": "Backup excluído", + "delete_failed": "Não foi possível excluir o backup", + "retention_label": "Manter os N backups mais recentes", + "retention_hint": "Backups antigos são removidos automaticamente após cada atualização. Use 0 para manter todos.", + "retention_saved": "Configuração de retenção salva", + "retention_invalid": "A retenção deve ser um inteiro entre 0 e 1000", + "retention_required_for_prune": "Defina primeiro um valor de retenção maior que 0", + "prune_now": "Apply now", + "prune_confirm": "Manter apenas os {n} backups mais recentes e excluir o restante?", + "prune_done": "{n} backup(s) excluído(s)", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Método de atualização", + "strategy_download": "Baixar binário pré-compilado", + "strategy_compile": "Compilar a partir do código-fonte", + "both_available": "Baixar e compilar", + "download_available": "Download disponível", + "no_method": "Nenhum método de atualização", + "no_release": "No release", + "available": "Disponível", + "server_downloading": "Baixando binário do servidor...", + "server_downloaded": "Binário do servidor baixado", + "server_download_failed": "Falha ao baixar binário do servidor", + "server_download_note": "Um binário pré-compilado será baixado de GitHub Releases. Isso normalmente leva menos de um minuto.", + "install_go_hint": "Instale Go de https://go.dev/dl/ para habilitar compilação, ou publique uma release com binários pré-compilados", + "strategy_install_go": "Instalar Go automaticamente e compilar", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Recompilação automática pronta", + "toolchain_ready": "Toolchain instalada", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Baixando toolchain Go...", + "toolchain_failed": "Falha ao instalar toolchain Go", + "modal_title": "Instalando atualização", + "modal_done_title": "Atualização concluída", + "modal_close": "Fechar", + "modal_reload_now": "Recarregar console", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Arquivos da console", + "phase_server": "Servidor Go", + "phase_restart": "Reinício", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Backup ignorado (escolha do usuário)", + "server_skipped": "Servidor Go ignorado", + "server_not_selected": "Go server not selected", + "server_processing": "Processando atualização do servidor Go...", + "no_restart_needed": "Nenhum reinício necessário", + "complete": "Atualização aplicada", + "complete_summary": "A atualização foi aplicada com sucesso.", + "complete_with_errors": "A atualização foi concluída, mas algumas etapas falharam. Veja os detalhes abaixo.", + "modal_done_with_errors_title": "Atualização concluída com erros", + "console_will_restart": "O processo da console será reiniciado agora...", + "restart_complete_msg": "A console terminou de reiniciar. Clique em Recarregar para carregar a nova versão. A página será recarregada automaticamente em 8 segundos.", + "refresh_recommended": "Recursos estáticos foram alterados — recarregue a página para ver a nova interface.", + "confirm_title": "Aplicar atualização", + "confirm_with_backup": "Um backup prévio será criado automaticamente.", + "confirm_no_backup": "Nenhum backup será criado (continue por sua conta e risco).", + "server_stale_title": "Binário do servidor desatualizado", + "server_stale_desc": "O código-fonte do servidor Go foi atualizado, mas o binário em execução não foi recompilado. Recompile agora para aplicar atualizações de segurança e bibliotecas.", + "rebuild_server": "Recompilar binário do servidor", + "rebuilding_server": "Recompilando servidor...", + "rebuild_server_success": "Binário do servidor recompilado e reiniciado", + "rebuild_server_failed": "Falha ao recompilar o binário do servidor" + }, + "permissions": { + "title": "Permissões", + "subtitle": "Gerenciar permissões granulares de funções e substituições", + "info_title": "Permissões baseadas em funções", + "info_desc": "Funções padrão recebem permissões predefinidas. Você pode substituir permissões individuais por função sem alterar a função base.", + "select_role": "Selecionar função", + "select_role_placeholder": "Escolha uma função...", + "reset_overrides": "Redefinir substituições", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Nível do servidor", + "custom": "Custom", + "default": "Default", + "revert": "Reverter", + "saved": "Permissão salva", + "reverted": "Substituição revertida", + "all_reverted": "Todas as substituições foram revertidas", + "confirm_reset": "Redefinir todas as substituições de permissões para esta função?", + "empty_title": "Selecione uma função", + "empty_desc": "Escolha uma função à esquerda para ver suas permissões.", + "locked_title": "Super Admin", + "locked_desc": "Esta função é protegida e só pode ser alterada pelo mapeamento padrão.", + "cat_device": "Dispositivos", + "cat_user": "Users", + "cat_server": "Gerenciamento do servidor", + "cat_org": "Organizações", + "cat_audit": "Auditoria", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Ver dispositivos", + "perm_device_connect": "Conectar a dispositivos", + "perm_device_edit": "Editar dispositivos", + "perm_device_delete": "Excluir dispositivos", + "perm_device_ban": "Bloquear dispositivos", + "perm_device_change_id": "Alterar ID do dispositivo", + "perm_user_view": "Ver usuários", + "perm_user_create": "Criar usuários", + "perm_user_edit": "Editar usuários", + "perm_user_delete": "Excluir usuários", + "perm_server_config": "Configurar servidor", + "perm_server_keys": "Gerenciar chaves do servidor", + "perm_org_create": "Criar organizações", + "perm_org_edit": "Editar organizações", + "perm_org_delete": "Excluir organizações", + "perm_org_manage_users": "Gerenciar usuários da organização", + "perm_org_manage_devices": "Gerenciar dispositivos da organização", + "perm_audit_view": "Ver auditoria", + "perm_metrics_view": "Ver métricas", + "perm_blocklist_edit": "Editar lista de bloqueio", + "perm_cdap_view": "Ver CDAP", + "perm_cdap_command": "Executar comandos CDAP", + "perm_cdap_terminal": "Usar terminal CDAP", + "perm_cdap_files": "Gerenciar arquivos CDAP", + "perm_enrollment_manage": "Gerenciar registros", + "perm_enrollment_approve": "Aprovar registros", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Editar marca", + "perm_server_attestation": "Certificação de desempenho do servidor" + }, + "notifications": { + "title": "Notificações", + "empty": "Nenhuma notificação nova", + "mark_all_read": "Marcar tudo como lido", + "see_all": "Ver todas as solicitações de ajuda", + "help_request": "Solicitação de ajuda", + "just_now": "just now" + }, + "accessibility": { + "title": "Acessibilidade", + "subtitle": "Ajuste a consola à sua visão, movimento e leitura.", + "close": "Fechar menu de acessibilidade", + "profiles": "Perfis rápidos", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Texto maior, alto contraste e foco visível.", + "profile_dyslexia": "Conforto de leitura", + "profile_dyslexia_hint": "Fonte legível e espaçamento mais amplo.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reduz transições e pausa animações.", + "profile_color_assist": "Ajuda de cores", + "profile_color_assist_hint": "Filtro de cor, rótulos e links destacados.", + "reading": "Leitura", + "font_size": "Tamanho do texto", + "line_height": "Altura da linha", + "letter_spacing": "Espaçamento entre letras", + "word_spacing": "Espaçamento entre palavras", + "readable_font": "Fonte legível", + "readable_font_hint": "Usa formas de letras amplas e familiares.", + "dyslexia_spacing": "Espaçamento para dislexia", + "dyslexia_spacing_hint": "Adiciona espaçamento extra para textos longos.", + "visual": "Visual", + "contrast": "Contraste", + "contrast_normal": "Normal", + "contrast_high_dark": "Alto contraste escuro", + "contrast_high_light": "Alto contraste claro", + "contrast_yellow_black": "Amarelo sobre preto", + "color_filter": "Filtro de visão de cores", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturação de cor", + "underline_links": "Sublinhar links", + "underline_links_hint": "Torna links visíveis sem depender da cor.", + "highlight_links": "Destacar ações", + "highlight_links_hint": "Desenha um contorno em links e botões.", + "highlight_headings": "Destacar títulos", + "highlight_headings_hint": "Marca títulos de seção com uma barra colorida.", + "hide_media": "Dim media", + "hide_media_hint": "Escurece imagens, vídeos e áreas canvas.", + "interaction": "Interação", + "strong_focus": "Foco reforçado", + "strong_focus_hint": "Mostra um contorno amplo de foco do teclado.", + "large_cursor": "Cursor grande", + "large_cursor_hint": "Usa um ponteiro maior com alto contraste.", + "reduce_motion": "Reduzir movimento", + "reduce_motion_hint": "Encurta transições e rolagem suave.", + "pause_animations": "Pausar animações", + "pause_animations_hint": "Interrompe movimentos visuais repetitivos.", + "reading_guide": "Guia de leitura", + "reading_guide_hint": "Segue o ponteiro com uma linha luminosa.", + "reading_mask": "Máscara de leitura", + "reading_mask_hint": "Escurece o conteúdo acima e abaixo do ponteiro.", + "preview": "Pré-visualização", + "preview_title": "Prévia do espaço do operador", + "preview_text": "Verifique se textos, links, controles e rótulos de status estão confortáveis de ler antes de fechar este menu.", + "preview_link": "Link para detalhes do dispositivo", + "preview_status": "Online", + "preview_button": "Ação principal", + "preview_secondary": "Secondary", + "reset": "Repor", + "done": "Concluído" + }, + "server_mgmt": { + "title": "Gestão do servidor", + "subtitle": "Painel tipo Cockpit para o host da console BetterDesk (BETA).", + "beta_tooltip": "Ferramentas de gerenciamento do servidor estão em beta", + "notice_title": "Gerenciamento local do servidor", + "notice_body": "Essas ações afetam o host onde a console está em execução.", + "tab_overview": "Visão geral", + "tab_terminal": "Terminal", + "tab_files": "Arquivos", + "tab_services": "Serviços", + "cpu": "CPU", + "memory": "Memória", + "load": "Carregar", + "disks": "Discos", + "history": "Histórico", + "host_info": "Host info", + "cores": "cores", + "uptime": "Tempo ativo", + "no_disks": "Nenhum dado de disco disponível", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY disponível", + "term_connect": "Conectar", + "term_disconnect": "Desconectar", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Erro de conexão", + "term_warning": "Os comandos são executados como o usuário proprietário do processo da console. Adicione uma regra sudoers para permitir elevação.", + "term_hint": "Dica: digite `sudo -i` para obter privilégios root (configuração sudoers necessária).", + "term_lib_failed": "Não foi possível carregar a biblioteca do terminal", + "files_up": "Subir um nível", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Nome", + "files_size": "Tamanho", + "files_perms": "Mode", + "files_mtime": "Modificado", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Pasta vazia", + "files_error": "Não foi possível listar o diretório", + "read_failed": "Não foi possível ler o arquivo", + "save_failed": "Não foi possível salvar o arquivo", + "rename_failed": "Falha ao renomear", + "delete_failed": "Falha ao excluir", + "delete_confirm": "Excluir esta entrada?", + "mkdir_prompt": "Nome da nova pasta:", + "mkdir_failed": "Não foi possível criar a pasta", + "file_saved": "Arquivo salvo", + "binary_warn": "Arquivo binário — somente prévia", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Pesquisar serviços...", + "svc_name": "Serviço", + "svc_state": "Estado", + "svc_description": "Description", + "svc_empty": "Nenhum serviço encontrado", + "svc_load_failed": "Não foi possível carregar serviços", + "svc_action_failed": "Ação falhou", + "svc_confirm": "Run", + "svc_start": "Iniciar", + "svc_stop": "Parar", + "svc_restart": "Reiniciar", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Baixar BetterDesk Agent", + "choose_platform": "Escolher plataforma", + "choose_platform_hint": "Selecione o instalador adequado ao seu sistema operacional.", + "download": "Baixar", + "building": "Compilando…", + "failed": "Falha na compilação", + "need_help": "Precisa de ajuda?", + "powered_by": "Desenvolvido por" + }, + "server_attestation": { + "title": "Atestação do servidor", + "subtitle": "Benchmark de desempenho que determina a capacidade de conexões remotas simultâneas a 80% de limiar de CPU, RAM e disco.", + "warning_title": "Teste de carga", + "warning_body": "O benchmark simula conexões WebSocket paralelas aos servidores de sinal e relay. Execute em horas de menor tráfego — este teste carrega a produção.", + "run_benchmark": "Executar benchmark", + "abort": "Abortar", + "download_report": "Descarregar relatório JSON", + "last_test": "Último teste", + "no_test_yet": "Nenhum benchmark foi executado ainda", + "max_connections": "Conexões máximas", + "threshold_80": "Limiar de 80% — métricas finais", + "disk": "Disco", + "ramp_chart": "Gráfico de rampa de carga", + "connections": "Conexões", + "connections_short": "con.", + "tier_guide_title": "O que significa cada nível?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "SEM CLASSIFICAÇÃO", + "tier_bronze_desc": "1–25 conexões simultâneas — VPS pequeno (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 conexões — servidor de gama média (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 conexões — servidor de alto desempenho (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 conexões — infraestrutura enterprise (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ conexões — classe turbo: hardware dedicado, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Nota: no Docker, as métricas de CPU/RAM podem refletir os limites do container em vez do host físico.", + "badge_tooltip": "Atestação do servidor BetterDesk — certificação de desempenho do servidor", + "confirm_run": "Este benchmark irá fazer um teste de carga no servidor com conexões simuladas. Continuar?", + "starting": "A iniciar...", + "complete": "Benchmark completo", + "signal_peers": "Peers de sinal", + "relay_sessions": "Sessões de relay", + "page_error": "Erro al cargar la página de certificação do servidor", + "mode_estimated": "Estimado (WebSocket inacessível)", + "incomplete": "Benchmark concluído sin nível válido" + }, + "commercialization": { + "title": "Comercialização", + "subtitle": "Pacotes de suporte, sessões faturáveis e relatórios", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Recurso inicial — faturação e pacotes em desenvolvimento ativo.", + "tabs": { + "overview": "Visão geral", + "packages": "Pacotes e contratos", + "sessions": "Sessões", + "reports": "Relatórios", + "settings": "Definições avançadas" }, - "branding": { - "identity_title": "Identidade da marca", - "identity_desc": "Personalize o nome e a descrição da aplicação mostrados na consola", - "app_name": "Nome da aplicação", - "app_description": "Descrição da aplicação", - "logo_title": "Logótipo", - "logo_desc": "Escolha como o seu logótipo aparece na barra lateral e na página de início de sessão", - "logo_type_icon": "Ícone Material", - "logo_type_svg": "Código SVG", - "logo_type_image": "URL de imagem", - "logo_icon_name": "Nome do ícone", - "logo_icon_hint": "Insira um nome de Material Icons (ex: dns, cloud, security). Veja fonts.google.com/icons", - "logo_svg_code": "Código SVG", - "logo_svg_hint": "Cole o seu markup SVG aqui. Suporta elementos completos com caminhos e estilos.", - "logo_image_upload": "Carregar imagem", - "logo_image_choose": "Escolher ficheiro de imagem", - "logo_image_hint": "PNG, JPG, GIF, WebP ou SVG. Máx. 1,5 MB. A imagem é guardada como dados base64.", - "logo_image_url": "Dados / URL da imagem", - "logo_image_url_hint": "Preenchido automaticamente ao carregar ou cole um URL manualmente.", - "logo_image_too_large": "A imagem é demasiado grande. Tamanho máximo: 1,5 MB.", - "logo_image_invalid_type": "Tipo de ficheiro inválido. Use PNG, JPG, GIF, WebP ou SVG.", - "preview": "Pré-visualização", - "colors_title": "Esquema de cores", - "colors_desc": "Personalize a paleta de cores. Deixe vazio para os valores predefinidos.", - "colors_backgrounds": "Fundos", - "colors_text": "Texto", - "colors_accents": "Cores de destaque", - "colors_borders": "Bordas", - "import_export_title": "Importar / Exportar", - "import_export_desc": "Guarde o seu tema como ficheiro JSON ou importe um de outra instância", - "export_theme": "Exportar tema", - "import_theme": "Importar tema", - "reset_defaults": "Repor predefinições", - "save_branding": "Salvar marca", - "saved": "Marca salva com sucesso. A recarregar...", - "exported": "Tema exportado", - "imported": "Tema importado com sucesso. A recarregar...", - "import_error": "Falha ao importar tema. Formato de ficheiro inválido.", - "reset_confirm": "Tem a certeza que deseja repor a marca para as predefinições? Esta ação não pode ser revertida.", - "reset_success": "Marca reposta para as predefinições. A recarregar...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Texto principal exibido como logotipo da marca", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Texto secundário abaixo do logotipo (por exemplo, nome do produto ou slogan)", - "logo_upload_success": "Logotipo enviado com sucesso.", - "typography_title": "Typography", - "typography_desc": "Escolha fontes para títulos e texto. As fontes serão baixadas para o servidor para hospedagem local.", - "font_heading": "Fonte dos títulos", - "font_heading_hint": "Usada em títulos (H1-H6) e logotipo em texto", - "font_body": "Body Font", - "font_body_hint": "Usada em texto do corpo e elementos da interface", - "font_search_placeholder": "Pesquisar fontes...", - "font_system_default": "Padrão do sistema", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "Fontes baixadas no servidor", - "powered_by": "Desarrollado por", - "background_title": "Fundo y apariencia", - "background_desc": "Establece un fundo de pantalla, gradiente o color sólido para la consola. Las os cartões flutuam sobre él.", - "bg_type_none": "Nenhum", - "bg_type_color": "Cor sólida", - "bg_type_gradient": "Gradiente", - "bg_type_image": "Imagem", - "bg_color": "Color de fundo", - "bg_gradient": "Gradiente CSS", - "bg_gradient_hint": "Cualquier gradiente CSS válido, p. ej. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Subir imagem de fundo", - "bg_image_choose": "Elegir ficheiro de imagem", - "bg_image_hint": "PNG, JPG, WebP o GIF. Máx. 8 MB. Armazenado no servidor.", - "bg_image_url": "Caminho de imagem / URL", - "bg_size": "Tamaño de imagem", - "bg_size_cover": "Cobrir (llenar pantalla)", - "bg_size_contain": "Conter (ajustar)", - "bg_size_auto": "Automático (original)", - "bg_blur": "Desfoque de fundo", - "bg_overlay": "Sobreposição oscura", - "bg_overlay_hint": "Oscurece el fundo para mejorar la legibilidade do texto.", - "bg_image_too_large": "La imagem es demasiado grande. El tamaño máximo es 8 MB.", - "bg_image_invalid_type": "Tipo de ficheiro no válido. Use PNG, JPG, WebP o GIF.", - "bg_upload_success": "Imagem de fundo subida correctamente.", - "login_title": "Página de início de sessão", - "login_desc": "Personaliza el título, subtítulo y fundo de la pantalla de início de sessão.", - "login_heading": "Cabeçalho de início de sessão", - "login_heading_placeholder": "Bem-vindo de nuevo", - "login_subheading": "Subtítulo de início de sessão", - "login_subheading_placeholder": "Iniciar sesión en su conta", - "login_bg_inherit": "Igual à consola", - "agent_title": "Página de transferência do agente", - "agent_desc": "Personaliza el portal de descarga de agentes público que se muestra a los utilizadors finales.", - "agent_show_powered": "Mostrar «Desarrollado por BetterDesk»", - "agent_show_powered_hint": "Mostrar la atribuição de BetterDesk en el rodapé del portal de descargas.", - "footer_title": "Rodapé y derechos de autor", - "footer_desc": "Agrega una línea de rodapé personalizada que se muestra en la pantalla de início de sessão y en la barra lateral de la consola.", - "footer_text": "Texto del rodapé", - "footer_text_hint": "p. ej. un aviso de copyright o el nome de la empresa.", - "show_powered": "Mostrar atribuição «BetterDesk»", - "show_powered_hint": "Mostrar el nome y la versión de BetterDesk en el rodapé de início de sessão y en la barra lateral.", - "custom_css_title": "CSS personalizado", - "custom_css_desc": "Avançado: inserta CSS personalizado aplicado em toda a consola y la página de início de sessão.", - "custom_css_hint": "Úsalo con cuidado. Las reglas inválidas o no seguras se eliminan. Máximo 20.000 caracteres." + "clock": { + "title": "Hora do servidor (NTP)", + "check_now": "Verificar agora", + "unsynced": "Relógio do servidor não sincronizado — sessões faturáveis podem ser bloqueadas" }, - "device_detail": { - "tab_overview": "Visão geral", - "tab_tags": "Etiquetas e notas", - "tab_actions": "Ações", - "section_identity": "Identidade", - "section_network": "Rede", - "section_timestamps": "Marcas temporais", - "section_connect": "Ligação", - "section_manage": "Gestão", - "folder": "Pasta", - "status_tier": "Nível de estado", - "device_banned": "Este dispositivo está banido", - "no_reason": "Nenhum motivo indicado", - "tags": "Etiquetas", - "no_tags": "Nenhuma etiqueta atribuída a este dispositivo", - "tag_placeholder": "Insira um nome de etiqueta...", - "add_tag": "Adicionar", - "tag_exists": "Esta etiqueta já existe", - "notes": "Notas", - "notes_placeholder": "Adicionar notas sobre este dispositivo...", - "danger_zone": "Zona de perigo", - "action_connect_web": "Web remoto", - "action_connect_web_desc": "Conectar via ambiente de trabalho remoto do navegador", - "action_native_remote": "Remote BetterDesk", - "action_native_remote_desc": "Stream JPEG nativo — sem plugin necessário", - "action_connect_desktop": "Cliente desktop", - "action_connect_desktop_desc": "Abrir na aplicação cliente desktop", - "action_change_id_desc": "Alterar o ID de registo do dispositivo", - "action_ban_desc": "Impedir este dispositivo de se conectar", - "action_unban_desc": "Permitir que este dispositivo se conecte novamente", - "action_delete_desc": "Remover permanentemente este dispositivo", - "tab_hardware": "Hardware", - "tab_metrics": "Métricas", - "section_system": "Sistema", - "section_cpu": "Processador", - "section_memory": "Memória", - "section_displays": "Ecrãs", - "section_encoding": "Capacidade de codificação", - "section_live_metrics": "Métricas em tempo real", - "section_current_usage": "Utilização atual", - "section_usage_history": "Histórico de utilização", - "os": "Sistema operativo", - "version": "Versão do cliente", - "cpu_model": "Modelo do CPU", - "cpu_cores": "Núcleos do CPU", - "cpu_freq": "Frequência do CPU", - "total_memory": "Memória total", - "metric_memory": "Memória", - "metric_disk": "Disco", - "metrics_updated": "Atualizado", - "device_groups": "Grupos", - "no_sysinfo": "Nenhuma informação de hardware disponível", - "no_sysinfo_hint": "As informações do sistema aparecerão após o dispositivo enviar um relatório sysinfo", - "no_metrics": "Nenhum dado de métricas disponível", - "no_metrics_hint": "As métricas aparecerão após o dispositivo enviar relatórios heartbeat", - "chart_oldest": "← Mais antigo", - "chart_newest": "Mais recente →", - "tab_services": "Serviços", - "tab_processes": "Processos", - "tab_events": "Eventos", - "tab_activity": "Atividade", - "tab_files": "Arquivos", - "agent_lazy_hint": "Clique nesta aba para carregar dados ao vivo do agente", - "agent_offline": "O agente está offline", - "agent_timeout": "O agente não respondeu a tempo", - "agent_error": "Não foi possível carregar dados do agente", - "service_name": "Nome", - "service_display": "Nome exibido", - "service_status": "Estado", - "service_start": "Modo de início", - "process_name": "Nome", - "process_user": "Utilizador", - "process_memory": "Memória" + "stats": { + "active_sessions": "Sessões faturáveis ativas" }, - "inventory": { - "title": "Inventário", - "subtitle": "Inventário de hardware e software dos dispositivos geridos", - "device_id": "ID do dispositivo", - "hostname": "Nome do host", - "os": "Sistema operativo", - "cpu": "CPU", - "cpu_cores": "Núcleos do CPU", - "cpu_usage": "Utilização do CPU", - "memory": "Memória", - "memory_total": "Memória total", - "memory_used": "Memória usada", - "memory_available": "Memória disponível", - "memory_usage": "Utilização de memória", - "swap": "Swap", - "disks": "Discos", - "disk_count": "Número de discos", - "network": "Rede", - "network_interfaces": "Interfaces de rede", - "software": "Software", - "software_count": "Software instalado", - "system": "Sistema", - "kernel": "Kernel", - "architecture": "Arquitetura", - "uptime": "Tempo de atividade", - "frequency": "Frequência", - "physical_cores": "Núcleos físicos", - "logical_cores": "Núcleos lógicos", - "model": "Modelo", - "usage": "Utilização", - "total": "Total", - "used": "Usado", - "available": "Disponível", - "mount_point": "Ponto de montagem", - "removable": "Removível", - "mac_address": "Endereço MAC", - "ip_addresses": "Endereços IP", - "traffic": "Tráfego", - "collect_now": "Recolher agora", - "collector_running": "Recolha em curso", - "collector_stopped": "Recolha parada", - "last_upload": "Último envio", - "total_uploads": "Total", - "last_seen": "Última vez visto", - "collected_at": "Recolhido em", - "no_data": "Nenhum dado de inventário disponível. Clique em \"Recolher agora\" para obter informações do sistema.", - "no_devices": "Nenhum dispositivo com dados de inventário encontrado", - "detail_title": "Detalhe do inventário do dispositivo", - "telemetry": "Telemetria", - "view_detail": "Ver detalhe", - "export": "Exportar", - "refresh": "Atualizar" + "packages": { + "new": "Novo pacote", + "name": "Nome", + "included_minutes": "Minutos incluídos", + "overage_rate": "Taxa de excedente / h", + "currency": "Moeda", + "heading": "Pacotes de suporte", + "prompt_name": "Nome do pacote", + "create_title": "Novo pacote para organização", + "create_submit": "Criar pacote", + "select_org": "Organização", + "select_org_placeholder": "Selecionar organização…" }, - "tickets": { - "title": "Helpdesk", - "subtitle": "Tickets de suporte e rastreamento de problemas", - "create": "Novo ticket", - "edit": "Editar ticket", - "delete": "Excluir ticket", - "detail": "Detalhe do ticket", - "ticket_id": "ID do ticket", - "ticket_title": "Título", - "description": "Descrição", - "status": "Estado", - "priority": "Prioridade", - "category": "Categoria", - "assigned_to": "Atribuído a", - "created_by": "Criado por", - "device": "Dispositivo", - "sla_due": "Prazo SLA", - "created_at": "Criado", - "updated_at": "Atualizado", - "resolved_at": "Resolvido", - "closed_at": "Fechado", - "status_open": "Aberto", - "status_in_progress": "Em curso", - "status_resolved": "Resolvido", - "status_closed": "Fechado", - "priority_low": "Baixa", - "priority_medium": "Média", - "priority_high": "Alta", - "priority_critical": "Crítica", - "category_general": "Geral", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Rede", - "category_access": "Acesso", - "category_other": "Outro", - "comments": "Comentários", - "add_comment": "Adicionar comentário", - "comment_placeholder": "Escreva um comentário...", - "internal_note": "Nota interna (não visível para utilizadores finais)", - "attachments": "Anexos", - "upload_attachment": "Carregar anexo", - "download": "Transferir", - "connect_device": "Conectar ao dispositivo", - "no_tickets": "Nenhum ticket encontrado", - "no_comments": "Sem comentários", - "no_attachments": "Sem anexos", - "title_required": "O título é obrigatório", - "delete_confirm": "Tem a certeza que deseja excluir o ticket #{id}?", - "delete_success": "Ticket excluído com sucesso", - "created_success": "Ticket criado com sucesso", - "updated_success": "Ticket atualizado com sucesso", - "sla_overdue": "SLA ultrapassado", - "filter_all": "Todos", - "search_placeholder": "Pesquisar tickets...", - "assign_to_me": "Atribuir a mim", - "unassign": "Remover atribuição", - "stats_total": "Total", - "stats_open": "Abertos", - "stats_in_progress": "Em curso", - "stats_resolved": "Resolvidos", - "stats_closed": "Fechados" - }, - "activity": { - "title": "Monitorização de atividade", - "subtitle": "Utilização de aplicações e rastreamento de inatividade", - "device": "Dispositivo", - "hostname": "Nome do host", - "sessions": "Sessões", - "idle_time": "Tempo de inatividade", - "active_time": "Tempo ativo", - "last_report": "Último relatório", - "top_apps": "Aplicações principais", - "app_name": "Aplicação", - "window_title": "Título da janela", - "category": "Categoria", - "duration": "Duração", - "started_at": "Iniciado", - "ended_at": "Terminado", - "session_count": "Número de sessões", - "total_active": "Total ativo", - "total_idle": "Total inativo", - "detail_count": "Registos detalhados", - "no_data": "Nenhum dado de atividade disponível", - "no_sessions": "Nenhuma sessão registada", - "filter_from": "De", - "filter_to": "Até", - "filter_apply": "Aplicar filtro", - "hours": "horas", - "minutes": "minutos", - "seconds": "segundos", - "category_browser": "Navegador", - "category_productivity": "Produtividade", - "category_communication": "Comunicação", - "category_development": "Desenvolvimento", - "category_media": "Multimédia", - "category_gaming": "Jogos", - "category_system": "Sistema", - "category_other": "Outro", - "summary": "Resumo", - "details": "Detalhes", - "refresh": "Atualizar", - "search": "Pesquisar dispositivos...", - "date_range": "Date Range", - "device_id": "ID do dispositivo", - "session_start": "Início da sessão", - "session_end": "Fim da sessão", - "user": "Utilizador", - "no_activity": "Nenhuma atividade registrada", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Nenhum aplicativo" - }, - "automation": { - "title": "Automação e alertas", - "subtitle": "Regras de alarme, comandos remotos e configuração SMTP", - "rules": "Regras de alarme", - "rules_subtitle": "Defina condições que acionam notificações", - "alerts": "Histórico de alertas", - "alerts_subtitle": "Visualize e confirme os alertas acionados", - "commands": "Comandos remotos", - "commands_subtitle": "Envie comandos para dispositivos remotos", - "smtp": "Configuração SMTP", - "smtp_subtitle": "Definições de notificação por e-mail", - "rule_name": "Nome da regra", - "description": "Descrição", - "condition_type": "Tipo de condição", - "condition_op": "Operador", - "condition_value": "Limiar", - "severity": "Gravidade", - "scope_device": "Dispositivo alvo", - "scope_all": "Todos os dispositivos", - "cooldown": "Tempo de recuperação (segundos)", - "notify_emails": "E-mails de notificação", - "enabled": "Ativo", - "disabled": "Inativo", - "create_rule": "Criar regra", - "edit_rule": "Editar regra", - "delete_rule": "Excluir regra", - "acknowledge": "Confirmar", - "acknowledged": "Confirmado", - "unacknowledged": "Não confirmado", - "triggered_at": "Acionado em", - "severity_info": "Informação", - "severity_warning": "Aviso", - "severity_critical": "Crítico", - "op_gt": "Maior que", - "op_gte": "Maior ou igual", - "op_lt": "Menor que", - "op_lte": "Menor ou igual", - "op_eq": "Igual a", - "op_neq": "Diferente de", - "type_cpu_usage": "Utilização do CPU (%)", - "type_memory_usage": "Utilização de memória (%)", - "type_disk_usage": "Utilização de disco (%)", - "type_offline_duration": "Duração offline (s)", - "type_idle_duration": "Duração de inatividade (s)", - "type_custom": "Personalizado", - "command_type": "Tipo de comando", - "command_payload": "Comando / Script", - "command_result": "Resultado", - "command_status": "Estado", - "send_command": "Enviar comando", - "status_pending": "Pendente", - "status_running": "Em execução", - "status_completed": "Concluído", - "status_failed": "Falhou", - "smtp_host": "Host SMTP", - "smtp_port": "Porta", - "smtp_secure": "Usar TLS", - "smtp_user": "Nome de utilizador", - "smtp_pass": "Palavra-passe", - "smtp_from": "Endereço do remetente", - "smtp_test": "Testar conexão", - "smtp_save": "Salvar configuração", - "smtp_test_success": "Conexão bem-sucedida", - "smtp_test_failed": "Falha na conexão", - "no_rules": "Nenhuma regra de alarme configurada", - "no_alerts": "Nenhum alerta acionado", - "no_commands": "Nenhum comando enviado", - "id_payload_required": "ID do dispositivo e payload são obrigatórios", - "no_commands_sent": "Ainda não foram enviados comandos" - }, - "file_transfer": { - "title": "Transferência de ficheiros", - "transfers": "Transferências", - "new_transfer": "Nova transferência", - "upload": "Carregar", - "download": "Transferir", - "direction": "Direção", - "filename": "Nome do ficheiro", - "file_size": "Tamanho do ficheiro", - "mime_type": "Tipo MIME", - "progress": "Progresso", - "status": "Estado", - "device": "Dispositivo", - "initiated_by": "Iniciado por", - "created_at": "Criado em", - "cancel": "Cancelar", - "cancel_confirm": "Tem a certeza que deseja cancelar esta transferência?", - "download_file": "Transferir ficheiro", - "browse_files": "Procurar ficheiros", - "select_file": "Selecionar ficheiro", - "select_device": "Selecionar dispositivo", - "no_transfers": "Nenhuma transferência de ficheiros", - "status_pending": "Pendente", - "status_active": "Ativo", - "status_completed": "Concluído", - "status_failed": "Falhou", - "status_cancelled": "Cancelado", - "bytes_transferred": "Bytes transferidos", - "chunks": "Blocos", - "transfer_started": "Transferência iniciada", - "transfer_completed": "Transferência concluída", - "transfer_failed": "Transferência falhou", - "transfer_cancelled": "Transferência cancelada", - "max_file_size": "Tamanho máximo do ficheiro: 4 GB", - "error_too_large": "O ficheiro é demasiado grande", - "error_no_device": "Nenhum dispositivo selecionado", - "error_no_file": "Nenhum ficheiro selecionado" - }, - "network": { - "title": "Monitorização de rede", - "targets": "Alvos de monitorização", - "add_target": "Adicionar alvo", - "edit_target": "Editar alvo", - "delete_target": "Excluir alvo", - "delete_confirm": "Tem a certeza que deseja excluir este alvo?", - "target_name": "Nome", - "host": "Host", - "port": "Porta", - "url": "URL", - "check_type": "Tipo de verificação", - "timeout": "Tempo limite", - "interval": "Intervalo (ms)", - "enabled": "Ativo", - "status": "Estado", - "last_check": "Última verificação", - "last_rtt": "Último RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Acessível", - "status_down": "Inacessível", - "status_unknown": "Desconhecido", - "check_now": "Verificar agora", - "history": "Histórico de verificações", - "stats": "Estatísticas", - "total_targets": "Total de alvos", - "targets_up": "Alvos acessíveis", - "targets_down": "Alvos inacessíveis", - "type_ping": "Ping (ICMP)", - "type_tcp": "Porta TCP", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Ferramentas de rede", - "ping_tool": "Teste de Ping", - "tcp_tool": "Verificação de porta TCP", - "http_tool": "Verificação HTTP", - "dns_tool": "Resolução DNS", - "monitor_start": "Iniciar monitorização", - "monitor_stop": "Parar monitorização", - "monitor_running": "Monitorização em curso", - "monitor_stopped": "Monitorização parada", - "no_targets": "Nenhum alvo de monitorização configurado", - "no_history": "Nenhum histórico de verificações disponível", - "error_code": "Erro", - "status_code": "Código de estado HTTP", - "search_targets": "Pesquisar alvos...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Histórico de verificações", - "name_host_required": "Nome e host são obrigatórios", - "uptime": "Tempo de atividade", - "response_time": "Tempo de resposta", - "avg_response": "Resposta média", - "charts": "Gráficos", - "realtime": "Tempo real", - "response_time_ms": "Tempo de resposta (ms)", - "uptime_percent": "% Tempo de atividade", - "last_24h": "Últimas 24 horas", - "last_7d": "Últimos 7 dias", - "last_30d": "Últimos 30 dias" - }, - "dataguard": { - "title": "DataGuard", - "policies": "Políticas DLP", - "add_policy": "Adicionar política", - "edit_policy": "Editar política", - "delete_policy": "Excluir política", - "delete_confirm": "Tem a certeza que deseja excluir esta política?", - "policy_name": "Nome", - "policy_description": "Descrição", - "status": "Status", - "enabled": "Ativo", - "disabled": "Inativo", - "rules": "Regras", - "add_rule": "Adicionar regra", - "rule_type": "Tipo de regra", - "rule_type_usb": "Dispositivo USB", - "rule_type_file": "Operação de ficheiro", - "action": "Ação", - "action_allow": "Permitir", - "action_block": "Bloquear", - "action_log": "Apenas registar", - "filter": "Filtro", - "vid": "ID do fabricante (VID)", - "pid": "ID do produto (PID)", - "serial": "Número de série", - "device_class": "Classe do dispositivo", - "drive_type": "Tipo de unidade", - "file_extensions": "Extensões de ficheiro", - "events": "Eventos DLP", - "event_source": "Origem", - "event_source_usb": "USB", - "event_source_file": "Ficheiro", - "event_type": "Tipo de evento", - "event_details": "Detalhes", - "no_policies": "Nenhuma política DLP configurada", - "no_events": "Nenhum evento DLP registado", - "stats": "Estatísticas", - "total_events": "Total de eventos", - "blocked_events": "Bloqueados", - "logged_events": "Registados", - "usb_events": "Eventos USB", - "file_events": "Eventos de ficheiro", - "device_id": "ID do dispositivo", - "policy_matched": "Política correspondente", - "timestamp": "Marca temporal", - "drive_removable": "Removível", - "drive_fixed": "Fixo", - "drive_network": "Rede", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Desconhecido", - "total_policies": "Total de políticas", - "active_policies": "Políticas ativas", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Políticas", - "tab_events": "Events", - "search_policies": "Pesquisar políticas...", - "create_policy": "Criar política", - "policy_type": "Tipo de política", - "scope": "Scope", - "events_count": "Events", - "search_events": "Pesquisar eventos...", - "event_time": "Event Time", - "device": "Dispositivo", - "policy": "Política", - "detail": "Detail", - "scope_help": "IDs de dispositivos separados por vírgula ou vazio para todos", - "scope_all": "Todos", - "active": "Active", - "type_file_type": "Tipo de arquivo", - "type_clipboard": "Área de transferência", - "type_screen_share": "Compartilhamento de tela", - "type_file_transfer": "Transferência de arquivos", - "policy_desc": "Descrição da política", - "type_usb": "USB" + "sessions": { + "device": "Dispositivo", + "operator": "Operador", + "duration": "Duração", + "phase": "Fase", + "amount": "Valor" }, "reports": { - "title": "Relatórios", - "generate": "Gerar relatório", - "generate_csv": "Exportar CSV", - "report_type": "Tipo de relatório", - "type_devices": "Resumo de dispositivos", - "type_activity": "Resumo de atividade", - "type_security": "Relatório de segurança", - "type_tickets": "Relatório de tickets", - "type_network": "Relatório de rede", - "type_inventory": "Relatório de inventário", - "type_alerts": "Relatório de alertas", - "saved": "Relatórios guardados", - "save_report": "Guardar relatório", - "delete_report": "Excluir relatório", - "delete_confirm": "Tem a certeza que deseja excluir este relatório guardado?", - "no_saved": "Sem relatórios guardados", - "report_title": "Título", - "created_by": "Criado por", - "created_at": "Criado em", - "filters": "Filtros", - "date_from": "De", - "date_to": "Até", - "device_filter": "ID do dispositivo", - "generated_at": "Gerado em", - "section": "Secção de dados", - "total_devices": "Total de dispositivos", - "online": "Online", - "offline": "Offline", - "banned": "Banidos", - "platform_distribution": "Distribuição de plataformas", - "top_applications": "Aplicações principais", - "total_active": "Tempo total ativo", - "total_idle": "Tempo total inativo", - "dlp_stats": "Estatísticas DLP", - "banned_devices": "Dispositivos banidos", - "audit_logs": "Registos de auditoria", - "ticket_stats": "Estatísticas de tickets", - "category_distribution": "Distribuição de categorias", - "priority_distribution": "Distribuição de prioridades", - "targets_status": "Estado dos alvos", - "os_distribution": "Distribuição de SO", - "avg_ram": "RAM média", - "alert_rules": "Regras de alarme", - "recent_alerts": "Alertas recentes", - "tab_generate": "Gerar", - "tab_saved": "Relatórios guardados", - "type_devices_desc": "Visão geral de todos os dispositivos registados", - "type_activity_desc": "Estatísticas de uso de aplicações e sessões", - "type_security_desc": "Eventos de segurança e dispositivos banidos", - "type_tickets_desc": "Estatísticas e resumo de tickets de suporte", - "type_network_desc": "Dados de monitorização de rede e uptime", - "type_inventory_desc": "Inventário de hardware e software", - "type_alerts_desc": "Histórico de alertas e regras", - "report_name": "Nome do relatório", - "format": "Formato", - "save": "Guardar", - "preview": "Pré-visualizar", - "download": "Transferir", - "delete_saved": "Excluir relatório guardado", - "raw_json": "Raw JSON" + "session": "Sessão", + "summary": "Resumo", + "date": "Data" }, - "tenants": { - "title": "Multi-tenancy", - "list": "Inquilinos", - "add_tenant": "Adicionar inquilino", - "edit_tenant": "Editar inquilino", - "delete_tenant": "Excluir inquilino", - "delete_confirm": "Tem a certeza que deseja excluir este inquilino? Todas as atribuições de dispositivos e utilizadores serão removidas.", - "name": "Nome", - "slug": "Slug", - "contact_name": "Nome do contacto", - "contact_email": "E-mail do contacto", - "max_devices": "Máx. dispositivos", - "max_devices_hint": "0 = ilimitado", - "notes": "Notas", - "active": "Ativo", - "inactive": "Inativo", - "devices": "Dispositivos", - "users": "Utilizadores", - "assign_device": "Atribuir dispositivo", - "assign_devices": "Atribuir dispositivos", - "remove_device": "Remover dispositivo", - "assign_user": "Atribuir utilizador", - "remove_user": "Remover utilizador", - "no_tenants": "Nenhum inquilino configurado", - "no_devices": "Nenhum dispositivo atribuído a este inquilino", - "no_users": "Nenhum utilizador atribuído a este inquilino", - "stats": "Estatísticas do inquilino", - "total_devices": "Total de dispositivos", - "online_devices": "Dispositivos online", - "total_users": "Total de utilizadores", - "created_at": "Criado em", - "updated_at": "Atualizado em", - "slug_exists": "O slug do inquilino já existe", - "total_tenants": "Total de inquilinos", - "active_tenants": "Inquilinos ativos", - "search": "Pesquisar inquilino...", - "create_tenant": "Criar inquilino", - "detail": "Detalhes do inquilino", - "contact": "Contacto", - "enabled": "Ativado", - "disabled": "Desativado", - "max": "Máx", - "info": "Informação do inquilino", - "status": "Estado" + "contracts": { + "title": "Contratos de organização", + "new": "Atribuir pacote", + "org": "Organização", + "package": "Pacote", + "remaining": "Minutos restantes", + "status": "Estado", + "actions": "Ações", + "suspend": "Suspender", + "activate": "Ativar", + "select_org": "Selecionar organização", + "select_package": "Selecionar pacote", + "no_orgs": "Nenhuma organização encontrada", + "no_packages": "Crie um pacote primeiro" }, - "registrations": { - "title": "Registos de dispositivos", - "subtitle": "Gerir pedidos de registo de dispositivos descobertos via LAN", - "search_placeholder": "Pesquisar por ID do dispositivo, nome do host ou IP...", - "no_registrations": "Nenhum pedido de registo", - "col_device_id": "ID do dispositivo", - "col_hostname": "Nome do host", - "col_platform": "Plataforma", - "col_ip": "Endereço IP", - "col_version": "Versão", - "col_status": "Estado", - "col_requested": "Solicitado", - "col_actions": "Ações", - "status_pending": "Pendente", - "status_approved": "Aprovado", - "status_rejected": "Rejeitado", - "approve_btn": "Aprovar", - "approve_confirm": "Tem a certeza que deseja aprovar este dispositivo? Receberá as credenciais do servidor e poderá conectar-se automaticamente.", - "approved_success": "Registo de dispositivo aprovado com sucesso", - "reject_btn": "Rejeitar", - "reject_title": "Rejeitar registo", - "reject_confirm": "Tem a certeza que deseja rejeitar este pedido de registo?", - "reject_reason": "Motivo (opcional)", - "reject_reason_placeholder": "Insira o motivo da rejeição...", - "rejected_success": "Registo de dispositivo rejeitado", - "delete_confirm": "Tem a certeza que deseja excluir este registo?", - "deleted_success": "Registo excluído", - "enrollment_title": "Registro de dispositivos", - "enrollment_subtitle": "Solicitações pendentes de registro de clientes desktop BetterDesk", - "enrollment_empty": "Nenhuma solicitação de registro pendente", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Nome exibido", - "enrollment_display_name_placeholder": "Digite um nome para este dispositivo...", - "enrollment_sync_mode": "Modo de sincronização", - "enrollment_sync_silent": "Silencioso — telemetria mínima", - "enrollment_sync_standard": "Padrão — sincronização equilibrada", - "enrollment_sync_turbo": "Turbo — sincronização agressiva", - "enrollment_approved_success": "Registro de dispositivo aprovado", - "enrollment_rejected_success": "Registro de dispositivo rejeitado", - "approve_title": "Aprovar dispositivo", - "field_name": "Nome do dispositivo", - "field_name_placeholder": "Ingresa un nome para este dispositivo...", - "field_sync_mode": "Modo de sincronização", - "sync_standard": "Padrão — sincronización equilibrada", - "sync_silent": "Silencioso — telemetria mínima", - "sync_turbo": "Turbo — sincronização agressiva", - "field_tags": "Etiquetas", - "field_tags_placeholder": "Etiquetas separadas por vírgulas (p. ej. oficina, portátil)...", - "field_tags_existing": "Etiquetas existentes", - "field_tag_add_placeholder": "Adicionar nueva etiqueta...", - "field_tag_add_btn": "Adicionar", - "field_groups": "Grupos de dispositivos", - "field_folder": "Pasta", - "field_folder_none": "Sin pasta", - "reject_ban_option": "Banir este dispositivo", - "reject_ban_hint": "El dispositivo será bloqueado y não poderá enviar nuevas pedidos de registro.", - "banner_open_mode": "La registo está abierta — los novos clientes RustDesk se registam sin aprovação del operador. Establece el modo gerido en Configuração para usar esta fila.", - "banner_locked_mode": "La registo está bloqueada — solo los dispositivos vinculados a un por token podem registar-se. El modo gerido es necesario para que el operador apruebe clientes desconhecidos.", - "enrollment_settings_link": "Configuração de registo" + "export": { + "csv": "Exportar CSV", + "pdf": "Exportar PDF", + "sessions_csv": "Exportar sessões CSV" }, - "backup": { - "title": "Backup", - "desc": "Transferira um backup completo da configuração da consola, utilizadores, grupos e definições. Os dados peer do servidor Go são incluídos quando o backend BetterDesk está ativo.", - "restore_title": "Restaurar", - "restore_desc": "Carregue um ficheiro de backup transferido anteriormente para restaurar a configuração da consola. Selecione que secções restaurar abaixo.", - "stat_users": "Utilizadores", - "stat_settings": "Definições", - "stat_folders": "Pastas", - "stat_groups": "Grupos", - "stat_strategies": "Estratégias", - "stat_backend": "Backend", - "download": "Transferir backup", - "creating": "A criar backup...", - "download_success": "Backup transferido com sucesso", - "upload": "Carregar backup", - "restore_confirm": "Tem a certeza que deseja restaurar a partir deste backup? As secções selecionadas serão substituídas.", - "restore_success": "Backup restaurado com sucesso. Algumas alterações podem requerer um recarregamento da página.", - "restored": "Restaurado", - "skipped": "Ignorado", - "backup_date": "Data do backup", - "opt_settings": "Definições da consola", - "opt_branding": "Marca / Tema", - "opt_folders": "Pastas de dispositivos", - "opt_groups": "Grupos de utilizadores e dispositivos", - "opt_addressbooks": "Livros de endereços", - "opt_users": "Contas de utilizadores", - "opt_users_warning": "Destrutivo: substitui TODAS as contas de utilizadores com os dados do backup. Pode ser desconectado.", - "no_file": "Nenhum ficheiro de backup selecionado", - "invalid_json": "Ficheiro de backup inválido: JSON inválido", - "invalid_format": "Ficheiro de backup inválido: não é um backup BetterDesk", - "stat_database": "Motor de base de dados", - "stat_keys": "Chaves do servidor incluidas", - "stat_env": "Ficheiro de ambiente", - "stat_uploads": "Ficheiros de marca", - "restart_required": "Alguns componentes restaurados (chaves / .env / base de dados Go) requern un reinicio del serviço para tomar efecto.", - "security_warning": "Esta cópia de segurança contiene segredos (chaves do servidor, ficheiro de ambiente, hashes de palavra-passes y segredos 2FA). Guárdela de forma segura y nunca la comparta.", - "restore_warning": "Restaurar los segredos, el ficheiro de ambiente o la base de dados do servidor Go sobrescribe la identidade do servidor y requer un reinicio del serviço después.", - "opt_database": "Base de dados (todas las tabelas)", - "opt_database_hint": "Reimporta todos os dados de la consola. Se aplica en vivo, no se requer reinicio.", - "opt_uploads": "Ficheiros de marca", - "opt_uploads_hint": "Logótipos e imagens carregadas.", - "opt_secrets": "Chaves y segredos do servidor", - "opt_secrets_warning": "Sobreescribe la identidade do servidor Ed25519, la chave API y el segredo de sesión. Requer reinicio del serviço.", - "opt_env": "Ficheiro de ambiente (.env)", - "opt_env_warning": "Sobreescribe SESSION_SECRET, chave API, DSN de la base de dados, portas y configuração TLS. Requer reinicio del serviço.", - "opt_godb": "Base de dados do servidor Go", - "opt_godb_warning": "Sobreescribe la base de dados SQLite do servidor Go (solo backend SQLite). Requer reinicio del serviço." + "report": { + "title": "Relatório de trabalho", + "subtitle": "Descreva o trabalho realizado durante esta sessão remota.", + "category": "Categoria", + "ticket_ref": "Referência do ticket", + "summary": "Trabalho realizado", + "skip": "Ignorar por agora", + "submit": "Enviar relatório", + "summary_required": "O resumo é obrigatório", + "saved": "Relatório de trabalho guardado" }, - "cdap": { - "device_detail": "Detalhes do dispositivo", - "loading": "A carregar...", - "loading_widgets": "Carregando widgets do dispositivo...", - "load_error": "Não foi possível carregar dados do dispositivo", - "connected": "Conectado", - "disconnected": "Desconectado", - "device_offline_msg": "O dispositivo está offline no momento. Os valores dos widgets podem estar desatualizados.", - "no_widgets": "Sem widgets disponíveis", - "no_widgets_desc": "Este dispositivo não registrou um manifesto CDAP com definições de widgets.", - "command_log": "Registo de comandos", - "clear_log": "Limpar registo", - "confirm_command": "Confirmar comando", - "select_option": "Selecionar", - "cdap_status": "Estado CDAP", - "cdap_enabled": "CDAP ativado", - "cdap_disabled": "CDAP desativado", - "cdap_devices": "Dispositivos CDAP", - "cdap_connections": "Conexões ativas", - "send_command": "Enviar comando", - "command_sent": "Comando enviado com sucesso", - "command_failed": "Falha ao enviar comando", - "devices_title": "Dispositivos CDAP", - "devices_subtitle": "Dispositivos conectados via Custom Device Application Protocol", - "stat_connected": "Ligado", - "stat_port": "Porta", - "search_devices": "Pesquisar dispositivos...", - "no_devices": "Sem dispositivos", - "no_devices_desc": "Nenhum dispositivo CDAP conectado no momento. Dispositivos aparecerão aqui quando se conectarem ao gateway.", - "gateway_disabled": "Gateway desativado", - "gateway_disabled_desc": "Ative o gateway CDAP definindo CDAP_ENABLED=true na configuração do servidor.", - "gateway_active": "Ativo", - "toggle_enable": "Ativar CDAP", - "toggle_disable": "Desativar CDAP", - "enabled_restart": "CDAP ativado. É necessário reiniciar o servidor para aplicar as alterações.", - "disabled_restart": "CDAP desativado. É necessário reiniciar o servidor para aplicar as alterações.", - "widgets": "Widgets", - "type_all": "Todos", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agente OS", - "type_network": "Rede", - "type_camera": "Câmara", - "type_custom": "Personalizado", - "active_alerts": "Alertas ativos", - "alert_fired": "Alerta acionado", - "alert_cleared": "Alerta limpo", - "no_alerts": "Sem alertas", - "connect_terminal": "Conectar terminal", - "table_search": "Pesquisar...", - "just_now": "Agora mesmo", - "terminal_connecting": "Conectando ao dispositivo...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Falha na conexão do terminal", - "linked_devices": "Dispositivos vinculados", - "link_device": "Vincular dispositivo", - "unlink_device": "Desligar", - "no_linked_devices": "Nenhum dispositivo vinculado", - "unlink_confirm": "Tem certeza de que deseja desvincular este dispositivo?", - "link_prompt": "Digite o ID do peer para vincular a este dispositivo:", - "connect_desktop": "Conectar área de trabalho", - "connect_video": "Conectar transmissão", - "connect_files": "Navegar por arquivos", - "connect_audio": "Conectar áudio", - "upload_file": "Upload", - "desktop_connecting": "A conectar ao ambiente de trabalho...", - "video_connecting": "Conectando...", - "files_connecting": "Conectando...", - "audio_connecting": "A conectar áudio...", - "audio_streaming": "Streaming de áudio", - "clipboard_in": "Área de transferência de entrada", - "clipboard_out": "Área de transferência de saída", - "monitor_select": "Selecionar monitor", - "keyframe_request": "Solicitar keyframe", - "quality_auto": "Qualidade automática" + "empty": { + "packages": "Ainda não há pacotes. Crie um com o botão acima.", + "contracts": "Ainda não há contratos de organização. Atribua um pacote a uma organização.", + "sessions": "Ainda não há sessões faturáveis registadas.", + "reports": "Ainda não há relatórios de trabalho." }, - "desktop": { - "switch_mode": "Alternar modo", - "console_mode": "Modo console", - "loading": "Carregando", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Fechar", - "widgets_mode": "Modo widgets", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Adicionar widget", - "remove_widget": "Remover widget", - "configure": "Configurar", - "search_widgets": "Pesquisar widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Dispositivos", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Notas...", - "search_placeholder": "Pesquisar...", - "search_pages": "Pages", - "search_devices": "Pesquisar dispositivos", - "search_no_results": "No results", - "exit_desktop": "Exit Desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Status dos dispositivos", - "widget_server_health": "Saúde do servidor", - "widget_system_stats": "Estatísticas do sistema", - "widget_device_list": "Lista de dispositivos", - "widget_quick_actions": "Ações rápidas", - "widget_recent_activity": "Atividade recente", - "widget_notes": "Notes", - "widget_network_monitor": "Monitor de rede", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Dispositivos CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Grade de dispositivos", - "widget_multi_gauge": "Indicador múltiplo", - "widget_weekly_chart": "Gráfico semanal", - "widget_quick_controls": "Controles rápidos", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Estatísticas de conexão", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sessões de usuário", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Sem dispositivos", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Abrir", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Definir URL", - "label_server_uptime": "Tempo ativo do servidor", - "label_merged_info": "Informações combinadas", - "label_with_notes": "Com notas", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Total de dispositivos", - "label_throughput": "Throughput", - "label_active_relays": "Relays ativos", - "label_total_relayed": "Total retransmitido", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrar dispositivos", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Sem dispositivos CDAP", - "action_add_widget": "Adicionar widget", - "label_merged_server_info": "Informações combinadas do servidor", - "wp_images": "Imagens", - "wp_colors": "Cores sólidas", - "wp_custom_color": "Cor personalizada", - "wp_fit_style": "Estilo", - "wp_fill": "Preencher", - "wp_fit": "Ajustar", - "wp_stretch": "Esticar", - "wp_center": "Centralizar", - "widget_calendar": "Calendar", - "widget_process_monitor": "Monitor de processos", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Estatísticas do banco de dados", - "widget_docker_containers": "Contêineres Docker", - "widget_shell_command": "Comando shell", - "widget_device_map": "Mapa de dispositivos", - "widget_remote_connect": "Conexão remota", - "label_no_online": "Nenhum dispositivo online", - "label_no_events": "Sem eventos", - "label_event_title": "Título do evento", - "label_no_data": "Sem dados", - "label_download_speed": "Velocidade de download", - "label_latency": "Latency", - "label_server": "Instância do servidor", - "label_run_test": "Run Test", - "label_testing": "Testando", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Sem contêineres", - "label_docker_unavailable": "Docker indisponível", - "label_no_command": "Sem comando", - "label_no_output": "Sem saída", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Salvar predefinição", - "label_load_preset": "Load Preset", - "label_preset_name": "Nome da predefinição", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Organizar automaticamente", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 colunas iguais", - "label_2col_wide": "2 colunas largas", - "label_3col": "3 Columns", - "label_2x2_grid": "2×2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Grupo de widgets", - "ungroup_widgets": "Desagrupar widgets", - "group_widgets": "Agrupar widgets", - "snap_layouts": "Layouts de encaixe", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Encaixar no canto superior esquerdo", - "snap_top_right": "Encaixar no canto superior direito", - "snap_bottom_left": "Encaixar no canto inferior esquerdo", - "snap_bottom_right": "Encaixar no canto inferior direito", - "aero_shake": "Sacudir janela", - "zone_resize": "Redimensionar zona", - "zone_borders": "Bordas da zona", - "app_drawer": "Applications", - "search_apps": "Pesquisar apps", - "edit_shortcuts": "Editar atalhos", - "widgets": "Lista de widgets", - "theme": "Theme", - "fullscreen": "Ecrã inteiro", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "wp_unavailable": "Papéis de parede indisponíveis", - "wp_download_hint": "Baixe papéis de parede para usá-los aqui.", - "help": "Help" + "assign": { + "title": "Atribuir pacote existente", + "submit": "Atribuir" }, - "desktop_login": { - "click_to_sign_in": "Clique para entrar", - "username_placeholder": "Nome de usuário", - "password_placeholder": "Senha", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Verificação em duas etapas", - "totp_subtitle": "Digite o código de 6 dígitos do seu aplicativo autenticador.", - "back_to_login": "Voltar ao login", - "fill_all_fields": "Preencha todos os campos", - "invalid_credentials": "Credenciais inválidas", - "invalid_code": "Código inválido", - "enter_6_digits": "Digite 6 dígitos", - "network_error": "Erro de rede", - "session_expired": "Sessão expirada" - }, - "tokens": { - "title": "Tokens de acesso", - "subtitle": "Gerir tokens de acesso API para integrações e automação", - "enrollment_mode": "Modo de registro", - "mode_open": "Aberto", - "mode_open_desc": "Qualquer cliente válido pode solicitar registro.", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Total", - "active": "Active", - "used": "Used", - "revoked": "Token revogado com sucesso", - "search_placeholder": "Pesquisar tokens...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Gerar em lote", - "create": "Criar token", - "edit": "Editar", - "token": "Token", - "name": "Nome do token", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Token criado com sucesso", - "actions": "Actions", - "name_placeholder": "Insira o nome do token", - "max_uses": "Max Uses", - "max_uses_hint": "Número máximo de usos permitidos para este token.", - "expires_in": "Expires In", - "no_expiration": "Sem expiração", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Nota opcional", - "count": "Count", - "count_range": "A quantidade deve estar entre 1 e 100", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token criado", - "tokens_generated": "Tokens gerados", - "copy_warning": "Copie este token agora. Não o verá novamente!", - "copy_token": "Copiar token", - "copied": "Token copiado para a área de transferência", - "revoke": "Revogar", - "revoke_confirm": "Tem a certeza que deseja revogar este token? Esta ação não pode ser desfeita.", - "revoked_success": "Token revogado com sucesso", - "no_tokens": "Sem tokens criados", - "expired": "Expirado", - "never": "Never", - "save": "Salvar", - "cancel": "Cancelar", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Seguinte", - "prev": "Anterior", - "skip": "Saltar visita", - "finish": "Concluir", - "close": "Fechar", - "step_of": "Etapa {current} de {total}", - "console_sidebar_title": "Navegação da console", - "console_sidebar_text": "Use a barra lateral para alternar entre dispositivos, usuários, configurações e ferramentas.", - "console_expand_title": "Expandir barra lateral", - "console_expand_text": "Abra a barra lateral para ver todas as seções e ferramentas da console.", - "console_search_title": "Pesquisa rápida", - "console_search_text": "Use a pesquisa para encontrar dispositivos, configurações e ações mais rapidamente.", - "console_dashboard_title": "Verificar painel", - "console_dashboard_text": "O painel resume status do servidor, dispositivos e atividade recente.", - "console_devices_title": "Lista de dispositivos", - "console_devices_text": "Aqui você pode pesquisar, filtrar e gerenciar todos os dispositivos registrados.", - "console_settings_title": "Configurações", - "console_settings_text": "Gerencie segurança, autenticação, atualizações e integrações.", - "console_desktop_title": "Modo desktop", - "console_desktop_text": "Mude para o desktop de widgets para criar uma visão operacional personalizada.", - "console_complete_title": "Console pronta", - "console_complete_text": "Você já conhece as principais áreas da console BetterDesk.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "A barra superior contém controles de janela, pesquisa e atalhos.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Abra o seletor de widgets para colocar novos cartões no desktop.", - "desktop_widgets_title": "Widgets", - "desktop_widgets_text": "Widgets mostram dados operacionais ao vivo e atalhos rápidos.", - "desktop_add_widget_title": "Adicionar widgets", - "desktop_add_widget_text": "Escolha um widget e coloque-o onde precisar.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Open apps appear here. Click to focus or minimize windows. The clock shows current time and wallpaper button changes the background.", - "desktop_snap_title": "Layouts de encaixe", - "desktop_snap_text": "Use layouts de encaixe para organizar widgets rapidamente em zonas.", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Mova, agrupe e redimensione janelas como em um desktop moderno.", - "desktop_search_title": "Pesquisar apps", - "desktop_search_text": "Pesquise widgets e ferramentas disponíveis pelo lançador.", - "desktop_complete_title": "Desktop pronto", - "desktop_complete_text": "O modo desktop está configurado e pronto para personalização.", - "devices_folders_title": "Pastas e grupos", - "devices_folders_text": "Organize dispositivos em pastas ou grupos dinâmicos.", - "devices_search_title": "Pesquisar dispositivos", - "devices_search_text": "Filtre por ID, hostname, plataforma, usuário ou tags.", - "devices_table_title": "Tabela de dispositivos", - "devices_table_text": "Abra ações no menu de cada linha ou dê dois cliques para ver detalhes.", - "devices_complete_title": "Gerenciamento de dispositivos pronto", - "devices_complete_text": "Agora você pode pesquisar, agrupar e gerenciar dispositivos.", - "settings_tabs_title": "Seções de configuração", - "settings_tabs_text": "Alterne entre configurações de servidor, segurança, autenticação e interface.", - "settings_content_title": "Editar configuração", - "settings_content_text": "Salve alterações por seção para manter a configuração clara.", - "settings_complete_title": "Configurações prontas", - "settings_complete_text": "Você já conhece as principais áreas de configuração.", - "help": "Ajuda", - "tour_console": "Tour da console", - "tour_desktop": "Tour do desktop", - "tour_devices": "Tour de dispositivos", - "tour_settings": "Tour de configurações", - "reset_all": "Redefinir todos os tours", - "tour_remote": "Tour remoto", - "tour_organization": "Tour de organização", - "tour_cdap": "Tour CDAP", - "tour_chat": "Tour do chat", - "remote_toolbar_title": "Barra remota", - "remote_toolbar_text": "Controle qualidade, monitores, área de transferência, gravação e ações da sessão.", - "remote_canvas_title": "Tela remota", - "remote_canvas_text": "Clique na área da tela para enviar teclado e mouse ao dispositivo.", - "remote_clipboard_title": "Área de transferência", - "remote_clipboard_text": "Sincronize texto com segurança entre o navegador e o dispositivo remoto.", - "remote_complete_title": "Sessão remota pronta", - "remote_complete_text": "Agora você pode controlar e monitorar uma sessão.", - "org_overview_title": "Visão geral da organização", - "org_overview_text": "Veja membros, dispositivos e políticas da organização de relance.", - "org_create_title": "Criar organização", - "org_create_text": "Crie uma nova organização para separar dispositivos e usuários.", - "org_members_title": "Gerenciar membros", - "org_members_text": "Atribua usuários e defina funções específicas da organização.", - "org_devices_title": "Atribuir dispositivos", - "org_devices_text": "Atribua dispositivos a uma organização para manter os dados dentro do escopo correto.", - "org_policies_title": "Configurar políticas", - "org_policies_text": "Controle regras de acesso, transferência de arquivos e limites de sessão.", - "org_complete_title": "Organização pronta", - "org_complete_text": "A organização está preparada para usuários, dispositivos e políticas.", - "cdap_devices_title": "Dispositivos CDAP", - "cdap_devices_text": "Veja todos os dispositivos CDAP ligados — sensores IoT, PLCs, bridges e agentes personalizados. Indicadores verdes mostram ligações ao vivo.", - "cdap_widgets_title": "Dashboard de widgets", - "cdap_widgets_text": "Os widgets exibem dados em tempo real dos dispositivos. Medidores, interruptores, LEDs, gráficos — cada tipo de widget visualiza um tipo diferente de dados.", - "cdap_commands_title": "Enviar comandos", - "cdap_commands_text": "Interaja com dispositivos enviando comandos. Alguns comandos precisam de confirmação. O registo de comandos mantém o histórico de todos os comandos enviados.", - "cdap_terminal_title": "Terminal do dispositivo", - "cdap_terminal_text": "Abra uma sessão de terminal nos agentes CDAP para diagnóstico avançado ou configuração manual. Digite comandos diretamente.", - "cdap_complete_title": "Visão geral CDAP completa!", - "cdap_complete_text": "Explore os widgets dos dispositivos, envie comandos e use o terminal ou o navegador de ficheiros para gestão mais aprofundada. Os agentes CDAP reportam métricas automaticamente.", - "chat_contacts_title": "Contatos", - "chat_contacts_text": "Selecione operadores, agentes ou grupos para uma conversa.", - "chat_send_title": "Enviar mensagens", - "chat_send_text": "Escreva mensagens, envie arquivos e use confirmações de leitura.", - "chat_file_title": "Compartilhar arquivos", - "chat_file_text": "Arquivos são transferidos criptografados quando a criptografia ponta a ponta está ativa.", - "chat_complete_title": "Chat pronto", - "chat_complete_text": "Agora você pode se comunicar com segurança com usuários e operadores.", - "disable_tutorials": "Desativar tutoriais", - "enable_tutorials": "Ativar tutoriais" - }, - "help_request": { - "title": "Solicitações de ajuda", - "subtitle": "Pedidos de suporte enviados por usuários finais", - "new_request": "Nova solicitação de ajuda", - "device": "Dispositivo", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Sem solicitações de ajuda", - "notification": "Notificação de solicitação de ajuda", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organizações", - "create": "Criar", - "edit": "Editar", - "detail": "Detalhes", - "name": "Name", - "slug": "Slug", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Dispositivos", - "invitations": "Invitations", - "settings": "Configurações", - "add_user": "Add User", - "assign_device": "Atribuir dispositivo", - "create_invitation": "Criar convite", - "delete_confirm": "Excluir esta organização?", - "no_orgs": "Sem organizações", - "no_orgs_hint": "Crie uma organização para gerenciar usuários e dispositivos separadamente.", - "connection_policy": "Política de conexão", - "allow_file_transfer": "Permitir transferência de arquivos", - "allow_clipboard": "Permitir área de transferência", - "max_session_duration": "Duração máxima da sessão", - "role_owner": "Owner", - "role_admin": "Administrador", - "role_operator": "Operator", - "role_user": "Membro", - "username": "Nome de usuário", - "password": "Senha", - "display_name": "Nome exibido", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID do dispositivo", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Usuário atribuído", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Sem usuários", - "no_devices": "Sem dispositivos", - "no_invitations": "Sem convites", - "user_added": "User added", - "user_removed": "Usuário removido", - "user_updated": "Usuário atualizado", - "device_assigned": "Dispositivo atribuído", - "device_unassigned": "Atribuição do dispositivo removida", - "invitation_created": "Convite criado", - "settings_saved": "Configurações da organização salvas", - "org_deleted": "Organização excluída", - "confirm_remove_user": "Remover este usuário da organização?", - "confirm_unassign_device": "Remover este dispositivo da organização?", - "confirm_delete_org": "Excluir esta organização permanentemente?", - "edit_role": "Editar função", - "raw_settings": "Configurações brutas", - "key": "Key", - "value": "Value", - "save": "Salvar", - "policy_unattended": "Acesso não supervisionado", - "policy_attended": "Acesso supervisionado", - "policy_ask": "Always ask", - "expires_hours": "Expira em horas", - "loading_failed": "Não foi possível carregar organizações", - "name_slug_required": "Nome e slug são obrigatórios", - "org_created": "Organização criada", - "org_updated": "Organização atualizada", - "create_new_user": "Criar novo usuário", - "add_existing_user": "Adicionar usuário existente", - "none_available": "none", - "select_user": "Selecionar usuário", - "org_role": "Função na organização", - "link_user_hint": "Vincule um usuário existente a esta organização.", - "no_available_users": "Nenhum usuário disponível", - "user_linked": "Usuário vinculado" - }, - "chat": { - "e2e_enabled": "Criptografia ponta a ponta", - "e2e_establishing": "Estabelecendo canal seguro...", - "e2e_established": "Canal seguro estabelecido", - "e2e_unsupported": "Criptografia E2E não suportada neste navegador", - "typing_indicator": "digitando...", - "read_receipt": "Lido", - "delivered": "Entregue", - "file_share": "Arquivo", - "file_too_large": "Arquivo muito grande (máx. 50MB)", - "file_encrypted": "Transferência de arquivo criptografada", - "presence_online": "Online", - "presence_away": "Ausente", - "presence_busy": "Ocupado", - "presence_offline": "Offline", - "key_rotation": "Chaves de segurança renovadas", - "new_message": "Nova mensagem", - "title": "Chat", - "contacts": "Contatos", - "groups": "Grupos", - "no_contacts": "Nenhum contato ainda", - "no_groups": "Nenhum grupo ainda", - "no_messages": "Nenhuma mensagem ainda", - "no_results": "Nenhum resultado encontrado", - "select_conversation": "Selecione uma conversa para começar a conversar", - "type_message": "Digite uma mensagem...", - "send": "Enviar", - "attach_file": "Anexar arquivo", - "emoji": "Emoji", - "search_messages": "Pesquisar mensagens", - "create_group": "Criar grupo", - "group_name": "Nome do grupo", - "group_members": "Membros", - "cancel": "Cancelar", - "create": "Criar", - "members": "membros", - "today": "Hoje", - "yesterday": "Ontem", - "react": "Reagir", - "my_presence": "Meu status", - "search_placeholder": "Pesquisar contatos e mensagens", - "select_conversation_hint": "Selecione uma conversa para ver as mensagens", - "info": "Informacoes", - "group_name_placeholder": "Introduza o nome do grupo" - }, - "toast": { - "device_connected": "Dispositivo conectado", - "device_disconnected": "Dispositivo desconectado", - "session_started": "Sessão iniciada", - "session_ended": "Sessão encerrada", - "file_upload_complete": "Upload de arquivo concluído", - "settings_saved": "Configurações salvas", - "error_generic": "Ocorreu um erro", - "connection_lost": "Conexão perdida", - "reconnecting": "Reconectando" - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Ferramentas rápidas para diagnóstico, rede, segurança e manutenção.", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Enviar", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Digite o texto...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Servidor Go", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Verificar disponibilidade e latência de um host", - "tcp_title": "Verificação de porta TCP", - "tcp_desc": "Testar conectividade de uma porta TCP", - "ssl_title": "Inspetor SSL", - "ssl_desc": "Inspecionar detalhes do certificado SSL/TLS", - "http_title": "Verificação de saúde HTTP", - "http_desc": "Verificar o status de um endpoint HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Resolver hostname para endereço IP", - "whois_title": "DNS Records", - "whois_desc": "Consultar registros A, AAAA, MX, TXT e NS", - "speed_title": "Speed Test", - "speed_desc": "Medir largura de banda de download", - "run_speed_test": "Executar teste de velocidade", - "wol_title": "Wake-on-LAN", - "wol_desc": "Enviar um pacote mágico para acordar um dispositivo", - "wol_sent": "Pacote mágico enviado", - "hash_title": "Gerador de hash", - "hash_desc": "Gerar hashes criptográficos", - "password_title": "Gerador de senhas", - "password_desc": "Gerar senhas fortes e aleatórias", - "jwt_title": "JWT Decoder", - "jwt_desc": "Decodificar e inspecionar JSON Web Tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Codificar ou decodificar dados Base64", - "url_title": "URL Encoder", - "url_desc": "Codificar ou decodificar componentes de URL", - "processes_title": "Lista de processos", - "processes_desc": "Mostrar processos do sistema em execução", - "disk_title": "Disk Usage", - "disk_desc": "Mostrar uso das partições de disco", - "db_title": "Estatísticas do banco de dados", - "db_desc": "Mostrar estatísticas das tabelas do banco de dados", - "docker_title": "Contêineres Docker", - "docker_desc": "Mostrar contêineres Docker em execução", - "logs_title": "Log Viewer", - "logs_desc": "Mostrar saídas recentes de log", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Válido a partir de", - "valid_to": "Válido até", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Sem dados", - "no_docker": "Nenhum contêiner Docker encontrado ou Docker indisponível", - "no_logs": "Nenhuma linha de log disponível" - }, - "policies": { - "title": "Políticas da organização", - "subtitle": "Gerir políticas de segurança, conexão e funcionalidades para organizações", - "select_org": "Organização", - "select_org_placeholder": "Selecionar organização...", - "select_org_first": "Selecione uma organização para ver o registo de auditoria de políticas.", - "configured": "Configurado", - "connection_title": "Política de conexão", - "connection_desc": "Controlar como as sessões remotas são estabelecidas", - "connection_mode": "Modo de conexão", - "mode_attended": "Assistido (requer aprovação do utilizador)", - "mode_unattended": "Não assistido (permitir sempre)", - "mode_ask": "Perguntar sempre", - "max_session": "Duração máx. da sessão (minutos)", - "idle_lock": "Bloqueio por inatividade (minutos)", - "wallpaper_policy": "Papel de parede durante a sessão", - "wallpaper_show": "Mostrar", - "wallpaper_hide_session": "Ocultar durante a sessão", - "wallpaper_hide_always": "Ocultar sempre", - "features_title": "Política de funcionalidades", - "features_desc": "Ativar ou desativar funcionalidades específicas para dispositivos", - "allow_file_transfer": "Permitir transferência de ficheiros", - "allow_clipboard": "Permitir sincronização da área de transferência", - "allow_audio": "Permitir transmissão de áudio", - "allow_recording": "Permitir gravação de sessão", - "security_title": "Política de segurança", - "security_desc": "Aplicar requisitos de segurança para dispositivos da organização", - "require_2fa": "Exigir 2FA para acesso não assistido", - "password_min_length": "Comprimento mínimo da palavra-passe", - "password_require_special": "Exigir caracteres especiais", - "password_max_age": "Idade máx. da palavra-passe (dias, 0=nunca)", - "allowed_operators": "Funções de operador permitidas (separadas por vírgula)", - "network_title": "Política de rede", - "network_desc": "Controlar servidores relay e conexões diretas", - "block_direct_p2p": "Bloquear P2P direto (forçar relay)", - "allowed_relays": "Servidores relay permitidos (um por linha)", - "ip_allowlist": "Lista branca IP (CIDR, um por linha)", - "update_title": "Política de atualização", - "update_desc": "Controlar atualizações automáticas e canais de atualização", - "auto_update": "Ativar atualização automática", - "update_channel": "Canal de atualização", - "audit_title": "Alterações de políticas", - "audit_desc": "Histórico recente de alterações de políticas", - "no_audit": "Nenhuma alteração de política registada.", - "save_success": "Política salva com sucesso", - "save_failed": "Não foi possível salvar a política", - "load_failed": "Não foi possível carregar políticas", - "block_direct_p2p_hint": "Se aplica a los dispositivos de esta organização. El valor predefinição global está en Configuração → Estratégia de ligação." - }, - "attestation": { - "title": "Atestação de dispositivos", - "subtitle": "Monitorizar verificação de identidade de dispositivos e impressões digitais de hardware", - "verified": "Verificado", - "pending": "Pendente", - "failed": "Falhado", - "device_list": "Registos de atestação", - "device_list_desc": "Impressões digitais de hardware e estado de verificação de identidade", - "col_device": "ID do dispositivo", - "col_hostname": "Nome do host", - "col_fingerprint": "Impressão digital", - "col_status": "Estado", - "col_last_check": "Última verificação", - "col_actions": "Ações", - "no_records": "Nenhum registo de atestação encontrado.", - "verify_success": "Dispositivo marcado como verificado", - "verify_failed": "Não foi possível verificar o dispositivo", - "revoke_success": "Atestação do dispositivo revogada", - "revoke_failed": "Não foi possível revogar a atestação" - }, - "fleet": { - "title": "Gestão de frota", - "tab_resources": "Recursos", - "tab_tasks": "Tarefas", - "tab_builder": "Construtor", - "tab_compliance": "Conformidade", - "res_title": "Mapeamento de recursos", - "res_all_types": "Todos os tipos", - "res_type_printer": "Impressora", - "res_type_network_drive": "Unidade de rede", - "res_type_dns": "Servidor DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Adicionar recurso", - "res_name": "Nome do recurso", - "res_type": "Tipo", - "res_address": "Endereço / Caminho", - "res_target": "Destino", - "res_scope": "Âmbito", - "res_scope_org": "Organização", - "res_scope_group": "Grupo", - "res_scope_device": "Dispositivo", - "res_scope_value": "Valor do âmbito", - "res_status": "Estado", - "res_active": "Ativo", - "res_inactive": "Inativo", - "res_no_data": "Nenhum recurso encontrado. Clique em 'Adicionar'.", - "res_confirm_delete": "Tem a certeza que pretende eliminar este recurso?", - "task_title": "Agendador de tarefas", - "task_all_status": "Todos os estados", - "task_status_pending": "Pendente", - "task_status_running": "Em execução", - "task_status_success": "Sucesso", - "task_status_failed": "Falhado", - "task_search": "Pesquisar tarefas…", - "task_create": "Criar tarefa", - "task_name": "Nome da tarefa", - "task_type": "Tipo", - "task_type_script": "Script", - "task_type_install": "Instalação", - "task_type_update": "Atualização", - "task_type_restart": "Reiniciar", - "task_type_deploy": "Implementação", - "task_type_scan": "Scan", - "task_targets": "Destinos", - "task_targets_help": "IDs de dispositivos ou nomes de grupos, separados por vírgulas", - "task_schedule": "Agendamento", - "task_schedule_once": "Uma vez", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Intervalo", - "task_schedule_value": "Valor do agendamento", - "task_script": "Script / Comando", - "task_retries": "Tentativas", - "task_timeout": "Timeout (s)", - "task_last_run": "Última execução", - "task_no_data": "Nenhuma tarefa encontrada. Crie uma nova tarefa.", - "task_confirm_delete": "Tem a certeza que pretende eliminar esta tarefa?", - "task_output": "Saída da tarefa", - "task_retry": "Repetir", - "builder_title": "Construtor visual de workflows", - "builder_select_workflow": "Selecionar workflow…", - "builder_new": "Novo", - "builder_save": "Guardar", - "builder_export": "Exportar", - "builder_execute": "Executar", - "builder_dry_run": "Simulação", - "builder_triggers": "Triggers", - "builder_conditions": "Condições", - "builder_actions": "Ações", - "builder_results": "Resultados", - "builder_transforms": "Transformações", - "builder_properties": "Propriedades", - "builder_no_selection": "Selecione um nó para editar as suas propriedades.", - "workflow_name": "Nome do workflow:", - "comp_title": "Conformidade de software", - "comp_compliant": "Conforme", - "comp_warning": "Aviso", - "comp_critical": "Crítico", - "comp_score": "Pontuação média", - "comp_device": "Dispositivo", - "comp_hostname": "Nome do host", - "comp_os": "SO", - "comp_score_col": "Pontuação", - "comp_issues": "Problemas", - "comp_last_scan": "Último scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan total", - "comp_remediate": "Remediar", - "comp_remediate_confirm": "Executar auto-remediação neste dispositivo?", - "comp_no_data": "Sem dados de conformidade. Execute um scan.", - "save": "Guardar", - "cancel": "Cancelar", - "close": "Fechar", - "edit": "Editar", - "delete": "Eliminar", - "actions": "Ações", - "all_orgs": "Todas as organizações", - "builder_node_trigger_manual": "Gatilho manual", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Gatilho de evento", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Reiniciar serviço", - "builder_node_action_file_deploy": "Implantar arquivo", - "builder_node_action_message": "Enviar mensagem", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Enviar alerta", - "builder_node_result_chain": "Encadear fluxo", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "Selecionar organização...", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Unidade de rede", - "type_dns": "Servidor DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Adicionar recurso", - "edit_resource": "Editar recurso", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Endereço / caminho", - "scope_org": "Organização", - "scope_group": "Grupo", - "scope_device": "Dispositivo", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Tem certeza de que deseja excluir este item?", - "all_statuses": "Todos os status", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Falhou", - "search_tasks": "Pesquisar tarefas...", - "create_task": "Criar tarefa", - "edit_task": "Editar tarefa", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Implantação de arquivo", - "task_type_registry": "Registry", - "target_devices": "Dispositivos alvo", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / comando", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Carregando...", - "no_output": "Nenhuma saída disponível", - "error_loading": "Erro ao carregar dados", - "select_workflow": "Selecionar fluxo...", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Gatilho manual", - "node_schedule": "Schedule", - "node_event": "Gatilho de evento", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Reiniciar serviço", - "node_file_deploy": "Implantar arquivo", - "node_send_message": "Enviar mensagem", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Enviar alerta", - "node_chain": "Encadear fluxo", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Todas as organizações", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Dispositivo", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Executar remediação automática neste dispositivo?" - }, - "scaling": { - "title": "Escalabilidade e gestão de relés", - "tab_overview": "Visão geral", - "tab_relays": "Nós de relé", - "tab_rules": "Regras de atribuição", - "tab_capacity": "Planeamento de capacidade", - "arch_title": "Arquitetura de rede", - "arch_loading": "A carregar diagrama de arquitetura...", - "stat_relay_nodes": "Nós de relé", - "stat_total_devices": "Total de dispositivos", - "stat_active_sessions": "Sessões ativas", - "stat_bandwidth": "Largura de banda total", - "relay_health": "Estado dos relés", - "no_relays": "Nenhum nó de relé configurado. Adicione o seu primeiro nó para distribuir a carga.", - "relay_search": "Pesquisar relés...", - "relay_add": "Adicionar nó de relé", - "relay_edit": "Editar nó de relé", - "col_name": "Nome", - "col_address": "Endereço", - "col_location": "Localização", - "col_devices": "Dispositivos", - "col_sessions": "Sessões", - "col_bandwidth": "Largura de banda", - "col_status": "Estado", - "col_actions": "Ações", - "col_priority": "Prioridade", - "col_rule_name": "Nome da regra", - "col_match": "Correspondência", - "col_target_relay": "Relé destino", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degradado", - "status_offline": "Offline", - "status_enabled": "Ativado", - "status_disabled": "Desativado", - "confirm_delete_relay": "Tem certeza de que deseja eliminar este nó de relé?", - "confirm_delete_rule": "Tem certeza de que deseja eliminar esta regra de atribuição?", - "rules_hint": "As regras de atribuição determinam qual servidor de relé gere grupos de dispositivos específicos. As regras são avaliadas por prioridade (a mais baixa primeiro).", - "rule_add": "Adicionar regra", - "rule_edit": "Editar regra", - "rule_match_type": "Tipo de correspondência", - "match_subnet": "Sub-rede", - "match_group": "Grupo de dispositivos", - "match_tag": "Tag de dispositivo", - "match_location": "Localização", - "rule_match_value": "Valor de correspondência", - "fallback_master": "Servidor mestre", - "fallback_nearest": "Relé mais próximo", - "relay_max_sessions": "Máx. sessões", - "relay_max_bandwidth": "Máx. largura de banda (Mbps)", - "cap_tiers": "Níveis de capacidade", - "cap_loading": "A carregar dados de capacidade...", - "cap_recommendations": "Recomendações", - "cap_no_recs": "Nenhuma recomendação disponível.", - "cap_planning": "Planeamento de infraestrutura", - "cap_config": "Configuração", - "cap_max_devices": "Máx. dispositivos", - "cap_max_sessions": "Máx. sessões", - "cap_current": "Atual", - "cap_utilization": "Utilização", - "cap_tier_devices": "Capacidade de dispositivos", - "cap_tier_sessions": "Capacidade de sessões", - "cap_tier_bandwidth": "Capacidade de largura de banda", - "cap_single_sqlite": "Servidor único (SQLite)", - "cap_single_pg": "Servidor único (PostgreSQL)", - "cap_master_3": "Mestre + 3 relés", - "cap_master_10": "Mestre + 10 relés", - "rec_no_relays": "Nenhum nó configurado. Considere adicionar relés para melhor desempenho e redundância.", - "rec_devices_high": "A utilização de dispositivos está alta. Considere adicionar mais nós de relé.", - "rec_sessions_high": "A capacidade de sessões aproxima-se do limite. Considere atualizar a infraestrutura.", - "rec_cpu_high": "Alguns nós reportam utilização CPU elevada. Considere balanceamento de carga.", - "rec_all_good": "Todos os sistemas operam dentro de parâmetros normais. Nenhuma ação necessária.", - "save": "Guardar", - "cancel": "Cancelar", - "edit": "Editar", - "delete": "Eliminar", - "close": "Fechar", - "no_rules": "Sem regras de atribuicao.", - "relays_info_banner": "Esta lista é informativa. Os servidores relay realmente usados pelos clientes são configurados pela variável de ambiente RELAY_SERVERS no servidor BetterDesk.", - "relay_name_address_required": "Nome e endereço são obrigatórios.", - "relay_save_failed": "Não foi possível salvar o nó relay.", - "relay_delete_failed": "Não foi possível excluir o nó relay.", - "relay_saved": "Nó relay salvo.", - "relay_deleted": "Nó relay excluído.", - "rule_name_value_required": "Nome da regra e valor de correspondência são obrigatórios.", - "rule_save_failed": "Não foi possível salvar a regra.", - "rule_delete_failed": "Não foi possível excluir a regra.", - "rule_saved": "Regra salva.", - "rule_deleted": "Regra excluída." - }, - "cross_platform": { - "title": "Compatibilidade multiplataforma", - "tab_matrix": "Matriz de compatibilidade", - "tab_distribution": "Distribuição", - "tab_protocols": "Protocolos", - "tab_limitations": "Limitações", - "matrix_hint": "Matriz de suporte de funcionalidades para todas as plataformas suportadas. Verde = suporte completo, Amarelo = parcial, Cinza = não disponível, Azul = planeado.", - "col_feature": "Funcionalidade", - "legend_full": "Suporte completo", - "legend_partial": "Suporte parcial", - "legend_none": "Não disponível", - "legend_planned": "Planeado", - "platform_breakdown": "Distribuição por plataforma", - "arch_breakdown": "Distribuição por arquitetura", - "version_breakdown": "Distribuição por versão", - "summary": "Resumo", - "total_devices": "Total de dispositivos", - "unique_platforms": "Plataformas", - "unique_archs": "Arquiteturas", - "unique_versions": "Versões de cliente", - "no_devices": "Ainda não há dispositivos registados.", - "protocols_hint": "A negociação de capacidades do protocolo garante que cada cliente receba apenas as funcionalidades suportadas. O servidor adapta o seu comportamento com base nas capacidades reportadas.", - "capability_negotiation": "Negociação de capacidades", - "codec_support": "Suporte de codecs (dispositivos online)", - "feature_support": "Suporte de funcionalidades (dispositivos online)", - "no_codec_data": "Sem dados de codecs dos dispositivos online.", - "no_feature_data": "Sem dados de funcionalidades dos dispositivos online.", - "protobuf_schema": "Esquema Protobuf ClientCapabilities", - "diagram_client": "Cliente", - "diagram_server": "Servidor BetterDesk", - "diagram_peer": "Peer remoto", - "limitations_hint": "Cada plataforma tem limitações específicas que afetam as funcionalidades disponíveis. Verifique-as ao planear implementações.", - "feat_desktop_client": "Cliente desktop", - "feat_background_agent": "Agente em segundo plano", - "feat_remote_target": "Alvo remoto", - "feat_screen_capture": "Captura de ecrã", - "feat_input_injection": "Injeção de entrada", - "feat_file_transfer": "Transferência de ficheiros", - "feat_clipboard_sync": "Sincronização da área de transferência", - "feat_audio_streaming": "Streaming de áudio", - "feat_chat": "Chat", - "feat_h264": "Codec H.264", - "feat_vp9": "Codec VP9", - "feat_av1": "Codec AV1", - "feat_cdap_agent": "Agente CDAP", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Navegador web", - "platform_chromeos": "ChromeOS", - "status_production": "Produção", - "status_testing": "Teste", - "status_planned": "Planeado", - "status_limited": "Limitado", - "status_experimental": "Experimental", - "limit_win_uac": "Elevação UAC necessária para instalação do serviço e injeção de entrada em ambientes de trabalho seguros.", - "limit_win_service": "Executa como serviço NSSM; requer direitos de administrador para instalação.", - "limit_win_firewall": "As regras do Windows Firewall devem permitir as portas 21115-21119 para conexões relay.", - "limit_linux_wayland": "Os compositores Wayland restringem a captura programática de ecrã; API do portal PipeWire necessária.", - "limit_linux_pipewire": "A captura de áudio requer PipeWire; fallback PulseAudio disponível mas limitado.", - "limit_linux_arm": "Builds ARM64 disponíveis; alguns codecs podem usar descodificação por software (mais lento).", - "limit_mac_screen": "Permissão de gravação de ecrã necessária em Definições do Sistema > Privacidade e Segurança.", - "limit_mac_signing": "O agente deve ser assinado com Apple Developer ID para distribuição.", - "limit_mac_notarize": "Notarização necessária para macOS Gatekeeper (distribuição fora da App Store).", - "limit_android_projection": "A API MediaProjection requer consentimento do utilizador para cada sessão de captura.", - "limit_android_accessibility": "A injeção de entrada requer AccessibilityService; restringido a partir do Android 14+.", - "limit_android_battery": "Serviço em segundo plano limitado pelo modo Doze; pode necessitar de exceção de otimização de bateria.", - "limit_ios_capture": "A Apple proíbe a captura de ecrã em segundo plano; apenas modo de visualização suportado.", - "limit_ios_input": "Sem injeção de entrada permitida; apenas visualização remota e chat.", - "limit_ios_appstore": "Distribuição apenas pela App Store; TestFlight para testes beta.", - "limit_web_https": "API WebCodecs e WebRTC requerem HTTPS; HTTP recorre a JMuxer (codecs limitados).", - "limit_web_codec": "Suporte de codecs depende do navegador; H.264 amplamente suportado, VP9/AV1 varia.", - "limit_web_performance": "Desempenho limitado pelo sandbox do navegador; sem aceleração de hardware direta.", - "limit_chrome_crostini": "Suporte completo do agente apenas dentro do contentor Linux Crostini.", - "limit_chrome_pwa": "O modo PWA fornece apenas capacidades web; sem funções nativas de agente.", - "limit_chrome_input": "Injeção de entrada fora do contentor Crostini não suportada.", - "feat_session_recording": "Gravação de sessão", - "feat_multi_monitor": "Múltiples monitores", - "feat_unattended_access": "Acesso desacompanhado", - "limit_win_virtual_account": "Los serviços se ejecutan bajo contas virtuales aisladas em vez de LocalSystem; las caminhos de registro personalizadas podem precisar ajuste de ACL.", - "limit_linux_unprivileged": "Los serviços se ejecutan bajo la conta sem privilégios dedicada «betterdesk» con endurecimiento de systemd (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Auditoria de segurança", - "tab_overview": "Visão geral", - "tab_events": "Eventos de auditoria", - "tab_hardening": "Fortalecimento", - "tab_vulnerabilities": "Vulnerabilidades", - "security_score": "Pontuação de segurança", - "failed_logins": "Logins falhados (24h)", - "active_bans": "Bans ativos", - "api_keys": "Chaves API", - "old_keys": "Chaves antigas (>90d)", - "security_checks": "Verificações de segurança", - "tls_status": "Estado TLS", - "pass": "OK", - "warning": "Aviso", - "fail": "Falha", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSockets seguros", - "enabled": "Ativado", - "disabled": "Desativado", - "all_events": "Todos os eventos", - "event_login_failed": "Login falhado", - "event_login_success": "Login bem-sucedido", - "event_peer_banned": "Dispositivo banido", - "event_ip_banned": "IP banido", - "event_config_changed": "Configuração alterada", - "event_key_created": "Chave criada", - "refresh": "Atualizar", - "col_time": "Hora", - "col_action": "Ação", - "col_actor": "Ator", - "col_target": "Alvo", - "col_ip": "Endereço IP", - "col_details": "Detalhes", - "no_events": "Nenhum evento de auditoria encontrado.", - "hardening_hint": "Prioridades de fortalecimento de segurança para sua implantação BetterDesk. Ordenados por gravidade.", - "no_hardening": "Nenhum item de fortalecimento disponível.", - "vuln_hint": "Resultados da verificação de vulnerabilidades de dependências. Execute npm audit regularmente.", - "no_vulns": "Nenhuma vulnerabilidade encontrada. Suas dependências estão seguras." - }, - "languages": { - "title": "Idiomas", - "total_languages": "Total de idiomas", - "fully_translated": "Totalmente traduzido", - "needs_review": "Precisa de revisão", - "reference_keys": "Chaves de referência", - "no_languages": "Nenhum arquivo de idioma encontrado.", - "badge_reference": "Referência", - "badge_review": "Revisar", - "badge_complete": "Completo", - "coverage": "cobertura", - "keys": "chaves", - "missing": "em falta", - "extra": "extra", - "view_missing": "Ver itens ausentes", - "fix_missing": "Fix Missing", - "missing_keys_for": "Chaves ausentes para", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "e mais {n}...", - "all_keys_present": "Todas as chaves estão presentes!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "As chaves ausentes em {code} devem ser traduzidas manualmente.", - "no_fix_needed": "Não há chaves ausentes para completar." - }, - "resource_control": { - "title": "Controle de recursos", - "tab_overview": "Visão geral", - "tab_usb": "USB Control", - "tab_optical": "Unidades ópticas", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Cotas de recursos", - "compliance_by_category": "Conformidade por categoria", - "device_compliance": "Conformidade dos dispositivos", - "search_devices": "Pesquisar dispositivos...", - "col_device": "Dispositivo", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Total de dispositivos", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Taxa de conformidade", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configurar", - "no_devices": "Nenhum dispositivo encontrado", - "usb_title": "Controle de portas USB", - "usb_hint": "Controle o acesso a dispositivos de armazenamento USB para o dispositivo selecionado ou a política padrão da organização.", - "usb_storage_policy": "Política de armazenamento USB", - "usb_whitelist": "Dispositivos permitidos (um por linha)", - "usb_whitelist_hint": "VID:PID (ex.: 0781:5583)", - "usb_audit_log": "Registrar conexões de dispositivos USB", - "optical_title": "Controle de unidades ópticas", - "optical_hint": "Controle o acesso a unidades CD/DVD/Blu-ray para o dispositivo selecionado.", - "optical_policy": "Política de unidades ópticas", - "optical_audit_log": "Registrar acesso a unidades ópticas", - "monitors_title": "Gerenciamento de monitores", - "monitors_hint": "Configure ajustes de monitores, incluindo quantidade máxima, resolução aplicada, brilho e agenda de energia.", - "monitors_max_count": "Quantidade máxima de monitores (0 = ilimitado)", - "monitors_max_hint": "0 significa sem limite", - "monitors_resolution": "Resolução máxima", - "monitors_brightness": "Limite de brilho", - "monitors_power_schedule": "Agenda de energia", - "monitors_power_hint": "ex.: off:22:00-06:00", - "disks_title": "Controle de acesso a discos", - "disks_hint": "Configure políticas de acesso a discos, incluindo modo somente leitura, exigência de criptografia e visibilidade de partições.", - "disks_readonly": "Forçar modo somente leitura", - "disks_encryption": "Exigir criptografia (BitLocker/LUKS)", - "disks_smart": "Ativar monitoramento S.M.A.R.T.", - "disks_hidden": "Partições ocultas", - "disks_hidden_hint": "Letras de unidade ou pontos de montagem separados por vírgula", - "quotas_title": "Cotas de recursos", - "quotas_hint": "Defina cotas de CPU, RAM, largura de banda e disco por usuário para o dispositivo selecionado.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Limite de largura de banda (Mbps)", - "quotas_bandwidth_hint": "0 = ilimitado", - "quotas_disk_quota": "Cota de disco (GB)", - "quotas_disk_hint": "0 = ilimitado", - "quotas_process_whitelist": "Lista permitida de processos (um por linha)", - "quotas_process_hint": "ex.: chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Somente lista permitida", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Atualizações", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Versão instalada", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Verificar agora", - "checking": "Checking…", - "up_to_date": "Atualizado", - "update_available": "Atualização disponível", - "changelog": "Release Notes", - "no_changelog": "Nenhuma nota de versão disponível", - "files_changed": "Arquivos alterados", - "files": "Arquivos", - "changes_unavailable": "Não foi possível carregar a lista de alterações. Você ainda pode instalar a atualização.", - "create_backup": "Criar backup antes da atualização", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Instalando atualização...", - "creating_backup": "Criando backup...", - "downloading": "Baixando arquivos...", - "install_success": "Atualização instalada com sucesso. A console será reiniciada...", - "install_failed": "Falha ao instalar atualização", - "restarting": "Aguardando reinício da console...", - "restart_complete": "Console reiniciada com sucesso", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Nenhuma versão de atualização selecionada. Verifique atualizações primeiro.", - "backups_title": "Backups de atualização", - "backups_desc": "Backups prévios criados automaticamente antes de cada atualização", - "no_backups": "Nenhum backup de atualização encontrado", - "restore": "Restore", - "restore_confirm": "Restaurar este backup?", - "restore_success": "Backup restaurado com sucesso", - "baseline_set": "Referência definida", - "commits_behind": "commits atrás", - "total_files": "Total de arquivos", - "applied": "Applied", - "failed": "Falhou", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Servidor Go", - "component_agent": "Agent", - "component_scripts": "Scripts e Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Verificando Go...", - "go_not_found": "Go não está instalado", - "go_check_failed": "Não foi possível verificar a disponibilidade do Go", - "server_building": "Compilando servidor Go... Isso pode levar alguns minutos.", - "server_built": "Binário do servidor compilado", - "server_build_failed": "Falha na compilação do servidor", - "server_deployed": "Binário do servidor implantado", - "server_deploy_failed": "Falha na implantação do servidor", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Baixando código-fonte do servidor...", - "delete": "Excluir", - "delete_confirm": "Excluir permanentemente o backup {name}? Esta ação não pode ser desfeita.", - "delete_success": "Backup excluído", - "delete_failed": "Não foi possível excluir o backup", - "retention_label": "Manter os N backups mais recentes", - "retention_hint": "Backups antigos são removidos automaticamente após cada atualização. Use 0 para manter todos.", - "retention_saved": "Configuração de retenção salva", - "retention_invalid": "A retenção deve ser um inteiro entre 0 e 1000", - "retention_required_for_prune": "Defina primeiro um valor de retenção maior que 0", - "prune_now": "Apply now", - "prune_confirm": "Manter apenas os {n} backups mais recentes e excluir o restante?", - "prune_done": "{n} backup(s) excluído(s)", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Método de atualização", - "strategy_download": "Baixar binário pré-compilado", - "strategy_compile": "Compilar a partir do código-fonte", - "both_available": "Baixar e compilar", - "download_available": "Download disponível", - "no_method": "Nenhum método de atualização", - "no_release": "No release", - "available": "Disponível", - "server_downloading": "Baixando binário do servidor...", - "server_downloaded": "Binário do servidor baixado", - "server_download_failed": "Falha ao baixar binário do servidor", - "server_download_note": "Um binário pré-compilado será baixado de GitHub Releases. Isso normalmente leva menos de um minuto.", - "install_go_hint": "Instale Go de https://go.dev/dl/ para habilitar compilação, ou publique uma release com binários pré-compilados", - "strategy_install_go": "Instalar Go automaticamente e compilar", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Recompilação automática pronta", - "toolchain_ready": "Toolchain instalada", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Baixando toolchain Go...", - "toolchain_failed": "Falha ao instalar toolchain Go", - "modal_title": "Instalando atualização", - "modal_done_title": "Atualização concluída", - "modal_close": "Fechar", - "modal_reload_now": "Recarregar console", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Arquivos da console", - "phase_server": "Servidor Go", - "phase_restart": "Reinício", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Backup ignorado (escolha do usuário)", - "server_skipped": "Servidor Go ignorado", - "server_not_selected": "Go server not selected", - "server_processing": "Processando atualização do servidor Go...", - "no_restart_needed": "Nenhum reinício necessário", - "complete": "Atualização aplicada", - "complete_summary": "A atualização foi aplicada com sucesso.", - "complete_with_errors": "A atualização foi concluída, mas algumas etapas falharam. Veja os detalhes abaixo.", - "modal_done_with_errors_title": "Atualização concluída com erros", - "console_will_restart": "O processo da console será reiniciado agora...", - "restart_complete_msg": "A console terminou de reiniciar. Clique em Recarregar para carregar a nova versão. A página será recarregada automaticamente em 8 segundos.", - "refresh_recommended": "Recursos estáticos foram alterados — recarregue a página para ver a nova interface.", - "confirm_title": "Aplicar atualização", - "confirm_with_backup": "Um backup prévio será criado automaticamente.", - "confirm_no_backup": "Nenhum backup será criado (continue por sua conta e risco).", - "server_stale_title": "Binário do servidor desatualizado", - "server_stale_desc": "O código-fonte do servidor Go foi atualizado, mas o binário em execução não foi recompilado. Recompile agora para aplicar atualizações de segurança e bibliotecas.", - "rebuild_server": "Recompilar binário do servidor", - "rebuilding_server": "Recompilando servidor...", - "rebuild_server_success": "Binário do servidor recompilado e reiniciado", - "rebuild_server_failed": "Falha ao recompilar o binário do servidor" - }, - "permissions": { - "title": "Permissões", - "subtitle": "Gerenciar permissões granulares de funções e substituições", - "info_title": "Permissões baseadas em funções", - "info_desc": "Funções padrão recebem permissões predefinidas. Você pode substituir permissões individuais por função sem alterar a função base.", - "select_role": "Selecionar função", - "select_role_placeholder": "Escolha uma função...", - "reset_overrides": "Redefinir substituições", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Nível do servidor", - "custom": "Custom", - "default": "Default", - "revert": "Reverter", - "saved": "Permissão salva", - "reverted": "Substituição revertida", - "all_reverted": "Todas as substituições foram revertidas", - "confirm_reset": "Redefinir todas as substituições de permissões para esta função?", - "empty_title": "Selecione uma função", - "empty_desc": "Escolha uma função à esquerda para ver suas permissões.", - "locked_title": "Super Admin", - "locked_desc": "Esta função é protegida e só pode ser alterada pelo mapeamento padrão.", - "cat_device": "Dispositivos", - "cat_user": "Users", - "cat_server": "Gerenciamento do servidor", - "cat_org": "Organizações", - "cat_audit": "Auditoria", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Ver dispositivos", - "perm_device_connect": "Conectar a dispositivos", - "perm_device_edit": "Editar dispositivos", - "perm_device_delete": "Excluir dispositivos", - "perm_device_ban": "Bloquear dispositivos", - "perm_device_change_id": "Alterar ID do dispositivo", - "perm_user_view": "Ver usuários", - "perm_user_create": "Criar usuários", - "perm_user_edit": "Editar usuários", - "perm_user_delete": "Excluir usuários", - "perm_server_config": "Configurar servidor", - "perm_server_keys": "Gerenciar chaves do servidor", - "perm_org_create": "Criar organizações", - "perm_org_edit": "Editar organizações", - "perm_org_delete": "Excluir organizações", - "perm_org_manage_users": "Gerenciar usuários da organização", - "perm_org_manage_devices": "Gerenciar dispositivos da organização", - "perm_audit_view": "Ver auditoria", - "perm_metrics_view": "Ver métricas", - "perm_blocklist_edit": "Editar lista de bloqueio", - "perm_cdap_view": "Ver CDAP", - "perm_cdap_command": "Executar comandos CDAP", - "perm_cdap_terminal": "Usar terminal CDAP", - "perm_cdap_files": "Gerenciar arquivos CDAP", - "perm_enrollment_manage": "Gerenciar registros", - "perm_enrollment_approve": "Aprovar registros", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Editar marca", - "perm_server_attestation": "Certificação de desempenho do servidor" - }, - "notifications": { - "title": "Notificações", - "empty": "Nenhuma notificação nova", - "mark_all_read": "Marcar tudo como lido", - "see_all": "Ver todas as solicitações de ajuda", - "help_request": "Solicitação de ajuda", - "just_now": "just now" - }, - "accessibility": { - "title": "Acessibilidade", - "subtitle": "Ajuste a consola à sua visão, movimento e leitura.", - "close": "Fechar menu de acessibilidade", - "profiles": "Perfis rápidos", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Texto maior, alto contraste e foco visível.", - "profile_dyslexia": "Conforto de leitura", - "profile_dyslexia_hint": "Fonte legível e espaçamento mais amplo.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reduz transições e pausa animações.", - "profile_color_assist": "Ajuda de cores", - "profile_color_assist_hint": "Filtro de cor, rótulos e links destacados.", - "reading": "Leitura", - "font_size": "Tamanho do texto", - "line_height": "Altura da linha", - "letter_spacing": "Espaçamento entre letras", - "word_spacing": "Espaçamento entre palavras", - "readable_font": "Fonte legível", - "readable_font_hint": "Usa formas de letras amplas e familiares.", - "dyslexia_spacing": "Espaçamento para dislexia", - "dyslexia_spacing_hint": "Adiciona espaçamento extra para textos longos.", - "visual": "Visual", - "contrast": "Contraste", - "contrast_normal": "Normal", - "contrast_high_dark": "Alto contraste escuro", - "contrast_high_light": "Alto contraste claro", - "contrast_yellow_black": "Amarelo sobre preto", - "color_filter": "Filtro de visão de cores", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturação de cor", - "underline_links": "Sublinhar links", - "underline_links_hint": "Torna links visíveis sem depender da cor.", - "highlight_links": "Destacar ações", - "highlight_links_hint": "Desenha um contorno em links e botões.", - "highlight_headings": "Destacar títulos", - "highlight_headings_hint": "Marca títulos de seção com uma barra colorida.", - "hide_media": "Dim media", - "hide_media_hint": "Escurece imagens, vídeos e áreas canvas.", - "interaction": "Interação", - "strong_focus": "Foco reforçado", - "strong_focus_hint": "Mostra um contorno amplo de foco do teclado.", - "large_cursor": "Cursor grande", - "large_cursor_hint": "Usa um ponteiro maior com alto contraste.", - "reduce_motion": "Reduzir movimento", - "reduce_motion_hint": "Encurta transições e rolagem suave.", - "pause_animations": "Pausar animações", - "pause_animations_hint": "Interrompe movimentos visuais repetitivos.", - "reading_guide": "Guia de leitura", - "reading_guide_hint": "Segue o ponteiro com uma linha luminosa.", - "reading_mask": "Máscara de leitura", - "reading_mask_hint": "Escurece o conteúdo acima e abaixo do ponteiro.", - "preview": "Pré-visualização", - "preview_title": "Prévia do espaço do operador", - "preview_text": "Verifique se textos, links, controles e rótulos de status estão confortáveis de ler antes de fechar este menu.", - "preview_link": "Link para detalhes do dispositivo", - "preview_status": "Online", - "preview_button": "Ação principal", - "preview_secondary": "Secondary", - "reset": "Repor", - "done": "Concluído" - }, - "server_mgmt": { - "title": "Gestão do servidor", - "subtitle": "Painel tipo Cockpit para o host da console BetterDesk (BETA).", - "beta_tooltip": "Ferramentas de gerenciamento do servidor estão em beta", - "notice_title": "Gerenciamento local do servidor", - "notice_body": "Essas ações afetam o host onde a console está em execução.", - "tab_overview": "Visão geral", - "tab_terminal": "Terminal", - "tab_files": "Arquivos", - "tab_services": "Serviços", - "cpu": "CPU", - "memory": "Memória", - "load": "Carregar", - "disks": "Discos", - "history": "Histórico", - "host_info": "Host info", - "cores": "cores", - "uptime": "Tempo ativo", - "no_disks": "Nenhum dado de disco disponível", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY disponível", - "term_connect": "Conectar", - "term_disconnect": "Desconectar", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Erro de conexão", - "term_warning": "Os comandos são executados como o usuário proprietário do processo da console. Adicione uma regra sudoers para permitir elevação.", - "term_hint": "Dica: digite `sudo -i` para obter privilégios root (configuração sudoers necessária).", - "term_lib_failed": "Não foi possível carregar a biblioteca do terminal", - "files_up": "Subir um nível", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Nome", - "files_size": "Tamanho", - "files_perms": "Mode", - "files_mtime": "Modificado", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Pasta vazia", - "files_error": "Não foi possível listar o diretório", - "read_failed": "Não foi possível ler o arquivo", - "save_failed": "Não foi possível salvar o arquivo", - "rename_failed": "Falha ao renomear", - "delete_failed": "Falha ao excluir", - "delete_confirm": "Excluir esta entrada?", - "mkdir_prompt": "Nome da nova pasta:", - "mkdir_failed": "Não foi possível criar a pasta", - "file_saved": "Arquivo salvo", - "binary_warn": "Arquivo binário — somente prévia", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Pesquisar serviços...", - "svc_name": "Serviço", - "svc_state": "Estado", - "svc_description": "Description", - "svc_empty": "Nenhum serviço encontrado", - "svc_load_failed": "Não foi possível carregar serviços", - "svc_action_failed": "Ação falhou", - "svc_confirm": "Run", - "svc_start": "Iniciar", - "svc_stop": "Parar", - "svc_restart": "Reiniciar", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Baixar BetterDesk Agent", - "choose_platform": "Escolher plataforma", - "choose_platform_hint": "Selecione o instalador adequado ao seu sistema operacional.", - "download": "Baixar", - "building": "Compilando…", - "failed": "Falha na compilação", - "need_help": "Precisa de ajuda?", - "powered_by": "Desenvolvido por" - }, - "server_attestation": { - "title": "Atestação do servidor", - "subtitle": "Benchmark de desempenho que determina a capacidade de conexões remotas simultâneas a 80% de limiar de CPU, RAM e disco.", - "warning_title": "Teste de carga", - "warning_body": "O benchmark simula conexões WebSocket paralelas aos servidores de sinal e relay. Execute em horas de menor tráfego — este teste carrega a produção.", - "run_benchmark": "Executar benchmark", - "abort": "Abortar", - "download_report": "Descarregar relatório JSON", - "last_test": "Último teste", - "no_test_yet": "Nenhum benchmark foi executado ainda", - "max_connections": "Conexões máximas", - "threshold_80": "Limiar de 80% — métricas finais", - "disk": "Disco", - "ramp_chart": "Gráfico de rampa de carga", - "connections": "Conexões", - "connections_short": "con.", - "tier_guide_title": "O que significa cada nível?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "SEM CLASSIFICAÇÃO", - "tier_bronze_desc": "1–25 conexões simultâneas — VPS pequeno (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 conexões — servidor de gama média (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 conexões — servidor de alto desempenho (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 conexões — infraestrutura enterprise (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ conexões — classe turbo: hardware dedicado, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Nota: no Docker, as métricas de CPU/RAM podem refletir os limites do container em vez do host físico.", - "badge_tooltip": "Atestação do servidor BetterDesk — certificação de desempenho do servidor", - "confirm_run": "Este benchmark irá fazer um teste de carga no servidor com conexões simuladas. Continuar?", - "starting": "A iniciar...", - "complete": "Benchmark completo", - "signal_peers": "Peers de sinal", - "relay_sessions": "Sessões de relay", - "page_error": "Erro al cargar la página de certificação do servidor", - "mode_estimated": "Estimado (WebSocket inacessível)", - "incomplete": "Benchmark concluído sin nível válido" + "form": { + "cancel": "Cancelar" } + } } diff --git a/web-nodejs/lang/ro.json b/web-nodejs/lang/ro.json index 6c2826a7..305a7c01 100644 --- a/web-nodejs/lang/ro.json +++ b/web-nodejs/lang/ro.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Romanian", - "native_name": "Română", - "flag": "🇷🇴", - "needs_review": true + "_meta": { + "name": "Romanian", + "native_name": "Română", + "flag": "🇷🇴", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Se încarcă...", + "confirm": "Confirmați", + "alert": "Alertă", + "prompt": "Introduceți valoarea", + "copied": "Copiat în clipboard", + "save": "Salvați", + "saved": "Salvat", + "error": "Eroare", + "success": "Succes", + "warning": "Avertisment", + "info": "Informații", + "all": "Toate", + "cancel": "Anulează", + "delete": "Ștergeți", + "actions": "Acțiuni", + "close": "Închide", + "required": "necesar", + "name_required": "Numele este obligatoriu", + "active": "Activ", + "inactive": "Inactiv", + "invalid_json": "JSON nevalid", + "field_required": "{field} este necesar", + "back": "Înapoi", + "edit": "Editați", + "yes": "Da", + "no": "Nu" + }, + "nav": { + "main": "Principal", + "tools": "Instrumente", + "system": "Sistem", + "dashboard": "Tabloul de bord", + "devices": "Dispozitive", + "keys": "Chei", + "generator": "Generator", + "settings": "Setări", + "users": "Utilizatori", + "inventory": "Inventar", + "tickets": "Tichete", + "help_requests": "Cereri de ajutor", + "activity": "Activitate", + "automation": "Automatizare", + "file_transfer": "Transfer de fișiere", + "network": "Rețea", + "dataguard": "DataGuard", + "reports": "Rapoarte", + "tenants": "Chiriași", + "registrations": "Registrations", + "management": "management", + "toggle_sidebar": "Comutați bara laterală", + "cdap": "CDAP Dispozitive", + "fleet": "Flotă", + "scaling": "Scalare", + "cross_platform": "Multiplatformă", + "tokens": "Jetoane de dispozitiv", + "organizations": "Organizații", + "policies": "Politici", + "attestation": "Atestare", + "remote": "Desktop la distanță", + "toolkit": "Trusă de instrumente", + "security_audit": "Audit de securitate", + "languages": "Limbi", + "resource_control": "Controlul resurselor", + "chat": "Chat", + "help": "Ajutor", + "expand_sidebar": "Extinde bara laterală", + "toggle_theme": "Comutați tema", + "sdk_studio": "SDK Studio", + "login": "Autentificare", + "permissions": "Permisiuni", + "server_management": "Gestionare server", + "server_attestation": "Atestare server", + "commercialization": "Comercializare" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Conectați-vă la BetterDesk Console", + "username": "Nume de utilizator", + "username_placeholder": "Introduceți numele de utilizator", + "password": "Parolă", + "password_placeholder": "Introduceți parola", + "remember_me": "Remember me", + "login_failed": "Conectarea a eșuat. Vă rugăm să vă verificați acreditările.", + "invalid_credentials": "Nume de utilizator sau parolă nevalidă.", + "username_collision": "Există deja un cont local cu acest nume de utilizator. Conectați-vă cu parola locală sau cereți unui administrator să redenumească sau să elimine contul în conflict.", + "fill_all_fields": "Vă rugăm să completați toate câmpurile", + "logout_confirm": "Sigur doriți să vă deconectați?", + "change_password": "Schimbați parola", + "password_required": "Este necesară parola", + "totp_title": "Autentificare cu doi factori", + "totp_subtitle": "Introdu codul din 6 cifre din aplicația de autentificare", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Utilizați în schimb un cod de recuperare", + "totp_use_code": "Utilizați în schimb codul de autentificare", + "totp_recovery_code": "Cod de recuperare", + "totp_back_to_login": "Înapoi la autentificare", + "totp_invalid_code": "Cod de verificare nevalid. Vă rugăm să încercați din nou.", + "totp_enter_code": "Vă rugăm să introduceți un cod din 6 cifre", + "totp_enter_recovery": "Vă rugăm să introduceți un cod de recuperare", + "totp_session_expired": "Sesiunea a expirat. Vă rugăm să vă conectați din nou.", + "totp_already_enabled": "Autentificarea cu doi factori este deja activată", + "pro_only_account": "Acest cont este numai pentru clientul desktop RustDesk. Vă rugăm să utilizați aplicația RustDesk pentru a vă conecta.", + "passwords_mismatch": "Parolele nu se potrivesc", + "or": "sau", + "login_sso": "Conectați-vă cu SSO", + "login_sso_with": "Conectați-vă cu {{provider}}", + "oidc_denied": "Accesul a fost refuzat de furnizorul de identitate.", + "oidc_invalid": "Reapelare OIDC nevalidă. Vă rugăm să încercați din nou.", + "oidc_failed": "Autentificarea OIDC a eșuat. Vă rugăm să încercați din nou.", + "oidc_error": "A apărut o eroare în timpul conectării SSO.", + "oidc_no_account": "Contul dvs. nu a fost găsit și înregistrarea automată este dezactivată.", + "totp_rate_limited": "Prea multe încercări. Vă rugăm să încercați din nou mai târziu.", + "emergency_mode_banner": "Go server inaccesibil - rulează în modul de urgență (doar pentru administrator, funcționalitate limitată)" + }, + "dashboard": { + "title": "Tabloul de bord", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Total Dispozitive", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Conexiuni active", + "offline_devices": "Offline", + "server_status": "Stare server", + "quick_actions": "Acțiuni rapide", + "manage_devices": "Gestionați dispozitivele conectate", + "view_keys": "Vizualizați cheile serverului", + "generate_config": "Generați configurația clientului", + "server_settings": "Configurați setările", + "greeting_morning": "Bună dimineața, {name}", + "greeting_afternoon": "Bună ziua, {name}", + "greeting_evening": "Bună seara, {name}", + "greeting_night": "Noapte bună, {name}", + "health_overview": "Privire de ansamblu asupra sănătății", + "devices_online": "Dispozitive online", + "active_alerts": "Alerte active", + "recent_connections": "Total Dispozitive", + "server_uptime": "Timp de funcționare a serverului", + "activity_feed": "Activitate recentă", + "no_recent_activity": "Nicio activitate recentă", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Încercați Modul Desktop pentru un spațiu de lucru cu mai multe ferestre cu widget-uri de monitorizare.", + "tip_keyboard_shortcuts": "Apăsați Ctrl+K oriunde pentru a deschide paleta de comenzi de căutare rapidă.", + "tip_address_book": "Sincronizați agenda dvs. pe toate dispozitivele conectându-vă de la clientul RustDesk.", + "tip_2fa": "Activați autentificarea cu doi factori în Setări pentru securitate suplimentară a contului.", + "tip_bulk_actions": "Selectați mai multe dispozitive și utilizați acțiuni în bloc pentru a le gestiona simultan.", + "tip_theme": "Comutați între temele întunecate și deschise în setările barei laterale.", + "tip_cdap": "Conectați dispozitive IoT și senzori industriali prin gateway-ul CDAP.", + "tip_tutorials": "Faceți clic pe butonul de ajutor din colțul din dreapta jos pentru tutoriale interactive." + }, + "devices": { + "title": "Dispozitive", + "id": "ID", + "hostname": "Hostname", + "username": "Nume de utilizator", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Creat", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Căutați dispozitive...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Stare de sincronizare", + "sync_success": "Starea a fost sincronizată cu succes", + "empty_title": "Nu s-au găsit dispozitive", + "empty_text": "Niciun dispozitiv nu se potrivește cu filtrele dvs. actuale", + "edit_title": "Detalii despre dispozitiv", + "delete_title": "Ștergeți dispozitivul", + "delete_confirm": "Sigur doriți să ștergeți dispozitivul {id}?", + "delete_warning": "Sunteți pe cale să ștergeți definitiv acest dispozitiv:", + "delete_permanent": "Această acțiune nu poate fi anulată. Toate datele asociate cu acest dispozitiv vor fi șterse definitiv din baza de date.", + "delete_success": "Dispozitivul a fost șters cu succes", + "revoke_option": "Revocați dispozitivul", + "revoke_hint": "Blocați ID-ul dispozitivului și deconectați conexiunile active", + "revoke_success": "Dispozitivul a fost revocat cu succes", + "details": "Detalii despre dispozitiv", + "ban_title": "Interziceți dispozitivul", + "ban_confirm": "Sigur doriți să interziceți dispozitivul {id}?", + "ban_success": "Dispozitivul a fost interzis cu succes", + "unban_title": "Deblocarea dispozitivului", + "unban_confirm": "Sigur doriți să dezabonați dispozitivul {id}?", + "unban_success": "Dispozitivul a fost anulat cu succes", + "change_id": "Change ID", + "change_id_title": "Schimbați ID-ul dispozitivului", + "new_id": "New ID", + "change_id_hint": "Numai 6-16 caractere, litere, cifre, liniuțe și caractere de subliniere", + "change_id_success": "ID-ul dispozitivului a fost schimbat cu succes", + "id_length_error": "ID-ul trebuie să aibă 6-16 caractere", + "id_format_error": "ID-ul poate conține doar litere, cifre, liniuțe și liniuțe de subliniere", + "bulk_delete_title": "Ștergeți mai multe dispozitive", + "bulk_delete_confirm": "Sigur doriți să ștergeți dispozitivele {count}?", + "bulk_delete_success": "Dispozitivele {count} au fost șterse cu succes", + "columns": "Columns", + "toggle_columns": "Comutați coloanele vizibile", + "not_found": "Dispozitivul nu a fost găsit", + "delete_failed": "Dispozitivul nu a putut fi șters", + "change_id_failed": "Nu s-a putut schimba ID-ul dispozitivului", + "invalid_id": "ID dispozitiv nevalid (6-16 caractere necesare)", + "invalid_id_format": "Format de identificare nevalid (numai litere, cifre, liniuțe, litere de subliniere)", + "id_exists": "ID-ul dispozitivului există deja", + "no_selection": "Niciun dispozitiv selectat", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP conectat", + "revoke": "Revocare", + "access_policy": "Politica de acces", + "unattended_access": "Acces nesupravegheat", + "enable_unattended": "Activați accesul nesupravegheat", + "access_password": "Parola de acces", + "password_configured": "Parola setată", + "no_password": "Fără parolă", + "new_password": "Parolă nouă (lasați gol pentru a rămâne la curent)", + "clear_password": "Ștergeți parola", + "access_schedule": "Program de acces", + "enable_schedule": "Activați accesul bazat pe timp", + "allowed_days": "Zile permise", + "start_time": "Ora de început", + "end_time": "Ora de sfârșit", + "timezone": "Fus orar", + "allowed_operators": "Operatori Permisi", + "all_operators": "Toți operatorii (lasați gol)", + "operators_hint": "Nume de utilizator separate prin virgulă. Lăsați gol pentru a permite toți operatorii.", + "last_updated_by": "Ultima actualizare de către", + "access_policy_saved": "Politica de acces a fost salvată", + "tabs": { + "overview": "Prezentare generală", + "hardware": "Hardware", + "metrics": "Metrici", + "connections": "Conexiuni", + "audit": "Audit", + "info": "Info", + "history": "istorie" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Procesor", + "memory": "Memorie", + "disk": "Disc", + "os": "Sistem de operare", + "hostname": "Hostname", + "uptime": "Timp de funcționare", + "load_avg": "Încărcare medie", + "network": "Adaptoare de rețea", + "no_data": "Nu sunt disponibile date hardware", + "title": "Informații hardware", + "gpu": "Placă grafică" }, - "common": { - "loading": "Se încarcă...", - "confirm": "Confirmați", - "alert": "Alertă", - "prompt": "Introduceți valoarea", - "copied": "Copiat în clipboard", - "save": "Salvați", - "saved": "Salvat", - "error": "Eroare", - "success": "Succes", - "warning": "Avertisment", - "info": "Informații", - "all": "Toate", - "cancel": "Anulează", - "delete": "Ștergeți", - "actions": "Acțiuni", - "close": "Închide", - "required": "necesar", - "name_required": "Numele este obligatoriu", - "active": "Activ", - "inactive": "Inactiv", - "invalid_json": "JSON nevalid", - "field_required": "{field} este necesar", - "back": "Înapoi", - "edit": "Editați", - "yes": "Da", - "no": "Nu" - }, - "nav": { - "main": "Principal", - "tools": "Instrumente", - "system": "Sistem", - "dashboard": "Tabloul de bord", - "devices": "Dispozitive", - "keys": "Chei", - "generator": "Generator", - "settings": "Setări", - "users": "Utilizatori", - "inventory": "Inventar", - "tickets": "Tichete", - "help_requests": "Cereri de ajutor", - "activity": "Activitate", - "automation": "Automatizare", - "file_transfer": "Transfer de fișiere", - "network": "Rețea", - "dataguard": "DataGuard", - "reports": "Rapoarte", - "tenants": "Chiriași", - "registrations": "Registrations", - "management": "management", - "toggle_sidebar": "Comutați bara laterală", - "cdap": "CDAP Dispozitive", - "fleet": "Flotă", - "scaling": "Scalare", - "cross_platform": "Multiplatformă", - "tokens": "Jetoane de dispozitiv", - "organizations": "Organizații", - "policies": "Politici", - "attestation": "Atestare", - "remote": "Desktop la distanță", - "toolkit": "Trusă de instrumente", - "security_audit": "Audit de securitate", - "languages": "Limbi", - "resource_control": "Controlul resurselor", - "chat": "Chat", - "help": "Ajutor", - "expand_sidebar": "Extinde bara laterală", - "toggle_theme": "Comutați tema", - "sdk_studio": "SDK Studio", - "login": "Autentificare", - "permissions": "Permisiuni", - "server_management": "Gestionare server", - "server_attestation": "Atestare server" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Conectați-vă la BetterDesk Console", - "username": "Nume de utilizator", - "username_placeholder": "Introduceți numele de utilizator", - "password": "Parolă", - "password_placeholder": "Introduceți parola", - "remember_me": "Remember me", - "login_failed": "Conectarea a eșuat. Vă rugăm să vă verificați acreditările.", - "invalid_credentials": "Nume de utilizator sau parolă nevalidă.", - "username_collision": "Există deja un cont local cu acest nume de utilizator. Conectați-vă cu parola locală sau cereți unui administrator să redenumească sau să elimine contul în conflict.", - "fill_all_fields": "Vă rugăm să completați toate câmpurile", - "logout_confirm": "Sigur doriți să vă deconectați?", - "change_password": "Schimbați parola", - "password_required": "Este necesară parola", - "totp_title": "Autentificare cu doi factori", - "totp_subtitle": "Introdu codul din 6 cifre din aplicația de autentificare", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Utilizați în schimb un cod de recuperare", - "totp_use_code": "Utilizați în schimb codul de autentificare", - "totp_recovery_code": "Cod de recuperare", - "totp_back_to_login": "Înapoi la autentificare", - "totp_invalid_code": "Cod de verificare nevalid. Vă rugăm să încercați din nou.", - "totp_enter_code": "Vă rugăm să introduceți un cod din 6 cifre", - "totp_enter_recovery": "Vă rugăm să introduceți un cod de recuperare", - "totp_session_expired": "Sesiunea a expirat. Vă rugăm să vă conectați din nou.", - "totp_already_enabled": "Autentificarea cu doi factori este deja activată", - "pro_only_account": "Acest cont este numai pentru clientul desktop RustDesk. Vă rugăm să utilizați aplicația RustDesk pentru a vă conecta.", - "passwords_mismatch": "Parolele nu se potrivesc", - "or": "sau", - "login_sso": "Conectați-vă cu SSO", - "login_sso_with": "Conectați-vă cu {{provider}}", - "oidc_denied": "Accesul a fost refuzat de furnizorul de identitate.", - "oidc_invalid": "Reapelare OIDC nevalidă. Vă rugăm să încercați din nou.", - "oidc_failed": "Autentificarea OIDC a eșuat. Vă rugăm să încercați din nou.", - "oidc_error": "A apărut o eroare în timpul conectării SSO.", - "oidc_no_account": "Contul dvs. nu a fost găsit și înregistrarea automată este dezactivată.", - "totp_rate_limited": "Prea multe încercări. Vă rugăm să încercați din nou mai târziu.", - "emergency_mode_banner": "Go server inaccesibil - rulează în modul de urgență (doar pentru administrator, funcționalitate limitată)" - }, - "dashboard": { - "title": "Tabloul de bord", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Total Dispozitive", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Conexiuni active", - "offline_devices": "Offline", - "server_status": "Stare server", - "quick_actions": "Acțiuni rapide", - "manage_devices": "Gestionați dispozitivele conectate", - "view_keys": "Vizualizați cheile serverului", - "generate_config": "Generați configurația clientului", - "server_settings": "Configurați setările", - "greeting_morning": "Bună dimineața, {name}", - "greeting_afternoon": "Bună ziua, {name}", - "greeting_evening": "Bună seara, {name}", - "greeting_night": "Noapte bună, {name}", - "health_overview": "Privire de ansamblu asupra sănătății", - "devices_online": "Dispozitive online", - "active_alerts": "Alerte active", - "recent_connections": "Total Dispozitive", - "server_uptime": "Timp de funcționare a serverului", - "activity_feed": "Activitate recentă", - "no_recent_activity": "Nicio activitate recentă", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Încercați Modul Desktop pentru un spațiu de lucru cu mai multe ferestre cu widget-uri de monitorizare.", - "tip_keyboard_shortcuts": "Apăsați Ctrl+K oriunde pentru a deschide paleta de comenzi de căutare rapidă.", - "tip_address_book": "Sincronizați agenda dvs. pe toate dispozitivele conectându-vă de la clientul RustDesk.", - "tip_2fa": "Activați autentificarea cu doi factori în Setări pentru securitate suplimentară a contului.", - "tip_bulk_actions": "Selectați mai multe dispozitive și utilizați acțiuni în bloc pentru a le gestiona simultan.", - "tip_theme": "Comutați între temele întunecate și deschise în setările barei laterale.", - "tip_cdap": "Conectați dispozitive IoT și senzori industriali prin gateway-ul CDAP.", - "tip_tutorials": "Faceți clic pe butonul de ajutor din colțul din dreapta jos pentru tutoriale interactive." - }, - "devices": { - "title": "Dispozitive", - "id": "ID", - "hostname": "Hostname", - "username": "Nume de utilizator", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Creat", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Căutați dispozitive...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Stare de sincronizare", - "sync_success": "Starea a fost sincronizată cu succes", - "empty_title": "Nu s-au găsit dispozitive", - "empty_text": "Niciun dispozitiv nu se potrivește cu filtrele dvs. actuale", - "edit_title": "Detalii despre dispozitiv", - "delete_title": "Ștergeți dispozitivul", - "delete_confirm": "Sigur doriți să ștergeți dispozitivul {id}?", - "delete_warning": "Sunteți pe cale să ștergeți definitiv acest dispozitiv:", - "delete_permanent": "Această acțiune nu poate fi anulată. Toate datele asociate cu acest dispozitiv vor fi șterse definitiv din baza de date.", - "delete_success": "Dispozitivul a fost șters cu succes", - "revoke_option": "Revocați dispozitivul", - "revoke_hint": "Blocați ID-ul dispozitivului și deconectați conexiunile active", - "revoke_success": "Dispozitivul a fost revocat cu succes", - "details": "Detalii despre dispozitiv", - "ban_title": "Interziceți dispozitivul", - "ban_confirm": "Sigur doriți să interziceți dispozitivul {id}?", - "ban_success": "Dispozitivul a fost interzis cu succes", - "unban_title": "Deblocarea dispozitivului", - "unban_confirm": "Sigur doriți să dezabonați dispozitivul {id}?", - "unban_success": "Dispozitivul a fost anulat cu succes", - "change_id": "Change ID", - "change_id_title": "Schimbați ID-ul dispozitivului", - "new_id": "New ID", - "change_id_hint": "Numai 6-16 caractere, litere, cifre, liniuțe și caractere de subliniere", - "change_id_success": "ID-ul dispozitivului a fost schimbat cu succes", - "id_length_error": "ID-ul trebuie să aibă 6-16 caractere", - "id_format_error": "ID-ul poate conține doar litere, cifre, liniuțe și liniuțe de subliniere", - "bulk_delete_title": "Ștergeți mai multe dispozitive", - "bulk_delete_confirm": "Sigur doriți să ștergeți dispozitivele {count}?", - "bulk_delete_success": "Dispozitivele {count} au fost șterse cu succes", - "columns": "Columns", - "toggle_columns": "Comutați coloanele vizibile", - "not_found": "Dispozitivul nu a fost găsit", - "delete_failed": "Dispozitivul nu a putut fi șters", - "change_id_failed": "Nu s-a putut schimba ID-ul dispozitivului", - "invalid_id": "ID dispozitiv nevalid (6-16 caractere necesare)", - "invalid_id_format": "Format de identificare nevalid (numai litere, cifre, liniuțe, litere de subliniere)", - "id_exists": "ID-ul dispozitivului există deja", - "no_selection": "Niciun dispozitiv selectat", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP conectat", - "revoke": "Revocare", - "access_policy": "Politica de acces", - "unattended_access": "Acces nesupravegheat", - "enable_unattended": "Activați accesul nesupravegheat", - "access_password": "Parola de acces", - "password_configured": "Parola setată", - "no_password": "Fără parolă", - "new_password": "Parolă nouă (lasați gol pentru a rămâne la curent)", - "clear_password": "Ștergeți parola", - "access_schedule": "Program de acces", - "enable_schedule": "Activați accesul bazat pe timp", - "allowed_days": "Zile permise", - "start_time": "Ora de început", - "end_time": "Ora de sfârșit", - "timezone": "Fus orar", - "allowed_operators": "Operatori Permisi", - "all_operators": "Toți operatorii (lasați gol)", - "operators_hint": "Nume de utilizator separate prin virgulă. Lăsați gol pentru a permite toți operatorii.", - "last_updated_by": "Ultima actualizare de către", - "access_policy_saved": "Politica de acces a fost salvată", - "tabs": { - "overview": "Prezentare generală", - "hardware": "Hardware", - "metrics": "Metrici", - "connections": "Conexiuni", - "audit": "Audit", - "info": "Info", - "history": "istorie" - }, - "hardware": { - "cpu": "Procesor", - "memory": "Memorie", - "disk": "Disc", - "os": "Sistem de operare", - "hostname": "Hostname", - "uptime": "Timp de funcționare", - "load_avg": "Încărcare medie", - "network": "Adaptoare de rețea", - "no_data": "Nu sunt disponibile date hardware", - "title": "Informații hardware", - "gpu": "Placă grafică" - }, - "display_name": "Nume afișat", - "display_name_placeholder": "Nume personalizat (înlocuiește numele gazdei)", - "note_placeholder": "Note despre acest dispozitiv", - "tags": "Tags", - "filter_by_tags": "Filtrați după etichete", - "no_tags": "Nicio etichetă", - "all_groups": "Toate grupurile", - "create_group": "Creați grup", - "manage_groups": "Gestionați grupuri", - "group_name": "Numele grupului", - "group_name_placeholder": "de ex. PC-uri media", - "dynamic_group": "Grup dinamic din etichetă", - "dynamic_group_hint": "Dispozitivele cu această etichetă se alătură automat.", - "tag_filter": "Filtru etichetă", - "group_allowed_users": "Utilizatori permisi", - "group_allowed_users_hint": "Lăsați gol pentru ca grupul să fie vizibil pentru toată lumea cu permisiuni pentru dispozitiv.", - "group_tag_required": "Filtrul de etichete este necesar pentru grupurile dinamice", - "group_invalid": "Identificator de grup nevalid", - "group_not_found": "Grupul nu a fost găsit", - "group_saved": "Grupul de dispozitive a fost salvat", - "groups_saved": "Grupuri de dispozitive salvate", + "display_name": "Nume afișat", + "display_name_placeholder": "Nume personalizat (înlocuiește numele gazdei)", + "note_placeholder": "Note despre acest dispozitiv", + "tags": "Tags", + "filter_by_tags": "Filtrați după etichete", + "no_tags": "Nicio etichetă", + "all_groups": "Toate grupurile", + "create_group": "Creați grup", + "manage_groups": "Gestionați grupuri", + "group_name": "Numele grupului", + "group_name_placeholder": "de ex. PC-uri media", + "dynamic_group": "Grup dinamic din etichetă", + "dynamic_group_hint": "Dispozitivele cu această etichetă se alătură automat.", + "tag_filter": "Filtru etichetă", + "group_allowed_users": "Utilizatori permisi", + "group_allowed_users_hint": "Lăsați gol pentru ca grupul să fie vizibil pentru toată lumea cu permisiuni pentru dispozitiv.", + "group_tag_required": "Filtrul de etichete este necesar pentru grupurile dinamice", + "group_invalid": "Identificator de grup nevalid", + "group_not_found": "Grupul nu a fost găsit", + "group_saved": "Grupul de dispozitive a fost salvat", + "groups_saved": "Grupuri de dispozitive salvate", "group_membership_added": "Adăugat la grup", "group_membership_removed": "Eliminat din grup", - "no_groups": "Încă nu există grupuri", - "manual_groups": "Grupuri manuale", - "dynamic_memberships": "Membrii dinamici", - "group_allowed_user_groups": "Grupuri de utilizatori permise", - "group_allowed_user_groups_hint": "Utilizatorii din grupurile de utilizatori selectate pot accesa acest grup de dispozitive.", - "no_user_groups": "Fără grupuri de utilizatori", - "edit_group": "Editați grupul", - "delete_group": "Șterge grupul", - "delete_group_confirm": "Ștergeți grupul de dispozitive {name}?", - "group_deleted": "Grupul de dispozitive a fost șters", - "folder_group_readonly": "Grupurile susținute de foldere sunt gestionate din dosare.", - "manage_user_groups": "Gestionați grupurile de utilizatori", - "restore_failed": "Dispozitiv konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Clientul a contactat API-ul recent, dar nu este înregistrat pe serverul de semnal (UDP :21116). Reporniți clientul după migrarea serverului.", - "per_page": "Pe pagină" - }, - "keys": { - "title": "Cheile serverului", - "subtitle": "Cheie publică și configurație pentru clienții RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Informații server", - "download": "Descărcați cheia", - "show_qr": "Show QR", - "qr_hint": "Scanați acest cod QR cu aplicația mobilă RustDesk", - "no_key": "Nu a fost găsită nicio cheie publică", - "no_key_to_copy": "Nicio cheie de copiat", - "no_qr": "Codul QR nu este disponibil", - "download_success": "Fișierul cheie a fost descărcat", - "not_found": "Cheia nu a fost găsită", - "api_not_found": "Cheia API nu a fost găsită" - }, - "settings": { - "title": "Setări", - "subtitle": "Configurarea consolei și setările contului", - "tab_general": "General", - "tab_server": "Setări server", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Limba", - "change_password": "Schimbați parola", - "password_desc": "Actualizați-vă parola contului", - "current_password": "Parola curentă", - "new_password": "Parolă nouă", - "confirm_password": "Confirmați parola", - "save_password": "Actualizați parola", - "password_changed": "Parola a fost schimbată cu succes", - "fill_all_fields": "Vă rugăm să completați toate câmpurile", - "passwords_not_match": "Parolele nu se potrivesc", - "password_requirements": "Cerințe de parolă", - "password_requirements_not_met": "Parola nu îndeplinește cerințele", - "req_length": "Cel puțin 8 caractere", - "req_uppercase": "Cel puțin o literă mare", - "req_lowercase": "Cel puțin o literă mică", - "req_number": "Cel puțin un număr", - "server_info": "Informații server", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Activitate recentă din consolă", - "no_audit_logs": "Nu au fost găsite jurnalele de audit", - "backend_title": "Configurare backend", - "backend_desc": "Alegeți ce server backend să utilizați pentru gestionarea dispozitivelor și serviciile de semnal/releu.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Servere standard de semnal și releu RustDesk (hbbs + hbbr). HTTP de bază API cu puncte finale limitate.", - "backend_betterdesk_desc": "Server îmbunătățit bazat pe Go, cu autentificare REST completă API, JWT, listă de blocare, etichete, evenimente WebSocket în timp real și înregistrare de audit.", - "backend_feature_signal": "Server de semnal (înregistrare ID)", - "backend_feature_relay": "Server releu (releu de conexiune)", - "backend_feature_basic_api": "REST de bază API", - "backend_feature_full_api": "REST complet API (34+ puncte finale)", - "backend_feature_jwt": "Autentificare JWT și TOTP 2FA", - "backend_feature_blocklist": "Gestionarea listei de blocare IP/ID", - "backend_feature_tags": "Etichetele și gruparea dispozitivelor", - "backend_feature_audit": "Înregistrarea evenimentelor de audit", - "backend_feature_websocket": "Evenimente WebSocket în timp real", - "backend_connection": "Conexiune", - "backend_api_url": "API URL", - "backend_test": "Testează conexiunea", - "backend_testing": "Testare...", - "backend_save": "Aplicați Backend", - "backend_saved": "Backend-ul serverului s-a schimbat cu succes. Datele dispozitivului vor fi acum gestionate de noul backend.", - "backend_save_failed": "Schimbarea backend-ului serverului a eșuat", - "backend_test_success": "Conexiune reușită! Serverul este accesibil.", - "backend_test_failed": "Conexiunea a eșuat. Serverul este inaccesibil.", - "backend_confirm_switch": "Sigur doriți să comutați backend-ul serverului? Acest lucru va schimba modul în care sunt gestionate dispozitivele.", - "backend_unreachable": "Nu se poate comuta: serverul țintă este inaccesibil. Porniți mai întâi serverul.", - "invalid_backend": "Selecție backend nevalidă. Alegeți „rustdesk” sau „betterdesk”.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Autentificare cu doi factori", - "totp_desc": "Adăugați un nivel suplimentar de securitate cu aplicațiile de autentificare TOTP (Google Authenticator, Microsoft Authenticator, Authy etc.)", - "totp_enabled": "2FA activat", - "totp_enabled_desc": "Contul dvs. este protejat cu autentificare cu doi factori.", - "totp_disabled": "2FA nu este activat", - "totp_disabled_desc": "Activați autentificarea cu doi factori pentru securitate suplimentară a contului.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Instalați o aplicație de autentificare pe telefon", - "totp_step2": "Scanați codul QR de mai jos", - "totp_step3": "Introdu codul din 6 cifre pentru a verifica", - "totp_manual_key": "Manual key", - "totp_enter_code": "Introdu codul de verificare", - "totp_verify_enable": "Verificați și activați", - "totp_enabled_success": "Autentificare cu doi factori activată!", - "totp_recovery_warning": "Salvați aceste coduri de recuperare într-un loc sigur. Fiecare cod poate fi folosit o singură dată. Dacă pierdeți accesul la aplicația dvs. de autentificare, puteți utiliza aceste coduri pentru a vă conecta.", - "totp_done": "Done", - "totp_disable_warning": "Dezactivarea autentificării cu doi factori va face contul dvs. mai puțin sigur. Introduceți parola pentru a confirma.", - "totp_disabled_success": "Autentificarea cu doi factori a fost dezactivată.", - "tutorials_title": "Tutoriale și ghiduri", - "tutorials_desc": "Controlați tururile ghidate și ajutați suprapunerile afișate pe consolă", - "tutorials_enabled": "Activați tutorialele", - "tutorials_enabled_hint": "Când sunt dezactivate, tutorialele nu vor începe automat, iar butonul de ajutor va fi ascuns", - "tutorials_reset_hint": "Marcați toate tutorialele ca nevăzute, astfel încât să poată fi afișate din nou", - "tutorials_enabled_toast": "Tutoriale activate", - "tutorials_disabled_toast": "Tutoriale dezactivate", - "tutorials_reset_toast": "Toate tutorialele au fost resetate", - "tab_auth": "Autentificare", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Configurați autentificarea externă prin LDAP sau Active Directory. Utilizatorii se vor putea conecta cu acreditările de domeniu.", - "ldap_enabled": "Activați autentificarea LDAP", - "ldap_enabled_hint": "Când este activat, utilizatorii se pot conecta cu acreditările LDAP/AD. Conturile locale funcționează în continuare ca rezervă.", - "ldap_connection": "Conexiune la server", - "ldap_host": "Gazdă", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Omiteți verificarea TLS", - "ldap_timeout": "Timp de expirare a conexiunii (e)", - "ldap_timeout_hint": "Secunde de așteptat pentru răspunsul serverului LDAP", - "ldap_bind_mode": "Modul Legare", - "ldap_direct_bind": "Legare directă", - "ldap_direct_bind_hint": "Leagă direct cu un șablon DN în loc să folosești un cont de serviciu pentru a căuta.", - "ldap_bind_dn": "Bind DN (cont de serviciu)", - "ldap_bind_dn_hint": "Numele distinctiv al unui cont de serviciu numai pentru citire, folosit pentru a căuta utilizatori.", - "ldap_bind_password": "Legați parola", - "ldap_base_dn": "Baza DN", - "ldap_base_dn_hint": "Baza de căutare pentru a găsi utilizatori, de ex. dc=exemplu,dc=com", - "ldap_user_filter": "Filtru utilizator", - "ldap_user_filter_hint": "LDAP filtru pentru a găsi utilizatori. Folosiți {{username}} ca substituent. Implicit: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Șablon DN de legătură directă", - "ldap_direct_bind_dn_hint": "Șablon DN pentru legarea directă. Utilizați {{username}} ca substituent, de ex. uid={{username}},ou=utilizatori,dc=exemplu,dc=com", - "ldap_user_attrs": "Atributele utilizatorului", - "ldap_attr_id": "Atribut nume de utilizator", - "ldap_attr_email": "Atribut de e-mail", - "ldap_attr_name": "Atribut Nume afișat", - "ldap_group_mapping": "Grup → Maparea rolurilor", - "ldap_group_base_dn": "Grup Baza DN", - "ldap_group_base_dn_hint": "Lăsați gol pentru a utiliza DN-ul de bază principal", - "ldap_group_filter": "Filtru de grup", - "ldap_group_attr_name": "Atribut Nume Grup", - "ldap_default_role": "Rol implicit", - "ldap_default_role_hint": "Rol atribuit utilizatorilor ale căror grupuri LDAP nu se potrivesc cu nicio mapare", - "ldap_role_viewer": "Vizualizator", - "ldap_role_operator": "Operator", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Grup → Harta rolurilor", - "ldap_group_role_map_hint": "Mapați grupurile LDAP cu roluri BetterDesk. Format: GroupDN=rol separat prin | (teava). Exemplu: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Testează conexiunea", - "ldap_testing": "Testare...", - "ldap_test_success": "Conexiune reușită! Serverul LDAP este accesibil, iar acreditările de legare sunt valide.", - "ldap_test_failed": "Conexiunea a eșuat", - "ldap_save": "Salvați configurația LDAP", - "ldap_saved": "Configurația LDAP a fost salvată cu succes", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Configurați Single Sign-On prin intermediul unui furnizor OpenID Connect (Azure AD, Okta, Google, Keycloak etc.).", - "oidc_enabled": "Activați autentificarea OIDC", - "oidc_enabled_hint": "Permiteți utilizatorilor să se conecteze cu un furnizor de identitate extern", - "oidc_provider": "Furnizor de identitate", - "oidc_display_name": "Nume afișat butonului", - "oidc_display_name_hint": "Text afișat pe butonul de conectare (de exemplu, Azure AD, Okta)", - "oidc_issuer_url": "Emitentul URL", - "oidc_issuer_url_hint": "Emitent OpenID Connect URL (descoperirea va fi automată)", - "oidc_client_id": "ID client", - "oidc_client_secret": "Secretul clientului", - "oidc_redirect_url": "Redirecționare URL (apel invers)", - "oidc_redirect_url_hint": "Trebuie să se potrivească exact cu ceea ce este configurat în IdP. De obicei: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Domenii de aplicare", - "oidc_use_pkce": "Utilizați PKCE (recomandat)", - "oidc_auto_discovery": "Descoperire automată", - "oidc_allow_signup": "Creați automat utilizatori", - "oidc_manual_endpoints": "URL-uri manuale ale punctelor finale", - "oidc_authorization_url": "Punct final de autorizare", - "oidc_token_url": "Token Endpoint", - "oidc_userinfo_url": "Informații utilizator Endpoint", - "oidc_claim_mapping": "Maparea revendicărilor", - "oidc_claim_username": "Revendicare nume de utilizator", - "oidc_claim_email": "Revendicare prin e-mail", - "oidc_claim_name": "Revendicare a numelui afișat", - "oidc_claim_groups": "Revendicarea grupurilor", - "oidc_role_mapping": "Maparea rolurilor", - "oidc_default_role": "Rol implicit", - "oidc_group_role_map": "Grup → Maparea rolurilor", - "oidc_group_role_map_hint": "O mapare pe linie: group_name=rol (de exemplu, admins=admin, operators=operator)", - "oidc_test_discovery": "Test Discovery", - "oidc_testing": "Testare...", - "oidc_test_success": "Descoperire reușită! Punctele finale rezolvate.", - "oidc_test_failed": "Descoperirea a eșuat", - "oidc_issuer_required": "Emitentul URL este necesar pentru a testa descoperirea", - "oidc_save": "Salvați configurația OIDC", - "oidc_saved": "Configurația OIDC a fost salvată cu succes", - "connection_mode_title": "Strategie de conexiune", - "connection_mode_desc": "Controlați modul în care clienții desktop RustDesk se conectează.", - "connection_mode_label": "Mod implicit de conexiune", - "connection_mode_p2p_first": "P2P întâi (recomandat) — încercați conexiunea directă, reveniți la releu", - "connection_mode_relay_only": "Numai releu — toate sesiunile folosesc serverul releu", - "connection_mode_advanced": "Setări avansate", - "connection_mode_fallback_ms": "Timeout P2P fallback (ms)", - "connection_mode_same_nat_relay": "Forțați releul meu dacă ambii peer partajează același IP public (NAT hairpin)", - "connection_mode_network_hint": "P2P necesită ca portul UDP 21116 să fie accesibil între clienți.", - "connection_mode_save": "Salvare", - "connection_mode_save_restart": "Salvare și repornire server", - "connection_mode_saved": "Mod de conexiune salvat", - "connection_mode_restart_started": "Repornire server inițiată", - "connection_mode_restart_failed": "Repornire server eșuată", - "connection_mode_not_configurable": "Modul de conexiune nu este modificabil pe această instalare", - "connection_mode_source_saved": "Salvat la:", - "connection_mode_source_defaults": "Utilizând valorile implicite ale serverului (nu poate fi scris din panou)", - "connection_mode_runtime": "Server activ", - "advanced_title": "Fișiere de configurare", - "advanced_desc": "Editați direct fișierele de configurare ale serverului. Modificările pot necesita repornirea serviciilor.", - "advanced_warning": "Aceste fișiere conțin secrete. Editați numai dacă știți ce faceți.", - "advanced_files_label": "Fișiere", - "advanced_select_file": "Selectați un fișier din listă pentru a vizualiza sau edita conținutul.", - "advanced_reload": "Reîncărcare", - "advanced_save": "Salvare fișier", - "advanced_apply_restart": "Aplicare (repornire serviciu)", - "advanced_saved": "Fișier de configurare salvat", - "advanced_restart_after_save": "Configurație salvată. Reporniți serviciul afectat acum?", - "advanced_restart_confirm": "Reporniți serviciile BetterDesk asociate? Conexiunile active pot fi întrerupte scurt.", - "advanced_restart_console_confirm": "Reporniți serviciul consolei web? Sesiunea browserului dvs. va fi scurt întreruptă.", - "advanced_restart_started": "Repornire serviciu inițiată", - "advanced_restart_done": "Consolă repornită — se reîncarcă pagina...", - "advanced_restart_polling": "Se așteaptă revenirea consolei...", - "advanced_restart_timeout": "Repornire trimisă, dar consola nu a răspuns la timp. Verificați jurnalele și reîncărcați manual.", - "advanced_restart_failed": "Repornire serviciu eșuată", - "advanced_save_confirm": "Salvați modificările în acest fișier? O copie de rezervă a versiunii anterioare va fi creată.", - "advanced_unsaved_confirm": "Aveți modificări nesalvate. Renunțați la ele?", - "advanced_no_files": "Nu s-au găsit fișiere de configurare pe acest sistem.", - "advanced_readonly": "numai citire", - "advanced_missing": "lipsă", - "advanced_new_file": "Fișier nou (nu este creat până la salvare)", - "advanced_new_file_hint": "Fișier nou — adăugați conținut și salvați", - "advanced_backup_created": "copie de rezervă creată", - "advanced_error_unknown": "Fișier de configurare necunoscut", - "advanced_error_not_found": "Fișierul nu există", - "advanced_error_too_large": "Fișierul depășește dimensiunea maximă editabilă (512 KB)", - "advanced_error_binary": "Fișierele binare nu pot fi editate în panou", - "advanced_error_invalid": "Conținut fișier invalid", - "advanced_error_not_writable": "Fișierul nu poate fi scris de procesul consolei", - "enrollment_title": "Înregistrare dispozitiv (RustDesk)", - "enrollment_desc": "Controlați modul în care clienții RustDesk noi se înregistrează.", - "enrollment_require_approval": "Necesită aprobarea operatorului (mod supravegheat)", - "enrollment_require_approval_hint": "Dacă este activat, clienții necunoscuți sunt puși în coadă până când un operator îi aprobă.", - "enrollment_rich_approve": "Formular de aprobare complet (nume, dosar, grupuri, etichete)", - "enrollment_rich_approve_hint": "Afișează un dialog detaliat la aprobarea cererilor de înregistrare.", - "enrollment_tag_picker": "Alegeți din etichetele de dispozitive existente", - "enrollment_tag_picker_hint": "Permite operatorilor să aleagă din lista utilizată pe pagina Dispozitive.", - "enrollment_open_requests": "Cereri de înregistrare deschise", - "enrollment_pending_count": "{count} cerere(i) de înregistrare în așteptare", - "tab_advanced": "Avansat", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Serviciu neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Fișier", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (unitate de serviciu)", - "advanced_file_systemd-server": "systemd: betterdesk-server (unitate de serviciu)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (configurare supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestrare)", - "advanced_restart_none": "Für diese Fișier ist kein Serviciuneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Conectarea a eșuat", - "action_logout": "Logout", - "action_password_change": "Parola schimbată", - "action_2fa_enable": "2FA activat", - "action_2fa_disable": "2FA dezactivat", - "action_user_create": "Creat de utilizator", - "action_user_update": "Utilizator actualizat", - "action_user_delete": "Utilizatorul a fost șters", - "action_settings_update": "Setări actualizate", - "action_device_ban": "Dispozitiv interzis", - "action_device_unban": "Dispozitiv neinterzis", - "action_device_delete": "Dispozitiv șters" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Opțiuni de configurare", - "server_address": "Adresa serverului", - "server_address_hint": "Domeniul sau adresa IP a serverului dvs", - "custom_port": "Custom Port", - "port_hint": "Lăsați necompletat pentru implicit (21116)", - "relay_server": "Server releu", - "relay_placeholder": "La fel ca serverul ID dacă este gol", - "relay_hint": "Opțional: adresă separată a serverului de releu", - "include_key": "Includeți cheia publică în configurație", - "generate": "Generați configurația", - "output": "Ieșire de configurare", - "usage_title": "Detalii de conectare", - "generated": "Configurație generată", - "server_required": "Este necesară adresa serverului", - "nothing_to_copy": "Generați mai întâi o configurație", - "bundles_title": "Pachete de agent", - "new_bundle": "Pachet nou", - "editor_title": "Editor de pachete", - "empty_state": "Selectați un pachet din stânga sau creați unul nou pentru a începe.", - "loading": "Se încarcă…", - "no_bundles": "Încă nu există pachete. Creează-ți primul.", - "bundle_name": "Numele pachetului", - "bundle_name_hint": "Numai etichetă internă — nu este afișată utilizatorilor finali.", - "short_link": "Link de descărcare scurt", - "short_link_hint": "Folosit în URL-ul public (/d/…). Doar litere mici, cifre și cratime (2–32 caractere). Completat automat din numele pachetului — scurtați-l pentru partajare mai ușoară (ex. acme).", - "branding_section": "Branding", - "company_name": "Companie/nume de marcă", - "short_text": "Scurtă descriere", - "contact_email": "E-mail de contact", - "contact_phone": "Telefon de contact", - "contact_url": "Site-ul de contact", - "logo": "Logo", - "logo_hint": "PNG, JPEG, SVG sau WebP. Maxim 256 KB.", - "logo_clear": "Eliminați sigla", - "primary_color": "Culoare primară", - "accent_color": "Culoarea antetului", - "default_lang": "Limba implicită", - "allow_unattended": "Permiteți accesul nesupravegheat", - "allow_unattended_hint": "Când este activat, agentul arată o parolă permanentă pentru accesul operatorului.", - "save": "Salvați pachetul", - "revoke": "Revocați", - "unrevoke": "Reactivați", - "revoked": "Revocat", - "preview_title": "Previzualizare live", - "preview_hint": "Aspectul aproximativ al ferestrei agentului utilizatorului final.", - "preview_default_name": "Asistență BetterDesk", - "preview_status_ready": "Gata", - "preview_id": "ID-ul dvs", - "preview_password": "Parolă", - "preview_chat": "Chat cu suport", - "preview_settings": "Setări (doar administrator)", - "preview_quit": "Ieșire (doar administrator)", - "download_link_title": "Link de descărcare", - "download_link_hint": "Distribuiți acest link cu utilizatorii finali. Ei vor vedea o pagină de descărcare de marcă. Linkurile hex vechi funcționează în continuare după schimbarea linkului scurt.", - "open_portal": "Deschide", - "created": "Pachet creat", - "saved": "Pachet salvat", - "deleted": "Pachetul a fost șters", - "revoked_ok": "Pachetul a fost revocat", - "unrevoked_ok": "Pachetul a fost reactivat", - "link_copied": "Link copiat în clipboard", - "copy_failed": "Nu s-a putut copia automat - vă rugăm să copiați manual", - "unsaved_confirm": "Renunțați la modificările nesalvate?", - "confirm_revoke": "Revocați acest pachet? Linkul de descărcare nu va mai funcționa.", - "confirm_unrevoke": "Reactivați acest pachet?", - "confirm_delete": "Ștergeți definitiv acest pachet? Acest lucru nu poate fi anulat.", - "errors": { - "validation_failed": "Validarea a eșuat", - "name_required": "Numele pachetului este obligatoriu", - "company_name_required": "Numele companiei este obligatoriu", - "logo_invalid": "Logo-ul trebuie să fie un fișier imagine valid", - "logo_too_large": "Logo-ul trebuie să fie de 256 KB sau mai mic", - "logo_read_failed": "Nu s-a putut citi fișierul siglă", - "primary_color_invalid": "Culoarea primară trebuie să fie o valoare hexadecimală (de exemplu, #2563eb)", - "accent_color_invalid": "Culoarea antetului trebuie să fie o valoare hexadecimală (de exemplu, #1e293b)", - "contact_url_invalid": "Site-ul web de contact trebuie să fie un URL valid", - "server_host_required": "Adresa serverului public este obligatorie", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Linkul scurt poate conține doar litere mici, cifre și cratime", - "slug_too_short": "Linkul scurt trebuie să aibă cel puțin 2 caractere", - "slug_too_long": "Linkul scurt poate avea cel mult 32 de caractere", - "slug_taken": "Acest link scurt este deja folosit de alt pachet" - }, - "legacy_title": "Generator de configurare a clientului", - "connection_section": "Conexiune server", - "server_host": "Adresa serverului public", - "server_host_hint": "Numele de domeniu sau IP-ul public unde utilizatorii finali ajung la serverul dvs. BetterDesk.", - "use_https": "Utilizați HTTPS / WSS (recomandat)", - "enrollment_per_device": "Per dispozitiv — aprobați în Înregistrări", - "builds_title": "Build-uri client", - "rebuild_all": "Recompilare toate", - "rebuild_confirm": "Recompilați toți instalatorii de platformă pentru acest pachet?", - "build_status_ready": "Gata", - "build_status_pending": "În așteptare", - "build_status_building": "Se compilează", - "build_status_failed": "Eșuat", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Dispozitiveregistrierung", - "enrollment_token_pending": "Pro Dispozitiv nach Genehmigung", - "enrollment_token_set": "Pro Dispozitiv — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Dispozitive im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Gata-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} eșuat", - "build_error_hint": "Eroare build", - "preview_help": "Solicită ajutor" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "Server ID", - "relay_server": "Server releu", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Se verifică...", - "label": "Status", - "no_signal": "Fără semnal" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Conectați-vă prin Desktop Client", - "remote_viewer": "Vizualizator de la distanță", - "web_remote": "Telecomanda web", - "details": "Details", - "edit": "Editați", - "delete": "Ștergeți", - "ban": "Ban", - "unban": "Unban", - "save": "Salvați", - "cancel": "Anulează", - "confirm": "Confirmați", - "close": "Închide", - "clear": "Clear", - "ok": "OK", - "saved": "Salvat cu succes", - "back": "Înapoi", - "create": "Creați", - "dismiss": "Dismiss", - "view_all": "Vezi toate", - "cdap_viewer": "Vizualizator Snapshot CDAP", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count} în urmă", - "minutes_ago": "{count}m în urmă", - "hours_ago": "{count}h în urmă", - "days_ago": "{count}d în urmă", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Managementul utilizatorilor", - "subtitle": "Gestionați utilizatorii consolei și permisiunile", - "add_user": "Add User", - "edit_user": "Editați utilizatorul", - "username": "Nume de utilizator", - "username_placeholder": "Introduceți numele de utilizator", - "username_hint": "Doar 3-32 de caractere, litere, cifre și caractere de subliniere", - "password": "Parolă", - "password_placeholder": "Introduceți parola", - "password_hint": "Minim 8 caractere cu majuscule, numere și simboluri mixte", - "password_leave_empty": "Lăsați gol pentru a menține curent", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Creat", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Creați utilizator", - "edit": "Editați", - "reset_password": "Resetează parola", - "new_password": "Parolă nouă", - "delete_title": "Șterge utilizator", - "delete_confirm": "Sigur doriți să ștergeți utilizatorul {username}?", - "delete_success": "Utilizatorul a fost șters cu succes", - "user_created": "Utilizator creat cu succes", - "user_updated": "Utilizatorul a fost actualizat cu succes", - "password_reset_success": "Resetarea parolei cu succes", - "empty_title": "Nu s-au găsit utilizatori", - "empty_text": "Adăugați utilizatori pentru a gestiona accesul la consolă", - "fill_required": "Vă rugăm să completați toate câmpurile obligatorii", - "invalid_username": "Numele de utilizator trebuie să aibă doar 3-32 de caractere, litere, cifre și caractere de subliniere", - "username_exists": "Numele de utilizator există deja", - "weak_password": "Parola este prea slabă", - "password_too_short": "Parola trebuie să aibă cel puțin 8 caractere", - "invalid_role": "Rol nevalid", - "cannot_demote_self": "Nu te poți retrograda", - "cannot_delete_self": "Nu vă puteți șterge propriul cont", - "last_admin": "Nu se poate șterge ultimul administrator", - "admin_only": "Această funcție este disponibilă numai pentru administratori", - "password_required": "Este necesară parola", - "not_found": "Utilizatorul nu a fost găsit", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Cele mai bune practici de securitate", - "tip_strong_passwords": "Utilizați parole puternice, unice pentru fiecare utilizator", - "tip_unique_accounts": "Creați conturi individuale pentru fiecare persoană", - "tip_viewer_role": "Utilizați rolul de vizualizator pentru utilizatorii care au nevoie doar de acces de citire", - "tip_operator_role": "Utilizați rolul de operator pentru utilizatorii care trebuie să gestioneze dispozitivele, dar nu utilizatorii", - "tip_audit_logs": "Examinați în mod regulat jurnalele de audit pentru activități suspecte", - "role_pro": "Pro (doar API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Administrator server", - "role_global_admin": "Administrator global", - "organizations": "Organizații", - "user_organizations": "Organizații pentru {username}", - "no_organizations": "Utilizatorul nu este alocat niciunei organizații", - "org_removed": "Atribuirea organizației a fost eliminată", - "server_role_label": "Rol de server", - "server_role_hint": "Determină ce poate face utilizatorul pe întreaga consolă (acces la panou, configurare server, audit etc.).", - "org_membership_section": "Calitatea de membru al organizației", - "org_membership_hint": "Un utilizator poate aparține mai multor organizații. Rolul organizației controlează numai permisiunile din interiorul acelei organizații și este independent de rolul de server de mai sus.", - "column_organizations": "Organizații", - "no_orgs_short": "—", - "org_count_one": "{count} organizație", - "org_count_many": "{count} organizații", - "all_orgs_assigned": "Utilizatorul este deja membru al fiecărei organizații.", - "user_groups": "Grupuri de utilizatori", - "user_groups_hint": "Grupurile de utilizatori pot fi utilizate pentru a acorda acces la grupurile de dispozitive selectate.", - "loading_user_groups": "Se încarcă grupurile de utilizatori...", - "no_user_groups": "Nu sunt disponibile grupuri de utilizatori", - "create_user_group": "Creați grup", - "edit_user_group": "Editați grupul de utilizatori", - "delete_user_group": "Ștergeți grupul de utilizatori", - "delete_user_group_confirm": "Ștergeți grupul de utilizatori {name}? Membrii vor pierde accesul acordat prin acest grup.", - "user_group_created": "Grup de utilizatori creat", - "user_group_updated": "Grupul de utilizatori a fost actualizat", - "user_group_deleted": "Grupul de utilizatori a fost șters", - "user_group_not_found": "Grupul de utilizatori nu a fost găsit", - "group_name": "Numele grupului", - "group_name_placeholder": "Operatori", - "group_note": "Note", - "group_note_placeholder": "Notă opțională", - "group_name_required": "Numele grupului este obligatoriu", - "group_members_count": "membrii {count}", - "provider": "Furnizor", - "provider_local": "Local", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Gestionat de furnizorul de identitate", - "provider_managed_hint": "Acest cont este gestionat de un furnizor extern de identitate (LDAP/AD sau SSO). Parola și rolul sunt controlate de furnizor." - }, - "folders": { - "title": "Folders", - "create": "Creați dosar", - "edit": "Editați folderul", - "delete": "Ștergeți dosarul", - "name": "Folder Name", - "name_placeholder": "Introduceți numele folderului", - "name_required": "Numele dosarului este obligatoriu", - "name_too_long": "Numele dosarului este prea lung (maximum 50 de caractere)", - "color": "Color", - "icon": "Icon", - "not_found": "Dosarul nu a fost găsit", - "delete_confirm": "Sigur doriți să ștergeți acest dosar? Dispozitivele vor fi anulate.", - "delete_success": "Dosarul a fost șters cu succes", - "created": "Dosar creat cu succes", - "updated": "Dosarul a fost actualizat cu succes", - "no_devices_selected": "Niciun dispozitiv selectat", - "devices_moved": "Dispozitivele au fost mutate cu succes", - "device_assigned": "Dispozitiv alocat folderului", - "unassigned": "Unassigned", - "all_devices": "Toate Dispozitivele", - "drag_hint": "Trageți dispozitivele în dosare pentru a le organiza", - "move_to": "Mutați la", - "toggle_sidebar": "Comutați bara laterală" - }, + "no_groups": "Încă nu există grupuri", + "manual_groups": "Grupuri manuale", + "dynamic_memberships": "Membrii dinamici", + "group_allowed_user_groups": "Grupuri de utilizatori permise", + "group_allowed_user_groups_hint": "Utilizatorii din grupurile de utilizatori selectate pot accesa acest grup de dispozitive.", + "no_user_groups": "Fără grupuri de utilizatori", + "edit_group": "Editați grupul", + "delete_group": "Șterge grupul", + "delete_group_confirm": "Ștergeți grupul de dispozitive {name}?", + "group_deleted": "Grupul de dispozitive a fost șters", + "folder_group_readonly": "Grupurile susținute de foldere sunt gestionate din dosare.", + "manage_user_groups": "Gestionați grupurile de utilizatori", + "restore_failed": "Dispozitiv konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Clientul a contactat API-ul recent, dar nu este înregistrat pe serverul de semnal (UDP :21116). Reporniți clientul după migrarea serverului.", + "per_page": "Pe pagină" + }, + "keys": { + "title": "Cheile serverului", + "subtitle": "Cheie publică și configurație pentru clienții RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Informații server", + "download": "Descărcați cheia", + "show_qr": "Show QR", + "qr_hint": "Scanați acest cod QR cu aplicația mobilă RustDesk", + "no_key": "Nu a fost găsită nicio cheie publică", + "no_key_to_copy": "Nicio cheie de copiat", + "no_qr": "Codul QR nu este disponibil", + "download_success": "Fișierul cheie a fost descărcat", + "not_found": "Cheia nu a fost găsită", + "api_not_found": "Cheia API nu a fost găsită" + }, + "settings": { + "title": "Setări", + "subtitle": "Configurarea consolei și setările contului", + "tab_general": "General", + "tab_server": "Setări server", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Limba", + "change_password": "Schimbați parola", + "password_desc": "Actualizați-vă parola contului", + "current_password": "Parola curentă", + "new_password": "Parolă nouă", + "confirm_password": "Confirmați parola", + "save_password": "Actualizați parola", + "password_changed": "Parola a fost schimbată cu succes", + "fill_all_fields": "Vă rugăm să completați toate câmpurile", + "passwords_not_match": "Parolele nu se potrivesc", + "password_requirements": "Cerințe de parolă", + "password_requirements_not_met": "Parola nu îndeplinește cerințele", + "req_length": "Cel puțin 8 caractere", + "req_uppercase": "Cel puțin o literă mare", + "req_lowercase": "Cel puțin o literă mică", + "req_number": "Cel puțin un număr", + "server_info": "Informații server", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Activitate recentă din consolă", + "no_audit_logs": "Nu au fost găsite jurnalele de audit", + "backend_title": "Configurare backend", + "backend_desc": "Alegeți ce server backend să utilizați pentru gestionarea dispozitivelor și serviciile de semnal/releu.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Servere standard de semnal și releu RustDesk (hbbs + hbbr). HTTP de bază API cu puncte finale limitate.", + "backend_betterdesk_desc": "Server îmbunătățit bazat pe Go, cu autentificare REST completă API, JWT, listă de blocare, etichete, evenimente WebSocket în timp real și înregistrare de audit.", + "backend_feature_signal": "Server de semnal (înregistrare ID)", + "backend_feature_relay": "Server releu (releu de conexiune)", + "backend_feature_basic_api": "REST de bază API", + "backend_feature_full_api": "REST complet API (34+ puncte finale)", + "backend_feature_jwt": "Autentificare JWT și TOTP 2FA", + "backend_feature_blocklist": "Gestionarea listei de blocare IP/ID", + "backend_feature_tags": "Etichetele și gruparea dispozitivelor", + "backend_feature_audit": "Înregistrarea evenimentelor de audit", + "backend_feature_websocket": "Evenimente WebSocket în timp real", + "backend_connection": "Conexiune", + "backend_api_url": "API URL", + "backend_test": "Testează conexiunea", + "backend_testing": "Testare...", + "backend_save": "Aplicați Backend", + "backend_saved": "Backend-ul serverului s-a schimbat cu succes. Datele dispozitivului vor fi acum gestionate de noul backend.", + "backend_save_failed": "Schimbarea backend-ului serverului a eșuat", + "backend_test_success": "Conexiune reușită! Serverul este accesibil.", + "backend_test_failed": "Conexiunea a eșuat. Serverul este inaccesibil.", + "backend_confirm_switch": "Sigur doriți să comutați backend-ul serverului? Acest lucru va schimba modul în care sunt gestionate dispozitivele.", + "backend_unreachable": "Nu se poate comuta: serverul țintă este inaccesibil. Porniți mai întâi serverul.", + "invalid_backend": "Selecție backend nevalidă. Alegeți „rustdesk” sau „betterdesk”.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Autentificare cu doi factori", + "totp_desc": "Adăugați un nivel suplimentar de securitate cu aplicațiile de autentificare TOTP (Google Authenticator, Microsoft Authenticator, Authy etc.)", + "totp_enabled": "2FA activat", + "totp_enabled_desc": "Contul dvs. este protejat cu autentificare cu doi factori.", + "totp_disabled": "2FA nu este activat", + "totp_disabled_desc": "Activați autentificarea cu doi factori pentru securitate suplimentară a contului.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Instalați o aplicație de autentificare pe telefon", + "totp_step2": "Scanați codul QR de mai jos", + "totp_step3": "Introdu codul din 6 cifre pentru a verifica", + "totp_manual_key": "Manual key", + "totp_enter_code": "Introdu codul de verificare", + "totp_verify_enable": "Verificați și activați", + "totp_enabled_success": "Autentificare cu doi factori activată!", + "totp_recovery_warning": "Salvați aceste coduri de recuperare într-un loc sigur. Fiecare cod poate fi folosit o singură dată. Dacă pierdeți accesul la aplicația dvs. de autentificare, puteți utiliza aceste coduri pentru a vă conecta.", + "totp_done": "Done", + "totp_disable_warning": "Dezactivarea autentificării cu doi factori va face contul dvs. mai puțin sigur. Introduceți parola pentru a confirma.", + "totp_disabled_success": "Autentificarea cu doi factori a fost dezactivată.", + "tutorials_title": "Tutoriale și ghiduri", + "tutorials_desc": "Controlați tururile ghidate și ajutați suprapunerile afișate pe consolă", + "tutorials_enabled": "Activați tutorialele", + "tutorials_enabled_hint": "Când sunt dezactivate, tutorialele nu vor începe automat, iar butonul de ajutor va fi ascuns", + "tutorials_reset_hint": "Marcați toate tutorialele ca nevăzute, astfel încât să poată fi afișate din nou", + "tutorials_enabled_toast": "Tutoriale activate", + "tutorials_disabled_toast": "Tutoriale dezactivate", + "tutorials_reset_toast": "Toate tutorialele au fost resetate", + "tab_auth": "Autentificare", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Configurați autentificarea externă prin LDAP sau Active Directory. Utilizatorii se vor putea conecta cu acreditările de domeniu.", + "ldap_enabled": "Activați autentificarea LDAP", + "ldap_enabled_hint": "Când este activat, utilizatorii se pot conecta cu acreditările LDAP/AD. Conturile locale funcționează în continuare ca rezervă.", + "ldap_connection": "Conexiune la server", + "ldap_host": "Gazdă", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Omiteți verificarea TLS", + "ldap_timeout": "Timp de expirare a conexiunii (e)", + "ldap_timeout_hint": "Secunde de așteptat pentru răspunsul serverului LDAP", + "ldap_bind_mode": "Modul Legare", + "ldap_direct_bind": "Legare directă", + "ldap_direct_bind_hint": "Leagă direct cu un șablon DN în loc să folosești un cont de serviciu pentru a căuta.", + "ldap_bind_dn": "Bind DN (cont de serviciu)", + "ldap_bind_dn_hint": "Numele distinctiv al unui cont de serviciu numai pentru citire, folosit pentru a căuta utilizatori.", + "ldap_bind_password": "Legați parola", + "ldap_base_dn": "Baza DN", + "ldap_base_dn_hint": "Baza de căutare pentru a găsi utilizatori, de ex. dc=exemplu,dc=com", + "ldap_user_filter": "Filtru utilizator", + "ldap_user_filter_hint": "LDAP filtru pentru a găsi utilizatori. Folosiți {{username}} ca substituent. Implicit: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Șablon DN de legătură directă", + "ldap_direct_bind_dn_hint": "Șablon DN pentru legarea directă. Utilizați {{username}} ca substituent, de ex. uid={{username}},ou=utilizatori,dc=exemplu,dc=com", + "ldap_user_attrs": "Atributele utilizatorului", + "ldap_attr_id": "Atribut nume de utilizator", + "ldap_attr_email": "Atribut de e-mail", + "ldap_attr_name": "Atribut Nume afișat", + "ldap_group_mapping": "Grup → Maparea rolurilor", + "ldap_group_base_dn": "Grup Baza DN", + "ldap_group_base_dn_hint": "Lăsați gol pentru a utiliza DN-ul de bază principal", + "ldap_group_filter": "Filtru de grup", + "ldap_group_attr_name": "Atribut Nume Grup", + "ldap_default_role": "Rol implicit", + "ldap_default_role_hint": "Rol atribuit utilizatorilor ale căror grupuri LDAP nu se potrivesc cu nicio mapare", + "ldap_role_viewer": "Vizualizator", + "ldap_role_operator": "Operator", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Grup → Harta rolurilor", + "ldap_group_role_map_hint": "Mapați grupurile LDAP cu roluri BetterDesk. Format: GroupDN=rol separat prin | (teava). Exemplu: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Testează conexiunea", + "ldap_testing": "Testare...", + "ldap_test_success": "Conexiune reușită! Serverul LDAP este accesibil, iar acreditările de legare sunt valide.", + "ldap_test_failed": "Conexiunea a eșuat", + "ldap_save": "Salvați configurația LDAP", + "ldap_saved": "Configurația LDAP a fost salvată cu succes", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Configurați Single Sign-On prin intermediul unui furnizor OpenID Connect (Azure AD, Okta, Google, Keycloak etc.).", + "oidc_enabled": "Activați autentificarea OIDC", + "oidc_enabled_hint": "Permiteți utilizatorilor să se conecteze cu un furnizor de identitate extern", + "oidc_provider": "Furnizor de identitate", + "oidc_display_name": "Nume afișat butonului", + "oidc_display_name_hint": "Text afișat pe butonul de conectare (de exemplu, Azure AD, Okta)", + "oidc_issuer_url": "Emitentul URL", + "oidc_issuer_url_hint": "Emitent OpenID Connect URL (descoperirea va fi automată)", + "oidc_client_id": "ID client", + "oidc_client_secret": "Secretul clientului", + "oidc_redirect_url": "Redirecționare URL (apel invers)", + "oidc_redirect_url_hint": "Trebuie să se potrivească exact cu ceea ce este configurat în IdP. De obicei: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Domenii de aplicare", + "oidc_use_pkce": "Utilizați PKCE (recomandat)", + "oidc_auto_discovery": "Descoperire automată", + "oidc_allow_signup": "Creați automat utilizatori", + "oidc_manual_endpoints": "URL-uri manuale ale punctelor finale", + "oidc_authorization_url": "Punct final de autorizare", + "oidc_token_url": "Token Endpoint", + "oidc_userinfo_url": "Informații utilizator Endpoint", + "oidc_claim_mapping": "Maparea revendicărilor", + "oidc_claim_username": "Revendicare nume de utilizator", + "oidc_claim_email": "Revendicare prin e-mail", + "oidc_claim_name": "Revendicare a numelui afișat", + "oidc_claim_groups": "Revendicarea grupurilor", + "oidc_role_mapping": "Maparea rolurilor", + "oidc_default_role": "Rol implicit", + "oidc_group_role_map": "Grup → Maparea rolurilor", + "oidc_group_role_map_hint": "O mapare pe linie: group_name=rol (de exemplu, admins=admin, operators=operator)", + "oidc_test_discovery": "Test Discovery", + "oidc_testing": "Testare...", + "oidc_test_success": "Descoperire reușită! Punctele finale rezolvate.", + "oidc_test_failed": "Descoperirea a eșuat", + "oidc_issuer_required": "Emitentul URL este necesar pentru a testa descoperirea", + "oidc_save": "Salvați configurația OIDC", + "oidc_saved": "Configurația OIDC a fost salvată cu succes", + "connection_mode_title": "Strategie de conexiune", + "connection_mode_desc": "Controlați modul în care clienții desktop RustDesk se conectează.", + "connection_mode_label": "Mod implicit de conexiune", + "connection_mode_p2p_first": "P2P întâi (recomandat) — încercați conexiunea directă, reveniți la releu", + "connection_mode_relay_only": "Numai releu — toate sesiunile folosesc serverul releu", + "connection_mode_advanced": "Setări avansate", + "connection_mode_fallback_ms": "Timeout P2P fallback (ms)", + "connection_mode_same_nat_relay": "Forțați releul meu dacă ambii peer partajează același IP public (NAT hairpin)", + "connection_mode_network_hint": "P2P necesită ca portul UDP 21116 să fie accesibil între clienți.", + "connection_mode_save": "Salvare", + "connection_mode_save_restart": "Salvare și repornire server", + "connection_mode_saved": "Mod de conexiune salvat", + "connection_mode_restart_started": "Repornire server inițiată", + "connection_mode_restart_failed": "Repornire server eșuată", + "connection_mode_not_configurable": "Modul de conexiune nu este modificabil pe această instalare", + "connection_mode_source_saved": "Salvat la:", + "connection_mode_source_defaults": "Utilizând valorile implicite ale serverului (nu poate fi scris din panou)", + "connection_mode_runtime": "Server activ", + "advanced_title": "Fișiere de configurare", + "advanced_desc": "Editați direct fișierele de configurare ale serverului. Modificările pot necesita repornirea serviciilor.", + "advanced_warning": "Aceste fișiere conțin secrete. Editați numai dacă știți ce faceți.", + "advanced_files_label": "Fișiere", + "advanced_select_file": "Selectați un fișier din listă pentru a vizualiza sau edita conținutul.", + "advanced_reload": "Reîncărcare", + "advanced_save": "Salvare fișier", + "advanced_apply_restart": "Aplicare (repornire serviciu)", + "advanced_saved": "Fișier de configurare salvat", + "advanced_restart_after_save": "Configurație salvată. Reporniți serviciul afectat acum?", + "advanced_restart_confirm": "Reporniți serviciile BetterDesk asociate? Conexiunile active pot fi întrerupte scurt.", + "advanced_restart_console_confirm": "Reporniți serviciul consolei web? Sesiunea browserului dvs. va fi scurt întreruptă.", + "advanced_restart_started": "Repornire serviciu inițiată", + "advanced_restart_done": "Consolă repornită — se reîncarcă pagina...", + "advanced_restart_polling": "Se așteaptă revenirea consolei...", + "advanced_restart_timeout": "Repornire trimisă, dar consola nu a răspuns la timp. Verificați jurnalele și reîncărcați manual.", + "advanced_restart_failed": "Repornire serviciu eșuată", + "advanced_save_confirm": "Salvați modificările în acest fișier? O copie de rezervă a versiunii anterioare va fi creată.", + "advanced_unsaved_confirm": "Aveți modificări nesalvate. Renunțați la ele?", + "advanced_no_files": "Nu s-au găsit fișiere de configurare pe acest sistem.", + "advanced_readonly": "numai citire", + "advanced_missing": "lipsă", + "advanced_new_file": "Fișier nou (nu este creat până la salvare)", + "advanced_new_file_hint": "Fișier nou — adăugați conținut și salvați", + "advanced_backup_created": "copie de rezervă creată", + "advanced_error_unknown": "Fișier de configurare necunoscut", + "advanced_error_not_found": "Fișierul nu există", + "advanced_error_too_large": "Fișierul depășește dimensiunea maximă editabilă (512 KB)", + "advanced_error_binary": "Fișierele binare nu pot fi editate în panou", + "advanced_error_invalid": "Conținut fișier invalid", + "advanced_error_not_writable": "Fișierul nu poate fi scris de procesul consolei", + "enrollment_title": "Înregistrare dispozitiv (RustDesk)", + "enrollment_desc": "Controlați modul în care clienții RustDesk noi se înregistrează.", + "enrollment_require_approval": "Necesită aprobarea operatorului (mod supravegheat)", + "enrollment_require_approval_hint": "Dacă este activat, clienții necunoscuți sunt puși în coadă până când un operator îi aprobă.", + "enrollment_rich_approve": "Formular de aprobare complet (nume, dosar, grupuri, etichete)", + "enrollment_rich_approve_hint": "Afișează un dialog detaliat la aprobarea cererilor de înregistrare.", + "enrollment_tag_picker": "Alegeți din etichetele de dispozitive existente", + "enrollment_tag_picker_hint": "Permite operatorilor să aleagă din lista utilizată pe pagina Dispozitive.", + "enrollment_open_requests": "Cereri de înregistrare deschise", + "enrollment_pending_count": "{count} cerere(i) de înregistrare în așteptare", + "tab_advanced": "Avansat", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Serviciu neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Fișier", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (unitate de serviciu)", + "advanced_file_systemd-server": "systemd: betterdesk-server (unitate de serviciu)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (configurare supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orchestrare)", + "advanced_restart_none": "Für diese Fișier ist kein Serviciuneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Conectarea a eșuat", + "action_logout": "Logout", + "action_password_change": "Parola schimbată", + "action_2fa_enable": "2FA activat", + "action_2fa_disable": "2FA dezactivat", + "action_user_create": "Creat de utilizator", + "action_user_update": "Utilizator actualizat", + "action_user_delete": "Utilizatorul a fost șters", + "action_settings_update": "Setări actualizate", + "action_device_ban": "Dispozitiv interzis", + "action_device_unban": "Dispozitiv neinterzis", + "action_device_delete": "Dispozitiv șters" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Funcție timpurie — generatorul de pachete agent este în dezvoltare activă.", + "config_options": "Opțiuni de configurare", + "server_address": "Adresa serverului", + "server_address_hint": "Domeniul sau adresa IP a serverului dvs", + "custom_port": "Custom Port", + "port_hint": "Lăsați necompletat pentru implicit (21116)", + "relay_server": "Server releu", + "relay_placeholder": "La fel ca serverul ID dacă este gol", + "relay_hint": "Opțional: adresă separată a serverului de releu", + "include_key": "Includeți cheia publică în configurație", + "generate": "Generați configurația", + "output": "Ieșire de configurare", + "usage_title": "Detalii de conectare", + "generated": "Configurație generată", + "server_required": "Este necesară adresa serverului", + "nothing_to_copy": "Generați mai întâi o configurație", + "bundles_title": "Pachete de agent", + "new_bundle": "Pachet nou", + "editor_title": "Editor de pachete", + "empty_state": "Selectați un pachet din stânga sau creați unul nou pentru a începe.", + "loading": "Se încarcă…", + "no_bundles": "Încă nu există pachete. Creează-ți primul.", + "bundle_name": "Numele pachetului", + "bundle_name_hint": "Numai etichetă internă — nu este afișată utilizatorilor finali.", + "short_link": "Link de descărcare scurt", + "short_link_hint": "Folosit în URL-ul public (/d/…). Doar litere mici, cifre și cratime (2–32 caractere). Completat automat din numele pachetului — scurtați-l pentru partajare mai ușoară (ex. acme).", + "branding_section": "Branding", + "company_name": "Companie/nume de marcă", + "short_text": "Scurtă descriere", + "contact_email": "E-mail de contact", + "contact_phone": "Telefon de contact", + "contact_url": "Site-ul de contact", + "logo": "Logo", + "logo_hint": "PNG, JPEG, SVG sau WebP. Maxim 256 KB.", + "logo_clear": "Eliminați sigla", + "primary_color": "Culoare primară", + "accent_color": "Culoarea antetului", + "default_lang": "Limba implicită", + "allow_unattended": "Permiteți accesul nesupravegheat", + "allow_unattended_hint": "Când este activat, agentul arată o parolă permanentă pentru accesul operatorului.", + "save": "Salvați pachetul", + "revoke": "Revocați", + "unrevoke": "Reactivați", + "revoked": "Revocat", + "preview_title": "Previzualizare live", + "preview_hint": "Aspectul aproximativ al ferestrei agentului utilizatorului final.", + "preview_default_name": "Asistență BetterDesk", + "preview_status_ready": "Gata", + "preview_id": "ID-ul dvs", + "preview_password": "Parolă", + "preview_chat": "Chat cu suport", + "preview_settings": "Setări (doar administrator)", + "preview_quit": "Ieșire (doar administrator)", + "download_link_title": "Link de descărcare", + "download_link_hint": "Distribuiți acest link cu utilizatorii finali. Ei vor vedea o pagină de descărcare de marcă. Linkurile hex vechi funcționează în continuare după schimbarea linkului scurt.", + "open_portal": "Deschide", + "created": "Pachet creat", + "saved": "Pachet salvat", + "deleted": "Pachetul a fost șters", + "revoked_ok": "Pachetul a fost revocat", + "unrevoked_ok": "Pachetul a fost reactivat", + "link_copied": "Link copiat în clipboard", + "copy_failed": "Nu s-a putut copia automat - vă rugăm să copiați manual", + "unsaved_confirm": "Renunțați la modificările nesalvate?", + "confirm_revoke": "Revocați acest pachet? Linkul de descărcare nu va mai funcționa.", + "confirm_unrevoke": "Reactivați acest pachet?", + "confirm_delete": "Ștergeți definitiv acest pachet? Acest lucru nu poate fi anulat.", "errors": { - "forbidden_title": "Acces refuzat", - "forbidden_message": "Nu aveți permisiunea de a accesa această resursă.", - "not_found_title": "Pagina nu a fost găsită", - "not_found_message": "Pagina pe care o cauți nu există sau a fost mutată.", - "server_error_title": "Eroare de server", - "server_error_message": "Ceva a mers prost. Vă rugăm să încercați din nou mai târziu.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Nu s-au încărcat dispozitivele", - "load_key_failed": "Nu s-a încărcat cheia", - "load_qr_failed": "Nu s-a încărcat QR", - "load_audit_failed": "Nu s-a încărcat jurnalul de audit", - "load_users_failed": "Nu s-au încărcat utilizatorii", - "load_folders_failed": "Nu s-au încărcat folderele", - "download_failed": "Descărcarea a eșuat", - "logout_failed": "Deconectarea a eșuat", - "password_change_failed": "Schimbarea parolei a eșuat", - "language_change_failed": "Nu s-a putut schimba limba", - "ban_failed": "Dispozitivul nu a fost interzis", - "unban_failed": "Dispozitivul nu a putut fi anulat", - "delete_failed": "Dispozitivul nu a putut fi șters", - "change_id_failed": "Nu s-a putut schimba ID-ul dispozitivului", - "bulk_delete_failed": "Dispozitivele nu s-au șters", - "sync_failed": "Starea de sincronizare a eșuat", - "error": "Error", - "not_found": "Not found", - "server_error": "Eroare de server", - "load_device_failed": "Nu s-a încărcat dispozitivul", - "load_orgs_failed": "Nu s-au încărcat organizațiile" + "validation_failed": "Validarea a eșuat", + "name_required": "Numele pachetului este obligatoriu", + "company_name_required": "Numele companiei este obligatoriu", + "logo_invalid": "Logo-ul trebuie să fie un fișier imagine valid", + "logo_too_large": "Logo-ul trebuie să fie de 256 KB sau mai mic", + "logo_read_failed": "Nu s-a putut citi fișierul siglă", + "primary_color_invalid": "Culoarea primară trebuie să fie o valoare hexadecimală (de exemplu, #2563eb)", + "accent_color_invalid": "Culoarea antetului trebuie să fie o valoare hexadecimală (de exemplu, #1e293b)", + "contact_url_invalid": "Site-ul web de contact trebuie să fie un URL valid", + "server_host_required": "Adresa serverului public este obligatorie", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Linkul scurt poate conține doar litere mici, cifre și cratime", + "slug_too_short": "Linkul scurt trebuie să aibă cel puțin 2 caractere", + "slug_too_long": "Linkul scurt poate avea cel mult 32 de caractere", + "slug_taken": "Acest link scurt este deja folosit de alt pachet" }, - "remote": { - "title": "Desktop la distanță", - "connecting": "Se conectează...", - "waiting_password": "Se așteaptă parola", - "authenticating": "Se autentifică...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Parola obligatorie", - "enter_password_for": "Introduceți parola pentru dispozitiv", - "password_placeholder": "Parola dispozitivului", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Înapoi la Dispozitive", - "fullscreen": "Fullscreen", - "toggle_audio": "Comutați audio", - "send_keys": "Trimite chei", - "scale_mode": "Scale Mode", - "scale_fit": "Potrivire la ecran", - "scale_fill": "Fill Window", - "scale_original": "Dimensiune originală (1:1)", - "scale_stretch": "Întindeți pentru a umple", - "actions": "Actions", - "lock_screen": "Blocare ecran", - "restart_remote": "Reporniți dispozitivul de la distanță", - "refresh_screen": "Actualizează ecranul", - "clipboard_paste": "Lipiți din Clipboard", - "block_input": "Block Input", - "display_settings": "Setări de afișare", - "image_quality": "Calitatea imaginii", - "quality_best": "Cel mai bun (calitate completă, 60 fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Afișați cursorul de la distanță", - "lock_after_session": "Blocare după sesiune", - "privacy_mode": "Modul de confidențialitate", - "disable_clipboard": "Dezactivează Clipboard", - "chat": "Chat", - "chat_placeholder": "Tastați un mesaj...", - "record": "Ecran de înregistrare", - "view_only": "Numai vizualizare", - "pin_toolbar": "Pin Bara de instrumente", - "monitors": "Monitors", - "select_monitor": "Selectați Monitor", - "quality_speed": "Viteză (calitate scăzută, 60 fps)", - "quality_quality": "Calitate (cea mai bună, 30 fps)", - "recording_started": "Înregistrarea a început", - "recording_stopped": "Înregistrarea sa oprit", - "download_recording": "Descărcați înregistrarea", - "e2e_encrypted": "Criptat de la capăt la capăt", - "e2e_key_exchange": "Se stabilește canalul securizat...", - "confirm_restart": "Sigur doriți să reporniți dispozitivul la distanță?", - "webcodecs_not_supported": "Browserul dvs. nu acceptă WebCodecs API. Utilizați Chrome 94+ sau Edge 94+.", - "webcodecs_insecure_context": "WebCodecs indisponibil peste HTTP. Videoclipul folosește software alternativ. Pentru performanță optimă, utilizați HTTPS.", - "webcodecs_fallback_active": "Decodor video software activ (performanță limitată)", - "click_to_start": "Faceți clic pentru a începe", - "autoplay_blocked": "Browserul necesită interacțiunea utilizatorului pentru a porni redarea video și audio.", - "start_playback": "Începeți redarea", - "new_connection": "Conexiune nouă", - "device_id_placeholder": "Introduceți ID-ul dispozitivului", - "http_warning": "Modul HTTP: limitat la decodare software H.264 (~15 FPS). Utilizați HTTPS pentru performanță maximă (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Transfer de fișiere", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Acest folder este gol", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Transferul a eșuat", - "file_show_hidden": "Afișează fișierele ascunse", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Introduceți numele folderului:", - "file_parent": "Dosarul părinte", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Introduceți un nume nou:", - "file_delete_confirm": "Sigur doriți să ștergeți acest articol?", - "file_cancelled": "Transfer anulat", - "2fa_required": "Este necesară verificarea 2FA", - "2fa_hint": "Introdu codul din 6 cifre din aplicația de autentificare", - "2fa_invalid": "Introduceți un cod valid din 6 cifre", - "verify": "Verify", - "use_cdap_fallback": "Utilizați vizualizatorul CDAP", - "cdap_fallback_hint": "Deschideți vizualizatorul ușor de interogare JPEG care utilizează bd-signal/CDAP în loc de releul RustDesk. Util dacă peer-ul este offline pe releu dar accesibil prin canalul de management agent.", - "clipboard_empty": "Clipboard-ul este gol", - "clipboard_denied": "Accesul la clipboard a fost refuzat. HTTPS este necesar sau permisiunea nu a fost acordată.", - "file_loading": "Se încarcă...", - "file_timeout": "Dispozitivul de la distanță nu a răspuns. Este posibil ca transferul de fișiere să nu fie acceptat sau să fie dezactivat pe computerul de la distanță.", - "codec": "Codec video", - "codec_auto": "Auto (recomandat)" + "legacy_title": "Generator de configurare a clientului", + "connection_section": "Conexiune server", + "server_host": "Adresa serverului public", + "server_host_hint": "Numele de domeniu sau IP-ul public unde utilizatorii finali ajung la serverul dvs. BetterDesk.", + "use_https": "Utilizați HTTPS / WSS (recomandat)", + "enrollment_per_device": "Per dispozitiv — aprobați în Înregistrări", + "builds_title": "Build-uri client", + "rebuild_all": "Recompilare toate", + "rebuild_confirm": "Recompilați toți instalatorii de platformă pentru acest pachet?", + "build_status_ready": "Gata", + "build_status_pending": "În așteptare", + "build_status_building": "Se compilează", + "build_status_failed": "Eșuat", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Dispozitiveregistrierung", + "enrollment_token_pending": "Pro Dispozitiv nach Genehmigung", + "enrollment_token_set": "Pro Dispozitiv — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Dispozitive im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Gata-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} eșuat", + "build_error_hint": "Eroare build", + "preview_help": "Solicită ajutor" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "Server ID", + "relay_server": "Server releu", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Se verifică...", + "label": "Status", + "no_signal": "Fără semnal" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Conectați-vă prin Desktop Client", + "remote_viewer": "Vizualizator de la distanță", + "web_remote": "Telecomanda web", + "details": "Details", + "edit": "Editați", + "delete": "Ștergeți", + "ban": "Ban", + "unban": "Unban", + "save": "Salvați", + "cancel": "Anulează", + "confirm": "Confirmați", + "close": "Închide", + "clear": "Clear", + "ok": "OK", + "saved": "Salvat cu succes", + "back": "Înapoi", + "create": "Creați", + "dismiss": "Dismiss", + "view_all": "Vezi toate", + "cdap_viewer": "Vizualizator Snapshot CDAP", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count} în urmă", + "minutes_ago": "{count}m în urmă", + "hours_ago": "{count}h în urmă", + "days_ago": "{count}d în urmă", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Managementul utilizatorilor", + "subtitle": "Gestionați utilizatorii consolei și permisiunile", + "add_user": "Add User", + "edit_user": "Editați utilizatorul", + "username": "Nume de utilizator", + "username_placeholder": "Introduceți numele de utilizator", + "username_hint": "Doar 3-32 de caractere, litere, cifre și caractere de subliniere", + "password": "Parolă", + "password_placeholder": "Introduceți parola", + "password_hint": "Minim 8 caractere cu majuscule, numere și simboluri mixte", + "password_leave_empty": "Lăsați gol pentru a menține curent", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Creat", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Creați utilizator", + "edit": "Editați", + "reset_password": "Resetează parola", + "new_password": "Parolă nouă", + "delete_title": "Șterge utilizator", + "delete_confirm": "Sigur doriți să ștergeți utilizatorul {username}?", + "delete_success": "Utilizatorul a fost șters cu succes", + "user_created": "Utilizator creat cu succes", + "user_updated": "Utilizatorul a fost actualizat cu succes", + "password_reset_success": "Resetarea parolei cu succes", + "empty_title": "Nu s-au găsit utilizatori", + "empty_text": "Adăugați utilizatori pentru a gestiona accesul la consolă", + "fill_required": "Vă rugăm să completați toate câmpurile obligatorii", + "invalid_username": "Numele de utilizator trebuie să aibă doar 3-32 de caractere, litere, cifre și caractere de subliniere", + "username_exists": "Numele de utilizator există deja", + "weak_password": "Parola este prea slabă", + "password_too_short": "Parola trebuie să aibă cel puțin 8 caractere", + "invalid_role": "Rol nevalid", + "cannot_demote_self": "Nu te poți retrograda", + "cannot_delete_self": "Nu vă puteți șterge propriul cont", + "last_admin": "Nu se poate șterge ultimul administrator", + "admin_only": "Această funcție este disponibilă numai pentru administratori", + "password_required": "Este necesară parola", + "not_found": "Utilizatorul nu a fost găsit", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Cele mai bune practici de securitate", + "tip_strong_passwords": "Utilizați parole puternice, unice pentru fiecare utilizator", + "tip_unique_accounts": "Creați conturi individuale pentru fiecare persoană", + "tip_viewer_role": "Utilizați rolul de vizualizator pentru utilizatorii care au nevoie doar de acces de citire", + "tip_operator_role": "Utilizați rolul de operator pentru utilizatorii care trebuie să gestioneze dispozitivele, dar nu utilizatorii", + "tip_audit_logs": "Examinați în mod regulat jurnalele de audit pentru activități suspecte", + "role_pro": "Pro (doar API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Administrator server", + "role_global_admin": "Administrator global", + "organizations": "Organizații", + "user_organizations": "Organizații pentru {username}", + "no_organizations": "Utilizatorul nu este alocat niciunei organizații", + "org_removed": "Atribuirea organizației a fost eliminată", + "server_role_label": "Rol de server", + "server_role_hint": "Determină ce poate face utilizatorul pe întreaga consolă (acces la panou, configurare server, audit etc.).", + "org_membership_section": "Calitatea de membru al organizației", + "org_membership_hint": "Un utilizator poate aparține mai multor organizații. Rolul organizației controlează numai permisiunile din interiorul acelei organizații și este independent de rolul de server de mai sus.", + "column_organizations": "Organizații", + "no_orgs_short": "—", + "org_count_one": "{count} organizație", + "org_count_many": "{count} organizații", + "all_orgs_assigned": "Utilizatorul este deja membru al fiecărei organizații.", + "user_groups": "Grupuri de utilizatori", + "user_groups_hint": "Grupurile de utilizatori pot fi utilizate pentru a acorda acces la grupurile de dispozitive selectate.", + "loading_user_groups": "Se încarcă grupurile de utilizatori...", + "no_user_groups": "Nu sunt disponibile grupuri de utilizatori", + "create_user_group": "Creați grup", + "edit_user_group": "Editați grupul de utilizatori", + "delete_user_group": "Ștergeți grupul de utilizatori", + "delete_user_group_confirm": "Ștergeți grupul de utilizatori {name}? Membrii vor pierde accesul acordat prin acest grup.", + "user_group_created": "Grup de utilizatori creat", + "user_group_updated": "Grupul de utilizatori a fost actualizat", + "user_group_deleted": "Grupul de utilizatori a fost șters", + "user_group_not_found": "Grupul de utilizatori nu a fost găsit", + "group_name": "Numele grupului", + "group_name_placeholder": "Operatori", + "group_note": "Note", + "group_note_placeholder": "Notă opțională", + "group_name_required": "Numele grupului este obligatoriu", + "group_members_count": "membrii {count}", + "provider": "Furnizor", + "provider_local": "Local", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Gestionat de furnizorul de identitate", + "provider_managed_hint": "Acest cont este gestionat de un furnizor extern de identitate (LDAP/AD sau SSO). Parola și rolul sunt controlate de furnizor." + }, + "folders": { + "title": "Folders", + "create": "Creați dosar", + "edit": "Editați folderul", + "delete": "Ștergeți dosarul", + "name": "Folder Name", + "name_placeholder": "Introduceți numele folderului", + "name_required": "Numele dosarului este obligatoriu", + "name_too_long": "Numele dosarului este prea lung (maximum 50 de caractere)", + "color": "Color", + "icon": "Icon", + "not_found": "Dosarul nu a fost găsit", + "delete_confirm": "Sigur doriți să ștergeți acest dosar? Dispozitivele vor fi anulate.", + "delete_success": "Dosarul a fost șters cu succes", + "created": "Dosar creat cu succes", + "updated": "Dosarul a fost actualizat cu succes", + "no_devices_selected": "Niciun dispozitiv selectat", + "devices_moved": "Dispozitivele au fost mutate cu succes", + "device_assigned": "Dispozitiv alocat folderului", + "unassigned": "Unassigned", + "all_devices": "Toate Dispozitivele", + "drag_hint": "Trageți dispozitivele în dosare pentru a le organiza", + "move_to": "Mutați la", + "toggle_sidebar": "Comutați bara laterală" + }, + "errors": { + "forbidden_title": "Acces refuzat", + "forbidden_message": "Nu aveți permisiunea de a accesa această resursă.", + "not_found_title": "Pagina nu a fost găsită", + "not_found_message": "Pagina pe care o cauți nu există sau a fost mutată.", + "server_error_title": "Eroare de server", + "server_error_message": "Ceva a mers prost. Vă rugăm să încercați din nou mai târziu.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Nu s-au încărcat dispozitivele", + "load_key_failed": "Nu s-a încărcat cheia", + "load_qr_failed": "Nu s-a încărcat QR", + "load_audit_failed": "Nu s-a încărcat jurnalul de audit", + "load_users_failed": "Nu s-au încărcat utilizatorii", + "load_folders_failed": "Nu s-au încărcat folderele", + "download_failed": "Descărcarea a eșuat", + "logout_failed": "Deconectarea a eșuat", + "password_change_failed": "Schimbarea parolei a eșuat", + "language_change_failed": "Nu s-a putut schimba limba", + "ban_failed": "Dispozitivul nu a fost interzis", + "unban_failed": "Dispozitivul nu a putut fi anulat", + "delete_failed": "Dispozitivul nu a putut fi șters", + "change_id_failed": "Nu s-a putut schimba ID-ul dispozitivului", + "bulk_delete_failed": "Dispozitivele nu s-au șters", + "sync_failed": "Starea de sincronizare a eșuat", + "error": "Error", + "not_found": "Not found", + "server_error": "Eroare de server", + "load_device_failed": "Nu s-a încărcat dispozitivul", + "load_orgs_failed": "Nu s-au încărcat organizațiile" + }, + "remote": { + "title": "Desktop la distanță", + "connecting": "Se conectează...", + "waiting_password": "Se așteaptă parola", + "authenticating": "Se autentifică...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Parola obligatorie", + "enter_password_for": "Introduceți parola pentru dispozitiv", + "password_placeholder": "Parola dispozitivului", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Înapoi la Dispozitive", + "fullscreen": "Fullscreen", + "toggle_audio": "Comutați audio", + "send_keys": "Trimite chei", + "scale_mode": "Scale Mode", + "scale_fit": "Potrivire la ecran", + "scale_fill": "Fill Window", + "scale_original": "Dimensiune originală (1:1)", + "scale_stretch": "Întindeți pentru a umple", + "actions": "Actions", + "lock_screen": "Blocare ecran", + "restart_remote": "Reporniți dispozitivul de la distanță", + "refresh_screen": "Actualizează ecranul", + "clipboard_paste": "Lipiți din Clipboard", + "block_input": "Block Input", + "display_settings": "Setări de afișare", + "image_quality": "Calitatea imaginii", + "quality_best": "Cel mai bun (calitate completă, 60 fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Afișați cursorul de la distanță", + "lock_after_session": "Blocare după sesiune", + "privacy_mode": "Modul de confidențialitate", + "disable_clipboard": "Dezactivează Clipboard", + "chat": "Chat", + "chat_placeholder": "Tastați un mesaj...", + "record": "Ecran de înregistrare", + "view_only": "Numai vizualizare", + "pin_toolbar": "Pin Bara de instrumente", + "monitors": "Monitors", + "select_monitor": "Selectați Monitor", + "quality_speed": "Viteză (calitate scăzută, 60 fps)", + "quality_quality": "Calitate (cea mai bună, 30 fps)", + "recording_started": "Înregistrarea a început", + "recording_stopped": "Înregistrarea sa oprit", + "download_recording": "Descărcați înregistrarea", + "e2e_encrypted": "Criptat de la capăt la capăt", + "e2e_key_exchange": "Se stabilește canalul securizat...", + "confirm_restart": "Sigur doriți să reporniți dispozitivul la distanță?", + "webcodecs_not_supported": "Browserul dvs. nu acceptă WebCodecs API. Utilizați Chrome 94+ sau Edge 94+.", + "webcodecs_insecure_context": "WebCodecs indisponibil peste HTTP. Videoclipul folosește software alternativ. Pentru performanță optimă, utilizați HTTPS.", + "webcodecs_fallback_active": "Decodor video software activ (performanță limitată)", + "click_to_start": "Faceți clic pentru a începe", + "autoplay_blocked": "Browserul necesită interacțiunea utilizatorului pentru a porni redarea video și audio.", + "start_playback": "Începeți redarea", + "new_connection": "Conexiune nouă", + "device_id_placeholder": "Introduceți ID-ul dispozitivului", + "http_warning": "Modul HTTP: limitat la decodare software H.264 (~15 FPS). Utilizați HTTPS pentru performanță maximă (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Transfer de fișiere", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Acest folder este gol", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Transferul a eșuat", + "file_show_hidden": "Afișează fișierele ascunse", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Introduceți numele folderului:", + "file_parent": "Dosarul părinte", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Introduceți un nume nou:", + "file_delete_confirm": "Sigur doriți să ștergeți acest articol?", + "file_cancelled": "Transfer anulat", + "2fa_required": "Este necesară verificarea 2FA", + "2fa_hint": "Introdu codul din 6 cifre din aplicația de autentificare", + "2fa_invalid": "Introduceți un cod valid din 6 cifre", + "verify": "Verify", + "use_cdap_fallback": "Utilizați vizualizatorul CDAP", + "cdap_fallback_hint": "Deschideți vizualizatorul ușor de interogare JPEG care utilizează bd-signal/CDAP în loc de releul RustDesk. Util dacă peer-ul este offline pe releu dar accesibil prin canalul de management agent.", + "clipboard_empty": "Clipboard-ul este gol", + "clipboard_denied": "Accesul la clipboard a fost refuzat. HTTPS este necesar sau permisiunea nu a fost acordată.", + "file_loading": "Se încarcă...", + "file_timeout": "Dispozitivul de la distanță nu a răspuns. Este posibil ca transferul de fișiere să nu fie acceptat sau să fie dezactivat pe computerul de la distanță.", + "codec": "Codec video", + "codec_auto": "Auto (recomandat)" + }, + "branding": { + "identity_title": "Identitatea de marcă", + "identity_desc": "Personalizați numele și descrierea aplicației afișate pe consolă", + "app_name": "Numele aplicației", + "app_description": "Descrierea aplicației", + "logo_title": "Logo", + "logo_desc": "Alegeți cum apare logo-ul dvs. în bara laterală și în pagina de conectare", + "logo_type_icon": "Pictograma Material", + "logo_type_svg": "Cod SVG", + "logo_type_image": "URL imagine", + "logo_icon_name": "Numele pictogramei", + "logo_icon_hint": "Introduceți un nume de pictograme materiale (de exemplu, dns, cloud, securitate). Consultați fonts.google.com/icons", + "logo_svg_code": "Cod SVG", + "logo_svg_hint": "Lipiți aici marcajul SVG. Acceptă elemente complete cu căi și stiluri.", + "logo_image_upload": "Încărcați imaginea", + "logo_image_choose": "Alegeți fișierul imagine", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Tip de fișier nevalid. Utilizați PNG, JPG, GIF, WebP sau SVG.", + "preview": "Previzualizare", + "colors_title": "Schema de culori", + "colors_desc": "Personalizați paleta de culori. Lăsați gol pentru a utiliza valorile implicite.", + "colors_backgrounds": "Culori fundal", + "colors_text": "Text", + "colors_accents": "Culori de accent", + "colors_borders": "Margini", + "import_export_title": "Import/Export", + "import_export_desc": "Salvați tema ca fișier JSON sau importați unul dintr-o altă instanță", + "export_theme": "Exportați tema", + "import_theme": "Importa temă", + "reset_defaults": "Resetați la valorile implicite", + "save_branding": "Salvați branding", + "saved": "Branding salvat cu succes. Se reîncarcă...", + "exported": "Tema a fost exportată", + "imported": "Tema a fost importată cu succes. Se reîncarcă...", + "import_error": "Nu s-a putut importa tema. Format de fișier nevalid.", + "reset_confirm": "Sigur doriți să resetați brandingul la valorile prestabilite? Acest lucru nu poate fi anulat.", + "reset_success": "Branding resetat la valorile implicite. Se reîncarcă...", + "logo_type_text": "Logo text", + "logo_text": "Text logo", + "logo_text_hint": "Textul principal afișat ca sigla mărcii dvs", + "logo_text_accent": "Text de accent", + "logo_text_accent_hint": "Text secundar de sub logo (de exemplu, numele produsului sau sloganul)", + "logo_upload_success": "Logo-ul a fost încărcat cu succes.", + "typography_title": "Tipografie", + "typography_desc": "Alegeți fonturi pentru titluri și textul corpului. Fonturile sunt descărcate pe server pentru auto-găzduire.", + "font_heading": "Font de titlu", + "font_heading_hint": "Folosit pentru titluri (H1–H6) și logo-ul text", + "font_body": "Font corp text", + "font_body_hint": "Folosit pentru textul corpului și elementele UI", + "font_search_placeholder": "Căutați fonturi...", + "font_system_default": "Implicit de sistem", + "font_clear": "Ștergere", + "font_cat_all": "Toate", + "font_downloaded_count": "fonturi descărcate pe server", + "powered_by": "Realizat cu:", + "background_title": "Fundal și aspect", + "background_desc": "Setați un fundal pentru consolă, gradient sau culoare solidă.", + "bg_type_none": "Niciunul", + "bg_type_color": "Culoare solidă", + "bg_type_gradient": "Gradient", + "bg_type_image": "Imagine", + "bg_color": "Culoare fundal", + "bg_gradient": "Gradient CSS", + "bg_gradient_hint": "Orice gradient CSS valid, ex. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Încărcare imagine de fundal", + "bg_image_choose": "Alegeți fișierul imagine", + "bg_image_hint": "PNG, JPG, WebP sau GIF. Max. 8 MB.", + "bg_image_url": "Calea imaginii / URL", + "bg_size": "Scalare imagine", + "bg_size_cover": "Acoperire (umplere ecran)", + "bg_size_contain": "Conținere (ajustare)", + "bg_size_auto": "Automat (original)", + "bg_blur": "Blur fundal", + "bg_overlay": "Suprapunere întunecată", + "bg_overlay_hint": "Întunecă fundalul pentru o lizibilitate mai bună.", + "bg_image_too_large": "Imaginea este prea mare. Dimensiunea maximă este de 8 MB.", + "bg_image_invalid_type": "Tip de fișier invalid. Utilizați PNG, JPG, WebP sau GIF.", + "bg_upload_success": "Imagine de fundal încărcată.", + "login_title": "Pagina de autentificare", + "login_desc": "Personalizați titlul, subtitlul și fundalul ecranului de autentificare.", + "login_heading": "Titlu autentificare", + "login_heading_placeholder": "Bine ați revenit", + "login_subheading": "Subtitlu autentificare", + "login_subheading_placeholder": "Conectați-vă la contul dvs.", + "login_bg_inherit": "Același ca și consola", + "agent_title": "Pagina de descărcare agent", + "agent_desc": "Personalizați portalul public de descărcare agent afișat utilizatorilor finali.", + "agent_show_powered": "Afișați \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Afișați linkul BetterDesk în subsolul portalului de descărcare.", + "footer_title": "Subsol și drepturi de autor", + "footer_desc": "Adăugați un rând de subsol personalizat pe ecranul de autentificare și în bara laterală a consolei.", + "footer_text": "Text subsol", + "footer_text_hint": "ex. notă privind drepturile de autor sau numele companiei.", + "show_powered": "Afișați link \"BetterDesk\"", + "show_powered_hint": "Numele și versiunea BetterDesk apar în subsolul autentificării și bara laterală.", + "custom_css_title": "CSS personalizat", + "custom_css_desc": "Avansat: injectați CSS personalizat în consolă și pagina de autentificare.", + "custom_css_hint": "Utilizați cu atenție. Max. 20.000 de caractere." + }, + "device_detail": { + "tab_overview": "Prezentare generală", + "tab_tags": "Etichete și note", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Conexiune", + "section_manage": "management", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Acest dispozitiv este interzis", + "no_reason": "Niciun motiv furnizat", + "tags": "Tags", + "no_tags": "Nu au fost atribuite etichete acestui dispozitiv", + "tag_placeholder": "Introduceți un nume de etichetă...", + "add_tag": "Add", + "tag_exists": "Această etichetă există deja", + "notes": "Notes", + "notes_placeholder": "Adăugați note despre acest dispozitiv...", + "danger_zone": "Danger Zone", + "action_connect_web": "Telecomanda web", + "action_connect_web_desc": "Conectați-vă prin intermediul browserului desktop la distanță", + "action_native_remote": "BetterDesk Telecomanda", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Client desktop", + "action_connect_desktop_desc": "Deschideți în aplicația client desktop", + "action_change_id_desc": "Schimbați ID-ul de înregistrare a dispozitivului", + "action_ban_desc": "Blocați conectarea acestui dispozitiv", + "action_unban_desc": "Permiteți acestui dispozitiv să se conecteze din nou", + "action_delete_desc": "Eliminați definitiv acest dispozitiv", + "tab_hardware": "Hardware", + "tab_metrics": "Metrici", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Capabilitati de codificare", + "section_live_metrics": "Valori live", + "section_current_usage": "Utilizare curentă", + "section_usage_history": "Istoricul utilizării", + "os": "Sistem de operare", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "Frecvența procesorului", + "total_memory": "Memoria totală", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Actualizat", + "device_groups": "Grupuri", + "no_sysinfo": "Nu există informații despre hardware disponibile", + "no_sysinfo_hint": "Informațiile de sistem vor apărea după ce dispozitivul trimite un raport sysinfo", + "no_metrics": "Nu sunt disponibile date de valori", + "no_metrics_hint": "Valorile vor apărea după ce dispozitivul trimite rapoarte de ritm cardiac", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Fișiere", + "agent_lazy_hint": "Faceți clic pe această filă pentru a încărca date live de la agent", + "agent_offline": "Agentul este offline", + "agent_timeout": "Agentul nu a răspuns la timp", + "agent_error": "Nu s-au încărcat datele de la agent", + "service_name": "Name", + "service_display": "Nume afișat", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Inventarul hardware și software al dispozitivelor gestionate", + "device_id": "ID dispozitiv", + "hostname": "Hostname", + "os": "Sistem de operare", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Memoria totală", + "memory_used": "Used Memory", + "memory_available": "Memoria disponibilă", + "memory_usage": "Utilizarea memoriei", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Interfețe de rețea", + "software": "Software", + "software_count": "Software instalat", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Miezuri fizice", + "logical_cores": "Miezuri logice", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Disponibil", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "Adrese IP", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Colectionar care alerga", + "collector_stopped": "Colectionar a oprit", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Colectat la", + "no_data": "Nu sunt disponibile date de inventar încă. Faceți clic pe „Colectați acum” pentru a aduna informații despre sistem.", + "no_devices": "Nu s-au găsit dispozitive cu date de inventar", + "detail_title": "Detaliu inventar dispozitiv", + "telemetry": "Telemetry", + "view_detail": "Vizualizare Detaliu", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Bilete de asistență și urmărirea problemelor", + "create": "New Ticket", + "edit": "Editați biletul", + "delete": "Ștergeți biletul", + "detail": "Detaliu bilet", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Atribuit la", + "created_by": "Creat de", + "device": "Dispozitiv", + "sla_due": "SLA Due", + "created_at": "Creat", + "updated_at": "Actualizat", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Deschide", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Scrie un comentariu...", + "internal_note": "Notă internă (nu este vizibilă pentru utilizatorii finali)", + "attachments": "Attachments", + "upload_attachment": "Încărcați atașament", + "download": "Download", + "connect_device": "Conectați-vă la Dispozitiv", + "no_tickets": "Nu s-au găsit bilete", + "no_comments": "Niciun comentariu încă", + "no_attachments": "Fără atașamente", + "title_required": "Titlul este obligatoriu", + "delete_confirm": "Sigur doriți să ștergeți biletul #{id}?", + "delete_success": "Biletul a fost șters cu succes", + "created_success": "Biletul creat cu succes", + "updated_success": "Biletul a fost actualizat cu succes", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Caută bilete...", + "assign_to_me": "Atribuiți-mi", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Deschide", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Monitorizarea activității", + "subtitle": "Utilizarea aplicației și urmărirea inactiv", + "device": "Dispozitiv", + "hostname": "Hostname", + "sessions": "Sesiuni", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Aplicații de top", + "app_name": "Application", + "window_title": "Titlul ferestrei", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Număr de sesiuni", + "total_active": "Total activ", + "total_idle": "Total Idle", + "detail_count": "Înregistrări de detaliu", + "no_data": "Nu sunt disponibile date despre activitate", + "no_sessions": "Fara sedinte", + "filter_from": "De la", + "filter_to": "Pentru a", + "filter_apply": "Aplicați filtrul", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Căutați dispozitive...", + "date_range": "Date Range", + "device_id": "ID dispozitiv", + "session_start": "Începutul sesiunii", + "session_end": "Sfârșitul sesiunii", + "user": "User", + "no_activity": "Nu a fost înregistrată nicio activitate", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Fără aplicații" + }, + "automation": { + "title": "Automatizare și alerte", + "subtitle": "Reguli de alertă, comenzi de la distanță și configurație SMTP", + "rules": "Alert Rules", + "rules_subtitle": "Definiți condițiile care declanșează notificări", + "alerts": "Istoricul alertelor", + "alerts_subtitle": "Vizualizați și confirmați alertele declanșate", + "commands": "Comenzi de la distanță", + "commands_subtitle": "Trimiteți comenzi către dispozitive de la distanță", + "smtp": "Configurare SMTP", + "smtp_subtitle": "Setări de notificare prin e-mail", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Tip condiție", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Dispozitivul țintă", + "scope_all": "Toate Dispozitivele", + "cooldown": "Răcire (secunde)", + "notify_emails": "E-mailuri de notificare", + "enabled": "Activat", + "disabled": "Dezactivat", + "create_rule": "Creați o regulă", + "edit_rule": "Editați regula", + "delete_rule": "Ștergeți regula", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Declanșat la", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Mai mare decât", + "op_gte": "Mai mare sau egal", + "op_lt": "Less than", + "op_lte": "Mai puțin sau egal", + "op_eq": "Egal cu", + "op_neq": "Nu egal cu", + "type_cpu_usage": "Utilizare CPU (%)", + "type_memory_usage": "Utilizarea memoriei (%)", + "type_disk_usage": "Utilizare disc (%)", + "type_offline_duration": "Durata offline (e)", + "type_idle_duration": "Durata inactiv (e)", + "type_custom": "Custom", + "command_type": "Tip de comandă", + "command_payload": "Comandă / Script", + "command_result": "Result", + "command_status": "Status", + "send_command": "Trimite comanda", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "A eșuat", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Nume de utilizator", + "smtp_pass": "Parolă", + "smtp_from": "De la Adresă", + "smtp_test": "Testează conexiunea", + "smtp_save": "Salvați configurația", + "smtp_test_success": "Conexiune reușită", + "smtp_test_failed": "Conexiunea a eșuat", + "no_rules": "Nu au fost configurate reguli de alertă", + "no_alerts": "Nu au fost declanșate alerte", + "no_commands": "Nu au fost trimise comenzi", + "id_payload_required": "ID-ul dispozitivului și sarcina utilă sunt necesare", + "no_commands_sent": "Nu au fost trimise încă comenzi" + }, + "file_transfer": { + "title": "Transfer de fișiere", + "transfers": "Transfers", + "new_transfer": "Transfer nou", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Dimensiunea fișierului", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Dispozitiv", + "initiated_by": "Inițiat de", + "created_at": "Creat la", + "cancel": "Anulează", + "cancel_confirm": "Sigur doriți să anulați acest transfer?", + "download_file": "Descărcați fișierul", + "browse_files": "Răsfoiți fișiere", + "select_file": "Selectați Fișier", + "select_device": "Selectați Dispozitiv", + "no_transfers": "Fără transfer de fișiere", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "A eșuat", + "status_cancelled": "Cancelled", + "bytes_transferred": "Biți transferați", + "chunks": "Chunks", + "transfer_started": "Transferul a început", + "transfer_completed": "Transfer finalizat", + "transfer_failed": "Transferul a eșuat", + "transfer_cancelled": "Transfer anulat", + "max_file_size": "Dimensiunea maximă a fișierului: 4 GB", + "error_too_large": "Fișierul este prea mare", + "error_no_device": "Niciun dispozitiv selectat", + "error_no_file": "Niciun fișier selectat" + }, + "network": { + "title": "Monitorizarea rețelei", + "targets": "Țintele de monitorizare", + "add_target": "Add Target", + "edit_target": "Editați ținta", + "delete_target": "Ștergeți ținta", + "delete_confirm": "Sigur doriți să ștergeți această țintă?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Timp limită", + "interval": "Interval de timp", + "enabled": "Activat", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Verificați istoricul", + "stats": "Statistics", + "total_targets": "Total ținte", + "targets_up": "Targets Up", + "targets_down": "Țintele în jos", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Instrumente de rețea", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Verificare port", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Porniți Monitor", + "monitor_stop": "Opriți monitorul", + "monitor_running": "Monitorul rulează", + "monitor_stopped": "Monitorul este oprit", + "no_targets": "Nu au fost configurate obiective de monitorizare", + "no_history": "Nu este disponibil istoricul verificărilor", + "error_code": "Error", + "status_code": "Cod de stare HTTP", + "search_targets": "Căutați ținte...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Verificați istoricul", + "name_host_required": "Numele și gazda sunt necesare", + "uptime": "Uptime", + "response_time": "Timp de răspuns", + "avg_response": "Răspuns mediu", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Timp de răspuns (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Ultimele 24 de ore", + "last_7d": "Last 7 days", + "last_30d": "Ultimele 30 de zile" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "Politici DLP", + "add_policy": "Adăugați o politică", + "edit_policy": "Editați politica", + "delete_policy": "Ștergeți politica", + "delete_confirm": "Sigur doriți să ștergeți această politică?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Activat", + "disabled": "Dezactivat", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB Dispozitiv", + "rule_type_file": "Operație cu fișiere", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "ID furnizor (VID)", + "pid": "ID produs (PID)", + "serial": "Număr de serie", + "device_class": "Clasa dispozitivului", + "drive_type": "Drive Type", + "file_extensions": "Extensii de fișiere", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Fișier", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Nu au fost configurate politici DLP", + "no_events": "Nu au fost înregistrate evenimente DLP", + "stats": "Statistics", + "total_events": "Total evenimente", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Fișier evenimente", + "device_id": "ID dispozitiv", + "policy_matched": "Politică potrivită", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Politici totale", + "active_policies": "Politici active", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Politici", + "tab_events": "Events", + "search_policies": "Politicile de căutare...", + "create_policy": "Creați o politică", + "policy_type": "Tip politică", + "scope": "Scope", + "events_count": "Events", + "search_events": "Căutați evenimente...", + "event_time": "Event Time", + "device": "Dispozitiv", + "policy": "Politică", + "detail": "Detail", + "scope_help": "ID-urile dispozitivelor separate prin virgulă sau lăsați necompletate pentru toate", + "scope_all": "Toate Dispozitivele", + "active": "Active", + "type_file_type": "Tip de fișier", + "type_clipboard": "Clipboard sistem", + "type_screen_share": "Partajarea ecranului", + "type_file_transfer": "Transfer de fișiere", + "policy_desc": "Descrierea politicii", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Generați raport", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Rezumatul dispozitivului", + "type_activity": "Rezumatul activității", + "type_security": "Raport de securitate", + "type_tickets": "Raportul biletelor", + "type_network": "Raport de rețea", + "type_inventory": "Raport de inventar", + "type_alerts": "Raport de alertă", + "saved": "Rapoarte salvate", + "save_report": "Salvați raportul", + "delete_report": "Ștergeți raportul", + "delete_confirm": "Sigur doriți să ștergeți acest raport salvat?", + "no_saved": "Niciun raport salvat", + "report_title": "Title", + "created_by": "Creat de", + "created_at": "Creat la", + "filters": "Filters", + "date_from": "De la", + "date_to": "Pentru a", + "device_filter": "ID dispozitiv", + "generated_at": "Generat la", + "section": "Secțiunea de date", + "total_devices": "Total Dispozitive", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Platformă de distribuție", + "top_applications": "Aplicații de top", + "total_active": "Timp total activ", + "total_idle": "Timp total de inactivitate", + "dlp_stats": "Statistici DLP", + "banned_devices": "Dispozitive interzise", + "audit_logs": "Audit Logs", + "ticket_stats": "Statistica biletelor", + "category_distribution": "Distribuție pe categorii", + "priority_distribution": "Distribuție prioritară", + "targets_status": "Stare ținte", + "os_distribution": "Distribuție OS", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Alerte recente", + "tab_generate": "Generați raport", + "tab_saved": "Rapoarte salvate", + "type_devices_desc": "Prezentare generală a tuturor dispozitivelor, platformelor și stărilor", + "type_activity_desc": "Utilizarea aplicației și rezumatul timpului de inactivitate", + "type_security_desc": "Interziceți acțiunile, evenimentele DLP și jurnalele de audit", + "type_tickets_desc": "Statistici privind biletele și performanța SLA", + "type_network_desc": "Țintele de monitorizare a rețelei și datele privind timpul de funcționare", + "type_inventory_desc": "Rezumatul inventarului hardware și software", + "type_alerts_desc": "Reguli de alertă și istoricul alertelor declanșate", + "report_name": "Report Name", + "format": "Format", + "save": "Salvați raportul", + "preview": "Preview", + "download": "Download", + "delete_saved": "Ștergeți raportul", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Editați chiriașul", + "delete_tenant": "Ștergeți chiriașul", + "delete_confirm": "Sigur doriți să ștergeți acest chiriaș? Toate atribuirile de dispozitiv și utilizatori vor fi eliminate.", + "name": "Name", + "slug": "Slug", + "contact_name": "Nume de contact", + "contact_email": "E-mail de contact", + "max_devices": "Max Dispozitive", + "max_devices_hint": "0 = nelimitat", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Dispozitive", + "users": "Users", + "assign_device": "Atribuiți dispozitiv", + "assign_devices": "Atribuiți dispozitive", + "remove_device": "Eliminați dispozitivul", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Nu au fost configurați chiriași", + "no_devices": "Niciun dispozitiv atribuit acestui chiriaș", + "no_users": "Niciun utilizator alocat acestui chiriaș", + "stats": "Statistica chiriașilor", + "total_devices": "Total Dispozitive", + "online_devices": "Dispozitive online", + "total_users": "Total Users", + "created_at": "Creat la", + "updated_at": "Actualizat la", + "slug_exists": "Limac de chiriaș există deja", + "total_tenants": "Total chiriași", + "active_tenants": "Chiriași activi", + "search": "Cauta chiriasi...", + "create_tenant": "Creați chiriaș", + "detail": "Detaliu chiriaș", + "contact": "Contact", + "enabled": "Activat", + "disabled": "Dezactivat", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Căutați după ID dispozitiv, nume de gazdă sau IP...", + "no_registrations": "No registration requests", + "col_device_id": "ID dispozitiv", + "col_hostname": "Hostname", + "col_platform": "Platformă", + "col_ip": "Adresă IP", + "col_version": "Versiune", + "col_status": "Status", + "col_requested": "Solicitat la", + "col_actions": "Acțiuni", + "status_pending": "În așteptare", + "status_approved": "Aprobat", + "status_rejected": "Respins", + "approve_btn": "Aprobare", + "approve_confirm": "Sigur doriți să aprobați acest dispozitiv? Va primi acreditările serverului și se poate conecta automat.", + "approved_success": "Înregistrarea dispozitivului a fost aprobată cu succes", + "reject_btn": "Respingere", + "reject_title": "Respinge înregistrarea", + "reject_confirm": "Sigur doriți să respingeți această solicitare de înregistrare?", + "reject_reason": "Motiv (opțional)", + "reject_reason_placeholder": "Introdu motivul respingerii...", + "rejected_success": "Înregistrarea dispozitivului a fost respinsă", + "delete_confirm": "Sigur doriți să ștergeți această înregistrare de înregistrare?", + "deleted_success": "Înregistrarea de înregistrare a fost ștearsă", + "enrollment_title": "Înregistrarea dispozitivului", + "enrollment_subtitle": "Solicitări de înscriere în așteptare de la clienții desktop BetterDesk", + "enrollment_empty": "Nu există cereri de înscriere în așteptare", + "enrollment_approve": "Aprobare", + "enrollment_reject": "Respingere", + "enrollment_display_name": "Nume afișat", + "enrollment_display_name_placeholder": "Introduceți un nume pentru acest dispozitiv...", + "enrollment_sync_mode": "Modul de sincronizare", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Înregistrarea dispozitivului a fost aprobată", + "enrollment_rejected_success": "Înregistrarea dispozitivului a fost respinsă", + "approve_title": "Aprobare dispozitiv", + "field_name": "Numele dispozitivului", + "field_name_placeholder": "Introduceți un nume pentru acest dispozitiv...", + "field_sync_mode": "Mod sincronizare", + "sync_standard": "Standard — sincronizare echilibrată", + "sync_silent": "Silențios — telemetrie minimă", + "sync_turbo": "Turbo — sincronizare agresivă", + "field_tags": "Etichete", + "field_tags_placeholder": "Etichete separate prin virgulă (ex. birou, laptop)...", + "field_tags_existing": "Etichete existente", + "field_tag_add_placeholder": "Adăugare etichetă nouă...", + "field_tag_add_btn": "Adăugare", + "field_groups": "Grupuri de dispozitive", + "field_folder": "Dosar", + "field_folder_none": "Niciun dosar", + "reject_ban_option": "Blocare dispozitiv", + "reject_ban_hint": "Dispozitivul va fi blocat și nu va putea trimite noi cereri de înregistrare.", + "banner_open_mode": "Înregistrarea este deschisă — clienții RustDesk noi se înregistrează fără aprobarea unui operator.", + "banner_locked_mode": "Înregistrarea este blocată — numai dispozitivele legate de token se pot înregistra.", + "enrollment_settings_link": "Setări de înregistrare" + }, + "backup": { + "title": "Copie de rezervă", + "desc": "Descărcați o copie de rezervă completă a configurației consolei, a utilizatorilor, a grupurilor și a setărilor. Datele peer Go server sunt incluse atunci când backend-ul BetterDesk este activ.", + "restore_title": "Restaurare", + "restore_desc": "Încărcați un fișier de rezervă descărcat anterior pentru a restabili configurația consolei. Selectați mai jos ce secțiuni să restabiliți.", + "stat_users": "Utilizatori", + "stat_settings": "Setări", + "stat_folders": "Dosare", + "stat_groups": "Grupuri", + "stat_strategies": "Strategii", + "stat_backend": "Backend", + "download": "Descărcați Backup", + "creating": "Se creează backup...", + "download_success": "Backup descărcat cu succes", + "upload": "Încărcați Backup", + "restore_confirm": "Sigur doriți să restaurați din această copie de rezervă? Secțiunile selectate vor fi suprascrise.", + "restore_success": "Backup restaurat cu succes. Unele modificări pot necesita o reîncărcare a paginii.", + "restored": "Restaurat", + "skipped": "Omis", + "backup_date": "Data copiei de rezervă", + "opt_settings": "Setările consolei", + "opt_branding": "Branding/Temă", + "opt_folders": "Dosarele dispozitivului", + "opt_groups": "Grupuri de utilizatori și dispozitive", + "opt_addressbooks": "Agende cu adrese", + "opt_users": "Conturi de utilizator", + "opt_users_warning": "Distructiv: înlocuiește TOATE conturile de utilizator cu date de rezervă. Este posibil să fiți deconectat.", + "no_file": "Nu a fost selectat niciun fișier de rezervă", + "invalid_json": "Fișier de rezervă nevalid: JSON nu este valid", + "invalid_format": "Fișier de rezervă nevalid: nu este o copie de rezervă BetterDesk", + "stat_database": "Motor de baze de date", + "stat_keys": "Chei de server incluse", + "stat_env": "Fișier de mediu", + "stat_uploads": "Fișiere de branding", + "restart_required": "Unele componente restaurate (chei / .env / baza de date Go) necesită repornirea serviciului.", + "security_warning": "Această copie de rezervă conține secrete. Stocați-o în siguranță și nu o distribuiți niciodată.", + "restore_warning": "Restaurarea secretelor sau a bazei de date serverului Go va suprascrie identitatea serverului și va necesita repornirea serviciului.", + "opt_database": "Baza de date (toate tabelele)", + "opt_database_hint": "Reimportă toate datele consolei. Nu necesită repornire.", + "opt_uploads": "Fișiere de branding", + "opt_uploads_hint": "Logo-uri și imagini încărcate.", + "opt_secrets": "Chei de server și secrete", + "opt_secrets_warning": "Suprascrie identitatea serverului Ed25519, cheia API și secretul de sesiune. Necesită repornirea serviciului.", + "opt_env": "Fișier de mediu (.env)", + "opt_env_warning": "Suprascrie SESSION_SECRET, cheia API, DSN-ul bazei de date, porturile și setările TLS. Necesită repornirea serviciului.", + "opt_godb": "Baza de date server Go", + "opt_godb_warning": "Suprascrie baza de date SQLite a serverului Go (numai backend SQLite). Necesită repornirea serviciului." + }, + "cdap": { + "device_detail": "CDAP Dispozitiv", + "loading": "Se încarcă...", + "loading_widgets": "Se încarcă widget-urile dispozitivului...", + "load_error": "Nu s-au încărcat datele dispozitivului", + "connected": "Conectat", + "disconnected": "Deconectat", + "device_offline_msg": "Dispozitivul este momentan offline. Valorile widget-urilor pot fi învechite.", + "no_widgets": "Nu există widgeturi disponibile", + "no_widgets_desc": "Acest dispozitiv nu a înregistrat un manifest CDAP cu definiții widget.", + "command_log": "Jurnal comenzi", + "clear_log": "Ștergere jurnal", + "confirm_command": "Confirmați comanda", + "select_option": "Selectați", + "cdap_status": "Status CDAP", + "cdap_enabled": "CDAP activat", + "cdap_disabled": "CDAP dezactivat", + "cdap_devices": "Dispozitive CDAP", + "cdap_connections": "Conexiuni active", + "send_command": "Trimite comanda", + "command_sent": "Comanda trimisă cu succes", + "command_failed": "Nu s-a putut trimite comanda", + "devices_title": "CDAP Dispozitive", + "devices_subtitle": "Dispozitive conectate prin protocolul de aplicație pentru dispozitiv personalizat", + "stat_connected": "Conectat", + "stat_port": "Port", + "search_devices": "Căutați dispozitive...", + "no_devices": "Niciun dispozitiv conectat", + "no_devices_desc": "În prezent, niciun dispozitiv CDAP nu este conectat. Dispozitivele vor apărea aici odată ce se conectează la gateway.", + "gateway_disabled": "CDAP Gateway dezactivat", + "gateway_disabled_desc": "Activați gateway-ul CDAP setând CDAP_ENABLED=true în configurația serverului.", + "gateway_active": "Activ", + "toggle_enable": "Activare CDAP", + "toggle_disable": "Dezactivați CDAP", + "enabled_restart": "CDAP activat. Este necesară repornirea serverului pentru a aplica modificări.", + "disabled_restart": "CDAP dezactivat. Este necesară repornirea serverului pentru a aplica modificări.", + "widgets": "widget-uri", + "type_all": "Toate", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "Agent OS", + "type_network": "Rețea", + "type_camera": "Cameră", + "type_custom": "Personalizat", + "active_alerts": "Alerte active", + "alert_fired": "Alertă activată", + "alert_cleared": "Alerta a fost anulată", + "no_alerts": "Nu există alerte active", + "connect_terminal": "Conectați terminalul", + "table_search": "Cauta...", + "just_now": "Chiar acum", + "terminal_connecting": "Se conectează la dispozitiv...", + "terminal_disconnected": "Deconectat", + "terminal_error": "Conexiunea terminalului a eșuat", + "linked_devices": "Dispozitive conectate", + "link_device": "Conectați dispozitivul", + "unlink_device": "Deconectare", + "no_linked_devices": "Nu există dispozitive conectate", + "unlink_confirm": "Sigur doriți să deconectați acest dispozitiv?", + "link_prompt": "Introduceți ID-ul peer pentru a conecta la acest dispozitiv:", + "connect_desktop": "Conectați desktopul", + "connect_video": "Conectați fluxul", + "connect_files": "Răsfoiți fișiere", + "connect_audio": "Conectați audio", + "upload_file": "Încărcare", + "desktop_connecting": "Se conectează...", + "video_connecting": "Se conectează...", + "files_connecting": "Se conectează...", + "audio_connecting": "Se conectează...", + "audio_streaming": "Se transmite", + "clipboard_in": "Clipboard primit", + "clipboard_out": "Clipboard trimis", + "monitor_select": "Selectați Monitor", + "keyframe_request": "Solicitați cadru cheie", + "quality_auto": "Calitate Auto" + }, + "desktop": { + "switch_mode": "Modul desktop", + "console_mode": "Modul Consolă", + "loading": "Se încarcă...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Închide", + "widgets_mode": "Widgeturi", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Adăugați widget", + "remove_widget": "Eliminați widgetul", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Configurați", + "search_widgets": "Căutați widgeturi...", + "cat_monitoring": "Monitoring", + "cat_devices": "Dispozitive", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Scrie notele aici...", + "search_placeholder": "Căutați dispozitive, pagini, setări...", + "search_pages": "Pages", + "search_devices": "Dispozitive", + "search_no_results": "No results", + "exit_desktop": "Ieșiți din modul desktop", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Stare dispozitiv", + "widget_server_health": "Informații server", + "widget_system_stats": "Indicatoare pentru dispozitive", + "widget_device_list": "Lista de dispozitive", + "widget_quick_actions": "Acțiuni rapide", + "widget_recent_activity": "Activitate recentă", + "widget_notes": "Notes", + "widget_network_monitor": "Monitor de rețea", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP Dispozitive", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Grila dispozitivului", + "widget_multi_gauge": "Indicatori de server", + "widget_weekly_chart": "Activitate săptămânală", + "widget_quick_controls": "Controale rapide", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Statistici de conexiune", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Sesiuni de utilizator", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Fără dispozitive", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Deschide", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Setați URL în config", + "label_server_uptime": "Timp de funcționare a serverului", + "label_merged_info": "Îmbinat în widgetul Informații server", + "label_with_notes": "Cu Note", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Total Dispozitive", + "label_throughput": "Throughput", + "label_active_relays": "Relee active", + "label_total_relayed": "Retransmitere totală", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Dispozitive de filtrare...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Nu există dispozitive CDAP", + "action_add_widget": "Adăugați widget", + "label_merged_server_info": "Îmbinat în widgetul Informații server", + "wp_images": "Images", + "wp_colors": "Culori Solide", + "wp_custom_color": "Culoare personalizată", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Imaginile de fundal nu sunt instalate pe acest server.", + "wp_download_hint": "Plasați imagini PNG în directorul public/wallpapers/ pentru a activa selecția tapetului.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Monitor de proces", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Statisticile bazei de date", + "widget_docker_containers": "Docker Containere", + "widget_shell_command": "Comanda Shell", + "widget_device_map": "Harta dispozitivului", + "widget_remote_connect": "Conectare la distanță", + "label_no_online": "Fără dispozitive online", + "label_no_events": "Nu există evenimente astăzi", + "label_event_title": "Titlul evenimentului:", + "label_no_data": "Nu există date disponibile", + "label_download_speed": "Viteza de descărcare", + "label_latency": "Latency", + "label_server": "Instanță server", + "label_run_test": "Run Test", + "label_testing": "Testare...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Fara containere", + "label_docker_unavailable": "Docker nu este disponibil", + "label_no_command": "Nicio comandă configurată", + "label_no_output": "Nicio ieșire încă", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Salvați presetarea", + "label_load_preset": "Load Preset", + "label_preset_name": "Nume presetat:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Aranjare automată", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 coloane (egale)", + "label_2col_wide": "2 coloane (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Grup de widgeturi", + "ungroup_widgets": "Degrupați widget-urile", + "group_widgets": "Grupați widget-urile selectate", + "snap_layouts": "Aspecte de fixare", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Apăsați sus-stânga", + "snap_top_right": "Faceți clic în sus-dreapta", + "snap_bottom_left": "Apăsați jos-stânga", + "snap_bottom_right": "Apăsați jos-dreapta", + "aero_shake": "Agitați pentru a minimiza pe alții", + "zone_resize": "Trageți chenar pentru a redimensiona zonele", + "zone_borders": "Borduri ale zonei care pot fi trasate", + "app_drawer": "Applications", + "search_apps": "Căutați aplicații...", + "edit_shortcuts": "Editați comenzile rapide", + "widgets": "Widgeturi", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Faceți clic oriunde sau apăsați o tastă pentru a vă conecta", + "username_placeholder": "Nume de utilizator", + "password_placeholder": "Parolă", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Autentificare cu doi factori", + "totp_subtitle": "Introdu codul din 6 cifre din aplicația de autentificare", + "back_to_login": "Înapoi la autentificare", + "fill_all_fields": "Vă rugăm să completați toate câmpurile", + "invalid_credentials": "Nume de utilizator sau parolă nevalidă", + "invalid_code": "Cod de verificare nevalid", + "enter_6_digits": "Introduceți toate cele 6 cifre", + "network_error": "Network error — check your connection", + "session_expired": "Sesiunea a expirat. Vă rugăm să vă conectați din nou." + }, + "tokens": { + "title": "Jetoane de dispozitiv", + "subtitle": "Gestionați jetoanele de înregistrare pentru furnizarea automată a dispozitivelor", + "enrollment_mode": "Mod de înscriere", + "mode_open": "Deschide", + "mode_open_desc": "Orice dispozitiv se poate înregistra fără un token", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Total de jetoane", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Jetoane de căutare...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Generare în vrac", + "create": "Creați token", + "edit": "Editați tokenul", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Creat", + "actions": "Actions", + "name_placeholder": "de ex. Lot PC Office", + "max_uses": "Max Uses", + "max_uses_hint": "0 = nelimitat", + "expires_in": "Expires In", + "no_expiration": "Fără expirare", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Notă opțională despre acest simbol...", + "count": "Count", + "count_range": "Numărul de jetoane de generat (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token creat", + "tokens_generated": "Jetoane generate", + "copy_warning": "Copiați jetonul acum. Nu va fi afișat din nou.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Sigur doriți să revocați acest simbol? Dispozitivele deja înregistrate cu acesta nu vor fi afectate.", + "revoked_success": "Indicativul a fost revocat cu succes", + "no_tokens": "Nu s-au găsit jetoane", + "expired": "Expired", + "never": "Never", + "save": "Salvați", + "cancel": "Anulează", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "În continuare", + "prev": "Previous", + "skip": "Skip", + "finish": "Termină", + "close": "Închide", + "step_of": "{current} din {total}", + "console_sidebar_title": "Bara laterală de navigare", + "console_sidebar_text": "Accesați toate modulele de aici. Faceți clic pe orice pictogramă pentru a naviga la acea secțiune. Bara laterală se adaptează la dimensiunea ecranului dvs.", + "console_expand_title": "Extindeți Bara laterală", + "console_expand_text": "Faceți clic aici pentru a extinde bara laterală și pentru a vedea etichetele complete pentru toate elementele de navigare. Faceți clic din nou pentru a restrânge.", + "console_search_title": "Căutare rapidă", + "console_search_text": "Căutați rapid dispozitive, setări sau acțiuni. Apăsați Ctrl+K pentru comanda rapidă de la tastatură.", + "console_dashboard_title": "Tabloul de bord", + "console_dashboard_text": "Centrul dvs. central care arată starea serverului, dispozitivele online și acțiunile rapide. Fii atent la valorile importante dintr-o privire.", + "console_devices_title": "Managementul dispozitivelor", + "console_devices_text": "Vizualizați, căutați și gestionați toate dispozitivele conectate. Filtrați după stare, atribuiți etichete și configurați setările individuale ale dispozitivului.", + "console_settings_title": "Setări", + "console_settings_text": "Configurați comportamentul serverului, opțiunile de securitate, brandingul și gestionarea utilizatorilor. Personalizați BetterDesk pentru a se potrivi nevoilor dvs.", + "console_desktop_title": "Modul desktop", + "console_desktop_text": "Comutați la modul desktop pentru un spațiu de lucru cu ferestre cu widget-uri. Perfect pentru multi-tasking și monitorizarea tablourilor de bord.", + "console_complete_title": "Ești gata!", + "console_complete_text": "Explorați categoriile din bara laterală pentru a descoperi toate funcțiile. Faceți clic oricând pe pictograma Ajutor pentru a reporni acest ghid.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Bara de sus arată ceasul, comenzile rapide și accesul la sertarul de aplicații. Faceți clic pe pictograma grilă pentru a răsfoi toate aplicațiile.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Deschideți sertarul de aplicații pentru a căuta și a lansa orice funcție de consolă ca o fereastră plutitoare. Aplicațiile sunt organizate pe categorii.", + "desktop_widgets_title": "Tabloul de bord widget", + "desktop_widgets_text": "Spațiul dvs. de lucru personalizabil. Widgeturile afișează informații live și oferă acces rapid la funcții. Trageți pentru a rearanja.", + "desktop_add_widget_title": "Adăugați widgeturi", + "desktop_add_widget_text": "Faceți clic aici pentru a căuta widget-urile disponibile. Alegeți dintre afișaje de monitorizare, liste de dispozitive, note și multe altele.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Aplicațiile deschise apar aici. Faceți clic pentru a focaliza sau pentru a minimiza ferestrele. Treceți cu mouse-ul pe pictograme pentru a vedea etichetele aplicațiilor.", + "desktop_snap_title": "Aspecte de fixare", + "desktop_snap_text": "Trageți ferestrele pe marginile ecranului pentru a le fixa în poziție sau plasați cursorul pe butonul de maximizare pentru presetări de aspect. Încercați Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Aplicațiile se deschid în ferestre care pot fi glisate și redimensionabile. Minimizați, maximizați sau închideți din bara de titlu. Stratul Windows deasupra widgeturilor.", + "desktop_search_title": "Căutare rapidă", + "desktop_search_text": "Căutați pe dispozitive, pagini și setări. Apăsați Ctrl+K oriunde pentru a deschide căutarea instantaneu.", + "desktop_complete_title": "Modul desktop gata!", + "desktop_complete_text": "Încercați să deschideți aplicațiile din sertar și să aranjați ferestrele una lângă alta. Folosiți presetări pentru widget-uri pentru amenajări rapide ale tabloului de bord.", + "devices_folders_title": "Dosarele dispozitivului", + "devices_folders_text": "Organizați dispozitivele în foldere. Faceți clic pe un folder pentru a filtra lista. Faceți clic dreapta pentru a redenumi sau șterge.", + "devices_search_title": "Căutați și filtrați", + "devices_search_text": "Căutați după ID, nume de gazdă sau platformă. Utilizați pastilele de stare pentru a afișa numai online, offline sau toate dispozitivele.", + "devices_table_title": "Lista de dispozitive", + "devices_table_text": "Faceți clic pe orice rând de dispozitiv pentru detalii. Utilizați meniul kebab din dreapta pentru acțiuni rapide, cum ar fi conectarea, editarea etichetelor sau ștergerea.", + "devices_complete_title": "Gestionarea dispozitivelor gata!", + "devices_complete_text": "Trageți dispozitivele între dosare pentru a le organiza. Faceți dublu clic pe un dispozitiv pentru a deschide panoul de detalii.", + "settings_tabs_title": "Setări Categorii", + "settings_tabs_text": "Navigați între secțiuni General, Securitate, Aspect și alte secțiuni de configurare.", + "settings_content_title": "Configurare", + "settings_content_text": "Fiecare secțiune conține setări specifice pentru server și consolă. Modificările sunt salvate când faceți clic pe Salvare.", + "settings_complete_title": "Prezentare generală a setărilor", + "settings_complete_text": "Verificați setările de securitate pentru cheile 2FA, API și gestionarea utilizatorilor. Accesați Aspect pentru a personaliza aspectul consolei.", + "help": "Ajutor și tutoriale", + "tour_console": "Turul consolei", + "tour_desktop": "Tur al modului desktop", + "tour_devices": "Tur al dispozitivelor", + "tour_settings": "Tur de setări", + "reset_all": "Resetați toate tutorialele", + "tour_remote": "Tur de sesiune la distanță", + "tour_organization": "Configurarea organizației", + "tour_cdap": "CDAP Prezentare generală", + "tour_chat": "Bazele chatului", + "remote_toolbar_title": "Bara de instrumente la distanță", + "remote_toolbar_text": "Accesați comenzile afișajului, sincronizarea clipboard-ului, tastele speciale și setările de calitate din bara de instrumente. Comutați ecranul complet cu F11.", + "remote_canvas_title": "Afișaj de la distanță", + "remote_canvas_text": "Acesta este ecranul de la distanță. Faceți clic în interior pentru a începe să controlați dispozitivul de la distanță. Introducerea mouse-ului și a tastaturii sunt redirecționate automat.", + "remote_clipboard_title": "Sincronizare clipboard", + "remote_clipboard_text": "Copiați și inserați text între computer și dispozitivul de la distanță. Folosiți Ctrl+C / Ctrl+V în mod normal în timp ce vă concentrați pe afișajul de la distanță.", + "remote_complete_title": "Sesiunea de la distanță gata!", + "remote_complete_text": "Utilizați butoanele din bara de instrumente pentru tastele speciale (Ctrl+Alt+Del, PrintScreen) și comutarea monitorului. Apăsați Escape sau faceți clic pe Deconectare pentru a încheia sesiunea.", + "org_overview_title": "Organizații", + "org_overview_text": "Organizațiile vă permit să grupați utilizatori, dispozitive și politici. Fiecare organizație are propriul administrator, operatori și setări.", + "org_create_title": "Creați organizație", + "org_create_text": "Faceți clic aici pentru a crea o nouă organizație. Furnizați un nume, un slug și o descriere opțională. Veți fi proprietarul noii organizații.", + "org_members_title": "Gestionați membrii", + "org_members_text": "Invitați utilizatori prin e-mail, atribuiți roluri (administrator, operator, utilizator) și gestionați accesul. Membrii pot vedea dispozitivele alocate organizației lor.", + "org_devices_title": "Atribuiți dispozitive", + "org_devices_text": "Adăugați dispozitive în organizație. Dispozitivele atribuite aici vor moșteni politicile organizației și vor fi vizibile pentru membrii acesteia.", + "org_policies_title": "Politicile organizației", + "org_policies_text": "Setați politici de securitate, cum ar fi cerințele de parolă, expirarea sesiunii, aplicarea 2FA și regulile de înregistrare a dispozitivelor pentru organizație.", + "org_complete_title": "Configurarea organizației finalizată!", + "org_complete_text": "Invitați-vă echipa și atribuiți dispozitive pentru a începe să utilizați managementul la nivelul organizației. Politicile se aplică automat tuturor membrilor.", + "cdap_devices_title": "Dispozitive CDAP", + "cdap_devices_text": "Vizualizați toate dispozitivele CDAP conectate — senzori IoT, PLC-uri, bridge-uri și agenți personalizați. Indicatorii verzi arată conexiunile live.", + "cdap_widgets_title": "Panou de widget-uri", + "cdap_widgets_text": "Widget-urile afișează date în timp real de la dispozitive. Indicatoare, comutatoare, LED-uri, grafice — fiecare tip de widget afișează date diferite.", + "cdap_commands_title": "Trimitere comenzi", + "cdap_commands_text": "Interacționați cu dispozitivele trimițând comenzi. Jurnalul de comenzi stochează istoricul.", + "cdap_terminal_title": "Terminal dispozitiv", + "cdap_terminal_text": "Deschideți o sesiune de terminal la agenții CDAP pentru diagnosticare avansată sau configurare manuală.", + "cdap_complete_title": "Prezentare CDAP finalizată!", + "cdap_complete_text": "Explorați widget-urile dispozitivelor, trimiteți comenzi și utilizați terminalul sau browserul de fișiere pentru management aprofundat.", + "chat_contacts_title": "Contacte și grupuri", + "chat_contacts_text": "Vedeți contactele și grupurile de chat. Faceți clic pe orice contact pentru a deschide o conversație. Punctele verzi indică utilizatorii online.", + "chat_send_title": "Trimite mesaje", + "chat_send_text": "Introduceți mesajul și apăsați Enter pentru a trimite. Mesajele sunt criptate end-to-end atunci când ambele părți acceptă E2E.", + "chat_file_title": "Partajați fișiere", + "chat_file_text": "Faceți clic pe pictograma atașament pentru a partaja fișiere. Fișierele sunt criptate și pot avea până la 50 MB.", + "chat_complete_title": "Gata de chat!", + "chat_complete_text": "Chat cu operatorii și utilizatorii finali în timp real. Creați grupuri pentru comunicarea în echipă. Toate mesajele acceptă confirmarea de citire.", + "disable_tutorials": "Dezactivați tutorialele", + "enable_tutorials": "Activați tutoriale" + }, + "help_request": { + "title": "Cereri de ajutor", + "subtitle": "Gestionați solicitările de ajutor primite de la clienții desktop", + "new_request": "Noua solicitare de ajutor", + "device": "Dispozitiv", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Fără cereri de ajutor", + "notification": "Solicitare de ajutor primită de la", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organizații", + "create": "Creați organizație", + "edit": "Editați organizația", + "detail": "Detalii de organizare", + "name": "Name", + "slug": "Slug (sigură pentru URL)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Dispozitive", + "invitations": "Invitations", + "settings": "Setări", + "add_user": "Add User", + "assign_device": "Atribuiți dispozitiv", + "create_invitation": "Creați invitație", + "delete_confirm": "Ștergeți această organizație? Aceasta va elimina toți utilizatorii, dispozitivele și setările asociate.", + "no_orgs": "Încă nu există organizații", + "no_orgs_hint": "Creați-vă prima organizație pentru a începe să gestionați dispozitivele și utilizatorii.", + "connection_policy": "Politica de conectare", + "allow_file_transfer": "Permite transferul de fișiere", + "allow_clipboard": "Permite Clipboard", + "max_session_duration": "Durata maximă a sesiunii (min.)", + "role_owner": "Owner", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_user": "Membru", + "username": "Nume de utilizator", + "password": "Parolă", + "display_name": "Nume afișat", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID dispozitiv", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Utilizator alocat", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Nu există utilizatori în această organizație.", + "no_devices": "Niciun dispozitiv atribuit acestei organizații.", + "no_invitations": "Fara invitatii.", + "user_added": "User added", + "user_removed": "Utilizatorul a fost eliminat", + "user_updated": "Rolul utilizatorului a fost actualizat", + "device_assigned": "Dispozitiv alocat", + "device_unassigned": "Dispozitiv nealocat", + "invitation_created": "Invitație creată", + "settings_saved": "Setările au fost salvate", + "org_deleted": "Organizația a fost ștearsă", + "confirm_remove_user": "Eliminați acest utilizator din organizație?", + "confirm_unassign_device": "Anulați atribuirea acestui dispozitiv de la organizație?", + "confirm_delete_org": "Ștergeți această organizație și toate datele asociate?", + "edit_role": "Editați rolul", + "raw_settings": "Setări brute", + "key": "Key", + "value": "Value", + "save": "Salvați setările", + "policy_unattended": "Nesupravegheat (instantaneu)", + "policy_attended": "A participat (cu confirmare)", + "policy_ask": "Always ask", + "expires_hours": "Expirare (ore)", + "loading_failed": "Nu s-au încărcat datele organizației", + "name_slug_required": "Numele și melcul sunt necesare", + "org_created": "Organizație creată", + "org_updated": "Organizație actualizată", + "create_new_user": "Creați nou", + "add_existing_user": "Adăugați existent", + "none_available": "none", + "select_user": "Selectați utilizatorul", + "org_role": "Rolul de organizare", + "link_user_hint": "Utilizatorul selectat va fi conectat la această organizație folosind acreditările contului său de server.", + "no_available_users": "Toți utilizatorii de server sunt deja conectați la această organizație.", + "user_linked": "Utilizator conectat la organizație" + }, + "chat": { + "e2e_enabled": "Criptat de la capăt la capăt", + "e2e_establishing": "Se stabilește canalul securizat...", + "e2e_established": "Canal securizat stabilit", + "e2e_unsupported": "Criptarea E2E nu este acceptată în acest browser", + "typing_indicator": "tastând...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Fișier", + "file_too_large": "Fișier prea mare (maximum 50 MB)", + "file_encrypted": "Transfer de fișiere criptat", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Cheile de securitate au fost rotite", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Grupuri", + "no_contacts": "Nicio persoană de contact încă", + "no_groups": "Încă nu există grupuri", + "no_messages": "Încă nu există mesaje", + "no_results": "Nu s-au găsit rezultate", + "select_conversation": "Selectați o conversație pentru a începe conversația", + "type_message": "Tastați un mesaj...", + "send": "Trimite", + "attach_file": "Atașați fișierul", + "emoji": "Emoji", + "search_messages": "Căutați mesaje", + "create_group": "Creați grup", + "group_name": "Numele grupului", + "group_members": "Membrii", + "cancel": "Anulează", + "create": "Creați", + "members": "membrii", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Căutați contacte și mesaje", + "select_conversation_hint": "Selectați o conversație pentru a vizualiza mesajele", + "info": "Info", + "group_name_placeholder": "Introduceți numele grupului" + }, + "toast": { + "device_connected": "Dispozitiv conectat", + "device_disconnected": "Dispozitivul a fost deconectat", + "session_started": "Sesiunea de la distanță a început", + "session_ended": "Sesiunea de la distanță s-a încheiat", + "file_upload_complete": "Încărcarea fișierului s-a încheiat", + "settings_saved": "Setările au fost salvate", + "error_generic": "A apărut o eroare", + "connection_lost": "Conexiunea pierdută", + "reconnecting": "Se reconecta..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Utilități de administrare și instrumente de diagnosticare", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Trimite", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Introdu text...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Du-te Server", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Verificați accesibilitatea și latența gazdei", + "tcp_title": "TCP Verificare port", + "tcp_desc": "Testați conectivitatea portului TCP", + "ssl_title": "Inspector SSL", + "ssl_desc": "Inspectați detaliile certificatului SSL/TLS", + "http_title": "HTTP Verificare de sănătate", + "http_desc": "Verificați starea punctului final HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Rezolvați numele gazdei la adresa IP", + "whois_title": "DNS Records", + "whois_desc": "Interogați înregistrările A, AAAA, MX, TXT, NS", + "speed_title": "Speed Test", + "speed_desc": "Măsurați lățimea de bandă de descărcare", + "run_speed_test": "Rulați testul de viteză", + "wol_title": "Wake-on-LAN", + "wol_desc": "Trimite un pachet magic pentru a trezi un dispozitiv", + "wol_sent": "Pachetul magic trimis", + "hash_title": "Generator de hash", + "hash_desc": "Generați hashuri criptografice", + "password_title": "Generator de parole", + "password_desc": "Generați o parolă aleatorie sigură", + "jwt_title": "JWT Decoder", + "jwt_desc": "Decodați și inspectați JSON Web Tokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Codificați sau decodați datele Base64", + "url_title": "URL Encoder", + "url_desc": "Codificați sau decodați componentele URL", + "processes_title": "Lista de procese", + "processes_desc": "Vizualizați procesele sistemului care rulează", + "disk_title": "Disk Usage", + "disk_desc": "Vedeți utilizarea partiției de disc", + "db_title": "Statisticile bazei de date", + "db_desc": "Vizualizați statisticile din tabelul bazei de date", + "docker_title": "Docker Containere", + "docker_desc": "Vedeți containerele Docker care rulează", + "logs_title": "Log Viewer", + "logs_desc": "Vedeți rezultatul jurnalului recent", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Valabil de la", + "valid_to": "Valabil pentru", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Nu există date disponibile", + "no_docker": "Nu s-au găsit containere Docker sau Docker nu este disponibil", + "no_logs": "Nu există linii de jurnal disponibile" + }, + "policies": { + "title": "Politicile organizației", + "subtitle": "Gestionați politicile de securitate, conexiune și caracteristici pentru organizațiile dvs", + "select_org": "Organizare", + "select_org_placeholder": "Selectați o organizație...", + "select_org_first": "Selectați o organizație pentru a vedea jurnalul de audit al politicii.", + "configured": "Configurat", + "connection_title": "Politica de conectare", + "connection_desc": "Controlați modul în care sunt stabilite sesiunile la distanță", + "connection_mode": "Modul de conectare", + "mode_attended": "A participat (necesită aprobarea utilizatorului)", + "mode_unattended": "Nesupravegheat (permite întotdeauna)", + "mode_ask": "Întotdeauna întrebați", + "max_session": "Durata maximă a sesiunii (minute)", + "idle_lock": "Timp de blocare inactiv (minute)", + "wallpaper_policy": "Imagine de fundal în timpul sesiunii", + "wallpaper_show": "Afișare", + "wallpaper_hide_session": "Ascundeți-vă în timpul sesiunii", + "wallpaper_hide_always": "Ascundere întotdeauna", + "features_title": "Politica caracteristicilor", + "features_desc": "Activați sau dezactivați funcții specifice pentru dispozitive", + "allow_file_transfer": "Permite transferul de fișiere", + "allow_clipboard": "Permite sincronizarea clipboard-ului", + "allow_audio": "Permiteți redarea în flux audio", + "allow_recording": "Permite înregistrarea sesiunii", + "security_title": "Politica de securitate", + "security_desc": "Aplicați cerințele de securitate pentru dispozitivele organizației", + "require_2fa": "Necesită 2FA pentru acces nesupravegheat", + "password_min_length": "Lungimea minimă a parolei", + "password_require_special": "Necesită caractere speciale", + "password_max_age": "Vârsta maximă a parolei (zile, 0=niciodată)", + "allowed_operators": "Roluri de operator permise (separate prin virgulă)", + "network_title": "Politica de rețea", + "network_desc": "Controlați serverele releu și conexiunile directe", + "block_direct_p2p": "Block Direct P2P (releu de forță)", + "allowed_relays": "Servere de releu permise (unul pe linie)", + "ip_allowlist": "Lista IP permisă (CIDR, una pe linie)", + "update_title": "Actualizați politica", + "update_desc": "Controlați actualizările automate și canalele de actualizare", + "auto_update": "Activați Actualizarea automată", + "update_channel": "Actualizați canalul", + "audit_title": "Schimbări de politică", + "audit_desc": "Istoricul modificărilor recente ale politicilor", + "no_audit": "Nu au fost înregistrate modificări ale politicii.", + "save_success": "Politica a fost salvată cu succes", + "save_failed": "Politica nu a fost salvată", + "load_failed": "Politicile nu au putut fi încărcate", + "block_direct_p2p_hint": "Se aplică acestei organizații." + }, + "attestation": { + "title": "Atestarea dispozitivului", + "subtitle": "Monitorizați verificarea identității dispozitivului și amprentele hardware", + "verified": "Verified", + "pending": "Pending", + "failed": "A eșuat", + "device_list": "Înregistrări de atestare a dispozitivului", + "device_list_desc": "Amprentele hardware și starea de verificare a identității", + "col_device": "ID dispozitiv", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Nu s-au găsit înregistrări de atestare.", + "verify_success": "Dispozitiv marcat ca verificat", + "verify_failed": "Nu s-a putut verifica dispozitivul", + "revoke_success": "Atestarea dispozitivului a fost revocată", + "revoke_failed": "Nu s-a revocat atestarea" + }, + "fleet": { + "title": "Managementul flotei", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Generator de flux de lucru", + "tab_compliance": "Compliance", + "res_title": "Maparea resurselor", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Unitatea de rețea", + "res_type_dns": "Server DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Adăugați o resursă", + "res_name": "Numele resursei", + "res_type": "Type", + "res_address": "Adresa / Calea", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organizare", + "res_scope_group": "grup", + "res_scope_device": "Dispozitiv", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Nu au fost găsite resurse. Faceți clic pe „Adăugați o resursă” pentru a crea una.", + "res_confirm_delete": "Sigur doriți să ștergeți această resursă?", + "task_title": "Programator de sarcini", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "A eșuat", + "task_search": "Search tasks…", + "task_create": "Creați sarcină", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Actualizare", + "task_type_restart": "Reporniți", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "ID-uri de dispozitiv sau nume de grup, separate prin virgulă", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Valoarea programului", + "task_script": "Script / Comandă", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Nu s-au găsit sarcini. Faceți clic pe „Creați sarcină” pentru a începe.", + "task_confirm_delete": "Sigur doriți să ștergeți această sarcină?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Constructor flux de lucru", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Salvați", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Selectați un nod pentru a-i edita proprietățile.", + "builder_node_trigger_manual": "Declanșare manuală", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Declanșare eveniment", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Reporniți Svc", + "builder_node_action_file_deploy": "Implementează fișierul", + "builder_node_action_message": "Trimite mesaj", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Trimiteți alertă", + "builder_node_result_chain": "Flux de lucru în lanț", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Nume flux de lucru:", + "comp_title": "Conformitate software", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Dispozitiv", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Executați remedierea automată pe acest dispozitiv?", + "comp_no_data": "Nu sunt disponibile date de conformitate. Rulați o scanare pentru a începe.", + "save": "Salvați", + "cancel": "Anulează", + "close": "Închide", + "edit": "Editați", + "delete": "Ștergeți", + "actions": "Actions", + "all_orgs": "Toate organizațiile", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Unitatea de rețea", + "type_dns": "Server DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Adăugați o resursă", + "edit_resource": "Editați resursa", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adresa / Calea", + "scope_org": "Organizare", + "scope_group": "grup", + "scope_device": "Dispozitiv", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Sigur doriți să ștergeți acest articol?", + "all_statuses": "Toate stările", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "A eșuat", + "search_tasks": "Search tasks�", + "create_task": "Creați sarcină", + "edit_task": "Editați sarcina", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Distribuire fișier", + "task_type_registry": "Registry", + "target_devices": "Dispozitive țintă", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Script / Comandă", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Încărcare", + "no_output": "Nicio ieșire disponibilă", + "error_loading": "Eroare la încărcarea datelor", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Declanșare manuală", + "node_schedule": "Schedule", + "node_event": "Declanșare eveniment", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Reporniți Svc", + "node_file_deploy": "Implementează fișierul", + "node_send_message": "Trimite mesaj", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Trimiteți alertă", + "node_chain": "Flux de lucru în lanț", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Toate organizațiile", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Dispozitiv", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Executați remedierea automată pe acest dispozitiv?" + }, + "scaling": { + "title": "Scaling & Management Releu", + "tab_overview": "Prezentare generală", + "tab_relays": "Relay Nodes", + "tab_rules": "Reguli de atribuire", + "tab_capacity": "Planificarea capacității", + "arch_title": "Arhitectura de rețea", + "arch_loading": "Se încarcă diagrama arhitecturii...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Total Dispozitive", + "stat_active_sessions": "Sesiuni active", + "stat_bandwidth": "Lățimea de bandă totală", + "relay_health": "Sănătate releu", + "no_relays": "Nu au fost configurate noduri releu. Adăugați primul nod releu pentru a distribui sarcina.", + "relay_search": "Căutați relee...", + "relay_add": "Adăugați nod releu", + "relay_edit": "Editați nodul releu", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Dispozitive", + "col_sessions": "Sesiuni", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Releu țintă", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Activat", + "status_disabled": "Dezactivat", + "confirm_delete_relay": "Sigur doriți să ștergeți acest nod releu?", + "confirm_delete_rule": "Sigur doriți să ștergeți această regulă de atribuire?", + "rules_hint": "Regulile de atribuire determină ce server de retransmisie gestionează anumite grupuri de dispozitive. Regulile sunt evaluate în funcție de prioritate (mai întâi cea mai mică).", + "rule_add": "Add Rule", + "rule_edit": "Editați regula", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Grup de dispozitive", + "match_tag": "Eticheta dispozitivului", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Nod principal de rezervă", + "fallback_nearest": "Cel mai apropiat releu", + "relay_max_sessions": "Sesiuni maxime", + "relay_max_bandwidth": "Lățime de bandă maximă (Mbps)", + "cap_tiers": "Niveluri de capacitate", + "cap_loading": "Se încarcă datele despre capacitatea...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Nu există recomandări disponibile.", + "cap_planning": "Planificarea infrastructurii", + "cap_config": "Configurare", + "cap_max_devices": "Max Dispozitive", + "cap_max_sessions": "Sesiuni maxime", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Capacitatea dispozitivului", + "cap_tier_sessions": "Capacitatea de sesiune", + "cap_tier_bandwidth": "Capacitatea lățimii de bandă", + "cap_single_sqlite": "Server unic (SQLite)", + "cap_single_pg": "Server unic (PostgreSQL)", + "cap_master_3": "Master + 3 relee", + "cap_master_10": "Master + 10 relee", + "rec_no_relays": "Nu au fost configurate noduri releu. Luați în considerare adăugarea de noduri releu pentru performanță și redundanță mai bune.", + "rec_devices_high": "Utilizarea dispozitivului este mare. Luați în considerare adăugarea mai multor noduri de releu pentru a distribui sarcina.", + "rec_sessions_high": "Capacitatea sesiunii se apropie de limita. Luați în considerare modernizarea infrastructurii de releu.", + "rec_cpu_high": "Unele noduri releu raportează o utilizare ridicată a CPU. Luați în considerare echilibrarea sarcinii sau upgrade-urile de capacitate.", + "rec_all_good": "Toate sistemele funcționează în parametri normali. Nu este necesară nicio acțiune.", + "save": "Salvați", + "cancel": "Anulează", + "edit": "Editați", + "delete": "Ștergeți", + "close": "Închide", + "no_rules": "Fără reguli de atribuire.", + "relays_info_banner": "Această listă este informativă. Serverele releu utilizate efectiv de clienți sunt configurate prin variabila de mediu RELAY_SERVERS de pe serverul BetterDesk.", + "relay_name_address_required": "Numele și adresa sunt obligatorii.", + "relay_save_failed": "Nu s-a salvat nodul releu.", + "relay_delete_failed": "Nu s-a șters nodul releu.", + "relay_saved": "Nodul releu a fost salvat.", + "relay_deleted": "Nodul releu a fost șters.", + "rule_name_value_required": "Numele regulii și valoarea potrivirii sunt obligatorii.", + "rule_save_failed": "Nu s-a salvat regula.", + "rule_delete_failed": "Nu s-a șters regula.", + "rule_saved": "Regula salvată.", + "rule_deleted": "Regula ștearsă." + }, + "cross_platform": { + "title": "Compatibilitate între platforme", + "tab_matrix": "Matricea de compatibilitate", + "tab_distribution": "Distribuție", + "tab_protocols": "Protocoale", + "tab_limitations": "Limitări", + "matrix_hint": "Matrice de suport pentru funcții pe toate platformele acceptate. Verde = suport complet, galben = parțial, gri = nu este disponibil, albastru = planificat.", + "col_feature": "Funcție", + "legend_full": "Sprijin deplin", + "legend_partial": "Sprijin parțial", + "legend_none": "Nu este disponibil", + "legend_planned": "Planificat", + "platform_breakdown": "Defalcarea platformei", + "arch_breakdown": "Defalcarea arhitecturii", + "version_breakdown": "Defalcare versiuni", + "summary": "Sumar", + "total_devices": "Total Dispozitive", + "unique_platforms": "Platforme", + "unique_archs": "Arhitecturi", + "unique_versions": "Versiuni client", + "no_devices": "Niciun dispozitiv înregistrat încă.", + "protocols_hint": "Negocierea capabilității protocolului asigură că fiecare client primește numai caracteristicile pe care le acceptă. Serverul adaptează comportamentul pe baza capacităților raportate.", + "capability_negotiation": "Negocierea capacității", + "codec_support": "Asistență pentru codec (dispozitive online)", + "feature_support": "Asistență pentru funcții (dispozitive online)", + "no_codec_data": "Nu există date de codec disponibile de pe dispozitivele online.", + "no_feature_data": "Nu există date despre funcții disponibile de pe dispozitivele online.", + "protobuf_schema": "Schemă Protocol Buffers", + "diagram_client": "Client", + "diagram_server": "Server BetterDesk", + "diagram_peer": "Peer la distanță", + "limitations_hint": "Fiecare platformă are limitări specifice care afectează funcțiile disponibile. Examinați aceste constrângeri atunci când planificați implementările.", + "feat_desktop_client": "Client desktop", + "feat_background_agent": "Agent de fundal", + "feat_remote_target": "Țintă de la distanță", + "feat_screen_capture": "Captură de ecran", + "feat_input_injection": "Injecție de intrare", + "feat_file_transfer": "Transfer de fișiere", + "feat_clipboard_sync": "Sincronizare clipboard", + "feat_audio_streaming": "Streaming audio", + "feat_chat": "Chat", + "feat_h264": "Codec H.264", + "feat_vp9": "Codec VP9", + "feat_av1": "Codec AV1", + "feat_cdap_agent": "Agent CDAP", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Browser web", + "platform_chromeos": "ChromeOS", + "status_production": "Producție", + "status_testing": "Testare", + "status_planned": "Planificat", + "status_limited": "Limitat", + "status_experimental": "Experimental", + "limit_win_uac": "Înălțimea UAC este necesară pentru instalarea serviciului și injecția de intrare pe desktop-uri securizate.", + "limit_win_service": "Rulează ca serviciu NSSM; necesită privilegii de administrator pentru instalare.", + "limit_win_firewall": "Windows Regulile de firewall trebuie să permită porturile 21115-21119 pentru conexiunile releu.", + "limit_linux_wayland": "Compozitorii Wayland restricționează capturarea de ecran programatică; Este necesar portalul PipeWire API.", + "limit_linux_pipewire": "Captura audio necesită PipeWire; PulseAudio alternativă disponibilă, dar limitată.", + "limit_linux_arm": "build-uri ARM64 disponibile; unele codecuri pot folosi decodarea software (mai lentă).", + "limit_mac_screen": "Este necesară permisiunea de înregistrare a ecranului în Preferințe sistem > Confidențialitate și securitate.", + "limit_mac_signing": "Agentul trebuie să fie semnat cu ID-ul de dezvoltator Apple pentru distribuire.", + "limit_mac_notarize": "Este necesară legalizarea notarului pentru macOS Gatekeeper (distribuție non-App Store).", + "limit_android_projection": "MediaProjection API necesită consimțământul utilizatorului pentru fiecare sesiune de captură de ecran.", + "limit_android_accessibility": "Injecția de intrare necesită AccessibilityService; restricționat în Android 14+.", + "limit_android_battery": "Serviciu de fundal limitat de modul Doze; poate necesita scutirea de optimizare a bateriei.", + "limit_ios_capture": "Apple interzice capturarea ecranului în fundal; modul numai pentru vizualizare acceptat.", + "limit_ios_input": "Nu este permisă injecția de intrare; numai vizualizare de la distanță și chat.", + "limit_ios_appstore": "Distribuție numai prin App Store; TestFlight pentru testarea beta.", + "limit_web_https": "WebCodecs API și WebRTC necesită HTTPS; HTTP revine la JMuxer (codecuri limitate).", + "limit_web_codec": "Suportul pentru codec depinde de browser; H.264 acceptat pe scară largă, VP9/AV1 variază.", + "limit_web_performance": "Performanță limitată de caseta de testare a browserului; fără accelerare hardware directă.", + "limit_chrome_crostini": "Suport complet al agentului numai în interiorul containerului Crostini Linux.", + "limit_chrome_pwa": "Modul PWA oferă funcții numai pentru web; fără capacități de agent nativ.", + "limit_chrome_input": "Injecția de intrare nu este acceptată în afara containerului Crostini.", + "feat_session_recording": "Înregistrare sesiune", + "feat_multi_monitor": "Monitoare multiple", + "feat_unattended_access": "Acces nesupravegheat", + "limit_win_virtual_account": "Serviciue laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Serviciue laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Audit de securitate", + "tab_overview": "Prezentare generală", + "tab_events": "Evenimente de audit", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Scor de securitate", + "failed_logins": "Conectări eșuate (24 de ore)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Chei vechi (>90d)", + "security_checks": "Verificări de securitate", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Securizat", + "enabled": "Activat", + "disabled": "Dezactivat", + "all_events": "All Events", + "event_login_failed": "Conectarea a eșuat", + "event_login_success": "Logare succes", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Configurație schimbată", + "event_key_created": "Cheie creată", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Nu au fost găsite evenimente de audit.", + "hardening_hint": "Priorități de întărire a securității pentru implementarea dvs. BetterDesk. Articolele sunt ordonate în funcție de gravitate.", + "no_hardening": "Nu există articole de întărire disponibile.", + "vuln_hint": "Rezultatele scanării vulnerabilității dependenței. Rulați auditul npm în mod regulat pentru a menține dependențele în siguranță.", + "no_vulns": "Nu au fost găsite vulnerabilități. Dependența dvs. este în siguranță." + }, + "languages": { + "title": "Managementul Limbii", + "total_languages": "Limbi totale", + "fully_translated": "Tradus integral", + "needs_review": "Necesită revizuire", + "reference_keys": "Chei de referință", + "no_languages": "Nu s-au găsit fișiere de limbă.", + "badge_reference": "Reference", + "badge_review": "Necesită revizuire", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Vizualizare Lipsă", + "fix_missing": "Fix Missing", + "missing_keys_for": "Lipsesc cheile pentru", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "și {n} mai multe...", + "all_keys_present": "Toate cheile sunt prezente!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Cheile lipsă din {code} trebuie traduse manual.", + "no_fix_needed": "Nu lipsesc chei de reparat." + }, + "resource_control": { + "title": "Controlul resurselor", + "tab_overview": "Prezentare generală", + "tab_usb": "USB Control", + "tab_optical": "Unități optice", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Cote de resurse", + "compliance_by_category": "Conformitate pe categorii", + "device_compliance": "Conformitatea dispozitivului", + "search_devices": "Căutați dispozitive...", + "col_device": "Dispozitiv", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Total Dispozitive", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Rata de conformitate", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Configurați", + "no_devices": "Nu s-au găsit dispozitive", + "usb_title": "Stocare USB", + "usb_hint": "Controlați accesul la dispozitivul de stocare USB pentru dispozitivul selectat sau pentru politica implicită la nivelul întregii organizații.", + "usb_storage_policy": "USB Politica de stocare", + "usb_whitelist": "Dispozitive incluse pe lista albă (unul pe linie)", + "usb_whitelist_hint": "VID:PID (de ex. 0781:5583)", + "usb_audit_log": "Înregistrați conexiunile dispozitivelor USB", + "optical_title": "Controlul unității optice", + "optical_hint": "Controlați accesul la unitatea CD/DVD/Blu-ray pentru dispozitivul selectat.", + "optical_policy": "Politica unității optice", + "optical_audit_log": "Înregistrați accesul la unitatea optică", + "monitors_title": "Monitorizare Management", + "monitors_hint": "Configurați setările monitorului, inclusiv numărul maxim, aplicarea rezoluției, luminozitatea și programele de alimentare.", + "monitors_max_count": "Monitoare maxime (0 = nelimitat)", + "monitors_max_hint": "0 înseamnă fără limită", + "monitors_resolution": "Rezolutie maxima", + "monitors_brightness": "Limită de luminozitate", + "monitors_power_schedule": "Program de alimentare", + "monitors_power_hint": "de ex. off:22:00-06:00", + "disks_title": "Control acces la disc", + "disks_hint": "Configurați politicile de acces la disc, inclusiv modul numai citire, aplicarea criptării și vizibilitatea partiției.", + "disks_readonly": "Forțați modul numai citire", + "disks_encryption": "Necesită criptare (BitLocker/LUKS)", + "disks_smart": "Activați S.M.A.R.T. monitorizare", + "disks_hidden": "Partiții ascunse", + "disks_hidden_hint": "Litere de unitate sau puncte de montare separate prin virgulă", + "quotas_title": "Cote de resurse", + "quotas_hint": "Setați CPU, RAM, lățime de bandă și cote de disc per utilizator pentru dispozitivul selectat.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Limită de lățime de bandă (Mbps)", + "quotas_bandwidth_hint": "0 = nelimitat", + "quotas_disk_quota": "Cotă de disc (GB)", + "quotas_disk_hint": "0 = nelimitat", + "quotas_process_whitelist": "Procesează lista albă (una pe linie)", + "quotas_process_hint": "de ex. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Numai pe lista albă", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Actualizări de software", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Versiune instalată", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Verificați actualizările", + "checking": "Checking…", + "up_to_date": "La zi", + "update_available": "Actualizare disponibilă", + "changelog": "Release Notes", + "no_changelog": "Nu sunt disponibile note de lansare", + "files_changed": "Fișierele schimbate", + "files": "fişiere", + "changes_unavailable": "Nu s-a putut încărca lista de modificări ale fișierelor. Puteți instala în continuare actualizarea.", + "create_backup": "Creați o copie de rezervă înainte de actualizare", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Se instalează actualizarea...", + "creating_backup": "Se creează backup...", + "downloading": "Se descarcă fișiere...", + "install_success": "Actualizare instalată cu succes. Consola se repornește...", + "install_failed": "Instalarea actualizării a eșuat", + "restarting": "Se așteaptă repornirea consolei...", + "restart_complete": "Consola a repornit cu succes", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Nicio versiune de actualizare selectată. Verificați mai întâi actualizările.", + "backups_title": "Actualizați copii de rezervă", + "backups_desc": "Backup-uri de pre-actualizare create automat înainte de fiecare actualizare", + "no_backups": "Nu s-au găsit copii de rezervă de actualizare", + "restore": "Restore", + "restore_confirm": "Sigur doriți să restaurați din această copie de rezervă? Fișierele modificate vor fi suprascrise.", + "restore_success": "Backup restaurat cu succes. Consola se repornește...", + "baseline_set": "Set de linii de bază", + "commits_behind": "se angajează în urmă", + "total_files": "Numărul total de fișiere", + "applied": "Applied", + "failed": "A eșuat", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Du-te Server", + "component_agent": "Agent", + "component_scripts": "Scripturi și Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Se verifică Go...", + "go_not_found": "Du-te neinstalat", + "go_check_failed": "Nu s-a putut verifica disponibilitatea Go", + "server_building": "Compilarea Go server... Aceasta poate dura câteva minute.", + "server_built": "Binar de server compilat", + "server_build_failed": "Compilarea serverului a eșuat", + "server_stale_title": "Binarul serverului este învechit", + "server_stale_desc": "Sursa Go server a fost actualizată, dar binarul care rulează nu a fost reconstruit. Reconstruiți-l acum pentru a aplica actualizările de securitate și bibliotecă.", + "rebuild_server": "Reconstruiți serverul binar", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Binarul serverului a fost reconstruit și repornit", + "rebuild_server_failed": "Reconstrucția binară a serverului a eșuat", + "server_deployed": "Server binar implementat", + "server_deploy_failed": "Implementarea serverului a eșuat", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Se descarcă sursa serverului...", + "delete": "Ștergeți", + "delete_confirm": "Ștergeți definitiv backupul {name}? Acest lucru nu poate fi anulat.", + "delete_success": "Backup șters", + "delete_failed": "Nu s-a șters backupul", + "retention_label": "Păstrați N cele mai recente copii de rezervă", + "retention_hint": "Backup-urile mai vechi sunt șterse automat după fiecare actualizare. Folosiți 0 pentru a păstra toate copiile de rezervă.", + "retention_saved": "Setarea de păstrare a fost salvată", + "retention_invalid": "Retenția trebuie să fie un număr întreg între 0 și 1000", + "retention_required_for_prune": "Setați mai întâi o valoare de retenție mai mare decât 0", + "prune_now": "Apply now", + "prune_confirm": "Păstrați numai cele mai recente copii de siguranță {n} și ștergeți restul?", + "prune_done": "Copii de rezervă {n} tăiate", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Metoda de actualizare", + "strategy_download": "Descărcați binarul pre-construit", + "strategy_compile": "Compilați de la sursă", + "both_available": "Descărcați și compilați", + "download_available": "Descărcare disponibilă", + "no_method": "Nicio metodă de actualizare", + "no_release": "No release", + "available": "Disponibil", + "server_downloading": "Se descarcă fișierul binar al serverului...", + "server_downloaded": "Binarul serverului a fost descărcat", + "server_download_failed": "Descărcarea binară de server a eșuat", + "server_download_note": "Un binar pre-construit va fi descărcat din versiunile GitHub. Acest lucru durează de obicei mai puțin de un minut.", + "install_go_hint": "Instalați Go de la https://go.dev/dl/ pentru a activa compilarea sau publicați o versiune cu fișiere binare predefinite", + "strategy_install_go": "Instalați automat Go și compilați", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Reconstrucție automată gata", + "toolchain_ready": "Toolchain instalat", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Se descarcă lanțul de instrumente Go...", + "toolchain_failed": "Instalarea Go Toolchain a eșuat", + "modal_title": "Instalarea actualizării", + "modal_done_title": "Actualizare finalizată", + "modal_close": "Închide", + "modal_reload_now": "Reîncărcați consola", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Fișierele consolei", + "phase_server": "Componentă server", + "phase_restart": "Reporniți", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Backup omis (pe alegerea utilizatorului)", + "server_skipped": "Go server a fost omis", + "server_not_selected": "Go server not selected", + "server_processing": "Se procesează actualizarea Go server...", + "no_restart_needed": "Nu este necesară repornirea", + "complete": "Actualizare aplicată", + "complete_summary": "Actualizarea a fost aplicată cu succes.", + "complete_with_errors": "Actualizarea s-a încheiat, dar unii pași au eșuat. Vezi detalii mai jos.", + "modal_done_with_errors_title": "Actualizarea s-a terminat cu erori", + "console_will_restart": "Procesul consolei va reporni acum...", + "restart_complete_msg": "Consola s-a terminat de repornit. Faceți clic pe reîncărcați pentru a încărca noua versiune. Pagina se va reîncărca automat în 8 secunde.", + "refresh_recommended": "Elemente statice modificate — reîncărcați pagina pentru a vedea noua interfață de utilizare.", + "confirm_title": "Aplicați actualizarea", + "confirm_with_backup": "O copie de rezervă pre-actualizare va fi creată automat.", + "confirm_no_backup": "Nu va fi creată nicio copie de rezervă (procedați pe propriul risc)." + }, + "permissions": { + "title": "Permisiuni", + "subtitle": "Gestionați permisiunile bazate pe roluri și înlocuirile personalizate", + "info_title": "Cum funcționează permisiunile", + "info_desc": "Fiecare rol are permisiuni implicite. Puteți adăuga sau elimina permisiuni individuale pentru fiecare rol, comutându-le mai jos. Modificările personalizate sunt evidențiate și pot fi revenite la valorile implicite în orice moment.", + "select_role": "Selectați rolul", + "select_role_placeholder": "Alege un rol...", + "reset_overrides": "Resetați toate suprascrierile", + "granted": "Acordat", + "overrides": "Suprascrieri", + "level": "Nivel", + "super_admin_tag": "Acces complet", + "server_level_tag": "La nivel de server", + "custom": "Personalizat", + "default": "Implicit", + "revert": "Reveniți la implicit", + "saved": "Permisiunea a fost actualizată", + "reverted": "A revenit la valorile prestabilite", + "all_reverted": "Toate suprascrierile au fost anulate", + "confirm_reset": "Resetați toate înlocuirile personalizate pentru acest rol la valorile prestabilite?", + "empty_title": "Selectați un rol", + "empty_desc": "Alegeți un rol din meniul derulant de mai sus pentru a vedea și gestiona permisiunile acestuia.", + "locked_title": "Super administrator", + "locked_desc": "Super Admin are toate permisiunile în mod implicit și nu poate fi personalizat.", + "cat_device": "Dispozitive", + "cat_user": "Utilizatori", + "cat_server": "Sistem server", + "cat_org": "Organizații", + "cat_audit": "Audit & Monitorizare", + "cat_cdap": "CDAP", + "cat_enrollment": "Înregistrare", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Vizualizați dispozitivele", + "perm_device_connect": "Conectați-vă la dispozitive", + "perm_device_edit": "Editați dispozitivele", + "perm_device_delete": "Ștergeți dispozitivele", + "perm_device_ban": "Interziceți/dezbandați dispozitivele", + "perm_device_change_id": "Schimbați ID-ul dispozitivului", + "perm_user_view": "Vizualizați utilizatorii", + "perm_user_create": "Creați utilizatori", + "perm_user_edit": "Editați utilizatori", + "perm_user_delete": "Ștergeți utilizatori", + "perm_server_config": "Configurare server", + "perm_server_keys": "Gestionați cheile API", + "perm_org_create": "Creați organizații", + "perm_org_edit": "Editați organizațiile", + "perm_org_delete": "Ștergeți organizațiile", + "perm_org_manage_users": "Gestionați utilizatorii organizației", + "perm_org_manage_devices": "Gestionați dispozitivele organizației", + "perm_audit_view": "Vizualizați jurnalele de audit", + "perm_metrics_view": "Vedeți valorile", + "perm_blocklist_edit": "Editați lista blocată", + "perm_cdap_view": "Vizualizați dispozitivele CDAP", + "perm_cdap_command": "Trimiteți comenzi CDAP", + "perm_cdap_terminal": "CDAP acces la terminal", + "perm_cdap_files": "CDAP acces la fișiere", + "perm_enrollment_manage": "Gestionați înscrierea", + "perm_enrollment_approve": "Aprobați înscrierea", + "perm_chat_access": "Acces chat", + "perm_branding_edit": "Editați brandingul", + "perm_server_attestation": "Atestare performanță server" + }, + "notifications": { + "title": "Notificări", + "empty": "Fără notificări noi", + "mark_all_read": "Marcați toate citite", + "see_all": "Vedeți toate cererile de ajutor", + "help_request": "Cerere de ajutor", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Ajustați consola la nevoile dvs. de viziune, mișcare și citire.", + "close": "Închideți meniul de accesibilitate", + "profiles": "Profiluri rapide", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Text mai mare, contrast puternic și focalizare.", + "profile_dyslexia": "Confortul de citire", + "profile_dyslexia_hint": "Font lizibil și spațiere mai mare.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Reduce tranzițiile și întrerupe animația.", + "profile_color_assist": "Suport de culoare", + "profile_color_assist_hint": "Filtru de culoare, etichete și linkuri evidențiate.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Spațiere între litere", + "word_spacing": "Spațierea cuvintelor", + "readable_font": "Font care poate fi citit", + "readable_font_hint": "Folosește forme de litere largi, familiare.", + "dyslexia_spacing": "Dislexie spațiere", + "dyslexia_spacing_hint": "Adaugă spație suplimentară pentru text lung.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Întuneric contrast ridicat", + "contrast_high_light": "Lumină cu contrast ridicat", + "contrast_yellow_black": "Galben pe negru", + "color_filter": "Filtru de viziune a culorilor", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Saturația culorii", + "underline_links": "Subliniați linkurile", + "underline_links_hint": "Face linkurile vizibile fără a se baza pe culoare.", + "highlight_links": "Evidențiați acțiunile", + "highlight_links_hint": "Conturează link-uri și butoane.", + "highlight_headings": "Evidențiați titluri", + "highlight_headings_hint": "Marchează titlurile secțiunilor cu o bară de culoare.", + "hide_media": "Dim media", + "hide_media_hint": "Estompează imaginile, videoclipurile și pânzele.", + "interaction": "Interaction", + "strong_focus": "Focalizare puternică", + "strong_focus_hint": "Afișează un inel mare de focalizare pentru tastatură.", + "large_cursor": "Cursor mare", + "large_cursor_hint": "Utilizează un indicator mai mare, cu contrast ridicat.", + "reduce_motion": "Reduceți mișcarea", + "reduce_motion_hint": "Scurtează tranzițiile și defilarea lină.", + "pause_animations": "Întrerupeți animațiile", + "pause_animations_hint": "Oprește mișcarea vizuală în buclă.", + "reading_guide": "Ghid de lectură", + "reading_guide_hint": "Urmează indicatorul cu o linie strălucitoare.", + "reading_mask": "Mască de lectură", + "reading_mask_hint": "Estompează conținutul deasupra și sub indicator.", + "preview": "Preview", + "preview_title": "Previzualizarea spațiului de lucru al operatorului", + "preview_text": "Verificați dacă textul, linkurile, comenzile și etichetele de stare sunt ușor de citit înainte de a închide acest meniu.", + "preview_link": "Link detalii dispozitiv", + "preview_status": "Online", + "preview_button": "Acțiune primară", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Gestionare server", + "subtitle": "Plan de control asemănător cabinei pentru gazda consolei BetterDesk (BETA).", + "beta_tooltip": "Funcție beta — în curs de dezvoltare activă.", + "notice_title": "Caracteristica beta", + "notice_body": "Aceste instrumente rulează pe gazda unde se află procesul consolei BetterDesk. Toate operațiunile sunt auditate. Domeniul de aplicare se va extinde în versiunile viitoare.", + "tab_overview": "Prezentare", + "tab_terminal": "Terminal", + "tab_files": "Fișiere", + "tab_services": "Servicii", + "cpu": "CPU", + "memory": "Memorie", + "load": "Încărcare medie", + "disks": "Discuri", + "history": "Istoric (ultimele 60 de mostre)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Timp de funcționare", + "no_disks": "Nu sunt disponibile date de disc", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY disponibil", + "term_connect": "Conectează", + "term_disconnect": "Deconectează", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Eroare de conectare", + "term_warning": "Comenzile rulează ca utilizator care deține procesul consolei. Adăugați o regulă sudoers pentru a activa elevația.", + "term_hint": "Sfat: tastați `sudo -i` pentru a escalada (necesită configurarea sudoers).", + "term_lib_failed": "Nu s-a încărcat biblioteca terminalului", + "files_up": "Sus cu un nivel", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Director gol", + "files_error": "Nu s-a putut enumera directorul", + "read_failed": "Nu s-a putut citi fișierul", + "save_failed": "Nu s-a putut salva fișierul", + "rename_failed": "Redenumirea a eșuat", + "delete_failed": "Ștergerea nu a reușit", + "delete_confirm": "Ștergeți această intrare?", + "mkdir_prompt": "Nume nou folder:", + "mkdir_failed": "Nu s-a putut crea folderul", + "file_saved": "Fișier salvat", + "binary_warn": "Fișier binar — doar previzualizare", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Servicii de căutare…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Nu s-au găsit servicii", + "svc_load_failed": "Serviciile nu au putut fi încărcate", + "svc_action_failed": "Acțiunea eșuată", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Reporniți", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Descărcați agentul BetterDesk", + "choose_platform": "Alege-ți platforma", + "choose_platform_hint": "Selectați programul de instalare care se potrivește cu sistemul dvs. de operare.", + "download": "Descărcați", + "building": "Construirea…", + "failed": "Construirea a eșuat", + "need_help": "Ai nevoie de ajutor?", + "powered_by": "Alimentat de" + }, + "server_attestation": { + "title": "Atestare server", + "subtitle": "Benchmark de performanță care determină capacitatea de conexiuni la distanță simultane la 80% prag CPU, RAM și disc.", + "warning_title": "Test de sarcină", + "warning_body": "Benchmark-ul simulează conexiuni WebSocket paralele la serverele de semnal și releu. Rulați în afara orelor de vârf — acest test solicită producția.", + "run_benchmark": "Rulare benchmark", + "abort": "Anulare", + "download_report": "Descărcare raport JSON", + "last_test": "Ultimul test", + "no_test_yet": "Niciun benchmark rulat încă", + "max_connections": "Conexiuni maxime", + "threshold_80": "Prag 80% — măsurători finale", + "disk": "Disc", + "ramp_chart": "Grafic rampă de sarcină", + "connections": "Conexiuni", + "connections_short": "con.", + "tier_guide_title": "Ce înseamnă fiecare nivel?", + "tier_bronze": "BRONZ", + "tier_iron": "FIER", + "tier_titanium": "TITAN", + "tier_platinum": "PLATINĂ", + "tier_obsidian": "OBSIDIAN", + "tier_none": "NECERTIFICAT", + "tier_bronze_desc": "1–25 conexiuni simultane — VPS mic (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 conexiuni — server mediu (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 conexiuni — server de înaltă performanță (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 conexiuni — infrastructură enterprise (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ conexiuni — clasă turbo: hardware dedicat, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Notă: În Docker, măsurătorile CPU/RAM pot reflecta limitele containerului, nu ale gazdei fizice.", + "badge_tooltip": "Atestare Server BetterDesk — certificat de performanță server", + "confirm_run": "Acest benchmark va solicita serverul cu conexiuni simulate. Continuați?", + "starting": "Se pornește...", + "complete": "Benchmark finalizat", + "signal_peers": "Peer-uri semnal", + "relay_sessions": "Sesiuni releu", + "page_error": "Nu s-a putut încărca pagina de Atestare Server", + "mode_estimated": "Estimat (WebSocket indisponibil)", + "incomplete": "Benchmark-ul s-a terminat fără un nivel valid" + }, + "commercialization": { + "title": "Comercializare", + "subtitle": "Pachete suport, sesiuni facturabile și rapoarte", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Funcție timpurie — facturarea și pachetele sunt în dezvoltare activă.", + "tabs": { + "overview": "Prezentare", + "packages": "Pachete și contracte", + "sessions": "Sesiuni", + "reports": "Rapoarte", + "settings": "Setări avansate" }, - "branding": { - "identity_title": "Identitatea de marcă", - "identity_desc": "Personalizați numele și descrierea aplicației afișate pe consolă", - "app_name": "Numele aplicației", - "app_description": "Descrierea aplicației", - "logo_title": "Logo", - "logo_desc": "Alegeți cum apare logo-ul dvs. în bara laterală și în pagina de conectare", - "logo_type_icon": "Pictograma Material", - "logo_type_svg": "Cod SVG", - "logo_type_image": "URL imagine", - "logo_icon_name": "Numele pictogramei", - "logo_icon_hint": "Introduceți un nume de pictograme materiale (de exemplu, dns, cloud, securitate). Consultați fonts.google.com/icons", - "logo_svg_code": "Cod SVG", - "logo_svg_hint": "Lipiți aici marcajul SVG. Acceptă elemente complete cu căi și stiluri.", - "logo_image_upload": "Încărcați imaginea", - "logo_image_choose": "Alegeți fișierul imagine", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Tip de fișier nevalid. Utilizați PNG, JPG, GIF, WebP sau SVG.", - "preview": "Previzualizare", - "colors_title": "Schema de culori", - "colors_desc": "Personalizați paleta de culori. Lăsați gol pentru a utiliza valorile implicite.", - "colors_backgrounds": "Culori fundal", - "colors_text": "Text", - "colors_accents": "Culori de accent", - "colors_borders": "Margini", - "import_export_title": "Import/Export", - "import_export_desc": "Salvați tema ca fișier JSON sau importați unul dintr-o altă instanță", - "export_theme": "Exportați tema", - "import_theme": "Importa temă", - "reset_defaults": "Resetați la valorile implicite", - "save_branding": "Salvați branding", - "saved": "Branding salvat cu succes. Se reîncarcă...", - "exported": "Tema a fost exportată", - "imported": "Tema a fost importată cu succes. Se reîncarcă...", - "import_error": "Nu s-a putut importa tema. Format de fișier nevalid.", - "reset_confirm": "Sigur doriți să resetați brandingul la valorile prestabilite? Acest lucru nu poate fi anulat.", - "reset_success": "Branding resetat la valorile implicite. Se reîncarcă...", - "logo_type_text": "Logo text", - "logo_text": "Text logo", - "logo_text_hint": "Textul principal afișat ca sigla mărcii dvs", - "logo_text_accent": "Text de accent", - "logo_text_accent_hint": "Text secundar de sub logo (de exemplu, numele produsului sau sloganul)", - "logo_upload_success": "Logo-ul a fost încărcat cu succes.", - "typography_title": "Tipografie", - "typography_desc": "Alegeți fonturi pentru titluri și textul corpului. Fonturile sunt descărcate pe server pentru auto-găzduire.", - "font_heading": "Font de titlu", - "font_heading_hint": "Folosit pentru titluri (H1–H6) și logo-ul text", - "font_body": "Font corp text", - "font_body_hint": "Folosit pentru textul corpului și elementele UI", - "font_search_placeholder": "Căutați fonturi...", - "font_system_default": "Implicit de sistem", - "font_clear": "Ștergere", - "font_cat_all": "Toate", - "font_downloaded_count": "fonturi descărcate pe server", - "powered_by": "Realizat cu:", - "background_title": "Fundal și aspect", - "background_desc": "Setați un fundal pentru consolă, gradient sau culoare solidă.", - "bg_type_none": "Niciunul", - "bg_type_color": "Culoare solidă", - "bg_type_gradient": "Gradient", - "bg_type_image": "Imagine", - "bg_color": "Culoare fundal", - "bg_gradient": "Gradient CSS", - "bg_gradient_hint": "Orice gradient CSS valid, ex. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Încărcare imagine de fundal", - "bg_image_choose": "Alegeți fișierul imagine", - "bg_image_hint": "PNG, JPG, WebP sau GIF. Max. 8 MB.", - "bg_image_url": "Calea imaginii / URL", - "bg_size": "Scalare imagine", - "bg_size_cover": "Acoperire (umplere ecran)", - "bg_size_contain": "Conținere (ajustare)", - "bg_size_auto": "Automat (original)", - "bg_blur": "Blur fundal", - "bg_overlay": "Suprapunere întunecată", - "bg_overlay_hint": "Întunecă fundalul pentru o lizibilitate mai bună.", - "bg_image_too_large": "Imaginea este prea mare. Dimensiunea maximă este de 8 MB.", - "bg_image_invalid_type": "Tip de fișier invalid. Utilizați PNG, JPG, WebP sau GIF.", - "bg_upload_success": "Imagine de fundal încărcată.", - "login_title": "Pagina de autentificare", - "login_desc": "Personalizați titlul, subtitlul și fundalul ecranului de autentificare.", - "login_heading": "Titlu autentificare", - "login_heading_placeholder": "Bine ați revenit", - "login_subheading": "Subtitlu autentificare", - "login_subheading_placeholder": "Conectați-vă la contul dvs.", - "login_bg_inherit": "Același ca și consola", - "agent_title": "Pagina de descărcare agent", - "agent_desc": "Personalizați portalul public de descărcare agent afișat utilizatorilor finali.", - "agent_show_powered": "Afișați \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Afișați linkul BetterDesk în subsolul portalului de descărcare.", - "footer_title": "Subsol și drepturi de autor", - "footer_desc": "Adăugați un rând de subsol personalizat pe ecranul de autentificare și în bara laterală a consolei.", - "footer_text": "Text subsol", - "footer_text_hint": "ex. notă privind drepturile de autor sau numele companiei.", - "show_powered": "Afișați link \"BetterDesk\"", - "show_powered_hint": "Numele și versiunea BetterDesk apar în subsolul autentificării și bara laterală.", - "custom_css_title": "CSS personalizat", - "custom_css_desc": "Avansat: injectați CSS personalizat în consolă și pagina de autentificare.", - "custom_css_hint": "Utilizați cu atenție. Max. 20.000 de caractere." + "clock": { + "title": "Ora serverului (NTP)", + "check_now": "Verifică acum", + "unsynced": "Ceasul serverului nu este sincronizat — sesiunile facturabile pot fi blocate" }, - "device_detail": { - "tab_overview": "Prezentare generală", - "tab_tags": "Etichete și note", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Conexiune", - "section_manage": "management", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Acest dispozitiv este interzis", - "no_reason": "Niciun motiv furnizat", - "tags": "Tags", - "no_tags": "Nu au fost atribuite etichete acestui dispozitiv", - "tag_placeholder": "Introduceți un nume de etichetă...", - "add_tag": "Add", - "tag_exists": "Această etichetă există deja", - "notes": "Notes", - "notes_placeholder": "Adăugați note despre acest dispozitiv...", - "danger_zone": "Danger Zone", - "action_connect_web": "Telecomanda web", - "action_connect_web_desc": "Conectați-vă prin intermediul browserului desktop la distanță", - "action_native_remote": "BetterDesk Telecomanda", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Client desktop", - "action_connect_desktop_desc": "Deschideți în aplicația client desktop", - "action_change_id_desc": "Schimbați ID-ul de înregistrare a dispozitivului", - "action_ban_desc": "Blocați conectarea acestui dispozitiv", - "action_unban_desc": "Permiteți acestui dispozitiv să se conecteze din nou", - "action_delete_desc": "Eliminați definitiv acest dispozitiv", - "tab_hardware": "Hardware", - "tab_metrics": "Metrici", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Capabilitati de codificare", - "section_live_metrics": "Valori live", - "section_current_usage": "Utilizare curentă", - "section_usage_history": "Istoricul utilizării", - "os": "Sistem de operare", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "Frecvența procesorului", - "total_memory": "Memoria totală", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Actualizat", - "device_groups": "Grupuri", - "no_sysinfo": "Nu există informații despre hardware disponibile", - "no_sysinfo_hint": "Informațiile de sistem vor apărea după ce dispozitivul trimite un raport sysinfo", - "no_metrics": "Nu sunt disponibile date de valori", - "no_metrics_hint": "Valorile vor apărea după ce dispozitivul trimite rapoarte de ritm cardiac", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Fișiere", - "agent_lazy_hint": "Faceți clic pe această filă pentru a încărca date live de la agent", - "agent_offline": "Agentul este offline", - "agent_timeout": "Agentul nu a răspuns la timp", - "agent_error": "Nu s-au încărcat datele de la agent", - "service_name": "Name", - "service_display": "Nume afișat", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Sesiuni facturabile active" }, - "inventory": { - "title": "Inventory", - "subtitle": "Inventarul hardware și software al dispozitivelor gestionate", - "device_id": "ID dispozitiv", - "hostname": "Hostname", - "os": "Sistem de operare", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Memoria totală", - "memory_used": "Used Memory", - "memory_available": "Memoria disponibilă", - "memory_usage": "Utilizarea memoriei", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Interfețe de rețea", - "software": "Software", - "software_count": "Software instalat", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Miezuri fizice", - "logical_cores": "Miezuri logice", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Disponibil", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "Adrese IP", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Colectionar care alerga", - "collector_stopped": "Colectionar a oprit", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Colectat la", - "no_data": "Nu sunt disponibile date de inventar încă. Faceți clic pe „Colectați acum” pentru a aduna informații despre sistem.", - "no_devices": "Nu s-au găsit dispozitive cu date de inventar", - "detail_title": "Detaliu inventar dispozitiv", - "telemetry": "Telemetry", - "view_detail": "Vizualizare Detaliu", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Pachet nou", + "name": "Nume", + "included_minutes": "Minute incluse", + "overage_rate": "Tarif depășire / h", + "currency": "Monedă", + "heading": "Pachete de suport", + "prompt_name": "Nume pachet", + "create_title": "Pachet nou pentru organizație", + "create_submit": "Creează pachet", + "select_org": "Organizație", + "select_org_placeholder": "Selectează organizația…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Bilete de asistență și urmărirea problemelor", - "create": "New Ticket", - "edit": "Editați biletul", - "delete": "Ștergeți biletul", - "detail": "Detaliu bilet", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Atribuit la", - "created_by": "Creat de", - "device": "Dispozitiv", - "sla_due": "SLA Due", - "created_at": "Creat", - "updated_at": "Actualizat", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Deschide", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Scrie un comentariu...", - "internal_note": "Notă internă (nu este vizibilă pentru utilizatorii finali)", - "attachments": "Attachments", - "upload_attachment": "Încărcați atașament", - "download": "Download", - "connect_device": "Conectați-vă la Dispozitiv", - "no_tickets": "Nu s-au găsit bilete", - "no_comments": "Niciun comentariu încă", - "no_attachments": "Fără atașamente", - "title_required": "Titlul este obligatoriu", - "delete_confirm": "Sigur doriți să ștergeți biletul #{id}?", - "delete_success": "Biletul a fost șters cu succes", - "created_success": "Biletul creat cu succes", - "updated_success": "Biletul a fost actualizat cu succes", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Caută bilete...", - "assign_to_me": "Atribuiți-mi", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Deschide", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Monitorizarea activității", - "subtitle": "Utilizarea aplicației și urmărirea inactiv", - "device": "Dispozitiv", - "hostname": "Hostname", - "sessions": "Sesiuni", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Aplicații de top", - "app_name": "Application", - "window_title": "Titlul ferestrei", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Număr de sesiuni", - "total_active": "Total activ", - "total_idle": "Total Idle", - "detail_count": "Înregistrări de detaliu", - "no_data": "Nu sunt disponibile date despre activitate", - "no_sessions": "Fara sedinte", - "filter_from": "De la", - "filter_to": "Pentru a", - "filter_apply": "Aplicați filtrul", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Căutați dispozitive...", - "date_range": "Date Range", - "device_id": "ID dispozitiv", - "session_start": "Începutul sesiunii", - "session_end": "Sfârșitul sesiunii", - "user": "User", - "no_activity": "Nu a fost înregistrată nicio activitate", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Fără aplicații" - }, - "automation": { - "title": "Automatizare și alerte", - "subtitle": "Reguli de alertă, comenzi de la distanță și configurație SMTP", - "rules": "Alert Rules", - "rules_subtitle": "Definiți condițiile care declanșează notificări", - "alerts": "Istoricul alertelor", - "alerts_subtitle": "Vizualizați și confirmați alertele declanșate", - "commands": "Comenzi de la distanță", - "commands_subtitle": "Trimiteți comenzi către dispozitive de la distanță", - "smtp": "Configurare SMTP", - "smtp_subtitle": "Setări de notificare prin e-mail", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Tip condiție", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Dispozitivul țintă", - "scope_all": "Toate Dispozitivele", - "cooldown": "Răcire (secunde)", - "notify_emails": "E-mailuri de notificare", - "enabled": "Activat", - "disabled": "Dezactivat", - "create_rule": "Creați o regulă", - "edit_rule": "Editați regula", - "delete_rule": "Ștergeți regula", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Declanșat la", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Mai mare decât", - "op_gte": "Mai mare sau egal", - "op_lt": "Less than", - "op_lte": "Mai puțin sau egal", - "op_eq": "Egal cu", - "op_neq": "Nu egal cu", - "type_cpu_usage": "Utilizare CPU (%)", - "type_memory_usage": "Utilizarea memoriei (%)", - "type_disk_usage": "Utilizare disc (%)", - "type_offline_duration": "Durata offline (e)", - "type_idle_duration": "Durata inactiv (e)", - "type_custom": "Custom", - "command_type": "Tip de comandă", - "command_payload": "Comandă / Script", - "command_result": "Result", - "command_status": "Status", - "send_command": "Trimite comanda", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "A eșuat", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Nume de utilizator", - "smtp_pass": "Parolă", - "smtp_from": "De la Adresă", - "smtp_test": "Testează conexiunea", - "smtp_save": "Salvați configurația", - "smtp_test_success": "Conexiune reușită", - "smtp_test_failed": "Conexiunea a eșuat", - "no_rules": "Nu au fost configurate reguli de alertă", - "no_alerts": "Nu au fost declanșate alerte", - "no_commands": "Nu au fost trimise comenzi", - "id_payload_required": "ID-ul dispozitivului și sarcina utilă sunt necesare", - "no_commands_sent": "Nu au fost trimise încă comenzi" - }, - "file_transfer": { - "title": "Transfer de fișiere", - "transfers": "Transfers", - "new_transfer": "Transfer nou", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Dimensiunea fișierului", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Dispozitiv", - "initiated_by": "Inițiat de", - "created_at": "Creat la", - "cancel": "Anulează", - "cancel_confirm": "Sigur doriți să anulați acest transfer?", - "download_file": "Descărcați fișierul", - "browse_files": "Răsfoiți fișiere", - "select_file": "Selectați Fișier", - "select_device": "Selectați Dispozitiv", - "no_transfers": "Fără transfer de fișiere", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "A eșuat", - "status_cancelled": "Cancelled", - "bytes_transferred": "Biți transferați", - "chunks": "Chunks", - "transfer_started": "Transferul a început", - "transfer_completed": "Transfer finalizat", - "transfer_failed": "Transferul a eșuat", - "transfer_cancelled": "Transfer anulat", - "max_file_size": "Dimensiunea maximă a fișierului: 4 GB", - "error_too_large": "Fișierul este prea mare", - "error_no_device": "Niciun dispozitiv selectat", - "error_no_file": "Niciun fișier selectat" - }, - "network": { - "title": "Monitorizarea rețelei", - "targets": "Țintele de monitorizare", - "add_target": "Add Target", - "edit_target": "Editați ținta", - "delete_target": "Ștergeți ținta", - "delete_confirm": "Sigur doriți să ștergeți această țintă?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Timp limită", - "interval": "Interval de timp", - "enabled": "Activat", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Verificați istoricul", - "stats": "Statistics", - "total_targets": "Total ținte", - "targets_up": "Targets Up", - "targets_down": "Țintele în jos", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Instrumente de rețea", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Verificare port", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Porniți Monitor", - "monitor_stop": "Opriți monitorul", - "monitor_running": "Monitorul rulează", - "monitor_stopped": "Monitorul este oprit", - "no_targets": "Nu au fost configurate obiective de monitorizare", - "no_history": "Nu este disponibil istoricul verificărilor", - "error_code": "Error", - "status_code": "Cod de stare HTTP", - "search_targets": "Căutați ținte...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Verificați istoricul", - "name_host_required": "Numele și gazda sunt necesare", - "uptime": "Uptime", - "response_time": "Timp de răspuns", - "avg_response": "Răspuns mediu", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Timp de răspuns (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Ultimele 24 de ore", - "last_7d": "Last 7 days", - "last_30d": "Ultimele 30 de zile" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "Politici DLP", - "add_policy": "Adăugați o politică", - "edit_policy": "Editați politica", - "delete_policy": "Ștergeți politica", - "delete_confirm": "Sigur doriți să ștergeți această politică?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Activat", - "disabled": "Dezactivat", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB Dispozitiv", - "rule_type_file": "Operație cu fișiere", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "ID furnizor (VID)", - "pid": "ID produs (PID)", - "serial": "Număr de serie", - "device_class": "Clasa dispozitivului", - "drive_type": "Drive Type", - "file_extensions": "Extensii de fișiere", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Fișier", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Nu au fost configurate politici DLP", - "no_events": "Nu au fost înregistrate evenimente DLP", - "stats": "Statistics", - "total_events": "Total evenimente", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Fișier evenimente", - "device_id": "ID dispozitiv", - "policy_matched": "Politică potrivită", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Politici totale", - "active_policies": "Politici active", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Politici", - "tab_events": "Events", - "search_policies": "Politicile de căutare...", - "create_policy": "Creați o politică", - "policy_type": "Tip politică", - "scope": "Scope", - "events_count": "Events", - "search_events": "Căutați evenimente...", - "event_time": "Event Time", - "device": "Dispozitiv", - "policy": "Politică", - "detail": "Detail", - "scope_help": "ID-urile dispozitivelor separate prin virgulă sau lăsați necompletate pentru toate", - "scope_all": "Toate Dispozitivele", - "active": "Active", - "type_file_type": "Tip de fișier", - "type_clipboard": "Clipboard sistem", - "type_screen_share": "Partajarea ecranului", - "type_file_transfer": "Transfer de fișiere", - "policy_desc": "Descrierea politicii", - "type_usb": "USB" + "sessions": { + "device": "Dispozitiv", + "operator": "Operator", + "duration": "Durată", + "phase": "Fază", + "amount": "Sumă" }, "reports": { - "title": "Reports", - "generate": "Generați raport", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Rezumatul dispozitivului", - "type_activity": "Rezumatul activității", - "type_security": "Raport de securitate", - "type_tickets": "Raportul biletelor", - "type_network": "Raport de rețea", - "type_inventory": "Raport de inventar", - "type_alerts": "Raport de alertă", - "saved": "Rapoarte salvate", - "save_report": "Salvați raportul", - "delete_report": "Ștergeți raportul", - "delete_confirm": "Sigur doriți să ștergeți acest raport salvat?", - "no_saved": "Niciun raport salvat", - "report_title": "Title", - "created_by": "Creat de", - "created_at": "Creat la", - "filters": "Filters", - "date_from": "De la", - "date_to": "Pentru a", - "device_filter": "ID dispozitiv", - "generated_at": "Generat la", - "section": "Secțiunea de date", - "total_devices": "Total Dispozitive", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Platformă de distribuție", - "top_applications": "Aplicații de top", - "total_active": "Timp total activ", - "total_idle": "Timp total de inactivitate", - "dlp_stats": "Statistici DLP", - "banned_devices": "Dispozitive interzise", - "audit_logs": "Audit Logs", - "ticket_stats": "Statistica biletelor", - "category_distribution": "Distribuție pe categorii", - "priority_distribution": "Distribuție prioritară", - "targets_status": "Stare ținte", - "os_distribution": "Distribuție OS", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Alerte recente", - "tab_generate": "Generați raport", - "tab_saved": "Rapoarte salvate", - "type_devices_desc": "Prezentare generală a tuturor dispozitivelor, platformelor și stărilor", - "type_activity_desc": "Utilizarea aplicației și rezumatul timpului de inactivitate", - "type_security_desc": "Interziceți acțiunile, evenimentele DLP și jurnalele de audit", - "type_tickets_desc": "Statistici privind biletele și performanța SLA", - "type_network_desc": "Țintele de monitorizare a rețelei și datele privind timpul de funcționare", - "type_inventory_desc": "Rezumatul inventarului hardware și software", - "type_alerts_desc": "Reguli de alertă și istoricul alertelor declanșate", - "report_name": "Report Name", - "format": "Format", - "save": "Salvați raportul", - "preview": "Preview", - "download": "Download", - "delete_saved": "Ștergeți raportul", - "raw_json": "Raw JSON" + "session": "Sesiune", + "summary": "Rezumat", + "date": "Dată" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Editați chiriașul", - "delete_tenant": "Ștergeți chiriașul", - "delete_confirm": "Sigur doriți să ștergeți acest chiriaș? Toate atribuirile de dispozitiv și utilizatori vor fi eliminate.", - "name": "Name", - "slug": "Slug", - "contact_name": "Nume de contact", - "contact_email": "E-mail de contact", - "max_devices": "Max Dispozitive", - "max_devices_hint": "0 = nelimitat", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Dispozitive", - "users": "Users", - "assign_device": "Atribuiți dispozitiv", - "assign_devices": "Atribuiți dispozitive", - "remove_device": "Eliminați dispozitivul", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Nu au fost configurați chiriași", - "no_devices": "Niciun dispozitiv atribuit acestui chiriaș", - "no_users": "Niciun utilizator alocat acestui chiriaș", - "stats": "Statistica chiriașilor", - "total_devices": "Total Dispozitive", - "online_devices": "Dispozitive online", - "total_users": "Total Users", - "created_at": "Creat la", - "updated_at": "Actualizat la", - "slug_exists": "Limac de chiriaș există deja", - "total_tenants": "Total chiriași", - "active_tenants": "Chiriași activi", - "search": "Cauta chiriasi...", - "create_tenant": "Creați chiriaș", - "detail": "Detaliu chiriaș", - "contact": "Contact", - "enabled": "Activat", - "disabled": "Dezactivat", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Contracte organizație", + "new": "Atribuie pachet", + "org": "Organizație", + "package": "Pachet", + "remaining": "Minute rămase", + "status": "Stare", + "actions": "Acțiuni", + "suspend": "Suspendă", + "activate": "Activează", + "select_org": "Selectează organizația", + "select_package": "Selectează pachetul", + "no_orgs": "Nu s-au găsit organizații", + "no_packages": "Creați mai întâi un pachet" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Căutați după ID dispozitiv, nume de gazdă sau IP...", - "no_registrations": "No registration requests", - "col_device_id": "ID dispozitiv", - "col_hostname": "Hostname", - "col_platform": "Platformă", - "col_ip": "Adresă IP", - "col_version": "Versiune", - "col_status": "Status", - "col_requested": "Solicitat la", - "col_actions": "Acțiuni", - "status_pending": "În așteptare", - "status_approved": "Aprobat", - "status_rejected": "Respins", - "approve_btn": "Aprobare", - "approve_confirm": "Sigur doriți să aprobați acest dispozitiv? Va primi acreditările serverului și se poate conecta automat.", - "approved_success": "Înregistrarea dispozitivului a fost aprobată cu succes", - "reject_btn": "Respingere", - "reject_title": "Respinge înregistrarea", - "reject_confirm": "Sigur doriți să respingeți această solicitare de înregistrare?", - "reject_reason": "Motiv (opțional)", - "reject_reason_placeholder": "Introdu motivul respingerii...", - "rejected_success": "Înregistrarea dispozitivului a fost respinsă", - "delete_confirm": "Sigur doriți să ștergeți această înregistrare de înregistrare?", - "deleted_success": "Înregistrarea de înregistrare a fost ștearsă", - "enrollment_title": "Înregistrarea dispozitivului", - "enrollment_subtitle": "Solicitări de înscriere în așteptare de la clienții desktop BetterDesk", - "enrollment_empty": "Nu există cereri de înscriere în așteptare", - "enrollment_approve": "Aprobare", - "enrollment_reject": "Respingere", - "enrollment_display_name": "Nume afișat", - "enrollment_display_name_placeholder": "Introduceți un nume pentru acest dispozitiv...", - "enrollment_sync_mode": "Modul de sincronizare", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Înregistrarea dispozitivului a fost aprobată", - "enrollment_rejected_success": "Înregistrarea dispozitivului a fost respinsă", - "approve_title": "Aprobare dispozitiv", - "field_name": "Numele dispozitivului", - "field_name_placeholder": "Introduceți un nume pentru acest dispozitiv...", - "field_sync_mode": "Mod sincronizare", - "sync_standard": "Standard — sincronizare echilibrată", - "sync_silent": "Silențios — telemetrie minimă", - "sync_turbo": "Turbo — sincronizare agresivă", - "field_tags": "Etichete", - "field_tags_placeholder": "Etichete separate prin virgulă (ex. birou, laptop)...", - "field_tags_existing": "Etichete existente", - "field_tag_add_placeholder": "Adăugare etichetă nouă...", - "field_tag_add_btn": "Adăugare", - "field_groups": "Grupuri de dispozitive", - "field_folder": "Dosar", - "field_folder_none": "Niciun dosar", - "reject_ban_option": "Blocare dispozitiv", - "reject_ban_hint": "Dispozitivul va fi blocat și nu va putea trimite noi cereri de înregistrare.", - "banner_open_mode": "Înregistrarea este deschisă — clienții RustDesk noi se înregistrează fără aprobarea unui operator.", - "banner_locked_mode": "Înregistrarea este blocată — numai dispozitivele legate de token se pot înregistra.", - "enrollment_settings_link": "Setări de înregistrare" + "export": { + "csv": "Export CSV", + "pdf": "Export PDF", + "sessions_csv": "Export sesiuni CSV" }, - "backup": { - "title": "Copie de rezervă", - "desc": "Descărcați o copie de rezervă completă a configurației consolei, a utilizatorilor, a grupurilor și a setărilor. Datele peer Go server sunt incluse atunci când backend-ul BetterDesk este activ.", - "restore_title": "Restaurare", - "restore_desc": "Încărcați un fișier de rezervă descărcat anterior pentru a restabili configurația consolei. Selectați mai jos ce secțiuni să restabiliți.", - "stat_users": "Utilizatori", - "stat_settings": "Setări", - "stat_folders": "Dosare", - "stat_groups": "Grupuri", - "stat_strategies": "Strategii", - "stat_backend": "Backend", - "download": "Descărcați Backup", - "creating": "Se creează backup...", - "download_success": "Backup descărcat cu succes", - "upload": "Încărcați Backup", - "restore_confirm": "Sigur doriți să restaurați din această copie de rezervă? Secțiunile selectate vor fi suprascrise.", - "restore_success": "Backup restaurat cu succes. Unele modificări pot necesita o reîncărcare a paginii.", - "restored": "Restaurat", - "skipped": "Omis", - "backup_date": "Data copiei de rezervă", - "opt_settings": "Setările consolei", - "opt_branding": "Branding/Temă", - "opt_folders": "Dosarele dispozitivului", - "opt_groups": "Grupuri de utilizatori și dispozitive", - "opt_addressbooks": "Agende cu adrese", - "opt_users": "Conturi de utilizator", - "opt_users_warning": "Distructiv: înlocuiește TOATE conturile de utilizator cu date de rezervă. Este posibil să fiți deconectat.", - "no_file": "Nu a fost selectat niciun fișier de rezervă", - "invalid_json": "Fișier de rezervă nevalid: JSON nu este valid", - "invalid_format": "Fișier de rezervă nevalid: nu este o copie de rezervă BetterDesk", - "stat_database": "Motor de baze de date", - "stat_keys": "Chei de server incluse", - "stat_env": "Fișier de mediu", - "stat_uploads": "Fișiere de branding", - "restart_required": "Unele componente restaurate (chei / .env / baza de date Go) necesită repornirea serviciului.", - "security_warning": "Această copie de rezervă conține secrete. Stocați-o în siguranță și nu o distribuiți niciodată.", - "restore_warning": "Restaurarea secretelor sau a bazei de date serverului Go va suprascrie identitatea serverului și va necesita repornirea serviciului.", - "opt_database": "Baza de date (toate tabelele)", - "opt_database_hint": "Reimportă toate datele consolei. Nu necesită repornire.", - "opt_uploads": "Fișiere de branding", - "opt_uploads_hint": "Logo-uri și imagini încărcate.", - "opt_secrets": "Chei de server și secrete", - "opt_secrets_warning": "Suprascrie identitatea serverului Ed25519, cheia API și secretul de sesiune. Necesită repornirea serviciului.", - "opt_env": "Fișier de mediu (.env)", - "opt_env_warning": "Suprascrie SESSION_SECRET, cheia API, DSN-ul bazei de date, porturile și setările TLS. Necesită repornirea serviciului.", - "opt_godb": "Baza de date server Go", - "opt_godb_warning": "Suprascrie baza de date SQLite a serverului Go (numai backend SQLite). Necesită repornirea serviciului." + "report": { + "title": "Raport de lucru", + "subtitle": "Descrieți munca efectuată în timpul acestei sesiuni la distanță.", + "category": "Categorie", + "ticket_ref": "Referință tichet", + "summary": "Lucru efectuat", + "skip": "Omite deocamdată", + "submit": "Trimite raport", + "summary_required": "Rezumatul este obligatoriu", + "saved": "Raport de lucru salvat" }, - "cdap": { - "device_detail": "CDAP Dispozitiv", - "loading": "Se încarcă...", - "loading_widgets": "Se încarcă widget-urile dispozitivului...", - "load_error": "Nu s-au încărcat datele dispozitivului", - "connected": "Conectat", - "disconnected": "Deconectat", - "device_offline_msg": "Dispozitivul este momentan offline. Valorile widget-urilor pot fi învechite.", - "no_widgets": "Nu există widgeturi disponibile", - "no_widgets_desc": "Acest dispozitiv nu a înregistrat un manifest CDAP cu definiții widget.", - "command_log": "Jurnal comenzi", - "clear_log": "Ștergere jurnal", - "confirm_command": "Confirmați comanda", - "select_option": "Selectați", - "cdap_status": "Status CDAP", - "cdap_enabled": "CDAP activat", - "cdap_disabled": "CDAP dezactivat", - "cdap_devices": "Dispozitive CDAP", - "cdap_connections": "Conexiuni active", - "send_command": "Trimite comanda", - "command_sent": "Comanda trimisă cu succes", - "command_failed": "Nu s-a putut trimite comanda", - "devices_title": "CDAP Dispozitive", - "devices_subtitle": "Dispozitive conectate prin protocolul de aplicație pentru dispozitiv personalizat", - "stat_connected": "Conectat", - "stat_port": "Port", - "search_devices": "Căutați dispozitive...", - "no_devices": "Niciun dispozitiv conectat", - "no_devices_desc": "În prezent, niciun dispozitiv CDAP nu este conectat. Dispozitivele vor apărea aici odată ce se conectează la gateway.", - "gateway_disabled": "CDAP Gateway dezactivat", - "gateway_disabled_desc": "Activați gateway-ul CDAP setând CDAP_ENABLED=true în configurația serverului.", - "gateway_active": "Activ", - "toggle_enable": "Activare CDAP", - "toggle_disable": "Dezactivați CDAP", - "enabled_restart": "CDAP activat. Este necesară repornirea serverului pentru a aplica modificări.", - "disabled_restart": "CDAP dezactivat. Este necesară repornirea serverului pentru a aplica modificări.", - "widgets": "widget-uri", - "type_all": "Toate", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "Agent OS", - "type_network": "Rețea", - "type_camera": "Cameră", - "type_custom": "Personalizat", - "active_alerts": "Alerte active", - "alert_fired": "Alertă activată", - "alert_cleared": "Alerta a fost anulată", - "no_alerts": "Nu există alerte active", - "connect_terminal": "Conectați terminalul", - "table_search": "Cauta...", - "just_now": "Chiar acum", - "terminal_connecting": "Se conectează la dispozitiv...", - "terminal_disconnected": "Deconectat", - "terminal_error": "Conexiunea terminalului a eșuat", - "linked_devices": "Dispozitive conectate", - "link_device": "Conectați dispozitivul", - "unlink_device": "Deconectare", - "no_linked_devices": "Nu există dispozitive conectate", - "unlink_confirm": "Sigur doriți să deconectați acest dispozitiv?", - "link_prompt": "Introduceți ID-ul peer pentru a conecta la acest dispozitiv:", - "connect_desktop": "Conectați desktopul", - "connect_video": "Conectați fluxul", - "connect_files": "Răsfoiți fișiere", - "connect_audio": "Conectați audio", - "upload_file": "Încărcare", - "desktop_connecting": "Se conectează...", - "video_connecting": "Se conectează...", - "files_connecting": "Se conectează...", - "audio_connecting": "Se conectează...", - "audio_streaming": "Se transmite", - "clipboard_in": "Clipboard primit", - "clipboard_out": "Clipboard trimis", - "monitor_select": "Selectați Monitor", - "keyframe_request": "Solicitați cadru cheie", - "quality_auto": "Calitate Auto" + "empty": { + "packages": "Nu există pachete încă. Creați unul cu butonul de mai sus.", + "contracts": "Nu există contracte de organizație încă. Atribuiți un pachet unei organizații.", + "sessions": "Nu există sesiuni facturabile înregistrate încă.", + "reports": "Nu există rapoarte de lucru trimise încă." }, - "desktop": { - "switch_mode": "Modul desktop", - "console_mode": "Modul Consolă", - "loading": "Se încarcă...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Închide", - "widgets_mode": "Widgeturi", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Adăugați widget", - "remove_widget": "Eliminați widgetul", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Configurați", - "search_widgets": "Căutați widgeturi...", - "cat_monitoring": "Monitoring", - "cat_devices": "Dispozitive", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Scrie notele aici...", - "search_placeholder": "Căutați dispozitive, pagini, setări...", - "search_pages": "Pages", - "search_devices": "Dispozitive", - "search_no_results": "No results", - "exit_desktop": "Ieșiți din modul desktop", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Stare dispozitiv", - "widget_server_health": "Informații server", - "widget_system_stats": "Indicatoare pentru dispozitive", - "widget_device_list": "Lista de dispozitive", - "widget_quick_actions": "Acțiuni rapide", - "widget_recent_activity": "Activitate recentă", - "widget_notes": "Notes", - "widget_network_monitor": "Monitor de rețea", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP Dispozitive", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Grila dispozitivului", - "widget_multi_gauge": "Indicatori de server", - "widget_weekly_chart": "Activitate săptămânală", - "widget_quick_controls": "Controale rapide", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Statistici de conexiune", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Sesiuni de utilizator", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Fără dispozitive", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Deschide", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Setați URL în config", - "label_server_uptime": "Timp de funcționare a serverului", - "label_merged_info": "Îmbinat în widgetul Informații server", - "label_with_notes": "Cu Note", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Total Dispozitive", - "label_throughput": "Throughput", - "label_active_relays": "Relee active", - "label_total_relayed": "Retransmitere totală", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Dispozitive de filtrare...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Nu există dispozitive CDAP", - "action_add_widget": "Adăugați widget", - "label_merged_server_info": "Îmbinat în widgetul Informații server", - "wp_images": "Images", - "wp_colors": "Culori Solide", - "wp_custom_color": "Culoare personalizată", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Imaginile de fundal nu sunt instalate pe acest server.", - "wp_download_hint": "Plasați imagini PNG în directorul public/wallpapers/ pentru a activa selecția tapetului.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Monitor de proces", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Statisticile bazei de date", - "widget_docker_containers": "Docker Containere", - "widget_shell_command": "Comanda Shell", - "widget_device_map": "Harta dispozitivului", - "widget_remote_connect": "Conectare la distanță", - "label_no_online": "Fără dispozitive online", - "label_no_events": "Nu există evenimente astăzi", - "label_event_title": "Titlul evenimentului:", - "label_no_data": "Nu există date disponibile", - "label_download_speed": "Viteza de descărcare", - "label_latency": "Latency", - "label_server": "Instanță server", - "label_run_test": "Run Test", - "label_testing": "Testare...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Fara containere", - "label_docker_unavailable": "Docker nu este disponibil", - "label_no_command": "Nicio comandă configurată", - "label_no_output": "Nicio ieșire încă", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Salvați presetarea", - "label_load_preset": "Load Preset", - "label_preset_name": "Nume presetat:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Aranjare automată", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 coloane (egale)", - "label_2col_wide": "2 coloane (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Grup de widgeturi", - "ungroup_widgets": "Degrupați widget-urile", - "group_widgets": "Grupați widget-urile selectate", - "snap_layouts": "Aspecte de fixare", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Apăsați sus-stânga", - "snap_top_right": "Faceți clic în sus-dreapta", - "snap_bottom_left": "Apăsați jos-stânga", - "snap_bottom_right": "Apăsați jos-dreapta", - "aero_shake": "Agitați pentru a minimiza pe alții", - "zone_resize": "Trageți chenar pentru a redimensiona zonele", - "zone_borders": "Borduri ale zonei care pot fi trasate", - "app_drawer": "Applications", - "search_apps": "Căutați aplicații...", - "edit_shortcuts": "Editați comenzile rapide", - "widgets": "Widgeturi", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Atribuie pachet existent", + "submit": "Atribuie" }, - "desktop_login": { - "click_to_sign_in": "Faceți clic oriunde sau apăsați o tastă pentru a vă conecta", - "username_placeholder": "Nume de utilizator", - "password_placeholder": "Parolă", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Autentificare cu doi factori", - "totp_subtitle": "Introdu codul din 6 cifre din aplicația de autentificare", - "back_to_login": "Înapoi la autentificare", - "fill_all_fields": "Vă rugăm să completați toate câmpurile", - "invalid_credentials": "Nume de utilizator sau parolă nevalidă", - "invalid_code": "Cod de verificare nevalid", - "enter_6_digits": "Introduceți toate cele 6 cifre", - "network_error": "Network error — check your connection", - "session_expired": "Sesiunea a expirat. Vă rugăm să vă conectați din nou." - }, - "tokens": { - "title": "Jetoane de dispozitiv", - "subtitle": "Gestionați jetoanele de înregistrare pentru furnizarea automată a dispozitivelor", - "enrollment_mode": "Mod de înscriere", - "mode_open": "Deschide", - "mode_open_desc": "Orice dispozitiv se poate înregistra fără un token", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Total de jetoane", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Jetoane de căutare...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Generare în vrac", - "create": "Creați token", - "edit": "Editați tokenul", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Creat", - "actions": "Actions", - "name_placeholder": "de ex. Lot PC Office", - "max_uses": "Max Uses", - "max_uses_hint": "0 = nelimitat", - "expires_in": "Expires In", - "no_expiration": "Fără expirare", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Notă opțională despre acest simbol...", - "count": "Count", - "count_range": "Numărul de jetoane de generat (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token creat", - "tokens_generated": "Jetoane generate", - "copy_warning": "Copiați jetonul acum. Nu va fi afișat din nou.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Sigur doriți să revocați acest simbol? Dispozitivele deja înregistrate cu acesta nu vor fi afectate.", - "revoked_success": "Indicativul a fost revocat cu succes", - "no_tokens": "Nu s-au găsit jetoane", - "expired": "Expired", - "never": "Never", - "save": "Salvați", - "cancel": "Anulează", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "În continuare", - "prev": "Previous", - "skip": "Skip", - "finish": "Termină", - "close": "Închide", - "step_of": "{current} din {total}", - "console_sidebar_title": "Bara laterală de navigare", - "console_sidebar_text": "Accesați toate modulele de aici. Faceți clic pe orice pictogramă pentru a naviga la acea secțiune. Bara laterală se adaptează la dimensiunea ecranului dvs.", - "console_expand_title": "Extindeți Bara laterală", - "console_expand_text": "Faceți clic aici pentru a extinde bara laterală și pentru a vedea etichetele complete pentru toate elementele de navigare. Faceți clic din nou pentru a restrânge.", - "console_search_title": "Căutare rapidă", - "console_search_text": "Căutați rapid dispozitive, setări sau acțiuni. Apăsați Ctrl+K pentru comanda rapidă de la tastatură.", - "console_dashboard_title": "Tabloul de bord", - "console_dashboard_text": "Centrul dvs. central care arată starea serverului, dispozitivele online și acțiunile rapide. Fii atent la valorile importante dintr-o privire.", - "console_devices_title": "Managementul dispozitivelor", - "console_devices_text": "Vizualizați, căutați și gestionați toate dispozitivele conectate. Filtrați după stare, atribuiți etichete și configurați setările individuale ale dispozitivului.", - "console_settings_title": "Setări", - "console_settings_text": "Configurați comportamentul serverului, opțiunile de securitate, brandingul și gestionarea utilizatorilor. Personalizați BetterDesk pentru a se potrivi nevoilor dvs.", - "console_desktop_title": "Modul desktop", - "console_desktop_text": "Comutați la modul desktop pentru un spațiu de lucru cu ferestre cu widget-uri. Perfect pentru multi-tasking și monitorizarea tablourilor de bord.", - "console_complete_title": "Ești gata!", - "console_complete_text": "Explorați categoriile din bara laterală pentru a descoperi toate funcțiile. Faceți clic oricând pe pictograma Ajutor pentru a reporni acest ghid.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Bara de sus arată ceasul, comenzile rapide și accesul la sertarul de aplicații. Faceți clic pe pictograma grilă pentru a răsfoi toate aplicațiile.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Deschideți sertarul de aplicații pentru a căuta și a lansa orice funcție de consolă ca o fereastră plutitoare. Aplicațiile sunt organizate pe categorii.", - "desktop_widgets_title": "Tabloul de bord widget", - "desktop_widgets_text": "Spațiul dvs. de lucru personalizabil. Widgeturile afișează informații live și oferă acces rapid la funcții. Trageți pentru a rearanja.", - "desktop_add_widget_title": "Adăugați widgeturi", - "desktop_add_widget_text": "Faceți clic aici pentru a căuta widget-urile disponibile. Alegeți dintre afișaje de monitorizare, liste de dispozitive, note și multe altele.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Aplicațiile deschise apar aici. Faceți clic pentru a focaliza sau pentru a minimiza ferestrele. Treceți cu mouse-ul pe pictograme pentru a vedea etichetele aplicațiilor.", - "desktop_snap_title": "Aspecte de fixare", - "desktop_snap_text": "Trageți ferestrele pe marginile ecranului pentru a le fixa în poziție sau plasați cursorul pe butonul de maximizare pentru presetări de aspect. Încercați Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Aplicațiile se deschid în ferestre care pot fi glisate și redimensionabile. Minimizați, maximizați sau închideți din bara de titlu. Stratul Windows deasupra widgeturilor.", - "desktop_search_title": "Căutare rapidă", - "desktop_search_text": "Căutați pe dispozitive, pagini și setări. Apăsați Ctrl+K oriunde pentru a deschide căutarea instantaneu.", - "desktop_complete_title": "Modul desktop gata!", - "desktop_complete_text": "Încercați să deschideți aplicațiile din sertar și să aranjați ferestrele una lângă alta. Folosiți presetări pentru widget-uri pentru amenajări rapide ale tabloului de bord.", - "devices_folders_title": "Dosarele dispozitivului", - "devices_folders_text": "Organizați dispozitivele în foldere. Faceți clic pe un folder pentru a filtra lista. Faceți clic dreapta pentru a redenumi sau șterge.", - "devices_search_title": "Căutați și filtrați", - "devices_search_text": "Căutați după ID, nume de gazdă sau platformă. Utilizați pastilele de stare pentru a afișa numai online, offline sau toate dispozitivele.", - "devices_table_title": "Lista de dispozitive", - "devices_table_text": "Faceți clic pe orice rând de dispozitiv pentru detalii. Utilizați meniul kebab din dreapta pentru acțiuni rapide, cum ar fi conectarea, editarea etichetelor sau ștergerea.", - "devices_complete_title": "Gestionarea dispozitivelor gata!", - "devices_complete_text": "Trageți dispozitivele între dosare pentru a le organiza. Faceți dublu clic pe un dispozitiv pentru a deschide panoul de detalii.", - "settings_tabs_title": "Setări Categorii", - "settings_tabs_text": "Navigați între secțiuni General, Securitate, Aspect și alte secțiuni de configurare.", - "settings_content_title": "Configurare", - "settings_content_text": "Fiecare secțiune conține setări specifice pentru server și consolă. Modificările sunt salvate când faceți clic pe Salvare.", - "settings_complete_title": "Prezentare generală a setărilor", - "settings_complete_text": "Verificați setările de securitate pentru cheile 2FA, API și gestionarea utilizatorilor. Accesați Aspect pentru a personaliza aspectul consolei.", - "help": "Ajutor și tutoriale", - "tour_console": "Turul consolei", - "tour_desktop": "Tur al modului desktop", - "tour_devices": "Tur al dispozitivelor", - "tour_settings": "Tur de setări", - "reset_all": "Resetați toate tutorialele", - "tour_remote": "Tur de sesiune la distanță", - "tour_organization": "Configurarea organizației", - "tour_cdap": "CDAP Prezentare generală", - "tour_chat": "Bazele chatului", - "remote_toolbar_title": "Bara de instrumente la distanță", - "remote_toolbar_text": "Accesați comenzile afișajului, sincronizarea clipboard-ului, tastele speciale și setările de calitate din bara de instrumente. Comutați ecranul complet cu F11.", - "remote_canvas_title": "Afișaj de la distanță", - "remote_canvas_text": "Acesta este ecranul de la distanță. Faceți clic în interior pentru a începe să controlați dispozitivul de la distanță. Introducerea mouse-ului și a tastaturii sunt redirecționate automat.", - "remote_clipboard_title": "Sincronizare clipboard", - "remote_clipboard_text": "Copiați și inserați text între computer și dispozitivul de la distanță. Folosiți Ctrl+C / Ctrl+V în mod normal în timp ce vă concentrați pe afișajul de la distanță.", - "remote_complete_title": "Sesiunea de la distanță gata!", - "remote_complete_text": "Utilizați butoanele din bara de instrumente pentru tastele speciale (Ctrl+Alt+Del, PrintScreen) și comutarea monitorului. Apăsați Escape sau faceți clic pe Deconectare pentru a încheia sesiunea.", - "org_overview_title": "Organizații", - "org_overview_text": "Organizațiile vă permit să grupați utilizatori, dispozitive și politici. Fiecare organizație are propriul administrator, operatori și setări.", - "org_create_title": "Creați organizație", - "org_create_text": "Faceți clic aici pentru a crea o nouă organizație. Furnizați un nume, un slug și o descriere opțională. Veți fi proprietarul noii organizații.", - "org_members_title": "Gestionați membrii", - "org_members_text": "Invitați utilizatori prin e-mail, atribuiți roluri (administrator, operator, utilizator) și gestionați accesul. Membrii pot vedea dispozitivele alocate organizației lor.", - "org_devices_title": "Atribuiți dispozitive", - "org_devices_text": "Adăugați dispozitive în organizație. Dispozitivele atribuite aici vor moșteni politicile organizației și vor fi vizibile pentru membrii acesteia.", - "org_policies_title": "Politicile organizației", - "org_policies_text": "Setați politici de securitate, cum ar fi cerințele de parolă, expirarea sesiunii, aplicarea 2FA și regulile de înregistrare a dispozitivelor pentru organizație.", - "org_complete_title": "Configurarea organizației finalizată!", - "org_complete_text": "Invitați-vă echipa și atribuiți dispozitive pentru a începe să utilizați managementul la nivelul organizației. Politicile se aplică automat tuturor membrilor.", - "cdap_devices_title": "Dispozitive CDAP", - "cdap_devices_text": "Vizualizați toate dispozitivele CDAP conectate — senzori IoT, PLC-uri, bridge-uri și agenți personalizați. Indicatorii verzi arată conexiunile live.", - "cdap_widgets_title": "Panou de widget-uri", - "cdap_widgets_text": "Widget-urile afișează date în timp real de la dispozitive. Indicatoare, comutatoare, LED-uri, grafice — fiecare tip de widget afișează date diferite.", - "cdap_commands_title": "Trimitere comenzi", - "cdap_commands_text": "Interacționați cu dispozitivele trimițând comenzi. Jurnalul de comenzi stochează istoricul.", - "cdap_terminal_title": "Terminal dispozitiv", - "cdap_terminal_text": "Deschideți o sesiune de terminal la agenții CDAP pentru diagnosticare avansată sau configurare manuală.", - "cdap_complete_title": "Prezentare CDAP finalizată!", - "cdap_complete_text": "Explorați widget-urile dispozitivelor, trimiteți comenzi și utilizați terminalul sau browserul de fișiere pentru management aprofundat.", - "chat_contacts_title": "Contacte și grupuri", - "chat_contacts_text": "Vedeți contactele și grupurile de chat. Faceți clic pe orice contact pentru a deschide o conversație. Punctele verzi indică utilizatorii online.", - "chat_send_title": "Trimite mesaje", - "chat_send_text": "Introduceți mesajul și apăsați Enter pentru a trimite. Mesajele sunt criptate end-to-end atunci când ambele părți acceptă E2E.", - "chat_file_title": "Partajați fișiere", - "chat_file_text": "Faceți clic pe pictograma atașament pentru a partaja fișiere. Fișierele sunt criptate și pot avea până la 50 MB.", - "chat_complete_title": "Gata de chat!", - "chat_complete_text": "Chat cu operatorii și utilizatorii finali în timp real. Creați grupuri pentru comunicarea în echipă. Toate mesajele acceptă confirmarea de citire.", - "disable_tutorials": "Dezactivați tutorialele", - "enable_tutorials": "Activați tutoriale" - }, - "help_request": { - "title": "Cereri de ajutor", - "subtitle": "Gestionați solicitările de ajutor primite de la clienții desktop", - "new_request": "Noua solicitare de ajutor", - "device": "Dispozitiv", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Fără cereri de ajutor", - "notification": "Solicitare de ajutor primită de la", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organizații", - "create": "Creați organizație", - "edit": "Editați organizația", - "detail": "Detalii de organizare", - "name": "Name", - "slug": "Slug (sigură pentru URL)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Dispozitive", - "invitations": "Invitations", - "settings": "Setări", - "add_user": "Add User", - "assign_device": "Atribuiți dispozitiv", - "create_invitation": "Creați invitație", - "delete_confirm": "Ștergeți această organizație? Aceasta va elimina toți utilizatorii, dispozitivele și setările asociate.", - "no_orgs": "Încă nu există organizații", - "no_orgs_hint": "Creați-vă prima organizație pentru a începe să gestionați dispozitivele și utilizatorii.", - "connection_policy": "Politica de conectare", - "allow_file_transfer": "Permite transferul de fișiere", - "allow_clipboard": "Permite Clipboard", - "max_session_duration": "Durata maximă a sesiunii (min.)", - "role_owner": "Owner", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_user": "Membru", - "username": "Nume de utilizator", - "password": "Parolă", - "display_name": "Nume afișat", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID dispozitiv", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Utilizator alocat", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Nu există utilizatori în această organizație.", - "no_devices": "Niciun dispozitiv atribuit acestei organizații.", - "no_invitations": "Fara invitatii.", - "user_added": "User added", - "user_removed": "Utilizatorul a fost eliminat", - "user_updated": "Rolul utilizatorului a fost actualizat", - "device_assigned": "Dispozitiv alocat", - "device_unassigned": "Dispozitiv nealocat", - "invitation_created": "Invitație creată", - "settings_saved": "Setările au fost salvate", - "org_deleted": "Organizația a fost ștearsă", - "confirm_remove_user": "Eliminați acest utilizator din organizație?", - "confirm_unassign_device": "Anulați atribuirea acestui dispozitiv de la organizație?", - "confirm_delete_org": "Ștergeți această organizație și toate datele asociate?", - "edit_role": "Editați rolul", - "raw_settings": "Setări brute", - "key": "Key", - "value": "Value", - "save": "Salvați setările", - "policy_unattended": "Nesupravegheat (instantaneu)", - "policy_attended": "A participat (cu confirmare)", - "policy_ask": "Always ask", - "expires_hours": "Expirare (ore)", - "loading_failed": "Nu s-au încărcat datele organizației", - "name_slug_required": "Numele și melcul sunt necesare", - "org_created": "Organizație creată", - "org_updated": "Organizație actualizată", - "create_new_user": "Creați nou", - "add_existing_user": "Adăugați existent", - "none_available": "none", - "select_user": "Selectați utilizatorul", - "org_role": "Rolul de organizare", - "link_user_hint": "Utilizatorul selectat va fi conectat la această organizație folosind acreditările contului său de server.", - "no_available_users": "Toți utilizatorii de server sunt deja conectați la această organizație.", - "user_linked": "Utilizator conectat la organizație" - }, - "chat": { - "e2e_enabled": "Criptat de la capăt la capăt", - "e2e_establishing": "Se stabilește canalul securizat...", - "e2e_established": "Canal securizat stabilit", - "e2e_unsupported": "Criptarea E2E nu este acceptată în acest browser", - "typing_indicator": "tastând...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Fișier", - "file_too_large": "Fișier prea mare (maximum 50 MB)", - "file_encrypted": "Transfer de fișiere criptat", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Cheile de securitate au fost rotite", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Grupuri", - "no_contacts": "Nicio persoană de contact încă", - "no_groups": "Încă nu există grupuri", - "no_messages": "Încă nu există mesaje", - "no_results": "Nu s-au găsit rezultate", - "select_conversation": "Selectați o conversație pentru a începe conversația", - "type_message": "Tastați un mesaj...", - "send": "Trimite", - "attach_file": "Atașați fișierul", - "emoji": "Emoji", - "search_messages": "Căutați mesaje", - "create_group": "Creați grup", - "group_name": "Numele grupului", - "group_members": "Membrii", - "cancel": "Anulează", - "create": "Creați", - "members": "membrii", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Căutați contacte și mesaje", - "select_conversation_hint": "Selectați o conversație pentru a vizualiza mesajele", - "info": "Info", - "group_name_placeholder": "Introduceți numele grupului" - }, - "toast": { - "device_connected": "Dispozitiv conectat", - "device_disconnected": "Dispozitivul a fost deconectat", - "session_started": "Sesiunea de la distanță a început", - "session_ended": "Sesiunea de la distanță s-a încheiat", - "file_upload_complete": "Încărcarea fișierului s-a încheiat", - "settings_saved": "Setările au fost salvate", - "error_generic": "A apărut o eroare", - "connection_lost": "Conexiunea pierdută", - "reconnecting": "Se reconecta..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Utilități de administrare și instrumente de diagnosticare", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Trimite", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Introdu text...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Du-te Server", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Verificați accesibilitatea și latența gazdei", - "tcp_title": "TCP Verificare port", - "tcp_desc": "Testați conectivitatea portului TCP", - "ssl_title": "Inspector SSL", - "ssl_desc": "Inspectați detaliile certificatului SSL/TLS", - "http_title": "HTTP Verificare de sănătate", - "http_desc": "Verificați starea punctului final HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Rezolvați numele gazdei la adresa IP", - "whois_title": "DNS Records", - "whois_desc": "Interogați înregistrările A, AAAA, MX, TXT, NS", - "speed_title": "Speed Test", - "speed_desc": "Măsurați lățimea de bandă de descărcare", - "run_speed_test": "Rulați testul de viteză", - "wol_title": "Wake-on-LAN", - "wol_desc": "Trimite un pachet magic pentru a trezi un dispozitiv", - "wol_sent": "Pachetul magic trimis", - "hash_title": "Generator de hash", - "hash_desc": "Generați hashuri criptografice", - "password_title": "Generator de parole", - "password_desc": "Generați o parolă aleatorie sigură", - "jwt_title": "JWT Decoder", - "jwt_desc": "Decodați și inspectați JSON Web Tokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Codificați sau decodați datele Base64", - "url_title": "URL Encoder", - "url_desc": "Codificați sau decodați componentele URL", - "processes_title": "Lista de procese", - "processes_desc": "Vizualizați procesele sistemului care rulează", - "disk_title": "Disk Usage", - "disk_desc": "Vedeți utilizarea partiției de disc", - "db_title": "Statisticile bazei de date", - "db_desc": "Vizualizați statisticile din tabelul bazei de date", - "docker_title": "Docker Containere", - "docker_desc": "Vedeți containerele Docker care rulează", - "logs_title": "Log Viewer", - "logs_desc": "Vedeți rezultatul jurnalului recent", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Valabil de la", - "valid_to": "Valabil pentru", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Nu există date disponibile", - "no_docker": "Nu s-au găsit containere Docker sau Docker nu este disponibil", - "no_logs": "Nu există linii de jurnal disponibile" - }, - "policies": { - "title": "Politicile organizației", - "subtitle": "Gestionați politicile de securitate, conexiune și caracteristici pentru organizațiile dvs", - "select_org": "Organizare", - "select_org_placeholder": "Selectați o organizație...", - "select_org_first": "Selectați o organizație pentru a vedea jurnalul de audit al politicii.", - "configured": "Configurat", - "connection_title": "Politica de conectare", - "connection_desc": "Controlați modul în care sunt stabilite sesiunile la distanță", - "connection_mode": "Modul de conectare", - "mode_attended": "A participat (necesită aprobarea utilizatorului)", - "mode_unattended": "Nesupravegheat (permite întotdeauna)", - "mode_ask": "Întotdeauna întrebați", - "max_session": "Durata maximă a sesiunii (minute)", - "idle_lock": "Timp de blocare inactiv (minute)", - "wallpaper_policy": "Imagine de fundal în timpul sesiunii", - "wallpaper_show": "Afișare", - "wallpaper_hide_session": "Ascundeți-vă în timpul sesiunii", - "wallpaper_hide_always": "Ascundere întotdeauna", - "features_title": "Politica caracteristicilor", - "features_desc": "Activați sau dezactivați funcții specifice pentru dispozitive", - "allow_file_transfer": "Permite transferul de fișiere", - "allow_clipboard": "Permite sincronizarea clipboard-ului", - "allow_audio": "Permiteți redarea în flux audio", - "allow_recording": "Permite înregistrarea sesiunii", - "security_title": "Politica de securitate", - "security_desc": "Aplicați cerințele de securitate pentru dispozitivele organizației", - "require_2fa": "Necesită 2FA pentru acces nesupravegheat", - "password_min_length": "Lungimea minimă a parolei", - "password_require_special": "Necesită caractere speciale", - "password_max_age": "Vârsta maximă a parolei (zile, 0=niciodată)", - "allowed_operators": "Roluri de operator permise (separate prin virgulă)", - "network_title": "Politica de rețea", - "network_desc": "Controlați serverele releu și conexiunile directe", - "block_direct_p2p": "Block Direct P2P (releu de forță)", - "allowed_relays": "Servere de releu permise (unul pe linie)", - "ip_allowlist": "Lista IP permisă (CIDR, una pe linie)", - "update_title": "Actualizați politica", - "update_desc": "Controlați actualizările automate și canalele de actualizare", - "auto_update": "Activați Actualizarea automată", - "update_channel": "Actualizați canalul", - "audit_title": "Schimbări de politică", - "audit_desc": "Istoricul modificărilor recente ale politicilor", - "no_audit": "Nu au fost înregistrate modificări ale politicii.", - "save_success": "Politica a fost salvată cu succes", - "save_failed": "Politica nu a fost salvată", - "load_failed": "Politicile nu au putut fi încărcate", - "block_direct_p2p_hint": "Se aplică acestei organizații." - }, - "attestation": { - "title": "Atestarea dispozitivului", - "subtitle": "Monitorizați verificarea identității dispozitivului și amprentele hardware", - "verified": "Verified", - "pending": "Pending", - "failed": "A eșuat", - "device_list": "Înregistrări de atestare a dispozitivului", - "device_list_desc": "Amprentele hardware și starea de verificare a identității", - "col_device": "ID dispozitiv", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Nu s-au găsit înregistrări de atestare.", - "verify_success": "Dispozitiv marcat ca verificat", - "verify_failed": "Nu s-a putut verifica dispozitivul", - "revoke_success": "Atestarea dispozitivului a fost revocată", - "revoke_failed": "Nu s-a revocat atestarea" - }, - "fleet": { - "title": "Managementul flotei", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Generator de flux de lucru", - "tab_compliance": "Compliance", - "res_title": "Maparea resurselor", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Unitatea de rețea", - "res_type_dns": "Server DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Adăugați o resursă", - "res_name": "Numele resursei", - "res_type": "Type", - "res_address": "Adresa / Calea", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organizare", - "res_scope_group": "grup", - "res_scope_device": "Dispozitiv", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Nu au fost găsite resurse. Faceți clic pe „Adăugați o resursă” pentru a crea una.", - "res_confirm_delete": "Sigur doriți să ștergeți această resursă?", - "task_title": "Programator de sarcini", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "A eșuat", - "task_search": "Search tasks…", - "task_create": "Creați sarcină", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Actualizare", - "task_type_restart": "Reporniți", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "ID-uri de dispozitiv sau nume de grup, separate prin virgulă", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Valoarea programului", - "task_script": "Script / Comandă", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Nu s-au găsit sarcini. Faceți clic pe „Creați sarcină” pentru a începe.", - "task_confirm_delete": "Sigur doriți să ștergeți această sarcină?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Constructor flux de lucru", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Salvați", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Selectați un nod pentru a-i edita proprietățile.", - "builder_node_trigger_manual": "Declanșare manuală", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Declanșare eveniment", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Reporniți Svc", - "builder_node_action_file_deploy": "Implementează fișierul", - "builder_node_action_message": "Trimite mesaj", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Trimiteți alertă", - "builder_node_result_chain": "Flux de lucru în lanț", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Nume flux de lucru:", - "comp_title": "Conformitate software", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Dispozitiv", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Executați remedierea automată pe acest dispozitiv?", - "comp_no_data": "Nu sunt disponibile date de conformitate. Rulați o scanare pentru a începe.", - "save": "Salvați", - "cancel": "Anulează", - "close": "Închide", - "edit": "Editați", - "delete": "Ștergeți", - "actions": "Actions", - "all_orgs": "Toate organizațiile", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Unitatea de rețea", - "type_dns": "Server DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Adăugați o resursă", - "edit_resource": "Editați resursa", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adresa / Calea", - "scope_org": "Organizare", - "scope_group": "grup", - "scope_device": "Dispozitiv", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Sigur doriți să ștergeți acest articol?", - "all_statuses": "Toate stările", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "A eșuat", - "search_tasks": "Search tasks�", - "create_task": "Creați sarcină", - "edit_task": "Editați sarcina", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Distribuire fișier", - "task_type_registry": "Registry", - "target_devices": "Dispozitive țintă", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Script / Comandă", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Încărcare", - "no_output": "Nicio ieșire disponibilă", - "error_loading": "Eroare la încărcarea datelor", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Declanșare manuală", - "node_schedule": "Schedule", - "node_event": "Declanșare eveniment", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Reporniți Svc", - "node_file_deploy": "Implementează fișierul", - "node_send_message": "Trimite mesaj", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Trimiteți alertă", - "node_chain": "Flux de lucru în lanț", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Toate organizațiile", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Dispozitiv", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Executați remedierea automată pe acest dispozitiv?" - }, - "scaling": { - "title": "Scaling & Management Releu", - "tab_overview": "Prezentare generală", - "tab_relays": "Relay Nodes", - "tab_rules": "Reguli de atribuire", - "tab_capacity": "Planificarea capacității", - "arch_title": "Arhitectura de rețea", - "arch_loading": "Se încarcă diagrama arhitecturii...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Total Dispozitive", - "stat_active_sessions": "Sesiuni active", - "stat_bandwidth": "Lățimea de bandă totală", - "relay_health": "Sănătate releu", - "no_relays": "Nu au fost configurate noduri releu. Adăugați primul nod releu pentru a distribui sarcina.", - "relay_search": "Căutați relee...", - "relay_add": "Adăugați nod releu", - "relay_edit": "Editați nodul releu", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Dispozitive", - "col_sessions": "Sesiuni", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Releu țintă", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Activat", - "status_disabled": "Dezactivat", - "confirm_delete_relay": "Sigur doriți să ștergeți acest nod releu?", - "confirm_delete_rule": "Sigur doriți să ștergeți această regulă de atribuire?", - "rules_hint": "Regulile de atribuire determină ce server de retransmisie gestionează anumite grupuri de dispozitive. Regulile sunt evaluate în funcție de prioritate (mai întâi cea mai mică).", - "rule_add": "Add Rule", - "rule_edit": "Editați regula", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Grup de dispozitive", - "match_tag": "Eticheta dispozitivului", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Nod principal de rezervă", - "fallback_nearest": "Cel mai apropiat releu", - "relay_max_sessions": "Sesiuni maxime", - "relay_max_bandwidth": "Lățime de bandă maximă (Mbps)", - "cap_tiers": "Niveluri de capacitate", - "cap_loading": "Se încarcă datele despre capacitatea...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Nu există recomandări disponibile.", - "cap_planning": "Planificarea infrastructurii", - "cap_config": "Configurare", - "cap_max_devices": "Max Dispozitive", - "cap_max_sessions": "Sesiuni maxime", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Capacitatea dispozitivului", - "cap_tier_sessions": "Capacitatea de sesiune", - "cap_tier_bandwidth": "Capacitatea lățimii de bandă", - "cap_single_sqlite": "Server unic (SQLite)", - "cap_single_pg": "Server unic (PostgreSQL)", - "cap_master_3": "Master + 3 relee", - "cap_master_10": "Master + 10 relee", - "rec_no_relays": "Nu au fost configurate noduri releu. Luați în considerare adăugarea de noduri releu pentru performanță și redundanță mai bune.", - "rec_devices_high": "Utilizarea dispozitivului este mare. Luați în considerare adăugarea mai multor noduri de releu pentru a distribui sarcina.", - "rec_sessions_high": "Capacitatea sesiunii se apropie de limita. Luați în considerare modernizarea infrastructurii de releu.", - "rec_cpu_high": "Unele noduri releu raportează o utilizare ridicată a CPU. Luați în considerare echilibrarea sarcinii sau upgrade-urile de capacitate.", - "rec_all_good": "Toate sistemele funcționează în parametri normali. Nu este necesară nicio acțiune.", - "save": "Salvați", - "cancel": "Anulează", - "edit": "Editați", - "delete": "Ștergeți", - "close": "Închide", - "no_rules": "Fără reguli de atribuire.", - "relays_info_banner": "Această listă este informativă. Serverele releu utilizate efectiv de clienți sunt configurate prin variabila de mediu RELAY_SERVERS de pe serverul BetterDesk.", - "relay_name_address_required": "Numele și adresa sunt obligatorii.", - "relay_save_failed": "Nu s-a salvat nodul releu.", - "relay_delete_failed": "Nu s-a șters nodul releu.", - "relay_saved": "Nodul releu a fost salvat.", - "relay_deleted": "Nodul releu a fost șters.", - "rule_name_value_required": "Numele regulii și valoarea potrivirii sunt obligatorii.", - "rule_save_failed": "Nu s-a salvat regula.", - "rule_delete_failed": "Nu s-a șters regula.", - "rule_saved": "Regula salvată.", - "rule_deleted": "Regula ștearsă." - }, - "cross_platform": { - "title": "Compatibilitate între platforme", - "tab_matrix": "Matricea de compatibilitate", - "tab_distribution": "Distribuție", - "tab_protocols": "Protocoale", - "tab_limitations": "Limitări", - "matrix_hint": "Matrice de suport pentru funcții pe toate platformele acceptate. Verde = suport complet, galben = parțial, gri = nu este disponibil, albastru = planificat.", - "col_feature": "Funcție", - "legend_full": "Sprijin deplin", - "legend_partial": "Sprijin parțial", - "legend_none": "Nu este disponibil", - "legend_planned": "Planificat", - "platform_breakdown": "Defalcarea platformei", - "arch_breakdown": "Defalcarea arhitecturii", - "version_breakdown": "Defalcare versiuni", - "summary": "Sumar", - "total_devices": "Total Dispozitive", - "unique_platforms": "Platforme", - "unique_archs": "Arhitecturi", - "unique_versions": "Versiuni client", - "no_devices": "Niciun dispozitiv înregistrat încă.", - "protocols_hint": "Negocierea capabilității protocolului asigură că fiecare client primește numai caracteristicile pe care le acceptă. Serverul adaptează comportamentul pe baza capacităților raportate.", - "capability_negotiation": "Negocierea capacității", - "codec_support": "Asistență pentru codec (dispozitive online)", - "feature_support": "Asistență pentru funcții (dispozitive online)", - "no_codec_data": "Nu există date de codec disponibile de pe dispozitivele online.", - "no_feature_data": "Nu există date despre funcții disponibile de pe dispozitivele online.", - "protobuf_schema": "Schemă Protocol Buffers", - "diagram_client": "Client", - "diagram_server": "Server BetterDesk", - "diagram_peer": "Peer la distanță", - "limitations_hint": "Fiecare platformă are limitări specifice care afectează funcțiile disponibile. Examinați aceste constrângeri atunci când planificați implementările.", - "feat_desktop_client": "Client desktop", - "feat_background_agent": "Agent de fundal", - "feat_remote_target": "Țintă de la distanță", - "feat_screen_capture": "Captură de ecran", - "feat_input_injection": "Injecție de intrare", - "feat_file_transfer": "Transfer de fișiere", - "feat_clipboard_sync": "Sincronizare clipboard", - "feat_audio_streaming": "Streaming audio", - "feat_chat": "Chat", - "feat_h264": "Codec H.264", - "feat_vp9": "Codec VP9", - "feat_av1": "Codec AV1", - "feat_cdap_agent": "Agent CDAP", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Browser web", - "platform_chromeos": "ChromeOS", - "status_production": "Producție", - "status_testing": "Testare", - "status_planned": "Planificat", - "status_limited": "Limitat", - "status_experimental": "Experimental", - "limit_win_uac": "Înălțimea UAC este necesară pentru instalarea serviciului și injecția de intrare pe desktop-uri securizate.", - "limit_win_service": "Rulează ca serviciu NSSM; necesită privilegii de administrator pentru instalare.", - "limit_win_firewall": "Windows Regulile de firewall trebuie să permită porturile 21115-21119 pentru conexiunile releu.", - "limit_linux_wayland": "Compozitorii Wayland restricționează capturarea de ecran programatică; Este necesar portalul PipeWire API.", - "limit_linux_pipewire": "Captura audio necesită PipeWire; PulseAudio alternativă disponibilă, dar limitată.", - "limit_linux_arm": "build-uri ARM64 disponibile; unele codecuri pot folosi decodarea software (mai lentă).", - "limit_mac_screen": "Este necesară permisiunea de înregistrare a ecranului în Preferințe sistem > Confidențialitate și securitate.", - "limit_mac_signing": "Agentul trebuie să fie semnat cu ID-ul de dezvoltator Apple pentru distribuire.", - "limit_mac_notarize": "Este necesară legalizarea notarului pentru macOS Gatekeeper (distribuție non-App Store).", - "limit_android_projection": "MediaProjection API necesită consimțământul utilizatorului pentru fiecare sesiune de captură de ecran.", - "limit_android_accessibility": "Injecția de intrare necesită AccessibilityService; restricționat în Android 14+.", - "limit_android_battery": "Serviciu de fundal limitat de modul Doze; poate necesita scutirea de optimizare a bateriei.", - "limit_ios_capture": "Apple interzice capturarea ecranului în fundal; modul numai pentru vizualizare acceptat.", - "limit_ios_input": "Nu este permisă injecția de intrare; numai vizualizare de la distanță și chat.", - "limit_ios_appstore": "Distribuție numai prin App Store; TestFlight pentru testarea beta.", - "limit_web_https": "WebCodecs API și WebRTC necesită HTTPS; HTTP revine la JMuxer (codecuri limitate).", - "limit_web_codec": "Suportul pentru codec depinde de browser; H.264 acceptat pe scară largă, VP9/AV1 variază.", - "limit_web_performance": "Performanță limitată de caseta de testare a browserului; fără accelerare hardware directă.", - "limit_chrome_crostini": "Suport complet al agentului numai în interiorul containerului Crostini Linux.", - "limit_chrome_pwa": "Modul PWA oferă funcții numai pentru web; fără capacități de agent nativ.", - "limit_chrome_input": "Injecția de intrare nu este acceptată în afara containerului Crostini.", - "feat_session_recording": "Înregistrare sesiune", - "feat_multi_monitor": "Monitoare multiple", - "feat_unattended_access": "Acces nesupravegheat", - "limit_win_virtual_account": "Serviciue laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Serviciue laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Audit de securitate", - "tab_overview": "Prezentare generală", - "tab_events": "Evenimente de audit", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Scor de securitate", - "failed_logins": "Conectări eșuate (24 de ore)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Chei vechi (>90d)", - "security_checks": "Verificări de securitate", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Securizat", - "enabled": "Activat", - "disabled": "Dezactivat", - "all_events": "All Events", - "event_login_failed": "Conectarea a eșuat", - "event_login_success": "Logare succes", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Configurație schimbată", - "event_key_created": "Cheie creată", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Nu au fost găsite evenimente de audit.", - "hardening_hint": "Priorități de întărire a securității pentru implementarea dvs. BetterDesk. Articolele sunt ordonate în funcție de gravitate.", - "no_hardening": "Nu există articole de întărire disponibile.", - "vuln_hint": "Rezultatele scanării vulnerabilității dependenței. Rulați auditul npm în mod regulat pentru a menține dependențele în siguranță.", - "no_vulns": "Nu au fost găsite vulnerabilități. Dependența dvs. este în siguranță." - }, - "languages": { - "title": "Managementul Limbii", - "total_languages": "Limbi totale", - "fully_translated": "Tradus integral", - "needs_review": "Necesită revizuire", - "reference_keys": "Chei de referință", - "no_languages": "Nu s-au găsit fișiere de limbă.", - "badge_reference": "Reference", - "badge_review": "Necesită revizuire", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Vizualizare Lipsă", - "fix_missing": "Fix Missing", - "missing_keys_for": "Lipsesc cheile pentru", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "și {n} mai multe...", - "all_keys_present": "Toate cheile sunt prezente!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Cheile lipsă din {code} trebuie traduse manual.", - "no_fix_needed": "Nu lipsesc chei de reparat." - }, - "resource_control": { - "title": "Controlul resurselor", - "tab_overview": "Prezentare generală", - "tab_usb": "USB Control", - "tab_optical": "Unități optice", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Cote de resurse", - "compliance_by_category": "Conformitate pe categorii", - "device_compliance": "Conformitatea dispozitivului", - "search_devices": "Căutați dispozitive...", - "col_device": "Dispozitiv", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Total Dispozitive", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Rata de conformitate", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Configurați", - "no_devices": "Nu s-au găsit dispozitive", - "usb_title": "Stocare USB", - "usb_hint": "Controlați accesul la dispozitivul de stocare USB pentru dispozitivul selectat sau pentru politica implicită la nivelul întregii organizații.", - "usb_storage_policy": "USB Politica de stocare", - "usb_whitelist": "Dispozitive incluse pe lista albă (unul pe linie)", - "usb_whitelist_hint": "VID:PID (de ex. 0781:5583)", - "usb_audit_log": "Înregistrați conexiunile dispozitivelor USB", - "optical_title": "Controlul unității optice", - "optical_hint": "Controlați accesul la unitatea CD/DVD/Blu-ray pentru dispozitivul selectat.", - "optical_policy": "Politica unității optice", - "optical_audit_log": "Înregistrați accesul la unitatea optică", - "monitors_title": "Monitorizare Management", - "monitors_hint": "Configurați setările monitorului, inclusiv numărul maxim, aplicarea rezoluției, luminozitatea și programele de alimentare.", - "monitors_max_count": "Monitoare maxime (0 = nelimitat)", - "monitors_max_hint": "0 înseamnă fără limită", - "monitors_resolution": "Rezolutie maxima", - "monitors_brightness": "Limită de luminozitate", - "monitors_power_schedule": "Program de alimentare", - "monitors_power_hint": "de ex. off:22:00-06:00", - "disks_title": "Control acces la disc", - "disks_hint": "Configurați politicile de acces la disc, inclusiv modul numai citire, aplicarea criptării și vizibilitatea partiției.", - "disks_readonly": "Forțați modul numai citire", - "disks_encryption": "Necesită criptare (BitLocker/LUKS)", - "disks_smart": "Activați S.M.A.R.T. monitorizare", - "disks_hidden": "Partiții ascunse", - "disks_hidden_hint": "Litere de unitate sau puncte de montare separate prin virgulă", - "quotas_title": "Cote de resurse", - "quotas_hint": "Setați CPU, RAM, lățime de bandă și cote de disc per utilizator pentru dispozitivul selectat.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Limită de lățime de bandă (Mbps)", - "quotas_bandwidth_hint": "0 = nelimitat", - "quotas_disk_quota": "Cotă de disc (GB)", - "quotas_disk_hint": "0 = nelimitat", - "quotas_process_whitelist": "Procesează lista albă (una pe linie)", - "quotas_process_hint": "de ex. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Numai pe lista albă", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Actualizări de software", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Versiune instalată", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Verificați actualizările", - "checking": "Checking…", - "up_to_date": "La zi", - "update_available": "Actualizare disponibilă", - "changelog": "Release Notes", - "no_changelog": "Nu sunt disponibile note de lansare", - "files_changed": "Fișierele schimbate", - "files": "fişiere", - "changes_unavailable": "Nu s-a putut încărca lista de modificări ale fișierelor. Puteți instala în continuare actualizarea.", - "create_backup": "Creați o copie de rezervă înainte de actualizare", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Se instalează actualizarea...", - "creating_backup": "Se creează backup...", - "downloading": "Se descarcă fișiere...", - "install_success": "Actualizare instalată cu succes. Consola se repornește...", - "install_failed": "Instalarea actualizării a eșuat", - "restarting": "Se așteaptă repornirea consolei...", - "restart_complete": "Consola a repornit cu succes", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Nicio versiune de actualizare selectată. Verificați mai întâi actualizările.", - "backups_title": "Actualizați copii de rezervă", - "backups_desc": "Backup-uri de pre-actualizare create automat înainte de fiecare actualizare", - "no_backups": "Nu s-au găsit copii de rezervă de actualizare", - "restore": "Restore", - "restore_confirm": "Sigur doriți să restaurați din această copie de rezervă? Fișierele modificate vor fi suprascrise.", - "restore_success": "Backup restaurat cu succes. Consola se repornește...", - "baseline_set": "Set de linii de bază", - "commits_behind": "se angajează în urmă", - "total_files": "Numărul total de fișiere", - "applied": "Applied", - "failed": "A eșuat", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Du-te Server", - "component_agent": "Agent", - "component_scripts": "Scripturi și Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Se verifică Go...", - "go_not_found": "Du-te neinstalat", - "go_check_failed": "Nu s-a putut verifica disponibilitatea Go", - "server_building": "Compilarea Go server... Aceasta poate dura câteva minute.", - "server_built": "Binar de server compilat", - "server_build_failed": "Compilarea serverului a eșuat", - "server_stale_title": "Binarul serverului este învechit", - "server_stale_desc": "Sursa Go server a fost actualizată, dar binarul care rulează nu a fost reconstruit. Reconstruiți-l acum pentru a aplica actualizările de securitate și bibliotecă.", - "rebuild_server": "Reconstruiți serverul binar", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Binarul serverului a fost reconstruit și repornit", - "rebuild_server_failed": "Reconstrucția binară a serverului a eșuat", - "server_deployed": "Server binar implementat", - "server_deploy_failed": "Implementarea serverului a eșuat", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Se descarcă sursa serverului...", - "delete": "Ștergeți", - "delete_confirm": "Ștergeți definitiv backupul {name}? Acest lucru nu poate fi anulat.", - "delete_success": "Backup șters", - "delete_failed": "Nu s-a șters backupul", - "retention_label": "Păstrați N cele mai recente copii de rezervă", - "retention_hint": "Backup-urile mai vechi sunt șterse automat după fiecare actualizare. Folosiți 0 pentru a păstra toate copiile de rezervă.", - "retention_saved": "Setarea de păstrare a fost salvată", - "retention_invalid": "Retenția trebuie să fie un număr întreg între 0 și 1000", - "retention_required_for_prune": "Setați mai întâi o valoare de retenție mai mare decât 0", - "prune_now": "Apply now", - "prune_confirm": "Păstrați numai cele mai recente copii de siguranță {n} și ștergeți restul?", - "prune_done": "Copii de rezervă {n} tăiate", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Metoda de actualizare", - "strategy_download": "Descărcați binarul pre-construit", - "strategy_compile": "Compilați de la sursă", - "both_available": "Descărcați și compilați", - "download_available": "Descărcare disponibilă", - "no_method": "Nicio metodă de actualizare", - "no_release": "No release", - "available": "Disponibil", - "server_downloading": "Se descarcă fișierul binar al serverului...", - "server_downloaded": "Binarul serverului a fost descărcat", - "server_download_failed": "Descărcarea binară de server a eșuat", - "server_download_note": "Un binar pre-construit va fi descărcat din versiunile GitHub. Acest lucru durează de obicei mai puțin de un minut.", - "install_go_hint": "Instalați Go de la https://go.dev/dl/ pentru a activa compilarea sau publicați o versiune cu fișiere binare predefinite", - "strategy_install_go": "Instalați automat Go și compilați", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Reconstrucție automată gata", - "toolchain_ready": "Toolchain instalat", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Se descarcă lanțul de instrumente Go...", - "toolchain_failed": "Instalarea Go Toolchain a eșuat", - "modal_title": "Instalarea actualizării", - "modal_done_title": "Actualizare finalizată", - "modal_close": "Închide", - "modal_reload_now": "Reîncărcați consola", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Fișierele consolei", - "phase_server": "Componentă server", - "phase_restart": "Reporniți", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Backup omis (pe alegerea utilizatorului)", - "server_skipped": "Go server a fost omis", - "server_not_selected": "Go server not selected", - "server_processing": "Se procesează actualizarea Go server...", - "no_restart_needed": "Nu este necesară repornirea", - "complete": "Actualizare aplicată", - "complete_summary": "Actualizarea a fost aplicată cu succes.", - "complete_with_errors": "Actualizarea s-a încheiat, dar unii pași au eșuat. Vezi detalii mai jos.", - "modal_done_with_errors_title": "Actualizarea s-a terminat cu erori", - "console_will_restart": "Procesul consolei va reporni acum...", - "restart_complete_msg": "Consola s-a terminat de repornit. Faceți clic pe reîncărcați pentru a încărca noua versiune. Pagina se va reîncărca automat în 8 secunde.", - "refresh_recommended": "Elemente statice modificate — reîncărcați pagina pentru a vedea noua interfață de utilizare.", - "confirm_title": "Aplicați actualizarea", - "confirm_with_backup": "O copie de rezervă pre-actualizare va fi creată automat.", - "confirm_no_backup": "Nu va fi creată nicio copie de rezervă (procedați pe propriul risc)." - }, - "permissions": { - "title": "Permisiuni", - "subtitle": "Gestionați permisiunile bazate pe roluri și înlocuirile personalizate", - "info_title": "Cum funcționează permisiunile", - "info_desc": "Fiecare rol are permisiuni implicite. Puteți adăuga sau elimina permisiuni individuale pentru fiecare rol, comutându-le mai jos. Modificările personalizate sunt evidențiate și pot fi revenite la valorile implicite în orice moment.", - "select_role": "Selectați rolul", - "select_role_placeholder": "Alege un rol...", - "reset_overrides": "Resetați toate suprascrierile", - "granted": "Acordat", - "overrides": "Suprascrieri", - "level": "Nivel", - "super_admin_tag": "Acces complet", - "server_level_tag": "La nivel de server", - "custom": "Personalizat", - "default": "Implicit", - "revert": "Reveniți la implicit", - "saved": "Permisiunea a fost actualizată", - "reverted": "A revenit la valorile prestabilite", - "all_reverted": "Toate suprascrierile au fost anulate", - "confirm_reset": "Resetați toate înlocuirile personalizate pentru acest rol la valorile prestabilite?", - "empty_title": "Selectați un rol", - "empty_desc": "Alegeți un rol din meniul derulant de mai sus pentru a vedea și gestiona permisiunile acestuia.", - "locked_title": "Super administrator", - "locked_desc": "Super Admin are toate permisiunile în mod implicit și nu poate fi personalizat.", - "cat_device": "Dispozitive", - "cat_user": "Utilizatori", - "cat_server": "Sistem server", - "cat_org": "Organizații", - "cat_audit": "Audit & Monitorizare", - "cat_cdap": "CDAP", - "cat_enrollment": "Înregistrare", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Vizualizați dispozitivele", - "perm_device_connect": "Conectați-vă la dispozitive", - "perm_device_edit": "Editați dispozitivele", - "perm_device_delete": "Ștergeți dispozitivele", - "perm_device_ban": "Interziceți/dezbandați dispozitivele", - "perm_device_change_id": "Schimbați ID-ul dispozitivului", - "perm_user_view": "Vizualizați utilizatorii", - "perm_user_create": "Creați utilizatori", - "perm_user_edit": "Editați utilizatori", - "perm_user_delete": "Ștergeți utilizatori", - "perm_server_config": "Configurare server", - "perm_server_keys": "Gestionați cheile API", - "perm_org_create": "Creați organizații", - "perm_org_edit": "Editați organizațiile", - "perm_org_delete": "Ștergeți organizațiile", - "perm_org_manage_users": "Gestionați utilizatorii organizației", - "perm_org_manage_devices": "Gestionați dispozitivele organizației", - "perm_audit_view": "Vizualizați jurnalele de audit", - "perm_metrics_view": "Vedeți valorile", - "perm_blocklist_edit": "Editați lista blocată", - "perm_cdap_view": "Vizualizați dispozitivele CDAP", - "perm_cdap_command": "Trimiteți comenzi CDAP", - "perm_cdap_terminal": "CDAP acces la terminal", - "perm_cdap_files": "CDAP acces la fișiere", - "perm_enrollment_manage": "Gestionați înscrierea", - "perm_enrollment_approve": "Aprobați înscrierea", - "perm_chat_access": "Acces chat", - "perm_branding_edit": "Editați brandingul", - "perm_server_attestation": "Atestare performanță server" - }, - "notifications": { - "title": "Notificări", - "empty": "Fără notificări noi", - "mark_all_read": "Marcați toate citite", - "see_all": "Vedeți toate cererile de ajutor", - "help_request": "Cerere de ajutor", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Ajustați consola la nevoile dvs. de viziune, mișcare și citire.", - "close": "Închideți meniul de accesibilitate", - "profiles": "Profiluri rapide", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Text mai mare, contrast puternic și focalizare.", - "profile_dyslexia": "Confortul de citire", - "profile_dyslexia_hint": "Font lizibil și spațiere mai mare.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Reduce tranzițiile și întrerupe animația.", - "profile_color_assist": "Suport de culoare", - "profile_color_assist_hint": "Filtru de culoare, etichete și linkuri evidențiate.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Spațiere între litere", - "word_spacing": "Spațierea cuvintelor", - "readable_font": "Font care poate fi citit", - "readable_font_hint": "Folosește forme de litere largi, familiare.", - "dyslexia_spacing": "Dislexie spațiere", - "dyslexia_spacing_hint": "Adaugă spație suplimentară pentru text lung.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Întuneric contrast ridicat", - "contrast_high_light": "Lumină cu contrast ridicat", - "contrast_yellow_black": "Galben pe negru", - "color_filter": "Filtru de viziune a culorilor", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Saturația culorii", - "underline_links": "Subliniați linkurile", - "underline_links_hint": "Face linkurile vizibile fără a se baza pe culoare.", - "highlight_links": "Evidențiați acțiunile", - "highlight_links_hint": "Conturează link-uri și butoane.", - "highlight_headings": "Evidențiați titluri", - "highlight_headings_hint": "Marchează titlurile secțiunilor cu o bară de culoare.", - "hide_media": "Dim media", - "hide_media_hint": "Estompează imaginile, videoclipurile și pânzele.", - "interaction": "Interaction", - "strong_focus": "Focalizare puternică", - "strong_focus_hint": "Afișează un inel mare de focalizare pentru tastatură.", - "large_cursor": "Cursor mare", - "large_cursor_hint": "Utilizează un indicator mai mare, cu contrast ridicat.", - "reduce_motion": "Reduceți mișcarea", - "reduce_motion_hint": "Scurtează tranzițiile și defilarea lină.", - "pause_animations": "Întrerupeți animațiile", - "pause_animations_hint": "Oprește mișcarea vizuală în buclă.", - "reading_guide": "Ghid de lectură", - "reading_guide_hint": "Urmează indicatorul cu o linie strălucitoare.", - "reading_mask": "Mască de lectură", - "reading_mask_hint": "Estompează conținutul deasupra și sub indicator.", - "preview": "Preview", - "preview_title": "Previzualizarea spațiului de lucru al operatorului", - "preview_text": "Verificați dacă textul, linkurile, comenzile și etichetele de stare sunt ușor de citit înainte de a închide acest meniu.", - "preview_link": "Link detalii dispozitiv", - "preview_status": "Online", - "preview_button": "Acțiune primară", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Gestionare server", - "subtitle": "Plan de control asemănător cabinei pentru gazda consolei BetterDesk (BETA).", - "beta_tooltip": "Funcție beta — în curs de dezvoltare activă.", - "notice_title": "Caracteristica beta", - "notice_body": "Aceste instrumente rulează pe gazda unde se află procesul consolei BetterDesk. Toate operațiunile sunt auditate. Domeniul de aplicare se va extinde în versiunile viitoare.", - "tab_overview": "Prezentare", - "tab_terminal": "Terminal", - "tab_files": "Fișiere", - "tab_services": "Servicii", - "cpu": "CPU", - "memory": "Memorie", - "load": "Încărcare medie", - "disks": "Discuri", - "history": "Istoric (ultimele 60 de mostre)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Timp de funcționare", - "no_disks": "Nu sunt disponibile date de disc", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY disponibil", - "term_connect": "Conectează", - "term_disconnect": "Deconectează", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Eroare de conectare", - "term_warning": "Comenzile rulează ca utilizator care deține procesul consolei. Adăugați o regulă sudoers pentru a activa elevația.", - "term_hint": "Sfat: tastați `sudo -i` pentru a escalada (necesită configurarea sudoers).", - "term_lib_failed": "Nu s-a încărcat biblioteca terminalului", - "files_up": "Sus cu un nivel", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Director gol", - "files_error": "Nu s-a putut enumera directorul", - "read_failed": "Nu s-a putut citi fișierul", - "save_failed": "Nu s-a putut salva fișierul", - "rename_failed": "Redenumirea a eșuat", - "delete_failed": "Ștergerea nu a reușit", - "delete_confirm": "Ștergeți această intrare?", - "mkdir_prompt": "Nume nou folder:", - "mkdir_failed": "Nu s-a putut crea folderul", - "file_saved": "Fișier salvat", - "binary_warn": "Fișier binar — doar previzualizare", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Servicii de căutare…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Nu s-au găsit servicii", - "svc_load_failed": "Serviciile nu au putut fi încărcate", - "svc_action_failed": "Acțiunea eșuată", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Reporniți", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Descărcați agentul BetterDesk", - "choose_platform": "Alege-ți platforma", - "choose_platform_hint": "Selectați programul de instalare care se potrivește cu sistemul dvs. de operare.", - "download": "Descărcați", - "building": "Construirea…", - "failed": "Construirea a eșuat", - "need_help": "Ai nevoie de ajutor?", - "powered_by": "Alimentat de" - }, - "server_attestation": { - "title": "Atestare server", - "subtitle": "Benchmark de performanță care determină capacitatea de conexiuni la distanță simultane la 80% prag CPU, RAM și disc.", - "warning_title": "Test de sarcină", - "warning_body": "Benchmark-ul simulează conexiuni WebSocket paralele la serverele de semnal și releu. Rulați în afara orelor de vârf — acest test solicită producția.", - "run_benchmark": "Rulare benchmark", - "abort": "Anulare", - "download_report": "Descărcare raport JSON", - "last_test": "Ultimul test", - "no_test_yet": "Niciun benchmark rulat încă", - "max_connections": "Conexiuni maxime", - "threshold_80": "Prag 80% — măsurători finale", - "disk": "Disc", - "ramp_chart": "Grafic rampă de sarcină", - "connections": "Conexiuni", - "connections_short": "con.", - "tier_guide_title": "Ce înseamnă fiecare nivel?", - "tier_bronze": "BRONZ", - "tier_iron": "FIER", - "tier_titanium": "TITAN", - "tier_platinum": "PLATINĂ", - "tier_obsidian": "OBSIDIAN", - "tier_none": "NECERTIFICAT", - "tier_bronze_desc": "1–25 conexiuni simultane — VPS mic (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 conexiuni — server mediu (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 conexiuni — server de înaltă performanță (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 conexiuni — infrastructură enterprise (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ conexiuni — clasă turbo: hardware dedicat, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Notă: În Docker, măsurătorile CPU/RAM pot reflecta limitele containerului, nu ale gazdei fizice.", - "badge_tooltip": "Atestare Server BetterDesk — certificat de performanță server", - "confirm_run": "Acest benchmark va solicita serverul cu conexiuni simulate. Continuați?", - "starting": "Se pornește...", - "complete": "Benchmark finalizat", - "signal_peers": "Peer-uri semnal", - "relay_sessions": "Sesiuni releu", - "page_error": "Nu s-a putut încărca pagina de Atestare Server", - "mode_estimated": "Estimat (WebSocket indisponibil)", - "incomplete": "Benchmark-ul s-a terminat fără un nivel valid" + "form": { + "cancel": "Anulează" } + } } diff --git a/web-nodejs/lang/sv.json b/web-nodejs/lang/sv.json index 3477a1f1..5eaf3cdf 100644 --- a/web-nodejs/lang/sv.json +++ b/web-nodejs/lang/sv.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Swedish", - "native_name": "Svenska", - "flag": "🇸🇪", - "needs_review": true + "_meta": { + "name": "Swedish", + "native_name": "Svenska", + "flag": "🇸🇪", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Laddar...", + "confirm": "Bekräfta", + "alert": "Varning", + "prompt": "Ange värde", + "copied": "Kopierade till urklipp", + "save": "Spara", + "saved": "Sparad", + "error": "Fel", + "success": "Klart", + "warning": "Varning", + "info": "Information", + "all": "Alla", + "cancel": "Avbryt", + "delete": "Ta bort", + "actions": "Åtgärder", + "close": "Stäng", + "required": "krävs", + "name_required": "Namn krävs", + "active": "Aktiv", + "inactive": "Inaktiv", + "invalid_json": "Ogiltig JSON", + "field_required": "{field} krävs", + "back": "Tillbaka", + "edit": "Redigera", + "yes": "Ja", + "no": "Nej" + }, + "nav": { + "main": "Huvud", + "tools": "Verktyg", + "system": "System", + "dashboard": "Instrumentbräda", + "devices": "Enheter", + "keys": "Nycklar", + "generator": "Generator", + "settings": "Inställningar", + "users": "Användare", + "inventory": "Inventarier", + "tickets": "Ärenden", + "help_requests": "Hjälpförfrågningar", + "activity": "Aktivitet", + "automation": "Automatisering", + "file_transfer": "Filöverföring", + "network": "Nätverk", + "dataguard": "DataGuard", + "reports": "Rapporter", + "tenants": "Hyresgäster", + "registrations": "Registrations", + "management": "Ledning", + "toggle_sidebar": "Växla sidofältet", + "cdap": "CDAP-enheter", + "fleet": "Flotta", + "scaling": "Skalning", + "cross_platform": "Plattformsoberoende", + "tokens": "Enhetstokens", + "organizations": "Organisationer", + "policies": "Policyer", + "attestation": "Attestering", + "remote": "Fjärrskrivbord", + "toolkit": "Verktygslåda", + "security_audit": "Säkerhetsrevision", + "languages": "Språk", + "resource_control": "Resurskontroll", + "chat": "Chatt", + "help": "Hjälp", + "expand_sidebar": "Expandera sidofältet", + "toggle_theme": "Växla tema", + "sdk_studio": "SDK Studio", + "login": "Logga in", + "permissions": "Behörigheter", + "server_management": "Serverhantering", + "server_attestation": "Serverattest", + "commercialization": "Kommersialisering" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Logga in på BetterDesk-konsolen", + "username": "Användarnamn", + "username_placeholder": "Ange användarnamn", + "password": "Lösenord", + "password_placeholder": "Ange lösenord", + "remember_me": "Remember me", + "login_failed": "Inloggningen misslyckades. Kontrollera dina referenser.", + "invalid_credentials": "Ogiltigt användarnamn eller lösenord.", + "username_collision": "Ett lokalt konto med detta användarnamn finns redan. Logga in med ditt lokala lösenord eller be en administratör att byta namn på eller ta bort det kolliderande kontot.", + "fill_all_fields": "Vänligen fyll i alla fält", + "logout_confirm": "Är du säker på att du vill logga ut?", + "change_password": "Ändra lösenord", + "password_required": "Lösenord krävs", + "totp_title": "Tvåfaktorsautentisering", + "totp_subtitle": "Ange den sexsiffriga koden från din autentiseringsapp", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Använd en återställningskod istället", + "totp_use_code": "Använd autentiseringskod istället", + "totp_recovery_code": "Återställningskod", + "totp_back_to_login": "Tillbaka till inloggning", + "totp_invalid_code": "Ogiltig verifieringskod. Försök igen.", + "totp_enter_code": "Ange en 6-siffrig kod", + "totp_enter_recovery": "Ange en återställningskod", + "totp_session_expired": "Sessionen har löpt ut. Logga in igen.", + "totp_already_enabled": "Tvåfaktorsautentisering är redan aktiverad", + "pro_only_account": "Det här kontot är endast till för RustDesk stationär klient. Använd RustDesk-appen för att logga in.", + "passwords_mismatch": "Lösenord stämmer inte överens", + "or": "eller", + "login_sso": "Logga in med SSO", + "login_sso_with": "Logga in med {{provider}}", + "oidc_denied": "Tillgång nekades av identitetsleverantören.", + "oidc_invalid": "Ogiltig OIDC återuppringning. Försök igen.", + "oidc_failed": "OIDC-autentisering misslyckades. Försök igen.", + "oidc_error": "Ett fel uppstod under SSO-inloggning.", + "oidc_no_account": "Ditt konto hittades inte och automatisk registrering är inaktiverad.", + "totp_rate_limited": "För många försök. Försök igen senare.", + "emergency_mode_banner": "Go server går inte att nå — körs i nödläge (endast administratör, begränsad funktionalitet)" + }, + "dashboard": { + "title": "Instrumentbräda", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Totalt antal enheter", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktiva anslutningar", + "offline_devices": "Offline", + "server_status": "Serverstatus", + "quick_actions": "Snabba åtgärder", + "manage_devices": "Hantera anslutna enheter", + "view_keys": "Visa servernycklar", + "generate_config": "Generera klientkonfiguration", + "server_settings": "Konfigurera inställningar", + "greeting_morning": "God morgon, {name}", + "greeting_afternoon": "God eftermiddag, {name}", + "greeting_evening": "God kväll, {name}", + "greeting_night": "God natt, {name}", + "health_overview": "Hälsoöversikt", + "devices_online": "Enheter online", + "active_alerts": "Aktiva varningar", + "recent_connections": "Totalt antal enheter", + "server_uptime": "Serverns upptid", + "activity_feed": "Senaste aktivitet", + "no_recent_activity": "Ingen senaste aktivitet", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Prova Desktop Mode för en arbetsyta med flera fönster med övervakningswidgets.", + "tip_keyboard_shortcuts": "Tryck på Ctrl+K var som helst för att öppna kommandopaletten för snabbsökning.", + "tip_address_book": "Synkronisera din adressbok mellan enheter genom att logga in från RustDesk-klienten.", + "tip_2fa": "Aktivera tvåfaktorsautentisering i Inställningar för extra kontosäkerhet.", + "tip_bulk_actions": "Välj flera enheter och använd massåtgärder för att hantera dem samtidigt.", + "tip_theme": "Växla mellan mörka och ljusa teman i sidofältsinställningarna.", + "tip_cdap": "Anslut IoT-enheter och industriella sensorer via CDAP-gatewayen.", + "tip_tutorials": "Klicka på hjälpknappen i det nedre högra hörnet för interaktiva handledningar." + }, + "devices": { + "title": "Enheter", + "id": "ID", + "hostname": "Hostname", + "username": "Användarnamn", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Skapad", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Sök enheter...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Synkroniseringsstatus", + "sync_success": "Status har synkroniserats", + "empty_title": "Inga enheter hittades", + "empty_text": "Inga enheter matchar dina nuvarande filter", + "edit_title": "Enhetsdetaljer", + "delete_title": "Ta bort enhet", + "delete_confirm": "Är du säker på att du vill ta bort enheten {id}?", + "delete_warning": "Du håller på att ta bort den här enheten permanent:", + "delete_permanent": "Denna åtgärd kan inte ångras. All data som är associerad med den här enheten kommer att tas bort permanent från databasen.", + "delete_success": "Enheten har raderats", + "revoke_option": "Återkalla enheten", + "revoke_hint": "Blockera enhets-ID och koppla bort aktiva anslutningar", + "revoke_success": "Enheten har återkallats", + "details": "Enhetsdetaljer", + "ban_title": "Förbjud enhet", + "ban_confirm": "Är du säker på att du vill blockera enheten {id}?", + "ban_success": "Enheten har blockerats", + "unban_title": "Avaktivera enhet", + "unban_confirm": "Är du säker på att du vill ta bort blockeringen av enheten {id}?", + "unban_success": "Enheten avblockerades framgångsrikt", + "change_id": "Change ID", + "change_id_title": "Ändra enhets-ID", + "new_id": "New ID", + "change_id_hint": "Endast 6-16 tecken, bokstäver, siffror, bindestreck och understreck", + "change_id_success": "Enhets-ID har ändrats", + "id_length_error": "ID måste vara 6-16 tecken långt", + "id_format_error": "ID kan bara innehålla bokstäver, siffror, bindestreck och understreck", + "bulk_delete_title": "Ta bort flera enheter", + "bulk_delete_confirm": "Är du säker på att du vill ta bort {count}-enheter?", + "bulk_delete_success": "{count}-enheter har raderats", + "columns": "Columns", + "toggle_columns": "Växla synliga kolumner", + "not_found": "Enheten hittades inte", + "delete_failed": "Det gick inte att ta bort enheten", + "change_id_failed": "Det gick inte att ändra enhets-ID", + "invalid_id": "Ogiltigt enhets-ID (6–16 tecken krävs)", + "invalid_id_format": "Ogiltigt ID-format (endast bokstäver, siffror, bindestreck, understreck)", + "id_exists": "Enhets-ID finns redan", + "no_selection": "Inga enheter har valts", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP ansluten", + "revoke": "Återkalla", + "access_policy": "Åtkomstpolicy", + "unattended_access": "Oövervakad åtkomst", + "enable_unattended": "Aktivera obevakad åtkomst", + "access_password": "Åtkomstlösenord", + "password_configured": "Lösenord inställt", + "no_password": "Inget lösenord", + "new_password": "Nytt lösenord (låt vara tomt för att hålla det aktuellt)", + "clear_password": "Rensa lösenord", + "access_schedule": "Åtkomstschema", + "enable_schedule": "Aktivera tidsbaserad åtkomst", + "allowed_days": "Tillåtna dagar", + "start_time": "Starttid", + "end_time": "Sluttid", + "timezone": "Tidszon", + "allowed_operators": "Tillåtna operatörer", + "all_operators": "Alla operatörer (lämna tomt)", + "operators_hint": "Kommaseparerade användarnamn. Lämna tomt för att tillåta alla operatörer.", + "last_updated_by": "Senast uppdaterad av", + "access_policy_saved": "Åtkomstpolicyn har sparats", + "tabs": { + "overview": "Översikt", + "hardware": "Hardware", + "metrics": "Mätvärden", + "connections": "Anslutningar", + "audit": "Audit", + "info": "Info", + "history": "Historia" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Minne", + "disk": "Disk", + "os": "Operativsystem", + "hostname": "Värdnamn", + "uptime": "Drifttid", + "load_avg": "Belastningsgenomsnitt", + "network": "Nätverksadaptrar", + "no_data": "Ingen hårdvarudata tillgänglig", + "title": "Hårdvaruinformation", + "gpu": "Grafikkort" }, - "common": { - "loading": "Laddar...", - "confirm": "Bekräfta", - "alert": "Varning", - "prompt": "Ange värde", - "copied": "Kopierade till urklipp", - "save": "Spara", - "saved": "Sparad", - "error": "Fel", - "success": "Klart", - "warning": "Varning", - "info": "Information", - "all": "Alla", - "cancel": "Avbryt", - "delete": "Ta bort", - "actions": "Åtgärder", - "close": "Stäng", - "required": "krävs", - "name_required": "Namn krävs", - "active": "Aktiv", - "inactive": "Inaktiv", - "invalid_json": "Ogiltig JSON", - "field_required": "{field} krävs", - "back": "Tillbaka", - "edit": "Redigera", - "yes": "Ja", - "no": "Nej" - }, - "nav": { - "main": "Huvud", - "tools": "Verktyg", - "system": "System", - "dashboard": "Instrumentbräda", - "devices": "Enheter", - "keys": "Nycklar", - "generator": "Generator", - "settings": "Inställningar", - "users": "Användare", - "inventory": "Inventarier", - "tickets": "Ärenden", - "help_requests": "Hjälpförfrågningar", - "activity": "Aktivitet", - "automation": "Automatisering", - "file_transfer": "Filöverföring", - "network": "Nätverk", - "dataguard": "DataGuard", - "reports": "Rapporter", - "tenants": "Hyresgäster", - "registrations": "Registrations", - "management": "Ledning", - "toggle_sidebar": "Växla sidofältet", - "cdap": "CDAP-enheter", - "fleet": "Flotta", - "scaling": "Skalning", - "cross_platform": "Plattformsoberoende", - "tokens": "Enhetstokens", - "organizations": "Organisationer", - "policies": "Policyer", - "attestation": "Attestering", - "remote": "Fjärrskrivbord", - "toolkit": "Verktygslåda", - "security_audit": "Säkerhetsrevision", - "languages": "Språk", - "resource_control": "Resurskontroll", - "chat": "Chatt", - "help": "Hjälp", - "expand_sidebar": "Expandera sidofältet", - "toggle_theme": "Växla tema", - "sdk_studio": "SDK Studio", - "login": "Logga in", - "permissions": "Behörigheter", - "server_management": "Serverhantering", - "server_attestation": "Serverattest" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Logga in på BetterDesk-konsolen", - "username": "Användarnamn", - "username_placeholder": "Ange användarnamn", - "password": "Lösenord", - "password_placeholder": "Ange lösenord", - "remember_me": "Remember me", - "login_failed": "Inloggningen misslyckades. Kontrollera dina referenser.", - "invalid_credentials": "Ogiltigt användarnamn eller lösenord.", - "username_collision": "Ett lokalt konto med detta användarnamn finns redan. Logga in med ditt lokala lösenord eller be en administratör att byta namn på eller ta bort det kolliderande kontot.", - "fill_all_fields": "Vänligen fyll i alla fält", - "logout_confirm": "Är du säker på att du vill logga ut?", - "change_password": "Ändra lösenord", - "password_required": "Lösenord krävs", - "totp_title": "Tvåfaktorsautentisering", - "totp_subtitle": "Ange den sexsiffriga koden från din autentiseringsapp", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Använd en återställningskod istället", - "totp_use_code": "Använd autentiseringskod istället", - "totp_recovery_code": "Återställningskod", - "totp_back_to_login": "Tillbaka till inloggning", - "totp_invalid_code": "Ogiltig verifieringskod. Försök igen.", - "totp_enter_code": "Ange en 6-siffrig kod", - "totp_enter_recovery": "Ange en återställningskod", - "totp_session_expired": "Sessionen har löpt ut. Logga in igen.", - "totp_already_enabled": "Tvåfaktorsautentisering är redan aktiverad", - "pro_only_account": "Det här kontot är endast till för RustDesk stationär klient. Använd RustDesk-appen för att logga in.", - "passwords_mismatch": "Lösenord stämmer inte överens", - "or": "eller", - "login_sso": "Logga in med SSO", - "login_sso_with": "Logga in med {{provider}}", - "oidc_denied": "Tillgång nekades av identitetsleverantören.", - "oidc_invalid": "Ogiltig OIDC återuppringning. Försök igen.", - "oidc_failed": "OIDC-autentisering misslyckades. Försök igen.", - "oidc_error": "Ett fel uppstod under SSO-inloggning.", - "oidc_no_account": "Ditt konto hittades inte och automatisk registrering är inaktiverad.", - "totp_rate_limited": "För många försök. Försök igen senare.", - "emergency_mode_banner": "Go server går inte att nå — körs i nödläge (endast administratör, begränsad funktionalitet)" - }, - "dashboard": { - "title": "Instrumentbräda", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Totalt antal enheter", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktiva anslutningar", - "offline_devices": "Offline", - "server_status": "Serverstatus", - "quick_actions": "Snabba åtgärder", - "manage_devices": "Hantera anslutna enheter", - "view_keys": "Visa servernycklar", - "generate_config": "Generera klientkonfiguration", - "server_settings": "Konfigurera inställningar", - "greeting_morning": "God morgon, {name}", - "greeting_afternoon": "God eftermiddag, {name}", - "greeting_evening": "God kväll, {name}", - "greeting_night": "God natt, {name}", - "health_overview": "Hälsoöversikt", - "devices_online": "Enheter online", - "active_alerts": "Aktiva varningar", - "recent_connections": "Totalt antal enheter", - "server_uptime": "Serverns upptid", - "activity_feed": "Senaste aktivitet", - "no_recent_activity": "Ingen senaste aktivitet", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Prova Desktop Mode för en arbetsyta med flera fönster med övervakningswidgets.", - "tip_keyboard_shortcuts": "Tryck på Ctrl+K var som helst för att öppna kommandopaletten för snabbsökning.", - "tip_address_book": "Synkronisera din adressbok mellan enheter genom att logga in från RustDesk-klienten.", - "tip_2fa": "Aktivera tvåfaktorsautentisering i Inställningar för extra kontosäkerhet.", - "tip_bulk_actions": "Välj flera enheter och använd massåtgärder för att hantera dem samtidigt.", - "tip_theme": "Växla mellan mörka och ljusa teman i sidofältsinställningarna.", - "tip_cdap": "Anslut IoT-enheter och industriella sensorer via CDAP-gatewayen.", - "tip_tutorials": "Klicka på hjälpknappen i det nedre högra hörnet för interaktiva handledningar." - }, - "devices": { - "title": "Enheter", - "id": "ID", - "hostname": "Hostname", - "username": "Användarnamn", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Skapad", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Sök enheter...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Synkroniseringsstatus", - "sync_success": "Status har synkroniserats", - "empty_title": "Inga enheter hittades", - "empty_text": "Inga enheter matchar dina nuvarande filter", - "edit_title": "Enhetsdetaljer", - "delete_title": "Ta bort enhet", - "delete_confirm": "Är du säker på att du vill ta bort enheten {id}?", - "delete_warning": "Du håller på att ta bort den här enheten permanent:", - "delete_permanent": "Denna åtgärd kan inte ångras. All data som är associerad med den här enheten kommer att tas bort permanent från databasen.", - "delete_success": "Enheten har raderats", - "revoke_option": "Återkalla enheten", - "revoke_hint": "Blockera enhets-ID och koppla bort aktiva anslutningar", - "revoke_success": "Enheten har återkallats", - "details": "Enhetsdetaljer", - "ban_title": "Förbjud enhet", - "ban_confirm": "Är du säker på att du vill blockera enheten {id}?", - "ban_success": "Enheten har blockerats", - "unban_title": "Avaktivera enhet", - "unban_confirm": "Är du säker på att du vill ta bort blockeringen av enheten {id}?", - "unban_success": "Enheten avblockerades framgångsrikt", - "change_id": "Change ID", - "change_id_title": "Ändra enhets-ID", - "new_id": "New ID", - "change_id_hint": "Endast 6-16 tecken, bokstäver, siffror, bindestreck och understreck", - "change_id_success": "Enhets-ID har ändrats", - "id_length_error": "ID måste vara 6-16 tecken långt", - "id_format_error": "ID kan bara innehålla bokstäver, siffror, bindestreck och understreck", - "bulk_delete_title": "Ta bort flera enheter", - "bulk_delete_confirm": "Är du säker på att du vill ta bort {count}-enheter?", - "bulk_delete_success": "{count}-enheter har raderats", - "columns": "Columns", - "toggle_columns": "Växla synliga kolumner", - "not_found": "Enheten hittades inte", - "delete_failed": "Det gick inte att ta bort enheten", - "change_id_failed": "Det gick inte att ändra enhets-ID", - "invalid_id": "Ogiltigt enhets-ID (6–16 tecken krävs)", - "invalid_id_format": "Ogiltigt ID-format (endast bokstäver, siffror, bindestreck, understreck)", - "id_exists": "Enhets-ID finns redan", - "no_selection": "Inga enheter har valts", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP ansluten", - "revoke": "Återkalla", - "access_policy": "Åtkomstpolicy", - "unattended_access": "Oövervakad åtkomst", - "enable_unattended": "Aktivera obevakad åtkomst", - "access_password": "Åtkomstlösenord", - "password_configured": "Lösenord inställt", - "no_password": "Inget lösenord", - "new_password": "Nytt lösenord (låt vara tomt för att hålla det aktuellt)", - "clear_password": "Rensa lösenord", - "access_schedule": "Åtkomstschema", - "enable_schedule": "Aktivera tidsbaserad åtkomst", - "allowed_days": "Tillåtna dagar", - "start_time": "Starttid", - "end_time": "Sluttid", - "timezone": "Tidszon", - "allowed_operators": "Tillåtna operatörer", - "all_operators": "Alla operatörer (lämna tomt)", - "operators_hint": "Kommaseparerade användarnamn. Lämna tomt för att tillåta alla operatörer.", - "last_updated_by": "Senast uppdaterad av", - "access_policy_saved": "Åtkomstpolicyn har sparats", - "tabs": { - "overview": "Översikt", - "hardware": "Hardware", - "metrics": "Mätvärden", - "connections": "Anslutningar", - "audit": "Audit", - "info": "Info", - "history": "Historia" - }, - "hardware": { - "cpu": "Processor", - "memory": "Minne", - "disk": "Disk", - "os": "Operativsystem", - "hostname": "Värdnamn", - "uptime": "Drifttid", - "load_avg": "Belastningsgenomsnitt", - "network": "Nätverksadaptrar", - "no_data": "Ingen hårdvarudata tillgänglig", - "title": "Hårdvaruinformation", - "gpu": "Grafikkort" - }, - "display_name": "Visningsnamn", - "display_name_placeholder": "Anpassat namn (åsidosätter värdnamn)", - "note_placeholder": "Anteckningar om den här enheten", - "tags": "Tags", - "filter_by_tags": "Filtrera efter taggar", - "no_tags": "Inga taggar", - "all_groups": "Alla grupper", - "create_group": "Skapa grupp", - "manage_groups": "Hantera grupper", - "group_name": "Gruppnamn", - "group_name_placeholder": "t.ex. Media-datorer", - "dynamic_group": "Dynamisk grupp från tagg", - "dynamic_group_hint": "Enheter med denna tagg ansluts automatiskt.", - "tag_filter": "Taggfilter", - "group_allowed_users": "Tillåtna användare", - "group_allowed_users_hint": "Lämna tomt för att hålla gruppen synlig för alla med enhetsbehörighet.", - "group_tag_required": "Taggfilter krävs för dynamiska grupper", - "group_invalid": "Ogiltig gruppidentifierare", - "group_not_found": "Gruppen hittades inte", - "group_saved": "Enhetsgruppen har sparats", - "groups_saved": "Enhetsgrupper har sparats", + "display_name": "Visningsnamn", + "display_name_placeholder": "Anpassat namn (åsidosätter värdnamn)", + "note_placeholder": "Anteckningar om den här enheten", + "tags": "Tags", + "filter_by_tags": "Filtrera efter taggar", + "no_tags": "Inga taggar", + "all_groups": "Alla grupper", + "create_group": "Skapa grupp", + "manage_groups": "Hantera grupper", + "group_name": "Gruppnamn", + "group_name_placeholder": "t.ex. Media-datorer", + "dynamic_group": "Dynamisk grupp från tagg", + "dynamic_group_hint": "Enheter med denna tagg ansluts automatiskt.", + "tag_filter": "Taggfilter", + "group_allowed_users": "Tillåtna användare", + "group_allowed_users_hint": "Lämna tomt för att hålla gruppen synlig för alla med enhetsbehörighet.", + "group_tag_required": "Taggfilter krävs för dynamiska grupper", + "group_invalid": "Ogiltig gruppidentifierare", + "group_not_found": "Gruppen hittades inte", + "group_saved": "Enhetsgruppen har sparats", + "groups_saved": "Enhetsgrupper har sparats", "group_membership_added": "Tillagd i grupp", "group_membership_removed": "Borttagen från grupp", - "no_groups": "Inga grupper än", - "manual_groups": "Manuella grupper", - "dynamic_memberships": "Dynamiska medlemskap", - "group_allowed_user_groups": "Tillåtna användargrupper", - "group_allowed_user_groups_hint": "Användare i valda användargrupper kan komma åt den här enhetsgruppen.", - "no_user_groups": "Inga användargrupper", - "edit_group": "Redigera grupp", - "delete_group": "Ta bort grupp", - "delete_group_confirm": "Ta bort enhetsgrupp {name}?", - "group_deleted": "Enhetsgruppen har tagits bort", - "folder_group_readonly": "Mappstödda grupper hanteras från mappar.", - "manage_user_groups": "Hantera användargrupper", - "restore_failed": "Enhet konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Klienten kontaktade API:et nyligen men är inte registrerad på signalservern (UDP :21116). Starta om klienten efter servermigrering.", - "per_page": "Per sida" - }, - "keys": { - "title": "Servernycklar", - "subtitle": "Offentlig nyckel och konfiguration för RustDesk-klienter", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Serverinformation", - "download": "Ladda ner nyckel", - "show_qr": "Show QR", - "qr_hint": "Skanna den här QR-koden med RustDesk mobilapp", - "no_key": "Ingen offentlig nyckel hittades", - "no_key_to_copy": "Ingen nyckel att kopiera", - "no_qr": "QR-koden är inte tillgänglig", - "download_success": "Nyckelfil nedladdad", - "not_found": "Nyckel hittades inte", - "api_not_found": "API-nyckeln hittades inte" - }, - "settings": { - "title": "Inställningar", - "subtitle": "Konsolkonfiguration och kontoinställningar", - "tab_general": "General", - "tab_server": "Serverinställningar", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Språk", - "change_password": "Ändra lösenord", - "password_desc": "Uppdatera ditt kontolösenord", - "current_password": "Aktuellt lösenord", - "new_password": "Nytt lösenord", - "confirm_password": "Bekräfta lösenord", - "save_password": "Uppdatera lösenord", - "password_changed": "Lösenordet har ändrats", - "fill_all_fields": "Vänligen fyll i alla fält", - "passwords_not_match": "Lösenord stämmer inte överens", - "password_requirements": "Lösenordskrav", - "password_requirements_not_met": "Lösenordet uppfyller inte kraven", - "req_length": "Minst 8 tecken", - "req_uppercase": "Minst en stor bokstav", - "req_lowercase": "Minst en liten bokstav", - "req_number": "Minst ett nummer", - "server_info": "Serverinformation", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Senaste konsolaktivitet", - "no_audit_logs": "Inga granskningsloggar hittades", - "backend_title": "Backend-konfiguration", - "backend_desc": "Välj vilken serverbackend som ska användas för enhetshantering och signal-/relätjänster.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Standard RustDesk signal- och reläservrar (hbbs + hbbr). Grundläggande HTTP API med begränsade slutpunkter.", - "backend_betterdesk_desc": "Förbättrad Go-baserad server med full REST API, JWT-autentisering, blockeringslista, taggar, WebSocket-händelser i realtid och revisionsloggning.", - "backend_feature_signal": "Signalserver (ID-registrering)", - "backend_feature_relay": "Reläserver (anslutningsrelä)", - "backend_feature_basic_api": "Grundläggande REST API", - "backend_feature_full_api": "Full REST API (34+ slutpunkter)", - "backend_feature_jwt": "JWT-autentisering & TOTP 2FA", - "backend_feature_blocklist": "Hantering av IP/ID-blocklistor", - "backend_feature_tags": "Enhetstaggar och gruppering", - "backend_feature_audit": "Granska händelseloggning", - "backend_feature_websocket": "Realtids WebSocket händelser", - "backend_connection": "Anslutning", - "backend_api_url": "API URL", - "backend_test": "Testa anslutningen", - "backend_testing": "Testar...", - "backend_save": "Använd Backend", - "backend_saved": "Serverns backend har ändrats. Enhetsdata kommer nu att hanteras av den nya backend.", - "backend_save_failed": "Det gick inte att byta serverbackend", - "backend_test_success": "Anslutningen lyckades! Servern är tillgänglig.", - "backend_test_failed": "Anslutning misslyckades. Servern går inte att nå.", - "backend_confirm_switch": "Är du säker på att du vill byta serverns backend? Detta kommer att ändra hur enheter hanteras.", - "backend_unreachable": "Kan inte byta: målservern går inte att nå. Starta servern först.", - "invalid_backend": "Ogiltigt val av backend. Välj 'rustdesk' eller 'betterdesk'.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Tvåfaktorsautentisering", - "totp_desc": "Lägg till ett extra lager av säkerhet med TOTP autentiseringsappar (Google Authenticator, Microsoft Authenticator, Authy, etc.)", - "totp_enabled": "2FA aktiverad", - "totp_enabled_desc": "Ditt konto är skyddat med tvåfaktorsautentisering.", - "totp_disabled": "2FA inte aktiverat", - "totp_disabled_desc": "Aktivera tvåfaktorsautentisering för ytterligare kontosäkerhet.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Installera en autentiseringsapp på din telefon", - "totp_step2": "Skanna QR-koden nedan", - "totp_step3": "Ange den 6-siffriga koden för att verifiera", - "totp_manual_key": "Manual key", - "totp_enter_code": "Ange verifieringskod", - "totp_verify_enable": "Verifiera och aktivera", - "totp_enabled_success": "Tvåfaktorsautentisering aktiverad!", - "totp_recovery_warning": "Spara dessa återställningskoder på ett säkert ställe. Varje kod kan endast användas en gång. Om du förlorar åtkomsten till din autentiseringsapp kan du använda dessa koder för att logga in.", - "totp_done": "Done", - "totp_disable_warning": "Om du inaktiverar tvåfaktorsautentisering blir ditt konto mindre säkert. Ange ditt lösenord för att bekräfta.", - "totp_disabled_success": "Tvåfaktorsautentisering har inaktiverats.", - "tutorials_title": "Handledningar och guider", - "tutorials_desc": "Styr guidade turer och hjälpöverlägg som visas på hela konsolen", - "tutorials_enabled": "Aktivera självstudier", - "tutorials_enabled_hint": "När den är inaktiverad startar inte självstudierna automatiskt och hjälpknappen kommer att döljas", - "tutorials_reset_hint": "Markera alla handledningar som osynliga så att de kan visas igen", - "tutorials_enabled_toast": "Handledningar aktiverade", - "tutorials_disabled_toast": "Handledningar inaktiverade", - "tutorials_reset_toast": "Alla tutorials har återställts", - "tab_auth": "Autentisering", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Konfigurera extern autentisering via LDAP eller Active Directory. Användare kommer att kunna logga in med sina domänuppgifter.", - "ldap_enabled": "Aktivera LDAP-autentisering", - "ldap_enabled_hint": "När det är aktiverat kan användare logga in med LDAP/AD-uppgifter. Lokala konton fungerar fortfarande som reserv.", - "ldap_connection": "Serveranslutning", - "ldap_host": "Värd", - "ldap_port": "Port", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Hoppa över TLS verifiering", - "ldap_timeout": "Timeout för anslutning (s)", - "ldap_timeout_hint": "Sekunder att vänta på LDAP-serversvar", - "ldap_bind_mode": "Bindläge", - "ldap_direct_bind": "Direktbindning", - "ldap_direct_bind_hint": "Bind direkt med en DN-mall istället för att använda ett tjänstekonto för att söka.", - "ldap_bind_dn": "Bind DN (tjänstkonto)", - "ldap_bind_dn_hint": "Distinguished Name på ett skrivskyddat tjänstkonto som används för att söka efter användare.", - "ldap_bind_password": "Bind lösenord", - "ldap_base_dn": "Bas DN", - "ldap_base_dn_hint": "Sökbas för att hitta användare, t.ex. dc=exempel,dc=com", - "ldap_user_filter": "Användarfilter", - "ldap_user_filter_hint": "LDAP filter för att hitta användare. Använd {{username}} som platshållare. Standard: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Direct Bind DN Mall", - "ldap_direct_bind_dn_hint": "DN-mall för direktbindning. Använd {{username}} som platshållare, t.ex. uid={{username}},ou=användare,dc=exempel,dc=com", - "ldap_user_attrs": "Användarattribut", - "ldap_attr_id": "Användarnamn Attribut", - "ldap_attr_email": "E-postattribut", - "ldap_attr_name": "Visningsnamnattribut", - "ldap_group_mapping": "Grupp → Rollmappning", - "ldap_group_base_dn": "Grupp Bas DN", - "ldap_group_base_dn_hint": "Lämna tomt för att använda huvudbas-DN", - "ldap_group_filter": "Gruppfilter", - "ldap_group_attr_name": "Attribut för gruppnamn", - "ldap_default_role": "Standardroll", - "ldap_default_role_hint": "Roll tilldelad användare vars LDAP-grupper inte matchar någon mappning", - "ldap_role_viewer": "Tittare", - "ldap_role_operator": "Operatör", - "ldap_role_admin": "Admin", - "ldap_group_role_map": "Grupp → Rollkarta", - "ldap_group_role_map_hint": "Mappa LDAP-grupper till BetterDesk-roller. Format: GroupDN=roll separerad av | (rör). Exempel: CN=Admins,DC=exempel,DC=com=admin|CN=Ops,DC=exempel,DC=com=operatör", - "ldap_test_connection": "Testa anslutningen", - "ldap_testing": "Testar...", - "ldap_test_success": "Anslutningen lyckades! LDAP-servern är tillgänglig och bindningsuppgifterna är giltiga.", - "ldap_test_failed": "Anslutning misslyckades", - "ldap_save": "Spara LDAP-konfiguration", - "ldap_saved": "LDAP-konfigurationen har sparats", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Konfigurera enkel inloggning via en OpenID Connect-leverantör (Azure AD, Okta, Google, Keycloak, etc.).", - "oidc_enabled": "Aktivera OIDC-autentisering", - "oidc_enabled_hint": "Tillåt användare att logga in med en extern identitetsleverantör", - "oidc_provider": "Identitetsleverantör", - "oidc_display_name": "Knappens visningsnamn", - "oidc_display_name_hint": "Text som visas på inloggningsknappen (t.ex. Azure AD, Okta)", - "oidc_issuer_url": "Utfärdare URL", - "oidc_issuer_url_hint": "OpenID Connect-utfärdare URL (upptäckten kommer att ske automatiskt)", - "oidc_client_id": "Klient-ID", - "oidc_client_secret": "Klienthemlighet", - "oidc_redirect_url": "Omdirigera URL (återuppringning)", - "oidc_redirect_url_hint": "Måste matcha exakt vad som är konfigurerat i din IdP. Vanligtvis: http(s)://din-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Omfattningar", - "oidc_use_pkce": "Använd PKCE (rekommenderas)", - "oidc_auto_discovery": "Automatisk upptäckt", - "oidc_allow_signup": "Skapa användare automatiskt", - "oidc_manual_endpoints": "Manuella slutpunkts-URL:er", - "oidc_authorization_url": "Auktoriseringsslutpunkt", - "oidc_token_url": "Token Endpoint", - "oidc_userinfo_url": "Användarinfo Slutpunkt", - "oidc_claim_mapping": "Gör anspråk på kartläggning", - "oidc_claim_username": "Användarnamnsanspråk", - "oidc_claim_email": "E-postanspråk", - "oidc_claim_name": "Visningsnamnsanspråk", - "oidc_claim_groups": "Gruppanspråk", - "oidc_role_mapping": "Rollkartläggning", - "oidc_default_role": "Standardroll", - "oidc_group_role_map": "Grupp → Rollmappning", - "oidc_group_role_map_hint": "En mappning per rad: gruppnamn=roll (t.ex. admins=admin, operators=operatör)", - "oidc_test_discovery": "Testa upptäckt", - "oidc_testing": "Testar...", - "oidc_test_success": "Upptäckten lyckades! Slutpunkter lösta.", - "oidc_test_failed": "Upptäckten misslyckades", - "oidc_issuer_required": "Utfärdaren URL krävs för att testa upptäckt", - "oidc_save": "Spara OIDC-konfiguration", - "oidc_saved": "OIDC-konfigurationen har sparats", - "connection_mode_title": "Anslutningsstrategi", - "connection_mode_desc": "Styr hur RustDesk-skrivbordsklienter ansluter.", - "connection_mode_label": "Standardanslutningsläge", - "connection_mode_p2p_first": "P2P först (rekommenderat) — försök direktanslutning, falla tillbaka till relä", - "connection_mode_relay_only": "Endast relä — alla sessioner använder reläservern", - "connection_mode_advanced": "Avancerade alternativ", - "connection_mode_fallback_ms": "P2P-reservtimeout (ms)", - "connection_mode_same_nat_relay": "Tvinga relä när båda peers delar samma offentliga IP (NAT hairpin)", - "connection_mode_network_hint": "P2P kräver UDP-port 21116 åtkomlig mellan klienter.", - "connection_mode_save": "Spara", - "connection_mode_save_restart": "Spara och starta om server", - "connection_mode_saved": "Anslutningsläge sparat", - "connection_mode_restart_started": "Serveromstart påbörjad", - "connection_mode_restart_failed": "Serveromstart misslyckades", - "connection_mode_not_configurable": "Anslutningsläget kan inte ändras på den här installationen", - "connection_mode_source_saved": "Sparad i", - "connection_mode_source_defaults": "Använder serverstandard (inte skrivbar från panelen)", - "connection_mode_runtime": "Aktiv server", - "advanced_title": "Konfigurationsfiler", - "advanced_desc": "Redigera serverkonfigurationsfiler direkt. Ändringar kan kräva omstart av tjänster.", - "advanced_warning": "Dessa filer innehåller hemligheter. Redigera bara om du vet vad du gör.", - "advanced_files_label": "Filer", - "advanced_select_file": "Välj en fil från listan för att visa eller redigera dess innehåll.", - "advanced_reload": "Ladda om", - "advanced_save": "Spara fil", - "advanced_apply_restart": "Tillämpa (starta om tjänst)", - "advanced_saved": "Konfigurationsfil sparad", - "advanced_restart_after_save": "Konfiguration sparad. Starta om den berörda tjänsten nu?", - "advanced_restart_confirm": "Starta om de relaterade BetterDesk-tjänsterna? Aktiva anslutningar kan avbrytas kortvarigt.", - "advanced_restart_console_confirm": "Starta om webkonsoltjänsten? Din webbläsarsession kopplas från kortvarigt.", - "advanced_restart_started": "Tjänsteomstart påbörjad", - "advanced_restart_done": "Konsolen omstartad — laddar om sida…", - "advanced_restart_polling": "Väntar på att konsolen ska komma online igen…", - "advanced_restart_timeout": "Omstart skickades men konsolen svarade inte i tid. Kontrollera loggar och ladda om manuellt.", - "advanced_restart_failed": "Tjänsteomstart misslyckades", - "advanced_save_confirm": "Spara ändringar i den här filen? En säkerhetskopia av föregående version skapas.", - "advanced_unsaved_confirm": "Du har osparade ändringar. Ignorera dem?", - "advanced_no_files": "Inga konfigurationsfiler tillgängliga på det här systemet.", - "advanced_readonly": "skrivskyddad", - "advanced_missing": "saknas", - "advanced_new_file": "Ny fil (skapas inte förrän du sparar)", - "advanced_new_file_hint": "Ny fil — lägg till innehåll och spara", - "advanced_backup_created": "säkerhetskopia skapad", - "advanced_error_unknown": "Okänd konfigurationsfil", - "advanced_error_not_found": "Filen finns inte", - "advanced_error_too_large": "Filen överskrider maximal redigerbar storlek (512 KB)", - "advanced_error_binary": "Binärfiler kan inte redigeras i panelen", - "advanced_error_invalid": "Ogiltigt filinnehåll", - "advanced_error_not_writable": "Filen är inte skrivbar av konsolprocessen", - "enrollment_title": "Enhetsregistrering (RustDesk)", - "enrollment_desc": "Styr hur nya RustDesk-klienter registreras.", - "enrollment_require_approval": "Kräv operatörsgodkännande (hanterat läge)", - "enrollment_require_approval_hint": "När aktiverat köas okända klienter tills en operatör godkänner dem.", - "enrollment_rich_approve": "Fullständigt godkännandeformulär (namn, mapp, grupper, taggar)", - "enrollment_rich_approve_hint": "Visar en detaljerad dialog vid godkännande av registreringsförfrågningar.", - "enrollment_tag_picker": "Välj taggar från befintliga enhetstaggar", - "enrollment_tag_picker_hint": "Låter operatörer välja taggar från listan som används på Enheter-sidan.", - "enrollment_open_requests": "Öppna registreringsförfrågningar", - "enrollment_pending_count": "{count} väntande registreringsförfrågan/förfrågningar", - "tab_advanced": "Avancerat", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Tjänst neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Fil", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (tjänstenhet)", - "advanced_file_systemd-server": "systemd: betterdesk-server (tjänstenhet)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfiguration)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", - "advanced_restart_none": "Für diese Fil ist kein Tjänstneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Inloggning misslyckades", - "action_logout": "Logout", - "action_password_change": "Lösenord har ändrats", - "action_2fa_enable": "2FA aktiverad", - "action_2fa_disable": "2FA inaktiverad", - "action_user_create": "Användare skapad", - "action_user_update": "Användare uppdaterad", - "action_user_delete": "Användare raderad", - "action_settings_update": "Inställningar uppdaterade", - "action_device_ban": "Enhet förbjuden", - "action_device_unban": "Enheten avstängd", - "action_device_delete": "Enhet raderad" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Konfigurationsalternativ", - "server_address": "Serveradress", - "server_address_hint": "Din servers domän eller IP-adress", - "custom_port": "Custom Port", - "port_hint": "Lämna tomt som standard (21116)", - "relay_server": "Reläserver", - "relay_placeholder": "Samma som ID-server om den är tom", - "relay_hint": "Valfritt: separat reläserveradress", - "include_key": "Inkludera offentlig nyckel i konfigurationen", - "generate": "Generera konfiguration", - "output": "Konfigurationsutgång", - "usage_title": "Anslutningsdetaljer", - "generated": "Konfiguration genererad", - "server_required": "Serveradress krävs", - "nothing_to_copy": "Skapa en konfiguration först", - "bundles_title": "Agent buntar", - "new_bundle": "Nytt paket", - "editor_title": "Paketredigerare", - "empty_state": "Välj ett paket till vänster eller skapa ett nytt för att börja.", - "loading": "Laddar...", - "no_bundles": "Inga paket ännu. Skapa din första.", - "bundle_name": "Paketens namn", - "bundle_name_hint": "Endast intern etikett – visas inte för slutanvändare.", - "short_link": "Kort nedladdningslänk", - "short_link_hint": "Används i den offentliga URL:en (/d/…). Endast små bokstäver, siffror och bindestreck (2–32 tecken). Fylls i automatiskt från paketnamn — förkorta för enklare delning (t.ex. acme).", - "branding_section": "Varumärke", - "company_name": "Företag/varumärke", - "short_text": "Kort beskrivning", - "contact_email": "Kontakt e-post", - "contact_phone": "Kontakttelefon", - "contact_url": "Kontakta webbplats", - "logo": "Logotyp", - "logo_hint": "PNG, JPEG, SVG eller WebP. Max 256 KB.", - "logo_clear": "Ta bort logotypen", - "primary_color": "Primär färg", - "accent_color": "Färg på rubriken", - "default_lang": "Standardspråk", - "allow_unattended": "Tillåt obevakad åtkomst", - "allow_unattended_hint": "När den är aktiverad visar agenten ett permanent lösenord för operatörsåtkomst.", - "save": "Spara paketet", - "revoke": "Återkalla", - "unrevoke": "Återaktivera", - "revoked": "Återkallad", - "preview_title": "Live förhandsvisning", - "preview_hint": "Ungefärligt utseende på slutanvändaragentfönstret.", - "preview_default_name": "BetterDesk-support", - "preview_status_ready": "Klar", - "preview_id": "Ditt ID", - "preview_password": "Lösenord", - "preview_chat": "Chatta med supporten", - "preview_settings": "Inställningar (endast administratör)", - "preview_quit": "Avsluta (endast admin)", - "download_link_title": "Ladda ner länk", - "download_link_hint": "Dela denna länk med slutanvändare. De kommer att se en nedladdningssida med varumärke. Gamla hex-länkar fungerar fortfarande efter att du ändrat den korta länken.", - "open_portal": "Öppna", - "created": "Paket skapat", - "saved": "Paketet har sparats", - "deleted": "Paketet har tagits bort", - "revoked_ok": "Paketet återkallat", - "unrevoked_ok": "Paketet har återaktiverats", - "link_copied": "Länken har kopierats till urklipp", - "copy_failed": "Det gick inte att kopiera automatiskt – kopiera manuellt", - "unsaved_confirm": "Vill du ignorera osparade ändringar?", - "confirm_revoke": "Återkalla detta paket? Nedladdningslänken slutar fungera.", - "confirm_unrevoke": "Vill du aktivera det här paketet igen?", - "confirm_delete": "Vill du ta bort det här paketet permanent? Detta kan inte ångras.", - "errors": { - "validation_failed": "Validering misslyckades", - "name_required": "Paketens namn krävs", - "company_name_required": "Företagsnamn krävs", - "logo_invalid": "Logotypen måste vara en giltig bildfil", - "logo_too_large": "Logotypen måste vara 256 KB eller mindre", - "logo_read_failed": "Det gick inte att läsa logotypfilen", - "primary_color_invalid": "Primärfärg måste vara ett hexadecimalt värde (t.ex. #2563eb)", - "accent_color_invalid": "Rubrikens färg måste vara ett hexadecimalt värde (t.ex. #1e293b)", - "contact_url_invalid": "Kontaktwebbplatsen måste vara en giltig URL", - "server_host_required": "Offentlig serveradress krävs", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Kort länk får bara innehålla små bokstäver, siffror och bindestreck", - "slug_too_short": "Kort länk måste vara minst 2 tecken", - "slug_too_long": "Kort länk får vara högst 32 tecken", - "slug_taken": "Denna korta länk används redan av ett annat paket" - }, - "legacy_title": "Klientkonfigurationsgenerator", - "connection_section": "Serveranslutning", - "server_host": "Offentlig serveradress", - "server_host_hint": "Domännamn eller offentlig IP där slutanvändare når din BetterDesk-server.", - "use_https": "Använd HTTPS / WSS (rekommenderat)", - "enrollment_per_device": "Per enhet — godkänn i Registreringar", - "builds_title": "Klientbyggen", - "rebuild_all": "Bygg om alla", - "rebuild_confirm": "Bygg om alla plattformsinstallationsprogram för det här paketet?", - "build_status_ready": "Klar", - "build_status_pending": "I kö", - "build_status_building": "Bygger", - "build_status_failed": "Misslyckad", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Enheteregistrierung", - "enrollment_token_pending": "Pro Enhet nach Genehmigung", - "enrollment_token_set": "Pro Enhet — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Enhete im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Klar-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} misslyckades", - "build_error_hint": "Byggfel", - "preview_help": "Begär hjälp" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ID-server", - "relay_server": "Reläserver", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Kontrollerar...", - "label": "Status", - "no_signal": "Ingen signal" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Anslut via Desktop Client", - "remote_viewer": "Fjärrvisning", - "web_remote": "Webbfjärråtkomst", - "details": "Details", - "edit": "Redigera", - "delete": "Ta bort", - "ban": "Ban", - "unban": "Unban", - "save": "Spara", - "cancel": "Avbryt", - "confirm": "Bekräfta", - "close": "Stäng", - "clear": "Clear", - "ok": "OK", - "saved": "Sparad framgångsrikt", - "back": "Tillbaka", - "create": "Skapa", - "dismiss": "Dismiss", - "view_all": "Visa alla", - "cdap_viewer": "CDAP Snapshot-visning", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s sedan", - "minutes_ago": "{count}m sedan", - "hours_ago": "{count}h sedan", - "days_ago": "{count}d sedan", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Användarhantering", - "subtitle": "Hantera konsolanvändare och behörigheter", - "add_user": "Add User", - "edit_user": "Redigera användare", - "username": "Användarnamn", - "username_placeholder": "Ange användarnamn", - "username_hint": "Endast 3-32 tecken, bokstäver, siffror och understreck", - "password": "Lösenord", - "password_placeholder": "Ange lösenord", - "password_hint": "Minst 8 tecken med blandade versaler, siffror och symboler", - "password_leave_empty": "Lämna tomt för att hålla dig uppdaterad", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Skapad", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Skapa användare", - "edit": "Redigera", - "reset_password": "Återställ lösenord", - "new_password": "Nytt lösenord", - "delete_title": "Ta bort användare", - "delete_confirm": "Är du säker på att du vill ta bort användaren {username}?", - "delete_success": "Användaren har raderats", - "user_created": "Användaren skapades", - "user_updated": "Användaren har uppdaterats", - "password_reset_success": "Lösenordsåterställning lyckades", - "empty_title": "Inga användare hittades", - "empty_text": "Lägg till användare för att hantera konsolåtkomst", - "fill_required": "Vänligen fyll i alla obligatoriska fält", - "invalid_username": "Användarnamn måste bestå av 3-32 tecken, bokstäver, siffror och endast understreck", - "username_exists": "Användarnamnet finns redan", - "weak_password": "Lösenordet är för svagt", - "password_too_short": "Lösenordet måste vara minst 8 tecken", - "invalid_role": "Ogiltig roll", - "cannot_demote_self": "Du kan inte degradera dig själv", - "cannot_delete_self": "Du kan inte radera ditt eget konto", - "last_admin": "Det går inte att ta bort den senaste administratören", - "admin_only": "Den här funktionen är endast tillgänglig för administratörer", - "password_required": "Lösenord krävs", - "not_found": "Användaren hittades inte", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Säkerhet bästa praxis", - "tip_strong_passwords": "Använd starka, unika lösenord för varje användare", - "tip_unique_accounts": "Skapa individuella konton för varje person", - "tip_viewer_role": "Använd tittarroll för användare som bara behöver läsbehörighet", - "tip_operator_role": "Använd operatörsroll för användare som behöver hantera enheter men inte användare", - "tip_audit_logs": "Granska granskningsloggar regelbundet för misstänkt aktivitet", - "role_pro": "Pro (endast API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Serveradministratör", - "role_global_admin": "Övergripande administratör", - "organizations": "Organisationer", - "user_organizations": "Organisationer för {username}", - "no_organizations": "Användaren är inte tilldelad någon organisation", - "org_removed": "Organisationsuppdraget har tagits bort", - "server_role_label": "Serverroll", - "server_role_hint": "Bestämmer vad användaren kan göra över hela konsolen (panelåtkomst, serverkonfiguration, granskning, etc.).", - "org_membership_section": "Organisationsmedlemskap", - "org_membership_hint": "En användare kan tillhöra flera organisationer. Organisationsrollen kontrollerar endast behörigheter inom den organisationen och är oberoende av serverrollen ovan.", - "column_organizations": "Organisationer", - "no_orgs_short": "—", - "org_count_one": "{count} organisation", - "org_count_many": "{count} organisationer", - "all_orgs_assigned": "Användaren är redan medlem i varje organisation.", - "user_groups": "Användargrupper", - "user_groups_hint": "Användargrupper kan användas för att ge åtkomst till utvalda enhetsgrupper.", - "loading_user_groups": "Laddar användargrupper...", - "no_user_groups": "Inga användargrupper tillgängliga", - "create_user_group": "Skapa grupp", - "edit_user_group": "Redigera användargrupp", - "delete_user_group": "Ta bort användargrupp", - "delete_user_group_confirm": "Ta bort användargrupp {name}? Medlemmar kommer att förlora åtkomst som beviljats ​​genom denna grupp.", - "user_group_created": "Användargrupp skapad", - "user_group_updated": "Användargruppen uppdaterad", - "user_group_deleted": "Användargrupp raderad", - "user_group_not_found": "Användargruppen hittades inte", - "group_name": "Gruppnamn", - "group_name_placeholder": "Operatörer", - "group_note": "Note", - "group_note_placeholder": "Valfri anmärkning", - "group_name_required": "Gruppnamn krävs", - "group_members_count": "{count} medlemmar", - "provider": "Leverantör", - "provider_local": "Lokal", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Hanterad av identitetsleverantör", - "provider_managed_hint": "Det här kontot hanteras av en extern identitetsleverantör (LDAP/AD eller SSO). Lösenordet och rollen styrs av leverantören." - }, - "folders": { - "title": "Folders", - "create": "Skapa mapp", - "edit": "Redigera mapp", - "delete": "Ta bort mapp", - "name": "Folder Name", - "name_placeholder": "Ange mappnamn", - "name_required": "Mappnamn krävs", - "name_too_long": "Mappnamnet är för långt (max 50 tecken)", - "color": "Color", - "icon": "Icon", - "not_found": "Mappen hittades inte", - "delete_confirm": "Är du säker på att du vill ta bort den här mappen? Enheter kommer att tas bort.", - "delete_success": "Mappen har raderats", - "created": "Mappen har skapats", - "updated": "Mappen har uppdaterats", - "no_devices_selected": "Inga enheter har valts", - "devices_moved": "Enheter har flyttats", - "device_assigned": "Enhet tilldelad mapp", - "unassigned": "Unassigned", - "all_devices": "Alla enheter", - "drag_hint": "Dra enheter till mappar för att organisera dem", - "move_to": "Flytta till", - "toggle_sidebar": "Växla sidofältet" - }, + "no_groups": "Inga grupper än", + "manual_groups": "Manuella grupper", + "dynamic_memberships": "Dynamiska medlemskap", + "group_allowed_user_groups": "Tillåtna användargrupper", + "group_allowed_user_groups_hint": "Användare i valda användargrupper kan komma åt den här enhetsgruppen.", + "no_user_groups": "Inga användargrupper", + "edit_group": "Redigera grupp", + "delete_group": "Ta bort grupp", + "delete_group_confirm": "Ta bort enhetsgrupp {name}?", + "group_deleted": "Enhetsgruppen har tagits bort", + "folder_group_readonly": "Mappstödda grupper hanteras från mappar.", + "manage_user_groups": "Hantera användargrupper", + "restore_failed": "Enhet konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Klienten kontaktade API:et nyligen men är inte registrerad på signalservern (UDP :21116). Starta om klienten efter servermigrering.", + "per_page": "Per sida" + }, + "keys": { + "title": "Servernycklar", + "subtitle": "Offentlig nyckel och konfiguration för RustDesk-klienter", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Serverinformation", + "download": "Ladda ner nyckel", + "show_qr": "Show QR", + "qr_hint": "Skanna den här QR-koden med RustDesk mobilapp", + "no_key": "Ingen offentlig nyckel hittades", + "no_key_to_copy": "Ingen nyckel att kopiera", + "no_qr": "QR-koden är inte tillgänglig", + "download_success": "Nyckelfil nedladdad", + "not_found": "Nyckel hittades inte", + "api_not_found": "API-nyckeln hittades inte" + }, + "settings": { + "title": "Inställningar", + "subtitle": "Konsolkonfiguration och kontoinställningar", + "tab_general": "General", + "tab_server": "Serverinställningar", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Språk", + "change_password": "Ändra lösenord", + "password_desc": "Uppdatera ditt kontolösenord", + "current_password": "Aktuellt lösenord", + "new_password": "Nytt lösenord", + "confirm_password": "Bekräfta lösenord", + "save_password": "Uppdatera lösenord", + "password_changed": "Lösenordet har ändrats", + "fill_all_fields": "Vänligen fyll i alla fält", + "passwords_not_match": "Lösenord stämmer inte överens", + "password_requirements": "Lösenordskrav", + "password_requirements_not_met": "Lösenordet uppfyller inte kraven", + "req_length": "Minst 8 tecken", + "req_uppercase": "Minst en stor bokstav", + "req_lowercase": "Minst en liten bokstav", + "req_number": "Minst ett nummer", + "server_info": "Serverinformation", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Senaste konsolaktivitet", + "no_audit_logs": "Inga granskningsloggar hittades", + "backend_title": "Backend-konfiguration", + "backend_desc": "Välj vilken serverbackend som ska användas för enhetshantering och signal-/relätjänster.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Standard RustDesk signal- och reläservrar (hbbs + hbbr). Grundläggande HTTP API med begränsade slutpunkter.", + "backend_betterdesk_desc": "Förbättrad Go-baserad server med full REST API, JWT-autentisering, blockeringslista, taggar, WebSocket-händelser i realtid och revisionsloggning.", + "backend_feature_signal": "Signalserver (ID-registrering)", + "backend_feature_relay": "Reläserver (anslutningsrelä)", + "backend_feature_basic_api": "Grundläggande REST API", + "backend_feature_full_api": "Full REST API (34+ slutpunkter)", + "backend_feature_jwt": "JWT-autentisering & TOTP 2FA", + "backend_feature_blocklist": "Hantering av IP/ID-blocklistor", + "backend_feature_tags": "Enhetstaggar och gruppering", + "backend_feature_audit": "Granska händelseloggning", + "backend_feature_websocket": "Realtids WebSocket händelser", + "backend_connection": "Anslutning", + "backend_api_url": "API URL", + "backend_test": "Testa anslutningen", + "backend_testing": "Testar...", + "backend_save": "Använd Backend", + "backend_saved": "Serverns backend har ändrats. Enhetsdata kommer nu att hanteras av den nya backend.", + "backend_save_failed": "Det gick inte att byta serverbackend", + "backend_test_success": "Anslutningen lyckades! Servern är tillgänglig.", + "backend_test_failed": "Anslutning misslyckades. Servern går inte att nå.", + "backend_confirm_switch": "Är du säker på att du vill byta serverns backend? Detta kommer att ändra hur enheter hanteras.", + "backend_unreachable": "Kan inte byta: målservern går inte att nå. Starta servern först.", + "invalid_backend": "Ogiltigt val av backend. Välj 'rustdesk' eller 'betterdesk'.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Tvåfaktorsautentisering", + "totp_desc": "Lägg till ett extra lager av säkerhet med TOTP autentiseringsappar (Google Authenticator, Microsoft Authenticator, Authy, etc.)", + "totp_enabled": "2FA aktiverad", + "totp_enabled_desc": "Ditt konto är skyddat med tvåfaktorsautentisering.", + "totp_disabled": "2FA inte aktiverat", + "totp_disabled_desc": "Aktivera tvåfaktorsautentisering för ytterligare kontosäkerhet.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Installera en autentiseringsapp på din telefon", + "totp_step2": "Skanna QR-koden nedan", + "totp_step3": "Ange den 6-siffriga koden för att verifiera", + "totp_manual_key": "Manual key", + "totp_enter_code": "Ange verifieringskod", + "totp_verify_enable": "Verifiera och aktivera", + "totp_enabled_success": "Tvåfaktorsautentisering aktiverad!", + "totp_recovery_warning": "Spara dessa återställningskoder på ett säkert ställe. Varje kod kan endast användas en gång. Om du förlorar åtkomsten till din autentiseringsapp kan du använda dessa koder för att logga in.", + "totp_done": "Done", + "totp_disable_warning": "Om du inaktiverar tvåfaktorsautentisering blir ditt konto mindre säkert. Ange ditt lösenord för att bekräfta.", + "totp_disabled_success": "Tvåfaktorsautentisering har inaktiverats.", + "tutorials_title": "Handledningar och guider", + "tutorials_desc": "Styr guidade turer och hjälpöverlägg som visas på hela konsolen", + "tutorials_enabled": "Aktivera självstudier", + "tutorials_enabled_hint": "När den är inaktiverad startar inte självstudierna automatiskt och hjälpknappen kommer att döljas", + "tutorials_reset_hint": "Markera alla handledningar som osynliga så att de kan visas igen", + "tutorials_enabled_toast": "Handledningar aktiverade", + "tutorials_disabled_toast": "Handledningar inaktiverade", + "tutorials_reset_toast": "Alla tutorials har återställts", + "tab_auth": "Autentisering", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Konfigurera extern autentisering via LDAP eller Active Directory. Användare kommer att kunna logga in med sina domänuppgifter.", + "ldap_enabled": "Aktivera LDAP-autentisering", + "ldap_enabled_hint": "När det är aktiverat kan användare logga in med LDAP/AD-uppgifter. Lokala konton fungerar fortfarande som reserv.", + "ldap_connection": "Serveranslutning", + "ldap_host": "Värd", + "ldap_port": "Port", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Hoppa över TLS verifiering", + "ldap_timeout": "Timeout för anslutning (s)", + "ldap_timeout_hint": "Sekunder att vänta på LDAP-serversvar", + "ldap_bind_mode": "Bindläge", + "ldap_direct_bind": "Direktbindning", + "ldap_direct_bind_hint": "Bind direkt med en DN-mall istället för att använda ett tjänstekonto för att söka.", + "ldap_bind_dn": "Bind DN (tjänstkonto)", + "ldap_bind_dn_hint": "Distinguished Name på ett skrivskyddat tjänstkonto som används för att söka efter användare.", + "ldap_bind_password": "Bind lösenord", + "ldap_base_dn": "Bas DN", + "ldap_base_dn_hint": "Sökbas för att hitta användare, t.ex. dc=exempel,dc=com", + "ldap_user_filter": "Användarfilter", + "ldap_user_filter_hint": "LDAP filter för att hitta användare. Använd {{username}} som platshållare. Standard: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Direct Bind DN Mall", + "ldap_direct_bind_dn_hint": "DN-mall för direktbindning. Använd {{username}} som platshållare, t.ex. uid={{username}},ou=användare,dc=exempel,dc=com", + "ldap_user_attrs": "Användarattribut", + "ldap_attr_id": "Användarnamn Attribut", + "ldap_attr_email": "E-postattribut", + "ldap_attr_name": "Visningsnamnattribut", + "ldap_group_mapping": "Grupp → Rollmappning", + "ldap_group_base_dn": "Grupp Bas DN", + "ldap_group_base_dn_hint": "Lämna tomt för att använda huvudbas-DN", + "ldap_group_filter": "Gruppfilter", + "ldap_group_attr_name": "Attribut för gruppnamn", + "ldap_default_role": "Standardroll", + "ldap_default_role_hint": "Roll tilldelad användare vars LDAP-grupper inte matchar någon mappning", + "ldap_role_viewer": "Tittare", + "ldap_role_operator": "Operatör", + "ldap_role_admin": "Admin", + "ldap_group_role_map": "Grupp → Rollkarta", + "ldap_group_role_map_hint": "Mappa LDAP-grupper till BetterDesk-roller. Format: GroupDN=roll separerad av | (rör). Exempel: CN=Admins,DC=exempel,DC=com=admin|CN=Ops,DC=exempel,DC=com=operatör", + "ldap_test_connection": "Testa anslutningen", + "ldap_testing": "Testar...", + "ldap_test_success": "Anslutningen lyckades! LDAP-servern är tillgänglig och bindningsuppgifterna är giltiga.", + "ldap_test_failed": "Anslutning misslyckades", + "ldap_save": "Spara LDAP-konfiguration", + "ldap_saved": "LDAP-konfigurationen har sparats", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Konfigurera enkel inloggning via en OpenID Connect-leverantör (Azure AD, Okta, Google, Keycloak, etc.).", + "oidc_enabled": "Aktivera OIDC-autentisering", + "oidc_enabled_hint": "Tillåt användare att logga in med en extern identitetsleverantör", + "oidc_provider": "Identitetsleverantör", + "oidc_display_name": "Knappens visningsnamn", + "oidc_display_name_hint": "Text som visas på inloggningsknappen (t.ex. Azure AD, Okta)", + "oidc_issuer_url": "Utfärdare URL", + "oidc_issuer_url_hint": "OpenID Connect-utfärdare URL (upptäckten kommer att ske automatiskt)", + "oidc_client_id": "Klient-ID", + "oidc_client_secret": "Klienthemlighet", + "oidc_redirect_url": "Omdirigera URL (återuppringning)", + "oidc_redirect_url_hint": "Måste matcha exakt vad som är konfigurerat i din IdP. Vanligtvis: http(s)://din-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Omfattningar", + "oidc_use_pkce": "Använd PKCE (rekommenderas)", + "oidc_auto_discovery": "Automatisk upptäckt", + "oidc_allow_signup": "Skapa användare automatiskt", + "oidc_manual_endpoints": "Manuella slutpunkts-URL:er", + "oidc_authorization_url": "Auktoriseringsslutpunkt", + "oidc_token_url": "Token Endpoint", + "oidc_userinfo_url": "Användarinfo Slutpunkt", + "oidc_claim_mapping": "Gör anspråk på kartläggning", + "oidc_claim_username": "Användarnamnsanspråk", + "oidc_claim_email": "E-postanspråk", + "oidc_claim_name": "Visningsnamnsanspråk", + "oidc_claim_groups": "Gruppanspråk", + "oidc_role_mapping": "Rollkartläggning", + "oidc_default_role": "Standardroll", + "oidc_group_role_map": "Grupp → Rollmappning", + "oidc_group_role_map_hint": "En mappning per rad: gruppnamn=roll (t.ex. admins=admin, operators=operatör)", + "oidc_test_discovery": "Testa upptäckt", + "oidc_testing": "Testar...", + "oidc_test_success": "Upptäckten lyckades! Slutpunkter lösta.", + "oidc_test_failed": "Upptäckten misslyckades", + "oidc_issuer_required": "Utfärdaren URL krävs för att testa upptäckt", + "oidc_save": "Spara OIDC-konfiguration", + "oidc_saved": "OIDC-konfigurationen har sparats", + "connection_mode_title": "Anslutningsstrategi", + "connection_mode_desc": "Styr hur RustDesk-skrivbordsklienter ansluter.", + "connection_mode_label": "Standardanslutningsläge", + "connection_mode_p2p_first": "P2P först (rekommenderat) — försök direktanslutning, falla tillbaka till relä", + "connection_mode_relay_only": "Endast relä — alla sessioner använder reläservern", + "connection_mode_advanced": "Avancerade alternativ", + "connection_mode_fallback_ms": "P2P-reservtimeout (ms)", + "connection_mode_same_nat_relay": "Tvinga relä när båda peers delar samma offentliga IP (NAT hairpin)", + "connection_mode_network_hint": "P2P kräver UDP-port 21116 åtkomlig mellan klienter.", + "connection_mode_save": "Spara", + "connection_mode_save_restart": "Spara och starta om server", + "connection_mode_saved": "Anslutningsläge sparat", + "connection_mode_restart_started": "Serveromstart påbörjad", + "connection_mode_restart_failed": "Serveromstart misslyckades", + "connection_mode_not_configurable": "Anslutningsläget kan inte ändras på den här installationen", + "connection_mode_source_saved": "Sparad i", + "connection_mode_source_defaults": "Använder serverstandard (inte skrivbar från panelen)", + "connection_mode_runtime": "Aktiv server", + "advanced_title": "Konfigurationsfiler", + "advanced_desc": "Redigera serverkonfigurationsfiler direkt. Ändringar kan kräva omstart av tjänster.", + "advanced_warning": "Dessa filer innehåller hemligheter. Redigera bara om du vet vad du gör.", + "advanced_files_label": "Filer", + "advanced_select_file": "Välj en fil från listan för att visa eller redigera dess innehåll.", + "advanced_reload": "Ladda om", + "advanced_save": "Spara fil", + "advanced_apply_restart": "Tillämpa (starta om tjänst)", + "advanced_saved": "Konfigurationsfil sparad", + "advanced_restart_after_save": "Konfiguration sparad. Starta om den berörda tjänsten nu?", + "advanced_restart_confirm": "Starta om de relaterade BetterDesk-tjänsterna? Aktiva anslutningar kan avbrytas kortvarigt.", + "advanced_restart_console_confirm": "Starta om webkonsoltjänsten? Din webbläsarsession kopplas från kortvarigt.", + "advanced_restart_started": "Tjänsteomstart påbörjad", + "advanced_restart_done": "Konsolen omstartad — laddar om sida…", + "advanced_restart_polling": "Väntar på att konsolen ska komma online igen…", + "advanced_restart_timeout": "Omstart skickades men konsolen svarade inte i tid. Kontrollera loggar och ladda om manuellt.", + "advanced_restart_failed": "Tjänsteomstart misslyckades", + "advanced_save_confirm": "Spara ändringar i den här filen? En säkerhetskopia av föregående version skapas.", + "advanced_unsaved_confirm": "Du har osparade ändringar. Ignorera dem?", + "advanced_no_files": "Inga konfigurationsfiler tillgängliga på det här systemet.", + "advanced_readonly": "skrivskyddad", + "advanced_missing": "saknas", + "advanced_new_file": "Ny fil (skapas inte förrän du sparar)", + "advanced_new_file_hint": "Ny fil — lägg till innehåll och spara", + "advanced_backup_created": "säkerhetskopia skapad", + "advanced_error_unknown": "Okänd konfigurationsfil", + "advanced_error_not_found": "Filen finns inte", + "advanced_error_too_large": "Filen överskrider maximal redigerbar storlek (512 KB)", + "advanced_error_binary": "Binärfiler kan inte redigeras i panelen", + "advanced_error_invalid": "Ogiltigt filinnehåll", + "advanced_error_not_writable": "Filen är inte skrivbar av konsolprocessen", + "enrollment_title": "Enhetsregistrering (RustDesk)", + "enrollment_desc": "Styr hur nya RustDesk-klienter registreras.", + "enrollment_require_approval": "Kräv operatörsgodkännande (hanterat läge)", + "enrollment_require_approval_hint": "När aktiverat köas okända klienter tills en operatör godkänner dem.", + "enrollment_rich_approve": "Fullständigt godkännandeformulär (namn, mapp, grupper, taggar)", + "enrollment_rich_approve_hint": "Visar en detaljerad dialog vid godkännande av registreringsförfrågningar.", + "enrollment_tag_picker": "Välj taggar från befintliga enhetstaggar", + "enrollment_tag_picker_hint": "Låter operatörer välja taggar från listan som används på Enheter-sidan.", + "enrollment_open_requests": "Öppna registreringsförfrågningar", + "enrollment_pending_count": "{count} väntande registreringsförfrågan/förfrågningar", + "tab_advanced": "Avancerat", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Tjänst neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Fil", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (tjänstenhet)", + "advanced_file_systemd-server": "systemd: betterdesk-server (tjänstenhet)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisor-konfiguration)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrering)", + "advanced_restart_none": "Für diese Fil ist kein Tjänstneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Inloggning misslyckades", + "action_logout": "Logout", + "action_password_change": "Lösenord har ändrats", + "action_2fa_enable": "2FA aktiverad", + "action_2fa_disable": "2FA inaktiverad", + "action_user_create": "Användare skapad", + "action_user_update": "Användare uppdaterad", + "action_user_delete": "Användare raderad", + "action_settings_update": "Inställningar uppdaterade", + "action_device_ban": "Enhet förbjuden", + "action_device_unban": "Enheten avstängd", + "action_device_delete": "Enhet raderad" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidig funktion — agentpaketgeneratorn är under aktiv utveckling.", + "config_options": "Konfigurationsalternativ", + "server_address": "Serveradress", + "server_address_hint": "Din servers domän eller IP-adress", + "custom_port": "Custom Port", + "port_hint": "Lämna tomt som standard (21116)", + "relay_server": "Reläserver", + "relay_placeholder": "Samma som ID-server om den är tom", + "relay_hint": "Valfritt: separat reläserveradress", + "include_key": "Inkludera offentlig nyckel i konfigurationen", + "generate": "Generera konfiguration", + "output": "Konfigurationsutgång", + "usage_title": "Anslutningsdetaljer", + "generated": "Konfiguration genererad", + "server_required": "Serveradress krävs", + "nothing_to_copy": "Skapa en konfiguration först", + "bundles_title": "Agent buntar", + "new_bundle": "Nytt paket", + "editor_title": "Paketredigerare", + "empty_state": "Välj ett paket till vänster eller skapa ett nytt för att börja.", + "loading": "Laddar...", + "no_bundles": "Inga paket ännu. Skapa din första.", + "bundle_name": "Paketens namn", + "bundle_name_hint": "Endast intern etikett – visas inte för slutanvändare.", + "short_link": "Kort nedladdningslänk", + "short_link_hint": "Används i den offentliga URL:en (/d/…). Endast små bokstäver, siffror och bindestreck (2–32 tecken). Fylls i automatiskt från paketnamn — förkorta för enklare delning (t.ex. acme).", + "branding_section": "Varumärke", + "company_name": "Företag/varumärke", + "short_text": "Kort beskrivning", + "contact_email": "Kontakt e-post", + "contact_phone": "Kontakttelefon", + "contact_url": "Kontakta webbplats", + "logo": "Logotyp", + "logo_hint": "PNG, JPEG, SVG eller WebP. Max 256 KB.", + "logo_clear": "Ta bort logotypen", + "primary_color": "Primär färg", + "accent_color": "Färg på rubriken", + "default_lang": "Standardspråk", + "allow_unattended": "Tillåt obevakad åtkomst", + "allow_unattended_hint": "När den är aktiverad visar agenten ett permanent lösenord för operatörsåtkomst.", + "save": "Spara paketet", + "revoke": "Återkalla", + "unrevoke": "Återaktivera", + "revoked": "Återkallad", + "preview_title": "Live förhandsvisning", + "preview_hint": "Ungefärligt utseende på slutanvändaragentfönstret.", + "preview_default_name": "BetterDesk-support", + "preview_status_ready": "Klar", + "preview_id": "Ditt ID", + "preview_password": "Lösenord", + "preview_chat": "Chatta med supporten", + "preview_settings": "Inställningar (endast administratör)", + "preview_quit": "Avsluta (endast admin)", + "download_link_title": "Ladda ner länk", + "download_link_hint": "Dela denna länk med slutanvändare. De kommer att se en nedladdningssida med varumärke. Gamla hex-länkar fungerar fortfarande efter att du ändrat den korta länken.", + "open_portal": "Öppna", + "created": "Paket skapat", + "saved": "Paketet har sparats", + "deleted": "Paketet har tagits bort", + "revoked_ok": "Paketet återkallat", + "unrevoked_ok": "Paketet har återaktiverats", + "link_copied": "Länken har kopierats till urklipp", + "copy_failed": "Det gick inte att kopiera automatiskt – kopiera manuellt", + "unsaved_confirm": "Vill du ignorera osparade ändringar?", + "confirm_revoke": "Återkalla detta paket? Nedladdningslänken slutar fungera.", + "confirm_unrevoke": "Vill du aktivera det här paketet igen?", + "confirm_delete": "Vill du ta bort det här paketet permanent? Detta kan inte ångras.", "errors": { - "forbidden_title": "Åtkomst nekad", - "forbidden_message": "Du har inte behörighet att komma åt den här resursen.", - "not_found_title": "Sidan hittades inte", - "not_found_message": "Sidan du letar efter finns inte eller har flyttats.", - "server_error_title": "Serverfel", - "server_error_message": "Något gick fel. Försök igen senare.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Det gick inte att läsa in enheter", - "load_key_failed": "Det gick inte att ladda nyckeln", - "load_qr_failed": "Det gick inte att läsa in QR", - "load_audit_failed": "Det gick inte att läsa in granskningsloggen", - "load_users_failed": "Det gick inte att läsa in användare", - "load_folders_failed": "Det gick inte att läsa in mappar", - "download_failed": "Nedladdningen misslyckades", - "logout_failed": "Det gick inte att logga ut", - "password_change_failed": "Det gick inte att byta lösenord", - "language_change_failed": "Det gick inte att byta språk", - "ban_failed": "Det gick inte att blockera enheten", - "unban_failed": "Det gick inte att avblockera enheten", - "delete_failed": "Det gick inte att ta bort enheten", - "change_id_failed": "Det gick inte att ändra enhets-ID", - "bulk_delete_failed": "Det gick inte att ta bort enheter", - "sync_failed": "Det gick inte att synkronisera status", - "error": "Error", - "not_found": "Not found", - "server_error": "Serverfel", - "load_device_failed": "Det gick inte att ladda enheten", - "load_orgs_failed": "Det gick inte att läsa in organisationer" + "validation_failed": "Validering misslyckades", + "name_required": "Paketens namn krävs", + "company_name_required": "Företagsnamn krävs", + "logo_invalid": "Logotypen måste vara en giltig bildfil", + "logo_too_large": "Logotypen måste vara 256 KB eller mindre", + "logo_read_failed": "Det gick inte att läsa logotypfilen", + "primary_color_invalid": "Primärfärg måste vara ett hexadecimalt värde (t.ex. #2563eb)", + "accent_color_invalid": "Rubrikens färg måste vara ett hexadecimalt värde (t.ex. #1e293b)", + "contact_url_invalid": "Kontaktwebbplatsen måste vara en giltig URL", + "server_host_required": "Offentlig serveradress krävs", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Kort länk får bara innehålla små bokstäver, siffror och bindestreck", + "slug_too_short": "Kort länk måste vara minst 2 tecken", + "slug_too_long": "Kort länk får vara högst 32 tecken", + "slug_taken": "Denna korta länk används redan av ett annat paket" }, - "remote": { - "title": "Fjärrskrivbord", - "connecting": "Ansluter...", - "waiting_password": "Väntar på lösenord", - "authenticating": "Autentiserar...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Lösenord krävs", - "enter_password_for": "Ange lösenord för enheten", - "password_placeholder": "Enhetens lösenord", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Tillbaka till Enheter", - "fullscreen": "Fullscreen", - "toggle_audio": "Växla ljud", - "send_keys": "Skicka nycklar", - "scale_mode": "Scale Mode", - "scale_fit": "Anpassa till fönstret", - "scale_fill": "Fill Window", - "scale_original": "Originalstorlek (1:1)", - "scale_stretch": "Sträck för att fylla", - "actions": "Actions", - "lock_screen": "Låsskärm", - "restart_remote": "Starta om fjärrenheten", - "refresh_screen": "Uppdatera skärmen", - "clipboard_paste": "Klistra in från Urklipp", - "block_input": "Block Input", - "display_settings": "Displayinställningar", - "image_quality": "Bildkvalitet", - "quality_best": "Bäst (full kvalitet, 60 fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Visa fjärrmarkör", - "lock_after_session": "Lås efter session", - "privacy_mode": "Sekretessläge", - "disable_clipboard": "Inaktivera Urklipp", - "chat": "Chat", - "chat_placeholder": "Skriv ett meddelande...", - "record": "Inspelningsskärm", - "view_only": "Endast visning", - "pin_toolbar": "Fäst verktygsfält", - "monitors": "Monitors", - "select_monitor": "Välj Monitor", - "quality_speed": "Hastighet (låg kvalitet, 60 fps)", - "quality_quality": "Kvalitet (bäst, 30 fps)", - "recording_started": "Inspelningen startade", - "recording_stopped": "Inspelningen avbröts", - "download_recording": "Ladda ner inspelning", - "e2e_encrypted": "End-to-end krypterad", - "e2e_key_exchange": "Etablerar säker kanal...", - "confirm_restart": "Är du säker på att du vill starta om fjärrenheten?", - "webcodecs_not_supported": "Din webbläsare stöder inte WebCodecs API. Använd Chrome 94+ eller Edge 94+.", - "webcodecs_insecure_context": "WebCodecs inte tillgänglig över HTTP. Video använder reservprogramvara. För bästa prestanda, använd HTTPS.", - "webcodecs_fallback_active": "Programvaruvideoavkodare aktiv (begränsad prestanda)", - "click_to_start": "Klicka för att starta", - "autoplay_blocked": "Webbläsaren kräver användarinteraktion för att starta video- och ljuduppspelning.", - "start_playback": "Starta uppspelning", - "new_connection": "Ny anslutning", - "device_id_placeholder": "Ange enhets-ID", - "http_warning": "HTTP-läge: begränsat till H.264 mjukvaruavkodning (~15 FPS). Använd HTTPS för full prestanda (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Filöverföring", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Den här mappen är tom", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Överföringen misslyckades", - "file_show_hidden": "Visa dolda filer", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Ange mappnamn:", - "file_parent": "Föräldramapp", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Ange nytt namn:", - "file_delete_confirm": "Är du säker på att du vill ta bort det här objektet?", - "file_cancelled": "Överföringen avbruten", - "2fa_required": "2FA-verifiering krävs", - "2fa_hint": "Ange den sexsiffriga koden från din autentiseringsapp", - "2fa_invalid": "Ange en giltig 6-siffrig kod", - "verify": "Verify", - "use_cdap_fallback": "Använd CDAP viewer", - "cdap_fallback_hint": "Öppna den lättvikts JPEG-pollingvyn som använder bd-signal/CDAP istället för RustDesk-reläet. Användbart när peer är offline på reläet men nåbar via agenthanteringskanalen.", - "clipboard_empty": "Urklipp är tomt", - "clipboard_denied": "Urklippsåtkomst nekad. HTTPS krävs eller tillstånd har inte beviljats.", - "file_loading": "Laddar...", - "file_timeout": "Fjärrenheten svarade inte. Filöverföring kanske inte stöds eller är inaktiverad på fjärrmaskinen.", - "codec": "Video Codec", - "codec_auto": "Auto (rekommenderas)" + "legacy_title": "Klientkonfigurationsgenerator", + "connection_section": "Serveranslutning", + "server_host": "Offentlig serveradress", + "server_host_hint": "Domännamn eller offentlig IP där slutanvändare når din BetterDesk-server.", + "use_https": "Använd HTTPS / WSS (rekommenderat)", + "enrollment_per_device": "Per enhet — godkänn i Registreringar", + "builds_title": "Klientbyggen", + "rebuild_all": "Bygg om alla", + "rebuild_confirm": "Bygg om alla plattformsinstallationsprogram för det här paketet?", + "build_status_ready": "Klar", + "build_status_pending": "I kö", + "build_status_building": "Bygger", + "build_status_failed": "Misslyckad", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Enheteregistrierung", + "enrollment_token_pending": "Pro Enhet nach Genehmigung", + "enrollment_token_set": "Pro Enhet — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Enhete im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Klar-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} misslyckades", + "build_error_hint": "Byggfel", + "preview_help": "Begär hjälp" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ID-server", + "relay_server": "Reläserver", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Kontrollerar...", + "label": "Status", + "no_signal": "Ingen signal" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Anslut via Desktop Client", + "remote_viewer": "Fjärrvisning", + "web_remote": "Webbfjärråtkomst", + "details": "Details", + "edit": "Redigera", + "delete": "Ta bort", + "ban": "Ban", + "unban": "Unban", + "save": "Spara", + "cancel": "Avbryt", + "confirm": "Bekräfta", + "close": "Stäng", + "clear": "Clear", + "ok": "OK", + "saved": "Sparad framgångsrikt", + "back": "Tillbaka", + "create": "Skapa", + "dismiss": "Dismiss", + "view_all": "Visa alla", + "cdap_viewer": "CDAP Snapshot-visning", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s sedan", + "minutes_ago": "{count}m sedan", + "hours_ago": "{count}h sedan", + "days_ago": "{count}d sedan", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Användarhantering", + "subtitle": "Hantera konsolanvändare och behörigheter", + "add_user": "Add User", + "edit_user": "Redigera användare", + "username": "Användarnamn", + "username_placeholder": "Ange användarnamn", + "username_hint": "Endast 3-32 tecken, bokstäver, siffror och understreck", + "password": "Lösenord", + "password_placeholder": "Ange lösenord", + "password_hint": "Minst 8 tecken med blandade versaler, siffror och symboler", + "password_leave_empty": "Lämna tomt för att hålla dig uppdaterad", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Skapad", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Skapa användare", + "edit": "Redigera", + "reset_password": "Återställ lösenord", + "new_password": "Nytt lösenord", + "delete_title": "Ta bort användare", + "delete_confirm": "Är du säker på att du vill ta bort användaren {username}?", + "delete_success": "Användaren har raderats", + "user_created": "Användaren skapades", + "user_updated": "Användaren har uppdaterats", + "password_reset_success": "Lösenordsåterställning lyckades", + "empty_title": "Inga användare hittades", + "empty_text": "Lägg till användare för att hantera konsolåtkomst", + "fill_required": "Vänligen fyll i alla obligatoriska fält", + "invalid_username": "Användarnamn måste bestå av 3-32 tecken, bokstäver, siffror och endast understreck", + "username_exists": "Användarnamnet finns redan", + "weak_password": "Lösenordet är för svagt", + "password_too_short": "Lösenordet måste vara minst 8 tecken", + "invalid_role": "Ogiltig roll", + "cannot_demote_self": "Du kan inte degradera dig själv", + "cannot_delete_self": "Du kan inte radera ditt eget konto", + "last_admin": "Det går inte att ta bort den senaste administratören", + "admin_only": "Den här funktionen är endast tillgänglig för administratörer", + "password_required": "Lösenord krävs", + "not_found": "Användaren hittades inte", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Säkerhet bästa praxis", + "tip_strong_passwords": "Använd starka, unika lösenord för varje användare", + "tip_unique_accounts": "Skapa individuella konton för varje person", + "tip_viewer_role": "Använd tittarroll för användare som bara behöver läsbehörighet", + "tip_operator_role": "Använd operatörsroll för användare som behöver hantera enheter men inte användare", + "tip_audit_logs": "Granska granskningsloggar regelbundet för misstänkt aktivitet", + "role_pro": "Pro (endast API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Serveradministratör", + "role_global_admin": "Övergripande administratör", + "organizations": "Organisationer", + "user_organizations": "Organisationer för {username}", + "no_organizations": "Användaren är inte tilldelad någon organisation", + "org_removed": "Organisationsuppdraget har tagits bort", + "server_role_label": "Serverroll", + "server_role_hint": "Bestämmer vad användaren kan göra över hela konsolen (panelåtkomst, serverkonfiguration, granskning, etc.).", + "org_membership_section": "Organisationsmedlemskap", + "org_membership_hint": "En användare kan tillhöra flera organisationer. Organisationsrollen kontrollerar endast behörigheter inom den organisationen och är oberoende av serverrollen ovan.", + "column_organizations": "Organisationer", + "no_orgs_short": "—", + "org_count_one": "{count} organisation", + "org_count_many": "{count} organisationer", + "all_orgs_assigned": "Användaren är redan medlem i varje organisation.", + "user_groups": "Användargrupper", + "user_groups_hint": "Användargrupper kan användas för att ge åtkomst till utvalda enhetsgrupper.", + "loading_user_groups": "Laddar användargrupper...", + "no_user_groups": "Inga användargrupper tillgängliga", + "create_user_group": "Skapa grupp", + "edit_user_group": "Redigera användargrupp", + "delete_user_group": "Ta bort användargrupp", + "delete_user_group_confirm": "Ta bort användargrupp {name}? Medlemmar kommer att förlora åtkomst som beviljats ​​genom denna grupp.", + "user_group_created": "Användargrupp skapad", + "user_group_updated": "Användargruppen uppdaterad", + "user_group_deleted": "Användargrupp raderad", + "user_group_not_found": "Användargruppen hittades inte", + "group_name": "Gruppnamn", + "group_name_placeholder": "Operatörer", + "group_note": "Note", + "group_note_placeholder": "Valfri anmärkning", + "group_name_required": "Gruppnamn krävs", + "group_members_count": "{count} medlemmar", + "provider": "Leverantör", + "provider_local": "Lokal", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Hanterad av identitetsleverantör", + "provider_managed_hint": "Det här kontot hanteras av en extern identitetsleverantör (LDAP/AD eller SSO). Lösenordet och rollen styrs av leverantören." + }, + "folders": { + "title": "Folders", + "create": "Skapa mapp", + "edit": "Redigera mapp", + "delete": "Ta bort mapp", + "name": "Folder Name", + "name_placeholder": "Ange mappnamn", + "name_required": "Mappnamn krävs", + "name_too_long": "Mappnamnet är för långt (max 50 tecken)", + "color": "Color", + "icon": "Icon", + "not_found": "Mappen hittades inte", + "delete_confirm": "Är du säker på att du vill ta bort den här mappen? Enheter kommer att tas bort.", + "delete_success": "Mappen har raderats", + "created": "Mappen har skapats", + "updated": "Mappen har uppdaterats", + "no_devices_selected": "Inga enheter har valts", + "devices_moved": "Enheter har flyttats", + "device_assigned": "Enhet tilldelad mapp", + "unassigned": "Unassigned", + "all_devices": "Alla enheter", + "drag_hint": "Dra enheter till mappar för att organisera dem", + "move_to": "Flytta till", + "toggle_sidebar": "Växla sidofältet" + }, + "errors": { + "forbidden_title": "Åtkomst nekad", + "forbidden_message": "Du har inte behörighet att komma åt den här resursen.", + "not_found_title": "Sidan hittades inte", + "not_found_message": "Sidan du letar efter finns inte eller har flyttats.", + "server_error_title": "Serverfel", + "server_error_message": "Något gick fel. Försök igen senare.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Det gick inte att läsa in enheter", + "load_key_failed": "Det gick inte att ladda nyckeln", + "load_qr_failed": "Det gick inte att läsa in QR", + "load_audit_failed": "Det gick inte att läsa in granskningsloggen", + "load_users_failed": "Det gick inte att läsa in användare", + "load_folders_failed": "Det gick inte att läsa in mappar", + "download_failed": "Nedladdningen misslyckades", + "logout_failed": "Det gick inte att logga ut", + "password_change_failed": "Det gick inte att byta lösenord", + "language_change_failed": "Det gick inte att byta språk", + "ban_failed": "Det gick inte att blockera enheten", + "unban_failed": "Det gick inte att avblockera enheten", + "delete_failed": "Det gick inte att ta bort enheten", + "change_id_failed": "Det gick inte att ändra enhets-ID", + "bulk_delete_failed": "Det gick inte att ta bort enheter", + "sync_failed": "Det gick inte att synkronisera status", + "error": "Error", + "not_found": "Not found", + "server_error": "Serverfel", + "load_device_failed": "Det gick inte att ladda enheten", + "load_orgs_failed": "Det gick inte att läsa in organisationer" + }, + "remote": { + "title": "Fjärrskrivbord", + "connecting": "Ansluter...", + "waiting_password": "Väntar på lösenord", + "authenticating": "Autentiserar...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Lösenord krävs", + "enter_password_for": "Ange lösenord för enheten", + "password_placeholder": "Enhetens lösenord", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Tillbaka till Enheter", + "fullscreen": "Fullscreen", + "toggle_audio": "Växla ljud", + "send_keys": "Skicka nycklar", + "scale_mode": "Scale Mode", + "scale_fit": "Anpassa till fönstret", + "scale_fill": "Fill Window", + "scale_original": "Originalstorlek (1:1)", + "scale_stretch": "Sträck för att fylla", + "actions": "Actions", + "lock_screen": "Låsskärm", + "restart_remote": "Starta om fjärrenheten", + "refresh_screen": "Uppdatera skärmen", + "clipboard_paste": "Klistra in från Urklipp", + "block_input": "Block Input", + "display_settings": "Displayinställningar", + "image_quality": "Bildkvalitet", + "quality_best": "Bäst (full kvalitet, 60 fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Visa fjärrmarkör", + "lock_after_session": "Lås efter session", + "privacy_mode": "Sekretessläge", + "disable_clipboard": "Inaktivera Urklipp", + "chat": "Chat", + "chat_placeholder": "Skriv ett meddelande...", + "record": "Inspelningsskärm", + "view_only": "Endast visning", + "pin_toolbar": "Fäst verktygsfält", + "monitors": "Monitors", + "select_monitor": "Välj Monitor", + "quality_speed": "Hastighet (låg kvalitet, 60 fps)", + "quality_quality": "Kvalitet (bäst, 30 fps)", + "recording_started": "Inspelningen startade", + "recording_stopped": "Inspelningen avbröts", + "download_recording": "Ladda ner inspelning", + "e2e_encrypted": "End-to-end krypterad", + "e2e_key_exchange": "Etablerar säker kanal...", + "confirm_restart": "Är du säker på att du vill starta om fjärrenheten?", + "webcodecs_not_supported": "Din webbläsare stöder inte WebCodecs API. Använd Chrome 94+ eller Edge 94+.", + "webcodecs_insecure_context": "WebCodecs inte tillgänglig över HTTP. Video använder reservprogramvara. För bästa prestanda, använd HTTPS.", + "webcodecs_fallback_active": "Programvaruvideoavkodare aktiv (begränsad prestanda)", + "click_to_start": "Klicka för att starta", + "autoplay_blocked": "Webbläsaren kräver användarinteraktion för att starta video- och ljuduppspelning.", + "start_playback": "Starta uppspelning", + "new_connection": "Ny anslutning", + "device_id_placeholder": "Ange enhets-ID", + "http_warning": "HTTP-läge: begränsat till H.264 mjukvaruavkodning (~15 FPS). Använd HTTPS för full prestanda (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Filöverföring", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Den här mappen är tom", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Överföringen misslyckades", + "file_show_hidden": "Visa dolda filer", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Ange mappnamn:", + "file_parent": "Föräldramapp", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Ange nytt namn:", + "file_delete_confirm": "Är du säker på att du vill ta bort det här objektet?", + "file_cancelled": "Överföringen avbruten", + "2fa_required": "2FA-verifiering krävs", + "2fa_hint": "Ange den sexsiffriga koden från din autentiseringsapp", + "2fa_invalid": "Ange en giltig 6-siffrig kod", + "verify": "Verify", + "use_cdap_fallback": "Använd CDAP viewer", + "cdap_fallback_hint": "Öppna den lättvikts JPEG-pollingvyn som använder bd-signal/CDAP istället för RustDesk-reläet. Användbart när peer är offline på reläet men nåbar via agenthanteringskanalen.", + "clipboard_empty": "Urklipp är tomt", + "clipboard_denied": "Urklippsåtkomst nekad. HTTPS krävs eller tillstånd har inte beviljats.", + "file_loading": "Laddar...", + "file_timeout": "Fjärrenheten svarade inte. Filöverföring kanske inte stöds eller är inaktiverad på fjärrmaskinen.", + "codec": "Video Codec", + "codec_auto": "Auto (rekommenderas)" + }, + "branding": { + "identity_title": "Varumärkesidentitet", + "identity_desc": "Anpassa programmets namn och beskrivning som visas på konsolen", + "app_name": "Applikationsnamn", + "app_description": "Applikationsbeskrivning", + "logo_title": "Logotyp", + "logo_desc": "Välj hur din logotyp ska visas i sidofältet och inloggningssidan", + "logo_type_icon": "Material ikon", + "logo_type_svg": "SVG-kod", + "logo_type_image": "Bild-URL", + "logo_icon_name": "Ikonnamn", + "logo_icon_hint": "Ange ett materialikonnamn (t.ex. dns, moln, säkerhet). Se fonts.google.com/icons", + "logo_svg_code": "SVG-kod", + "logo_svg_hint": "Klistra in din SVG-märkning här. Stöder fullständiga -element med banor och stilar.", + "logo_image_upload": "Ladda upp bild", + "logo_image_choose": "Välj bildfil", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Ogiltig filtyp. Använd PNG, JPG, GIF, WebP eller SVG.", + "preview": "Förhandsvisning", + "colors_title": "Färgschema", + "colors_desc": "Anpassa färgpaletten. Lämna tomt om du vill använda standardinställningarna.", + "colors_backgrounds": "Bakgrunder", + "colors_text": "Text", + "colors_accents": "Accentfärger", + "colors_borders": "Kanter", + "import_export_title": "Importera / Exportera", + "import_export_desc": "Spara ditt tema som en JSON-fil eller importera en från en annan instans", + "export_theme": "Exportera tema", + "import_theme": "Importera tema", + "reset_defaults": "Återställ till standardvärden", + "save_branding": "Spara varumärke", + "saved": "Varumärke har sparats. Laddar om...", + "exported": "Tema exporterat", + "imported": "Temat har importerats. Laddar om...", + "import_error": "Det gick inte att importera tema. Ogiltigt filformat.", + "reset_confirm": "Är du säker på att du vill återställa varumärket till standardinställningarna? Detta kan inte ångras.", + "reset_success": "Varumärke återställs till standardinställningar. Laddar om...", + "logo_type_text": "Textlogotyp", + "logo_text": "Logotyptext", + "logo_text_hint": "Primär text som visas som ditt varumärkes logotyp", + "logo_text_accent": "Accenttext", + "logo_text_accent_hint": "Sekundär text under logotypen (t.ex. produktnamn eller slagord)", + "logo_upload_success": "Logotypen har laddats upp.", + "typography_title": "Typografi", + "typography_desc": "Välj typsnitt för rubriker och brödtext. Teckensnitt laddas ner till servern för självvärd.", + "font_heading": "Rubrik Teckensnitt", + "font_heading_hint": "Används för rubriker (H1–H6) och textlogotyp", + "font_body": "Brödtextteckensnitt", + "font_body_hint": "Används för brödtext och UI-element", + "font_search_placeholder": "Sök teckensnitt...", + "font_system_default": "Systemstandard", + "font_clear": "Rensa", + "font_cat_all": "Alla", + "font_downloaded_count": "teckensnitt som laddas ner på servern", + "powered_by": "Drivs av", + "background_title": "Bakgrund och utseende", + "background_desc": "Ange en konsolbakgrund, gradient eller enfärgad bakgrund.", + "bg_type_none": "Ingen", + "bg_type_color": "Enfärgad", + "bg_type_gradient": "Gradient", + "bg_type_image": "Bild", + "bg_color": "Bakgrundsfärg", + "bg_gradient": "CSS-gradient", + "bg_gradient_hint": "Valfri giltig CSS-gradient, t.ex. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Ladda upp bakgrundsbild", + "bg_image_choose": "Välj bildfil", + "bg_image_hint": "PNG, JPG, WebP eller GIF. Max 8 MB.", + "bg_image_url": "Bildsökväg / URL", + "bg_size": "Bildstorlek", + "bg_size_cover": "Täck (fyll skärm)", + "bg_size_contain": "Anpassa (fit)", + "bg_size_auto": "Automatiskt (original)", + "bg_blur": "Bakgrundsoskärpa", + "bg_overlay": "Mörkt överlager", + "bg_overlay_hint": "Mörknar bakgrunden för bättre textläsbarhet.", + "bg_image_too_large": "Bilden är för stor. Maximal storlek är 8 MB.", + "bg_image_invalid_type": "Ogiltig filtyp. Använd PNG, JPG, WebP eller GIF.", + "bg_upload_success": "Bakgrundsbild uppladdad.", + "login_title": "Inloggningssida", + "login_desc": "Anpassa inloggningsskärmens rubrik, underrubrik och bakgrund.", + "login_heading": "Inloggningsrubrik", + "login_heading_placeholder": "Välkommen tillbaka", + "login_subheading": "Inloggningsunderrubrik", + "login_subheading_placeholder": "Logga in på ditt konto", + "login_bg_inherit": "Samma som konsolen", + "agent_title": "Agent-nedladdningssida", + "agent_desc": "Anpassa den offentliga agent-nedladdningsportalen som visas för slutanvändare.", + "agent_show_powered": "Visa \"Drivs av BetterDesk\"", + "agent_show_powered_hint": "Visa BetterDesk-tillskrivningen i nedladdningsportalens sidfot.", + "footer_title": "Sidfot och upphovsrätt", + "footer_desc": "Lägg till en anpassad sidfotrad som visas på inloggningsskärmen och konsolsidofältet.", + "footer_text": "Sidfotstext", + "footer_text_hint": "t.ex. ett upphovsrättsmeddelande eller företagsnamn.", + "show_powered": "Visa \"BetterDesk\"-tillskrivning", + "show_powered_hint": "Visa BetterDesk-namn och version i inloggningssidfoten och sidofältet.", + "custom_css_title": "Anpassad CSS", + "custom_css_desc": "Avancerat: injicera anpassad CSS i konsolen och inloggningssidan.", + "custom_css_hint": "Använd med försiktighet. Max 20 000 tecken." + }, + "device_detail": { + "tab_overview": "Översikt", + "tab_tags": "Taggar och anteckningar", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Anslutning", + "section_manage": "Ledning", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Denna enhet är förbjuden", + "no_reason": "Ingen anledning anges", + "tags": "Tags", + "no_tags": "Inga taggar tilldelade den här enheten", + "tag_placeholder": "Ange ett taggnamn...", + "add_tag": "Add", + "tag_exists": "Den här taggen finns redan", + "notes": "Notes", + "notes_placeholder": "Lägg till anteckningar om den här enheten...", + "danger_zone": "Danger Zone", + "action_connect_web": "Anslut via webben", + "action_connect_web_desc": "Anslut via webbläsarens fjärrskrivbord", + "action_native_remote": "BetterDesk Fjärrkontroll", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Desktop-klient", + "action_connect_desktop_desc": "Öppna i skrivbordsklientappen", + "action_change_id_desc": "Ändra enhetsregistrerings-ID", + "action_ban_desc": "Blockera den här enheten från att ansluta", + "action_unban_desc": "Tillåt den här enheten att ansluta igen", + "action_delete_desc": "Ta bort den här enheten permanent", + "tab_hardware": "Hardware", + "tab_metrics": "Mätvärden", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kodningsmöjligheter", + "section_live_metrics": "Livemätvärden", + "section_current_usage": "Aktuell användning", + "section_usage_history": "Användningshistorik", + "os": "Operativsystem", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU-frekvens", + "total_memory": "Totalt minne", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Uppdaterad", + "device_groups": "Grupper", + "no_sysinfo": "Ingen hårdvaruinformation tillgänglig", + "no_sysinfo_hint": "Systeminformation kommer att visas efter att enheten har skickat en sysinfo-rapport", + "no_metrics": "Det finns ingen tillgänglig statistik", + "no_metrics_hint": "Mätvärden visas efter att enheten har skickat hjärtslagsrapporter", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Filer", + "agent_lazy_hint": "Klicka på den här fliken för att ladda livedata från agenten", + "agent_offline": "Agenten är offline", + "agent_timeout": "Agenten svarade inte i tid", + "agent_error": "Det gick inte att läsa in data från agenten", + "service_name": "Name", + "service_display": "Visningsnamn", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Maskin- och mjukvaruinventering av hanterade enheter", + "device_id": "Enhets-ID", + "hostname": "Hostname", + "os": "Operativsystem", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Totalt minne", + "memory_used": "Used Memory", + "memory_available": "Tillgängligt minne", + "memory_usage": "Minnesanvändning", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Nätverksgränssnitt", + "software": "Software", + "software_count": "Installerad programvara", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fysiska kärnor", + "logical_cores": "Logiska kärnor", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Tillgänglig", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-adresser", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Samlare som springer", + "collector_stopped": "Samlare stoppas", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Samlas kl", + "no_data": "Inga lagerdata tillgängliga ännu. Klicka på \"Samla nu\" för att samla systeminformation.", + "no_devices": "Inga enheter med lagerdata hittades", + "detail_title": "Detalj för enhetsinventering", + "telemetry": "Telemetry", + "view_detail": "Visa detalj", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Supportbiljetter och ärendespårning", + "create": "New Ticket", + "edit": "Redigera biljett", + "delete": "Ta bort biljett", + "detail": "Biljettdetaljer", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Tilldelad till", + "created_by": "Skapad av", + "device": "Enhet", + "sla_due": "SLA Due", + "created_at": "Skapad", + "updated_at": "Uppdaterad", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Öppna", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Skriv en kommentar...", + "internal_note": "Intern anteckning (inte synlig för slutanvändare)", + "attachments": "Attachments", + "upload_attachment": "Ladda upp bilaga", + "download": "Download", + "connect_device": "Anslut till enhet", + "no_tickets": "Inga biljetter hittades", + "no_comments": "Inga kommentarer än", + "no_attachments": "Inga bilagor", + "title_required": "Titel krävs", + "delete_confirm": "Är du säker på att du vill ta bort biljett #{id}?", + "delete_success": "Biljetten har raderats", + "created_success": "Biljetten har skapats", + "updated_success": "Biljetten har uppdaterats", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Sök biljetter...", + "assign_to_me": "Tilldela mig", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Öppna", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Aktivitetsövervakning", + "subtitle": "Applikationsanvändning och inaktiv spårning", + "device": "Enhet", + "hostname": "Hostname", + "sessions": "Sessioner", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Toppapplikationer", + "app_name": "Application", + "window_title": "Fönstertitel", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Sessionsräkning", + "total_active": "Totalt aktiv", + "total_idle": "Total Idle", + "detail_count": "Detaljposter", + "no_data": "Ingen aktivitetsdata tillgänglig", + "no_sessions": "Inga sessioner", + "filter_from": "Från", + "filter_to": "Till", + "filter_apply": "Använd filter", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Sök enheter...", + "date_range": "Date Range", + "device_id": "Enhets-ID", + "session_start": "Session start", + "session_end": "Session slut", + "user": "User", + "no_activity": "Ingen aktivitet registrerad", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Inga ansökningar" + }, + "automation": { + "title": "Automatisering", + "subtitle": "Varningsregler, fjärrkommandon och SMTP-konfiguration", + "rules": "Alert Rules", + "rules_subtitle": "Definiera villkor som utlöser aviseringar", + "alerts": "Varningshistorik", + "alerts_subtitle": "Visa och bekräfta utlösta varningar", + "commands": "Fjärrkommandon", + "commands_subtitle": "Skicka kommandon till fjärrenheter", + "smtp": "SMTP-konfiguration", + "smtp_subtitle": "Inställningar för e-postmeddelanden", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Skick Typ", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Målenhet", + "scope_all": "Alla enheter", + "cooldown": "Nedkylning (sekunder)", + "notify_emails": "E-postmeddelanden", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "create_rule": "Skapa regel", + "edit_rule": "Redigera regel", + "delete_rule": "Ta bort regel", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Utlöst vid", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Större än", + "op_gte": "Större eller lika", + "op_lt": "Less than", + "op_lte": "Mindre eller lika", + "op_eq": "Lika med", + "op_neq": "Inte lika med", + "type_cpu_usage": "CPU-användning (%)", + "type_memory_usage": "Minnesanvändning (%)", + "type_disk_usage": "Diskanvändning (%)", + "type_offline_duration": "Offlinelängd (er)", + "type_idle_duration": "Inaktiv varaktighet (s)", + "type_custom": "Custom", + "command_type": "Kommandotyp", + "command_payload": "Kommando/skript", + "command_result": "Result", + "command_status": "Status", + "send_command": "Skicka kommando", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Misslyckades", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Användarnamn", + "smtp_pass": "Lösenord", + "smtp_from": "Från Adress", + "smtp_test": "Testa anslutningen", + "smtp_save": "Spara konfiguration", + "smtp_test_success": "Anslutningen lyckades", + "smtp_test_failed": "Anslutning misslyckades", + "no_rules": "Inga varningsregler har konfigurerats", + "no_alerts": "Inga varningar har utlösts", + "no_commands": "Inga kommandon skickade", + "id_payload_required": "Enhets-ID och nyttolast krävs", + "no_commands_sent": "Inga kommandon har skickats ännu" + }, + "file_transfer": { + "title": "Filöverföring", + "transfers": "Transfers", + "new_transfer": "Ny överföring", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Filstorlek", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Enhet", + "initiated_by": "Initierad av", + "created_at": "Skapad på", + "cancel": "Avbryt", + "cancel_confirm": "Är du säker på att du vill avbryta den här överföringen?", + "download_file": "Ladda ner fil", + "browse_files": "Bläddra bland filer", + "select_file": "Välj Arkiv", + "select_device": "Välj Enhet", + "no_transfers": "Inga filöverföringar", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Misslyckades", + "status_cancelled": "Cancelled", + "bytes_transferred": "Byte överförda", + "chunks": "Chunks", + "transfer_started": "Överföringen startade", + "transfer_completed": "Överföringen slutförd", + "transfer_failed": "Överföringen misslyckades", + "transfer_cancelled": "Överföringen avbruten", + "max_file_size": "Maximal filstorlek: 4 GB", + "error_too_large": "Filen är för stor", + "error_no_device": "Ingen enhet har valts", + "error_no_file": "Ingen fil har valts" + }, + "network": { + "title": "Nätverksövervakning", + "targets": "Övervakning av mål", + "add_target": "Add Target", + "edit_target": "Redigera mål", + "delete_target": "Ta bort mål", + "delete_confirm": "Är du säker på att du vill ta bort det här målet?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Tidsgräns", + "interval": "Intervall (ms)", + "enabled": "Aktiverad", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Kontrollera historik", + "stats": "Statistics", + "total_targets": "Totala mål", + "targets_up": "Targets Up", + "targets_down": "Mål ner", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Nätverksverktyg", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Portkontroll", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Starta Monitor", + "monitor_stop": "Stoppa monitor", + "monitor_running": "Monitorn är igång", + "monitor_stopped": "Monitorn är stoppad", + "no_targets": "Inga övervakningsmål har konfigurerats", + "no_history": "Ingen kontrollhistorik tillgänglig", + "error_code": "Error", + "status_code": "HTTP Statuskod", + "search_targets": "Sök mål...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Kontrollera historik", + "name_host_required": "Namn och värd krävs", + "uptime": "Uptime", + "response_time": "Svarstid", + "avg_response": "Genomsnittlig respons", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Svarstid (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Senaste 24 timmarna", + "last_7d": "Last 7 days", + "last_30d": "Senaste 30 dagarna" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP-policyer", + "add_policy": "Lägg till policy", + "edit_policy": "Redigera policy", + "delete_policy": "Ta bort policy", + "delete_confirm": "Är du säker på att du vill ta bort den här policyn?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB-enhet", + "rule_type_file": "Filhantering", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Leverantörs-ID (VID)", + "pid": "Produkt-ID (PID)", + "serial": "Serienummer", + "device_class": "Enhetsklass", + "drive_type": "Drive Type", + "file_extensions": "Filtillägg", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Arkiv", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Inga DLP-policyer har konfigurerats", + "no_events": "Inga DLP-händelser registrerade", + "stats": "Statistics", + "total_events": "Totalt antal händelser", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Arkiv Händelser", + "device_id": "Enhets-ID", + "policy_matched": "Policy Matchad", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Totala policyer", + "active_policies": "Aktiva policyer", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Policyer", + "tab_events": "Events", + "search_policies": "Sökpolicyer...", + "create_policy": "Skapa policy", + "policy_type": "Policytyp", + "scope": "Scope", + "events_count": "Events", + "search_events": "Sök händelser...", + "event_time": "Event Time", + "device": "Enhet", + "policy": "Policyregel", + "detail": "Detail", + "scope_help": "Kommaseparerade enhets-ID:n, eller lämna tomt för alla", + "scope_all": "Alla enheter", + "active": "Active", + "type_file_type": "Filtyp", + "type_clipboard": "Urklipp", + "type_screen_share": "Skärmdelning", + "type_file_transfer": "Filöverföring", + "policy_desc": "Policybeskrivning", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Skapa rapport", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Enhetssammanfattning", + "type_activity": "Aktivitetssammanfattning", + "type_security": "Säkerhetsrapport", + "type_tickets": "Biljettrapport", + "type_network": "Nätverksrapport", + "type_inventory": "Inventeringsrapport", + "type_alerts": "Varningsrapport", + "saved": "Sparade rapporter", + "save_report": "Spara rapport", + "delete_report": "Ta bort rapport", + "delete_confirm": "Är du säker på att du vill ta bort den här sparade rapporten?", + "no_saved": "Inga sparade rapporter", + "report_title": "Title", + "created_by": "Skapad av", + "created_at": "Skapad på", + "filters": "Filters", + "date_from": "Från", + "date_to": "Till", + "device_filter": "Enhets-ID", + "generated_at": "Genererad kl", + "section": "Datasektion", + "total_devices": "Totalt antal enheter", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Plattformsdistribution", + "top_applications": "Toppapplikationer", + "total_active": "Total aktiv tid", + "total_idle": "Total vilotid", + "dlp_stats": "DLP-statistik", + "banned_devices": "Förbjudna enheter", + "audit_logs": "Audit Logs", + "ticket_stats": "Biljettstatistik", + "category_distribution": "Kategorifördelning", + "priority_distribution": "Prioritetsfördelning", + "targets_status": "Målstatus", + "os_distribution": "OS-distribution", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Senaste varningar", + "tab_generate": "Skapa rapport", + "tab_saved": "Sparade rapporter", + "type_devices_desc": "Översikt över alla enheter, plattformar och statusar", + "type_activity_desc": "Sammanfattning av appanvändning och vilotid", + "type_security_desc": "Förbjud åtgärder, DLP-händelser och revisionsloggar", + "type_tickets_desc": "Biljettstatistik och SLA-prestanda", + "type_network_desc": "Nätverksövervakningsmål och upptidsdata", + "type_inventory_desc": "Sammanfattning av hård- och mjukvaruinventering", + "type_alerts_desc": "Varningsregler och utlöst varningshistorik", + "report_name": "Report Name", + "format": "Format", + "save": "Spara rapport", + "preview": "Preview", + "download": "Download", + "delete_saved": "Ta bort rapport", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Redigera hyresgäst", + "delete_tenant": "Ta bort hyresgäst", + "delete_confirm": "Är du säker på att du vill ta bort den här klienten? Alla enhets- och användartilldelningar kommer att tas bort.", + "name": "Name", + "slug": "Slug", + "contact_name": "Kontaktnamn", + "contact_email": "Kontakt E-post", + "max_devices": "Max enheter", + "max_devices_hint": "0 = obegränsat", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Enheter", + "users": "Users", + "assign_device": "Tilldela enhet", + "assign_devices": "Tilldela enheter", + "remove_device": "Ta bort enhet", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Inga hyresgäster har konfigurerats", + "no_devices": "Inga enheter har tilldelats den här hyresgästen", + "no_users": "Inga användare har tilldelats den här hyresgästen", + "stats": "Hyresgäststatistik", + "total_devices": "Totalt antal enheter", + "online_devices": "Online-enheter", + "total_users": "Total Users", + "created_at": "Skapad på", + "updated_at": "Uppdaterad kl", + "slug_exists": "Hyresgästsnäcka finns redan", + "total_tenants": "Totala hyresgäster", + "active_tenants": "Aktiva hyresgäster", + "search": "Sök efter hyresgäster...", + "create_tenant": "Skapa hyresgäst", + "detail": "Hyresgäst detalj", + "contact": "Contact", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Sök efter enhets-ID, värdnamn eller IP...", + "no_registrations": "No registration requests", + "col_device_id": "Enhets-ID", + "col_hostname": "Värdnamn", + "col_platform": "Plattform", + "col_ip": "IP-adress", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Begärd", + "col_actions": "Åtgärder", + "status_pending": "Väntande", + "status_approved": "Godkänd", + "status_rejected": "Avvisad", + "approve_btn": "Godkänn", + "approve_confirm": "Är du säker på att du vill godkänna den här enheten? Den kommer att ta emot serveruppgifter och kan ansluta automatiskt.", + "approved_success": "Enhetsregistreringen har godkänts", + "reject_btn": "Avvisa", + "reject_title": "Avvisa registrering", + "reject_confirm": "Är du säker på att du vill avvisa denna registreringsförfrågan?", + "reject_reason": "Orsak (valfritt)", + "reject_reason_placeholder": "Ange skäl för avslaget...", + "rejected_success": "Enhetsregistrering avvisades", + "delete_confirm": "Är du säker på att du vill ta bort denna registreringspost?", + "deleted_success": "Registreringsposten raderad", + "enrollment_title": "Enhetsregistrering", + "enrollment_subtitle": "Väntande registreringsförfrågningar från BetterDesk stationära klienter", + "enrollment_empty": "Inga väntande registreringsförfrågningar", + "enrollment_approve": "Godkänn", + "enrollment_reject": "Avvisa", + "enrollment_display_name": "Visningsnamn", + "enrollment_display_name_placeholder": "Ange ett namn för den här enheten...", + "enrollment_sync_mode": "Synkroniseringsläge", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Enhetsregistrering godkänd", + "enrollment_rejected_success": "Enhetsregistrering avvisades", + "approve_title": "Godkänn enhet", + "field_name": "Enhetsnamn", + "field_name_placeholder": "Ange ett namn för den här enheten...", + "field_sync_mode": "Synkroniseringsläge", + "sync_standard": "Standard — balanserad synkronisering", + "sync_silent": "Tyst — minimal telemetri", + "sync_turbo": "Turbo — aggressiv synkronisering", + "field_tags": "Taggar", + "field_tags_placeholder": "Kommaseparerade taggar (t.ex. kontor, bärbar)...", + "field_tags_existing": "Befintliga taggar", + "field_tag_add_placeholder": "Lägg till en ny tagg...", + "field_tag_add_btn": "Lägg till", + "field_groups": "Enhetsgrupper", + "field_folder": "Mapp", + "field_folder_none": "Ingen mapp", + "reject_ban_option": "Blockera den här enheten", + "reject_ban_hint": "Enheten blockeras och kan inte skicka nya registreringsförfrågningar.", + "banner_open_mode": "Registrering är öppen — nya RustDesk-klienter registreras utan operatörsgodkännande.", + "banner_locked_mode": "Registrering är låst — endast tokenbaserade enheter kan registreras.", + "enrollment_settings_link": "Registreringsinställningar" + }, + "backup": { + "title": "Säkerhetskopia", + "desc": "Ladda ner en fullständig säkerhetskopia av din konsolkonfiguration, användare, grupper och inställningar. Go server peer-data ingår när BetterDesk backend är aktiv.", + "restore_title": "Återställ", + "restore_desc": "Ladda upp en tidigare nedladdad säkerhetskopia för att återställa konsolkonfigurationen. Välj vilka avsnitt som ska återställas nedan.", + "stat_users": "Användare", + "stat_settings": "Inställningar", + "stat_folders": "Mappar", + "stat_groups": "Grupper", + "stat_strategies": "Strategier", + "stat_backend": "Backend", + "download": "Ladda ner säkerhetskopia", + "creating": "Skapar säkerhetskopia...", + "download_success": "Säkerhetskopieringen har laddats ned", + "upload": "Ladda upp säkerhetskopia", + "restore_confirm": "Är du säker på att du vill återställa från denna säkerhetskopia? Valda avsnitt kommer att skrivas över.", + "restore_success": "Säkerhetskopieringen har återställts. Vissa ändringar kan kräva att sidan laddas om.", + "restored": "Återställd", + "skipped": "Hoppades över", + "backup_date": "Säkerhetskopieringsdatum", + "opt_settings": "Konsolinställningar", + "opt_branding": "Varumärke / Tema", + "opt_folders": "Enhetsmappar", + "opt_groups": "Användar- och enhetsgrupper", + "opt_addressbooks": "Adressböcker", + "opt_users": "Användarkonton", + "opt_users_warning": "Destruktivt: ersätter ALLA användarkonton med säkerhetskopieringsdata. Du kan vara utloggad.", + "no_file": "Ingen säkerhetskopia har valts", + "invalid_json": "Ogiltig säkerhetskopia: ogiltig JSON", + "invalid_format": "Ogiltig säkerhetskopia: inte en BetterDesk säkerhetskopia", + "stat_database": "Databasmotor", + "stat_keys": "Servernycklar inkluderade", + "stat_env": "Miljöfil", + "stat_uploads": "Varumärkesfiler", + "restart_required": "Vissa återställda komponenter (nycklar / .env / Go-databas) kräver tjänsteomstart.", + "security_warning": "Den här säkerhetskopian innehåller hemligheter. Förvara den säkert och dela den aldrig.", + "restore_warning": "Återställning av hemligheter eller Go-serverdatabasen skriver över serveridentiteten och kräver tjänsteomstart.", + "opt_database": "Databas (alla tabeller)", + "opt_database_hint": "Återimporterar alla konsoldata. Ingen omstart krävs.", + "opt_uploads": "Varumärkesfiler", + "opt_uploads_hint": "Logotyper och uppladdade bilder.", + "opt_secrets": "Servernycklar och hemligheter", + "opt_secrets_warning": "Skriver över Ed25519-serveridentitet, API-nyckel och sessionshemlighet. Kräver tjänsteomstart.", + "opt_env": "Miljöfil (.env)", + "opt_env_warning": "Skriver över SESSION_SECRET, API-nyckel, databas-DSN, portar och TLS-inställningar. Kräver tjänsteomstart.", + "opt_godb": "Go-serverdatabas", + "opt_godb_warning": "Skriver över Go-serverns SQLite-databas (endast SQLite-backend). Kräver tjänsteomstart." + }, + "cdap": { + "device_detail": "CDAP-enhet", + "loading": "Laddar...", + "loading_widgets": "Laddar enhetswidgetar...", + "load_error": "Det gick inte att läsa in enhetsdata", + "connected": "Ansluten", + "disconnected": "Frånkopplad", + "device_offline_msg": "Enheten är för närvarande offline. Widgetvärden kan vara inaktuella.", + "no_widgets": "Inga widgets tillgängliga", + "no_widgets_desc": "Den här enheten har inte registrerat ett CDAP-manifest med widgetdefinitioner.", + "command_log": "Kommandologg", + "clear_log": "Rensa logg", + "confirm_command": "Bekräfta kommando", + "select_option": "Välj", + "cdap_status": "CDAP-status", + "cdap_enabled": "CDAP aktiverad", + "cdap_disabled": "CDAP inaktiverad", + "cdap_devices": "CDAP-enheter", + "cdap_connections": "Aktiva anslutningar", + "send_command": "Skicka kommando", + "command_sent": "Kommandot har skickats", + "command_failed": "Det gick inte att skicka kommandot", + "devices_title": "CDAP-enheter", + "devices_subtitle": "Anslutna enheter via Custom Device Application Protocol", + "stat_connected": "Ansluten", + "stat_port": "Port", + "search_devices": "Sök enheter...", + "no_devices": "Inga enheter anslutna", + "no_devices_desc": "Inga CDAP-enheter är för närvarande anslutna. Enheter kommer att visas här när de ansluter till gatewayen.", + "gateway_disabled": "CDAP Gateway inaktiverad", + "gateway_disabled_desc": "Aktivera CDAP-gatewayen genom att ställa in CDAP_ENABLED=true i serverkonfigurationen.", + "gateway_active": "Aktiv", + "toggle_enable": "Aktivera CDAP", + "toggle_disable": "Inaktivera CDAP", + "enabled_restart": "CDAP aktiverad. Serverns omstart krävs för att tillämpa ändringar.", + "disabled_restart": "CDAP inaktiverad. Serverns omstart krävs för att tillämpa ändringar.", + "widgets": "CDAP-kontrollfält", + "type_all": "Alla", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS-agent", + "type_network": "Nätverk", + "type_camera": "Kamera", + "type_custom": "Anpassad", + "active_alerts": "Aktiva varningar", + "alert_fired": "Varning utlöst", + "alert_cleared": "Varningen raderades", + "no_alerts": "Inga aktiva varningar", + "connect_terminal": "Anslut terminal", + "table_search": "Sök...", + "just_now": "Just nu", + "terminal_connecting": "Ansluter till enheten...", + "terminal_disconnected": "Frånkopplad", + "terminal_error": "Terminalanslutningen misslyckades", + "linked_devices": "Länkade enheter", + "link_device": "Länka enhet", + "unlink_device": "Avlänka", + "no_linked_devices": "Inga länkade enheter", + "unlink_confirm": "Är du säker på att du vill ta bort länken till den här enheten?", + "link_prompt": "Ange Peer ID för att länka till den här enheten:", + "connect_desktop": "Anslut skrivbordet", + "connect_video": "Anslut Stream", + "connect_files": "Bläddra bland filer", + "connect_audio": "Anslut ljud", + "upload_file": "Ladda upp", + "desktop_connecting": "Ansluter...", + "video_connecting": "Ansluter...", + "files_connecting": "Ansluter...", + "audio_connecting": "Ansluter...", + "audio_streaming": "Strömmar", + "clipboard_in": "Urklipp mottagen", + "clipboard_out": "Urklipp har skickats", + "monitor_select": "Välj Monitor", + "keyframe_request": "Begär Keyframe", + "quality_auto": "Autokvalitet" + }, + "desktop": { + "switch_mode": "Skrivbordsläge", + "console_mode": "Konsolläge", + "loading": "Laddar...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Stäng", + "widgets_mode": "Kontrollfältsläge", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Lägg till widget", + "remove_widget": "Ta bort widget", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Konfigurera", + "search_widgets": "Sök widgets...", + "cat_monitoring": "Monitoring", + "cat_devices": "Enheter", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Skriv anteckningar här...", + "search_placeholder": "Sök efter enheter, sidor, inställningar...", + "search_pages": "Pages", + "search_devices": "Enheter", + "search_no_results": "No results", + "exit_desktop": "Avsluta skrivbordsläge", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Enhetsstatus", + "widget_server_health": "Server info", + "widget_system_stats": "Enhetsmätare", + "widget_device_list": "Enhetslista", + "widget_quick_actions": "Snabba åtgärder", + "widget_recent_activity": "Senaste aktivitet", + "widget_notes": "Notes", + "widget_network_monitor": "Nätverksövervakning", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP-enheter", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Enhetsrutnät", + "widget_multi_gauge": "Servermätare", + "widget_weekly_chart": "Veckoaktivitet", + "widget_quick_controls": "Snabbkontroller", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Anslutningsstatistik", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Användarsessioner", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Inga enheter", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Öppna", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Ställ in URL i config", + "label_server_uptime": "Serverns upptid", + "label_merged_info": "Sammanfogad till Server Info-widget", + "label_with_notes": "Med anteckningar", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Totalt antal enheter", + "label_throughput": "Throughput", + "label_active_relays": "Aktiva reläer", + "label_total_relayed": "Totalt reläat", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Filtrera enheter...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Inga CDAP-enheter", + "action_add_widget": "Lägg till widget", + "label_merged_server_info": "Sammanfogad till Server Info-widget", + "wp_images": "Images", + "wp_colors": "Solida färger", + "wp_custom_color": "Anpassad färg", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Bakgrundsbilder är inte installerade på denna server.", + "wp_download_hint": "Placera PNG-bilder i katalogen public/wallpapers/ för att möjliggöra val av bakgrundsbild.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Processövervakare", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Databasstatistik", + "widget_docker_containers": "Docker Behållare", + "widget_shell_command": "Shell kommando", + "widget_device_map": "Enhetskarta", + "widget_remote_connect": "Fjärranslutning", + "label_no_online": "Inga onlineenheter", + "label_no_events": "Inga evenemang idag", + "label_event_title": "Händelsens titel:", + "label_no_data": "Inga data tillgängliga", + "label_download_speed": "Ladda ner Speed", + "label_latency": "Latency", + "label_server": "Serverinstans", + "label_run_test": "Run Test", + "label_testing": "Testar...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Inga containrar", + "label_docker_unavailable": "Docker inte tillgänglig", + "label_no_command": "Inget kommando konfigurerat", + "label_no_output": "Ingen utgång ännu", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Spara förinställning", + "label_load_preset": "Load Preset", + "label_preset_name": "Förinställt namn:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Automatiskt arrangera", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 kolumner (lika)", + "label_2col_wide": "2 kolumner (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widgetgrupp", + "ungroup_widgets": "Dela upp widgets", + "group_widgets": "Gruppera valda widgetar", + "snap_layouts": "Snap layouter", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Snäpp upp till vänster", + "snap_top_right": "Snäpp upp till höger", + "snap_bottom_left": "Snäpp nere till vänster", + "snap_bottom_right": "Snäpp nere till höger", + "aero_shake": "Skaka för att minimera andra", + "zone_resize": "Dra kantlinjen för att ändra storlek på zoner", + "zone_borders": "Dragbara zongränser", + "app_drawer": "Applications", + "search_apps": "Sök appar...", + "edit_shortcuts": "Redigera genvägar", + "widgets": "Kontrollfält", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Klicka var som helst eller tryck på en tangent för att logga in", + "username_placeholder": "Användarnamn", + "password_placeholder": "Lösenord", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Tvåfaktorsautentisering", + "totp_subtitle": "Ange den sexsiffriga koden från din autentiseringsapp", + "back_to_login": "Tillbaka till inloggning", + "fill_all_fields": "Vänligen fyll i alla fält", + "invalid_credentials": "Ogiltigt användarnamn eller lösenord", + "invalid_code": "Ogiltig verifieringskod", + "enter_6_digits": "Ange alla 6 siffrorna", + "network_error": "Network error — check your connection", + "session_expired": "Sessionen har löpt ut. Logga in igen." + }, + "tokens": { + "title": "Enhetstokens", + "subtitle": "Hantera registreringstokens för automatisk enhetsadministration", + "enrollment_mode": "Registreringsläge", + "mode_open": "Öppna", + "mode_open_desc": "Alla enheter kan registreras utan en token", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Totala tokens", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Sök tokens...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Bulk generera", + "create": "Skapa token", + "edit": "Redigera token", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Skapad", + "actions": "Actions", + "name_placeholder": "t.ex. Kontors-PC-batch", + "max_uses": "Max Uses", + "max_uses_hint": "0 = obegränsat", + "expires_in": "Expires In", + "no_expiration": "Inget utgångsdatum", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Valfri anmärkning om denna token...", + "count": "Count", + "count_range": "Antal tokens att generera (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Token skapad", + "tokens_generated": "Tokens genererade", + "copy_warning": "Kopiera token nu. Den kommer inte att visas igen.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Är du säker på att du vill återkalla denna token? Enheter som redan är registrerade hos den kommer inte att påverkas.", + "revoked_success": "Token har återkallats", + "no_tokens": "Inga tokens hittades", + "expired": "Expired", + "never": "Never", + "save": "Spara", + "cancel": "Avbryt", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Nästa", + "prev": "Previous", + "skip": "Skip", + "finish": "Avsluta", + "close": "Stäng", + "step_of": "{current} av {total}", + "console_sidebar_title": "Sidofält för navigering", + "console_sidebar_text": "Få tillgång till alla moduler härifrån. Klicka på valfri ikon för att navigera till det avsnittet. Sidofältet anpassar sig efter din skärmstorlek.", + "console_expand_title": "Expandera sidofältet", + "console_expand_text": "Klicka här för att expandera sidofältet och se fullständiga etiketter för alla navigeringsobjekt. Klicka igen för att komprimera.", + "console_search_title": "Snabbsökning", + "console_search_text": "Sök snabbt efter enheter, inställningar eller åtgärder. Tryck på Ctrl+K för kortkommando.", + "console_dashboard_title": "Instrumentbräda", + "console_dashboard_text": "Ditt centrala nav som visar serverstatus, onlineenheter och snabba åtgärder. Håll ett öga på viktiga mätvärden på ett ögonblick.", + "console_devices_title": "Enhetshantering", + "console_devices_text": "Visa, sök och hantera alla anslutna enheter. Filtrera efter status, tilldela taggar och konfigurera individuella enhetsinställningar.", + "console_settings_title": "Inställningar", + "console_settings_text": "Konfigurera serverbeteende, säkerhetsalternativ, varumärke och användarhantering. Anpassa BetterDesk för att passa dina behov.", + "console_desktop_title": "Skrivbordsläge", + "console_desktop_text": "Byt till skrivbordsläge för en arbetsyta med fönster med widgets. Perfekt för multi-tasking och övervakning av instrumentpaneler.", + "console_complete_title": "Du är redo!", + "console_complete_text": "Utforska sidofältskategorierna för att upptäcka alla funktioner. Klicka på hjälpikonen när som helst för att starta om den här guiden.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Det övre fältet visar klockan, snabbkontroller och åtkomst till applådan. Klicka på rutnätsikonen för att bläddra bland alla appar.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Öppna applådan för att söka och starta valfri konsolfunktion som ett flytande fönster. Appar är organiserade efter kategori.", + "desktop_widgets_title": "Kontrollfält", + "desktop_widgets_text": "Din anpassningsbara arbetsyta. Widgetar visar liveinformation och ger snabb åtkomst till funktioner. Dra för att ordna om.", + "desktop_add_widget_title": "Lägg till widgets", + "desktop_add_widget_text": "Klicka här för att bläddra bland tillgängliga widgets. Välj mellan övervakningsskärmar, enhetslistor, anteckningar och mer.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Öppna appar visas här. Klicka för att fokusera eller minimera fönster. Håll muspekaren över ikonerna för att se appetiketter.", + "desktop_snap_title": "Snap layouter", + "desktop_snap_text": "Dra fönster till skärmkanterna för att fästa dem på plats, eller håll muspekaren över maximera-knappen för layoutförinställningar. Prova Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Appar öppnas i dragbara fönster som kan ändras storlek. Minimera, maximera eller stäng från namnlisten. Windows lager ovanför widgets.", + "desktop_search_title": "Snabbsökning", + "desktop_search_text": "Sök bland enheter, sidor och inställningar. Tryck på Ctrl+K var som helst för att öppna sökningen direkt.", + "desktop_complete_title": "Skrivbordsläge redo!", + "desktop_complete_text": "Prova att öppna appar från lådan och ordna fönster sida vid sida. Använd widgetförinställningar för snabba instrumentpanelslayouter.", + "devices_folders_title": "Enhetsmappar", + "devices_folders_text": "Organisera enheter i mappar. Klicka på en mapp för att filtrera listan. Högerklicka för att byta namn eller ta bort.", + "devices_search_title": "Sök och filtrera", + "devices_search_text": "Sök efter ID, värdnamn eller plattform. Använd statuspiller för att endast visa online, offline eller alla enheter.", + "devices_table_title": "Enhetslista", + "devices_table_text": "Klicka på valfri enhetsrad för mer information. Använd kebabmenyn till höger för snabba åtgärder som att ansluta, redigera taggar eller ta bort.", + "devices_complete_title": "Enhetshantering redo!", + "devices_complete_text": "Dra enheter mellan mappar för att organisera dem. Dubbelklicka på en enhet för att öppna dess detaljpanel.", + "settings_tabs_title": "Inställningar Kategorier", + "settings_tabs_text": "Navigera mellan Allmänt, Säkerhet, Utseende och andra konfigurationssektioner.", + "settings_content_title": "Konfiguration", + "settings_content_text": "Varje avsnitt innehåller specifika server- och konsolinställningar. Ändringar sparas när du klickar på Spara.", + "settings_complete_title": "Inställningar Översikt", + "settings_complete_text": "Kontrollera säkerhetsinställningar för 2FA, API nycklar och användarhantering. Besök Appearance för att anpassa konsolens utseende.", + "help": "Hjälp & handledning", + "tour_console": "Konsoltur", + "tour_desktop": "Rundtur i skrivbordsläge", + "tour_devices": "Enhetsrundtur", + "tour_settings": "Inställningar rundtur", + "reset_all": "Återställ alla självstudier", + "tour_remote": "Fjärrtur", + "tour_organization": "Organisationsinställningar", + "tour_cdap": "CDAP Översikt", + "tour_chat": "Grunderna i chatten", + "remote_toolbar_title": "Fjärrverktygsfält", + "remote_toolbar_text": "Få åtkomst till skärmkontroller, klippbordssynkronisering, specialtangenter och kvalitetsinställningar från verktygsfältet. Växla helskärm med F11.", + "remote_canvas_title": "Fjärrdisplay", + "remote_canvas_text": "Detta är fjärrskärmen. Klicka inuti för att börja styra fjärrenheten. Mus- och tangentbordsinmatning vidarebefordras automatiskt.", + "remote_clipboard_title": "Synkronisera urklipp", + "remote_clipboard_text": "Kopiera och klistra in text mellan din dator och fjärrenheten. Använd Ctrl+C / Ctrl+V som vanligt medan du fokuserar på fjärrskärmen.", + "remote_complete_title": "Fjärrsession redo!", + "remote_complete_text": "Använd knapparna i verktygsfältet för specialtangenter (Ctrl+Alt+Del, PrintScreen) och bildskärmsväxling. Tryck på Escape eller klicka på Koppla från f��r att avsluta sessionen.", + "org_overview_title": "Organisationer", + "org_overview_text": "Organisationer låter dig gruppera användare, enheter och policyer. Varje organisation har sin egen administratör, operatörer och inställningar.", + "org_create_title": "Skapa organisation", + "org_create_text": "Klicka här för att skapa en ny organisation. Ange ett namn, snigel och valfri beskrivning. Du blir ägare till den nya organisationen.", + "org_members_title": "Hantera medlemmar", + "org_members_text": "Bjud in användare via e-post, tilldela roller (admin, operatör, användare) och hantera åtkomst. Medlemmar kan se enheter som tilldelats deras organisation.", + "org_devices_title": "Tilldela enheter", + "org_devices_text": "Lägg till enheter i organisationen. Enheter som tilldelas här kommer att ärva organisationens policyer och vara synliga för dess medlemmar.", + "org_policies_title": "Organisationspolicyer", + "org_policies_text": "Ställ in säkerhetspolicyer som lösenordskrav, sessionstimeout, 2FA-tillämpning och enhetsregistreringsregler för organisationen.", + "org_complete_title": "Organisationskonfigurationen är klar!", + "org_complete_text": "Bjud in ditt team och tilldela enheter för att börja använda organisationsstyrd hantering. Reglerna gäller automatiskt för alla medlemmar.", + "cdap_devices_title": "CDAP-enheter", + "cdap_devices_text": "Visa alla anslutna CDAP-enheter — IoT-sensorer, PLC:er, bryggor och anpassade agenter. Gröna indikatorer visar liveanslutninar.", + "cdap_widgets_title": "Widgetpanel", + "cdap_widgets_text": "Widgetar visar realtidsdata från enheter. Mätare, knappar, lysdioder, diagram — varje widgettyp visualiserar en annan typ av data.", + "cdap_commands_title": "Skicka kommandon", + "cdap_commands_text": "Interagera med enheter genom att skicka kommandon. Kommandologgen sparar historiken.", + "cdap_terminal_title": "Enhetsterminal", + "cdap_terminal_text": "Öppna en terminalsession till CDAP-agenter för avancerad diagnostik eller manuell konfiguration.", + "cdap_complete_title": "CDAP-översikt klar!", + "cdap_complete_text": "Utforska enhetswidgetar, skicka kommandon och använd terminal eller filbläddrare för djupare hantering.", + "chat_contacts_title": "Kontakter och grupper", + "chat_contacts_text": "Se dina kontakter och chattgrupper. Klicka på valfri kontakt för att öppna en konversation. Gröna prickar indikerar onlineanvändare.", + "chat_send_title": "Skicka meddelanden", + "chat_send_text": "Skriv ditt meddelande och tryck på Enter för att skicka. Meddelanden krypteras från början till slut när båda parter stöder E2E.", + "chat_file_title": "Dela filer", + "chat_file_text": "Klicka på bifogad fil för att dela filer. Filer är krypterade och kan vara upp till 50 MB.", + "chat_complete_title": "Chatt redo!", + "chat_complete_text": "Chatta med operatörer och slutanvändare i realtid. Skapa grupper för teamkommunikation. Alla meddelanden stöder läskvitton.", + "disable_tutorials": "Inaktivera självstudier", + "enable_tutorials": "Aktivera självstudier" + }, + "help_request": { + "title": "Hjälpförfrågningar", + "subtitle": "Hantera inkommande hjälpförfrågningar från skrivbordsklienter", + "new_request": "Ny hjälpbegäran", + "device": "Enhet", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Inga hjälpförfrågningar", + "notification": "Hjälpbegäran mottagen från", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organisationer", + "create": "Skapa organisation", + "edit": "Redigera organisation", + "detail": "Organisationsdetaljer", + "name": "Name", + "slug": "Slug (URL-säker)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Enheter", + "invitations": "Invitations", + "settings": "Inställningar", + "add_user": "Add User", + "assign_device": "Tilldela enhet", + "create_invitation": "Skapa inbjudan", + "delete_confirm": "Vill du ta bort den här organisationen? Detta tar bort alla associerade användare, enheter och inställningar.", + "no_orgs": "Inga organisationer än", + "no_orgs_hint": "Skapa din första organisation för att börja hantera enheter och användare.", + "connection_policy": "Anslutningspolicy", + "allow_file_transfer": "Tillåt filöverföring", + "allow_clipboard": "Tillåt Urklipp", + "max_session_duration": "Max sessionslängd (min)", + "role_owner": "Owner", + "role_admin": "Administratör", + "role_operator": "Operator", + "role_user": "Medlem", + "username": "Användarnamn", + "password": "Lösenord", + "display_name": "Visningsnamn", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Enhets-ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Tilldelad användare", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Inga användare i den här organisationen.", + "no_devices": "Inga enheter har tilldelats den här organisationen.", + "no_invitations": "Inga inbjudningar.", + "user_added": "User added", + "user_removed": "Användaren har tagits bort", + "user_updated": "Användarrollen uppdaterad", + "device_assigned": "Enhet tilldelad", + "device_unassigned": "Enheten har inte tilldelats", + "invitation_created": "Inbjudan skapad", + "settings_saved": "Inställningar sparade", + "org_deleted": "Organisation raderad", + "confirm_remove_user": "Vill du ta bort den här användaren från organisationen?", + "confirm_unassign_device": "Ta bort tilldelningen av den här enheten från organisationen?", + "confirm_delete_org": "Vill du ta bort den här organisationen och all tillhörande data?", + "edit_role": "Redigera roll", + "raw_settings": "Raw-inställningar", + "key": "Key", + "value": "Value", + "save": "Spara inställningar", + "policy_unattended": "Obevakad (omedelbar)", + "policy_attended": "Deltog (med bekräftelse)", + "policy_ask": "Always ask", + "expires_hours": "Utgångsdatum (timmar)", + "loading_failed": "Det gick inte att läsa in organisationsdata", + "name_slug_required": "Namn och snigel krävs", + "org_created": "Organisation skapad", + "org_updated": "Organisationen uppdaterad", + "create_new_user": "Skapa nytt", + "add_existing_user": "Lägg till befintliga", + "none_available": "none", + "select_user": "Välj användare", + "org_role": "Organisationsroll", + "link_user_hint": "Den valda användaren kommer att länkas till den här organisationen med deras serverkontouppgifter.", + "no_available_users": "Alla serveranvändare är redan länkade till denna organisation.", + "user_linked": "Användare länkad till organisation" + }, + "chat": { + "e2e_enabled": "End-to-end krypterad", + "e2e_establishing": "Etablerar säker kanal...", + "e2e_established": "Säker kanal etablerad", + "e2e_unsupported": "E2E-kryptering stöds inte i den här webbläsaren", + "typing_indicator": "skriver...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Arkiv", + "file_too_large": "Filen är för stor (max 50 MB)", + "file_encrypted": "Krypterad filöverföring", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Säkerhetsnycklar roterade", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Grupper", + "no_contacts": "Inga kontakter än", + "no_groups": "Inga grupper än", + "no_messages": "Inga meddelanden än", + "no_results": "Inga resultat hittades", + "select_conversation": "Välj en konversation för att börja chatta", + "type_message": "Skriv ett meddelande...", + "send": "Skicka", + "attach_file": "Bifoga fil", + "emoji": "Emoji", + "search_messages": "Sök meddelanden", + "create_group": "Skapa grupp", + "group_name": "Gruppnamn", + "group_members": "Medlemmar", + "cancel": "Avbryt", + "create": "Skapa", + "members": "medlemmar", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Sök kontakter och meddelanden", + "select_conversation_hint": "Välj en konversation för att visa meddelanden", + "info": "Info", + "group_name_placeholder": "Ange gruppnamn" + }, + "toast": { + "device_connected": "Enhet ansluten", + "device_disconnected": "Enheten frånkopplad", + "session_started": "Fjärrsession startade", + "session_ended": "Fjärrsessionen avslutades", + "file_upload_complete": "Filuppladdningen är klar", + "settings_saved": "Inställningar sparade", + "error_generic": "Ett fel uppstod", + "connection_lost": "Anslutning förlorad", + "reconnecting": "Återansluter..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Administratörsverktyg och diagnostiska verktyg", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Skicka", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Skriv in text...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Gå Server", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Kontrollera värdens tillgänglighet och latens", + "tcp_title": "TCP Portkontroll", + "tcp_desc": "Testa TCP-portanslutningen", + "ssl_title": "SSL-inspektör", + "ssl_desc": "Inspektera SSL/TLS-certifikatdetaljer", + "http_title": "HTTP Hälsokontroll", + "http_desc": "Verifiera HTTP slutpunktsstatus", + "dns_title": "DNS Lookup", + "dns_desc": "Lös värdnamn till IP-adress", + "whois_title": "DNS Records", + "whois_desc": "Fråga A, AAAA, MX, TXT, NS-poster", + "speed_title": "Speed Test", + "speed_desc": "Mät nedladdningsbandbredd", + "run_speed_test": "Kör hastighetstest", + "wol_title": "Wake-on-LAN", + "wol_desc": "Skicka magiskt paket för att väcka en enhet", + "wol_sent": "Magiskt paket skickat", + "hash_title": "Hashberäkning", + "hash_desc": "Generera kryptografiska hash", + "password_title": "Lösenordsgenerator", + "password_desc": "Skapa ett säkert slumpmässigt lösenord", + "jwt_title": "JWT Decoder", + "jwt_desc": "Avkoda och inspektera JSON webbtokens", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Koda eller avkoda Base64-data", + "url_title": "URL Encoder", + "url_desc": "Koda eller avkoda URL-komponenter", + "processes_title": "Processlista", + "processes_desc": "Visa pågående systemprocesser", + "disk_title": "Disk Usage", + "disk_desc": "Visa användningen av diskpartitionen", + "db_title": "Databasstatistik", + "db_desc": "Visa databastabellstatistik", + "docker_title": "Docker Behållare", + "docker_desc": "Visa körande Docker-behållare", + "logs_title": "Log Viewer", + "logs_desc": "Visa senaste loggutdata", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Gäller från", + "valid_to": "Gäller till", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Inga data tillgängliga", + "no_docker": "Inga Docker-behållare hittades eller Docker inte tillgänglig", + "no_logs": "Inga logglinjer tillgängliga" + }, + "policies": { + "title": "Organisationspolicyer", + "subtitle": "Hantera säkerhets-, anslutnings- och funktionspolicyer för dina organisationer", + "select_org": "Organisation", + "select_org_placeholder": "Välj en organisation...", + "select_org_first": "Välj en organisation för att visa policygranskningsloggen.", + "configured": "Konfigurerad", + "connection_title": "Anslutningspolicy", + "connection_desc": "Styr hur fjärrsessioner upprättas", + "connection_mode": "Anslutningsläge", + "mode_attended": "Deltog (kräver användargodkännande)", + "mode_unattended": "Obevakad (tillåt alltid)", + "mode_ask": "Fråga alltid", + "max_session": "Max sessionslängd (minuter)", + "idle_lock": "Timeout för tomgångslås (minuter)", + "wallpaper_policy": "Bakgrund under session", + "wallpaper_show": "Visa", + "wallpaper_hide_session": "Göm dig under sessionen", + "wallpaper_hide_always": "Dölj alltid", + "features_title": "Funktionspolicy", + "features_desc": "Aktivera eller inaktivera specifika funktioner för enheter", + "allow_file_transfer": "Tillåt filöverföring", + "allow_clipboard": "Tillåt Clipboard Sync", + "allow_audio": "Tillåt ljudströmning", + "allow_recording": "Tillåt sessionsinspelning", + "security_title": "Säkerhetspolicy", + "security_desc": "Genomför säkerhetskrav för organisationsenheter", + "require_2fa": "Kräv 2FA för obevakad åtkomst", + "password_min_length": "Minsta lösenordslängd", + "password_require_special": "Kräv specialtecken", + "password_max_age": "Lösenords högsta ålder (dagar, 0=aldrig)", + "allowed_operators": "Tillåtna operatörsroller (kommaseparerade)", + "network_title": "Nätverkspolicy", + "network_desc": "Styr reläservrar och direktanslutningar", + "block_direct_p2p": "Block Direct P2P (kraftrelä)", + "allowed_relays": "Tillåtna reläservrar (en per rad)", + "ip_allowlist": "IP-tillåtelselista (CIDR, en per rad)", + "update_title": "Uppdatera policy", + "update_desc": "Kontrollera automatiska uppdateringar och uppdateringskanaler", + "auto_update": "Aktivera automatisk uppdatering", + "update_channel": "Uppdatera kanal", + "audit_title": "Policyändringar", + "audit_desc": "Senaste policyändringshistorik", + "no_audit": "Inga policyändringar har registrerats.", + "save_success": "Policyn har sparats", + "save_failed": "Det gick inte att spara policyn", + "load_failed": "Det gick inte att läsa in policyer", + "block_direct_p2p_hint": "Gäller enheter i den här organisationen." + }, + "attestation": { + "title": "Enhetsbekräftelse", + "subtitle": "Övervaka enhetsidentitetsverifiering och hårdvarufingeravtryck", + "verified": "Verified", + "pending": "Pending", + "failed": "Misslyckades", + "device_list": "Enhetslista", + "device_list_desc": "Hårdvarufingeravtryck och identitetsverifieringsstatus", + "col_device": "Enhets-ID", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Inga intygsposter hittades.", + "verify_success": "Enhet markerad som verifierad", + "verify_failed": "Det gick inte att verifiera enheten", + "revoke_success": "Enhetsbekräftelse återkallad", + "revoke_failed": "Det gick inte att återkalla intyget" + }, + "fleet": { + "title": "Flottstyrning", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Arbetsflödesbyggare", + "tab_compliance": "Compliance", + "res_title": "Resurskartläggning", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Nätverksenhet", + "res_type_dns": "DNS-post", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Lägg till resurs", + "res_name": "Resursnamn", + "res_type": "Type", + "res_address": "Adress/sökväg", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organisation", + "res_scope_group": "Grupp", + "res_scope_device": "Enhet", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Inga resurser hittades. Klicka på \"Lägg till resurs\" för att skapa en.", + "res_confirm_delete": "Är du säker på att du vill ta bort den här resursen?", + "task_title": "Uppgiftsschemaläggare", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Misslyckades", + "task_search": "Search tasks…", + "task_create": "Skapa uppgift", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Uppdatering", + "task_type_restart": "Starta om", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Enhets-ID eller gruppnamn, kommaseparerade", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Schemavärde", + "task_script": "Skript / Kommando", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Inga uppgifter hittades. Klicka på \"Skapa uppgift\" för att komma igång.", + "task_confirm_delete": "Är du säker på att du vill ta bort den här uppgiften?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Arbetsflödesbyggare", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Spara", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Välj en nod för att redigera dess egenskaper.", + "builder_node_trigger_manual": "Manuell avtryckare", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Händelseutlösare", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Starta om Svc", + "builder_node_action_file_deploy": "Distribuera fil", + "builder_node_action_message": "Skicka meddelande", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Skicka varning", + "builder_node_result_chain": "Kedjans arbetsflöde", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Arbetsflödesnamn:", + "comp_title": "Programvaruöverensstämmelse", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Enhet", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Köra automatisk sanering på den här enheten?", + "comp_no_data": "Inga efterlevnadsdata tillgängliga. Kör en skanning för att komma igång.", + "save": "Spara", + "cancel": "Avbryt", + "close": "Stäng", + "edit": "Redigera", + "delete": "Ta bort", + "actions": "Actions", + "all_orgs": "Alla organisationer", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Nätverksenhet", + "type_dns": "DNS-post", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Lägg till resurs", + "edit_resource": "Redigera resurs", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adress/sökväg", + "scope_org": "Organisation", + "scope_group": "Grupp", + "scope_device": "Enhet", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Är du säker på att du vill ta bort det här objektet?", + "all_statuses": "Alla statusar", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Misslyckades", + "search_tasks": "Search tasks�", + "create_task": "Skapa uppgift", + "edit_task": "Redigera uppgift", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Fildistribution", + "task_type_registry": "Registry", + "target_devices": "Målenheter", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Skript / Kommando", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Laddar", + "no_output": "Ingen utgång tillgänglig", + "error_loading": "Det gick inte att ladda data", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuell avtryckare", + "node_schedule": "Schedule", + "node_event": "Händelseutlösare", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Starta om Svc", + "node_file_deploy": "Distribuera fil", + "node_send_message": "Skicka meddelande", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Skicka varning", + "node_chain": "Kedjans arbetsflöde", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Alla organisationer", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Enhet", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Köra automatisk sanering på den här enheten?" + }, + "scaling": { + "title": "Skalning och relähantering", + "tab_overview": "Översikt", + "tab_relays": "Relay Nodes", + "tab_rules": "Tilldelningsregler", + "tab_capacity": "Kapacitetsplanering", + "arch_title": "Nätverksarkitektur", + "arch_loading": "Laddar arkitekturdiagram...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Totalt antal enheter", + "stat_active_sessions": "Aktiva sessioner", + "stat_bandwidth": "Total bandbredd", + "relay_health": "Relähälsa", + "no_relays": "Inga relänoder konfigurerade. Lägg till din första relänod för att fördela belastningen.", + "relay_search": "Sök reläer...", + "relay_add": "Lägg till relänod", + "relay_edit": "Redigera relänod", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Enheter", + "col_sessions": "Sessioner", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Målrelä", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Aktiverad", + "status_disabled": "Inaktiverad", + "confirm_delete_relay": "Är du säker på att du vill ta bort denna relänod?", + "confirm_delete_rule": "Är du säker på att du vill ta bort den här tilldelningsregeln?", + "rules_hint": "Tilldelningsregler bestämmer vilken reläserver som hanterar specifika enhetsgrupper. Regler utvärderas efter prioritet (lägsta först).", + "rule_add": "Add Rule", + "rule_edit": "Redigera regel", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Enhetsgrupp", + "match_tag": "Enhetstagg", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Primär reservnod", + "fallback_nearest": "Närmaste relä", + "relay_max_sessions": "Max sessioner", + "relay_max_bandwidth": "Max bandbredd (Mbps)", + "cap_tiers": "Kapacitetsnivåer", + "cap_loading": "Laddar kapacitetsdata...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Inga rekommendationer tillgängliga.", + "cap_planning": "Infrastrukturplanering", + "cap_config": "Konfiguration", + "cap_max_devices": "Max enheter", + "cap_max_sessions": "Max sessioner", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Enhetens kapacitet", + "cap_tier_sessions": "Sessionskapacitet", + "cap_tier_bandwidth": "Bandbreddskapacitet", + "cap_single_sqlite": "Enskild server (SQLite)", + "cap_single_pg": "Enskild server (PostgreSQL)", + "cap_master_3": "Master + 3 reläer", + "cap_master_10": "Master + 10 reläer", + "rec_no_relays": "Inga relänoder konfigurerade. Överväg att lägga till relänoder för bättre prestanda och redundans.", + "rec_devices_high": "Enhetsanvändningen är hög. Överväg att lägga till fler relänoder för att fördela belastningen.", + "rec_sessions_high": "Sessionskapaciteten närmar sig sin gräns. Överväg att uppgradera reläinfrastruktur.", + "rec_cpu_high": "Vissa relänoder rapporterar hög CPU-användning. Överväg lastbalansering eller kapacitetsuppgraderingar.", + "rec_all_good": "Alla system fungerar inom normala parametrar. Ingen åtgärd krävs.", + "save": "Spara", + "cancel": "Avbryt", + "edit": "Redigera", + "delete": "Ta bort", + "close": "Stäng", + "no_rules": "Inga tilldelningsregler.", + "relays_info_banner": "Denna lista är informativ. Reläservrarna som faktiskt används av klienter konfigureras via miljövariabeln RELAY_SERVERS på BetterDesk-servern.", + "relay_name_address_required": "Namn och adress krävs.", + "relay_save_failed": "Det gick inte att spara relänoden.", + "relay_delete_failed": "Det gick inte att ta bort relänod.", + "relay_saved": "Relänod sparad.", + "relay_deleted": "Relänod raderad.", + "rule_name_value_required": "Regelnamn och matchningsvärde krävs.", + "rule_save_failed": "Det gick inte att spara regeln.", + "rule_delete_failed": "Det gick inte att ta bort regeln.", + "rule_saved": "Regeln sparad.", + "rule_deleted": "Regel raderad." + }, + "cross_platform": { + "title": "Cross-Platform-kompatibilitet", + "tab_matrix": "Kompatibilitetsmatris", + "tab_distribution": "Distribution", + "tab_protocols": "Protokoll", + "tab_limitations": "Begränsningar", + "matrix_hint": "Funktionsstödsmatris över alla plattformar som stöds. Grön = fullt stöd, gul = delvis, grå = ej tillgänglig, blå = planerad.", + "col_feature": "Funktion", + "legend_full": "Fullt stöd", + "legend_partial": "Partiellt stöd", + "legend_none": "Ej tillgängligt", + "legend_planned": "Planerad", + "platform_breakdown": "Plattformsuppdelning", + "arch_breakdown": "Arkitektur sammanbrott", + "version_breakdown": "Versionsuppdelning", + "summary": "Sammanfattning", + "total_devices": "Totalt antal enheter", + "unique_platforms": "Plattformar", + "unique_archs": "Arkitekturer", + "unique_versions": "Klientversioner", + "no_devices": "Inga enheter registrerade ännu.", + "protocols_hint": "Protokollkapacitetsförhandling säkerställer att varje klient endast får de funktioner som den stöder. Servern anpassar beteendet baserat på rapporterade möjligheter.", + "capability_negotiation": "Kapacitetsförhandling", + "codec_support": "Codec-stöd (onlineenheter)", + "feature_support": "Funktionssupport (onlineenheter)", + "no_codec_data": "Ingen codec-data tillgänglig från onlineenheter.", + "no_feature_data": "Ingen funktionsdata tillgänglig från onlineenheter.", + "protobuf_schema": "Protokollbufferschema", + "diagram_client": "Klient", + "diagram_server": "Servernod", + "diagram_peer": "Klientnod", + "limitations_hint": "Varje plattform har specifika begränsningar som påverkar tillgängliga funktioner. Granska dessa begränsningar när du planerar distributioner.", + "feat_desktop_client": "Desktop-klient", + "feat_background_agent": "Bakgrundsagent", + "feat_remote_target": "Fjärrmål", + "feat_screen_capture": "Skärmdump", + "feat_input_injection": "Inmatningsstyrning", + "feat_file_transfer": "Filöverföring", + "feat_clipboard_sync": "Synkronisera urklipp", + "feat_audio_streaming": "Ljudströmning", + "feat_chat": "Chatt", + "feat_h264": "H.264 codec", + "feat_vp9": "VP9 codec", + "feat_av1": "AV1 codec", + "feat_cdap_agent": "CDAP-agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Webbläsare", + "platform_chromeos": "ChromeOS", + "status_production": "Produktion", + "status_testing": "Test", + "status_planned": "Planerad", + "status_limited": "Begränsad", + "status_experimental": "Experimentell", + "limit_win_uac": "UAC-förhöjning krävs för serviceinstallation och input-injection på säkra stationära datorer.", + "limit_win_service": "Körs som NSSM-tjänst; kräver administratörsbehörighet för installation.", + "limit_win_firewall": "Windows Brandväggsregler måste tillåta portar 21115-21119 för reläanslutningar.", + "limit_linux_wayland": "Wayland-kompositörer begränsar programmatisk skärmdumpning; PipeWire-portal API krävs.", + "limit_linux_pipewire": "Ljudinspelning kräver PipeWire; PulseAudio reservtillgänglig men begränsad.", + "limit_linux_arm": "ARM64 bygger tillgängliga; vissa codecs kan använda programvaruavkodning (långsammare).", + "limit_mac_screen": "Skärminspelningsbehörighet krävs i Systeminställningar > Sekretess och säkerhet.", + "limit_mac_signing": "Agenten måste vara signerad med Apple Developer ID för distribution.", + "limit_mac_notarize": "Notarisering krävs för macOS Gatekeeper (distribution utanför App Store).", + "limit_android_projection": "MediaProjection API kräver användarens samtycke för varje skärmdumpssession.", + "limit_android_accessibility": "Inputinjektion kräver AccessibilityService; begränsad i Android 14+.", + "limit_android_battery": "Bakgrundstjänst begränsad av Doze-läge; kan kräva undantag för batterioptimering.", + "limit_ios_capture": "Apple förbjuder bakgrundsskärmdumpning; Endast tittarläge stöds.", + "limit_ios_input": "Ingen insprutning tillåten; endast fjärrvisning och chatt.", + "limit_ios_appstore": "Distribution endast via App Store; TestFlight för betatestning.", + "limit_web_https": "WebCodecs API och WebRTC kräver HTTPS; HTTP faller tillbaka till JMuxer (begränsade codecs).", + "limit_web_codec": "Codec-stöd beror på webbläsare; H.264 stöds brett, VP9/AV1 varierar.", + "limit_web_performance": "Prestanda begränsad av webbläsarens sandlåda; ingen direkt hårdvaruacceleration.", + "limit_chrome_crostini": "Fullständig agentstöd endast inuti Crostini Linux-behållare.", + "limit_chrome_pwa": "PWA-läge ger enbart webbfunktioner; inga inbyggda agentkapaciteter.", + "limit_chrome_input": "Inputinjektion stöds inte utanför Crostini-behållaren.", + "feat_session_recording": "Sessionsinspelning", + "feat_multi_monitor": "Flera bildskärmar", + "feat_unattended_access": "Obevakad åtkomst", + "limit_win_virtual_account": "Tjänste laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Tjänste laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Säkerhetsrevision", + "tab_overview": "Översikt", + "tab_events": "Revisionshändelser", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Säkerhetspoäng", + "failed_logins": "Misslyckade inloggningar (24h)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Gamla nycklar (>90d)", + "security_checks": "Säkerhetskontroller", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Säker", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "all_events": "All Events", + "event_login_failed": "Inloggning misslyckades", + "event_login_success": "Inloggning lyckad", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Konfiguration ändrad", + "event_key_created": "Nyckel skapad", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Inga granskningshändelser hittades.", + "hardening_hint": "Säkerhetshärdande prioriteringar för din BetterDesk-distribution. Föremålen är sorterade efter svårighetsgrad.", + "no_hardening": "Inga härdande föremål tillgängliga.", + "vuln_hint": "Resultat av sökning av beroendesårbarhet. Kör npm-revision regelbundet för att hålla beroenden säkra.", + "no_vulns": "Inga sårbarheter hittades. Dina beroenden är säkra." + }, + "languages": { + "title": "Språkhantering", + "total_languages": "Totalt språk", + "fully_translated": "Fullständigt översatt", + "needs_review": "Behöver granskning", + "reference_keys": "Referensnycklar", + "no_languages": "Inga språkfiler hittades.", + "badge_reference": "Reference", + "badge_review": "Behöver granskning", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Visa saknas", + "fix_missing": "Fix Missing", + "missing_keys_for": "Saknar nycklar till", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "och {n} mer...", + "all_keys_present": "Alla nycklar finns!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Saknade nycklar i {code} måste översättas manuellt.", + "no_fix_needed": "Inga saknade nycklar att fixa." + }, + "resource_control": { + "title": "Resurskontroll", + "tab_overview": "Översikt", + "tab_usb": "USB Control", + "tab_optical": "Optiska enheter", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Resurskvoter", + "compliance_by_category": "Efterlevnad per kategori", + "device_compliance": "Enhetsöverensstämmelse", + "search_devices": "Sök enheter...", + "col_device": "Enhet", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Totalt antal enheter", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Överensstämmelsegrad", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Konfigurera", + "no_devices": "Inga enheter hittades", + "usb_title": "USB Portkontroll", + "usb_hint": "Kontrollera USB lagringsenhetsåtkomst för den valda enheten eller organisationsomfattande standardpolicy.", + "usb_storage_policy": "USB Lagringspolicy", + "usb_whitelist": "Vitlistade enheter (en per rad)", + "usb_whitelist_hint": "VID:PID (t.ex. 0781:5583)", + "usb_audit_log": "Logga USB enhetsanslutningar", + "optical_title": "Optisk enhetskontroll", + "optical_hint": "Styr åtkomst till CD/DVD/Blu-ray-enhet för den valda enheten.", + "optical_policy": "Policy för optisk enhet", + "optical_audit_log": "Logga åtkomst till optisk enhet", + "monitors_title": "Övervakningshantering", + "monitors_hint": "Konfigurera bildskärmsinställningar inklusive maximalt antal, upplösningstillämpning, ljusstyrka och effektscheman.", + "monitors_max_count": "Maximalt antal skärmar (0 = obegränsat)", + "monitors_max_hint": "0 betyder ingen gräns", + "monitors_resolution": "Max upplösning", + "monitors_brightness": "Gräns för ljusstyrka", + "monitors_power_schedule": "Strömschema", + "monitors_power_hint": "t.ex. av: 22:00-06:00", + "disks_title": "Diskåtkomstkontroll", + "disks_hint": "Konfigurera diskåtkomstpolicyer inklusive skrivskyddat läge, krypteringstillämpning och partitionssynlighet.", + "disks_readonly": "Forcera skrivskyddat läge", + "disks_encryption": "Kräv kryptering (BitLocker/LUKS)", + "disks_smart": "Aktivera S.M.A.R.T. övervakning", + "disks_hidden": "Dolda partitioner", + "disks_hidden_hint": "Kommaseparerade enhetsbokstäver eller monteringspunkter", + "quotas_title": "Resurskvoter", + "quotas_hint": "Ställ in CPU, RAM, bandbredd och diskkvoter per användare för den valda enheten.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Bandbreddsgräns (Mbps)", + "quotas_bandwidth_hint": "0 = obegränsat", + "quotas_disk_quota": "Diskkvot (GB)", + "quotas_disk_hint": "0 = obegränsat", + "quotas_process_whitelist": "Processvitlista (en per rad)", + "quotas_process_hint": "t.ex. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Endast vitlista", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Programuppdateringar", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Installerad version", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Sök efter uppdateringar", + "checking": "Checking…", + "up_to_date": "Uppdaterad", + "update_available": "Uppdatering tillgänglig", + "changelog": "Release Notes", + "no_changelog": "Inga release notes tillgängliga", + "files_changed": "Filerna har ändrats", + "files": "filer", + "changes_unavailable": "Det gick inte att ladda filändringslistan. Du kan fortfarande installera uppdateringen.", + "create_backup": "Skapa säkerhetskopia innan du uppdaterar", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Installerar uppdatering...", + "creating_backup": "Skapar säkerhetskopia...", + "downloading": "Laddar ned filer...", + "install_success": "Uppdateringen har installerats. Konsolen startar om...", + "install_failed": "Uppdateringsinstallationen misslyckades", + "restarting": "Väntar på att konsolen ska starta om...", + "restart_complete": "Konsolen startades om", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Ingen uppdateringsversion har valts. Sök efter uppdateringar först.", + "backups_title": "Uppdatera säkerhetskopior", + "backups_desc": "Föruppdatera säkerhetskopior som skapas automatiskt före varje uppdatering", + "no_backups": "Inga uppdateringsbackuper hittades", + "restore": "Restore", + "restore_confirm": "Är du säker på att du vill återställa från denna säkerhetskopia? Ändrade filer kommer att skrivas över.", + "restore_success": "Säkerhetskopieringen har återställts. Konsolen startar om...", + "baseline_set": "Baslinjeuppsättning", + "commits_behind": "begår bakom", + "total_files": "Totalt antal filer", + "applied": "Applied", + "failed": "Misslyckades", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Gå Server", + "component_agent": "Agent", + "component_scripts": "Skript & Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Kontrollerar Go...", + "go_not_found": "Gå inte installerad", + "go_check_failed": "Det gick inte att kontrollera Go tillgänglighet", + "server_building": "Kompilerar Go server... Detta kan ta några minuter.", + "server_built": "Server binär kompilerad", + "server_build_failed": "Serverkompileringen misslyckades", + "server_stale_title": "Server binär inaktuell", + "server_stale_desc": "Go server-källan uppdaterades men den pågående binära filen byggdes inte om. Bygg om det nu för att tillämpa säkerhets- och biblioteksuppdateringar.", + "rebuild_server": "Bygg om binär server", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Server binär ombyggd och omstartad", + "rebuild_server_failed": "Serverns binära återuppbyggnad misslyckades", + "server_deployed": "Server binär distribuerad", + "server_deploy_failed": "Serverdistribution misslyckades", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Laddar ner serverkälla...", + "delete": "Ta bort", + "delete_confirm": "Vill du ta bort säkerhetskopian {name} permanent? Detta kan inte ångras.", + "delete_success": "Säkerhetskopiering raderad", + "delete_failed": "Det gick inte att ta bort säkerhetskopian", + "retention_label": "Behåll N senaste säkerhetskopior", + "retention_hint": "Äldre säkerhetskopior raderas automatiskt efter varje uppdatering. Använd 0 för att behålla alla säkerhetskopior.", + "retention_saved": "Retentionsinställningen har sparats", + "retention_invalid": "Retention måste vara ett heltal mellan 0 och 1000", + "retention_required_for_prune": "Ställ in ett retentionsvärde som är större än 0 först", + "prune_now": "Apply now", + "prune_confirm": "Behåll bara de senaste säkerhetskopiorna av {n} och radera resten?", + "prune_done": "Beskärade {n} säkerhetskopior", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Uppdateringsmetod", + "strategy_download": "Ladda ner förbyggd binär", + "strategy_compile": "Kompilera från källan", + "both_available": "Ladda ner och kompilera", + "download_available": "Nedladdning tillgänglig", + "no_method": "Ingen uppdateringsmetod", + "no_release": "No release", + "available": "Tillgänglig", + "server_downloading": "Laddar ner binär server...", + "server_downloaded": "Server binär nedladdad", + "server_download_failed": "Serverns binära nedladdning misslyckades", + "server_download_note": "En förbyggd binär kommer att laddas ner från GitHub Releases. Detta tar vanligtvis mindre än en minut.", + "install_go_hint": "Installera Go från https://go.dev/dl/ för att möjliggöra kompilering, eller publicera en version med förbyggda binärer", + "strategy_install_go": "Autoinstallera Go och kompilera", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Klar för automatisk ombyggnad", + "toolchain_ready": "Verktygskedja installerad", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Laddar ned Go-verktygskedjan...", + "toolchain_failed": "Go toolchain-installationen misslyckades", + "modal_title": "Installerar uppdatering", + "modal_done_title": "Uppdateringen slutförd", + "modal_close": "Stäng", + "modal_reload_now": "Ladda om konsolen", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsolfiler", + "phase_server": "Serverkomponent", + "phase_restart": "Starta om", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Säkerhetskopiering hoppas över (per användarval)", + "server_skipped": "Go server hoppade över", + "server_not_selected": "Go server not selected", + "server_processing": "Bearbetar Go server-uppdatering...", + "no_restart_needed": "Ingen omstart krävs", + "complete": "Uppdatering tillämpad", + "complete_summary": "Uppdateringen har tillämpats framgångsrikt.", + "complete_with_errors": "Uppdateringen slutfördes, men några steg misslyckades. Se detaljer nedan.", + "modal_done_with_errors_title": "Uppdateringen avslutad med fel", + "console_will_restart": "Konsolprocessen kommer att starta om nu...", + "restart_complete_msg": "Konsolen avslutade omstarten. Klicka på ladda om för att ladda den nya versionen. Sidan laddas om automatiskt efter 8 sekunder.", + "refresh_recommended": "Statiska tillgångar ändrade — ladda om sidan för att se det nya användargränssnittet.", + "confirm_title": "Tillämpa uppdatering", + "confirm_with_backup": "En föruppdateringssäkerhetskopia skapas automatiskt.", + "confirm_no_backup": "Ingen säkerhetskopia kommer att skapas (fortsätt på egen risk)." + }, + "permissions": { + "title": "Behörigheter", + "subtitle": "Hantera rollbaserade behörigheter och anpassade åsidosättningar", + "info_title": "Hur behörigheter fungerar", + "info_desc": "Varje roll har standardbehörigheter. Du kan lägga till eller ta bort individuella behörigheter per roll genom att växla mellan dem nedan. Anpassade åsidosättningar är markerade och kan återställas till standardinställningar när som helst.", + "select_role": "Välj roll", + "select_role_placeholder": "Välj en roll...", + "reset_overrides": "Återställ alla åsidosättningar", + "granted": "Beviljad", + "overrides": "Åsidosättningar", + "level": "Nivå", + "super_admin_tag": "Full åtkomst", + "server_level_tag": "Servernivå", + "custom": "Anpassad", + "default": "Standard", + "revert": "Återgå till standard", + "saved": "Behörighet uppdaterad", + "reverted": "Återställd till standard", + "all_reverted": "Alla åsidosättningar har återställts", + "confirm_reset": "Vill du återställa alla anpassade åsidosättningar för den här rollen till standardinställningarna?", + "empty_title": "Välj en roll", + "empty_desc": "Välj en roll från rullgardinsmenyn ovan för att se och hantera dess behörigheter.", + "locked_title": "Superadministratör", + "locked_desc": "Super Admin har alla behörigheter som standard och kan inte anpassas.", + "cat_device": "Enheter", + "cat_user": "Användare", + "cat_server": "Serversystem", + "cat_org": "Organisationer", + "cat_audit": "Revision & Övervakning", + "cat_cdap": "CDAP", + "cat_enrollment": "Registrering", + "cat_chat": "Chatt", + "cat_branding": "Varumärke", + "perm_device_view": "Visa enheter", + "perm_device_connect": "Anslut till enheter", + "perm_device_edit": "Redigera enheter", + "perm_device_delete": "Ta bort enheter", + "perm_device_ban": "Förbjud/avaktivera enheter", + "perm_device_change_id": "Ändra enhets-ID", + "perm_user_view": "Visa användare", + "perm_user_create": "Skapa användare", + "perm_user_edit": "Redigera användare", + "perm_user_delete": "Ta bort användare", + "perm_server_config": "Serverkonfiguration", + "perm_server_keys": "Hantera API-nycklar", + "perm_org_create": "Skapa organisationer", + "perm_org_edit": "Redigera organisationer", + "perm_org_delete": "Ta bort organisationer", + "perm_org_manage_users": "Hantera organisationsanvändare", + "perm_org_manage_devices": "Hantera organisationsenheter", + "perm_audit_view": "Visa granskningsloggar", + "perm_metrics_view": "Visa statistik", + "perm_blocklist_edit": "Redigera blockeringslista", + "perm_cdap_view": "Visa CDAP-enheter", + "perm_cdap_command": "Skicka CDAP-kommandon", + "perm_cdap_terminal": "CDAP terminalåtkomst", + "perm_cdap_files": "CDAP filåtkomst", + "perm_enrollment_manage": "Hantera registreringen", + "perm_enrollment_approve": "Godkänn registrering", + "perm_chat_access": "Chatttåtkomst", + "perm_branding_edit": "Redigera varumärke", + "perm_server_attestation": "Serverprestandaattest" + }, + "notifications": { + "title": "Aviseringar", + "empty": "Inga nya aviseringar", + "mark_all_read": "Markera allt som läst", + "see_all": "Se alla hjälpförfrågningar", + "help_request": "Begäran om hjälp", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Justera konsolen efter dina syn-, rörelse- och läsbehov.", + "close": "Stäng tillgänglighetsmenyn", + "profiles": "Snabba profiler", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Större text, stark kontrast och fokus.", + "profile_dyslexia": "Läskomfort", + "profile_dyslexia_hint": "Läsbart teckensnitt och bredare mellanrum.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Minskar övergångar och pausar animering.", + "profile_color_assist": "Färgstöd", + "profile_color_assist_hint": "Färgfilter, etiketter och markerade länkar.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Bokstavsavstånd", + "word_spacing": "Ordavstånd", + "readable_font": "Läsbart typsnitt", + "readable_font_hint": "Använder breda, välbekanta bokstavsformer.", + "dyslexia_spacing": "Dyslexiavstånd", + "dyslexia_spacing_hint": "Lägger till extra mellanrum för lång text.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Mörk med hög kontrast", + "contrast_high_light": "Ljus med hög kontrast", + "contrast_yellow_black": "Gult på svart", + "color_filter": "Färgseende filter", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Färgmättnad", + "underline_links": "Stryk under länkar", + "underline_links_hint": "Gör länkar synliga utan att förlita sig på färg.", + "highlight_links": "Markera åtgärder", + "highlight_links_hint": "Skisserar länkar och knappar.", + "highlight_headings": "Markera rubriker", + "highlight_headings_hint": "Markerar avsnittstitlar med en färgstapel.", + "hide_media": "Dim media", + "hide_media_hint": "Dimmar bilder, videor och dukar.", + "interaction": "Interaction", + "strong_focus": "Starkt fokus", + "strong_focus_hint": "Visar en stor fokusring på tangentbordet.", + "large_cursor": "Stor markör", + "large_cursor_hint": "Använder en större pekare med hög kontrast.", + "reduce_motion": "Minska rörelse", + "reduce_motion_hint": "Förkortar övergångar och mjuk rullning.", + "pause_animations": "Pausa animationer", + "pause_animations_hint": "Slutar att slinga visuella rörelser.", + "reading_guide": "Läsguide", + "reading_guide_hint": "Följer pekaren med en ljus linje.", + "reading_mask": "Läsmask", + "reading_mask_hint": "Dimmar innehållet ovanför och under pekaren.", + "preview": "Preview", + "preview_title": "Förhandsvisning av operatörens arbetsyta", + "preview_text": "Kontrollera om text, länkar, kontroller och statusetiketter är bekväma att läsa innan du stänger den här menyn.", + "preview_link": "Länk för enhetsinformation", + "preview_status": "Online", + "preview_button": "Primär åtgärd", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Serverhantering", + "subtitle": "Cockpitliknande kontrollplan för BetterDesk-konsolvärden (BETA).", + "beta_tooltip": "Betafunktion — under aktiv utveckling.", + "notice_title": "Betafunktion", + "notice_body": "Dessa verktyg körs på den värd där BetterDesk-konsolprocessen lever. All verksamhet granskas. Funktionsomfånget kommer att utökas i framtida utgåvor.", + "tab_overview": "Översikt", + "tab_terminal": "Terminal", + "tab_files": "Filer", + "tab_services": "Tjänster", + "cpu": "CPU", + "memory": "Minne", + "load": "Genomsnittlig belastning", + "disks": "Diskar", + "history": "Historik (senaste 60 proverna)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Drifttid", + "no_disks": "Ingen diskdata tillgänglig", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY tillgängligt", + "term_connect": "Anslut", + "term_disconnect": "Koppla från", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Anslutningsfel", + "term_warning": "Kommandon körs som användaren som äger konsolprocessen. Lägg till en sudoers-regel för att aktivera höjd.", + "term_hint": "Tips: skriv `sudo -i` för att eskalera (kräver sudoers-konfiguration).", + "term_lib_failed": "Det gick inte att läsa in terminalbiblioteket", + "files_up": "Upp en nivå", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Tom katalog", + "files_error": "Det gick inte att lista katalogen", + "read_failed": "Det gick inte att läsa filen", + "save_failed": "Det gick inte att spara filen", + "rename_failed": "Det gick inte att byta namn", + "delete_failed": "Det gick inte att ta bort", + "delete_confirm": "Ta bort denna post?", + "mkdir_prompt": "Nytt mappnamn:", + "mkdir_failed": "Det gick inte att skapa mappen", + "file_saved": "Filen sparad", + "binary_warn": "Binär fil — endast förhandsgranskning", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Söktjänster...", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Inga tjänster hittades", + "svc_load_failed": "Det gick inte att läsa in tjänster", + "svc_action_failed": "Åtgärden misslyckades", + "svc_confirm": "Run", + "svc_start": "Starta", + "svc_stop": "Stoppa", + "svc_restart": "Starta om", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Ladda ner BetterDesk Agent", + "choose_platform": "Välj din plattform", + "choose_platform_hint": "Välj det installationsprogram som matchar ditt operativsystem.", + "download": "Ladda ner", + "building": "Bygger...", + "failed": "Bygget misslyckades", + "need_help": "Behöver du hjälp?", + "powered_by": "Drivs av" + }, + "server_attestation": { + "title": "Serverattest", + "subtitle": "Prestandariktmärke som fastställer kapacitet för samtidiga fjärranslutningar vid 80 % CPU-, RAM- och disktröskeln.", + "warning_title": "Lasttest", + "warning_body": "Riktmärket simulerar parallella WebSocket-anslutningar till signal- och reläservrarna. Kör utanför rusningstid — det här testet belastar produktionen.", + "run_benchmark": "Kör riktmärke", + "abort": "Avbryt", + "download_report": "Ladda ner JSON-rapport", + "last_test": "Senaste test", + "no_test_yet": "Inget riktmärke har körts ännu", + "max_connections": "Max anslutningar", + "threshold_80": "80 % tröskel — slutliga mätvärden", + "disk": "Disk", + "ramp_chart": "Lastrampdiagram", + "connections": "Anslutningar", + "connections_short": "ansl.", + "tier_guide_title": "Vad innebär varje nivå?", + "tier_bronze": "BRONS", + "tier_iron": "JÄRN", + "tier_titanium": "TITAN", + "tier_platinum": "PLATINA", + "tier_obsidian": "OBSIDIAN", + "tier_none": "OGRANSKAD", + "tier_bronze_desc": "1–25 samtidiga anslutningar — liten VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 anslutningar — mellanklass-server (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 anslutningar — högpresterande server (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 anslutningar — företagsinfrastruktur (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ anslutningar — turboklass: dedikerad hårdvara, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Obs: I Docker kan CPU/RAM-mätvärden spegla containerbegränsningar snarare än den fysiska värden.", + "badge_tooltip": "BetterDesk Serverattest — serverprestandacertifiering", + "confirm_run": "Det här riktmärket lasttestnar servern med simulerade anslutningar. Fortsätt?", + "starting": "Startar...", + "complete": "Riktmärke slutfört", + "signal_peers": "Signalkamrater", + "relay_sessions": "Reläsessioner", + "page_error": "Det gick inte att ladda sidan Serverattest", + "mode_estimated": "Uppskattad (WebSocket otillgänglig)", + "incomplete": "Riktmärke slutfört utan giltig nivå" + }, + "commercialization": { + "title": "Kommersialisering", + "subtitle": "Supportpaket, fakturerbara sessioner och rapporter", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tidig funktion — fakturering och paket är under aktiv utveckling.", + "tabs": { + "overview": "Översikt", + "packages": "Paket och avtal", + "sessions": "Sessioner", + "reports": "Rapporter", + "settings": "Avancerade inställningar" }, - "branding": { - "identity_title": "Varumärkesidentitet", - "identity_desc": "Anpassa programmets namn och beskrivning som visas på konsolen", - "app_name": "Applikationsnamn", - "app_description": "Applikationsbeskrivning", - "logo_title": "Logotyp", - "logo_desc": "Välj hur din logotyp ska visas i sidofältet och inloggningssidan", - "logo_type_icon": "Material ikon", - "logo_type_svg": "SVG-kod", - "logo_type_image": "Bild-URL", - "logo_icon_name": "Ikonnamn", - "logo_icon_hint": "Ange ett materialikonnamn (t.ex. dns, moln, säkerhet). Se fonts.google.com/icons", - "logo_svg_code": "SVG-kod", - "logo_svg_hint": "Klistra in din SVG-märkning här. Stöder fullständiga -element med banor och stilar.", - "logo_image_upload": "Ladda upp bild", - "logo_image_choose": "Välj bildfil", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Ogiltig filtyp. Använd PNG, JPG, GIF, WebP eller SVG.", - "preview": "Förhandsvisning", - "colors_title": "Färgschema", - "colors_desc": "Anpassa färgpaletten. Lämna tomt om du vill använda standardinställningarna.", - "colors_backgrounds": "Bakgrunder", - "colors_text": "Text", - "colors_accents": "Accentfärger", - "colors_borders": "Kanter", - "import_export_title": "Importera / Exportera", - "import_export_desc": "Spara ditt tema som en JSON-fil eller importera en från en annan instans", - "export_theme": "Exportera tema", - "import_theme": "Importera tema", - "reset_defaults": "Återställ till standardvärden", - "save_branding": "Spara varumärke", - "saved": "Varumärke har sparats. Laddar om...", - "exported": "Tema exporterat", - "imported": "Temat har importerats. Laddar om...", - "import_error": "Det gick inte att importera tema. Ogiltigt filformat.", - "reset_confirm": "Är du säker på att du vill återställa varumärket till standardinställningarna? Detta kan inte ångras.", - "reset_success": "Varumärke återställs till standardinställningar. Laddar om...", - "logo_type_text": "Textlogotyp", - "logo_text": "Logotyptext", - "logo_text_hint": "Primär text som visas som ditt varumärkes logotyp", - "logo_text_accent": "Accenttext", - "logo_text_accent_hint": "Sekundär text under logotypen (t.ex. produktnamn eller slagord)", - "logo_upload_success": "Logotypen har laddats upp.", - "typography_title": "Typografi", - "typography_desc": "Välj typsnitt för rubriker och brödtext. Teckensnitt laddas ner till servern för självvärd.", - "font_heading": "Rubrik Teckensnitt", - "font_heading_hint": "Används för rubriker (H1–H6) och textlogotyp", - "font_body": "Brödtextteckensnitt", - "font_body_hint": "Används för brödtext och UI-element", - "font_search_placeholder": "Sök teckensnitt...", - "font_system_default": "Systemstandard", - "font_clear": "Rensa", - "font_cat_all": "Alla", - "font_downloaded_count": "teckensnitt som laddas ner på servern", - "powered_by": "Drivs av", - "background_title": "Bakgrund och utseende", - "background_desc": "Ange en konsolbakgrund, gradient eller enfärgad bakgrund.", - "bg_type_none": "Ingen", - "bg_type_color": "Enfärgad", - "bg_type_gradient": "Gradient", - "bg_type_image": "Bild", - "bg_color": "Bakgrundsfärg", - "bg_gradient": "CSS-gradient", - "bg_gradient_hint": "Valfri giltig CSS-gradient, t.ex. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Ladda upp bakgrundsbild", - "bg_image_choose": "Välj bildfil", - "bg_image_hint": "PNG, JPG, WebP eller GIF. Max 8 MB.", - "bg_image_url": "Bildsökväg / URL", - "bg_size": "Bildstorlek", - "bg_size_cover": "Täck (fyll skärm)", - "bg_size_contain": "Anpassa (fit)", - "bg_size_auto": "Automatiskt (original)", - "bg_blur": "Bakgrundsoskärpa", - "bg_overlay": "Mörkt överlager", - "bg_overlay_hint": "Mörknar bakgrunden för bättre textläsbarhet.", - "bg_image_too_large": "Bilden är för stor. Maximal storlek är 8 MB.", - "bg_image_invalid_type": "Ogiltig filtyp. Använd PNG, JPG, WebP eller GIF.", - "bg_upload_success": "Bakgrundsbild uppladdad.", - "login_title": "Inloggningssida", - "login_desc": "Anpassa inloggningsskärmens rubrik, underrubrik och bakgrund.", - "login_heading": "Inloggningsrubrik", - "login_heading_placeholder": "Välkommen tillbaka", - "login_subheading": "Inloggningsunderrubrik", - "login_subheading_placeholder": "Logga in på ditt konto", - "login_bg_inherit": "Samma som konsolen", - "agent_title": "Agent-nedladdningssida", - "agent_desc": "Anpassa den offentliga agent-nedladdningsportalen som visas för slutanvändare.", - "agent_show_powered": "Visa \"Drivs av BetterDesk\"", - "agent_show_powered_hint": "Visa BetterDesk-tillskrivningen i nedladdningsportalens sidfot.", - "footer_title": "Sidfot och upphovsrätt", - "footer_desc": "Lägg till en anpassad sidfotrad som visas på inloggningsskärmen och konsolsidofältet.", - "footer_text": "Sidfotstext", - "footer_text_hint": "t.ex. ett upphovsrättsmeddelande eller företagsnamn.", - "show_powered": "Visa \"BetterDesk\"-tillskrivning", - "show_powered_hint": "Visa BetterDesk-namn och version i inloggningssidfoten och sidofältet.", - "custom_css_title": "Anpassad CSS", - "custom_css_desc": "Avancerat: injicera anpassad CSS i konsolen och inloggningssidan.", - "custom_css_hint": "Använd med försiktighet. Max 20 000 tecken." + "clock": { + "title": "Servertid (NTP)", + "check_now": "Kontrollera nu", + "unsynced": "Serverklockan är inte synkroniserad — fakturerbara sessioner kan blockeras" }, - "device_detail": { - "tab_overview": "Översikt", - "tab_tags": "Taggar och anteckningar", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Anslutning", - "section_manage": "Ledning", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Denna enhet är förbjuden", - "no_reason": "Ingen anledning anges", - "tags": "Tags", - "no_tags": "Inga taggar tilldelade den här enheten", - "tag_placeholder": "Ange ett taggnamn...", - "add_tag": "Add", - "tag_exists": "Den här taggen finns redan", - "notes": "Notes", - "notes_placeholder": "Lägg till anteckningar om den här enheten...", - "danger_zone": "Danger Zone", - "action_connect_web": "Anslut via webben", - "action_connect_web_desc": "Anslut via webbläsarens fjärrskrivbord", - "action_native_remote": "BetterDesk Fjärrkontroll", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Desktop-klient", - "action_connect_desktop_desc": "Öppna i skrivbordsklientappen", - "action_change_id_desc": "Ändra enhetsregistrerings-ID", - "action_ban_desc": "Blockera den här enheten från att ansluta", - "action_unban_desc": "Tillåt den här enheten att ansluta igen", - "action_delete_desc": "Ta bort den här enheten permanent", - "tab_hardware": "Hardware", - "tab_metrics": "Mätvärden", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kodningsmöjligheter", - "section_live_metrics": "Livemätvärden", - "section_current_usage": "Aktuell användning", - "section_usage_history": "Användningshistorik", - "os": "Operativsystem", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU-frekvens", - "total_memory": "Totalt minne", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Uppdaterad", - "device_groups": "Grupper", - "no_sysinfo": "Ingen hårdvaruinformation tillgänglig", - "no_sysinfo_hint": "Systeminformation kommer att visas efter att enheten har skickat en sysinfo-rapport", - "no_metrics": "Det finns ingen tillgänglig statistik", - "no_metrics_hint": "Mätvärden visas efter att enheten har skickat hjärtslagsrapporter", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Filer", - "agent_lazy_hint": "Klicka på den här fliken för att ladda livedata från agenten", - "agent_offline": "Agenten är offline", - "agent_timeout": "Agenten svarade inte i tid", - "agent_error": "Det gick inte att läsa in data från agenten", - "service_name": "Name", - "service_display": "Visningsnamn", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktiva fakturerbara sessioner" }, - "inventory": { - "title": "Inventory", - "subtitle": "Maskin- och mjukvaruinventering av hanterade enheter", - "device_id": "Enhets-ID", - "hostname": "Hostname", - "os": "Operativsystem", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Totalt minne", - "memory_used": "Used Memory", - "memory_available": "Tillgängligt minne", - "memory_usage": "Minnesanvändning", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Nätverksgränssnitt", - "software": "Software", - "software_count": "Installerad programvara", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fysiska kärnor", - "logical_cores": "Logiska kärnor", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Tillgänglig", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-adresser", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Samlare som springer", - "collector_stopped": "Samlare stoppas", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Samlas kl", - "no_data": "Inga lagerdata tillgängliga ännu. Klicka på \"Samla nu\" för att samla systeminformation.", - "no_devices": "Inga enheter med lagerdata hittades", - "detail_title": "Detalj för enhetsinventering", - "telemetry": "Telemetry", - "view_detail": "Visa detalj", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Nytt paket", + "name": "Namn", + "included_minutes": "Inkluderade minuter", + "overage_rate": "Överskottsavgift / h", + "currency": "Valuta", + "heading": "Supportpaket", + "prompt_name": "Paketnamn", + "create_title": "Nytt paket för organisation", + "create_submit": "Skapa paket", + "select_org": "Organisation", + "select_org_placeholder": "Välj organisation…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Supportbiljetter och ärendespårning", - "create": "New Ticket", - "edit": "Redigera biljett", - "delete": "Ta bort biljett", - "detail": "Biljettdetaljer", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Tilldelad till", - "created_by": "Skapad av", - "device": "Enhet", - "sla_due": "SLA Due", - "created_at": "Skapad", - "updated_at": "Uppdaterad", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Öppna", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Skriv en kommentar...", - "internal_note": "Intern anteckning (inte synlig för slutanvändare)", - "attachments": "Attachments", - "upload_attachment": "Ladda upp bilaga", - "download": "Download", - "connect_device": "Anslut till enhet", - "no_tickets": "Inga biljetter hittades", - "no_comments": "Inga kommentarer än", - "no_attachments": "Inga bilagor", - "title_required": "Titel krävs", - "delete_confirm": "Är du säker på att du vill ta bort biljett #{id}?", - "delete_success": "Biljetten har raderats", - "created_success": "Biljetten har skapats", - "updated_success": "Biljetten har uppdaterats", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Sök biljetter...", - "assign_to_me": "Tilldela mig", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Öppna", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Aktivitetsövervakning", - "subtitle": "Applikationsanvändning och inaktiv spårning", - "device": "Enhet", - "hostname": "Hostname", - "sessions": "Sessioner", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Toppapplikationer", - "app_name": "Application", - "window_title": "Fönstertitel", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Sessionsräkning", - "total_active": "Totalt aktiv", - "total_idle": "Total Idle", - "detail_count": "Detaljposter", - "no_data": "Ingen aktivitetsdata tillgänglig", - "no_sessions": "Inga sessioner", - "filter_from": "Från", - "filter_to": "Till", - "filter_apply": "Använd filter", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Sök enheter...", - "date_range": "Date Range", - "device_id": "Enhets-ID", - "session_start": "Session start", - "session_end": "Session slut", - "user": "User", - "no_activity": "Ingen aktivitet registrerad", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Inga ansökningar" - }, - "automation": { - "title": "Automatisering", - "subtitle": "Varningsregler, fjärrkommandon och SMTP-konfiguration", - "rules": "Alert Rules", - "rules_subtitle": "Definiera villkor som utlöser aviseringar", - "alerts": "Varningshistorik", - "alerts_subtitle": "Visa och bekräfta utlösta varningar", - "commands": "Fjärrkommandon", - "commands_subtitle": "Skicka kommandon till fjärrenheter", - "smtp": "SMTP-konfiguration", - "smtp_subtitle": "Inställningar för e-postmeddelanden", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Skick Typ", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Målenhet", - "scope_all": "Alla enheter", - "cooldown": "Nedkylning (sekunder)", - "notify_emails": "E-postmeddelanden", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "create_rule": "Skapa regel", - "edit_rule": "Redigera regel", - "delete_rule": "Ta bort regel", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Utlöst vid", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Större än", - "op_gte": "Större eller lika", - "op_lt": "Less than", - "op_lte": "Mindre eller lika", - "op_eq": "Lika med", - "op_neq": "Inte lika med", - "type_cpu_usage": "CPU-användning (%)", - "type_memory_usage": "Minnesanvändning (%)", - "type_disk_usage": "Diskanvändning (%)", - "type_offline_duration": "Offlinelängd (er)", - "type_idle_duration": "Inaktiv varaktighet (s)", - "type_custom": "Custom", - "command_type": "Kommandotyp", - "command_payload": "Kommando/skript", - "command_result": "Result", - "command_status": "Status", - "send_command": "Skicka kommando", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Misslyckades", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Användarnamn", - "smtp_pass": "Lösenord", - "smtp_from": "Från Adress", - "smtp_test": "Testa anslutningen", - "smtp_save": "Spara konfiguration", - "smtp_test_success": "Anslutningen lyckades", - "smtp_test_failed": "Anslutning misslyckades", - "no_rules": "Inga varningsregler har konfigurerats", - "no_alerts": "Inga varningar har utlösts", - "no_commands": "Inga kommandon skickade", - "id_payload_required": "Enhets-ID och nyttolast krävs", - "no_commands_sent": "Inga kommandon har skickats ännu" - }, - "file_transfer": { - "title": "Filöverföring", - "transfers": "Transfers", - "new_transfer": "Ny överföring", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Filstorlek", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Enhet", - "initiated_by": "Initierad av", - "created_at": "Skapad på", - "cancel": "Avbryt", - "cancel_confirm": "Är du säker på att du vill avbryta den här överföringen?", - "download_file": "Ladda ner fil", - "browse_files": "Bläddra bland filer", - "select_file": "Välj Arkiv", - "select_device": "Välj Enhet", - "no_transfers": "Inga filöverföringar", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Misslyckades", - "status_cancelled": "Cancelled", - "bytes_transferred": "Byte överförda", - "chunks": "Chunks", - "transfer_started": "Överföringen startade", - "transfer_completed": "Överföringen slutförd", - "transfer_failed": "Överföringen misslyckades", - "transfer_cancelled": "Överföringen avbruten", - "max_file_size": "Maximal filstorlek: 4 GB", - "error_too_large": "Filen är för stor", - "error_no_device": "Ingen enhet har valts", - "error_no_file": "Ingen fil har valts" - }, - "network": { - "title": "Nätverksövervakning", - "targets": "Övervakning av mål", - "add_target": "Add Target", - "edit_target": "Redigera mål", - "delete_target": "Ta bort mål", - "delete_confirm": "Är du säker på att du vill ta bort det här målet?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Tidsgräns", - "interval": "Intervall (ms)", - "enabled": "Aktiverad", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Kontrollera historik", - "stats": "Statistics", - "total_targets": "Totala mål", - "targets_up": "Targets Up", - "targets_down": "Mål ner", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Nätverksverktyg", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Portkontroll", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Starta Monitor", - "monitor_stop": "Stoppa monitor", - "monitor_running": "Monitorn är igång", - "monitor_stopped": "Monitorn är stoppad", - "no_targets": "Inga övervakningsmål har konfigurerats", - "no_history": "Ingen kontrollhistorik tillgänglig", - "error_code": "Error", - "status_code": "HTTP Statuskod", - "search_targets": "Sök mål...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Kontrollera historik", - "name_host_required": "Namn och värd krävs", - "uptime": "Uptime", - "response_time": "Svarstid", - "avg_response": "Genomsnittlig respons", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Svarstid (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Senaste 24 timmarna", - "last_7d": "Last 7 days", - "last_30d": "Senaste 30 dagarna" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP-policyer", - "add_policy": "Lägg till policy", - "edit_policy": "Redigera policy", - "delete_policy": "Ta bort policy", - "delete_confirm": "Är du säker på att du vill ta bort den här policyn?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB-enhet", - "rule_type_file": "Filhantering", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Leverantörs-ID (VID)", - "pid": "Produkt-ID (PID)", - "serial": "Serienummer", - "device_class": "Enhetsklass", - "drive_type": "Drive Type", - "file_extensions": "Filtillägg", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Arkiv", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Inga DLP-policyer har konfigurerats", - "no_events": "Inga DLP-händelser registrerade", - "stats": "Statistics", - "total_events": "Totalt antal händelser", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Arkiv Händelser", - "device_id": "Enhets-ID", - "policy_matched": "Policy Matchad", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Totala policyer", - "active_policies": "Aktiva policyer", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Policyer", - "tab_events": "Events", - "search_policies": "Sökpolicyer...", - "create_policy": "Skapa policy", - "policy_type": "Policytyp", - "scope": "Scope", - "events_count": "Events", - "search_events": "Sök händelser...", - "event_time": "Event Time", - "device": "Enhet", - "policy": "Policyregel", - "detail": "Detail", - "scope_help": "Kommaseparerade enhets-ID:n, eller lämna tomt för alla", - "scope_all": "Alla enheter", - "active": "Active", - "type_file_type": "Filtyp", - "type_clipboard": "Urklipp", - "type_screen_share": "Skärmdelning", - "type_file_transfer": "Filöverföring", - "policy_desc": "Policybeskrivning", - "type_usb": "USB" + "sessions": { + "device": "Enhet", + "operator": "Operatör", + "duration": "Varaktighet", + "phase": "Fas", + "amount": "Belopp" }, "reports": { - "title": "Reports", - "generate": "Skapa rapport", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Enhetssammanfattning", - "type_activity": "Aktivitetssammanfattning", - "type_security": "Säkerhetsrapport", - "type_tickets": "Biljettrapport", - "type_network": "Nätverksrapport", - "type_inventory": "Inventeringsrapport", - "type_alerts": "Varningsrapport", - "saved": "Sparade rapporter", - "save_report": "Spara rapport", - "delete_report": "Ta bort rapport", - "delete_confirm": "Är du säker på att du vill ta bort den här sparade rapporten?", - "no_saved": "Inga sparade rapporter", - "report_title": "Title", - "created_by": "Skapad av", - "created_at": "Skapad på", - "filters": "Filters", - "date_from": "Från", - "date_to": "Till", - "device_filter": "Enhets-ID", - "generated_at": "Genererad kl", - "section": "Datasektion", - "total_devices": "Totalt antal enheter", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Plattformsdistribution", - "top_applications": "Toppapplikationer", - "total_active": "Total aktiv tid", - "total_idle": "Total vilotid", - "dlp_stats": "DLP-statistik", - "banned_devices": "Förbjudna enheter", - "audit_logs": "Audit Logs", - "ticket_stats": "Biljettstatistik", - "category_distribution": "Kategorifördelning", - "priority_distribution": "Prioritetsfördelning", - "targets_status": "Målstatus", - "os_distribution": "OS-distribution", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Senaste varningar", - "tab_generate": "Skapa rapport", - "tab_saved": "Sparade rapporter", - "type_devices_desc": "Översikt över alla enheter, plattformar och statusar", - "type_activity_desc": "Sammanfattning av appanvändning och vilotid", - "type_security_desc": "Förbjud åtgärder, DLP-händelser och revisionsloggar", - "type_tickets_desc": "Biljettstatistik och SLA-prestanda", - "type_network_desc": "Nätverksövervakningsmål och upptidsdata", - "type_inventory_desc": "Sammanfattning av hård- och mjukvaruinventering", - "type_alerts_desc": "Varningsregler och utlöst varningshistorik", - "report_name": "Report Name", - "format": "Format", - "save": "Spara rapport", - "preview": "Preview", - "download": "Download", - "delete_saved": "Ta bort rapport", - "raw_json": "Raw JSON" + "session": "Supportsession", + "summary": "Sammanfattning", + "date": "Datum" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Redigera hyresgäst", - "delete_tenant": "Ta bort hyresgäst", - "delete_confirm": "Är du säker på att du vill ta bort den här klienten? Alla enhets- och användartilldelningar kommer att tas bort.", - "name": "Name", - "slug": "Slug", - "contact_name": "Kontaktnamn", - "contact_email": "Kontakt E-post", - "max_devices": "Max enheter", - "max_devices_hint": "0 = obegränsat", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Enheter", - "users": "Users", - "assign_device": "Tilldela enhet", - "assign_devices": "Tilldela enheter", - "remove_device": "Ta bort enhet", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Inga hyresgäster har konfigurerats", - "no_devices": "Inga enheter har tilldelats den här hyresgästen", - "no_users": "Inga användare har tilldelats den här hyresgästen", - "stats": "Hyresgäststatistik", - "total_devices": "Totalt antal enheter", - "online_devices": "Online-enheter", - "total_users": "Total Users", - "created_at": "Skapad på", - "updated_at": "Uppdaterad kl", - "slug_exists": "Hyresgästsnäcka finns redan", - "total_tenants": "Totala hyresgäster", - "active_tenants": "Aktiva hyresgäster", - "search": "Sök efter hyresgäster...", - "create_tenant": "Skapa hyresgäst", - "detail": "Hyresgäst detalj", - "contact": "Contact", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Organisationsavtal", + "new": "Tilldela paket", + "org": "Organisation", + "package": "Paket", + "remaining": "Återstående minuter", + "status": "Status", + "actions": "Åtgärder", + "suspend": "Suspendera", + "activate": "Aktivera", + "select_org": "Välj organisation", + "select_package": "Välj paket", + "no_orgs": "Inga organisationer hittades", + "no_packages": "Skapa ett paket först" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Sök efter enhets-ID, värdnamn eller IP...", - "no_registrations": "No registration requests", - "col_device_id": "Enhets-ID", - "col_hostname": "Värdnamn", - "col_platform": "Plattform", - "col_ip": "IP-adress", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Begärd", - "col_actions": "Åtgärder", - "status_pending": "Väntande", - "status_approved": "Godkänd", - "status_rejected": "Avvisad", - "approve_btn": "Godkänn", - "approve_confirm": "Är du säker på att du vill godkänna den här enheten? Den kommer att ta emot serveruppgifter och kan ansluta automatiskt.", - "approved_success": "Enhetsregistreringen har godkänts", - "reject_btn": "Avvisa", - "reject_title": "Avvisa registrering", - "reject_confirm": "Är du säker på att du vill avvisa denna registreringsförfrågan?", - "reject_reason": "Orsak (valfritt)", - "reject_reason_placeholder": "Ange skäl för avslaget...", - "rejected_success": "Enhetsregistrering avvisades", - "delete_confirm": "Är du säker på att du vill ta bort denna registreringspost?", - "deleted_success": "Registreringsposten raderad", - "enrollment_title": "Enhetsregistrering", - "enrollment_subtitle": "Väntande registreringsförfrågningar från BetterDesk stationära klienter", - "enrollment_empty": "Inga väntande registreringsförfrågningar", - "enrollment_approve": "Godkänn", - "enrollment_reject": "Avvisa", - "enrollment_display_name": "Visningsnamn", - "enrollment_display_name_placeholder": "Ange ett namn för den här enheten...", - "enrollment_sync_mode": "Synkroniseringsläge", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Enhetsregistrering godkänd", - "enrollment_rejected_success": "Enhetsregistrering avvisades", - "approve_title": "Godkänn enhet", - "field_name": "Enhetsnamn", - "field_name_placeholder": "Ange ett namn för den här enheten...", - "field_sync_mode": "Synkroniseringsläge", - "sync_standard": "Standard — balanserad synkronisering", - "sync_silent": "Tyst — minimal telemetri", - "sync_turbo": "Turbo — aggressiv synkronisering", - "field_tags": "Taggar", - "field_tags_placeholder": "Kommaseparerade taggar (t.ex. kontor, bärbar)...", - "field_tags_existing": "Befintliga taggar", - "field_tag_add_placeholder": "Lägg till en ny tagg...", - "field_tag_add_btn": "Lägg till", - "field_groups": "Enhetsgrupper", - "field_folder": "Mapp", - "field_folder_none": "Ingen mapp", - "reject_ban_option": "Blockera den här enheten", - "reject_ban_hint": "Enheten blockeras och kan inte skicka nya registreringsförfrågningar.", - "banner_open_mode": "Registrering är öppen — nya RustDesk-klienter registreras utan operatörsgodkännande.", - "banner_locked_mode": "Registrering är låst — endast tokenbaserade enheter kan registreras.", - "enrollment_settings_link": "Registreringsinställningar" + "export": { + "csv": "Exportera CSV", + "pdf": "Exportera PDF", + "sessions_csv": "Exportera sessioner CSV" }, - "backup": { - "title": "Säkerhetskopia", - "desc": "Ladda ner en fullständig säkerhetskopia av din konsolkonfiguration, användare, grupper och inställningar. Go server peer-data ingår när BetterDesk backend är aktiv.", - "restore_title": "Återställ", - "restore_desc": "Ladda upp en tidigare nedladdad säkerhetskopia för att återställa konsolkonfigurationen. Välj vilka avsnitt som ska återställas nedan.", - "stat_users": "Användare", - "stat_settings": "Inställningar", - "stat_folders": "Mappar", - "stat_groups": "Grupper", - "stat_strategies": "Strategier", - "stat_backend": "Backend", - "download": "Ladda ner säkerhetskopia", - "creating": "Skapar säkerhetskopia...", - "download_success": "Säkerhetskopieringen har laddats ned", - "upload": "Ladda upp säkerhetskopia", - "restore_confirm": "Är du säker på att du vill återställa från denna säkerhetskopia? Valda avsnitt kommer att skrivas över.", - "restore_success": "Säkerhetskopieringen har återställts. Vissa ändringar kan kräva att sidan laddas om.", - "restored": "Återställd", - "skipped": "Hoppades över", - "backup_date": "Säkerhetskopieringsdatum", - "opt_settings": "Konsolinställningar", - "opt_branding": "Varumärke / Tema", - "opt_folders": "Enhetsmappar", - "opt_groups": "Användar- och enhetsgrupper", - "opt_addressbooks": "Adressböcker", - "opt_users": "Användarkonton", - "opt_users_warning": "Destruktivt: ersätter ALLA användarkonton med säkerhetskopieringsdata. Du kan vara utloggad.", - "no_file": "Ingen säkerhetskopia har valts", - "invalid_json": "Ogiltig säkerhetskopia: ogiltig JSON", - "invalid_format": "Ogiltig säkerhetskopia: inte en BetterDesk säkerhetskopia", - "stat_database": "Databasmotor", - "stat_keys": "Servernycklar inkluderade", - "stat_env": "Miljöfil", - "stat_uploads": "Varumärkesfiler", - "restart_required": "Vissa återställda komponenter (nycklar / .env / Go-databas) kräver tjänsteomstart.", - "security_warning": "Den här säkerhetskopian innehåller hemligheter. Förvara den säkert och dela den aldrig.", - "restore_warning": "Återställning av hemligheter eller Go-serverdatabasen skriver över serveridentiteten och kräver tjänsteomstart.", - "opt_database": "Databas (alla tabeller)", - "opt_database_hint": "Återimporterar alla konsoldata. Ingen omstart krävs.", - "opt_uploads": "Varumärkesfiler", - "opt_uploads_hint": "Logotyper och uppladdade bilder.", - "opt_secrets": "Servernycklar och hemligheter", - "opt_secrets_warning": "Skriver över Ed25519-serveridentitet, API-nyckel och sessionshemlighet. Kräver tjänsteomstart.", - "opt_env": "Miljöfil (.env)", - "opt_env_warning": "Skriver över SESSION_SECRET, API-nyckel, databas-DSN, portar och TLS-inställningar. Kräver tjänsteomstart.", - "opt_godb": "Go-serverdatabas", - "opt_godb_warning": "Skriver över Go-serverns SQLite-databas (endast SQLite-backend). Kräver tjänsteomstart." + "report": { + "title": "Arbetsrapport", + "subtitle": "Beskriv arbetet som utfördes under denna fjärrsession.", + "category": "Kategori", + "ticket_ref": "Ärendereferens", + "summary": "Utfört arbete", + "skip": "Hoppa över nu", + "submit": "Skicka rapport", + "summary_required": "Sammanfattning krävs", + "saved": "Arbetsrapport sparad" }, - "cdap": { - "device_detail": "CDAP-enhet", - "loading": "Laddar...", - "loading_widgets": "Laddar enhetswidgetar...", - "load_error": "Det gick inte att läsa in enhetsdata", - "connected": "Ansluten", - "disconnected": "Frånkopplad", - "device_offline_msg": "Enheten är för närvarande offline. Widgetvärden kan vara inaktuella.", - "no_widgets": "Inga widgets tillgängliga", - "no_widgets_desc": "Den här enheten har inte registrerat ett CDAP-manifest med widgetdefinitioner.", - "command_log": "Kommandologg", - "clear_log": "Rensa logg", - "confirm_command": "Bekräfta kommando", - "select_option": "Välj", - "cdap_status": "CDAP-status", - "cdap_enabled": "CDAP aktiverad", - "cdap_disabled": "CDAP inaktiverad", - "cdap_devices": "CDAP-enheter", - "cdap_connections": "Aktiva anslutningar", - "send_command": "Skicka kommando", - "command_sent": "Kommandot har skickats", - "command_failed": "Det gick inte att skicka kommandot", - "devices_title": "CDAP-enheter", - "devices_subtitle": "Anslutna enheter via Custom Device Application Protocol", - "stat_connected": "Ansluten", - "stat_port": "Port", - "search_devices": "Sök enheter...", - "no_devices": "Inga enheter anslutna", - "no_devices_desc": "Inga CDAP-enheter är för närvarande anslutna. Enheter kommer att visas här när de ansluter till gatewayen.", - "gateway_disabled": "CDAP Gateway inaktiverad", - "gateway_disabled_desc": "Aktivera CDAP-gatewayen genom att ställa in CDAP_ENABLED=true i serverkonfigurationen.", - "gateway_active": "Aktiv", - "toggle_enable": "Aktivera CDAP", - "toggle_disable": "Inaktivera CDAP", - "enabled_restart": "CDAP aktiverad. Serverns omstart krävs för att tillämpa ändringar.", - "disabled_restart": "CDAP inaktiverad. Serverns omstart krävs för att tillämpa ändringar.", - "widgets": "CDAP-kontrollfält", - "type_all": "Alla", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS-agent", - "type_network": "Nätverk", - "type_camera": "Kamera", - "type_custom": "Anpassad", - "active_alerts": "Aktiva varningar", - "alert_fired": "Varning utlöst", - "alert_cleared": "Varningen raderades", - "no_alerts": "Inga aktiva varningar", - "connect_terminal": "Anslut terminal", - "table_search": "Sök...", - "just_now": "Just nu", - "terminal_connecting": "Ansluter till enheten...", - "terminal_disconnected": "Frånkopplad", - "terminal_error": "Terminalanslutningen misslyckades", - "linked_devices": "Länkade enheter", - "link_device": "Länka enhet", - "unlink_device": "Avlänka", - "no_linked_devices": "Inga länkade enheter", - "unlink_confirm": "Är du säker på att du vill ta bort länken till den här enheten?", - "link_prompt": "Ange Peer ID för att länka till den här enheten:", - "connect_desktop": "Anslut skrivbordet", - "connect_video": "Anslut Stream", - "connect_files": "Bläddra bland filer", - "connect_audio": "Anslut ljud", - "upload_file": "Ladda upp", - "desktop_connecting": "Ansluter...", - "video_connecting": "Ansluter...", - "files_connecting": "Ansluter...", - "audio_connecting": "Ansluter...", - "audio_streaming": "Strömmar", - "clipboard_in": "Urklipp mottagen", - "clipboard_out": "Urklipp har skickats", - "monitor_select": "Välj Monitor", - "keyframe_request": "Begär Keyframe", - "quality_auto": "Autokvalitet" + "empty": { + "packages": "Inga paket ännu. Skapa ett med knappen ovan.", + "contracts": "Inga organisationsavtal ännu. Tilldela ett paket till en organisation.", + "sessions": "Inga fakturerbara sessioner registrerade ännu.", + "reports": "Inga arbetsrapporter inskickade ännu." }, - "desktop": { - "switch_mode": "Skrivbordsläge", - "console_mode": "Konsolläge", - "loading": "Laddar...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Stäng", - "widgets_mode": "Kontrollfältsläge", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Lägg till widget", - "remove_widget": "Ta bort widget", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Konfigurera", - "search_widgets": "Sök widgets...", - "cat_monitoring": "Monitoring", - "cat_devices": "Enheter", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Skriv anteckningar här...", - "search_placeholder": "Sök efter enheter, sidor, inställningar...", - "search_pages": "Pages", - "search_devices": "Enheter", - "search_no_results": "No results", - "exit_desktop": "Avsluta skrivbordsläge", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Enhetsstatus", - "widget_server_health": "Server info", - "widget_system_stats": "Enhetsmätare", - "widget_device_list": "Enhetslista", - "widget_quick_actions": "Snabba åtgärder", - "widget_recent_activity": "Senaste aktivitet", - "widget_notes": "Notes", - "widget_network_monitor": "Nätverksövervakning", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP-enheter", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Enhetsrutnät", - "widget_multi_gauge": "Servermätare", - "widget_weekly_chart": "Veckoaktivitet", - "widget_quick_controls": "Snabbkontroller", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Anslutningsstatistik", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Användarsessioner", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Inga enheter", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Öppna", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Ställ in URL i config", - "label_server_uptime": "Serverns upptid", - "label_merged_info": "Sammanfogad till Server Info-widget", - "label_with_notes": "Med anteckningar", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Totalt antal enheter", - "label_throughput": "Throughput", - "label_active_relays": "Aktiva reläer", - "label_total_relayed": "Totalt reläat", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Filtrera enheter...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Inga CDAP-enheter", - "action_add_widget": "Lägg till widget", - "label_merged_server_info": "Sammanfogad till Server Info-widget", - "wp_images": "Images", - "wp_colors": "Solida färger", - "wp_custom_color": "Anpassad färg", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Bakgrundsbilder är inte installerade på denna server.", - "wp_download_hint": "Placera PNG-bilder i katalogen public/wallpapers/ för att möjliggöra val av bakgrundsbild.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Processövervakare", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Databasstatistik", - "widget_docker_containers": "Docker Behållare", - "widget_shell_command": "Shell kommando", - "widget_device_map": "Enhetskarta", - "widget_remote_connect": "Fjärranslutning", - "label_no_online": "Inga onlineenheter", - "label_no_events": "Inga evenemang idag", - "label_event_title": "Händelsens titel:", - "label_no_data": "Inga data tillgängliga", - "label_download_speed": "Ladda ner Speed", - "label_latency": "Latency", - "label_server": "Serverinstans", - "label_run_test": "Run Test", - "label_testing": "Testar...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Inga containrar", - "label_docker_unavailable": "Docker inte tillgänglig", - "label_no_command": "Inget kommando konfigurerat", - "label_no_output": "Ingen utgång ännu", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Spara förinställning", - "label_load_preset": "Load Preset", - "label_preset_name": "Förinställt namn:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Automatiskt arrangera", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 kolumner (lika)", - "label_2col_wide": "2 kolumner (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widgetgrupp", - "ungroup_widgets": "Dela upp widgets", - "group_widgets": "Gruppera valda widgetar", - "snap_layouts": "Snap layouter", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Snäpp upp till vänster", - "snap_top_right": "Snäpp upp till höger", - "snap_bottom_left": "Snäpp nere till vänster", - "snap_bottom_right": "Snäpp nere till höger", - "aero_shake": "Skaka för att minimera andra", - "zone_resize": "Dra kantlinjen för att ändra storlek på zoner", - "zone_borders": "Dragbara zongränser", - "app_drawer": "Applications", - "search_apps": "Sök appar...", - "edit_shortcuts": "Redigera genvägar", - "widgets": "Kontrollfält", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Tilldela befintligt paket", + "submit": "Tilldela" }, - "desktop_login": { - "click_to_sign_in": "Klicka var som helst eller tryck på en tangent för att logga in", - "username_placeholder": "Användarnamn", - "password_placeholder": "Lösenord", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Tvåfaktorsautentisering", - "totp_subtitle": "Ange den sexsiffriga koden från din autentiseringsapp", - "back_to_login": "Tillbaka till inloggning", - "fill_all_fields": "Vänligen fyll i alla fält", - "invalid_credentials": "Ogiltigt användarnamn eller lösenord", - "invalid_code": "Ogiltig verifieringskod", - "enter_6_digits": "Ange alla 6 siffrorna", - "network_error": "Network error — check your connection", - "session_expired": "Sessionen har löpt ut. Logga in igen." - }, - "tokens": { - "title": "Enhetstokens", - "subtitle": "Hantera registreringstokens för automatisk enhetsadministration", - "enrollment_mode": "Registreringsläge", - "mode_open": "Öppna", - "mode_open_desc": "Alla enheter kan registreras utan en token", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Totala tokens", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Sök tokens...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Bulk generera", - "create": "Skapa token", - "edit": "Redigera token", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Skapad", - "actions": "Actions", - "name_placeholder": "t.ex. Kontors-PC-batch", - "max_uses": "Max Uses", - "max_uses_hint": "0 = obegränsat", - "expires_in": "Expires In", - "no_expiration": "Inget utgångsdatum", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Valfri anmärkning om denna token...", - "count": "Count", - "count_range": "Antal tokens att generera (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Token skapad", - "tokens_generated": "Tokens genererade", - "copy_warning": "Kopiera token nu. Den kommer inte att visas igen.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Är du säker på att du vill återkalla denna token? Enheter som redan är registrerade hos den kommer inte att påverkas.", - "revoked_success": "Token har återkallats", - "no_tokens": "Inga tokens hittades", - "expired": "Expired", - "never": "Never", - "save": "Spara", - "cancel": "Avbryt", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Nästa", - "prev": "Previous", - "skip": "Skip", - "finish": "Avsluta", - "close": "Stäng", - "step_of": "{current} av {total}", - "console_sidebar_title": "Sidofält för navigering", - "console_sidebar_text": "Få tillgång till alla moduler härifrån. Klicka på valfri ikon för att navigera till det avsnittet. Sidofältet anpassar sig efter din skärmstorlek.", - "console_expand_title": "Expandera sidofältet", - "console_expand_text": "Klicka här för att expandera sidofältet och se fullständiga etiketter för alla navigeringsobjekt. Klicka igen för att komprimera.", - "console_search_title": "Snabbsökning", - "console_search_text": "Sök snabbt efter enheter, inställningar eller åtgärder. Tryck på Ctrl+K för kortkommando.", - "console_dashboard_title": "Instrumentbräda", - "console_dashboard_text": "Ditt centrala nav som visar serverstatus, onlineenheter och snabba åtgärder. Håll ett öga på viktiga mätvärden på ett ögonblick.", - "console_devices_title": "Enhetshantering", - "console_devices_text": "Visa, sök och hantera alla anslutna enheter. Filtrera efter status, tilldela taggar och konfigurera individuella enhetsinställningar.", - "console_settings_title": "Inställningar", - "console_settings_text": "Konfigurera serverbeteende, säkerhetsalternativ, varumärke och användarhantering. Anpassa BetterDesk för att passa dina behov.", - "console_desktop_title": "Skrivbordsläge", - "console_desktop_text": "Byt till skrivbordsläge för en arbetsyta med fönster med widgets. Perfekt för multi-tasking och övervakning av instrumentpaneler.", - "console_complete_title": "Du är redo!", - "console_complete_text": "Utforska sidofältskategorierna för att upptäcka alla funktioner. Klicka på hjälpikonen när som helst för att starta om den här guiden.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Det övre fältet visar klockan, snabbkontroller och åtkomst till applådan. Klicka på rutnätsikonen för att bläddra bland alla appar.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Öppna applådan för att söka och starta valfri konsolfunktion som ett flytande fönster. Appar är organiserade efter kategori.", - "desktop_widgets_title": "Kontrollfält", - "desktop_widgets_text": "Din anpassningsbara arbetsyta. Widgetar visar liveinformation och ger snabb åtkomst till funktioner. Dra för att ordna om.", - "desktop_add_widget_title": "Lägg till widgets", - "desktop_add_widget_text": "Klicka här för att bläddra bland tillgängliga widgets. Välj mellan övervakningsskärmar, enhetslistor, anteckningar och mer.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Öppna appar visas här. Klicka för att fokusera eller minimera fönster. Håll muspekaren över ikonerna för att se appetiketter.", - "desktop_snap_title": "Snap layouter", - "desktop_snap_text": "Dra fönster till skärmkanterna för att fästa dem på plats, eller håll muspekaren över maximera-knappen för layoutförinställningar. Prova Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Appar öppnas i dragbara fönster som kan ändras storlek. Minimera, maximera eller stäng från namnlisten. Windows lager ovanför widgets.", - "desktop_search_title": "Snabbsökning", - "desktop_search_text": "Sök bland enheter, sidor och inställningar. Tryck på Ctrl+K var som helst för att öppna sökningen direkt.", - "desktop_complete_title": "Skrivbordsläge redo!", - "desktop_complete_text": "Prova att öppna appar från lådan och ordna fönster sida vid sida. Använd widgetförinställningar för snabba instrumentpanelslayouter.", - "devices_folders_title": "Enhetsmappar", - "devices_folders_text": "Organisera enheter i mappar. Klicka på en mapp för att filtrera listan. Högerklicka för att byta namn eller ta bort.", - "devices_search_title": "Sök och filtrera", - "devices_search_text": "Sök efter ID, värdnamn eller plattform. Använd statuspiller för att endast visa online, offline eller alla enheter.", - "devices_table_title": "Enhetslista", - "devices_table_text": "Klicka på valfri enhetsrad för mer information. Använd kebabmenyn till höger för snabba åtgärder som att ansluta, redigera taggar eller ta bort.", - "devices_complete_title": "Enhetshantering redo!", - "devices_complete_text": "Dra enheter mellan mappar för att organisera dem. Dubbelklicka på en enhet för att öppna dess detaljpanel.", - "settings_tabs_title": "Inställningar Kategorier", - "settings_tabs_text": "Navigera mellan Allmänt, Säkerhet, Utseende och andra konfigurationssektioner.", - "settings_content_title": "Konfiguration", - "settings_content_text": "Varje avsnitt innehåller specifika server- och konsolinställningar. Ändringar sparas när du klickar på Spara.", - "settings_complete_title": "Inställningar Översikt", - "settings_complete_text": "Kontrollera säkerhetsinställningar för 2FA, API nycklar och användarhantering. Besök Appearance för att anpassa konsolens utseende.", - "help": "Hjälp & handledning", - "tour_console": "Konsoltur", - "tour_desktop": "Rundtur i skrivbordsläge", - "tour_devices": "Enhetsrundtur", - "tour_settings": "Inställningar rundtur", - "reset_all": "Återställ alla självstudier", - "tour_remote": "Fjärrtur", - "tour_organization": "Organisationsinställningar", - "tour_cdap": "CDAP Översikt", - "tour_chat": "Grunderna i chatten", - "remote_toolbar_title": "Fjärrverktygsfält", - "remote_toolbar_text": "Få åtkomst till skärmkontroller, klippbordssynkronisering, specialtangenter och kvalitetsinställningar från verktygsfältet. Växla helskärm med F11.", - "remote_canvas_title": "Fjärrdisplay", - "remote_canvas_text": "Detta är fjärrskärmen. Klicka inuti för att börja styra fjärrenheten. Mus- och tangentbordsinmatning vidarebefordras automatiskt.", - "remote_clipboard_title": "Synkronisera urklipp", - "remote_clipboard_text": "Kopiera och klistra in text mellan din dator och fjärrenheten. Använd Ctrl+C / Ctrl+V som vanligt medan du fokuserar på fjärrskärmen.", - "remote_complete_title": "Fjärrsession redo!", - "remote_complete_text": "Använd knapparna i verktygsfältet för specialtangenter (Ctrl+Alt+Del, PrintScreen) och bildskärmsväxling. Tryck på Escape eller klicka på Koppla från f��r att avsluta sessionen.", - "org_overview_title": "Organisationer", - "org_overview_text": "Organisationer låter dig gruppera användare, enheter och policyer. Varje organisation har sin egen administratör, operatörer och inställningar.", - "org_create_title": "Skapa organisation", - "org_create_text": "Klicka här för att skapa en ny organisation. Ange ett namn, snigel och valfri beskrivning. Du blir ägare till den nya organisationen.", - "org_members_title": "Hantera medlemmar", - "org_members_text": "Bjud in användare via e-post, tilldela roller (admin, operatör, användare) och hantera åtkomst. Medlemmar kan se enheter som tilldelats deras organisation.", - "org_devices_title": "Tilldela enheter", - "org_devices_text": "Lägg till enheter i organisationen. Enheter som tilldelas här kommer att ärva organisationens policyer och vara synliga för dess medlemmar.", - "org_policies_title": "Organisationspolicyer", - "org_policies_text": "Ställ in säkerhetspolicyer som lösenordskrav, sessionstimeout, 2FA-tillämpning och enhetsregistreringsregler för organisationen.", - "org_complete_title": "Organisationskonfigurationen är klar!", - "org_complete_text": "Bjud in ditt team och tilldela enheter för att börja använda organisationsstyrd hantering. Reglerna gäller automatiskt för alla medlemmar.", - "cdap_devices_title": "CDAP-enheter", - "cdap_devices_text": "Visa alla anslutna CDAP-enheter — IoT-sensorer, PLC:er, bryggor och anpassade agenter. Gröna indikatorer visar liveanslutninar.", - "cdap_widgets_title": "Widgetpanel", - "cdap_widgets_text": "Widgetar visar realtidsdata från enheter. Mätare, knappar, lysdioder, diagram — varje widgettyp visualiserar en annan typ av data.", - "cdap_commands_title": "Skicka kommandon", - "cdap_commands_text": "Interagera med enheter genom att skicka kommandon. Kommandologgen sparar historiken.", - "cdap_terminal_title": "Enhetsterminal", - "cdap_terminal_text": "Öppna en terminalsession till CDAP-agenter för avancerad diagnostik eller manuell konfiguration.", - "cdap_complete_title": "CDAP-översikt klar!", - "cdap_complete_text": "Utforska enhetswidgetar, skicka kommandon och använd terminal eller filbläddrare för djupare hantering.", - "chat_contacts_title": "Kontakter och grupper", - "chat_contacts_text": "Se dina kontakter och chattgrupper. Klicka på valfri kontakt för att öppna en konversation. Gröna prickar indikerar onlineanvändare.", - "chat_send_title": "Skicka meddelanden", - "chat_send_text": "Skriv ditt meddelande och tryck på Enter för att skicka. Meddelanden krypteras från början till slut när båda parter stöder E2E.", - "chat_file_title": "Dela filer", - "chat_file_text": "Klicka på bifogad fil för att dela filer. Filer är krypterade och kan vara upp till 50 MB.", - "chat_complete_title": "Chatt redo!", - "chat_complete_text": "Chatta med operatörer och slutanvändare i realtid. Skapa grupper för teamkommunikation. Alla meddelanden stöder läskvitton.", - "disable_tutorials": "Inaktivera självstudier", - "enable_tutorials": "Aktivera självstudier" - }, - "help_request": { - "title": "Hjälpförfrågningar", - "subtitle": "Hantera inkommande hjälpförfrågningar från skrivbordsklienter", - "new_request": "Ny hjälpbegäran", - "device": "Enhet", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Inga hjälpförfrågningar", - "notification": "Hjälpbegäran mottagen från", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organisationer", - "create": "Skapa organisation", - "edit": "Redigera organisation", - "detail": "Organisationsdetaljer", - "name": "Name", - "slug": "Slug (URL-säker)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Enheter", - "invitations": "Invitations", - "settings": "Inställningar", - "add_user": "Add User", - "assign_device": "Tilldela enhet", - "create_invitation": "Skapa inbjudan", - "delete_confirm": "Vill du ta bort den här organisationen? Detta tar bort alla associerade användare, enheter och inställningar.", - "no_orgs": "Inga organisationer än", - "no_orgs_hint": "Skapa din första organisation för att börja hantera enheter och användare.", - "connection_policy": "Anslutningspolicy", - "allow_file_transfer": "Tillåt filöverföring", - "allow_clipboard": "Tillåt Urklipp", - "max_session_duration": "Max sessionslängd (min)", - "role_owner": "Owner", - "role_admin": "Administratör", - "role_operator": "Operator", - "role_user": "Medlem", - "username": "Användarnamn", - "password": "Lösenord", - "display_name": "Visningsnamn", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Enhets-ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Tilldelad användare", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Inga användare i den här organisationen.", - "no_devices": "Inga enheter har tilldelats den här organisationen.", - "no_invitations": "Inga inbjudningar.", - "user_added": "User added", - "user_removed": "Användaren har tagits bort", - "user_updated": "Användarrollen uppdaterad", - "device_assigned": "Enhet tilldelad", - "device_unassigned": "Enheten har inte tilldelats", - "invitation_created": "Inbjudan skapad", - "settings_saved": "Inställningar sparade", - "org_deleted": "Organisation raderad", - "confirm_remove_user": "Vill du ta bort den här användaren från organisationen?", - "confirm_unassign_device": "Ta bort tilldelningen av den här enheten från organisationen?", - "confirm_delete_org": "Vill du ta bort den här organisationen och all tillhörande data?", - "edit_role": "Redigera roll", - "raw_settings": "Raw-inställningar", - "key": "Key", - "value": "Value", - "save": "Spara inställningar", - "policy_unattended": "Obevakad (omedelbar)", - "policy_attended": "Deltog (med bekräftelse)", - "policy_ask": "Always ask", - "expires_hours": "Utgångsdatum (timmar)", - "loading_failed": "Det gick inte att läsa in organisationsdata", - "name_slug_required": "Namn och snigel krävs", - "org_created": "Organisation skapad", - "org_updated": "Organisationen uppdaterad", - "create_new_user": "Skapa nytt", - "add_existing_user": "Lägg till befintliga", - "none_available": "none", - "select_user": "Välj användare", - "org_role": "Organisationsroll", - "link_user_hint": "Den valda användaren kommer att länkas till den här organisationen med deras serverkontouppgifter.", - "no_available_users": "Alla serveranvändare är redan länkade till denna organisation.", - "user_linked": "Användare länkad till organisation" - }, - "chat": { - "e2e_enabled": "End-to-end krypterad", - "e2e_establishing": "Etablerar säker kanal...", - "e2e_established": "Säker kanal etablerad", - "e2e_unsupported": "E2E-kryptering stöds inte i den här webbläsaren", - "typing_indicator": "skriver...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Arkiv", - "file_too_large": "Filen är för stor (max 50 MB)", - "file_encrypted": "Krypterad filöverföring", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Säkerhetsnycklar roterade", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Grupper", - "no_contacts": "Inga kontakter än", - "no_groups": "Inga grupper än", - "no_messages": "Inga meddelanden än", - "no_results": "Inga resultat hittades", - "select_conversation": "Välj en konversation för att börja chatta", - "type_message": "Skriv ett meddelande...", - "send": "Skicka", - "attach_file": "Bifoga fil", - "emoji": "Emoji", - "search_messages": "Sök meddelanden", - "create_group": "Skapa grupp", - "group_name": "Gruppnamn", - "group_members": "Medlemmar", - "cancel": "Avbryt", - "create": "Skapa", - "members": "medlemmar", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Sök kontakter och meddelanden", - "select_conversation_hint": "Välj en konversation för att visa meddelanden", - "info": "Info", - "group_name_placeholder": "Ange gruppnamn" - }, - "toast": { - "device_connected": "Enhet ansluten", - "device_disconnected": "Enheten frånkopplad", - "session_started": "Fjärrsession startade", - "session_ended": "Fjärrsessionen avslutades", - "file_upload_complete": "Filuppladdningen är klar", - "settings_saved": "Inställningar sparade", - "error_generic": "Ett fel uppstod", - "connection_lost": "Anslutning förlorad", - "reconnecting": "Återansluter..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Administratörsverktyg och diagnostiska verktyg", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Skicka", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Skriv in text...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Gå Server", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Kontrollera värdens tillgänglighet och latens", - "tcp_title": "TCP Portkontroll", - "tcp_desc": "Testa TCP-portanslutningen", - "ssl_title": "SSL-inspektör", - "ssl_desc": "Inspektera SSL/TLS-certifikatdetaljer", - "http_title": "HTTP Hälsokontroll", - "http_desc": "Verifiera HTTP slutpunktsstatus", - "dns_title": "DNS Lookup", - "dns_desc": "Lös värdnamn till IP-adress", - "whois_title": "DNS Records", - "whois_desc": "Fråga A, AAAA, MX, TXT, NS-poster", - "speed_title": "Speed Test", - "speed_desc": "Mät nedladdningsbandbredd", - "run_speed_test": "Kör hastighetstest", - "wol_title": "Wake-on-LAN", - "wol_desc": "Skicka magiskt paket för att väcka en enhet", - "wol_sent": "Magiskt paket skickat", - "hash_title": "Hashberäkning", - "hash_desc": "Generera kryptografiska hash", - "password_title": "Lösenordsgenerator", - "password_desc": "Skapa ett säkert slumpmässigt lösenord", - "jwt_title": "JWT Decoder", - "jwt_desc": "Avkoda och inspektera JSON webbtokens", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Koda eller avkoda Base64-data", - "url_title": "URL Encoder", - "url_desc": "Koda eller avkoda URL-komponenter", - "processes_title": "Processlista", - "processes_desc": "Visa pågående systemprocesser", - "disk_title": "Disk Usage", - "disk_desc": "Visa användningen av diskpartitionen", - "db_title": "Databasstatistik", - "db_desc": "Visa databastabellstatistik", - "docker_title": "Docker Behållare", - "docker_desc": "Visa körande Docker-behållare", - "logs_title": "Log Viewer", - "logs_desc": "Visa senaste loggutdata", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Gäller från", - "valid_to": "Gäller till", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Inga data tillgängliga", - "no_docker": "Inga Docker-behållare hittades eller Docker inte tillgänglig", - "no_logs": "Inga logglinjer tillgängliga" - }, - "policies": { - "title": "Organisationspolicyer", - "subtitle": "Hantera säkerhets-, anslutnings- och funktionspolicyer för dina organisationer", - "select_org": "Organisation", - "select_org_placeholder": "Välj en organisation...", - "select_org_first": "Välj en organisation för att visa policygranskningsloggen.", - "configured": "Konfigurerad", - "connection_title": "Anslutningspolicy", - "connection_desc": "Styr hur fjärrsessioner upprättas", - "connection_mode": "Anslutningsläge", - "mode_attended": "Deltog (kräver användargodkännande)", - "mode_unattended": "Obevakad (tillåt alltid)", - "mode_ask": "Fråga alltid", - "max_session": "Max sessionslängd (minuter)", - "idle_lock": "Timeout för tomgångslås (minuter)", - "wallpaper_policy": "Bakgrund under session", - "wallpaper_show": "Visa", - "wallpaper_hide_session": "Göm dig under sessionen", - "wallpaper_hide_always": "Dölj alltid", - "features_title": "Funktionspolicy", - "features_desc": "Aktivera eller inaktivera specifika funktioner för enheter", - "allow_file_transfer": "Tillåt filöverföring", - "allow_clipboard": "Tillåt Clipboard Sync", - "allow_audio": "Tillåt ljudströmning", - "allow_recording": "Tillåt sessionsinspelning", - "security_title": "Säkerhetspolicy", - "security_desc": "Genomför säkerhetskrav för organisationsenheter", - "require_2fa": "Kräv 2FA för obevakad åtkomst", - "password_min_length": "Minsta lösenordslängd", - "password_require_special": "Kräv specialtecken", - "password_max_age": "Lösenords högsta ålder (dagar, 0=aldrig)", - "allowed_operators": "Tillåtna operatörsroller (kommaseparerade)", - "network_title": "Nätverkspolicy", - "network_desc": "Styr reläservrar och direktanslutningar", - "block_direct_p2p": "Block Direct P2P (kraftrelä)", - "allowed_relays": "Tillåtna reläservrar (en per rad)", - "ip_allowlist": "IP-tillåtelselista (CIDR, en per rad)", - "update_title": "Uppdatera policy", - "update_desc": "Kontrollera automatiska uppdateringar och uppdateringskanaler", - "auto_update": "Aktivera automatisk uppdatering", - "update_channel": "Uppdatera kanal", - "audit_title": "Policyändringar", - "audit_desc": "Senaste policyändringshistorik", - "no_audit": "Inga policyändringar har registrerats.", - "save_success": "Policyn har sparats", - "save_failed": "Det gick inte att spara policyn", - "load_failed": "Det gick inte att läsa in policyer", - "block_direct_p2p_hint": "Gäller enheter i den här organisationen." - }, - "attestation": { - "title": "Enhetsbekräftelse", - "subtitle": "Övervaka enhetsidentitetsverifiering och hårdvarufingeravtryck", - "verified": "Verified", - "pending": "Pending", - "failed": "Misslyckades", - "device_list": "Enhetslista", - "device_list_desc": "Hårdvarufingeravtryck och identitetsverifieringsstatus", - "col_device": "Enhets-ID", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Inga intygsposter hittades.", - "verify_success": "Enhet markerad som verifierad", - "verify_failed": "Det gick inte att verifiera enheten", - "revoke_success": "Enhetsbekräftelse återkallad", - "revoke_failed": "Det gick inte att återkalla intyget" - }, - "fleet": { - "title": "Flottstyrning", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Arbetsflödesbyggare", - "tab_compliance": "Compliance", - "res_title": "Resurskartläggning", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Nätverksenhet", - "res_type_dns": "DNS-post", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Lägg till resurs", - "res_name": "Resursnamn", - "res_type": "Type", - "res_address": "Adress/sökväg", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organisation", - "res_scope_group": "Grupp", - "res_scope_device": "Enhet", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Inga resurser hittades. Klicka på \"Lägg till resurs\" för att skapa en.", - "res_confirm_delete": "Är du säker på att du vill ta bort den här resursen?", - "task_title": "Uppgiftsschemaläggare", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Misslyckades", - "task_search": "Search tasks…", - "task_create": "Skapa uppgift", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Uppdatering", - "task_type_restart": "Starta om", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Enhets-ID eller gruppnamn, kommaseparerade", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Schemavärde", - "task_script": "Skript / Kommando", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Inga uppgifter hittades. Klicka på \"Skapa uppgift\" för att komma igång.", - "task_confirm_delete": "Är du säker på att du vill ta bort den här uppgiften?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Arbetsflödesbyggare", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Spara", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Välj en nod för att redigera dess egenskaper.", - "builder_node_trigger_manual": "Manuell avtryckare", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Händelseutlösare", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Starta om Svc", - "builder_node_action_file_deploy": "Distribuera fil", - "builder_node_action_message": "Skicka meddelande", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Skicka varning", - "builder_node_result_chain": "Kedjans arbetsflöde", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Arbetsflödesnamn:", - "comp_title": "Programvaruöverensstämmelse", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Enhet", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Köra automatisk sanering på den här enheten?", - "comp_no_data": "Inga efterlevnadsdata tillgängliga. Kör en skanning för att komma igång.", - "save": "Spara", - "cancel": "Avbryt", - "close": "Stäng", - "edit": "Redigera", - "delete": "Ta bort", - "actions": "Actions", - "all_orgs": "Alla organisationer", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Nätverksenhet", - "type_dns": "DNS-post", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Lägg till resurs", - "edit_resource": "Redigera resurs", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adress/sökväg", - "scope_org": "Organisation", - "scope_group": "Grupp", - "scope_device": "Enhet", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Är du säker på att du vill ta bort det här objektet?", - "all_statuses": "Alla statusar", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Misslyckades", - "search_tasks": "Search tasks�", - "create_task": "Skapa uppgift", - "edit_task": "Redigera uppgift", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Fildistribution", - "task_type_registry": "Registry", - "target_devices": "Målenheter", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Skript / Kommando", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Laddar", - "no_output": "Ingen utgång tillgänglig", - "error_loading": "Det gick inte att ladda data", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuell avtryckare", - "node_schedule": "Schedule", - "node_event": "Händelseutlösare", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Starta om Svc", - "node_file_deploy": "Distribuera fil", - "node_send_message": "Skicka meddelande", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Skicka varning", - "node_chain": "Kedjans arbetsflöde", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Alla organisationer", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Enhet", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Köra automatisk sanering på den här enheten?" - }, - "scaling": { - "title": "Skalning och relähantering", - "tab_overview": "Översikt", - "tab_relays": "Relay Nodes", - "tab_rules": "Tilldelningsregler", - "tab_capacity": "Kapacitetsplanering", - "arch_title": "Nätverksarkitektur", - "arch_loading": "Laddar arkitekturdiagram...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Totalt antal enheter", - "stat_active_sessions": "Aktiva sessioner", - "stat_bandwidth": "Total bandbredd", - "relay_health": "Relähälsa", - "no_relays": "Inga relänoder konfigurerade. Lägg till din första relänod för att fördela belastningen.", - "relay_search": "Sök reläer...", - "relay_add": "Lägg till relänod", - "relay_edit": "Redigera relänod", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Enheter", - "col_sessions": "Sessioner", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Målrelä", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Aktiverad", - "status_disabled": "Inaktiverad", - "confirm_delete_relay": "Är du säker på att du vill ta bort denna relänod?", - "confirm_delete_rule": "Är du säker på att du vill ta bort den här tilldelningsregeln?", - "rules_hint": "Tilldelningsregler bestämmer vilken reläserver som hanterar specifika enhetsgrupper. Regler utvärderas efter prioritet (lägsta först).", - "rule_add": "Add Rule", - "rule_edit": "Redigera regel", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Enhetsgrupp", - "match_tag": "Enhetstagg", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Primär reservnod", - "fallback_nearest": "Närmaste relä", - "relay_max_sessions": "Max sessioner", - "relay_max_bandwidth": "Max bandbredd (Mbps)", - "cap_tiers": "Kapacitetsnivåer", - "cap_loading": "Laddar kapacitetsdata...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Inga rekommendationer tillgängliga.", - "cap_planning": "Infrastrukturplanering", - "cap_config": "Konfiguration", - "cap_max_devices": "Max enheter", - "cap_max_sessions": "Max sessioner", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Enhetens kapacitet", - "cap_tier_sessions": "Sessionskapacitet", - "cap_tier_bandwidth": "Bandbreddskapacitet", - "cap_single_sqlite": "Enskild server (SQLite)", - "cap_single_pg": "Enskild server (PostgreSQL)", - "cap_master_3": "Master + 3 reläer", - "cap_master_10": "Master + 10 reläer", - "rec_no_relays": "Inga relänoder konfigurerade. Överväg att lägga till relänoder för bättre prestanda och redundans.", - "rec_devices_high": "Enhetsanvändningen är hög. Överväg att lägga till fler relänoder för att fördela belastningen.", - "rec_sessions_high": "Sessionskapaciteten närmar sig sin gräns. Överväg att uppgradera reläinfrastruktur.", - "rec_cpu_high": "Vissa relänoder rapporterar hög CPU-användning. Överväg lastbalansering eller kapacitetsuppgraderingar.", - "rec_all_good": "Alla system fungerar inom normala parametrar. Ingen åtgärd krävs.", - "save": "Spara", - "cancel": "Avbryt", - "edit": "Redigera", - "delete": "Ta bort", - "close": "Stäng", - "no_rules": "Inga tilldelningsregler.", - "relays_info_banner": "Denna lista är informativ. Reläservrarna som faktiskt används av klienter konfigureras via miljövariabeln RELAY_SERVERS på BetterDesk-servern.", - "relay_name_address_required": "Namn och adress krävs.", - "relay_save_failed": "Det gick inte att spara relänoden.", - "relay_delete_failed": "Det gick inte att ta bort relänod.", - "relay_saved": "Relänod sparad.", - "relay_deleted": "Relänod raderad.", - "rule_name_value_required": "Regelnamn och matchningsvärde krävs.", - "rule_save_failed": "Det gick inte att spara regeln.", - "rule_delete_failed": "Det gick inte att ta bort regeln.", - "rule_saved": "Regeln sparad.", - "rule_deleted": "Regel raderad." - }, - "cross_platform": { - "title": "Cross-Platform-kompatibilitet", - "tab_matrix": "Kompatibilitetsmatris", - "tab_distribution": "Distribution", - "tab_protocols": "Protokoll", - "tab_limitations": "Begränsningar", - "matrix_hint": "Funktionsstödsmatris över alla plattformar som stöds. Grön = fullt stöd, gul = delvis, grå = ej tillgänglig, blå = planerad.", - "col_feature": "Funktion", - "legend_full": "Fullt stöd", - "legend_partial": "Partiellt stöd", - "legend_none": "Ej tillgängligt", - "legend_planned": "Planerad", - "platform_breakdown": "Plattformsuppdelning", - "arch_breakdown": "Arkitektur sammanbrott", - "version_breakdown": "Versionsuppdelning", - "summary": "Sammanfattning", - "total_devices": "Totalt antal enheter", - "unique_platforms": "Plattformar", - "unique_archs": "Arkitekturer", - "unique_versions": "Klientversioner", - "no_devices": "Inga enheter registrerade ännu.", - "protocols_hint": "Protokollkapacitetsförhandling säkerställer att varje klient endast får de funktioner som den stöder. Servern anpassar beteendet baserat på rapporterade möjligheter.", - "capability_negotiation": "Kapacitetsförhandling", - "codec_support": "Codec-stöd (onlineenheter)", - "feature_support": "Funktionssupport (onlineenheter)", - "no_codec_data": "Ingen codec-data tillgänglig från onlineenheter.", - "no_feature_data": "Ingen funktionsdata tillgänglig från onlineenheter.", - "protobuf_schema": "Protokollbufferschema", - "diagram_client": "Klient", - "diagram_server": "Servernod", - "diagram_peer": "Klientnod", - "limitations_hint": "Varje plattform har specifika begränsningar som påverkar tillgängliga funktioner. Granska dessa begränsningar när du planerar distributioner.", - "feat_desktop_client": "Desktop-klient", - "feat_background_agent": "Bakgrundsagent", - "feat_remote_target": "Fjärrmål", - "feat_screen_capture": "Skärmdump", - "feat_input_injection": "Inmatningsstyrning", - "feat_file_transfer": "Filöverföring", - "feat_clipboard_sync": "Synkronisera urklipp", - "feat_audio_streaming": "Ljudströmning", - "feat_chat": "Chatt", - "feat_h264": "H.264 codec", - "feat_vp9": "VP9 codec", - "feat_av1": "AV1 codec", - "feat_cdap_agent": "CDAP-agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Webbläsare", - "platform_chromeos": "ChromeOS", - "status_production": "Produktion", - "status_testing": "Test", - "status_planned": "Planerad", - "status_limited": "Begränsad", - "status_experimental": "Experimentell", - "limit_win_uac": "UAC-förhöjning krävs för serviceinstallation och input-injection på säkra stationära datorer.", - "limit_win_service": "Körs som NSSM-tjänst; kräver administratörsbehörighet för installation.", - "limit_win_firewall": "Windows Brandväggsregler måste tillåta portar 21115-21119 för reläanslutningar.", - "limit_linux_wayland": "Wayland-kompositörer begränsar programmatisk skärmdumpning; PipeWire-portal API krävs.", - "limit_linux_pipewire": "Ljudinspelning kräver PipeWire; PulseAudio reservtillgänglig men begränsad.", - "limit_linux_arm": "ARM64 bygger tillgängliga; vissa codecs kan använda programvaruavkodning (långsammare).", - "limit_mac_screen": "Skärminspelningsbehörighet krävs i Systeminställningar > Sekretess och säkerhet.", - "limit_mac_signing": "Agenten måste vara signerad med Apple Developer ID för distribution.", - "limit_mac_notarize": "Notarisering krävs för macOS Gatekeeper (distribution utanför App Store).", - "limit_android_projection": "MediaProjection API kräver användarens samtycke för varje skärmdumpssession.", - "limit_android_accessibility": "Inputinjektion kräver AccessibilityService; begränsad i Android 14+.", - "limit_android_battery": "Bakgrundstjänst begränsad av Doze-läge; kan kräva undantag för batterioptimering.", - "limit_ios_capture": "Apple förbjuder bakgrundsskärmdumpning; Endast tittarläge stöds.", - "limit_ios_input": "Ingen insprutning tillåten; endast fjärrvisning och chatt.", - "limit_ios_appstore": "Distribution endast via App Store; TestFlight för betatestning.", - "limit_web_https": "WebCodecs API och WebRTC kräver HTTPS; HTTP faller tillbaka till JMuxer (begränsade codecs).", - "limit_web_codec": "Codec-stöd beror på webbläsare; H.264 stöds brett, VP9/AV1 varierar.", - "limit_web_performance": "Prestanda begränsad av webbläsarens sandlåda; ingen direkt hårdvaruacceleration.", - "limit_chrome_crostini": "Fullständig agentstöd endast inuti Crostini Linux-behållare.", - "limit_chrome_pwa": "PWA-läge ger enbart webbfunktioner; inga inbyggda agentkapaciteter.", - "limit_chrome_input": "Inputinjektion stöds inte utanför Crostini-behållaren.", - "feat_session_recording": "Sessionsinspelning", - "feat_multi_monitor": "Flera bildskärmar", - "feat_unattended_access": "Obevakad åtkomst", - "limit_win_virtual_account": "Tjänste laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Tjänste laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Säkerhetsrevision", - "tab_overview": "Översikt", - "tab_events": "Revisionshändelser", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Säkerhetspoäng", - "failed_logins": "Misslyckade inloggningar (24h)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Gamla nycklar (>90d)", - "security_checks": "Säkerhetskontroller", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Säker", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "all_events": "All Events", - "event_login_failed": "Inloggning misslyckades", - "event_login_success": "Inloggning lyckad", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Konfiguration ändrad", - "event_key_created": "Nyckel skapad", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Inga granskningshändelser hittades.", - "hardening_hint": "Säkerhetshärdande prioriteringar för din BetterDesk-distribution. Föremålen är sorterade efter svårighetsgrad.", - "no_hardening": "Inga härdande föremål tillgängliga.", - "vuln_hint": "Resultat av sökning av beroendesårbarhet. Kör npm-revision regelbundet för att hålla beroenden säkra.", - "no_vulns": "Inga sårbarheter hittades. Dina beroenden är säkra." - }, - "languages": { - "title": "Språkhantering", - "total_languages": "Totalt språk", - "fully_translated": "Fullständigt översatt", - "needs_review": "Behöver granskning", - "reference_keys": "Referensnycklar", - "no_languages": "Inga språkfiler hittades.", - "badge_reference": "Reference", - "badge_review": "Behöver granskning", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Visa saknas", - "fix_missing": "Fix Missing", - "missing_keys_for": "Saknar nycklar till", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "och {n} mer...", - "all_keys_present": "Alla nycklar finns!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Saknade nycklar i {code} måste översättas manuellt.", - "no_fix_needed": "Inga saknade nycklar att fixa." - }, - "resource_control": { - "title": "Resurskontroll", - "tab_overview": "Översikt", - "tab_usb": "USB Control", - "tab_optical": "Optiska enheter", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Resurskvoter", - "compliance_by_category": "Efterlevnad per kategori", - "device_compliance": "Enhetsöverensstämmelse", - "search_devices": "Sök enheter...", - "col_device": "Enhet", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Totalt antal enheter", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Överensstämmelsegrad", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Konfigurera", - "no_devices": "Inga enheter hittades", - "usb_title": "USB Portkontroll", - "usb_hint": "Kontrollera USB lagringsenhetsåtkomst för den valda enheten eller organisationsomfattande standardpolicy.", - "usb_storage_policy": "USB Lagringspolicy", - "usb_whitelist": "Vitlistade enheter (en per rad)", - "usb_whitelist_hint": "VID:PID (t.ex. 0781:5583)", - "usb_audit_log": "Logga USB enhetsanslutningar", - "optical_title": "Optisk enhetskontroll", - "optical_hint": "Styr åtkomst till CD/DVD/Blu-ray-enhet för den valda enheten.", - "optical_policy": "Policy för optisk enhet", - "optical_audit_log": "Logga åtkomst till optisk enhet", - "monitors_title": "Övervakningshantering", - "monitors_hint": "Konfigurera bildskärmsinställningar inklusive maximalt antal, upplösningstillämpning, ljusstyrka och effektscheman.", - "monitors_max_count": "Maximalt antal skärmar (0 = obegränsat)", - "monitors_max_hint": "0 betyder ingen gräns", - "monitors_resolution": "Max upplösning", - "monitors_brightness": "Gräns för ljusstyrka", - "monitors_power_schedule": "Strömschema", - "monitors_power_hint": "t.ex. av: 22:00-06:00", - "disks_title": "Diskåtkomstkontroll", - "disks_hint": "Konfigurera diskåtkomstpolicyer inklusive skrivskyddat läge, krypteringstillämpning och partitionssynlighet.", - "disks_readonly": "Forcera skrivskyddat läge", - "disks_encryption": "Kräv kryptering (BitLocker/LUKS)", - "disks_smart": "Aktivera S.M.A.R.T. övervakning", - "disks_hidden": "Dolda partitioner", - "disks_hidden_hint": "Kommaseparerade enhetsbokstäver eller monteringspunkter", - "quotas_title": "Resurskvoter", - "quotas_hint": "Ställ in CPU, RAM, bandbredd och diskkvoter per användare för den valda enheten.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Bandbreddsgräns (Mbps)", - "quotas_bandwidth_hint": "0 = obegränsat", - "quotas_disk_quota": "Diskkvot (GB)", - "quotas_disk_hint": "0 = obegränsat", - "quotas_process_whitelist": "Processvitlista (en per rad)", - "quotas_process_hint": "t.ex. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Endast vitlista", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Programuppdateringar", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Installerad version", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Sök efter uppdateringar", - "checking": "Checking…", - "up_to_date": "Uppdaterad", - "update_available": "Uppdatering tillgänglig", - "changelog": "Release Notes", - "no_changelog": "Inga release notes tillgängliga", - "files_changed": "Filerna har ändrats", - "files": "filer", - "changes_unavailable": "Det gick inte att ladda filändringslistan. Du kan fortfarande installera uppdateringen.", - "create_backup": "Skapa säkerhetskopia innan du uppdaterar", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Installerar uppdatering...", - "creating_backup": "Skapar säkerhetskopia...", - "downloading": "Laddar ned filer...", - "install_success": "Uppdateringen har installerats. Konsolen startar om...", - "install_failed": "Uppdateringsinstallationen misslyckades", - "restarting": "Väntar på att konsolen ska starta om...", - "restart_complete": "Konsolen startades om", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Ingen uppdateringsversion har valts. Sök efter uppdateringar först.", - "backups_title": "Uppdatera säkerhetskopior", - "backups_desc": "Föruppdatera säkerhetskopior som skapas automatiskt före varje uppdatering", - "no_backups": "Inga uppdateringsbackuper hittades", - "restore": "Restore", - "restore_confirm": "Är du säker på att du vill återställa från denna säkerhetskopia? Ändrade filer kommer att skrivas över.", - "restore_success": "Säkerhetskopieringen har återställts. Konsolen startar om...", - "baseline_set": "Baslinjeuppsättning", - "commits_behind": "begår bakom", - "total_files": "Totalt antal filer", - "applied": "Applied", - "failed": "Misslyckades", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Gå Server", - "component_agent": "Agent", - "component_scripts": "Skript & Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Kontrollerar Go...", - "go_not_found": "Gå inte installerad", - "go_check_failed": "Det gick inte att kontrollera Go tillgänglighet", - "server_building": "Kompilerar Go server... Detta kan ta några minuter.", - "server_built": "Server binär kompilerad", - "server_build_failed": "Serverkompileringen misslyckades", - "server_stale_title": "Server binär inaktuell", - "server_stale_desc": "Go server-källan uppdaterades men den pågående binära filen byggdes inte om. Bygg om det nu för att tillämpa säkerhets- och biblioteksuppdateringar.", - "rebuild_server": "Bygg om binär server", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Server binär ombyggd och omstartad", - "rebuild_server_failed": "Serverns binära återuppbyggnad misslyckades", - "server_deployed": "Server binär distribuerad", - "server_deploy_failed": "Serverdistribution misslyckades", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Laddar ner serverkälla...", - "delete": "Ta bort", - "delete_confirm": "Vill du ta bort säkerhetskopian {name} permanent? Detta kan inte ångras.", - "delete_success": "Säkerhetskopiering raderad", - "delete_failed": "Det gick inte att ta bort säkerhetskopian", - "retention_label": "Behåll N senaste säkerhetskopior", - "retention_hint": "Äldre säkerhetskopior raderas automatiskt efter varje uppdatering. Använd 0 för att behålla alla säkerhetskopior.", - "retention_saved": "Retentionsinställningen har sparats", - "retention_invalid": "Retention måste vara ett heltal mellan 0 och 1000", - "retention_required_for_prune": "Ställ in ett retentionsvärde som är större än 0 först", - "prune_now": "Apply now", - "prune_confirm": "Behåll bara de senaste säkerhetskopiorna av {n} och radera resten?", - "prune_done": "Beskärade {n} säkerhetskopior", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Uppdateringsmetod", - "strategy_download": "Ladda ner förbyggd binär", - "strategy_compile": "Kompilera från källan", - "both_available": "Ladda ner och kompilera", - "download_available": "Nedladdning tillgänglig", - "no_method": "Ingen uppdateringsmetod", - "no_release": "No release", - "available": "Tillgänglig", - "server_downloading": "Laddar ner binär server...", - "server_downloaded": "Server binär nedladdad", - "server_download_failed": "Serverns binära nedladdning misslyckades", - "server_download_note": "En förbyggd binär kommer att laddas ner från GitHub Releases. Detta tar vanligtvis mindre än en minut.", - "install_go_hint": "Installera Go från https://go.dev/dl/ för att möjliggöra kompilering, eller publicera en version med förbyggda binärer", - "strategy_install_go": "Autoinstallera Go och kompilera", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Klar för automatisk ombyggnad", - "toolchain_ready": "Verktygskedja installerad", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Laddar ned Go-verktygskedjan...", - "toolchain_failed": "Go toolchain-installationen misslyckades", - "modal_title": "Installerar uppdatering", - "modal_done_title": "Uppdateringen slutförd", - "modal_close": "Stäng", - "modal_reload_now": "Ladda om konsolen", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsolfiler", - "phase_server": "Serverkomponent", - "phase_restart": "Starta om", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Säkerhetskopiering hoppas över (per användarval)", - "server_skipped": "Go server hoppade över", - "server_not_selected": "Go server not selected", - "server_processing": "Bearbetar Go server-uppdatering...", - "no_restart_needed": "Ingen omstart krävs", - "complete": "Uppdatering tillämpad", - "complete_summary": "Uppdateringen har tillämpats framgångsrikt.", - "complete_with_errors": "Uppdateringen slutfördes, men några steg misslyckades. Se detaljer nedan.", - "modal_done_with_errors_title": "Uppdateringen avslutad med fel", - "console_will_restart": "Konsolprocessen kommer att starta om nu...", - "restart_complete_msg": "Konsolen avslutade omstarten. Klicka på ladda om för att ladda den nya versionen. Sidan laddas om automatiskt efter 8 sekunder.", - "refresh_recommended": "Statiska tillgångar ändrade — ladda om sidan för att se det nya användargränssnittet.", - "confirm_title": "Tillämpa uppdatering", - "confirm_with_backup": "En föruppdateringssäkerhetskopia skapas automatiskt.", - "confirm_no_backup": "Ingen säkerhetskopia kommer att skapas (fortsätt på egen risk)." - }, - "permissions": { - "title": "Behörigheter", - "subtitle": "Hantera rollbaserade behörigheter och anpassade åsidosättningar", - "info_title": "Hur behörigheter fungerar", - "info_desc": "Varje roll har standardbehörigheter. Du kan lägga till eller ta bort individuella behörigheter per roll genom att växla mellan dem nedan. Anpassade åsidosättningar är markerade och kan återställas till standardinställningar när som helst.", - "select_role": "Välj roll", - "select_role_placeholder": "Välj en roll...", - "reset_overrides": "Återställ alla åsidosättningar", - "granted": "Beviljad", - "overrides": "Åsidosättningar", - "level": "Nivå", - "super_admin_tag": "Full åtkomst", - "server_level_tag": "Servernivå", - "custom": "Anpassad", - "default": "Standard", - "revert": "Återgå till standard", - "saved": "Behörighet uppdaterad", - "reverted": "Återställd till standard", - "all_reverted": "Alla åsidosättningar har återställts", - "confirm_reset": "Vill du återställa alla anpassade åsidosättningar för den här rollen till standardinställningarna?", - "empty_title": "Välj en roll", - "empty_desc": "Välj en roll från rullgardinsmenyn ovan för att se och hantera dess behörigheter.", - "locked_title": "Superadministratör", - "locked_desc": "Super Admin har alla behörigheter som standard och kan inte anpassas.", - "cat_device": "Enheter", - "cat_user": "Användare", - "cat_server": "Serversystem", - "cat_org": "Organisationer", - "cat_audit": "Revision & Övervakning", - "cat_cdap": "CDAP", - "cat_enrollment": "Registrering", - "cat_chat": "Chatt", - "cat_branding": "Varumärke", - "perm_device_view": "Visa enheter", - "perm_device_connect": "Anslut till enheter", - "perm_device_edit": "Redigera enheter", - "perm_device_delete": "Ta bort enheter", - "perm_device_ban": "Förbjud/avaktivera enheter", - "perm_device_change_id": "Ändra enhets-ID", - "perm_user_view": "Visa användare", - "perm_user_create": "Skapa användare", - "perm_user_edit": "Redigera användare", - "perm_user_delete": "Ta bort användare", - "perm_server_config": "Serverkonfiguration", - "perm_server_keys": "Hantera API-nycklar", - "perm_org_create": "Skapa organisationer", - "perm_org_edit": "Redigera organisationer", - "perm_org_delete": "Ta bort organisationer", - "perm_org_manage_users": "Hantera organisationsanvändare", - "perm_org_manage_devices": "Hantera organisationsenheter", - "perm_audit_view": "Visa granskningsloggar", - "perm_metrics_view": "Visa statistik", - "perm_blocklist_edit": "Redigera blockeringslista", - "perm_cdap_view": "Visa CDAP-enheter", - "perm_cdap_command": "Skicka CDAP-kommandon", - "perm_cdap_terminal": "CDAP terminalåtkomst", - "perm_cdap_files": "CDAP filåtkomst", - "perm_enrollment_manage": "Hantera registreringen", - "perm_enrollment_approve": "Godkänn registrering", - "perm_chat_access": "Chatttåtkomst", - "perm_branding_edit": "Redigera varumärke", - "perm_server_attestation": "Serverprestandaattest" - }, - "notifications": { - "title": "Aviseringar", - "empty": "Inga nya aviseringar", - "mark_all_read": "Markera allt som läst", - "see_all": "Se alla hjälpförfrågningar", - "help_request": "Begäran om hjälp", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Justera konsolen efter dina syn-, rörelse- och läsbehov.", - "close": "Stäng tillgänglighetsmenyn", - "profiles": "Snabba profiler", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Större text, stark kontrast och fokus.", - "profile_dyslexia": "Läskomfort", - "profile_dyslexia_hint": "Läsbart teckensnitt och bredare mellanrum.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Minskar övergångar och pausar animering.", - "profile_color_assist": "Färgstöd", - "profile_color_assist_hint": "Färgfilter, etiketter och markerade länkar.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Bokstavsavstånd", - "word_spacing": "Ordavstånd", - "readable_font": "Läsbart typsnitt", - "readable_font_hint": "Använder breda, välbekanta bokstavsformer.", - "dyslexia_spacing": "Dyslexiavstånd", - "dyslexia_spacing_hint": "Lägger till extra mellanrum för lång text.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Mörk med hög kontrast", - "contrast_high_light": "Ljus med hög kontrast", - "contrast_yellow_black": "Gult på svart", - "color_filter": "Färgseende filter", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Färgmättnad", - "underline_links": "Stryk under länkar", - "underline_links_hint": "Gör länkar synliga utan att förlita sig på färg.", - "highlight_links": "Markera åtgärder", - "highlight_links_hint": "Skisserar länkar och knappar.", - "highlight_headings": "Markera rubriker", - "highlight_headings_hint": "Markerar avsnittstitlar med en färgstapel.", - "hide_media": "Dim media", - "hide_media_hint": "Dimmar bilder, videor och dukar.", - "interaction": "Interaction", - "strong_focus": "Starkt fokus", - "strong_focus_hint": "Visar en stor fokusring på tangentbordet.", - "large_cursor": "Stor markör", - "large_cursor_hint": "Använder en större pekare med hög kontrast.", - "reduce_motion": "Minska rörelse", - "reduce_motion_hint": "Förkortar övergångar och mjuk rullning.", - "pause_animations": "Pausa animationer", - "pause_animations_hint": "Slutar att slinga visuella rörelser.", - "reading_guide": "Läsguide", - "reading_guide_hint": "Följer pekaren med en ljus linje.", - "reading_mask": "Läsmask", - "reading_mask_hint": "Dimmar innehållet ovanför och under pekaren.", - "preview": "Preview", - "preview_title": "Förhandsvisning av operatörens arbetsyta", - "preview_text": "Kontrollera om text, länkar, kontroller och statusetiketter är bekväma att läsa innan du stänger den här menyn.", - "preview_link": "Länk för enhetsinformation", - "preview_status": "Online", - "preview_button": "Primär åtgärd", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Serverhantering", - "subtitle": "Cockpitliknande kontrollplan för BetterDesk-konsolvärden (BETA).", - "beta_tooltip": "Betafunktion — under aktiv utveckling.", - "notice_title": "Betafunktion", - "notice_body": "Dessa verktyg körs på den värd där BetterDesk-konsolprocessen lever. All verksamhet granskas. Funktionsomfånget kommer att utökas i framtida utgåvor.", - "tab_overview": "Översikt", - "tab_terminal": "Terminal", - "tab_files": "Filer", - "tab_services": "Tjänster", - "cpu": "CPU", - "memory": "Minne", - "load": "Genomsnittlig belastning", - "disks": "Diskar", - "history": "Historik (senaste 60 proverna)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Drifttid", - "no_disks": "Ingen diskdata tillgänglig", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY tillgängligt", - "term_connect": "Anslut", - "term_disconnect": "Koppla från", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Anslutningsfel", - "term_warning": "Kommandon körs som användaren som äger konsolprocessen. Lägg till en sudoers-regel för att aktivera höjd.", - "term_hint": "Tips: skriv `sudo -i` för att eskalera (kräver sudoers-konfiguration).", - "term_lib_failed": "Det gick inte att läsa in terminalbiblioteket", - "files_up": "Upp en nivå", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Tom katalog", - "files_error": "Det gick inte att lista katalogen", - "read_failed": "Det gick inte att läsa filen", - "save_failed": "Det gick inte att spara filen", - "rename_failed": "Det gick inte att byta namn", - "delete_failed": "Det gick inte att ta bort", - "delete_confirm": "Ta bort denna post?", - "mkdir_prompt": "Nytt mappnamn:", - "mkdir_failed": "Det gick inte att skapa mappen", - "file_saved": "Filen sparad", - "binary_warn": "Binär fil — endast förhandsgranskning", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Söktjänster...", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Inga tjänster hittades", - "svc_load_failed": "Det gick inte att läsa in tjänster", - "svc_action_failed": "Åtgärden misslyckades", - "svc_confirm": "Run", - "svc_start": "Starta", - "svc_stop": "Stoppa", - "svc_restart": "Starta om", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Ladda ner BetterDesk Agent", - "choose_platform": "Välj din plattform", - "choose_platform_hint": "Välj det installationsprogram som matchar ditt operativsystem.", - "download": "Ladda ner", - "building": "Bygger...", - "failed": "Bygget misslyckades", - "need_help": "Behöver du hjälp?", - "powered_by": "Drivs av" - }, - "server_attestation": { - "title": "Serverattest", - "subtitle": "Prestandariktmärke som fastställer kapacitet för samtidiga fjärranslutningar vid 80 % CPU-, RAM- och disktröskeln.", - "warning_title": "Lasttest", - "warning_body": "Riktmärket simulerar parallella WebSocket-anslutningar till signal- och reläservrarna. Kör utanför rusningstid — det här testet belastar produktionen.", - "run_benchmark": "Kör riktmärke", - "abort": "Avbryt", - "download_report": "Ladda ner JSON-rapport", - "last_test": "Senaste test", - "no_test_yet": "Inget riktmärke har körts ännu", - "max_connections": "Max anslutningar", - "threshold_80": "80 % tröskel — slutliga mätvärden", - "disk": "Disk", - "ramp_chart": "Lastrampdiagram", - "connections": "Anslutningar", - "connections_short": "ansl.", - "tier_guide_title": "Vad innebär varje nivå?", - "tier_bronze": "BRONS", - "tier_iron": "JÄRN", - "tier_titanium": "TITAN", - "tier_platinum": "PLATINA", - "tier_obsidian": "OBSIDIAN", - "tier_none": "OGRANSKAD", - "tier_bronze_desc": "1–25 samtidiga anslutningar — liten VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 anslutningar — mellanklass-server (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 anslutningar — högpresterande server (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 anslutningar — företagsinfrastruktur (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ anslutningar — turboklass: dedikerad hårdvara, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Obs: I Docker kan CPU/RAM-mätvärden spegla containerbegränsningar snarare än den fysiska värden.", - "badge_tooltip": "BetterDesk Serverattest — serverprestandacertifiering", - "confirm_run": "Det här riktmärket lasttestnar servern med simulerade anslutningar. Fortsätt?", - "starting": "Startar...", - "complete": "Riktmärke slutfört", - "signal_peers": "Signalkamrater", - "relay_sessions": "Reläsessioner", - "page_error": "Det gick inte att ladda sidan Serverattest", - "mode_estimated": "Uppskattad (WebSocket otillgänglig)", - "incomplete": "Riktmärke slutfört utan giltig nivå" + "form": { + "cancel": "Avbryt" } + } } diff --git a/web-nodejs/lang/th.json b/web-nodejs/lang/th.json index ed3507f6..1d70cccd 100644 --- a/web-nodejs/lang/th.json +++ b/web-nodejs/lang/th.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Thai", - "native_name": "ไทย", - "flag": "🇹🇭", - "needs_review": true + "_meta": { + "name": "Thai", + "native_name": "ไทย", + "flag": "🇹🇭", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "กำลังโหลด...", + "confirm": "ยืนยัน", + "alert": "Alert", + "prompt": "ป้อนค่า", + "copied": "คัดลอกไปยังคลิปบอร์ดแล้ว", + "save": "บันทึก", + "saved": "บันทึกแล้ว", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "ยกเลิก", + "delete": "ลบ", + "actions": "Actions", + "close": "ปิด", + "required": "จำเป็น", + "name_required": "ต้องระบุชื่อ", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "JSON ไม่ถูกต้อง", + "field_required": "จำเป็นต้องมี {field}", + "back": "กลับ", + "edit": "แก้ไข", + "yes": "ใช่", + "no": "ไม่" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "แดชบอร์ด", + "devices": "อุปกรณ์", + "keys": "Keys", + "generator": "Generator", + "settings": "การตั้งค่า", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "คำขอความช่วยเหลือ", + "activity": "Activity", + "automation": "ระบบอัตโนมัติ", + "file_transfer": "การถ่ายโอนไฟล์", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "การจัดการ", + "toggle_sidebar": "สลับแถบด้านข้าง", + "cdap": "อุปกรณ์ CDAP", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "โทเค็นอุปกรณ์", + "organizations": "องค์กรต่างๆ", + "policies": "นโยบาย", + "attestation": "Attestation", + "remote": "เดสก์ท็อประยะไกล", + "toolkit": "Toolkit", + "security_audit": "การตรวจสอบความปลอดภัย", + "languages": "Languages", + "resource_control": "การควบคุมทรัพยากร", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "ขยายแถบด้านข้าง", + "toggle_theme": "สลับธีม", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "สิทธิ์", + "server_management": "จัดการเซิร์ฟเวอร์", + "server_attestation": "การรับรองประสิทธิภาพเซิร์ฟเวอร์", + "commercialization": "การทำให้เป็นเชิงพาณิชย์" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "ลงชื่อเข้าใช้คอนโซล BetterDesk", + "username": "ชื่อผู้ใช้", + "username_placeholder": "กรอกชื่อผู้ใช้", + "password": "รหัสผ่าน", + "password_placeholder": "ใส่รหัสผ่าน", + "remember_me": "Remember me", + "login_failed": "การเข้าสู่ระบบล้มเหลว กรุณาตรวจสอบข้อมูลประจำตัวของคุณ", + "invalid_credentials": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", + "username_collision": "มีบัญชีท้องถิ่นที่ใช้ชื่อผู้ใช้นี้อยู่แล้ว โปรดลงชื่อเข้าใช้ด้วยรหัสผ่านท้องถิ่น หรือขอให้ผู้ดูแลระบบเปลี่ยนชื่อหรือลบบัญชีที่ขัดแย้ง", + "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", + "logout_confirm": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?", + "change_password": "เปลี่ยนรหัสผ่าน", + "password_required": "ต้องใช้รหัสผ่าน", + "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", + "totp_subtitle": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "ใช้รหัสกู้คืนแทน", + "totp_use_code": "ใช้รหัสยืนยันตัวตนแทน", + "totp_recovery_code": "รหัสการกู้คืน", + "totp_back_to_login": "กลับสู่การเข้าสู่ระบบ", + "totp_invalid_code": "รหัสยืนยันไม่ถูกต้อง โปรดลองอีกครั้ง", + "totp_enter_code": "กรุณากรอกรหัส 6 หลัก", + "totp_enter_recovery": "กรุณากรอกรหัสกู้คืน", + "totp_session_expired": "เซสชั่นหมดอายุแล้ว กรุณาเข้าสู่ระบบอีกครั้ง", + "totp_already_enabled": "เปิดใช้งานการรับรอ��ความถูกต้องด้วยสองปัจจัยแล้ว", + "pro_only_account": "บัญชีนี้มีไว้สำหรับไคลเอนต์เดสก์ท็อป RustDesk เท่านั้น โปรดใช้แอป RustDesk เพื่อเข้าสู่ระบบ", + "passwords_mismatch": "รหัสผ่านไม่ตรงกัน", + "or": "หรือ", + "login_sso": "เข้าสู่ระบบด้วย SSO", + "login_sso_with": "เข้าสู่ระบบด้วย {{provider}}", + "oidc_denied": "การเข้าถึงถูกปฏิเสธโดยผู้ให้บริการข้อมูลประจำตัว", + "oidc_invalid": "การโทรกลับ OIDC ไม่ถูกต้อง โปรดลองอีกครั้ง", + "oidc_failed": "การรับรองความถูกต้อง OIDC ล้มเหลว โปรดลองอีกครั้ง", + "oidc_error": "เกิดข้อผิดพลาดระหว่างการล็อกอิน SSO", + "oidc_no_account": "ไม่พบบัญชีของคุณ และการลงทะเบียนอัตโนมัติถูกปิดใช้งาน", + "totp_rate_limited": "มีความพยายามมากเกินไป โปรดลองอีกครั้งในภายหลัง", + "emergency_mode_banner": "ไม่สามารถเข้าถึง Go server — ทำงานในโหมดฉุกเฉิน (เฉพาะผู้ดูแลระบบเท่านั้น มีฟังก์ชันการทำงานที่จำกัด)" + }, + "dashboard": { + "title": "แดชบอร์ด", + "subtitle": "Overview of your RustDesk server", + "total_devices": "อุปกรณ์ทั้งหมด", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "การเชื่อมต่อที่ใช้งานอยู่", + "offline_devices": "Offline", + "server_status": "สถาน���เซิร์ฟเวอร์", + "quick_actions": "การดำเนินการด่วน", + "manage_devices": "จัดการอุปกรณ์ที่เชื่อมต่อ", + "view_keys": "ดูคีย์เซิร์ฟเวอร์", + "generate_config": "สร้างการกำหนดค่าไคลเอ็นต์", + "server_settings": "กำหนดการตั้งค่า", + "greeting_morning": "สวัสดีตอนเช้า {name}", + "greeting_afternoon": "สวัสดีตอนบ่าย {name}", + "greeting_evening": "สวัสดีตอนเย็น {name}", + "greeting_night": "ราตรีสวัสดิ์ {name}", + "health_overview": "ภาพรวมด้านสุขภาพ", + "devices_online": "อุปกรณ์ออนไลน์", + "active_alerts": "การแจ้งเตือนที่ใช้งานอยู่", + "recent_connections": "อุปกรณ์ทั้งหมด", + "server_uptime": "เวลาทำงานของเซิร์ฟเวอร์", + "activity_feed": "กิจกรรมล่าสุด", + "no_recent_activity": "ไม่มีกิจกรรมล่าสุด", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "ลองใช้โหมดเดสก์ท็อปสำหรับพื้นที่ทำงานแบบหลายหน้าต่างพร้อมวิดเจ็ตการตรวจสอบ", + "tip_keyboard_shortcuts": "กด Ctrl+K ที่ใดก็ได้เพื่อเปิดชุดคำสั่งการค้นหาด่วน", + "tip_address_book": "ซิงค์สมุดที่อยู่ของคุณข้ามอุปกรณ์โดยเข้าสู่ระบบจากไคลเอนต์ RustDesk", + "tip_2fa": "เปิดใช้งานการตรวจสอบสิทธิ์แบบสองปัจจัยในการตั้งค่าเพื่อความปลอดภัยของบัญชีเพิ่มเติม", + "tip_bulk_actions": "เลือกอุปกรณ์หลายเครื่องและใช้การดำเนินการแบบกลุ่มเพื่อจัดการอุปกรณ์พร้อมกัน", + "tip_theme": "สลับระหว่างธีมมืดและธีมสว่างในการตั้งค่าแถบด้านข้าง", + "tip_cdap": "เชื่อมต่ออุปกรณ์ IoT และเซ็นเซอร์อุตสาหกรรมผ่านเกตเวย์ CDAP", + "tip_tutorials": "คลิกปุ่มความช่วยเหลือที่มุมขวาล่างสำหรับบทช่วยสอนแบบโต้ตอบ" + }, + "devices": { + "title": "อุปกรณ์", + "id": "ID", + "hostname": "Hostname", + "username": "ชื่อผู้ใช้", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "สร้างแล้ว", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "ค้นหาอุปกรณ์...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "สถานะการซิงค์", + "sync_success": "ซิงโครไนซ์สถานะเรียบร้อยแล้ว", + "empty_title": "ไม่พบอุปกรณ์", + "empty_text": "ไม่มีอุปกรณ์ที่ตรงกับตัวกรองปัจจุบันของคุณ", + "edit_title": "รายละเอียดอุปกรณ์", + "delete_title": "ลบอุปกรณ์", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบอุปกรณ์ {id}", + "delete_warning": "คุณกำลังจะลบอุปกรณ์นี้อย่างถาวร:", + "delete_permanent": "การดำเนิน���ารนี้ไม่สามารถยกเลิกได้ ข้อมูลทั้งหมดที่เกี่ยวข้องกับอุปกรณ์นี้จะถูกลบออกจากฐานข้อมูลอย่างถาวร", + "delete_success": "ลบอุปกรณ์เรียบร้อยแล้ว", + "revoke_option": "เพิกถอนอุปกรณ์", + "revoke_hint": "บล็อก ID อุปกรณ์และยกเลิกการเชื่อมต่อที่ใช้งานอยู่", + "revoke_success": "เพิกถอนอุปกรณ์เรียบร้อยแล้ว", + "details": "รายละเอียดอุปกรณ์", + "ban_title": "แบนอุปกรณ์", + "ban_confirm": "คุณแน่ใจหรือไม่ว่าต้องการแบนอุปกรณ์ {id}", + "ban_success": "แบนอุปกรณ์เรียบร้อยแล้ว", + "unban_title": "เลิกแบนอุปกรณ์", + "unban_confirm": "คุณแน่ใจหรือไม่ว่าต้องการเลิกแบนอุปกรณ์ {id}", + "unban_success": "ยกเลิกการแบนอุปกรณ์เรียบร้อยแล้ว", + "change_id": "Change ID", + "change_id_title": "เปลี่ยนรหัสอุปกรณ์", + "new_id": "New ID", + "change_id_hint": "อักขระ 6-16 ตัว ตัวอักษร ตัวเลข ขีดกลาง และขีดล่างเท่านั้น", + "change_id_success": "เปลี่ยนรหัสอุปกรณ์เรียบร้อยแล้ว", + "id_length_error": "รหัสต้องมีความยาว 6-16 ตัวอักษร", + "id_format_error": "รหัสมีได้เฉพาะตัวอักษร ตัวเลข ขีดกลาง และขีดล่างเท่านั้น", + "bulk_delete_title": "ลบอุปกรณ์หลายเครื่อง", + "bulk_delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบอุปกรณ์ {count}", + "bulk_delete_success": "ลบอุปกรณ์ {count} สำเร็จแล้ว", + "columns": "Columns", + "toggle_columns": "สลับคอลัมน์ที่มองเห็นได้", + "not_found": "ไม่พบอุปกรณ์", + "delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", + "change_id_failed": "ไม่สามารถเปลี่ยนรหัสอุปกรณ์", + "invalid_id": "รหัสอุปกรณ์ไม่ถูกต้อง (ต้องมีอักขระ 6-16 ตัว)", + "invalid_id_format": "รูปแบบรหัสไม่ถูกต้อง (ตัวอักษร ตัวเลข ขีดกลาง ขีดล่างเท่านั้น)", + "id_exists": "รหัสอุปกรณ์มีอยู่แล้ว", + "no_selection": "ไม่ได้เลือกอุปกรณ์", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "นโยบายการเข้าถึง", + "unattended_access": "การเข้าถึงแบบอัตโนมัติ", + "enable_unattended": "เปิดใช้งานการเข้าถึงแบบอัตโนมัติ", + "access_password": "รหัสผ่านเข้าใช้งาน", + "password_configured": "ตั้งรหัสผ่าน", + "no_password": "ไม่มีรหัสผ่าน", + "new_password": "รหัสผ่านใหม่ (เว้นว่างไว้เพื่อให้เป็นปัจจุบัน)", + "clear_password": "ล้างรหัสผ่าน", + "access_schedule": "กำหนดการเข้าถึง", + "enable_schedule": "เปิดใช้งานการเข้าถึงตามเวลา", + "allowed_days": "วันที่อนุญาต", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "ผู้ประกอบการที่ได้รับอนุญาต", + "all_operators": "โอเปอเรเตอร์ทั้งหมด (เว้นว่างไว้)", + "operators_hint": "ชื่อผู้ใช้ที่คั่นด้วยเครื่องหมายจุลภาค เว้นว่างไว้เพื่ออนุญาตโอเปอเรเตอร์ทั้งหมด", + "last_updated_by": "ปรับปรุงล่าสุดโดย", + "access_policy_saved": "บันทึกนโยบายการเข้าถึงแล้ว", + "tabs": { + "overview": "ภาพรวม", + "hardware": "Hardware", + "metrics": "เมตริก", + "connections": "การเชื่อมต่อ", + "audit": "Audit", + "info": "Info", + "history": "ประวัติศาสตร์" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "โหลดเฉลี่ย", + "network": "อะแดปเตอร์เครือข่าย", + "no_data": "ไม่มีข้อมูลฮาร์ดแวร์", + "title": "ข���อมูลฮาร์ดแวร์", + "gpu": "Graphics Card" }, - "common": { - "loading": "กำลังโหลด...", - "confirm": "ยืนยัน", - "alert": "Alert", - "prompt": "ป้อนค่า", - "copied": "คัดลอกไปยังคลิปบอร์ดแล้ว", - "save": "บันทึก", - "saved": "บันทึกแล้ว", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "ยกเลิก", - "delete": "ลบ", - "actions": "Actions", - "close": "ปิด", - "required": "จำเป็น", - "name_required": "ต้องระบุชื่อ", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "JSON ไม่ถูกต้อง", - "field_required": "จำเป็นต้องมี {field}", - "back": "กลับ", - "edit": "แก้ไข", - "yes": "ใช่", - "no": "ไม่" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "แดชบอร์ด", - "devices": "อุปกรณ์", - "keys": "Keys", - "generator": "Generator", - "settings": "การตั้งค่า", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "คำขอความช่วยเหลือ", - "activity": "Activity", - "automation": "ระบบอัตโนมัติ", - "file_transfer": "การถ่ายโอนไฟล์", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "การจัดการ", - "toggle_sidebar": "สลับแถบด้านข้าง", - "cdap": "อุปกรณ์ CDAP", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "โทเค็นอุปกรณ์", - "organizations": "องค์กรต่างๆ", - "policies": "นโยบาย", - "attestation": "Attestation", - "remote": "เดสก์ท็อประยะไกล", - "toolkit": "Toolkit", - "security_audit": "การตรวจสอบความปลอดภัย", - "languages": "Languages", - "resource_control": "การควบคุมทรัพยากร", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "ขยายแถบด้านข้าง", - "toggle_theme": "สลับธีม", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "สิทธิ์", - "server_management": "จัดการเซิร์ฟเวอร์", - "server_attestation": "การรับรองประสิทธิภาพเซิร์ฟเวอร์" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "ลงชื่อเข้าใช้คอนโซล BetterDesk", - "username": "ชื่อผู้ใช้", - "username_placeholder": "กรอกชื่อผู้ใช้", - "password": "รหัสผ่าน", - "password_placeholder": "ใส่รหัสผ่าน", - "remember_me": "Remember me", - "login_failed": "การเข้าสู่ระบบล้มเหลว กรุณาตรวจสอบข้อมูลประจำตัวของคุณ", - "invalid_credentials": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", - "username_collision": "มีบัญชีท้องถิ่นที่ใช้ชื่อผู้ใช้นี้อยู่แล้ว โปรดลงชื่อเข้าใช้ด้วยรหัสผ่านท้องถิ่น หรือขอให้ผู้ดูแลระบบเปลี่ยนชื่อหรือลบบัญชีที่ขัดแย้ง", - "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", - "logout_confirm": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?", - "change_password": "เปลี่ยนรหัสผ่าน", - "password_required": "ต้องใช้รหัสผ่าน", - "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", - "totp_subtitle": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "ใช้รหัสกู้คืนแทน", - "totp_use_code": "ใช้รหัสยืนยันตัวตนแทน", - "totp_recovery_code": "รหัสการกู้คืน", - "totp_back_to_login": "กลับสู่การเข้าสู่ระบบ", - "totp_invalid_code": "รหัสยืนยันไม่ถูกต้อง โปรดลองอีกครั้ง", - "totp_enter_code": "กรุณากรอกรหัส 6 หลัก", - "totp_enter_recovery": "กรุณากรอกรหัสกู้คืน", - "totp_session_expired": "เซสชั่นหมดอายุแล้ว กรุณาเข้าสู่ระบบอีกครั้ง", - "totp_already_enabled": "เปิดใช้งานการรับรอ��ความถูกต้องด้วยสองปัจจัยแล้ว", - "pro_only_account": "บัญชีนี้มีไว้สำหรับไคลเอนต์เดสก์ท็อป RustDesk เท่านั้น โปรดใช้แอป RustDesk เพื่อเข้าสู่ระบบ", - "passwords_mismatch": "รหัสผ่านไม่ตรงกัน", - "or": "หรือ", - "login_sso": "เข้าสู่ระบบด้วย SSO", - "login_sso_with": "เข้าสู่ระบบด้วย {{provider}}", - "oidc_denied": "การเข้าถึงถูกปฏิเสธโดยผู้ให้บริการข้อมูลประจำตัว", - "oidc_invalid": "การโทรกลับ OIDC ไม่ถูกต้อง โปรดลองอีกครั้ง", - "oidc_failed": "การรับรองความถูกต้อง OIDC ล้มเหลว โปรดลองอีกครั้ง", - "oidc_error": "เกิดข้อผิดพลาดระหว่างการล็อกอิน SSO", - "oidc_no_account": "ไม่พบบัญชีของคุณ และการลงทะเบียนอัตโนมัติถูกปิดใช้งาน", - "totp_rate_limited": "มีความพยายามมากเกินไป โปรดลองอีกครั้งในภายหลัง", - "emergency_mode_banner": "ไม่สามารถเข้าถึง Go server — ทำงานในโหมดฉุกเฉิน (เฉพาะผู้ดูแลระบบเท่านั้น มีฟังก์ชันการทำงานที่จำกัด)" - }, - "dashboard": { - "title": "แดชบอร์ด", - "subtitle": "Overview of your RustDesk server", - "total_devices": "อุปกรณ์ทั้งหมด", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "การเชื่อมต่อที่ใช้งานอยู่", - "offline_devices": "Offline", - "server_status": "สถาน���เซิร์ฟเวอร์", - "quick_actions": "การดำเนินการด่วน", - "manage_devices": "จัดการอุปกรณ์ที่เชื่อมต่อ", - "view_keys": "ดูคีย์เซิร์ฟเวอร์", - "generate_config": "สร้างการกำหนดค่าไคลเอ็นต์", - "server_settings": "กำหนดการตั้งค่า", - "greeting_morning": "สวัสดีตอนเช้า {name}", - "greeting_afternoon": "สวัสดีตอนบ่าย {name}", - "greeting_evening": "สวัสดีตอนเย็น {name}", - "greeting_night": "ราตรีสวัสดิ์ {name}", - "health_overview": "ภาพรวมด้านสุขภาพ", - "devices_online": "อุปกรณ์ออนไลน์", - "active_alerts": "การแจ้งเตือนที่ใช้งานอยู่", - "recent_connections": "อุปกรณ์ทั้งหมด", - "server_uptime": "เวลาทำงานของเซิร์ฟเวอร์", - "activity_feed": "กิจกรรมล่าสุด", - "no_recent_activity": "ไม่มีกิจกรรมล่าสุด", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "ลองใช้โหมดเดสก์ท็อปสำหรับพื้นที่ทำงานแบบหลายหน้าต่างพร้อมวิดเจ็ตการตรวจสอบ", - "tip_keyboard_shortcuts": "กด Ctrl+K ที่ใดก็ได้เพื่อเปิดชุดคำสั่งการค้นหาด่วน", - "tip_address_book": "ซิงค์สมุดที่อยู่ของคุณข้ามอุปกรณ์โดยเข้าสู่ระบบจากไคลเอนต์ RustDesk", - "tip_2fa": "เปิดใช้งานการตรวจสอบสิทธิ์แบบสองปัจจัยในการตั้งค่าเพื่อความปลอดภัยของบัญชีเพิ่มเติม", - "tip_bulk_actions": "เลือกอุปกรณ์หลายเครื่องและใช้การดำเนินการแบบกลุ่มเพื่อจัดการอุปกรณ์พร้อมกัน", - "tip_theme": "สลับระหว่างธีมมืดและธีมสว่างในการตั้งค่าแถบด้านข้าง", - "tip_cdap": "เชื่อมต่ออุปกรณ์ IoT และเซ็นเซอร์อุตสาหกรรมผ่านเกตเวย์ CDAP", - "tip_tutorials": "คลิกปุ่มความช่วยเหลือที่มุมขวาล่างสำหรับบทช่วยสอนแบบโต้ตอบ" - }, - "devices": { - "title": "อุปกรณ์", - "id": "ID", - "hostname": "Hostname", - "username": "ชื่อผู้ใช้", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "สร้างแล้ว", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "ค้นหาอุปกรณ์...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "สถานะการซิงค์", - "sync_success": "ซิงโครไนซ์สถานะเรียบร้อยแล้ว", - "empty_title": "ไม่พบอุปกรณ์", - "empty_text": "ไม่มีอุปกรณ์ที่ตรงกับตัวกรองปัจจุบันของคุณ", - "edit_title": "รายละเอียดอุปกรณ์", - "delete_title": "ลบอุปกรณ์", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบอุปกรณ์ {id}", - "delete_warning": "คุณกำลังจะลบอุปกรณ์นี้อย่างถาวร:", - "delete_permanent": "การดำเนิน���ารนี้ไม่สามารถยกเลิกได้ ข้อมูลทั้งหมดที่เกี่ยวข้องกับอุปกรณ์นี้จะถูกลบออกจากฐานข้อมูลอย่างถาวร", - "delete_success": "ลบอุปกรณ์เรียบร้อยแล้ว", - "revoke_option": "เพิกถอนอุปกรณ์", - "revoke_hint": "บล็อก ID อุปกรณ์และยกเลิกการเชื่อมต่อที่ใช้งานอยู่", - "revoke_success": "เพิกถอนอุปกรณ์เรียบร้อยแล้ว", - "details": "รายละเอียดอุปกรณ์", - "ban_title": "แบนอุปกรณ์", - "ban_confirm": "คุณแน่ใจหรือไม่ว่าต้องการแบนอุปกรณ์ {id}", - "ban_success": "แบนอุปกรณ์เรียบร้อยแล้ว", - "unban_title": "เลิกแบนอุปกรณ์", - "unban_confirm": "คุณแน่ใจหรือไม่ว่าต้องการเลิกแบนอุปกรณ์ {id}", - "unban_success": "ยกเลิกการแบนอุปกรณ์เรียบร้อยแล้ว", - "change_id": "Change ID", - "change_id_title": "เปลี่ยนรหัสอุปกรณ์", - "new_id": "New ID", - "change_id_hint": "อักขระ 6-16 ตัว ตัวอักษร ตัวเลข ขีดกลาง และขีดล่างเท่านั้น", - "change_id_success": "เปลี่ยนรหัสอุปกรณ์เรียบร้อยแล้ว", - "id_length_error": "รหัสต้องมีความยาว 6-16 ตัวอักษร", - "id_format_error": "รหัสมีได้เฉพาะตัวอักษร ตัวเลข ขีดกลาง และขีดล่างเท่านั้น", - "bulk_delete_title": "ลบอุปกรณ์หลายเครื่อง", - "bulk_delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบอุปกรณ์ {count}", - "bulk_delete_success": "ลบอุปกรณ์ {count} สำเร็จแล้ว", - "columns": "Columns", - "toggle_columns": "สลับคอลัมน์ที่มองเห็นได้", - "not_found": "ไม่พบอุปกรณ์", - "delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", - "change_id_failed": "ไม่สามารถเปลี่ยนรหัสอุปกรณ์", - "invalid_id": "รหัสอุปกรณ์ไม่ถูกต้อง (ต้องมีอักขระ 6-16 ตัว)", - "invalid_id_format": "รูปแบบรหัสไม่ถูกต้อง (ตัวอักษร ตัวเลข ขีดกลาง ขีดล่างเท่านั้น)", - "id_exists": "รหัสอุปกรณ์มีอยู่แล้ว", - "no_selection": "ไม่ได้เลือกอุปกรณ์", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "นโยบายการเข้าถึง", - "unattended_access": "การเข้าถึงแบบอัตโนมัติ", - "enable_unattended": "เปิดใช้งานการเข้าถึงแบบอัตโนมัติ", - "access_password": "รหัสผ่านเข้าใช้งาน", - "password_configured": "ตั้งรหัสผ่าน", - "no_password": "ไม่มีรหัสผ่าน", - "new_password": "รหัสผ่านใหม่ (เว้นว่างไว้เพื่อให้เป็นปัจจุบัน)", - "clear_password": "ล้างรหัสผ่าน", - "access_schedule": "กำหนดการเข้าถึง", - "enable_schedule": "เปิดใช้งานการเข้าถึงตามเวลา", - "allowed_days": "วันที่อนุญาต", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "ผู้ประกอบการที่ได้รับอนุญาต", - "all_operators": "โอเปอเรเตอร์ทั้งหมด (เว้นว่างไว้)", - "operators_hint": "ชื่อผู้ใช้ที่คั่นด้วยเครื่องหมายจุลภาค เว้นว่างไว้เพื่ออนุญาตโอเปอเรเตอร์ทั้งหมด", - "last_updated_by": "ปรับปรุงล่าสุดโดย", - "access_policy_saved": "บันทึกนโยบายการเข้าถึงแล้ว", - "tabs": { - "overview": "ภาพรวม", - "hardware": "Hardware", - "metrics": "เมตริก", - "connections": "การเชื่อมต่อ", - "audit": "Audit", - "info": "Info", - "history": "ประวัติศาสตร์" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "โหลดเฉลี่ย", - "network": "อะแดปเตอร์เครือข่าย", - "no_data": "ไม่มีข้อมูลฮาร์ดแวร์", - "title": "ข���อมูลฮาร์ดแวร์", - "gpu": "Graphics Card" - }, - "display_name": "ชื่อที่แสดง", - "display_name_placeholder": "ชื่อที่กำหนดเอง (แทนที่ชื่อโฮสต์)", - "note_placeholder": "หมายเหตุเกี่ยวกับอุปกรณ์นี้", - "tags": "Tags", - "filter_by_tags": "กรองตามแท็ก", - "no_tags": "No tags", - "all_groups": "ทุกกลุ่ม", - "create_group": "สร้างกลุ่ม", - "manage_groups": "จัดการกลุ่ม", - "group_name": "ชื่อกลุ่ม", - "group_name_placeholder": "เช่น มีเดียพีซี", - "dynamic_group": "กลุ่มไดนามิกจากแท็ก", - "dynamic_group_hint": "อุปกรณ์ที่มีแท็กนี้จะเข้าร่วมโดยอัตโนมัติ", - "tag_filter": "Tag filter", - "group_allowed_users": "ผู้ใช้ที่ได้รับอนุญาต", - "group_allowed_users_hint": "เว้นว่างไว้เพื่อให้ทุกคนที่มีสิทธิ์เข้าถึงกลุ่มมองเห็นกลุ่มได้", - "group_tag_required": "จำเป็นต้องมีตัวกรองแท็กสำหรั��กลุ่มไดนามิก", - "group_invalid": "ตัวระบุกลุ่มไม่ถูกต้อง", - "group_not_found": "ไม่พบกลุ่ม", - "group_saved": "บันทึกกลุ่มอุปกรณ์แล้ว", - "groups_saved": "บันทึกกลุ่มอุปกรณ์แล้ว", + "display_name": "ชื่อที่แสดง", + "display_name_placeholder": "ชื่อที่กำหนดเอง (แทนที่ชื่อโฮสต์)", + "note_placeholder": "หมายเหตุเกี่ยวกับอุปกรณ์นี้", + "tags": "Tags", + "filter_by_tags": "กรองตามแท็ก", + "no_tags": "No tags", + "all_groups": "ทุกกลุ่ม", + "create_group": "สร้างกลุ่ม", + "manage_groups": "จัดการกลุ่ม", + "group_name": "ชื่อกลุ่ม", + "group_name_placeholder": "เช่น มีเดียพีซี", + "dynamic_group": "กลุ่มไดนามิกจากแท็ก", + "dynamic_group_hint": "อุปกรณ์ที่มีแท็กนี้จะเข้าร่วมโดยอัตโนมัติ", + "tag_filter": "Tag filter", + "group_allowed_users": "ผู้ใช้ที่ได้รับอนุญาต", + "group_allowed_users_hint": "เว้นว่างไว้เพื่อให้ทุกคนที่มีสิทธิ์เข้าถึงกลุ่มมองเห็นกลุ่มได้", + "group_tag_required": "จำเป็นต้องมีตัวกรองแท็กสำหรั��กลุ่มไดนามิก", + "group_invalid": "ตัวระบุกลุ่มไม่ถูกต้อง", + "group_not_found": "ไม่พบกลุ่ม", + "group_saved": "บันทึกกลุ่มอุปกรณ์แล้ว", + "groups_saved": "บันทึกกลุ่มอุปกรณ์แล้ว", "group_membership_added": "เพิ่มในกลุ่มแล้ว", "group_membership_removed": "นำออกจากกลุ่มแล้ว", - "no_groups": "ยังไม่มีกลุ่ม", - "manual_groups": "กลุ่มแบบแมนนวล", - "dynamic_memberships": "การเป็นสมาชิกแบบไดนามิก", - "group_allowed_user_groups": "กลุ่มผู้ใช้ที่อนุญาต", - "group_allowed_user_groups_hint": "ผู้ใช้ในกลุ่มผู้ใช้ที่เลือกสามารถเข้าถึงกลุ่มอุปกรณ์น���้ได้", - "no_user_groups": "ไม่มีกลุ่มผู้ใช้", - "edit_group": "แก้ไขกลุ่ม", - "delete_group": "ลบกลุ่ม", - "delete_group_confirm": "ลบกลุ่มอุปกรณ์ {name} หรือไม่", - "group_deleted": "ลบกลุ่มอุปกรณ์แล้ว", - "folder_group_readonly": "กลุ่มที่สำรองโฟลเดอร์ได้รับการจัดการจากโฟลเดอร์", - "manage_user_groups": "จัดการกลุ่มผู้ใช้", - "restore_failed": "กู้คืนอุปกรณ์ไม่สำเร็จ", - "no_signal_tooltip": "ไคลเอนต์ติดต่อ API เมื่อเร็ว ๆ นี้ แต่ยังไม่ได้ลงทะเบียนบนเซิร์ฟเวอร์สัญญาณ (UDP :21116) โปรดรีสตาร์ทไคลเอนต์หลังย้ายเซิร์ฟเวอร์", - "per_page": "ต่อหน้า" - }, - "keys": { - "title": "คีย์เซิร์ฟเวอร์", - "subtitle": "คีย์สาธารณะและการกำหนดค่าสำหรับไคลเอ็นต์ RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "ข้อมูลเซิร์ฟเวอร์", - "download": "ดาวน์โหลดคีย์", - "show_qr": "Show QR", - "qr_hint": "สแกนโค้ด QR นี้ด้วยแอปมือถือ RustDesk", - "no_key": "ไม่พบรหัสสาธารณะ", - "no_key_to_copy": "ไม่มีคีย์ให้คัดลอก", - "no_qr": "รหัส QR ไม่พร้อมใช���งาน", - "download_success": "ดาวน์โหลดไฟล์คีย์แล้ว", - "not_found": "ไม่พบคีย์", - "api_not_found": "ไม่พบคีย์ API" - }, - "settings": { - "title": "การตั้งค่า", - "subtitle": "การกำหนดค่าคอนโซลและการตั้งค่าบัญชี", - "tab_general": "General", - "tab_server": "เซิร์ฟเวอร์", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "ภาษา", - "change_password": "เปลี่ยนรหัสผ่าน", - "password_desc": "อัปเดตรหัสผ่านบัญชีของคุณ", - "current_password": "รหัสผ่านปัจจุบัน", - "new_password": "รหัสผ่านใหม่", - "confirm_password": "ยืนยันรหัสผ่าน", - "save_password": "อัปเดตรหัสผ่าน", - "password_changed": "เปลี่ยนรหัสผ่านเรียบร้อยแล้ว", - "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", - "passwords_not_match": "รหัสผ่านไม่ตรงกัน", - "password_requirements": "ข้อกำหนดรหัสผ่าน", - "password_requirements_not_met": "รหัสผ่านไม่ตรงตามข้อกำหนด", - "req_length": "อ��่างน้อย 8 ตัวอักษร", - "req_uppercase": "อักษรตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว", - "req_lowercase": "อักษรตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว", - "req_number": "อย่างน้อยหนึ่งหมายเลข", - "server_info": "ข้อมูลเซิร์ฟเวอร์", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "กิจกรรมคอนโซลล่าสุด", - "no_audit_logs": "ไม่พบบันทึกการตรวจสอบ", - "backend_title": "เซิร์ฟเวอร์แบ็กเอนด์", - "backend_desc": "เลือกแบ็กเอนด์เซิร์ฟเวอร์ที่จะใช้สำหรับการจัดการอุปกรณ์และบริการสัญญาณ/รีเลย์", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "เซิร์ฟเวอร์สัญญาณและรีเลย์มาตรฐาน RustDesk (hbbs + hbbr) HTTP API พื้นฐานพร้อมจุดสิ้นสุดที่จำกัด", - "backend_betterdesk_desc": "เซิร์ฟเวอร์ Go-based ที่ได้รับการปรับปรุงพร้อมการรับรองความถูกต้อง REST API, JWT, รายการบล็อก, แท็ก, เหตุการณ์ WebSocket แบบเรียลไทม์ และการบันทึกการตรวจสอบ", - "backend_feature_signal": "เซิร์ฟเวอร์สัญญาณ (การลงทะเบียน ID)", - "backend_feature_relay": "เซิร์ฟเวอร์รีเลย์ (รีเลย์การเชื่อมต่อ)", - "backend_feature_basic_api": "ส่วนที่เหลือพื้นฐาน API", - "backend_feature_full_api": "REST แบบเต็ม API (จุดสิ้นสุดมากกว่า 34 จุด)", - "backend_feature_jwt": "การรับรองความถูกต้อง JWT และ TOTP 2FA", - "backend_feature_blocklist": "การจัดการรายการบล็อก IP/ID", - "backend_feature_tags": "แท็กอุปกรณ์และการจัดกลุ่ม", - "backend_feature_audit": "ตรวจสอบการบันทึกเหตุการณ์", - "backend_feature_websocket": "เหตุการณ์ WebSocket แบบเรียลไทม์", - "backend_connection": "การเชื่อมต่อ", - "backend_api_url": "API URL", - "backend_test": "ทดสอบการเชื่อมต่อ", - "backend_testing": "กำลังทดสอบ...", - "backend_save": "ใช้แบ็กเอนด์", - "backend_saved": "เปลี่ยนแบ็กเอนด์เซิร์ฟเวอร์เรียบร้อยแล้ว ข้อมูลอุปกรณ์จะได้รับการจัดการโดยแบ็กเอนด์ใหม่", - "backend_save_failed": "ไม่สามารถสลับแบ็กเอนด์เซิร์ฟเวอร์", - "backend_test_success": "การเชื่อมต่อสำเร็จ! สามารถเข้าถึงเซิร์ฟเวอร์ได้", - "backend_test_failed": "การเชื่อมต่อล้มเหลว ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้", - "backend_confirm_switch": "คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนแบ็กเอนด์เซิร์ฟเวอร์ สิ่งนี้จะเปลี่ยนวิธีการจัดการอุปกรณ์", - "backend_unreachable": "ไม่สามารถสลับได้: ไม่สามารถเข้าถึงเซิร์ฟเวอร์เป้าหมายได้ เริ่มเซิร์ฟเวอร์ก่อน", - "invalid_backend": "การเลือกแบ็กเอนด์ไม่ถูกต้อง เลือก 'rustdesk' หรือ 'betterdesk'", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", - "totp_desc": "เพิ่มการรักษาความปลอดภัยอีกชั้นด้วยแอปตรวจสอบสิทธิ์ TOTP (Google Authenticator, Microsoft Authenticator, Authy ฯลฯ)", - "totp_enabled": "เปิดใช้งาน 2FA แล้ว", - "totp_enabled_desc": "บัญชีของคุณได้รับการปกป้องด้วยการตรวจสอบสิทธิ์แบบสองปัจจัย", - "totp_disabled": "2FA ไม่ได้เปิดใช้งาน", - "totp_disabled_desc": "เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยเพื่อความปลอดภัยของบัญชีเพิ่มเติม", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "ติดตั้งแอปตรวจสอบความถูกต้องบนโทรศัพท์ของคุณ", - "totp_step2": "สแกนรหัส QR ด้านล่าง", - "totp_step3": "กรอกรหัส 6 หลักเพื่อยืนยัน", - "totp_manual_key": "Manual key", - "totp_enter_code": "ป้อนรหัสยืนยัน", - "totp_verify_enable": "ตรวจสอบและเปิดใช้งาน", - "totp_enabled_success": "เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว!", - "totp_recovery_warning": "บันทึกรหัสกู้คืนเหล่านี้ไว้ในที่ปลอดภัย แต่ละรหัสสามารถใช้ได้เพียงครั้งเดียวเท่านั้น หากคุณสูญเสียการเข้าถึงแอปยืนยันตัว���น คุณสามารถใช้รหัสเหล่านี้เพื่อเข้าสู่ระบบได้", - "totp_done": "Done", - "totp_disable_warning": "การปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยจะทำให้บัญชีของคุณมีความปลอดภัยน้อยลง ป้อนรหัสผ่านของคุณเพื่อยืนยัน", - "totp_disabled_success": "การรับรองความถูกต้องด้วยสองปัจจัยถูกปิดใช้งาน", - "tutorials_title": "บทช่วยสอนและคำแนะนำ", - "tutorials_desc": "ควบคุมทัวร์ชมพร้อมคำแนะนำและความช่วยเหลือซ้อนทับที่แสดงทั่วทั้งคอนโซล", - "tutorials_enabled": "เปิดใช้งานบทช่วยสอน", - "tutorials_enabled_hint": "เมื่อปิดใช้งาน บทช่วยสอนจะไม่เริ่มโดยอัตโนมัติและปุ่มช่วยเหลือจะถูกซ่อน", - "tutorials_reset_hint": "ทำเครื่องหมายบทช่วยสอนทั้งหมดว่ามองไม่เห็นเพื่อให้สามารถแสดงได้อีกครั้ง", - "tutorials_enabled_toast": "เปิดใช้งานบทช่วยสอนแล้ว", - "tutorials_disabled_toast": "ปิดใช้งานบทช่วยสอนแล้ว", - "tutorials_reset_toast": "บทช่วยสอนทั้งหมดถูกรีเซ็ตแล้ว", - "tab_auth": "การรับรองความถูกต้อง", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "กำหนดค่าการรับรองความถูกต้องภายนอกผ่าน LDAP หรือ Active Directory ผู้ใช้จะสามารถลงชื่อเข้าใช้ด้วยข้อมูลรับรองโดเมนของตนได้", - "ldap_enabled": "เปิดใช้งานการตรวจสอบสิทธิ์ LDAP", - "ldap_enabled_hint": "เมื่อเปิดใช้งาน ผู้ใช้สามารถลงชื่อเข้าใช้ด้วยข้อมูลรับรอง LDAP/AD บัญชีท้องถิ่นยังคงทำงานเป็นทางเลือก", - "ldap_connection": "การเชื่อมต่อเซิร์ฟเวอร์", - "ldap_host": "โฮสต์", - "ldap_port": "ท่าเรือ", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "ข้ามการตรวจสอบ TLS", - "ldap_timeout": "ห��ดเวลาการเชื่อมต่อ (s)", - "ldap_timeout_hint": "วินาทีในการรอการตอบสนองของเซิร์ฟเวอร์ LDAP", - "ldap_bind_mode": "โหมดการผูก", - "ldap_direct_bind": "ผูกโดยตรง", - "ldap_direct_bind_hint": "ผูกโดยตรงกับเทมเพลต DN แทนที่จะใช้บัญชีบริการในการค้นหา", - "ldap_bind_dn": "ผูก DN (บัญชีบริการ)", - "ldap_bind_dn_hint": "ชื่อเฉพาะของบัญชีบริการแบบอ่านอย่างเดียวที่ใช้ค้นหาผู้ใช้", - "ldap_bind_password": "ผูกรหัสผ่าน", - "ldap_base_dn": "ฐาน DN", - "ldap_base_dn_hint": "ฐานการค้นหาเพื่อค้นหาผู้ใช้เช่น dc=ตัวอย่าง,dc=com", - "ldap_user_filter": "ตัวกรองผู้ใช้", - "ldap_user_filter_hint": "ตัวกรอง LDAP เพื���อค้นหาผู้ใช้ ใช้ {{username}} เป็นตัวยึดตำแหน่ง ค่าเริ่มต้น: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "เทมเพลต DN ผูกโดยตรง", - "ldap_direct_bind_dn_hint": "เทมเพลต DN สำหรับการผูกโดยตรง ใช้ {{username}} เป็นตัวยึดตำแหน่ง เช่น uid={{username}},ou=ผู้ใช้,dc=ตัวอย่าง,dc=com", - "ldap_user_attrs": "คุณสมบัติผู้ใช้", - "ldap_attr_id": "คุณสมบัติชื่อผู้ใช้", - "ldap_attr_email": "คุณสมบัติอีเมล", - "ldap_attr_name": "แอตทริบิวต์ชื่อที่แสดง", - "ldap_group_mapping": "กลุ่ม → การแมปบทบาท", - "ldap_group_base_dn": "DN ฐานกลุ่ม", - "ldap_group_base_dn_hint": "เว้นว่างไว้เพื่อใช้ Base DN หลัก", - "ldap_group_filter": "ตัวกรองกลุ่ม", - "ldap_group_attr_name": "คุณสมบัติชื่อกลุ่ม", - "ldap_default_role": "บทบาทเริ่มต้น", - "ldap_default_role_hint": "บทบาทที่กำหนดให้กับผู้ใช้ที่มีกลุ่ม LDAP ไม่ตรงกับการแมปใดๆ", - "ldap_role_viewer": "ผู้ดู", - "ldap_role_operator": "ผู้ดำเนินการ", - "ldap_role_admin": "ผู้ดูแลระบบ", - "ldap_group_role_map": "กลุ่ม → แผนผังบทบาท", - "ldap_group_role_map_hint": "แมปกลุ่ม LDAP กับบทบาท BetterDesk รูปแบบ: GroupDN=role คั่นด้วย | (ท่อ). ตัวอย่าง: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "ทดสอบการเชื่อมต่อ", - "ldap_testing": "กำลังทดสอบ...", - "ldap_test_success": "การเชื่อมต่อสำเร็จ! สามารถเข้าถึงเซิร์ฟเวอร์ LDAP และหนังสือรับรองการเชื่อมโยงถูกต้อง", - "ldap_test_failed": "การเชื่อมต่อล้มเหลว", - "ldap_save": "บันทึกการกำหนดค่า LDAP", - "ldap_saved": "บันทึกการกำหนดค่า LDAP สำเร็จแล้ว", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "กำหนดค่าการลงชื่อเพียงครั้งเดียวผ่านผู้ให้บริการ OpenID Connect (Azure AD, Okta, Google, Keycloak ฯลฯ)", - "oidc_enabled": "เปิดใช้งานการตรวจสอบสิทธิ์ OIDC", - "oidc_enabled_hint": "อนุญาตให้ผู้ใช้ลง���ื่อเข้าใช้ด้วยผู้ให้บริการข้อมูลประจำตัวภายนอก", - "oidc_provider": "ผู้ให้บริการข้อมูลประจำตัว", - "oidc_display_name": "ชื่อที่แสดงของปุ่ม", - "oidc_display_name_hint": "ข้อความที่แสดงบนปุ่มเข้าสู่ระบบ (เช่น Azure AD, Okta)", - "oidc_issuer_url": "ผู้ออก URL", - "oidc_issuer_url_hint": "ผู้ออก OpenID Connect URL (การค้นพบจะเป็นไปโดยอัตโนมัติ)", - "oidc_client_id": "รหัสลูกค้า", - "oidc_client_secret": "ความลับของลูกค้า", - "oidc_redirect_url": "เปลี่ยนเส้นทาง URL (โทรกลับ)", - "oidc_redirect_url_hint": "ต้องตรงกันทุกประการกับสิ่งที่กำหนดค่าไว้ใน IdP ของคุณ โดยปกติ: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "ขอบเขต", - "oidc_use_pkce": "ใช้ PKCE (แนะนำ)", - "oidc_auto_discovery": "การค้นพบอัตโนมัติ", - "oidc_allow_signup": "สร้างผู้ใช้อัตโนมัติ", - "oidc_manual_endpoints": "URL ปลายทางด้วยตนเอง", - "oidc_authorization_url": "จุดสิ้นสุดการอนุญาต", - "oidc_token_url": "จุดสิ้นสุดโทเค็น", - "oidc_userinfo_url": "ข้อมูลผู้ใช้ปลายทาง", - "oidc_claim_mapping": "การทำแผนที่การอ้างสิทธิ์", - "oidc_claim_username": "การเรียกร้องชื่อผู้ใช้", - "oidc_claim_email": "การเรียกร้องอีเมล์", - "oidc_claim_name": "การอ้างสิทธิ์ชื่อที่แสดง", - "oidc_claim_groups": "การเรียกร้องกลุ่ม", - "oidc_role_mapping": "การทำแผนที่บทบาท", - "oidc_default_role": "บทบาทเริ่มต้น", - "oidc_group_role_map": "กลุ่ม → การแมปบทบาท", - "oidc_group_role_map_hint": "หนึ่งการแมปต่อบรรทัด: group_name=role (เช่น admins=admin, โอเปอเรเตอร์=โอเปอเรเตอร์)", - "oidc_test_discovery": "ทดสอบการค้นพบ", - "oidc_testing": "กำลังทดสอบ...", - "oidc_test_success": "การค้นพบสำเร็จ! ปลายทางได้รับการแก้ไขแล้ว", - "oidc_test_failed": "การค้นพบล้มเหลว", - "oidc_issuer_required": "ผู้ออก URL จำเป็นต้องทดสอบการค้นพบ", - "oidc_save": "บันทึกการกำหนดค่า OIDC", - "oidc_saved": "บันทึกการกำหนดค่า OIDC สำเร็จแล้ว", - "tab_advanced": "ขั้นสูง", - "connection_mode_title": "กลยุทธ์การเชื่อมต่อ", - "connection_mode_desc": "ควบคุมวิธีที่ RustDesk ไคลเอนต์เดสก์ท็อปเชื่อมต่อ: P2P โดยตรง (hole punch) เมื่อเป็นไปได้ หรือผ่านรีเลย์เสมอ", - "connection_mode_label": "โหมดการเชื่อมต่อเริ่มต้น", - "connection_mode_p2p_first": "P2P ก่อน (แนะนำ) — ลองเชื่อมต่อโดยตรง หากล้มเหลวใช้รีเลย์", - "connection_mode_relay_only": "รีเลย์เท่านั้น — ทุกเซสชันใช้เซิร์ฟเวอร์รีเลย์", - "connection_mode_advanced": "ตัวเลือกขั้นสูง", - "connection_mode_fallback_ms": "หมดเวลา P2P fallback (มิลลิวินาที)", - "connection_mode_same_nat_relay": "บังคับใช้รีเลย์เมื่อทั้งสองฝ่ายใช้ IP สาธารณะเดียวกัน (NAT hairpin)", - "connection_mode_network_hint": "P2P ต้องการพอร์ต UDP 21116 ที่เข้าถึงได้ระหว่างไคลเอนต์ เซิร์ฟเวอร์ต้องเปิด Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115 เว็บเบราว์เซอร์ใช้รีเลย์เสมอ", - "connection_mode_save": "บันทึก", - "connection_mode_save_restart": "บันทึกและรีสตาร์ทเซิร์ฟเวอร์", - "connection_mode_saved": "บันทึกโหมดการเชื่อมต่อแล้ว", - "connection_mode_restart_started": "เริ่มรีสตาร์ทเซิร์ฟเวอร์แล้ว", - "connection_mode_restart_failed": "รีสตาร์ทเซิร์ฟเวอร์ล้มเหลว", - "connection_mode_not_configurable": "ไม่สามารถเปลี่ยนโหมดการเชื่อมต่อในการติดตั้งนี้ (ไม่พบ systemd unit หรือ docker-compose)", - "connection_mode_compose_error": "ไม่พบส่วน server environment ใน docker-compose.yml", - "connection_mode_source_saved": "บันทึกใน", - "connection_mode_source_defaults": "ใช้ค่าเริ่มต้นของเซิร์ฟเวอร์ (ไม่สามารถเขียนจากแผงควบคุม)", - "connection_mode_runtime": "เซิร์ฟเวอร์ที่ใช้งานอยู่", - "advanced_title": "ไฟล์การกำหนดค่า", - "advanced_desc": "แก้ไขไฟล์การกำหนดค่าเซิร์ฟเวอร์โดยตรง การเปลี่ยนแปลงอาจต้องรีสตาร์ทบริการ จะสร้างสำเนาสำรองก่อนบันทึกแต่ละครั้ง", - "advanced_warning": "ไฟล์เหล่านี้มีข้อมูลความลับ (API key, รหัสผ่านฐานข้อมูล, session secret) แก้ไขเฉพาะเมื่อเข้าใจผลกระทบ ไวยากรณ์ผิดพลาดอาจทำให้เซิร์ฟเวอร์ไม่สามารถเริ่มต้นได้", - "advanced_files_label": "ไฟล์", - "advanced_select_file": "เลือกไฟล์จากรายการเพื่อดูหรือแก้ไขเนื้อหา", - "advanced_reload": "โหลดใหม่", - "advanced_save": "บันทึกไฟล์", - "advanced_apply_restart": "ใช้งาน (รีสตาร์ทบริการ)", - "advanced_saved": "บันทึกไฟล์การกำหนดค่าแล้ว", - "advanced_restart_after_save": "บันทึกการกำหนดค่าแล้ว รีสตาร์ทบริการที่ได้รับผลกระทบตอนนี้เพื่อให้การเปลี่ยนแปลงมีผล?", - "advanced_restart_confirm": "รีสตาร์ทบริการ BetterDesk ที่เกี่ยวข้อง? การเชื่อมต่อที่ใช้งานอยู่อาจหยุดชะงักชั่วคราว", - "advanced_restart_console_confirm": "รีสตาร์ทบริการเว็บคอนโซล? เซสชันเบราว์เซอร์จะตัดการเชื่อมต่อชั่วคราว และหน้าจะโหลดใหม่เมื่อคอนโซลกลับมา", - "advanced_restart_started": "เริ่มรีสตาร์ทบริการแล้ว", - "advanced_restart_done": "รีสตาร์ทคอนโซลแล้ว — กำลังโหลดหน้าใหม่…", - "advanced_restart_polling": "รอให้คอนโซลกลับมาออนไลน์…", - "advanced_restart_timeout": "ส่งคำสั่งรีสตาร์ทแล้วแต่คอนโซลไม่ตอบสนองทันเวลา ตรวจสอบ systemd/NSSM logs และโหลดใหม่ด้วยตนเอง", - "advanced_restart_failed": "รีสตาร์ทบริการล้มเหลว (สิทธิ์ไม่เพียงพอหรือไม่ได้ติดตั้งบริการ)", - "advanced_save_confirm": "บันทึกการเปลี่ยนแปลงในไฟล์นี้? จะสร้างสำรองของเวอร์ชันก่อนหน้า", - "advanced_unsaved_confirm": "มีการเปลี่ยนแปลงที่ยังไม่บันทึก ยกเลิก?", - "advanced_no_files": "ไม่มีไฟล์การกำหนดค่าในระบบนี้", - "advanced_readonly": "อ่านอย่างเดียว", - "advanced_missing": "ขาดหายไป", - "advanced_new_file": "ไฟล์ใหม่ (จะไม่สร้างจนกว่าจะบันทึก)", - "advanced_new_file_hint": "ไฟล์ใหม่ — เพิ่มเนื้อหาและบันทึก", - "advanced_backup_created": "สร้างสำรองแล้ว", - "advanced_restart_console": "รีสตาร์ทบริการเว็บคอนโซล (เช่น systemctl restart betterdesk-console) เพื่อให้การเปลี่ยนแปลง .env มีผล", - "advanced_restart_goserver": "รีสตาร์ท BetterDesk Go server เพื่อโหลดการเปลี่ยนแปลง blocklist", - "advanced_restart_systemd": "หลังแก้ไข systemd units ให้รัน: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "รีสตาร์ทบริการที่ได้รับผลกระทบเพื่อให้การเปลี่ยนแปลงมีผล", - "advanced_error_unknown": "ไฟล์การกำหนดค่าไม่รู้จัก", - "advanced_error_not_found": "ไม่มีไฟล์นี้", - "advanced_error_not_file": "เส้นทางนี้ไม่ใช่ไฟล์ปกติ", - "advanced_error_too_large": "ไฟล์เกินขนาดสูงสุดที่แก้ไขได้ (512 KB)", - "advanced_error_binary": "ไม่สามารถแก้ไขไฟล์ไบนารีในแผงควบคุม", - "advanced_error_invalid": "เนื้อหาไฟล์ไม่ถูกต้อง", - "advanced_error_not_writable": "กระบวนการคอนโซลไม่มีสิทธิ์เขียนไฟล์นี้", - "advanced_file_console-env": "สภาพแวดล้อมคอนโซล (.env)", - "advanced_file_console-env-local": "การแทนที่คอนโซล (.env.local)", - "advanced_file_go-blocklist": "บัญชีดำเซิร์ฟเวอร์ Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (หน่วยบริการ)", - "advanced_file_systemd-server": "systemd: betterdesk-server (หน่วยบริการ)", - "advanced_file_console-session-secret": "รหัสลับเซสชันคอนโซล (.session_secret)", - "advanced_file_go-audit-log": "บันทึกการตรวจสอบเซิร์ฟเวอร์ Go (audit.jsonl)", - "advanced_file_build-env": "สภาพแวดล้อมบิลด์ของเอเจนต์ (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (การตั้งค่า supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (การ orchestration)", - "advanced_restart_none": "ไฟล์นี้ไม่ต้องรีสตาร์ทบริการ", - "enrollment_title": "การลงทะเบียนอุปกรณ์ (RustDesk)", - "enrollment_desc": "ควบคุมวิธีที่ RustDesk ไคลเอนต์ใหม่ลงทะเบียน และวิธีที่ผู้ดำเนินการอนุมัติในหน้าคำขอลงทะเบียน", - "enrollment_require_approval": "ต้องการการอนุมัติจากผู้ดำเนินการ (Managed mode)", - "enrollment_require_approval_hint": "เมื่อเปิดใช้งาน ไคลเอนต์ที่ไม่รู้จักจะรอในคิวจนกว่าผู้ดำเนินการจะอนุมัติใน \"คำขอลงทะเบียน\"", - "enrollment_rich_approve": "แบบฟอร์มอนุมัติเต็มรูปแบบ (ชื่อ, โฟลเดอร์, กลุ่ม, แท็ก)", - "enrollment_rich_approve_hint": "แสดงกล่องโต้ตอบโดยละเอียดเมื่ออนุมัติคำขอลงทะเบียนหรือ LAN", - "enrollment_tag_picker": "เลือกแท็กจากแท็กอุปกรณ์ที่มีอยู่", - "enrollment_tag_picker_hint": "ให้ผู้ดำเนินการเลือกแท็กจากรายการในหน้าอุปกรณ์แทนการพิมพ์เท่านั้น", - "enrollment_open_requests": "เปิดคำขอลงทะเบียน", - "enrollment_pending_count": "คำขอลงทะเบียนที่รอดำเนินการ {count} รายการ" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "การเข้าสู่ระบบล้มเหลว", - "action_logout": "Logout", - "action_password_change": "เปลี่ยนรหัสผ่านแล้ว", - "action_2fa_enable": "เปิดใช้งาน 2FA แล้ว", - "action_2fa_disable": "2FA ปิดการใช้งาน", - "action_user_create": "สร้างโดยผู้ใช้", - "action_user_update": "อัปเดตผู้ใช้แล้ว", - "action_user_delete": "ลบผู้ใช้แล้ว", - "action_settings_update": "อัปเดตการตั้งค่าแล้ว", - "action_device_ban": "อุปกรณ์ถูกแบน", - "action_device_unban": "อุปกรณ์ถูกยกเลิกการแบน", - "action_device_delete": "ลบอุปกรณ์แล้ว" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "ตัวเลือกการกำหนดค่า", - "server_address": "ที่อยู่เซิร์ฟเวอร์", - "server_address_hint": "โดเมนเซิร์ฟเวอร์���รือที่อยู่ IP ของคุณ", - "custom_port": "Custom Port", - "port_hint": "เว้นว่างไว้สำหรับค่าเริ่มต้น (21116)", - "relay_server": "เซิร์ฟเวอร์รีเลย์", - "relay_placeholder": "เช่นเดียวกับเซิร์ฟเวอร์ ID หากว่างเปล่า", - "relay_hint": "ทางเลือก: ที่อยู่เซิร์ฟเวอร์รีเลย์แยกต่างหาก", - "include_key": "รวมกุญแจสาธารณะไว้ในการกำหนดค่า", - "generate": "สร้างการกำหนดค่า", - "output": "เอาต์พุตการกำหนดค่า", - "usage_title": "รายละเอียดการเชื่อมต่อ", - "generated": "สร้างการกำหนดค่าแล้ว", - "server_required": "ต้องระบุที่อยู่เซิร์ฟเวอร์", - "nothing_to_copy": "สร้างการกำหนดค่าก่อน", - "bundles_title": "ชุดตัวแทน", - "new_bundle": "มัดใหม่", - "editor_title": "ตัวแก้ไขมัด", - "empty_state": "เลือกชุดทางด้านซ้ายหรือสร้างชุดใหม่เพื่อเริ่มต้น", - "loading": "กำลังโหลด...", - "no_bundles": "ยังไม่มีบันเดิล สร้างอันแรกของคุณ", - "bundle_name": "ชื่อชุด", - "bundle_name_hint": "ป้ายกำกับภายในเท่านั้น — ไม่แสดงต่อผู้ใช้ปลายทาง", - "short_link": "ลิงก์ดาวน์โหลดแบบสั้น", - "short_link_hint": "ใช้ใน URL สาธารณะ (/d/…) ใช้ได้เฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดกลาง (2–32 ตัวอักษร) กรอกอัตโนมัติจากชื่อแพ็กเกจ — ย่อให้สั้นเพื่อแชร์ง่าย (เช่น acme)", - "branding_section": "การสร้างแบรนด์", - "company_name": "ชื่อบริษัท/แบรนด์", - "short_text": "คำอธิบายสั้น ๆ", - "contact_email": "อีเมล์ติดต่อ", - "contact_phone": "โทรศัพท์ติดต่อ", - "contact_url": "ติดต่อเว็บไซต์", - "logo": "โลโก้", - "logo_hint": "PNG, JPEG, SVG หรือ WebP สูงสุด 256 KB.", - "logo_clear": "ลบโลโก้", - "primary_color": "สีหลัก", - "accent_color": "สีส่วนหัว", - "default_lang": "ภาษาเริ่มต้น", - "allow_unattended": "อนุญาตการเข้าถึงโดยไม่ได้ตั้งใจ", - "allow_unattended_hint": "เมื่อเปิดใช้งาน ตัวแทนจะแสดงรหัสผ่านถาว���สำหรับการเข้าถึงของผู้ปฏิบัติงาน", - "save": "บันทึกชุดรวม", - "revoke": "เพิกถอน", - "unrevoke": "เปิดใช้งานอีกครั้ง", - "revoked": "เพิกถอนแล้ว", - "preview_title": "ดูตัวอย่างสด", - "preview_hint": "ลักษณะโดยประมาณของหน้าต่างตัวแทนผู้ใช้ปลายทาง", - "preview_default_name": "รองรับ BetterDesk", - "preview_status_ready": "พร้อม", - "preview_id": "บัตรประจำตัวของคุณ", - "preview_password": "รหัสผ่าน", - "preview_chat": "แชทกับฝ่ายสนับสนุน", - "preview_settings": "การตั้งค่า (ผู้ดูแลระบบเท่านั้น)", - "preview_quit": "ออก (เฉพาะผู้ดูแลระบบเท่านั้น)", - "download_link_title": "ลิงค์ดาวน์โหลด", - "download_link_hint": "แชร์ลิงก์นี้กับผู้ใช้ปลายทาง พวกเขาจะเห็นหน้าดาวน์โหลดที่มีแบรนด์ ลิงก์ hex เก่ายังใช้งานได้หลังเปลี่ยนลิงก์สั้น", - "open_portal": "เปิด", - "created": "สร้างชุดรวมแล้ว", - "saved": "บันทึกชุดแล้ว", - "deleted": "ลบชุดแล้ว", - "revoked_ok": "แพ็กเกจถูกเพิกถอนแล้ว", - "unrevoked_ok": "เปิดใช้งานชุดรวมอีกครั้งแล้ว", - "link_copied": "คัดลอกลิงก์ไปยังคลิปบอร์ดแล้ว", - "copy_failed": "ไม่สามารถคัดลอกโดยอัตโนมัติ — โปรดคัดลอกด้วยตนเอง", - "unsaved_confirm": "ยกเลิกการเปลี่ยนแปลงที่ยังไม่ได้บั��ทึกใช่ไหม", - "confirm_revoke": "เพิกถอนชุดรวมนี้ใช่ไหม ลิงค์ดาวน์โหลดจะหยุดทำงาน", - "confirm_unrevoke": "เปิดใช้งานชุดรวมนี้อีกครั้งหรือไม่", - "confirm_delete": "ลบชุดข้อมูลนี้อย่างถาวรใช่ไหม สิ่งนี้ไม่สามารถยกเลิกได้", - "errors": { - "validation_failed": "การตรวจสอบความถูกต้องล้มเหลว", - "name_required": "ต้องระบุชื่อชุดรวม", - "company_name_required": "ต้องระบุชื่อบริษัท", - "logo_invalid": "โลโก้ต้องเป็นไฟล์รูปภาพที่ถูกต้อง", - "logo_too_large": "โลโก้ต้องมีขนาด 256 KB หรือเล็กกว่า", - "logo_read_failed": "ไม่สามารถอ่านไฟล์โลโก้", - "primary_color_invalid": "สีหลักต้องเป็นค่าฐานสิบหก (เช่น #2563eb)", - "accent_color_invalid": "สีของส่วนหัวต้องเป็นค่าฐานสิบหก (เช่น #1e293b)", - "contact_url_invalid": "เว็บไซต์ติดต่อต้องเป็น URL ที่ถูกต้อง", - "server_host_required": "ต้องระบุที่อยู่เซิร์ฟเวอร์สาธารณะ", - "server_host_invalid": "กรุณากรอกชื่อโดเมนหรือที่อยู่ IPv4 ที่ถูกต้อง", - "token_failed": "ไม่สามารถสร้าง enrollment token — ตรวจสอบการเชื่อมต่อเซิร์ฟเวอร์", - "rebuild_revoked": "ไม่สามารถ build bundle ที่ถูกเพิกถอน — เปิดใช้งานใหม่ก่อน", - "slug_invalid": "ลิงก์สั้นต้องมีเฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดกลาง", - "slug_too_short": "ลิงก์สั้นต้องมีอย่างน้อย 2 ตัวอักษร", - "slug_too_long": "ลิงก์สั้นต้องไม่เกิน 32 ตัวอักษร", - "slug_taken": "ลิงก์สั้นนี้ถูกใช้โดยแพ็กเกจอื่นแล้ว" - }, - "legacy_title": "ตัวสร้างการกำหนดค่าไคลเอนต์", - "connection_section": "การเชื่อมต่อเซิร์ฟเวอร์", - "server_host": "ที่อยู่เซิร์ฟเวอร์สาธารณะ", - "server_host_placeholder": "support.example.com หรือ 203.0.113.10", - "server_host_hint": "ชื่อโดเมนหรือ IP สาธารณะที่ผู้ใช้งานเข้าถึงเซิร์ฟเวอร์ BetterDesk ของคุณ พอร์ตมาจากการกำหนดค่าคอนโซล", - "use_https": "ใช้ HTTPS / WSS (แนะนำ)", - "enrollment_token": "การลงทะเบียนอุปกรณ์", - "enrollment_token_pending": "ต่ออุปกรณ์หลังการอนุมัติ", - "enrollment_token_set": "ต่ออุปกรณ์ — อนุมัติใน Registrations", - "enrollment_token_hint": "การติดตั้งแต่ละครั้งจะลงทะเบียนด้วยตนเอง อนุมัติอุปกรณ์ใหม่ในแผง Registrations เซิร์ฟเวอร์จะออก access key เฉพาะต่อคอมพิวเตอร์", - "enrollment_per_device": "ต่ออุปกรณ์ — อนุมัติใน Registrations", - "background_color": "สีพื้นหลังหน้าต่าง", - "surface_color": "สีพื้นหลังการ์ด", - "text_color": "สีตัวอักษร", - "text_muted_color": "สีตัวอักษรรอง", - "status_ready_color": "สีตัวบ่งชี้พร้อม", - "header_text_color": "สีตัวอักษรส่วนหัว", - "builds_title": "การ Build ไคลเอนต์", - "builds_hint": "ตัวติดตั้งที่คอมไพล์บนเซิร์ฟเวอร์นี้สำหรับแต่ละแพลตฟอร์ม Build ใหม่หลังแก้ไขข้อผิดพลาด toolchain หรืออัปเดต agent source", - "builds_loading": "กำลังโหลดสถานะ build…", - "builds_empty": "ยังไม่มี build ในคิว — บันทึก bundle หรือคลิก \"Build ใหม่ทั้งหมด\"", - "rebuild_all": "Build ใหม่ทั้งหมด", - "rebuilding_all": "กำลังเพิ่ม build ใหม่เข้าคิว…", - "rebuild_queued": "เพิ่ม build ทุกแพลตฟอร์มเข้าคิวแล้ว", - "rebuild_confirm": "Build ตัวติดตั้งทุกแพลตฟอร์มใหม่สำหรับ bundle นี้? สิ่งที่พร้อมแล้วจะถูกแทนที่", - "build_status_ready": "พร้อม", - "build_status_pending": "รอคิว", - "build_status_building": "กำลัง Build", - "build_status_failed": "ล้มเหลว", - "builds_summary": "{{ready}} พร้อม · {{pending}} รอคิว · {{building}} กำลัง Build · {{failed}} ล้มเหลว", - "build_error_hint": "ข้อผิดพลาด Build", - "preview_help": "ขอความช่วยเหลือ" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "ไอดีเซิร์ฟเวอร์", - "relay_server": "เซิร์ฟเวอร์รีเลย์", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "กำลังตรวจสอบ...", - "label": "Status", - "no_signal": "ไม่มีสัญญาณ" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "เชื่อมต่อผ่านไคลเอนต์เดสก์ท็อป", - "remote_viewer": "โปรแกรมดูระยะไกล", - "web_remote": "เว็บระยะไกล", - "details": "Details", - "edit": "แก้ไข", - "delete": "ลบ", - "ban": "Ban", - "unban": "Unban", - "save": "บันทึก", - "cancel": "ยกเลิก", - "confirm": "ยืนยัน", - "close": "ปิด", - "clear": "Clear", - "ok": "OK", - "saved": "บันทึกเรียบร้อยแล้ว", - "back": "กลับ", - "create": "สร้าง", - "dismiss": "Dismiss", - "view_all": "ดูทั้งหมด", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s ที่แล้ว", - "minutes_ago": "{count}m ที่แล้ว", - "hours_ago": "{count}h ที่แล้ว", - "days_ago": "{count}d ที่แล้ว", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "การจัดการผู้ใช้", - "subtitle": "จัดการผู้ใช้คอนโซลและการอนุญาต", - "add_user": "Add User", - "edit_user": "แก้ไขผู้ใช้", - "username": "ชื่อผู้ใช้", - "username_placeholder": "กรอกชื่อผู้ใช้", - "username_hint": "3-32 ตัวอักษร ตัวอักษร ตัวเลข และขีดล่างเท่านั้น", - "password": "รหัสผ่าน", - "password_placeholder": "ใส่รหัสผ่าน", - "password_hint": "ขั้นต่ำ 8 ตัวอักษร โดยมีทั้งตัวพิมพ์เล็ก ตัวเลข และสัญลักษณ์ผสมกัน", - "password_leave_empty": "เว้นว่างไว้เพื่อให้เป็นปัจจุบัน", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "สร้างแล้ว", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "สร้างผู้ใช้", - "edit": "แก้ไข", - "reset_password": "รีเซ็ตรหัสผ่าน", - "new_password": "รหัสผ่านใหม่", - "delete_title": "ลบผู้ใช้", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบผู้ใช้ {username}", - "delete_success": "ลบผู้ใช้เรียบร้อยแล้ว", - "user_created": "สร้างผู้ใช้สำเร็จแล้ว", - "user_updated": "อัปเดตผู้ใช้เรียบร้อยแล้ว", - "password_reset_success": "รีเซ็ตรหัสผ่านสำเร็จ", - "empty_title": "ไม่พบผู้ใช้", - "empty_text": "เพิ่มผู้ใช้เพื่อจัดการการเข้าถึงคอนโซล", - "fill_required": "กรุณากรอกข้อมูลในช่องที่ต้องกรอกทั้งหมด", - "invalid_username": "ชื่อผู้ใช้ต้องมีความยาว 3-32 ตัวอักษร ตัวอักษร ตัวเลข และขีดล่างเท่านั้น", - "username_exists": "มีชื่อผู้ใช้อยู่แล้ว", - "weak_password": "รหัสผ่านอ่อนเกินไป", - "password_too_short": "รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร", - "invalid_role": "บทบาทไม่ถูกต้อง", - "cannot_demote_self": "คุณไม่สามารถลดระดับตัวเองได้", - "cannot_delete_self": "คุณไม่สามารถลบบัญชีของคุณเองได้", - "last_admin": "ไม่สามารถลบผู้ดู���ลระบบคนสุดท้ายได้", - "admin_only": "คุณลักษณะนี้มีให้สำหรับผู้ดูแลระบบเท่านั้น", - "password_required": "ต้องใช้รหัสผ่าน", - "not_found": "ไม่พบผู้ใช้", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย", - "tip_strong_passwords": "ใช้รหัสผ่านที่รัดกุมและไม่ซ้ำกันสำหรับผู้ใช้แต่ละคน", - "tip_unique_accounts": "สร้างบัญชีส่วนบุคคลสำหรับแต่ละบุคคล", - "tip_viewer_role": "ใช้บทบาทผู้ดูสำหรับผู้ใช้ที่ต้องการสิทธิ์การอ่านเท่านั้น", - "tip_operator_role": "ใช้บทบาทผู้ดำเนินการสำหรับผู้ใช้ที่ต้องการจัดการอุปกรณ์ แต่ไม่ใช่ผู้ใช้", - "tip_audit_logs": "ตรวจสอบบันทึกการตรวจสอบเป็นประจำเพื่อหากิจกรรมที่น่าสงสัย", - "role_pro": "รุ่นโปร (API เท่านั้น)", - "role_super_admin": "Super Admin", - "role_server_admin": "ผู้ดูแลระบบเซิร์ฟเวอร์", - "role_global_admin": "ผู้ดูแลระบบทั่วโลก", - "organizations": "องค์กรต่างๆ", - "user_organizations": "องค์กรสำหรับ {username}", - "no_organizations": "ผู้ใช้ไม่ได้ถูกกำหนดให้กับองค์กรใดๆ", - "org_removed": "นำการมอบหมายองค์กรออกแล้ว", - "server_role_label": "บทบาทของเซิร์ฟเวอร์", - "server_role_hint": "กำหนดสิ่งที่ผู้ใช้สามารถดำเนินการได้ทั่วทั้งคอนโซล (การเข้าถึงแผงควบคุม การกำหนดค่าเซิร์ฟเวอร์ การตรวจสอบ ฯลฯ)", - "org_membership_section": "สมาชิกภาพองค์กร", - "org_membership_hint": "ผู้ใช้สามารถอยู่ในหลายองค์กรได้ บทบาทขององค์กรจะควบคุมสิทธิ์ภายในองค์กรนั้นเท่านั้น และไม่ขึ้นอยู่กับบทบาทของเซิร์ฟเวอร์ข้างต้น", - "column_organizations": "องค์กรต่างๆ", - "no_orgs_short": "—", - "org_count_one": "องค์กร {count}", - "org_count_many": "องค์กร {count}", - "all_orgs_assigned": "ผู้ใช้เป็นสมาชิกของทุกองค์กรอยู่แล้ว", - "user_groups": "กลุ่มผู้ใช้", - "user_groups_hint": "กลุ่มผู้ใช้สามารถใช้เพื่อให้สิทธิ์การเข้าถึงกลุ่มอุปกรณ์ที่เลือกได้", - "loading_user_groups": "กำลังโหลดกลุ่มผู้ใช้...", - "no_user_groups": "ไม่มีกลุ่มผู้ใช้", - "create_user_group": "สร้างกลุ่ม", - "edit_user_group": "แก้ไขกลุ่มผู้ใช้", - "delete_user_group": "ลบกลุ่มผู้ใช้", - "delete_user_group_confirm": "ลบกลุ่มผู้ใช้ {name} หรือไม่ สมาชิกจะสูญเสียสิทธิ์การเข้าถึงที่ได้รับจากกลุ่มนี้", - "user_group_created": "สร้างกลุ่มผู้ใช้แล้ว", - "user_group_updated": "อัปเดตกลุ่มผู้ใช้แล้ว", - "user_group_deleted": "ลบกลุ่มผู้ใช้แล้ว", - "user_group_not_found": "ไม่พบกลุ่มผู้ใช้", - "group_name": "ชื่อกลุ่ม", - "group_name_placeholder": "ผู้ประกอบการ", - "group_note": "Note", - "group_note_placeholder": "หมายเหตุเพิ่มเติม", - "group_name_required": "ต้องระบุชื่อกลุ่ม", - "group_members_count": "สมาชิก {count}", - "provider": "ผู้ให้บริการ", - "provider_local": "ท้องถิ่น", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "จัดการโดยผู้ให้บริการ identity", - "provider_managed_hint": "บัญชีนี้ถูกจัดการโดย identity provider ภายนอก (LDAP/AD หรือ SSO) รหัสผ่านและบทบาทถูกควบคุมโดย provider และไม่สามารถเปลี่ยนแปลงได้ที่นี่" - }, - "folders": { - "title": "Folders", - "create": "สร้างโฟลเดอร์", - "edit": "แก้ไขโฟลเดอร์", - "delete": "ลบโฟลเดอร์", - "name": "Folder Name", - "name_placeholder": "ป้อนชื่อโฟลเดอร์", - "name_required": "ต้องระบุชื่อโฟลเดอร์", - "name_too_long": "ชื่อโฟลเดอร์ยาวเกินไป (สูงสุด 50 ตัวอักษร)", - "color": "Color", - "icon": "Icon", - "not_found": "ไม่พบโฟลเดอร์", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบโฟลเดอร์นี้ อุปกรณ์จะถูกยกเลิกการกำหนด", - "delete_success": "ลบโฟลเดอร์เรียบร้อยแล้ว", - "created": "สร้างโฟลเดอร์สำเร็จแล้ว", - "updated": "อัปเดตโฟลเดอร์เรียบร้อยแล้ว", - "no_devices_selected": "ไม่ได้เลือกอุปกรณ์", - "devices_moved": "ย้ายอุปกรณ์เรียบร้อยแล้ว", - "device_assigned": "อุปกรณ์ที่กำหนดให้กับโฟลเดอร์", - "unassigned": "Unassigned", - "all_devices": "อุปกรณ์ทั้งหมด", - "drag_hint": "ลากอุปกรณ์ไปยังโฟลเดอร์เพื่อจัดระเบียบ", - "move_to": "ย้ายไปที่", - "toggle_sidebar": "สลับแถบด้านข้าง" - }, + "no_groups": "ยังไม่มีกลุ่ม", + "manual_groups": "กลุ่มแบบแมนนวล", + "dynamic_memberships": "การเป็นสมาชิกแบบไดนามิก", + "group_allowed_user_groups": "กลุ่มผู้ใช้ที่อนุญาต", + "group_allowed_user_groups_hint": "ผู้ใช้ในกลุ่มผู้ใช้ที่เลือกสามารถเข้าถึงกลุ่มอุปกรณ์น���้ได้", + "no_user_groups": "ไม่มีกลุ่มผู้ใช้", + "edit_group": "แก้ไขกลุ่ม", + "delete_group": "ลบกลุ่ม", + "delete_group_confirm": "ลบกลุ่มอุปกรณ์ {name} หรือไม่", + "group_deleted": "ลบกลุ่มอุปกรณ์แล้ว", + "folder_group_readonly": "กลุ่มที่สำรองโฟลเดอร์ได้รับการจัดการจากโฟลเดอร์", + "manage_user_groups": "จัดการกลุ่มผู้ใช้", + "restore_failed": "กู้คืนอุปกรณ์ไม่สำเร็จ", + "no_signal_tooltip": "ไคลเอนต์ติดต่อ API เมื่อเร็ว ๆ นี้ แต่ยังไม่ได้ลงทะเบียนบนเซิร์ฟเวอร์สัญญาณ (UDP :21116) โปรดรีสตาร์ทไคลเอนต์หลังย้ายเซิร์ฟเวอร์", + "per_page": "ต่อหน้า" + }, + "keys": { + "title": "คีย์เซิร์ฟเวอร์", + "subtitle": "คีย์สาธารณะและการกำหนดค่าสำหรับไคลเอ็นต์ RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "ข้อมูลเซิร์ฟเวอร์", + "download": "ดาวน์โหลดคีย์", + "show_qr": "Show QR", + "qr_hint": "สแกนโค้ด QR นี้ด้วยแอปมือถือ RustDesk", + "no_key": "ไม่พบรหัสสาธารณะ", + "no_key_to_copy": "ไม่มีคีย์ให้คัดลอก", + "no_qr": "รหัส QR ไม่พร้อมใช���งาน", + "download_success": "ดาวน์โหลดไฟล์คีย์แล้ว", + "not_found": "ไม่พบคีย์", + "api_not_found": "ไม่พบคีย์ API" + }, + "settings": { + "title": "การตั้งค่า", + "subtitle": "การกำหนดค่าคอนโซลและการตั้งค่าบัญชี", + "tab_general": "General", + "tab_server": "เซิร์ฟเวอร์", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "ภาษา", + "change_password": "เปลี่ยนรหัสผ่าน", + "password_desc": "อัปเดตรหัสผ่านบัญชีของคุณ", + "current_password": "รหัสผ่านปัจจุบัน", + "new_password": "รหัสผ่านใหม่", + "confirm_password": "ยืนยันรหัสผ่าน", + "save_password": "อัปเดตรหัสผ่าน", + "password_changed": "เปลี่ยนรหัสผ่านเรียบร้อยแล้ว", + "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", + "passwords_not_match": "รหัสผ่านไม่ตรงกัน", + "password_requirements": "ข้อกำหนดรหัสผ่าน", + "password_requirements_not_met": "รหัสผ่านไม่ตรงตามข้อกำหนด", + "req_length": "อ��่างน้อย 8 ตัวอักษร", + "req_uppercase": "อักษรตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว", + "req_lowercase": "อักษรตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว", + "req_number": "อย่างน้อยหนึ่งหมายเลข", + "server_info": "ข้อมูลเซิร์ฟเวอร์", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "กิจกรรมคอนโซลล่าสุด", + "no_audit_logs": "ไม่พบบันทึกการตรวจสอบ", + "backend_title": "เซิร์ฟเวอร์แบ็กเอนด์", + "backend_desc": "เลือกแบ็กเอนด์เซิร์ฟเวอร์ที่จะใช้สำหรับการจัดการอุปกรณ์และบริการสัญญาณ/รีเลย์", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "เซิร์ฟเวอร์สัญญาณและรีเลย์มาตรฐาน RustDesk (hbbs + hbbr) HTTP API พื้นฐานพร้อมจุดสิ้นสุดที่จำกัด", + "backend_betterdesk_desc": "เซิร์ฟเวอร์ Go-based ที่ได้รับการปรับปรุงพร้อมการรับรองความถูกต้อง REST API, JWT, รายการบล็อก, แท็ก, เหตุการณ์ WebSocket แบบเรียลไทม์ และการบันทึกการตรวจสอบ", + "backend_feature_signal": "เซิร์ฟเวอร์สัญญาณ (การลงทะเบียน ID)", + "backend_feature_relay": "เซิร์ฟเวอร์รีเลย์ (รีเลย์การเชื่อมต่อ)", + "backend_feature_basic_api": "ส่วนที่เหลือพื้นฐาน API", + "backend_feature_full_api": "REST แบบเต็ม API (จุดสิ้นสุดมากกว่า 34 จุด)", + "backend_feature_jwt": "การรับรองความถูกต้อง JWT และ TOTP 2FA", + "backend_feature_blocklist": "การจัดการรายการบล็อก IP/ID", + "backend_feature_tags": "แท็กอุปกรณ์และการจัดกลุ่ม", + "backend_feature_audit": "ตรวจสอบการบันทึกเหตุการณ์", + "backend_feature_websocket": "เหตุการณ์ WebSocket แบบเรียลไทม์", + "backend_connection": "การเชื่อมต่อ", + "backend_api_url": "API URL", + "backend_test": "ทดสอบการเชื่อมต่อ", + "backend_testing": "กำลังทดสอบ...", + "backend_save": "ใช้แบ็กเอนด์", + "backend_saved": "เปลี่ยนแบ็กเอนด์เซิร์ฟเวอร์เรียบร้อยแล้ว ข้อมูลอุปกรณ์จะได้รับการจัดการโดยแบ็กเอนด์ใหม่", + "backend_save_failed": "ไม่สามารถสลับแบ็กเอนด์เซิร์ฟเวอร์", + "backend_test_success": "การเชื่อมต่อสำเร็จ! สามารถเข้าถึงเซิร์ฟเวอร์ได้", + "backend_test_failed": "การเชื่อมต่อล้มเหลว ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้", + "backend_confirm_switch": "คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนแบ็กเอนด์เซิร์ฟเวอร์ สิ่งนี้จะเปลี่ยนวิธีการจัดการอุปกรณ์", + "backend_unreachable": "ไม่สามารถสลับได้: ไม่สามารถเข้าถึงเซิร์ฟเวอร์เป้าหมายได้ เริ่มเซิร์ฟเวอร์ก่อน", + "invalid_backend": "การเลือกแบ็กเอนด์ไม่ถูกต้อง เลือก 'rustdesk' หรือ 'betterdesk'", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", + "totp_desc": "เพิ่มการรักษาความปลอดภัยอีกชั้นด้วยแอปตรวจสอบสิทธิ์ TOTP (Google Authenticator, Microsoft Authenticator, Authy ฯลฯ)", + "totp_enabled": "เปิดใช้งาน 2FA แล้ว", + "totp_enabled_desc": "บัญชีของคุณได้รับการปกป้องด้วยการตรวจสอบสิทธิ์แบบสองปัจจัย", + "totp_disabled": "2FA ไม่ได้เปิดใช้งาน", + "totp_disabled_desc": "เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยเพื่อความปลอดภัยของบัญชีเพิ่มเติม", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "ติดตั้งแอปตรวจสอบความถูกต้องบนโทรศัพท์ของคุณ", + "totp_step2": "สแกนรหัส QR ด้านล่าง", + "totp_step3": "กรอกรหัส 6 หลักเพื่อยืนยัน", + "totp_manual_key": "Manual key", + "totp_enter_code": "ป้อนรหัสยืนยัน", + "totp_verify_enable": "ตรวจสอบและเปิดใช้งาน", + "totp_enabled_success": "เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว!", + "totp_recovery_warning": "บันทึกรหัสกู้คืนเหล่านี้ไว้ในที่ปลอดภัย แต่ละรหัสสามารถใช้ได้เพียงครั้งเดียวเท่านั้น หากคุณสูญเสียการเข้าถึงแอปยืนยันตัว���น คุณสามารถใช้รหัสเหล่านี้เพื่อเข้าสู่ระบบได้", + "totp_done": "Done", + "totp_disable_warning": "การปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยจะทำให้บัญชีของคุณมีความปลอดภัยน้อยลง ป้อนรหัสผ่านของคุณเพื่อยืนยัน", + "totp_disabled_success": "การรับรองความถูกต้องด้วยสองปัจจัยถูกปิดใช้งาน", + "tutorials_title": "บทช่วยสอนและคำแนะนำ", + "tutorials_desc": "ควบคุมทัวร์ชมพร้อมคำแนะนำและความช่วยเหลือซ้อนทับที่แสดงทั่วทั้งคอนโซล", + "tutorials_enabled": "เปิดใช้งานบทช่วยสอน", + "tutorials_enabled_hint": "เมื่อปิดใช้งาน บทช่วยสอนจะไม่เริ่มโดยอัตโนมัติและปุ่มช่วยเหลือจะถูกซ่อน", + "tutorials_reset_hint": "ทำเครื่องหมายบทช่วยสอนทั้งหมดว่ามองไม่เห็นเพื่อให้สามารถแสดงได้อีกครั้ง", + "tutorials_enabled_toast": "เปิดใช้งานบทช่วยสอนแล้ว", + "tutorials_disabled_toast": "ปิดใช้งานบทช่วยสอนแล้ว", + "tutorials_reset_toast": "บทช่วยสอนทั้งหมดถูกรีเซ็ตแล้ว", + "tab_auth": "การรับรองความถูกต้อง", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "กำหนดค่าการรับรองความถูกต้องภายนอกผ่าน LDAP หรือ Active Directory ผู้ใช้จะสามารถลงชื่อเข้าใช้ด้วยข้อมูลรับรองโดเมนของตนได้", + "ldap_enabled": "เปิดใช้งานการตรวจสอบสิทธิ์ LDAP", + "ldap_enabled_hint": "เมื่อเปิดใช้งาน ผู้ใช้สามารถลงชื่อเข้าใช้ด้วยข้อมูลรับรอง LDAP/AD บัญชีท้องถิ่นยังคงทำงานเป็นทางเลือก", + "ldap_connection": "การเชื่อมต่อเซิร์ฟเวอร์", + "ldap_host": "โฮสต์", + "ldap_port": "ท่าเรือ", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "ข้ามการตรวจสอบ TLS", + "ldap_timeout": "ห��ดเวลาการเชื่อมต่อ (s)", + "ldap_timeout_hint": "วินาทีในการรอการตอบสนองของเซิร์ฟเวอร์ LDAP", + "ldap_bind_mode": "โหมดการผูก", + "ldap_direct_bind": "ผูกโดยตรง", + "ldap_direct_bind_hint": "ผูกโดยตรงกับเทมเพลต DN แทนที่จะใช้บัญชีบริการในการค้นหา", + "ldap_bind_dn": "ผูก DN (บัญชีบริการ)", + "ldap_bind_dn_hint": "ชื่อเฉพาะของบัญชีบริการแบบอ่านอย่างเดียวที่ใช้ค้นหาผู้ใช้", + "ldap_bind_password": "ผูกรหัสผ่าน", + "ldap_base_dn": "ฐาน DN", + "ldap_base_dn_hint": "ฐานการค้นหาเพื่อค้นหาผู้ใช้เช่น dc=ตัวอย่าง,dc=com", + "ldap_user_filter": "ตัวกรองผู้ใช้", + "ldap_user_filter_hint": "ตัวกรอง LDAP เพื���อค้นหาผู้ใช้ ใช้ {{username}} เป็นตัวยึดตำแหน่ง ค่าเริ่มต้น: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "เทมเพลต DN ผูกโดยตรง", + "ldap_direct_bind_dn_hint": "เทมเพลต DN สำหรับการผูกโดยตรง ใช้ {{username}} เป็นตัวยึดตำแหน่ง เช่น uid={{username}},ou=ผู้ใช้,dc=ตัวอย่าง,dc=com", + "ldap_user_attrs": "คุณสมบัติผู้ใช้", + "ldap_attr_id": "คุณสมบัติชื่อผู้ใช้", + "ldap_attr_email": "คุณสมบัติอีเมล", + "ldap_attr_name": "แอตทริบิวต์ชื่อที่แสดง", + "ldap_group_mapping": "กลุ่ม → การแมปบทบาท", + "ldap_group_base_dn": "DN ฐานกลุ่ม", + "ldap_group_base_dn_hint": "เว้นว่างไว้เพื่อใช้ Base DN หลัก", + "ldap_group_filter": "ตัวกรองกลุ่ม", + "ldap_group_attr_name": "คุณสมบัติชื่อกลุ่ม", + "ldap_default_role": "บทบาทเริ่มต้น", + "ldap_default_role_hint": "บทบาทที่กำหนดให้กับผู้ใช้ที่มีกลุ่ม LDAP ไม่ตรงกับการแมปใดๆ", + "ldap_role_viewer": "ผู้ดู", + "ldap_role_operator": "ผู้ดำเนินการ", + "ldap_role_admin": "ผู้ดูแลระบบ", + "ldap_group_role_map": "กลุ่ม → แผนผังบทบาท", + "ldap_group_role_map_hint": "แมปกลุ่ม LDAP กับบทบาท BetterDesk รูปแบบ: GroupDN=role คั่นด้วย | (ท่อ). ตัวอย่าง: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "ทดสอบการเชื่อมต่อ", + "ldap_testing": "กำลังทดสอบ...", + "ldap_test_success": "การเชื่อมต่อสำเร็จ! สามารถเข้าถึงเซิร์ฟเวอร์ LDAP และหนังสือรับรองการเชื่อมโยงถูกต้อง", + "ldap_test_failed": "การเชื่อมต่อล้มเหลว", + "ldap_save": "บันทึกการกำหนดค่า LDAP", + "ldap_saved": "บันทึกการกำหนดค่า LDAP สำเร็จแล้ว", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "กำหนดค่าการลงชื่อเพียงครั้งเดียวผ่านผู้ให้บริการ OpenID Connect (Azure AD, Okta, Google, Keycloak ฯลฯ)", + "oidc_enabled": "เปิดใช้งานการตรวจสอบสิทธิ์ OIDC", + "oidc_enabled_hint": "อนุญาตให้ผู้ใช้ลง���ื่อเข้าใช้ด้วยผู้ให้บริการข้อมูลประจำตัวภายนอก", + "oidc_provider": "ผู้ให้บริการข้อมูลประจำตัว", + "oidc_display_name": "ชื่อที่แสดงของปุ่ม", + "oidc_display_name_hint": "ข้อความที่แสดงบนปุ่มเข้าสู่ระบบ (เช่น Azure AD, Okta)", + "oidc_issuer_url": "ผู้ออก URL", + "oidc_issuer_url_hint": "ผู้ออก OpenID Connect URL (การค้นพบจะเป็นไปโดยอัตโนมัติ)", + "oidc_client_id": "รหัสลูกค้า", + "oidc_client_secret": "ความลับของลูกค้า", + "oidc_redirect_url": "เปลี่ยนเส้นทาง URL (โทรกลับ)", + "oidc_redirect_url_hint": "ต้องตรงกันทุกประการกับสิ่งที่กำหนดค่าไว้ใน IdP ของคุณ โดยปกติ: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "ขอบเขต", + "oidc_use_pkce": "ใช้ PKCE (แนะนำ)", + "oidc_auto_discovery": "การค้นพบอัตโนมัติ", + "oidc_allow_signup": "สร้างผู้ใช้อัตโนมัติ", + "oidc_manual_endpoints": "URL ปลายทางด้วยตนเอง", + "oidc_authorization_url": "จุดสิ้นสุดการอนุญาต", + "oidc_token_url": "จุดสิ้นสุดโทเค็น", + "oidc_userinfo_url": "ข้อมูลผู้ใช้ปลายทาง", + "oidc_claim_mapping": "การทำแผนที่การอ้างสิทธิ์", + "oidc_claim_username": "การเรียกร้องชื่อผู้ใช้", + "oidc_claim_email": "การเรียกร้องอีเมล์", + "oidc_claim_name": "การอ้างสิทธิ์ชื่อที่แสดง", + "oidc_claim_groups": "การเรียกร้องกลุ่ม", + "oidc_role_mapping": "การทำแผนที่บทบาท", + "oidc_default_role": "บทบาทเริ่มต้น", + "oidc_group_role_map": "กลุ่ม → การแมปบทบาท", + "oidc_group_role_map_hint": "หนึ่งการแมปต่อบรรทัด: group_name=role (เช่น admins=admin, โอเปอเรเตอร์=โอเปอเรเตอร์)", + "oidc_test_discovery": "ทดสอบการค้นพบ", + "oidc_testing": "กำลังทดสอบ...", + "oidc_test_success": "การค้นพบสำเร็จ! ปลายทางได้รับการแก้ไขแล้ว", + "oidc_test_failed": "การค้นพบล้มเหลว", + "oidc_issuer_required": "ผู้ออก URL จำเป็นต้องทดสอบการค้นพบ", + "oidc_save": "บันทึกการกำหนดค่า OIDC", + "oidc_saved": "บันทึกการกำหนดค่า OIDC สำเร็จแล้ว", + "tab_advanced": "ขั้นสูง", + "connection_mode_title": "กลยุทธ์การเชื่อมต่อ", + "connection_mode_desc": "ควบคุมวิธีที่ RustDesk ไคลเอนต์เดสก์ท็อปเชื่อมต่อ: P2P โดยตรง (hole punch) เมื่อเป็นไปได้ หรือผ่านรีเลย์เสมอ", + "connection_mode_label": "โหมดการเชื่อมต่อเริ่มต้น", + "connection_mode_p2p_first": "P2P ก่อน (แนะนำ) — ลองเชื่อมต่อโดยตรง หากล้มเหลวใช้รีเลย์", + "connection_mode_relay_only": "รีเลย์เท่านั้น — ทุกเซสชันใช้เซิร์ฟเวอร์รีเลย์", + "connection_mode_advanced": "ตัวเลือกขั้นสูง", + "connection_mode_fallback_ms": "หมดเวลา P2P fallback (มิลลิวินาที)", + "connection_mode_same_nat_relay": "บังคับใช้รีเลย์เมื่อทั้งสองฝ่ายใช้ IP สาธารณะเดียวกัน (NAT hairpin)", + "connection_mode_network_hint": "P2P ต้องการพอร์ต UDP 21116 ที่เข้าถึงได้ระหว่างไคลเอนต์ เซิร์ฟเวอร์ต้องเปิด Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115 เว็บเบราว์เซอร์ใช้รีเลย์เสมอ", + "connection_mode_save": "บันทึก", + "connection_mode_save_restart": "บันทึกและรีสตาร์ทเซิร์ฟเวอร์", + "connection_mode_saved": "บันทึกโหมดการเชื่อมต่อแล้ว", + "connection_mode_restart_started": "เริ่มรีสตาร์ทเซิร์ฟเวอร์แล้ว", + "connection_mode_restart_failed": "รีสตาร์ทเซิร์ฟเวอร์ล้มเหลว", + "connection_mode_not_configurable": "ไม่สามารถเปลี่ยนโหมดการเชื่อมต่อในการติดตั้งนี้ (ไม่พบ systemd unit หรือ docker-compose)", + "connection_mode_compose_error": "ไม่พบส่วน server environment ใน docker-compose.yml", + "connection_mode_source_saved": "บันทึกใน", + "connection_mode_source_defaults": "ใช้ค่าเริ่มต้นของเซิร์ฟเวอร์ (ไม่สามารถเขียนจากแผงควบคุม)", + "connection_mode_runtime": "เซิร์ฟเวอร์ที่ใช้งานอยู่", + "advanced_title": "ไฟล์การกำหนดค่า", + "advanced_desc": "แก้ไขไฟล์การกำหนดค่าเซิร์ฟเวอร์โดยตรง การเปลี่ยนแปลงอาจต้องรีสตาร์ทบริการ จะสร้างสำเนาสำรองก่อนบันทึกแต่ละครั้ง", + "advanced_warning": "ไฟล์เหล่านี้มีข้อมูลความลับ (API key, รหัสผ่านฐานข้อมูล, session secret) แก้ไขเฉพาะเมื่อเข้าใจผลกระทบ ไวยากรณ์ผิดพลาดอาจทำให้เซิร์ฟเวอร์ไม่สามารถเริ่มต้นได้", + "advanced_files_label": "ไฟล์", + "advanced_select_file": "เลือกไฟล์จากรายการเพื่อดูหรือแก้ไขเนื้อหา", + "advanced_reload": "โหลดใหม่", + "advanced_save": "บันทึกไฟล์", + "advanced_apply_restart": "ใช้งาน (รีสตาร์ทบริการ)", + "advanced_saved": "บันทึกไฟล์การกำหนดค่าแล้ว", + "advanced_restart_after_save": "บันทึกการกำหนดค่าแล้ว รีสตาร์ทบริการที่ได้รับผลกระทบตอนนี้เพื่อให้การเปลี่ยนแปลงมีผล?", + "advanced_restart_confirm": "รีสตาร์ทบริการ BetterDesk ที่เกี่ยวข้อง? การเชื่อมต่อที่ใช้งานอยู่อาจหยุดชะงักชั่วคราว", + "advanced_restart_console_confirm": "รีสตาร์ทบริการเว็บคอนโซล? เซสชันเบราว์เซอร์จะตัดการเชื่อมต่อชั่วคราว และหน้าจะโหลดใหม่เมื่อคอนโซลกลับมา", + "advanced_restart_started": "เริ่มรีสตาร์ทบริการแล้ว", + "advanced_restart_done": "รีสตาร์ทคอนโซลแล้ว — กำลังโหลดหน้าใหม่…", + "advanced_restart_polling": "รอให้คอนโซลกลับมาออนไลน์…", + "advanced_restart_timeout": "ส่งคำสั่งรีสตาร์ทแล้วแต่คอนโซลไม่ตอบสนองทันเวลา ตรวจสอบ systemd/NSSM logs และโหลดใหม่ด้วยตนเอง", + "advanced_restart_failed": "รีสตาร์ทบริการล้มเหลว (สิทธิ์ไม่เพียงพอหรือไม่ได้ติดตั้งบริการ)", + "advanced_save_confirm": "บันทึกการเปลี่ยนแปลงในไฟล์นี้? จะสร้างสำรองของเวอร์ชันก่อนหน้า", + "advanced_unsaved_confirm": "มีการเปลี่ยนแปลงที่ยังไม่บันทึก ยกเลิก?", + "advanced_no_files": "ไม่มีไฟล์การกำหนดค่าในระบบนี้", + "advanced_readonly": "อ่านอย่างเดียว", + "advanced_missing": "ขาดหายไป", + "advanced_new_file": "ไฟล์ใหม่ (จะไม่สร้างจนกว่าจะบันทึก)", + "advanced_new_file_hint": "ไฟล์ใหม่ — เพิ่มเนื้อหาและบันทึก", + "advanced_backup_created": "สร้างสำรองแล้ว", + "advanced_restart_console": "รีสตาร์ทบริการเว็บคอนโซล (เช่น systemctl restart betterdesk-console) เพื่อให้การเปลี่ยนแปลง .env มีผล", + "advanced_restart_goserver": "รีสตาร์ท BetterDesk Go server เพื่อโหลดการเปลี่ยนแปลง blocklist", + "advanced_restart_systemd": "หลังแก้ไข systemd units ให้รัน: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "รีสตาร์ทบริการที่ได้รับผลกระทบเพื่อให้การเปลี่ยนแปลงมีผล", + "advanced_error_unknown": "ไฟล์การกำหนดค่าไม่รู้จัก", + "advanced_error_not_found": "ไม่มีไฟล์นี้", + "advanced_error_not_file": "เส้นทางนี้ไม่ใช่ไฟล์ปกติ", + "advanced_error_too_large": "ไฟล์เกินขนาดสูงสุดที่แก้ไขได้ (512 KB)", + "advanced_error_binary": "ไม่สามารถแก้ไขไฟล์ไบนารีในแผงควบคุม", + "advanced_error_invalid": "เนื้อหาไฟล์ไม่ถูกต้อง", + "advanced_error_not_writable": "กระบวนการคอนโซลไม่มีสิทธิ์เขียนไฟล์นี้", + "advanced_file_console-env": "สภาพแวดล้อมคอนโซล (.env)", + "advanced_file_console-env-local": "การแทนที่คอนโซล (.env.local)", + "advanced_file_go-blocklist": "บัญชีดำเซิร์ฟเวอร์ Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (หน่วยบริการ)", + "advanced_file_systemd-server": "systemd: betterdesk-server (หน่วยบริการ)", + "advanced_file_console-session-secret": "รหัสลับเซสชันคอนโซล (.session_secret)", + "advanced_file_go-audit-log": "บันทึกการตรวจสอบเซิร์ฟเวอร์ Go (audit.jsonl)", + "advanced_file_build-env": "สภาพแวดล้อมบิลด์ของเอเจนต์ (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (การตั้งค่า supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (การ orchestration)", + "advanced_restart_none": "ไฟล์นี้ไม่ต้องรีสตาร์ทบริการ", + "enrollment_title": "การลงทะเบียนอุปกรณ์ (RustDesk)", + "enrollment_desc": "ควบคุมวิธีที่ RustDesk ไคลเอนต์ใหม่ลงทะเบียน และวิธีที่ผู้ดำเนินการอนุมัติในหน้าคำขอลงทะเบียน", + "enrollment_require_approval": "ต้องการการอนุมัติจากผู้ดำเนินการ (Managed mode)", + "enrollment_require_approval_hint": "เมื่อเปิดใช้งาน ไคลเอนต์ที่ไม่รู้จักจะรอในคิวจนกว่าผู้ดำเนินการจะอนุมัติใน \"คำขอลงทะเบียน\"", + "enrollment_rich_approve": "แบบฟอร์มอนุมัติเต็มรูปแบบ (ชื่อ, โฟลเดอร์, กลุ่ม, แท็ก)", + "enrollment_rich_approve_hint": "แสดงกล่องโต้ตอบโดยละเอียดเมื่ออนุมัติคำขอลงทะเบียนหรือ LAN", + "enrollment_tag_picker": "เลือกแท็กจากแท็กอุปกรณ์ที่มีอยู่", + "enrollment_tag_picker_hint": "ให้ผู้ดำเนินการเลือกแท็กจากรายการในหน้าอุปกรณ์แทนการพิมพ์เท่านั้น", + "enrollment_open_requests": "เปิดคำขอลงทะเบียน", + "enrollment_pending_count": "คำขอลงทะเบียนที่รอดำเนินการ {count} รายการ" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "การเข้าสู่ระบบล้มเหลว", + "action_logout": "Logout", + "action_password_change": "เปลี่ยนรหัสผ่านแล้ว", + "action_2fa_enable": "เปิดใช้งาน 2FA แล้ว", + "action_2fa_disable": "2FA ปิดการใช้งาน", + "action_user_create": "สร้างโดยผู้ใช้", + "action_user_update": "อัปเดตผู้ใช้แล้ว", + "action_user_delete": "ลบผู้ใช้แล้ว", + "action_settings_update": "อัปเดตการตั้งค่าแล้ว", + "action_device_ban": "อุปกรณ์ถูกแบน", + "action_device_unban": "อุปกรณ์ถูกยกเลิกการแบน", + "action_device_delete": "ลบอุปกรณ์แล้ว" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "ฟีเจอร์ช่วงเริ่มต้น — ตัวสร้างแพ็กเกจเอเจนต์อยู่ระหว่างพัฒนา", + "config_options": "ตัวเลือกการกำหนดค่า", + "server_address": "ที่อยู่เซิร์ฟเวอร์", + "server_address_hint": "โดเมนเซิร์ฟเวอร์���รือที่อยู่ IP ของคุณ", + "custom_port": "Custom Port", + "port_hint": "เว้นว่างไว้สำหรับค่าเริ่มต้น (21116)", + "relay_server": "เซิร์ฟเวอร์รีเลย์", + "relay_placeholder": "เช่นเดียวกับเซิร์ฟเวอร์ ID หากว่างเปล่า", + "relay_hint": "ทางเลือก: ที่อยู่เซิร์ฟเวอร์รีเลย์แยกต่างหาก", + "include_key": "รวมกุญแจสาธารณะไว้ในการกำหนดค่า", + "generate": "สร้างการกำหนดค่า", + "output": "เอาต์พุตการกำหนดค่า", + "usage_title": "รายละเอียดการเชื่อมต่อ", + "generated": "สร้างการกำหนดค่าแล้ว", + "server_required": "ต้องระบุที่อยู่เซิร์ฟเวอร์", + "nothing_to_copy": "สร้างการกำหนดค่าก่อน", + "bundles_title": "ชุดตัวแทน", + "new_bundle": "มัดใหม่", + "editor_title": "ตัวแก้ไขมัด", + "empty_state": "เลือกชุดทางด้านซ้ายหรือสร้างชุดใหม่เพื่อเริ่มต้น", + "loading": "กำลังโหลด...", + "no_bundles": "ยังไม่มีบันเดิล สร้างอันแรกของคุณ", + "bundle_name": "ชื่อชุด", + "bundle_name_hint": "ป้ายกำกับภายในเท่านั้น — ไม่แสดงต่อผู้ใช้ปลายทาง", + "short_link": "ลิงก์ดาวน์โหลดแบบสั้น", + "short_link_hint": "ใช้ใน URL สาธารณะ (/d/…) ใช้ได้เฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดกลาง (2–32 ตัวอักษร) กรอกอัตโนมัติจากชื่อแพ็กเกจ — ย่อให้สั้นเพื่อแชร์ง่าย (เช่น acme)", + "branding_section": "การสร้างแบรนด์", + "company_name": "ชื่อบริษัท/แบรนด์", + "short_text": "คำอธิบายสั้น ๆ", + "contact_email": "อีเมล์ติดต่อ", + "contact_phone": "โทรศัพท์ติดต่อ", + "contact_url": "ติดต่อเว็บไซต์", + "logo": "โลโก้", + "logo_hint": "PNG, JPEG, SVG หรือ WebP สูงสุด 256 KB.", + "logo_clear": "ลบโลโก้", + "primary_color": "สีหลัก", + "accent_color": "สีส่วนหัว", + "default_lang": "ภาษาเริ่มต้น", + "allow_unattended": "อนุญาตการเข้าถึงโดยไม่ได้ตั้งใจ", + "allow_unattended_hint": "เมื่อเปิดใช้งาน ตัวแทนจะแสดงรหัสผ่านถาว���สำหรับการเข้าถึงของผู้ปฏิบัติงาน", + "save": "บันทึกชุดรวม", + "revoke": "เพิกถอน", + "unrevoke": "เปิดใช้งานอีกครั้ง", + "revoked": "เพิกถอนแล้ว", + "preview_title": "ดูตัวอย่างสด", + "preview_hint": "ลักษณะโดยประมาณของหน้าต่างตัวแทนผู้ใช้ปลายทาง", + "preview_default_name": "รองรับ BetterDesk", + "preview_status_ready": "พร้อม", + "preview_id": "บัตรประจำตัวของคุณ", + "preview_password": "รหัสผ่าน", + "preview_chat": "แชทกับฝ่ายสนับสนุน", + "preview_settings": "การตั้งค่า (ผู้ดูแลระบบเท่านั้น)", + "preview_quit": "ออก (เฉพาะผู้ดูแลระบบเท่านั้น)", + "download_link_title": "ลิงค์ดาวน์โหลด", + "download_link_hint": "แชร์ลิงก์นี้กับผู้ใช้ปลายทาง พวกเขาจะเห็นหน้าดาวน์โหลดที่มีแบรนด์ ลิงก์ hex เก่ายังใช้งานได้หลังเปลี่ยนลิงก์สั้น", + "open_portal": "เปิด", + "created": "สร้างชุดรวมแล้ว", + "saved": "บันทึกชุดแล้ว", + "deleted": "ลบชุดแล้ว", + "revoked_ok": "แพ็กเกจถูกเพิกถอนแล้ว", + "unrevoked_ok": "เปิดใช้งานชุดรวมอีกครั้งแล้ว", + "link_copied": "คัดลอกลิงก์ไปยังคลิปบอร์ดแล้ว", + "copy_failed": "ไม่สามารถคัดลอกโดยอัตโนมัติ — โปรดคัดลอกด้วยตนเอง", + "unsaved_confirm": "ยกเลิกการเปลี่ยนแปลงที่ยังไม่ได้บั��ทึกใช่ไหม", + "confirm_revoke": "เพิกถอนชุดรวมนี้ใช่ไหม ลิงค์ดาวน์โหลดจะหยุดทำงาน", + "confirm_unrevoke": "เปิดใช้งานชุดรวมนี้อีกครั้งหรือไม่", + "confirm_delete": "ลบชุดข้อมูลนี้อย่างถาวรใช่ไหม สิ่งนี้ไม่สามารถยกเลิกได้", "errors": { - "forbidden_title": "การเข้าถึงถูกปฏิเสธ", - "forbidden_message": "คุณไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรนี้", - "not_found_title": "ไม่พบเพจ", - "not_found_message": "หน้าที่คุณกำลังค้นหาไม่มีอยู่หรือถูกย้ายแล้ว", - "server_error_title": "ข้อผิดพลาดของเซิร์ฟเวอร์", - "server_error_message": "มีบาง��ย่างผิดพลาด โปรดลองอีกครั้งในภายหลัง", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "โหลดอุปกรณ์ไม่สำเร็จ", - "load_key_failed": "โหลดคีย์ไม่สำเร็จ", - "load_qr_failed": "โหลด QR ไม่สำเร็จ", - "load_audit_failed": "โหลดบันทึกการตรวจสอบไม่สำเร็จ", - "load_users_failed": "โหลดผู้ใช้ไม่สำเร็จ", - "load_folders_failed": "โหลดโฟลเดอร์ไม่สำเร็จ", - "download_failed": "การดาวน์โหลดล้มเหลว", - "logout_failed": "ออกจากระบบล้มเหลว", - "password_change_failed": "ไม่สามารถเปลี่ยนรหัสผ่าน", - "language_change_failed": "ไม่สามารถเปลี่ยนภาษาได้", - "ban_failed": "แบนอุปกรณ์ไม่สำเร็จ", - "unban_failed": "ยกเลิกการแบนอุปกรณ์ไม่สำเร็จ", - "delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", - "change_id_failed": "ไม่สามารถเปลี่ยนรหัสอุปกรณ์", - "bulk_delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", - "sync_failed": "ไม่สามารถซิงค์สถานะได้", - "error": "Error", - "not_found": "Not found", - "server_error": "ข้อผิดพลาดของเซิร์ฟเวอร์", - "load_device_failed": "โหลดอุปกรณ์ไม่สำเร็จ", - "load_orgs_failed": "โหลดองค์กรไม่สำเร็จ" + "validation_failed": "การตรวจสอบความถูกต้องล้มเหลว", + "name_required": "ต้องระบุชื่อชุดรวม", + "company_name_required": "ต้องระบุชื่อบริษัท", + "logo_invalid": "โลโก้ต้องเป็นไฟล์รูปภาพที่ถูกต้อง", + "logo_too_large": "โลโก้ต้องมีขนาด 256 KB หรือเล็กกว่า", + "logo_read_failed": "ไม่สามารถอ่านไฟล์โลโก้", + "primary_color_invalid": "สีหลักต้องเป็นค่าฐานสิบหก (เช่น #2563eb)", + "accent_color_invalid": "สีของส่วนหัวต้องเป็นค่าฐานสิบหก (เช่น #1e293b)", + "contact_url_invalid": "เว็บไซต์ติดต่อต้องเป็น URL ที่ถูกต้อง", + "server_host_required": "ต้องระบุที่อยู่เซิร์ฟเวอร์สาธารณะ", + "server_host_invalid": "กรุณากรอกชื่อโดเมนหรือที่อยู่ IPv4 ที่ถูกต้อง", + "token_failed": "ไม่สามารถสร้าง enrollment token — ตรวจสอบการเชื่อมต่อเซิร์ฟเวอร์", + "rebuild_revoked": "ไม่สามารถ build bundle ที่ถูกเพิกถอน — เปิดใช้งานใหม่ก่อน", + "slug_invalid": "ลิงก์สั้นต้องมีเฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดกลาง", + "slug_too_short": "ลิงก์สั้นต้องมีอย่างน้อย 2 ตัวอักษร", + "slug_too_long": "ลิงก์สั้นต้องไม่เกิน 32 ตัวอักษร", + "slug_taken": "ลิงก์สั้นนี้ถูกใช้โดยแพ็กเกจอื่นแล้ว" }, - "remote": { - "title": "เดสก์ท็อประยะไกล", - "connecting": "กำลังเชื่อมต่อ...", - "waiting_password": "รอรหัสผ่าน", - "authenticating": "กำลังตรวจสอบสิทธิ์...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "ต้องใช้รหัสผ่าน", - "enter_password_for": "ป้อนรหัสผ่านสำหรับอุปกรณ์", - "password_placeholder": "รหัสผ่านอุปกรณ์", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "กลับไปที่อุปกรณ์", - "fullscreen": "Fullscreen", - "toggle_audio": "สลับเสียง", - "send_keys": "ส่งกุญแจ", - "scale_mode": "Scale Mode", - "scale_fit": "พอดีกับหน้าต่าง", - "scale_fill": "Fill Window", - "scale_original": "ขนาดต้นฉบับ (1:1)", - "scale_stretch": "ยืดเพื่อเติมเต็ม", - "actions": "Actions", - "lock_screen": "ล็อคหน้าจอ", - "restart_remote": "รีสตาร์ทอุปกรณ์ระยะไกล", - "refresh_screen": "รีเฟรชหน้าจอ", - "clipboard_paste": "วางจากคลิปบอร์ด", - "block_input": "Block Input", - "display_settings": "การตั้งค่าการแสดงผล", - "image_quality": "คุณภาพของภาพ", - "quality_best": "ดีที่สุด (คุณภาพเต็ม 60fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "แสดงเคอร์เซอร์ระยะไกล", - "lock_after_session": "ล็อคหลังจากเซสชั่น", - "privacy_mode": "โหมดความเป็นส่วนตัว", - "disable_clipboard": "ปิดการใช้งานคลิปบอร์ด", - "chat": "Chat", - "chat_placeholder": "���ิมพ์ข้อความ...", - "record": "หน้าจอบันทึก", - "view_only": "ดูอย่างเดียว", - "pin_toolbar": "ปักหมุดแถบเครื่องมือ", - "monitors": "Monitors", - "select_monitor": "เลือก จอภาพ", - "quality_speed": "ความเร็ว (คุณภาพต่ำ, 60fps)", - "quality_quality": "คุณภาพ (ดีที่สุด, 30fps)", - "recording_started": "เริ่มการบันทึกแล้ว", - "recording_stopped": "หยุดการบันทึกแล้ว", - "download_recording": "ดาวน์โหลดการบันทึก", - "e2e_encrypted": "เข้ารหัสตั้งแต่ต้นทางถึงปลายทาง", - "e2e_key_exchange": "การสร้างช่องทางที่ปลอดภัย...", - "confirm_restart": "คุณแน่ใจหรือไม่ว่าต้องการรีสตาร์ทอุปกรณ์ระยะไกล", - "webcodecs_not_supported": "เบราว์เซอร์ของคุณไม่รองรับ WebCodecs API โปรดใช้ Chrome 94+ หรือ Edge 94+", - "webcodecs_insecure_context": "WebCodecs ไม่พร้อมใช้งา���บน HTTP วิดีโอใช้ซอฟต์แวร์สำรอง เพื่อประสิทธิภาพที่ดีที่สุด ให้ใช้ HTTPS", - "webcodecs_fallback_active": "ซอฟต์แวร์ตัวถอดรหัสวิดีโอทำงานอยู่ (ประสิทธิภาพจำกัด)", - "click_to_start": "คลิกเพื่อเริ่ม", - "autoplay_blocked": "เบราว์เซอร์ต้องการให้ผู้ใช้โต้ตอบเพื่อเริ่มเล่นวิดีโอและเสียง", - "start_playback": "เริ่มเล่น", - "new_connection": "การเชื่อมต่อใหม่", - "device_id_placeholder": "ป้อนรหัสอุปกรณ์", - "http_warning": "โหมด HTTP: จำกัดเฉพาะการถอดรหัสซอฟต์แวร์ H.264 (~ 15 FPS) ใช้ HTTPS เพื่อประสิทธิภาพสูงสุด (WebCodecs, VP9, 60 FPS)", - "file_transfer": "การถ่ายโอนไฟล์", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "โฟลเดอร์นี้ว่างเปล่า", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "การโอนล้มเหลว", - "file_show_hidden": "แสดงไฟล์ที่ซ่อนอยู่", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "ป้อนชื่อโฟลเดอร์:", - "file_parent": "โฟลเดอร์หลัก", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "ป้อนชื่อใหม่:", - "file_delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้?", - "file_cancelled": "ยกเลิกการโอนแล้ว", - "2fa_required": "ต้องมีการยืนยัน 2FA", - "2fa_hint": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", - "2fa_invalid": "ป้อนรหัส 6 หลักที่ถูกต้อง", - "verify": "Verify", - "use_cdap_fallback": "ใช้โปรแกรมดู CDAP", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "คลิปบอร์ดว่างเปล่า", - "clipboard_denied": "การเข้าถึงคลิปบอร์ดถูกปฏิเสธ จำเป็นต้องมี HTTPS หรือไม่ได้รับอนุญาตให้อนุญาต", - "file_loading": "กำลังโหลด...", - "file_timeout": "อุปกรณ์ระยะไกลไม่ตอบสนอง การถ่ายโอนไฟล์อาจไม่รองรับหรือถูกปิดใช้งานบนเครื่องระยะไกล", - "codec": "ตัวแปลงสัญญาณวิดีโอ", - "codec_auto": "อัตโนมัติ (แนะนำ)" + "legacy_title": "ตัวสร้างการกำหนดค่าไคลเอนต์", + "connection_section": "การเชื่อมต่อเซิร์ฟเวอร์", + "server_host": "ที่อยู่เซิร์ฟเวอร์สาธารณะ", + "server_host_placeholder": "support.example.com หรือ 203.0.113.10", + "server_host_hint": "ชื่อโดเมนหรือ IP สาธารณะที่ผู้ใช้งานเข้าถึงเซิร์ฟเวอร์ BetterDesk ของคุณ พอร์ตมาจากการกำหนดค่าคอนโซล", + "use_https": "ใช้ HTTPS / WSS (แนะนำ)", + "enrollment_token": "การลงทะเบียนอุปกรณ์", + "enrollment_token_pending": "ต่ออุปกรณ์หลังการอนุมัติ", + "enrollment_token_set": "ต่ออุปกรณ์ — อนุมัติใน Registrations", + "enrollment_token_hint": "การติดตั้งแต่ละครั้งจะลงทะเบียนด้วยตนเอง อนุมัติอุปกรณ์ใหม่ในแผง Registrations เซิร์ฟเวอร์จะออก access key เฉพาะต่อคอมพิวเตอร์", + "enrollment_per_device": "ต่ออุปกรณ์ — อนุมัติใน Registrations", + "background_color": "สีพื้นหลังหน้าต่าง", + "surface_color": "สีพื้นหลังการ์ด", + "text_color": "สีตัวอักษร", + "text_muted_color": "สีตัวอักษรรอง", + "status_ready_color": "สีตัวบ่งชี้พร้อม", + "header_text_color": "สีตัวอักษรส่วนหัว", + "builds_title": "การ Build ไคลเอนต์", + "builds_hint": "ตัวติดตั้งที่คอมไพล์บนเซิร์ฟเวอร์นี้สำหรับแต่ละแพลตฟอร์ม Build ใหม่หลังแก้ไขข้อผิดพลาด toolchain หรืออัปเดต agent source", + "builds_loading": "กำลังโหลดสถานะ build…", + "builds_empty": "ยังไม่มี build ในคิว — บันทึก bundle หรือคลิก \"Build ใหม่ทั้งหมด\"", + "rebuild_all": "Build ใหม่ทั้งหมด", + "rebuilding_all": "กำลังเพิ่ม build ใหม่เข้าคิว…", + "rebuild_queued": "เพิ่ม build ทุกแพลตฟอร์มเข้าคิวแล้ว", + "rebuild_confirm": "Build ตัวติดตั้งทุกแพลตฟอร์มใหม่สำหรับ bundle นี้? สิ่งที่พร้อมแล้วจะถูกแทนที่", + "build_status_ready": "พร้อม", + "build_status_pending": "รอคิว", + "build_status_building": "กำลัง Build", + "build_status_failed": "ล้มเหลว", + "builds_summary": "{{ready}} พร้อม · {{pending}} รอคิว · {{building}} กำลัง Build · {{failed}} ล้มเหลว", + "build_error_hint": "ข้อผิดพลาด Build", + "preview_help": "ขอความช่วยเหลือ" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "ไอดีเซิร์ฟเวอร์", + "relay_server": "เซิร์ฟเวอร์รีเลย์", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "กำลังตรวจสอบ...", + "label": "Status", + "no_signal": "ไม่มีสัญญาณ" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "เชื่อมต่อผ่านไคลเอนต์เดสก์ท็อป", + "remote_viewer": "โปรแกรมดูระยะไกล", + "web_remote": "เว็บระยะไกล", + "details": "Details", + "edit": "แก้ไข", + "delete": "ลบ", + "ban": "Ban", + "unban": "Unban", + "save": "บันทึก", + "cancel": "ยกเลิก", + "confirm": "ยืนยัน", + "close": "ปิด", + "clear": "Clear", + "ok": "OK", + "saved": "บันทึกเรียบร้อยแล้ว", + "back": "กลับ", + "create": "สร้าง", + "dismiss": "Dismiss", + "view_all": "ดูทั้งหมด", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s ที่แล้ว", + "minutes_ago": "{count}m ที่แล้ว", + "hours_ago": "{count}h ที่แล้ว", + "days_ago": "{count}d ที่แล้ว", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "การจัดการผู้ใช้", + "subtitle": "จัดการผู้ใช้คอนโซลและการอนุญาต", + "add_user": "Add User", + "edit_user": "แก้ไขผู้ใช้", + "username": "ชื่อผู้ใช้", + "username_placeholder": "กรอกชื่อผู้ใช้", + "username_hint": "3-32 ตัวอักษร ตัวอักษร ตัวเลข และขีดล่างเท่านั้น", + "password": "รหัสผ่าน", + "password_placeholder": "ใส่รหัสผ่าน", + "password_hint": "ขั้นต่ำ 8 ตัวอักษร โดยมีทั้งตัวพิมพ์เล็ก ตัวเลข และสัญลักษณ์ผสมกัน", + "password_leave_empty": "เว้นว่างไว้เพื่อให้เป็นปัจจุบัน", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "สร้างแล้ว", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "สร้างผู้ใช้", + "edit": "แก้ไข", + "reset_password": "รีเซ็ตรหัสผ่าน", + "new_password": "รหัสผ่านใหม่", + "delete_title": "ลบผู้ใช้", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบผู้ใช้ {username}", + "delete_success": "ลบผู้ใช้เรียบร้อยแล้ว", + "user_created": "สร้างผู้ใช้สำเร็จแล้ว", + "user_updated": "อัปเดตผู้ใช้เรียบร้อยแล้ว", + "password_reset_success": "รีเซ็ตรหัสผ่านสำเร็จ", + "empty_title": "ไม่พบผู้ใช้", + "empty_text": "เพิ่มผู้ใช้เพื่อจัดการการเข้าถึงคอนโซล", + "fill_required": "กรุณากรอกข้อมูลในช่องที่ต้องกรอกทั้งหมด", + "invalid_username": "ชื่อผู้ใช้ต้องมีความยาว 3-32 ตัวอักษร ตัวอักษร ตัวเลข และขีดล่างเท่านั้น", + "username_exists": "มีชื่อผู้ใช้อยู่แล้ว", + "weak_password": "รหัสผ่านอ่อนเกินไป", + "password_too_short": "รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร", + "invalid_role": "บทบาทไม่ถูกต้อง", + "cannot_demote_self": "คุณไม่สามารถลดระดับตัวเองได้", + "cannot_delete_self": "คุณไม่สามารถลบบัญชีของคุณเองได้", + "last_admin": "ไม่สามารถลบผู้ดู���ลระบบคนสุดท้ายได้", + "admin_only": "คุณลักษณะนี้มีให้สำหรับผู้ดูแลระบบเท่านั้น", + "password_required": "ต้องใช้รหัสผ่าน", + "not_found": "ไม่พบผู้ใช้", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย", + "tip_strong_passwords": "ใช้รหัสผ่านที่รัดกุมและไม่ซ้ำกันสำหรับผู้ใช้แต่ละคน", + "tip_unique_accounts": "สร้างบัญชีส่วนบุคคลสำหรับแต่ละบุคคล", + "tip_viewer_role": "ใช้บทบาทผู้ดูสำหรับผู้ใช้ที่ต้องการสิทธิ์การอ่านเท่านั้น", + "tip_operator_role": "ใช้บทบาทผู้ดำเนินการสำหรับผู้ใช้ที่ต้องการจัดการอุปกรณ์ แต่ไม่ใช่ผู้ใช้", + "tip_audit_logs": "ตรวจสอบบันทึกการตรวจสอบเป็นประจำเพื่อหากิจกรรมที่น่าสงสัย", + "role_pro": "รุ่นโปร (API เท่านั้น)", + "role_super_admin": "Super Admin", + "role_server_admin": "ผู้ดูแลระบบเซิร์ฟเวอร์", + "role_global_admin": "ผู้ดูแลระบบทั่วโลก", + "organizations": "องค์กรต่างๆ", + "user_organizations": "องค์กรสำหรับ {username}", + "no_organizations": "ผู้ใช้ไม่ได้ถูกกำหนดให้กับองค์กรใดๆ", + "org_removed": "นำการมอบหมายองค์กรออกแล้ว", + "server_role_label": "บทบาทของเซิร์ฟเวอร์", + "server_role_hint": "กำหนดสิ่งที่ผู้ใช้สามารถดำเนินการได้ทั่วทั้งคอนโซล (การเข้าถึงแผงควบคุม การกำหนดค่าเซิร์ฟเวอร์ การตรวจสอบ ฯลฯ)", + "org_membership_section": "สมาชิกภาพองค์กร", + "org_membership_hint": "ผู้ใช้สามารถอยู่ในหลายองค์กรได้ บทบาทขององค์กรจะควบคุมสิทธิ์ภายในองค์กรนั้นเท่านั้น และไม่ขึ้นอยู่กับบทบาทของเซิร์ฟเวอร์ข้างต้น", + "column_organizations": "องค์กรต่างๆ", + "no_orgs_short": "—", + "org_count_one": "องค์กร {count}", + "org_count_many": "องค์กร {count}", + "all_orgs_assigned": "ผู้ใช้เป็นสมาชิกของทุกองค์กรอยู่แล้ว", + "user_groups": "กลุ่มผู้ใช้", + "user_groups_hint": "กลุ่มผู้ใช้สามารถใช้เพื่อให้สิทธิ์การเข้าถึงกลุ่มอุปกรณ์ที่เลือกได้", + "loading_user_groups": "กำลังโหลดกลุ่มผู้ใช้...", + "no_user_groups": "ไม่มีกลุ่มผู้ใช้", + "create_user_group": "สร้างกลุ่ม", + "edit_user_group": "แก้ไขกลุ่มผู้ใช้", + "delete_user_group": "ลบกลุ่มผู้ใช้", + "delete_user_group_confirm": "ลบกลุ่มผู้ใช้ {name} หรือไม่ สมาชิกจะสูญเสียสิทธิ์การเข้าถึงที่ได้รับจากกลุ่มนี้", + "user_group_created": "สร้างกลุ่มผู้ใช้แล้ว", + "user_group_updated": "อัปเดตกลุ่มผู้ใช้แล้ว", + "user_group_deleted": "ลบกลุ่มผู้ใช้แล้ว", + "user_group_not_found": "ไม่พบกลุ่มผู้ใช้", + "group_name": "ชื่อกลุ่ม", + "group_name_placeholder": "ผู้ประกอบการ", + "group_note": "Note", + "group_note_placeholder": "หมายเหตุเพิ่มเติม", + "group_name_required": "ต้องระบุชื่อกลุ่ม", + "group_members_count": "สมาชิก {count}", + "provider": "ผู้ให้บริการ", + "provider_local": "ท้องถิ่น", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "จัดการโดยผู้ให้บริการ identity", + "provider_managed_hint": "บัญชีนี้ถูกจัดการโดย identity provider ภายนอก (LDAP/AD หรือ SSO) รหัสผ่านและบทบาทถูกควบคุมโดย provider และไม่สามารถเปลี่ยนแปลงได้ที่นี่" + }, + "folders": { + "title": "Folders", + "create": "สร้างโฟลเดอร์", + "edit": "แก้ไขโฟลเดอร์", + "delete": "ลบโฟลเดอร์", + "name": "Folder Name", + "name_placeholder": "ป้อนชื่อโฟลเดอร์", + "name_required": "ต้องระบุชื่อโฟลเดอร์", + "name_too_long": "ชื่อโฟลเดอร์ยาวเกินไป (สูงสุด 50 ตัวอักษร)", + "color": "Color", + "icon": "Icon", + "not_found": "ไม่พบโฟลเดอร์", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบโฟลเดอร์นี้ อุปกรณ์จะถูกยกเลิกการกำหนด", + "delete_success": "ลบโฟลเดอร์เรียบร้อยแล้ว", + "created": "สร้างโฟลเดอร์สำเร็จแล้ว", + "updated": "อัปเดตโฟลเดอร์เรียบร้อยแล้ว", + "no_devices_selected": "ไม่ได้เลือกอุปกรณ์", + "devices_moved": "ย้ายอุปกรณ์เรียบร้อยแล้ว", + "device_assigned": "อุปกรณ์ที่กำหนดให้กับโฟลเดอร์", + "unassigned": "Unassigned", + "all_devices": "อุปกรณ์ทั้งหมด", + "drag_hint": "ลากอุปกรณ์ไปยังโฟลเดอร์เพื่อจัดระเบียบ", + "move_to": "ย้ายไปที่", + "toggle_sidebar": "สลับแถบด้านข้าง" + }, + "errors": { + "forbidden_title": "การเข้าถึงถูกปฏิเสธ", + "forbidden_message": "คุณไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรนี้", + "not_found_title": "ไม่พบเพจ", + "not_found_message": "หน้าที่คุณกำลังค้นหาไม่มีอยู่หรือถูกย้ายแล้ว", + "server_error_title": "ข้อผิดพลาดของเซิร์ฟเวอร์", + "server_error_message": "มีบาง��ย่างผิดพลาด โปรดลองอีกครั้งในภายหลัง", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "โหลดอุปกรณ์ไม่สำเร็จ", + "load_key_failed": "โหลดคีย์ไม่สำเร็จ", + "load_qr_failed": "โหลด QR ไม่สำเร็จ", + "load_audit_failed": "โหลดบันทึกการตรวจสอบไม่สำเร็จ", + "load_users_failed": "โหลดผู้ใช้ไม่สำเร็จ", + "load_folders_failed": "โหลดโฟลเดอร์ไม่สำเร็จ", + "download_failed": "การดาวน์โหลดล้มเหลว", + "logout_failed": "ออกจากระบบล้มเหลว", + "password_change_failed": "ไม่สามารถเปลี่ยนรหัสผ่าน", + "language_change_failed": "ไม่สามารถเปลี่ยนภาษาได้", + "ban_failed": "แบนอุปกรณ์ไม่สำเร็จ", + "unban_failed": "ยกเลิกการแบนอุปกรณ์ไม่สำเร็จ", + "delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", + "change_id_failed": "ไม่สามารถเปลี่ยนรหัสอุปกรณ์", + "bulk_delete_failed": "ลบอุปกรณ์ไม่สำเร็จ", + "sync_failed": "ไม่สามารถซิงค์สถานะได้", + "error": "Error", + "not_found": "Not found", + "server_error": "ข้อผิดพลาดของเซิร์ฟเวอร์", + "load_device_failed": "โหลดอุปกรณ์ไม่สำเร็จ", + "load_orgs_failed": "โหลดองค์กรไม่สำเร็จ" + }, + "remote": { + "title": "เดสก์ท็อประยะไกล", + "connecting": "กำลังเชื่อมต่อ...", + "waiting_password": "รอรหัสผ่าน", + "authenticating": "กำลังตรวจสอบสิทธิ์...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "ต้องใช้รหัสผ่าน", + "enter_password_for": "ป้อนรหัสผ่านสำหรับอุปกรณ์", + "password_placeholder": "รหัสผ่านอุปกรณ์", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "กลับไปที่อุปกรณ์", + "fullscreen": "Fullscreen", + "toggle_audio": "สลับเสียง", + "send_keys": "ส่งกุญแจ", + "scale_mode": "Scale Mode", + "scale_fit": "พอดีกับหน้าต่าง", + "scale_fill": "Fill Window", + "scale_original": "ขนาดต้นฉบับ (1:1)", + "scale_stretch": "ยืดเพื่อเติมเต็ม", + "actions": "Actions", + "lock_screen": "ล็อคหน้าจอ", + "restart_remote": "รีสตาร์ทอุปกรณ์ระยะไกล", + "refresh_screen": "รีเฟรชหน้าจอ", + "clipboard_paste": "วางจากคลิปบอร์ด", + "block_input": "Block Input", + "display_settings": "การตั้งค่าการแสดงผล", + "image_quality": "คุณภาพของภาพ", + "quality_best": "ดีที่สุด (คุณภาพเต็ม 60fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "แสดงเคอร์เซอร์ระยะไกล", + "lock_after_session": "ล็อคหลังจากเซสชั่น", + "privacy_mode": "โหมดความเป็นส่วนตัว", + "disable_clipboard": "ปิดการใช้งานคลิปบอร์ด", + "chat": "Chat", + "chat_placeholder": "���ิมพ์ข้อความ...", + "record": "หน้าจอบันทึก", + "view_only": "ดูอย่างเดียว", + "pin_toolbar": "ปักหมุดแถบเครื่องมือ", + "monitors": "Monitors", + "select_monitor": "เลือก จอภาพ", + "quality_speed": "ความเร็ว (คุณภาพต่ำ, 60fps)", + "quality_quality": "คุณภาพ (ดีที่สุด, 30fps)", + "recording_started": "เริ่มการบันทึกแล้ว", + "recording_stopped": "หยุดการบันทึกแล้ว", + "download_recording": "ดาวน์โหลดการบันทึก", + "e2e_encrypted": "เข้ารหัสตั้งแต่ต้นทางถึงปลายทาง", + "e2e_key_exchange": "การสร้างช่องทางที่ปลอดภัย...", + "confirm_restart": "คุณแน่ใจหรือไม่ว่าต้องการรีสตาร์ทอุปกรณ์ระยะไกล", + "webcodecs_not_supported": "เบราว์เซอร์ของคุณไม่รองรับ WebCodecs API โปรดใช้ Chrome 94+ หรือ Edge 94+", + "webcodecs_insecure_context": "WebCodecs ไม่พร้อมใช้งา���บน HTTP วิดีโอใช้ซอฟต์แวร์สำรอง เพื่อประสิทธิภาพที่ดีที่สุด ให้ใช้ HTTPS", + "webcodecs_fallback_active": "ซอฟต์แวร์ตัวถอดรหัสวิดีโอทำงานอยู่ (ประสิทธิภาพจำกัด)", + "click_to_start": "คลิกเพื่อเริ่ม", + "autoplay_blocked": "เบราว์เซอร์ต้องการให้ผู้ใช้โต้ตอบเพื่อเริ่มเล่นวิดีโอและเสียง", + "start_playback": "เริ่มเล่น", + "new_connection": "การเชื่อมต่อใหม่", + "device_id_placeholder": "ป้อนรหัสอุปกรณ์", + "http_warning": "โหมด HTTP: จำกัดเฉพาะการถอดรหัสซอฟต์แวร์ H.264 (~ 15 FPS) ใช้ HTTPS เพื่อประสิทธิภาพสูงสุด (WebCodecs, VP9, 60 FPS)", + "file_transfer": "การถ่ายโอนไฟล์", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "โฟลเดอร์นี้ว่างเปล่า", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "การโอนล้มเหลว", + "file_show_hidden": "แสดงไฟล์ที่ซ่อนอยู่", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "ป้อนชื่อโฟลเดอร์:", + "file_parent": "โฟลเดอร์หลัก", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "ป้อนชื่อใหม่:", + "file_delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้?", + "file_cancelled": "ยกเลิกการโอนแล้ว", + "2fa_required": "ต้องมีการยืนยัน 2FA", + "2fa_hint": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", + "2fa_invalid": "ป้อนรหัส 6 หลักที่ถูกต้อง", + "verify": "Verify", + "use_cdap_fallback": "ใช้โปรแกรมดู CDAP", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "คลิปบอร์ดว่างเปล่า", + "clipboard_denied": "การเข้าถึงคลิปบอร์ดถูกปฏิเสธ จำเป็นต้องมี HTTPS หรือไม่ได้รับอนุญาตให้อนุญาต", + "file_loading": "กำลังโหลด...", + "file_timeout": "อุปกรณ์ระยะไกลไม่ตอบสนอง การถ่ายโอนไฟล์อาจไม่รองรับหรือถูกปิดใช้งานบนเครื่องระยะไกล", + "codec": "ตัวแปลงสัญญาณวิดีโอ", + "codec_auto": "อัตโนมัติ (แนะนำ)" + }, + "branding": { + "identity_title": "เอกลักษณ์ของแบรนด์", + "identity_desc": "ปรับแต่งชื่อแอปพลิเคชันและคำอธิบายที่แสดงทั่วทั้งคอนโซล", + "app_name": "ชื่อแอปพลิเคชัน", + "app_description": "คำอธิบายแอปพลิเคชัน", + "logo_title": "Logo", + "logo_desc": "เลือกลักษณะที่โลโก้ของคุณจะปรากฏในแถบด้านข้างและหน้าเข้าสู่ระบบ", + "logo_type_icon": "ไอคอนวัสดุ", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "ป้อนชื่อไอคอนว���สดุ (เช่น DNS, คลาวด์, ความปลอดภัย) ดูที่fonts.google.com/icons", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "วางมาร์กอัป SVG ของคุณที่นี่ รองรับองค์ประกอบ เต็มรูปแบบพร้อมเส้นทางและสไตล์", + "logo_image_upload": "อัพโหลดรูปภาพ", + "logo_image_choose": "เลือกไฟล์รูปภาพ", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "ประเภทไฟล์ไม่ถูกต้อง ใช้ PNG, JPG, GIF, WebP หรือ SVG", + "preview": "Preview", + "colors_title": "โครงร่างสี", + "colors_desc": "ปรับแต่งจานสี เว้นว่างไว้เพื่อใช้ค่าเริ่มต้น", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "สีเน้น", + "colors_borders": "Borders", + "import_export_title": "นำเข้า/ส่งออก", + "import_export_desc": "บันทึกธีมของคุณเป็นไฟล์ JSON หรือนำเข้าจากอินสแตนซ์อื่น", + "export_theme": "ส่งออกธีม", + "import_theme": "นำเข้าธีม", + "reset_defaults": "รีเซ็ตเป็นค่าเริ่มต้น", + "save_branding": "บันทึกการสร้างแบรนด์", + "saved": "บันทึกการสร้างแบรนด์เรียบร้อยแล้ว กำลังโหลดซ้ำ...", + "exported": "ส่งออกธีมแล้ว", + "imported": "นำเข้าธีมเรียบร้อยแล้ว กำลังโหลดซ้ำ...", + "import_error": "ไม่สามารถนำเข้าธีมได้ รูปแบบไฟล์ไม่ถูกต้อง", + "reset_confirm": "คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการสร้างแบรนด์เป็นค่าเริ่มต้น สิ่งนี้ไม่สามารถยกเลิกได้", + "reset_success": "การสร้างแบรนด์รีเซ็ตเป็นค่าเริ่มต้น กำลังโหลดซ้ำ...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "ข้อความหลักที่แสดงเป็นโลโก้แบรนด์ของคุณ", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "ข้อความรองใต้โลโก้ (เช่น ชื่อผลิตภัณฑ์หรือสโลแกน)", + "logo_upload_success": "อัปโหลดโลโก้เรียบร้อยแล้ว", + "typography_title": "Typography", + "typography_desc": "เลือกแบบอักษรสำหรับส่วนหัวและข้อความเนื้อหา แบบอักษรจะถูกดาวน์โหลดไปยังเซิร์ฟเวอร์เพื่อการโฮสต์ด้วยต��เอง", + "font_heading": "แบบอักษรหัวเรื่อง", + "font_heading_hint": "ใช้สำหรับส่วนหัว (H1–H6) และโลโก้ข้อความ", + "font_body": "Body Font", + "font_body_hint": "ใช้สำหรับข้อความเนื้อหาและองค์ประกอบ UI", + "font_search_placeholder": "ค้นหาแบบอักษร...", + "font_system_default": "ค่าเริ่มต้นของระบบ", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "แบบอักษรที่ดาวน์โหลดบนเซิร์ฟเวอร์", + "powered_by": "ขับเคลื่อนโดย", + "background_title": "พื้นหลังและรูปลักษณ์", + "background_desc": "ตั้งค่าวอลเปเปอร์คอนโซล, gradient หรือพื้นหลังสีพื้น การ์ดจะลอยอยู่บน", + "bg_type_none": "ไม่มี", + "bg_type_color": "สีพื้น", + "bg_type_gradient": "Gradient", + "bg_type_image": "รูปภาพ", + "bg_color": "สีพื้นหลัง", + "bg_gradient": "ไล่ระดับสี CSS", + "bg_gradient_hint": "CSS gradient ที่ถูกต้องใดๆ เช่น linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "อัปโหลดรูปพื้นหลัง", + "bg_image_choose": "เลือกไฟล์รูปภาพ", + "bg_image_hint": "PNG, JPG, WebP หรือ GIF สูงสุด 8 MB บันทึกบนเซิร์ฟเวอร์", + "bg_image_url": "เส้นทาง / URL รูปภาพ", + "bg_size": "การปรับขนาดรูปภาพ", + "bg_size_cover": "Cover (เต็มหน้าจอ)", + "bg_size_contain": "Contain (พอดี)", + "bg_size_auto": "อัตโนมัติ (ขนาดเดิม)", + "bg_blur": "เบลอพื้นหลัง", + "bg_overlay": "Overlay มืด", + "bg_overlay_hint": "ทำให้พื้นหลังมืดลงเพื่อให้อ่านข้อความได้ง่ายขึ้น", + "bg_image_too_large": "รูปภาพใหญ่เกินไป ขนาดสูงสุด 8 MB", + "bg_image_invalid_type": "ประเภทไฟล์ไม่ถูกต้อง ใช้ PNG, JPG, WebP หรือ GIF", + "bg_upload_success": "อัปโหลดรูปพื้นหลังสำเร็จ", + "login_title": "หน้าเข้าสู่ระบบ", + "login_desc": "กำหนดค่าหัวเรื่อง, คำบรรยาย และพื้นหลังของหน้าเข้าสู่ระบบ", + "login_heading": "หัวเรื่องเข้าสู่ระบบ", + "login_heading_placeholder": "ยินดีต้อนรับกลับ", + "login_subheading": "คำบรรยายเข้าสู่ระบบ", + "login_subheading_placeholder": "เข้าสู่ระบบบัญชีของคุณ", + "login_bg_inherit": "เหมือนกับคอนโซล", + "agent_title": "หน้าดาวน์โหลด Agent", + "agent_desc": "กำหนดค่าพอร์ทัลดาวน์โหลด agent สาธารณะที่แสดงให้ผู้ใช้งาน", + "agent_show_powered": "แสดง \"Powered by BetterDesk\"", + "agent_show_powered_hint": "แสดงเครดิต BetterDesk ในส่วนท้ายพอร์ทัลดาวน์โหลด", + "footer_title": "ส่วนท้ายและลิขสิทธิ์", + "footer_desc": "เพิ่มข้อความส่วนท้ายที่กำหนดเองในหน้าเข้าสู่ระบบและแถบด้านข้างคอนโซล", + "footer_text": "ข้อความส่วนท้าย", + "footer_text_hint": "เช่น ประกาศลิขสิทธิ์หรือชื่อบริษัท", + "show_powered": "แสดงเครดิต \"BetterDesk\"", + "show_powered_hint": "แสดงชื่อและเวอร์ชัน BetterDesk ในส่วนท้ายเข้าสู่ระบบและแถบด้านข้าง", + "custom_css_title": "CSS กำหนดเอง", + "custom_css_desc": "ขั้นสูง: แทรก CSS กำหนดเองที่ใช้กับคอนโซลและหน้าเข้าสู่ระบบ", + "custom_css_hint": "ใช้ด้วยความระมัดระวัง กฎที่ไม่ถูกต้องหรือไม่ปลอดภัยจะถูกลบ สูงสุด 20,000 ตัวอักษร" + }, + "device_detail": { + "tab_overview": "ภาพรวม", + "tab_tags": "แท็ก & หมายเหตุ", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "การเชื่อมต่อ", + "section_manage": "การจัดการ", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "อุปกรณ์นี้ถูกแบน", + "no_reason": "ไม่มีการระบุเหตุผล", + "tags": "Tags", + "no_tags": "ไม่มีการกำหนดแท็กให้กับอุปกรณ์นี้", + "tag_placeholder": "ป้อนชื่อแท็ก...", + "add_tag": "Add", + "tag_exists": "มีแท็กนี้อยู่แล้ว", + "notes": "Notes", + "notes_placeholder": "เพิ่มบันทึกเกี่ยวกับอุปกรณ์นี้...", + "danger_zone": "Danger Zone", + "action_connect_web": "เว็บระยะไกล", + "action_connect_web_desc": "เชื่อมต่อผ่านเดสก์ท็อประยะไกลของเบราว์เซอร์", + "action_native_remote": "BetterDesk รีโมท", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "ไคลเอนต์เดสก์ท็อป", + "action_connect_desktop_desc": "เปิดในแอปไคลเอนต์เดสก์ท็อป", + "action_change_id_desc": "เปลี่ยนรหัสการลงทะเบียนอุปกรณ์", + "action_ban_desc": "บล็อกอุปกรณ์นี้ไม่ให้เชื่อมต่อ", + "action_unban_desc": "อนุญาตให้อุปกรณ์นี้เชื่อมต่ออีกครั้ง", + "action_delete_desc": "นำอุปกรณ์นี้ออกอย่างถาวร", + "tab_hardware": "Hardware", + "tab_metrics": "เมตริก", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "ความสามารถในการเข้ารหัส", + "section_live_metrics": "ตัวชี้วัดสด", + "section_current_usage": "การใช้งานปัจจุบัน", + "section_usage_history": "ประวัติการใช้งาน", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "ความถี่ซีพียู", + "total_memory": "หน่วยความจำทั้งหมด", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "อัปเดตแล้ว", + "device_groups": "กลุ่ม", + "no_sysinfo": "ไม่มีข้อมูลฮาร์ดแวร์", + "no_sysinfo_hint": "ข้อมูลระบบจะปรากฏขึ้นหลังจากที่อุปกรณ์ส่งรายงาน sysinfo", + "no_metrics": "ไม่มีข้อมูลเมตริก", + "no_metrics_hint": "การวัดจะปรากฏขึ้นหลังจากที่อุปกรณ์ส่งรายงานฮาร์ทบีท", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "ไฟล์", + "agent_lazy_hint": "คลิกแท็บนี้เพื่อโหลดข้อมูลสดจากตัวแทน", + "agent_offline": "ตัวแทนออฟไลน์อยู่", + "agent_timeout": "ตัวแทนไม่ตอบกลับทันเวลา", + "agent_error": "โหลดข้อมูลจากตัวแทนไม่สำเร็จ", + "service_name": "Name", + "service_display": "ชื่อที่แสดง", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "สินค้าคงคล��งฮาร์ดแวร์และซอฟต์แวร์ของอุปกรณ์ที่ได้รับการจัดการ", + "device_id": "รหัสอุปกรณ์", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "หน่วยความจำทั้งหมด", + "memory_used": "Used Memory", + "memory_available": "หน่วยความจำที่มีอยู่", + "memory_usage": "การใช้หน่วยความจำ", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "อินเทอร์เฟซเครือข่าย", + "software": "Software", + "software_count": "ซอฟต์แวร์ที่ติดตั้ง", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "แกนทางกายภาพ", + "logical_cores": "แกนลอจิคัล", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "มีจำหน่าย", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "ที่อยู่ IP", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "นักสะสมวิ่ง", + "collector_stopped": "นักสะสมหยุดแล้ว", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "รวบรวมไว้ที่", + "no_data": "ยังไม่มีข้อมูลสินค้าคงคลัง คลิก \"รวบรวมทันที\" เพื่อรวบรวมข้อมูลระบบ", + "no_devices": "ไม่พบอุปกรณ์ที่มีข้อมูลสินค้าคงคลัง", + "detail_title": "รายละเอียดสินค้าคงคลังของอุปกรณ์", + "telemetry": "Telemetry", + "view_detail": "ดูร��ยละเอียด", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "ตั๋วสนับสนุนและการติดตามปัญหา", + "create": "New Ticket", + "edit": "แก้ไขตั๋ว", + "delete": "ลบตั๋ว", + "detail": "รายละเอียดตั๋ว", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "มอบหมายให้", + "created_by": "สร้างโดย", + "device": "อุปกรณ์", + "sla_due": "SLA Due", + "created_at": "สร้างแล้ว", + "updated_at": "อัปเดตแล้ว", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "เปิด", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "เขียนความคิดเห็น...", + "internal_note": "หมายเหตุภายใน (ผู้ใช้ปลายทางไม่สามารถมองเห็นได้)", + "attachments": "Attachments", + "upload_attachment": "อัพโหลดไฟล์แนบ", + "download": "Download", + "connect_device": "เชื่อมต่อกับอุปกรณ์", + "no_tickets": "ไม่พบตั๋ว", + "no_comments": "ยังไม่มีความคิดเห็น", + "no_attachments": "ไม่มีไฟล์แนบ", + "title_required": "ต้องระบุชื่อเรื่อง", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบตั๋ว #{id}", + "delete_success": "ลบตั๋วเรียบร้อยแล้ว", + "created_success": "สร้างตั๋วสำเร็จแล้ว", + "updated_success": "อัปเดตตั๋วเรียบร้อยแล้ว", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "ค้นหาตั๋ว...", + "assign_to_me": "มอบหมายให้ฉัน", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "เปิด", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "การตรวจสอบกิจกรรม", + "subtitle": "การใช้แอปพลิเคชันและการติดตามการไม่ได้ใช้งาน", + "device": "อุปกรณ์", + "hostname": "Hostname", + "sessions": "เซสชัน", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "แอปพลิเคชั่นยอดนิยม", + "app_name": "Application", + "window_title": "ชื่อหน้าต่าง", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "จำนวนเซสชัน", + "total_active": "ใช้งานอยู่ทั้งหมด", + "total_idle": "Total Idle", + "detail_count": "บันทึกรายละเอียด", + "no_data": "ไม่มีข้อมูลกิจกรรม", + "no_sessions": "ไม่มีเซสชัน", + "filter_from": "จาก", + "filter_to": "ถึง", + "filter_apply": "ใช้ตัวกรอง", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "ค้นหาอุปกรณ์...", + "date_range": "Date Range", + "device_id": "รหัสอุปกรณ์", + "session_start": "เริ่มเซสชัน", + "session_end": "สิ้นสุดเซสชัน", + "user": "User", + "no_activity": "ไม่มีการบันทึกกิจกรรม", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "ไม่มีแอปพลิเคชัน" + }, + "automation": { + "title": "ระบบอัตโนมัติและการแจ้งเตือน", + "subtitle": "กฎการแจ้งเตือน คำสั่งระยะไกล และการกำหนดค่า SMTP", + "rules": "Alert Rules", + "rules_subtitle": "กำหนดเงื่อนไขที่ทำให้เกิดการแจ้งเตือน", + "alerts": "ประวัติการแจ้งเตือน", + "alerts_subtitle": "ดูและรับทราบการแจ้งเตือนที่ถูกเรียกใช้", + "commands": "คำสั่งระยะไกล", + "commands_subtitle": "ส่งคำสั่งไปยังอุปกรณ์ระยะไกล", + "smtp": "การกำหนดค่า SMTP", + "smtp_subtitle": "การตั้งค่าการแจ้งเตือนทางอีเมล", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "ประเภทเงื่อนไข", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "อุปกรณ์เป้าหมาย", + "scope_all": "อุปกรณ์ทั้งหมด", + "cooldown": "คูลดาวน์ (วินาที)", + "notify_emails": "อีเมลแจ้งเตือน", + "enabled": "เปิดใช้งานแล้ว", + "disabled": "ปิดการใช้งาน", + "create_rule": "สร้างกฎ", + "edit_rule": "แก้ไขกฎ", + "delete_rule": "ลบกฎ", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "ทริกเกอร์ที่", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "มากกว่า", + "op_gte": "มากกว่าหรือเท่ากัน", + "op_lt": "Less than", + "op_lte": "น้อยกว่าหรือเท่ากัน", + "op_eq": "เท่ากับ", + "op_neq": "ไม่เท่ากับ", + "type_cpu_usage": "การใช้งานซีพียู (%)", + "type_memory_usage": "การใช้หน่วยความจำ (%)", + "type_disk_usage": "การใช้ดิสก์ (%)", + "type_offline_duration": "ระยะเวลาออฟไลน์ (s)", + "type_idle_duration": "ระยะเวลาไม่ได้ใช้งาน (s)", + "type_custom": "Custom", + "command_type": "ประเภทคำสั่ง", + "command_payload": "คำสั่ง / สคริปต์", + "command_result": "Result", + "command_status": "Status", + "send_command": "ส่งคำสั่ง", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "ล้มเหลว", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "ชื่อผู้ใช้", + "smtp_pass": "รหัสผ่าน", + "smtp_from": "จากที่อยู่", + "smtp_test": "ทดสอบการเชื่อมต่อ", + "smtp_save": "บันทึกการกำหนดค่า", + "smtp_test_success": "การเชื่อมต่อสำเร็จ", + "smtp_test_failed": "การเชื่อมต่อล้มเหลว", + "no_rules": "ไม่มีการกำหนดค่ากฎการแจ้งเตือน", + "no_alerts": "ไม่มีการแจ้งเตือนเกิดขึ้น", + "no_commands": "ไม่มีการส่งคำสั่ง", + "id_payload_required": "ต้องมีรหัสอุปกรณ์และเพย์โหลด", + "no_commands_sent": "ยังไม่มีการส่งคำสั่งใดๆ" + }, + "file_transfer": { + "title": "การถ่ายโอนไฟล์", + "transfers": "Transfers", + "new_transfer": "โอนใหม่", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "ขนาดไฟล์", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "อุปกรณ์", + "initiated_by": "เริ่มโดย", + "created_at": "สร้างเมื่อ", + "cancel": "ยกเลิก", + "cancel_confirm": "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการโอนนี้", + "download_file": "ดาวน์โหลดไฟล์", + "browse_files": "เรียกดูไฟล์", + "select_file": "เลือกไฟล์", + "select_device": "เลือกอุปกรณ์", + "no_transfers": "ไม่มีการถ่ายโอนไฟล์", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "ล้มเหลว", + "status_cancelled": "Cancelled", + "bytes_transferred": "ไบต์ที่ถ่ายโอนแล้ว", + "chunks": "Chunks", + "transfer_started": "เริ่มการโอนแล้ว", + "transfer_completed": "โอนเรียบร้อยแล้ว", + "transfer_failed": "การโอนล้มเหลว", + "transfer_cancelled": "ยกเลิกการโอนแล้ว", + "max_file_size": "ขนาดไฟล์สูงสุด: 4 GB", + "error_too_large": "ไฟล์มีขนาดใหญ่เกินไป", + "error_no_device": "ไม่ได้เลือกอุปกรณ์", + "error_no_file": "ไม่ได้เลือกไฟล์" + }, + "network": { + "title": "การตรวจสอบเครือข่าย", + "targets": "การติดตามเป้าหมาย", + "add_target": "Add Target", + "edit_target": "แก้ไขเป้าหมาย", + "delete_target": "ลบเป้าหมาย", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบเป้าหมายนี้", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "หมดเวลา (มิลลิวินาที)", + "interval": "ช่วงเวลา (มิลลิวินาที)", + "enabled": "เปิดใช้งานแล้ว", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "ตรวจสอบประวัติ", + "stats": "Statistics", + "total_targets": "เป้าหมายทั้งหมด", + "targets_up": "Targets Up", + "targets_down": "เป้าหมายลง", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "เครื่องมือเครือข่าย", + "ping_tool": "Ping Test", + "tcp_tool": "TCP ตรวจสอบพอร์ต", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "เริ่มการตรวจสอบ", + "monitor_stop": "หยุดการตรวจสอบ", + "monitor_running": "จอภาพกำลังทำงาน", + "monitor_stopped": "จอภาพหยุดทำงาน", + "no_targets": "ไม่มีการกำหนดค่าเป้าหมายการตรวจสอบ", + "no_history": "ไม่มีประวัติการตรวจสอบ", + "error_code": "Error", + "status_code": "รหัสสถานะ HTTP", + "search_targets": "ค้นหาเป้าหมาย...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "ตรวจสอบประวัติ", + "name_host_required": "ต้องระบุชื่อและโฮสต์", + "uptime": "Uptime", + "response_time": "เวลาตอบสนอง", + "avg_response": "การตอบสนองโดยเฉลี่ย", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "เวลาตอบสนอง (มิลลิวินาที)", + "uptime_percent": "Uptime %", + "last_24h": "24ชม.ที่ผ่านมา", + "last_7d": "Last 7 days", + "last_30d": "30 วันที่ผ่านมา" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "นโยบายดีแอลพี", + "add_policy": "เพิ่มนโยบาย", + "edit_policy": "แก้ไขนโยบาย", + "delete_policy": "ลบนโยบาย", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "เปิดใช้งานแล้ว", + "disabled": "ปิดการใช้งาน", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "อุปกรณ์ USB", + "rule_type_file": "การทำงานของไฟล์", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "รหัสผู้ขาย (VID)", + "pid": "รหัสผลิตภัณฑ์ (PID)", + "serial": "หมายเลขซีเรียล", + "device_class": "คลาสอุปกรณ์", + "drive_type": "Drive Type", + "file_extensions": "นามสกุลไฟล์", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "ไฟล์", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "ไม่มีการกำหนดค่านโยบาย DLP", + "no_events": "ไม่มีการบันทึกเหตุการณ์ DLP", + "stats": "Statistics", + "total_events": "เหตุการณ์ทั้งหมด", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "ไฟล์เหตุการณ์", + "device_id": "รหัสอุปกรณ์", + "policy_matched": "นโยบายที่ตรงกัน", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "นโยบายรวม", + "active_policies": "นโยบายที่ใช้งานอยู่", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "นโยบาย", + "tab_events": "Events", + "search_policies": "นโยบายการค้นหา...", + "create_policy": "สร้างนโยบาย", + "policy_type": "ประเภทกรมธรรม์", + "scope": "Scope", + "events_count": "Events", + "search_events": "ค้นหากิจกรรม...", + "event_time": "Event Time", + "device": "อุปกรณ์", + "policy": "นโยบาย", + "detail": "Detail", + "scope_help": "รหัสอุปกรณ์ที่คั่นด้วยเครื่องหมายจุลภาค หรือเว้นว่างไว้สำหรับทั้งหมด", + "scope_all": "อุปกรณ์ทั้งหมด", + "active": "Active", + "type_file_type": "ประเภทไฟล์", + "type_clipboard": "คลิปบอร์ด", + "type_screen_share": "แชร์หน้าจอ", + "type_file_transfer": "การถ่ายโอนไฟล์", + "policy_desc": "คำอธิบายนโยบาย", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "สร้างรายงาน", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "สรุปอุปกรณ์", + "type_activity": "สรุปกิจกรรม", + "type_security": "รายงานความปลอดภัย", + "type_tickets": "รายงานตั๋ว", + "type_network": "รายงานเครือข่าย", + "type_inventory": "รายงานสินค้าคงคลัง", + "type_alerts": "รายงานการแจ้งเตือน", + "saved": "รายงานที่บันทึกไว้", + "save_report": "บันทึกรายงาน", + "delete_report": "ลบรายงาน", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบรายงานที่บันทึกไว้นี้", + "no_saved": "ไม่มีรายงานที่บันทึกไว้", + "report_title": "Title", + "created_by": "สร้างโดย", + "created_at": "สร้างเมื่อ", + "filters": "Filters", + "date_from": "จาก", + "date_to": "ถึง", + "device_filter": "รหัสอุปกรณ์", + "generated_at": "สร้างเมื่อ", + "section": "ส่วนข้อมูล", + "total_devices": "อุปกรณ์ทั้งหมด", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "การกระจายแพลตฟอร์ม", + "top_applications": "แอปพลิเคชั่นยอดนิยม", + "total_active": "เวลาใช้งานทั้งหมด", + "total_idle": "เวลาว่างทั้งหมด", + "dlp_stats": "สถิติ DLP", + "banned_devices": "อุปกรณ์ที่ถูกแบน", + "audit_logs": "Audit Logs", + "ticket_stats": "สถิติตั๋ว", + "category_distribution": "การกระจายหมวดหมู่", + "priority_distribution": "การกระจายลำดับความสำคัญ", + "targets_status": "สถานะเป้าหมาย", + "os_distribution": "การกระจายระบบปฏิบัติการ", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "การแจ้งเตือนล่าสุด", + "tab_generate": "สร้างรายงาน", + "tab_saved": "รายงานที่บันทึกไว้", + "type_devices_desc": "ภาพรวมของอุปกรณ์ แพลตฟอร์ม และสถานะทั้งหมด", + "type_activity_desc": "สรุปการใช้งานแอพพลิเคชั่นและเวลาว่าง", + "type_security_desc": "การกระทำการแบน กิจกรรม DLP และบันทึกการตรวจสอบ", + "type_tickets_desc": "สถิติตั๋วและประสิทธิภาพ SLA", + "type_network_desc": "เป้าหมายการตรวจสอบเครือข่ายและข้อมูลสถานะการออนไลน์", + "type_inventory_desc": "สรุปรายการฮาร์ดแวร์และซอฟต์แวร์", + "type_alerts_desc": "กฎการแจ้งเตือนและประวัติการแจ้งเตือนที่เรียกใช้", + "report_name": "Report Name", + "format": "Format", + "save": "บันทึกรายงาน", + "preview": "Preview", + "download": "Download", + "delete_saved": "ลบรายงาน", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "แก้ไขผู้เช่า", + "delete_tenant": "ลบผู้เช่า", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบผู้เช่ารายนี้ การกำหนดอุปกรณ์และผู้ใช้ทั้งหมดจะถูกลบออก", + "name": "Name", + "slug": "Slug", + "contact_name": "ชื่อผู้ติดต่อ", + "contact_email": "อีเมล์ติดต่อ", + "max_devices": "อุปกรณ์แม็กซ์", + "max_devices_hint": "0 = ไม่จำกัด", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "อุปกรณ์", + "users": "Users", + "assign_device": "กำหนดอุปกรณ์", + "assign_devices": "กำหนดอุปกรณ์", + "remove_device": "ถอดอุปกรณ์", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "ไม่มีการกำหนดค่าผู้เช่า", + "no_devices": "ไม่มีอุปกรณ์ที่มอบหมายให้กับผู้เช่ารายนี้", + "no_users": "ไม่มีผู้ใช้ที่กำหนดให้กับผู้เช่ารายนี้", + "stats": "สถิติผู้เช่า", + "total_devices": "อุปกรณ์ทั้งหมด", + "online_devices": "อุป���รณ์ออนไลน์", + "total_users": "Total Users", + "created_at": "สร้างเมื่อ", + "updated_at": "อัปเดตเมื่อ", + "slug_exists": "ทากผู้เช่ามีอยู่แล้ว", + "total_tenants": "ผู้เช่าทั้งหมด", + "active_tenants": "ผู้เช่าที่ใช้งานอยู่", + "search": "ค้นหาผู้เช่า...", + "create_tenant": "สร้างผู้เช่า", + "detail": "รายละเอียดผู้เช่า", + "contact": "Contact", + "enabled": "เปิดใช้งานแล้ว", + "disabled": "ปิดการใช้งาน", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "ค้นหาตามรหัสอุปกรณ์ ชื่อโฮสต์ หรือ IP...", + "no_registrations": "No registration requests", + "col_device_id": "รหัสอุปกรณ์", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "คุณแน่ใจหรือไม่ว่าต้องการอนุมัติอุปกรณ์นี้ จะได้รับข้อมูลรับรองเซิร์ฟเวอร์และสามารถเชื่อมต่อได้โดยอัตโนมัติ", + "approved_success": "การลงทะเบียนอุปกรณ์ได้รับอนุมัติเรียบร้อยแล้ว", + "reject_btn": "Reject", + "reject_title": "ปฏิเสธการลงทะเบียน", + "reject_confirm": "คุณแน่ใจหรือไม่ว่าต้องการปฏิเสธคำขอลงทะเบียนนี้", + "reject_reason": "เหตุผล (ไม่บังคับ)", + "reject_reason_placeholder": "ป้อนเหตุผลในการปฏิเสธ...", + "rejected_success": "การลงทะเบียนอุปกรณ์ถูกปฏิเสธ", + "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการลงทะเบียนนี้", + "deleted_success": "ลบบันทึกการลงทะเบียนแล้ว", + "enrollment_title": "การลงทะเบียนอุปกรณ์", + "enrollment_subtitle": "คำขอการลงทะเบียนที่รอดำเนินการจากไคลเอ็นต์เดสก์ท็อป BetterDesk", + "enrollment_empty": "ไม่มีคำขอลงทะเบียนที่รอดำเนินการ", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "ชื่อที่แสดง", + "enrollment_display_name_placeholder": "ป้อนชื่อสำหรับอุปกรณ์นี้...", + "enrollment_sync_mode": "โหมดการซิงค์", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "อนุมัติการลงทะเบียนอุปกรณ์แล้ว", + "enrollment_rejected_success": "การลงทะเบียนอุปกรณ์ถูกปฏิเสธ", + "approve_title": "อนุมัติอุปกรณ์", + "field_name": "ชื่ออุปกรณ์", + "field_name_placeholder": "กรุณากรอกชื่อสำหรับอุปกรณ์นี้...", + "field_sync_mode": "โหมดซิงค์", + "sync_standard": "มาตรฐาน — ซิงค์แบบสมดุล", + "sync_silent": "เงียบ — telemetry ขั้นต่ำ", + "sync_turbo": "Turbo — ซิงค์เชิงรุก", + "field_tags": "แท็ก", + "field_tags_placeholder": "แท็กคั่นด้วยเครื่องหมายจุลภาค (เช่น ออฟฟิศ, แล็ปท็อป)...", + "field_tags_existing": "แท็กที่มีอยู่", + "field_tag_add_placeholder": "เพิ่มแท็กใหม่...", + "field_tag_add_btn": "เพิ่ม", + "field_groups": "กลุ่มอุปกรณ์", + "field_folder": "โฟลเดอร์", + "field_folder_none": "ไม่มีโฟลเดอร์", + "reject_ban_option": "แบนอุปกรณ์นี้", + "reject_ban_hint": "อุปกรณ์จะถูกบล็อกและไม่สามารถส่งคำขอลงทะเบียนใหม่ได้", + "banner_open_mode": "การลงทะเบียนเปิดอยู่ — RustDesk ไคลเอนต์ใหม่ลงทะเบียนโดยไม่ต้องอนุมัติจากผู้ดำเนินการ ตั้งค่า Managed mode ในการตั้งค่าเพื่อใช้คิวนี้", + "banner_locked_mode": "การลงทะเบียนถูกล็อก — เฉพาะอุปกรณ์ที่ผูกกับ token เท่านั้นที่ลงทะเบียนได้ ต้องใช้ Managed mode สำหรับการอนุมัติผู้ดำเนินการ", + "enrollment_settings_link": "การตั้งค่าลงทะเบียน" + }, + "backup": { + "title": "Backup", + "desc": "ดาวน์โหลดการสำรองข้อมูลการกำหนดค่าคอนโซล ผู้ใช้ กลุ่ม และการตั้งค่าทั้งหมด ข้อมูลเพียร์ Go server จะถูกรวมไว้เมื่อแบ็กเอนด์ BetterDesk ทำงานอยู่", + "restore_title": "Restore", + "restore_desc": "อัปโหลดไฟล์สำรองข้อมูลที่ดาวน์โหลดไว้ก่อนหน้านี้เพื่อคืนค่าการกำหนดค่าคอนโซล เลือกส่วนที่จะกู้คืนด้านล่าง", + "stat_users": "Users", + "stat_settings": "การตั้งค่า", + "stat_folders": "Folders", + "stat_groups": "กลุ่ม", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "ดาวน์โหลดการสำรองข้อมูล", + "creating": "กำลังสร้างข้อมูลสำรอง...", + "download_success": "ดาวน์โหลดข้อมูลสำรองเรียบร้อยแล้ว", + "upload": "อัพโหลดข้อมูลสำรอง", + "restore_confirm": "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนจากข้อมูลสำรองนี้ ส่วนที่เลือกจะถูกเขียนทับ", + "restore_success": "กู้คืนข้อมูลสำรองเรียบร้อยแล้ว การเปลี่ยนแปลงบางอย่างอาจต้องมีการโหลดหน้าซ้ำ", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "การตั้งค่าคอนโซล", + "opt_branding": "การสร้างแบรนด์ / ธีม", + "opt_folders": "โฟลเดอร์อุปกรณ์", + "opt_groups": "ผู้ใช้และกลุ่มอุปกรณ์", + "opt_addressbooks": "สมุดที่อยู่", + "opt_users": "บัญชีผู้ใช้", + "opt_users_warning": "ทำลายล้าง: แทนที่บัญชีผู้ใช้ทั้งหมดด้วยข้อมูลสำรอง คุณอาจออกจากระบบ", + "no_file": "ไม่ได้เลือกไฟล์สำรอง", + "invalid_json": "ไฟล์สำรองไม่ถูกต้อง: JSON ไม่ถูกต้อง", + "invalid_format": "ไฟล์สำรองไม่ถูกต้อง: ไม่ใช่ข้อมูลสำรอง BetterDesk", + "stat_database": "เอ็นจิน Database", + "stat_keys": "รวม Server keys", + "stat_env": "ไฟล์ Environment", + "stat_uploads": "ไฟล์ Branding", + "restart_required": "บางคอมโพเนนต์ที่กู้คืน (keys / .env / Go database) ต้องรีสตาร์ทบริการเพื่อให้มีผล", + "security_warning": "การสำรองนี้มีข้อมูลความลับ (server keys, environment file, password hashes และ 2FA secrets) เก็บให้ปลอดภัยและอย่าแชร์", + "restore_warning": "การกู้คืน secrets, environment file หรือ Go server database จะเขียนทับ server identity และต้องรีสตาร์ทบริการหลังจากนั้น", + "opt_database": "Database (ทุกตาราง)", + "opt_database_hint": "นำเข้าข้อมูลคอนโซลทั้งหมดใหม่ ใช้งานทันที ไม่ต้องรีสตาร์ท", + "opt_uploads": "ไฟล์ Branding", + "opt_uploads_hint": "โลโก้และรูปภาพที่อัปโหลด", + "opt_secrets": "คีย์และความลับของเซิร์ฟเวอร์", + "opt_secrets_warning": "เขียนทับ Ed25519 server identity, API key และ session secret ต้องรีสตาร์ทบริการ", + "opt_env": "ไฟล์สภาพแวดล้อม (.env)", + "opt_env_warning": "เขียนทับ SESSION_SECRET, API key, database DSN, ports และ TLS settings ต้องรีสตาร์ทบริการ", + "opt_godb": "ฐานข้อมูลเซิร์ฟเวอร์ Go", + "opt_godb_warning": "เขียนทับ Go server SQLite database (เฉพาะ SQLite backend) ต้องรีสตาร์ทบริการ" + }, + "cdap": { + "device_detail": "อุปกรณ์ CDAP", + "loading": "กำลังโหลด...", + "loading_widgets": "กำลังโหลดวิดเจ็ตของอุปกรณ์...", + "load_error": "โหลดข้อมูลอุปกรณ์ไม่สำเร็จ", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "อุปกรณ์ออฟไลน์อยู่ในขณะนี้ ค่าวิดเจ็ตอาจเก่าแล้ว", + "no_widgets": "ไม่มีวิดเจ็ตที่ใช้ได้", + "no_widgets_desc": "อุปกรณ์นี้ไม่ได้ลงทะเบียนรายการ CDAP ด้วยคำจำกัดความของวิดเจ็ต", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "ยืนยันคำสั่ง", + "select_option": "เลือก", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "ส่งคำสั่ง", + "command_sent": "ส่งคำสั่งเรียบร้อยแล้ว", + "command_failed": "ไม่สามารถส่งคำสั่งได้", + "devices_title": "อุปกรณ์ CDAP", + "devices_subtitle": "อุปกรณ์ที่เชื่อมต่อผ่าน Custom Device Application Protocol", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "ค้นหาอุปกรณ์...", + "no_devices": "ไม่มีอุปกรณ์เชื่อมต่ออยู่", + "no_devices_desc": "ไม่มีอุปกรณ์ CDAP เชื่อมต่ออยู่ในขณะนี้ อุปกรณ์จะปรากฏที่นี่เมื่อเชื่อมต่อกับเกตเวย์", + "gateway_disabled": "CDAP เกตเวย์ถูกปิดใช้งาน", + "gateway_disabled_desc": "เปิดใช้งานเกตเวย์ CDAP โดยการตั้งค่า CDAP_ENABLED=true ในการกำหนดค่าเซิร์ฟเวอร์", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "ปิดการใช้งาน CDAP", + "enabled_restart": "เปิดใช้งาน CDAP แล้ว จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลง", + "disabled_restart": "CDAP ปิดการใช้งาน จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลง", + "widgets": "วิดเจ็ต", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "การแจ้งเตือนที่ใช้งานอยู่", + "alert_fired": "Alert fired", + "alert_cleared": "ล้างการแจ้งเตือนแล้ว", + "no_alerts": "ไม่มีการแจ้งเตือนที่ทำงานอยู่", + "connect_terminal": "เชื่อมต่อเทอร์มินัล", + "table_search": "ค้นหา...", + "just_now": "Just now", + "terminal_connecting": "กำลังเชื่อมต่อกับอุปกรณ์...", + "terminal_disconnected": "Disconnected", + "terminal_error": "การเชื่อมต่อเทอร์มินัลล้มเหลว", + "linked_devices": "อุปกรณ์ที่เชื่อมโยง", + "link_device": "เชื่อมโยงอุปกรณ์", + "unlink_device": "Unlink", + "no_linked_devices": "ไม่มีอุปกรณ์ที่เชื่อมโยง", + "unlink_confirm": "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการลิงก์อุปกรณ์นี้", + "link_prompt": "ป้อน Peer ID เพื่อเชื่อมโยงกับอุปกรณ์นี้:", + "connect_desktop": "เชื่อมต่อเดสก์ท็อป", + "connect_video": "เชื่อมต่อสตรีม", + "connect_files": "เรียกดูไฟล์", + "connect_audio": "เชื่อมต่อเสียง", + "upload_file": "Upload", + "desktop_connecting": "กำลังเชื่อมต่อ...", + "video_connecting": "กำลังเชื่อมต่อ...", + "files_connecting": "กำลังเชื่อมต่อ...", + "audio_connecting": "กำลังเชื่อมต่อ...", + "audio_streaming": "Streaming", + "clipboard_in": "ได้รับคลิปบอร์ดแล้ว", + "clipboard_out": "ส่งคลิปบอร์ดแล้ว", + "monitor_select": "เลือก จอภาพ", + "keyframe_request": "ขอคีย์เฟรม", + "quality_auto": "คุณภาพรถยนต์" + }, + "desktop": { + "switch_mode": "โหมดเดสก์ท็อป", + "console_mode": "โหมดคอนโซล", + "loading": "กำลังโหลด...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "ปิด", + "widgets_mode": "วิดเจ็ต", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "เพิ่มวิดเจ็ต", + "remove_widget": "ลบวิดเจ็ต", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "กำหนดค่า", + "search_widgets": "วิดเจ็ตการค้นหา...", + "cat_monitoring": "Monitoring", + "cat_devices": "อุปกรณ์", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "เขียนบันทึกที่นี่...", + "search_placeholder": "ค้นหาอุปกรณ์ เพจ การตั้งค่า...", + "search_pages": "Pages", + "search_devices": "อุปกรณ์", + "search_no_results": "No results", + "exit_desktop": "ออกจากโหมดเดสก์ท็อป", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "สถานะอุปก���ณ์", + "widget_server_health": "ข้อมูลเซิร์ฟเวอร์", + "widget_system_stats": "มาตรวัดอุปกรณ์", + "widget_device_list": "รายการอุปกรณ์", + "widget_quick_actions": "การดำเนินการด่วน", + "widget_recent_activity": "กิจกรรมล่าสุด", + "widget_notes": "Notes", + "widget_network_monitor": "การตรวจสอบเครือข่าย", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "อุปกรณ์ CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "ตารางอุปกรณ์", + "widget_multi_gauge": "มาตรวัดเซิร์ฟเวอร์", + "widget_weekly_chart": "กิจกรรมประจำสัปดาห์", + "widget_quick_controls": "การควบคุมด่วน", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "สถิติการเชื่อมต่อ", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "เซสชันผู้ใช้", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "ไม่มีอุปกรณ์", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "เปิด", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "ตั้งค่า URL ใน config", + "label_server_uptime": "เวลาทำงานของเซิร์ฟเวอร์", + "label_merged_info": "รวมเข้ากับวิดเจ็ตข้อมูลเซิร์ฟเวอร์", + "label_with_notes": "ด้วยหมายเหตุ", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "อุปกรณ์ทั้งหมด", + "label_throughput": "Throughput", + "label_active_relays": "รีเลย์ที่ใช้งานอยู่", + "label_total_relayed": "รวมรีเลย์", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "อุปกรณ์กรอง...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "ไม่มีอุปกรณ์ CDAP", + "action_add_widget": "เพิ่มวิดเจ็ต", + "label_merged_server_info": "รวมเข้ากับวิดเจ็ตข้อมูลเซิร์ฟเวอร์", + "wp_images": "Images", + "wp_colors": "สีทึบ", + "wp_custom_color": "สีที่กำหนดเอง", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "ภาพวอลเปเปอร์ไม่ได้ถูกติดตั้งบนเซิร์ฟเวอร์นี้", + "wp_download_hint": "วางภาพ PNG ในไดเร็กทอรี public/wallpapers/ เพื่อเปิดใช้งานการเลือกวอลเปเปอร์", + "widget_calendar": "Calendar", + "widget_process_monitor": "การตรวจสอบกระบวนการ", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "สถิติฐานข้อมูล", + "widget_docker_containers": "Docker คอนเทนเนอร์", + "widget_shell_command": "คำสั่งเชลล์", + "widget_device_map": "แผนที่อุปกรณ์", + "widget_remote_connect": "เชื่อมต่อระยะไกล", + "label_no_online": "ไม่มีอุปกรณ์ออนไลน์", + "label_no_events": "ไม่มีกิจกรรมในวันนี้", + "label_event_title": "ชื่อกิจกรรม:", + "label_no_data": "ไม่มีข้อมูล", + "label_download_speed": "ความเร็วในการดาวน์โหลด", + "label_latency": "Latency", + "label_server": "เซิร์ฟเวอร์", + "label_run_test": "Run Test", + "label_testing": "กำลังทดสอบ...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "ไม่มีภาชนะ", + "label_docker_unavailable": "Docker ไม่พร้อมใช้งาน", + "label_no_command": "ไม่มีการกำหนดค่าคำสั่ง", + "label_no_output": "ยังไม่มีเอาท์พุต", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "บันทึกค่าที่ตั้งล่วงหน้า", + "label_load_preset": "Load Preset", + "label_preset_name": "ชื่อที่ตั้งไว้ล่วงหน้า:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "จัดเรียงอัตโนมัติ", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 คอลัมน์ (เท่ากัน)", + "label_2col_wide": "2 คอลัมน์ (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "กลุ่มวิดเจ็ต", + "ungroup_widgets": "ยกเลิกการจัดกลุ่มวิดเจ็ต", + "group_widgets": "จัดกลุ่มวิดเจ็ตที่เลือก", + "snap_layouts": "สแน็ปเค้าโครง", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "สแน็ปซ้ายบน", + "snap_top_right": "สแน็ปบนขวา", + "snap_bottom_left": "สแน็ปล่างซ้าย", + "snap_bottom_right": "สแนปล่างขวา", + "aero_shake": "เขย่าเพื่อลดขนาดผู้อื่น", + "zone_resize": "ลากเส้นขอบเพื่อปรับขนาดโซน", + "zone_borders": "เส้นขอบโซนที่ลากได้", + "app_drawer": "Applications", + "search_apps": "ค้นหาแอป...", + "edit_shortcuts": "แก้ไขทางลัด", + "widgets": "วิดเจ็ต", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "คลิกที่ใดก็ได้หรือกดปุ่มเพื่อลงชื่อเข้าใช้", + "username_placeholder": "ชื่อผู้ใช้", + "password_placeholder": "รหัสผ่าน", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", + "totp_subtitle": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", + "back_to_login": "กลับสู่การเข้าสู่ระบบ", + "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", + "invalid_credentials": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", + "invalid_code": "รหัสยืนยันไม่ถูกต้อง", + "enter_6_digits": "ใส่ตัวเลขทั้งหมด 6 หลัก", + "network_error": "Network error — check your connection", + "session_expired": "เซสชั่นหมดอายุแล้ว กรุณาเข้าสู่ระบบอีกครั้ง" + }, + "tokens": { + "title": "โทเค็นอุปกรณ์", + "subtitle": "จัดการโทเค็นการลงทะเบียนสำหรับการจัดสรรอุปกรณ์อัตโนมัติ", + "enrollment_mode": "โหมดการลงทะเบียน", + "mode_open": "เปิด", + "mode_open_desc": "อุปกรณ์ใดๆ ก็ตามสามารถลงทะเบียนได้โดยไม่ต้องใช้โทเค็น", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "โทเค็นทั้งหมด", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "โทเค็นการค้นหา...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "สร้างจำนวนมาก", + "create": "สร้างโทเค็น", + "edit": "แก้ไขโทเค็น", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "สร้างแล้ว", + "actions": "Actions", + "name_placeholder": "เช่น ชุดพีซีสำนักงาน", + "max_uses": "Max Uses", + "max_uses_hint": "0 = ไม่จำกัด", + "expires_in": "Expires In", + "no_expiration": "ไม่มีวันหมดอายุ", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "หมายเหตุเพิ่มเติมเกี่ยวกับโทเค็นนี้...", + "count": "Count", + "count_range": "จำนวนโทเค็นที่จะสร้าง (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "สร้างโทเค็นแล้ว", + "tokens_generated": "โทเค็นที่สร้างขึ้น", + "copy_warning": "คัดลอกโทเค็นทันที มันจะไม่แสดงอีก", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "คุณแน่ใจหรือไม่ว่าต้องการเพิกถอนโทเค็นนี้ อุปกรณ์ที่ลงทะเบียนไว้แล้วจะไม่ได้รับผลก��ะทบ", + "revoked_success": "เพิกถอนโทเค็นเรียบร้อยแล้ว", + "no_tokens": "ไม่พบโทเค็น", + "expired": "Expired", + "never": "Never", + "save": "บันทึก", + "cancel": "ยกเลิก", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "ถัดไป", + "prev": "Previous", + "skip": "Skip", + "finish": "เสร็จสิ้น", + "close": "ปิด", + "step_of": "{current} ของ {total}", + "console_sidebar_title": "แถบนำทางด้านข้าง", + "console_sidebar_text": "เข้าถึงโมดูลทั้งหมดได้จากที่นี่ คลิกไอคอนใดก็ได้เพื่อไปยังส่วนนั้น แถบด้านข้างจะปรับให้เข้ากับขนาดหน้าจอของคุณ", + "console_expand_title": "ขยายแถบด้านข้าง", + "console_expand_text": "คลิกที่นี่เพื่อขยายแถบด้านข้างและดูป้ายกำกับแบบเต็มสำหรับรายการนำทางทั้งหมด คลิกอีกครั้งเพื่อยุบ", + "console_search_title": "ค้นหาด่วน", + "console_search_text": "ค้นหาอุปกรณ์ การตั้งค่า หรือการทำงานอย่างรวดเร็ว กด Ctrl+K เพื่อดูแป้นพิมพ์ลัด", + "console_dashboard_title": "แดชบอร์ด", + "console_dashboard_text": "ฮับกลางของคุณแสดงสถานะเซิร์ฟเวอร์ อุปกรณ์ออนไลน์ และการดำเนินการด่วน จับตาดูตัวชี้วัดที่สำคัญได้อย่างรวดเร็ว", + "console_devices_title": "การจัดการอุปกรณ์", + "console_devices_text": "ดู ค้นหา และจัดการอุปกรณ์ที่เชื่อมต่อทั้งหมด กรองตามสถานะ กำหนดแท็ก และกำหนดการตั้งค่าอุปกรณ์แต่ละรายการ", + "console_settings_title": "การตั้งค่า", + "console_settings_text": "กำหนดค่าพฤติกรรมของเซิร์ฟเวอร์ ตัวเลือกความปลอดภัย การสร้างแบรนด์ และการจัดการผู้ใช้ ปรับแต่ง BetterDesk ให้เหมาะกับความต้องการของคุณ", + "console_desktop_title": "โหมดเดสก์ท็อป", + "console_desktop_text": "สลับไปที่โหมดเดสก์ท็อปสำหรับพื้นที่ทำงานแบบหน้าต่างพร้อมวิดเจ็ต เหมาะสำหรับแดชบอร์ดแบบมัลติทาสกิ้งและการตรวจสอบ", + "console_complete_title": "คุณพร้อมแล้ว!", + "console_complete_text": "สำรวจหมวดหมู่แถบด้านข้างเพื่อค้นหาคุณสมบัติทั้งหมด คลิกไอคอนวิธีใช้เมื่อใดก็ได้เพื่อเริ่มคู่มือนี้ใหม่", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "แถบด้านบนแสดงนาฬิกา การควบคุมด่วน และการเข้าถึงลิ้นชักแอป คลิกไอคอนตารางเพื่อเรียกดูแอปทั้งหมด", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "เปิดลิ้นชักแอปเพื่อค้นหาและเปิดใช้ฟังก์ชันคอนโซลใดๆ ในรูปแบบหน้าต่างลอย แอพจัดเรียงตามหมวดหมู่", + "desktop_widgets_title": "แดชบอร์ดวิดเจ็ต", + "desktop_widgets_text": "พื้นที่ทำงานที่ปรับแต่งได้ของคุณ วิดเจ็ตแสดงข้อมูลสดและให้การเข้าถึงคุณสมบัติต่างๆ ได้อย่างรวดเร็ว ลากเพื่อจัดเรียงใหม่", + "desktop_add_widget_title": "เพิ่มวิดเจ็ต", + "desktop_add_widget_text": "คลิกที่นี่เพื่อเรียกดูวิดเจ็ตที่มีอยู่ เลือกจากการตรวจสอบจอแสดงผล รายการอุปกรณ์ บันทึก และอื่นๆ", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "แอพที่เปิดอยู่จะปรากฏที่นี่ คลิกเพื่อโฟกัสหรือย่อหน้าต่าง วางเมาส์เหนือไอคอนเพื่อดูป้ายกำกับแอป", + "desktop_snap_title": "สแน็ปเค้าโครง", + "desktop_snap_text": "ลากหน้าต่างไปที่ขอบหน้าจอเพื่อจัดชิดตำแหน่ง หรือเลื่อนปุ่มขยายใหญ่สุดเพื่อตั้งค่าเค้าโครงล่วงหน้า ลอง Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "แอปจะเปิดในหน้าต่างที่ลากได้และปรับขนาดได้ ย่อเล็กสุด ขยายใหญ่สุด หรือปิดจากแถบชื่อเรื่อง Windows เลเยอร์เหนือวิดเจ็ต", + "desktop_search_title": "ค้นหาด่วน", + "desktop_search_text": "ค้นหาในอุปกรณ์ หน้า และการตั้งค่า กด Ctrl+K ที่ใดก็ได้เพื่อเปิดการค้นหาทันที", + "desktop_complete_title": "โหมดเดสก์ท็อปพร้อมแล้ว!", + "desktop_complete_text": "ลองเปิดแอปจากลิ้นชักและจัดเรียงหน้าต่างไว้เคียงข้างกัน ใช้การตั้งค่าวิดเจ็ตล่วงหน้าสำหรับรูปแบบแดชบอร์ดที่รวดเร็ว", + "devices_folders_title": "โฟลเดอร์อุปกรณ์", + "devices_folders_text": "จัดระเบียบอุปกรณ์เป็นโฟลเดอร์ คลิกโฟลเดอร์เพื่อกรองรายการ คลิกขวาเพื่อเปลี่ยนชื่อหรือลบ", + "devices_search_title": "ค้นหาและกรอง", + "devices_search_text": "ค้นหาตาม ID ชื่อโฮสต์ หรือแพลตฟอร์ม ใช้ยาสถานะเพื่อแสดงเฉพาะออนไลน์ ออฟ���ลน์ หรือทุกอุปกรณ์", + "devices_table_title": "รายการอุปกรณ์", + "devices_table_text": "คลิกแถวอุปกรณ์ใดก็ได้เพื่อดูรายละเอียด ใช้เมนูเคบับทางด้านขวาเพื่อดำเนินการอย่างรวดเร็ว เช่น เชื่อมต่อ แก้ไขแท็ก หรือลบ", + "devices_complete_title": "การจัดการอุปกรณ์พร้อมแล้ว!", + "devices_complete_text": "ลากอุปกรณ์ระหว่างโฟลเดอร์เพื่อจัดระเบียบ คลิกสองครั้งที่อุปกรณ์เพื่อเปิดแผงรายละเอียด", + "settings_tabs_title": "หมวดหมู่การตั้งค่า", + "settings_tabs_text": "นำทางระหว่างส่วนทั่วไป ความปลอดภัย ลักษณะ และการกำหนดค่าอื่น ๆ", + "settings_content_title": "การกำหนดค่า", + "settings_content_text": "แต่ละส่วนประกอบด้วยการตั้งค่าเซิร์ฟเวอร์และคอนโซลเฉพาะ การเปลี่ยนแปลงจะถูกบันทึกเมื่อคุณคลิกบันทึก", + "settings_complete_title": "ภาพรวมการตั้งค่า", + "settings_complete_text": "ตรวจสอบการตั้งค่าความปลอดภัยสำหรับคีย์ 2FA, API และการจัดการผู้ใช้ ไปที่ลักษณะที่ปรากฏเพื่อปรับแต่งรูปลักษณ์คอนโซล", + "help": "ความช่วยเหลือและบทช่วยสอน", + "tour_console": "ทัวร์คอนโซล", + "tour_desktop": "ทัวร์ชมโหมดเดสก์ท็อป", + "tour_devices": "ทัวร์ชมอุปกรณ์", + "tour_settings": "ทัวร์ชมการตั้งค่า", + "reset_all": "รีเซ็ตบทช่วยสอนทั้งหมด", + "tour_remote": "ทัวร์เซสชันระยะไกล", + "tour_organization": "การตั้งค่าองค์กร", + "tour_cdap": "ภาพรวม CDAP", + "tour_chat": "พื้นฐานการแชท", + "remote_toolbar_title": "แถบเครื่องมือระยะไกล", + "remote_toolbar_text": "เข้าถึงส่วนคว��คุมการแสดงผล การซิงค์คลิปบอร์ด ปุ่มพิเศษ และการตั้งค่าคุณภาพจากแถบเครื่องมือ สลับโหมดเต็มหน้าจอด้วย F11", + "remote_canvas_title": "จอแสดงผลระยะไกล", + "remote_canvas_text": "นี่คือหน้าจอระยะไกล คลิกด้านในเพื่อเริ่มควบคุมอุปกรณ์ระยะไกล อินพุตเมาส์และคีย์บอร์ดจะถูกส่งต่อโดยอัตโนมัติ", + "remote_clipboard_title": "การซิงค์คลิปบอร์ด", + "remote_clipboard_text": "คัดลอกและวางข้อความระหว่างคอมพิวเตอร์ของคุณและอุปกรณ์ระยะไกล ใช้ Ctrl+C / Ctrl+V ตามปกติขณะโฟกัสไปที่จอแสดงผลระยะไกล", + "remote_complete_title": "เซสชันระยะไกลพร้อมแล้ว!", + "remote_complete_text": "ใช้ปุ่มแถบเครื่องมือสำหรับปุ่มพิเศษ (Ctrl+Alt+Del, PrintScreen) และการสลับจอภาพ กด Escape หรือคลิก Disconnect เพื่อสิ้นสุดเซสชัน", + "org_overview_title": "องค์กรต่างๆ", + "org_overview_text": "องค์กรให้คุณจัดกลุ่มผู้ใช้ อุปกรณ์ และ���โยบายได้ แต่ละองค์กรมีผู้ดูแลระบบ ผู้ปฏิบัติงาน และการตั้งค่าของตนเอง", + "org_create_title": "สร้างองค์กร", + "org_create_text": "คลิกที่นี่เพื่อสร้างองค์กรใหม่ ระบุชื่อ ตัวบุ้ง และคำอธิบายเพิ่มเติม คุณจะเป็นเจ้าขององค์กรใหม่", + "org_members_title": "จัดการสมาชิก", + "org_members_text": "เชิญผู้ใช้ทางอีเมล กำหนดบทบาท (ผู้ดูแลระบบ ผู้ปฏิบัติงาน ผู้ใช้) และจัดการการเข้าถึง สมาชิกสามารถดูอุปกรณ์ที่กำหนดให้กับองค์กรของตนได้", + "org_devices_title": "กำหนดอุปกรณ์", + "org_devices_text": "เพิ่มอุปกรณ์ให้กับองค์กร อุปกรณ์ที่ได้รับมอบหมายที่นี่จะสืบทอดนโยบายขององค์กรและสมาชิกจะมองเห็นได้", + "org_policies_title": "นโยบายองค์กร", + "org_policies_text": "กำหนดนโยบายความปลอดภัย เช่น ข้อกำหนดรหัสผ่าน การหมดเวลาเซสชัน การบังคับใช้ 2FA และกฎการลงทะเบียนอุปกรณ์สำหรับองค์กร", + "org_complete_title": "การตั้งค่าองค์กรเสร็จสมบูรณ์!", + "org_complete_text": "เชิญทีมของคุณและมอบหมายอุปกรณ์ให้เริ่มใช้การจัดการในขอบเขตองค์กร นโยบายมีผลกับสมาชิกทุกคนโดยอัตโนมัติ", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "ผู้ติดต่อและกลุ่ม", + "chat_contacts_text": "ดูผู้ติดต่อและกลุ่มแชทของคุณ คลิกที่ผู้ติดต่อเพื่อเปิดการสนทนา จุดสีเขียวหมายถึงผู้ใช้ออนไลน์", + "chat_send_title": "ส่งข้อความ", + "chat_send_text": "พิมพ์ข้อความของคุณแล้วกด Enter เพื่อส่ง ข้อความได้รับการเข้ารหัสจากต้นทางถึงปลายทางเมื่อทั้งสองฝ่ายรองรับ E2E", + "chat_file_title": "แชร์ไฟล์", + "chat_file_text": "คลิกไอคอนไฟล์แนบเพื่อแชร์ไฟล์ ไฟล์ถูกเข้ารหัสและสามารถมีขนาดสูงสุด 50 MB", + "chat_complete_title": "แชทพร้อม!", + "chat_complete_text": "สนทนากับโอเปอเรเตอร์และผู้ใช้ปลายทางแบบเรียลไทม์ สร้างกลุ่มเพื่อการสื่อสารในทีม ข้อความทั้งหมดรองรับใบตอบรับการอ่าน", + "disable_tutorials": "ปิดการใช้งานบทช่วยสอน", + "enable_tutorials": "เปิดใช้งานบทช่วยสอน" + }, + "help_request": { + "title": "คำขอความช่วยเหลือ", + "subtitle": "จัดการคำขอความช่วยเหลือที่เข้ามาจากไคลเอนต์เดสก์ท็อป", + "new_request": "คำขอความช่วยเหลือใหม่", + "device": "อุปกรณ์", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "ไม่มีการร้องขอความช่วยเหลือ", + "notification": "ได้รับการร้องขอความช่วยเหลือจาก", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "องค์กรต่างๆ", + "create": "สร้างองค์กร", + "edit": "แก้ไของค์กร", + "detail": "รายละเอียดองค์กร", + "name": "Name", + "slug": "ทาก (ปลอดภัย URL)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "อุปกรณ์", + "invitations": "Invitations", + "settings": "การตั้งค่า", + "add_user": "Add User", + "assign_device": "กำหนดอุปกรณ์", + "create_invitation": "สร้างคำเชิญ", + "delete_confirm": "ลบองค์กรนี้ใช่ไหม การดำเนินการนี้จะลบผู้ใช้ อุปกรณ์ และการตั้งค่าที่เกี่ยวข้องทั้งหมด", + "no_orgs": "ยังไม่มีองค์กร", + "no_orgs_hint": "สร้างองค์กรแรกของคุณเพื่อเริ่มจัดการอุปกรณ์และผู้ใช้", + "connection_policy": "นโยบายการเชื่อมต่อ", + "allow_file_transfer": "อนุญาตให้ถ่ายโอนไฟล์", + "allow_clipboard": "อนุญาตคลิปบอร์ด", + "max_session_duration": "ระยะเวลาเซสชันสูงสุด (นาที)", + "role_owner": "Owner", + "role_admin": "ผู้ดูแลระบบ", + "role_operator": "Operator", + "role_user": "สมาชิก", + "username": "ชื่อผู้ใช้", + "password": "รหัสผ่าน", + "display_name": "ชื่อที่แสดง", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "รหัสอุปกรณ์", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "ผู้ใช้ที่ได้รับมอบหมาย", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "ไม่มีผู้ใช้ในองค์กรนี้", + "no_devices": "ไม่มีอุปกรณ์ที่กำหนดให้กับองค์กรนี้", + "no_invitations": "ไม่มีคำเชิญ", + "user_added": "User added", + "user_removed": "นำผู้ใช้ออกแล้ว", + "user_updated": "อัปเดตบทบาทของผู้ใช้แล้ว", + "device_assigned": "กำหนดอุปกรณ์แล้ว", + "device_unassigned": "ยกเลิกการกำหนดอุปกรณ์แล้ว", + "invitation_created": "สร้างคำเชิญแล้ว", + "settings_saved": "บันทึกการตั้งค่าแล้ว", + "org_deleted": "ลบองค์กรแล้ว", + "confirm_remove_user": "ลบผู้ใช้รายนี้ออกจากองค์กรใช่ไหม", + "confirm_unassign_device": "ยกเลิกการมอบหมายอุปกรณ์นี้จากองค์กรใช่ไหม", + "confirm_delete_org": "ลบองค์กรนี้และข้อมูลที่เกี่ยวข้องทั้งหมดใช่ไหม", + "edit_role": "แก้ไขบทบาท", + "raw_settings": "การตั้งค่าดิบ", + "key": "Key", + "value": "Value", + "save": "บันทึกการตั้งค่า", + "policy_unattended": "อัตโนมัติ (ทันที)", + "policy_attended": "เข้าร่วม (พร้อมการยืนยัน)", + "policy_ask": "Always ask", + "expires_hours": "หมดอายุ (ชั่วโมง)", + "loading_failed": "โหลดข้อมูลองค์กรไม่สำเร็จ", + "name_slug_required": "ต้องระบุชื่อและตัวทาก", + "org_created": "สร้างองค์กรแล้ว", + "org_updated": "อัปเดตองค์กรแล้ว", + "create_new_user": "สร้างใหม่", + "add_existing_user": "เพิ่มที่มีอยู่", + "none_available": "none", + "select_user": "เลือกผู้ใช้", + "org_role": "บทบาทขององค์กร", + "link_user_hint": "ผู้ใช้ที่เลือกจะเชื่อมโยงกับองค์กรนี้โดยใช้ข้อมูลรับรองบัญชีเซิร์ฟเวอร์ของตน", + "no_available_users": "ผู้ใช้เซิร์ฟเวอร์ทั้งหมดเชื่อมโยงกับองค์กรนี้แล้ว", + "user_linked": "ผู้ใช้เชื่อมโยงกับองค์กร" + }, + "chat": { + "e2e_enabled": "เข้ารหัสตั้งแต่ต้นทางถึงปลายทาง", + "e2e_establishing": "การสร้างช่องทางที่ปลอดภัย...", + "e2e_established": "สร้างช่องทางที่ปลอดภัยแล้ว", + "e2e_unsupported": "ไม่รองรับการเข้ารหัส E2E ในเบราว์เซอร์นี้", + "typing_indicator": "กำลังพิมพ์...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "ไฟล์", + "file_too_large": "ไฟล์ใหญ่เกินไป (สูงสุด 50MB)", + "file_encrypted": "การถ่ายโอนไฟล์ที่เข้ารหัส", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "หมุนคีย์ความปลอดภัยแล้ว", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "กลุ่ม", + "no_contacts": "ยังไม่มีการติดต่อ", + "no_groups": "ยังไม่มีกลุ่ม", + "no_messages": "ยังไม่มีข้อความ", + "no_results": "ไม่พบผลลัพธ์", + "select_conversation": "เลือกการสนทนาเพื่อเริ่มแชท", + "type_message": "���ิมพ์ข้อความ...", + "send": "ส่ง", + "attach_file": "แนบไฟล์", + "emoji": "Emoji", + "search_messages": "ค้นหาข้อความ", + "create_group": "สร้างกลุ่ม", + "group_name": "ชื่อกลุ่ม", + "group_members": "สมาชิก", + "cancel": "ยกเลิก", + "create": "สร้าง", + "members": "สมาชิก", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "ค้นหาผู้ติดต่อและข้อความ", + "select_conversation_hint": "เลือกการสนทนาเพื่อดูข้อความ", + "info": "Info", + "group_name_placeholder": "ป้อนชื่อกลุ่ม" + }, + "toast": { + "device_connected": "เชื่อมต่ออุปกรณ์แล้ว", + "device_disconnected": "อุปกรณ์ถูกตัดการเชื่อมต่อ", + "session_started": "เซสชันระยะไกลเริ่มต้นแล้ว", + "session_ended": "เซสชันระยะไกลสิ้นสุดลง", + "file_upload_complete": "การอัพโหลดไฟล์เสร็จสมบูรณ์", + "settings_saved": "บันทึกการตั้งค่าแล้ว", + "error_generic": "เกิดข้อผิดพลาด", + "connection_lost": "การเชื่อมต่อขาดหายไป", + "reconnecting": "กำลังเชื่อมต่อใหม่..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "ยูทิลิตี้ผู้ดูแลระบบและเครื่องมือวินิจฉัย", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "ส่ง", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "ป้อนข้อความ...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "ไปที่เซิร์ฟเวอร์", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "ตรวจสอบความสามารถในการเข้าถึงและเวลาในการตอบสนองของโฮสต์", + "tcp_title": "TCP ตรวจสอบพอร์ต", + "tcp_desc": "ทดสอบการเชื่อมต่อพอร์ต TCP", + "ssl_title": "ตัวตรวจสอบ SSL", + "ssl_desc": "ตรวจสอบรายละเอียดใบรับรอง SSL/TLS", + "http_title": "HTTP ตรวจสุขภาพ", + "http_desc": "ตรวจสอบสถานะตำแหน่งข้อมูล HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "แก้ไขชื่อโฮสต์เป็นที่อ��ู่ IP", + "whois_title": "DNS Records", + "whois_desc": "แบบสอบถาม A, AAAA, MX, TXT, NS บันทึก", + "speed_title": "Speed Test", + "speed_desc": "วัดแบนด์วิธการดาวน์โหลด", + "run_speed_test": "รันการทดสอบความเร็ว", + "wol_title": "Wake-on-LAN", + "wol_desc": "ส่งแพ็คเก็ตเวทย์มนตร์เพื่อปลุกอุปกรณ์", + "wol_sent": "ส่งแพ็คเก็ตเมจิกแล้ว", + "hash_title": "เครื่องกำเนิดแฮช", + "hash_desc": "สร้างแฮชที่เข้ารหัส", + "password_title": "ตัวสร้างรหัสผ่าน", + "password_desc": "สร้างรหัสผ่านแบบสุ่มที่ปลอดภัย", + "jwt_title": "JWT Decoder", + "jwt_desc": "ถอดรหัสและตรวจสอบ JSON Web Token", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "เข้ารหัสหรือถอดรหัสข้อมูล Base64", + "url_title": "URL Encoder", + "url_desc": "เข้ารหัสหรือถอดรหัสส่วนประกอบ URL", + "processes_title": "รายการกระบวนการ", + "processes_desc": "ดูกระบวนการของระบบที่ทำงานอยู่", + "disk_title": "Disk Usage", + "disk_desc": "ดูการใช้งานพาร์ติชันดิสก์", + "db_title": "สถิติฐานข้อมูล", + "db_desc": "ดูสถิติตารางฐานข้อมูล", + "docker_title": "Docker คอนเทนเนอร์", + "docker_desc": "ดูคอนเทนเนอร์ Docker ที่ทำงานอยู่", + "logs_title": "Log Viewer", + "logs_desc": "ดูผลลัพธ์บันทึกล่าสุด", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "ใช้ได้ตั้งแต่", + "valid_to": "ถูกต้องถึง", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "ไม่มีข้อมูล", + "no_docker": "ไม่พบคอนเทนเนอร์ Docker หรือ Docker ไม่พร้อมใช้งาน", + "no_logs": "ไม่มีบรรทัดบันทึกที่พร้อมใช้งาน" + }, + "policies": { + "title": "นโยบายองค์กร", + "subtitle": "จัดการนโยบายความปลอดภัย การเชื่อมต่อ และฟีเจอร์สำหรับองค์กรของคุณ", + "select_org": "องค์กร", + "select_org_placeholder": "เลือกองค์กร...", + "select_org_first": "เลือกองค์กรเพื่อดูบันทึกการตรวจสอบนโยบาย", + "configured": "Configured", + "connection_title": "นโยบายการเชื่อมต่อ", + "connection_desc": "ควบคุมวิธีการสร้างเซสชันระยะไกล", + "connection_mode": "โหมดการเชื่อมต่อ", + "mode_attended": "เข้าร่วม (ต้องได้รับการอนุมัติจากผู้ใช้)", + "mode_unattended": "ไม่ต้องใส่ข้อมูล (อนุญาตเสมอ)", + "mode_ask": "Always Ask", + "max_session": "ระยะเวลาเซส��ันสูงสุด (นาที)", + "idle_lock": "หมดเวลาล็อครอบเดินเบา (นาที)", + "wallpaper_policy": "ภาพพื้นหลังระหว่างเซสชัน", + "wallpaper_show": "Show", + "wallpaper_hide_session": "ซ่อนระหว่างเซสชั่น", + "wallpaper_hide_always": "Always hide", + "features_title": "นโยบาย��ุณลักษณะ", + "features_desc": "เปิดหรือปิดคุณสมบัติเฉพาะสำหรับอุปกรณ์", + "allow_file_transfer": "อนุญาตให้ถ่ายโอนไฟล์", + "allow_clipboard": "อนุญาตให้ซิงค์คลิปบอร์ด", + "allow_audio": "อนุญาตการสตรีมเสียง", + "allow_recording": "อนุญาตให้บันทึกเซสชัน", + "security_title": "นโยบายความปลอดภัย", + "security_desc": "บังคับใช้ข้อกำหนดด้านความปลอดภัยสำหรับอุปกรณ์ขององค์กร", + "require_2fa": "ต้องมี 2FA สำหรับการเข้าถึงแบบอัตโนมัติ", + "password_min_length": "ความยาวรหัสผ่านขั้นต่ำ", + "password_require_special": "ต้องใช้อักขระพิเศษ", + "password_max_age": "รหัสผ่านอายุสูงสุด (วัน 0=ไม่เคย)", + "allowed_operators": "บทบาทของตัวดำเนินการที่อนุญาต (คั่นด้วยเครื่องหมายจุลภาค)", + "network_title": "นโยบายเครือข่าย", + "network_desc": "ควบคุมเซิร์ฟเวอร์รีเลย์และการ���ชื่อมต่อโดยตรง", + "block_direct_p2p": "บล็อกโดยตรง P2P (รีเลย์บังคับ)", + "allowed_relays": "เซิร์ฟเวอร์รีเลย์ที่อนุญาต (หนึ่งรายการต่อบรรทัด)", + "ip_allowlist": "รายการที่อนุญาต IP (CIDR หนึ่งรายการต่อบรรทัด)", + "update_title": "ปรับปรุงนโยบาย", + "update_desc": "ควบคุมการอัพเดตอัตโนมัติและช่องทางการอัพเดต", + "auto_update": "เปิดใช้งานการอัปเดตอัตโนมัติ", + "update_channel": "อัพเดทช่อง", + "audit_title": "การเปลี่ยนแปลงนโยบาย", + "audit_desc": "ประวัติการเปลี่ยนแปลงนโยบายล่าสุด", + "no_audit": "ไม่มีการบันทึกการเปลี่ยนแปลงนโยบาย", + "save_success": "บันทึกนโยบายเรียบร้อยแล้ว", + "save_failed": "ไม่สามารถบันทึกนโยบาย", + "load_failed": "โหลดนโยบายไม่สำเร็จ", + "block_direct_p2p_hint": "ใช้กับอุปกรณ์ในองค์กรนี้ ค่าเริ่มต้นทั่วโลกอยู่ใน การตั้งค่า → กลยุทธ์การเชื่อมต่อ" + }, + "attestation": { + "title": "การรับรองอุปกรณ์", + "subtitle": "ตรวจสอบการยืนยันตัวตนอุปกรณ์และลายนิ้วมือของฮาร์ดแวร์", + "verified": "Verified", + "pending": "Pending", + "failed": "ล้มเหลว", + "device_list": "บันทึกการรับรองอุปกรณ์", + "device_list_desc": "ลายนิ้วมือของฮาร์ดแวร์และสถานะการตรวจสอบตัวตน", + "col_device": "รหัสอุปกรณ์", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "ไม่พบบันทึกการรับรอง", + "verify_success": "อุปกรณ์ทำเครื่องหมายว่าได้รับการยืนยันแล้ว", + "verify_failed": "ไม่สามารถยืนยันอุปกรณ์ได้", + "revoke_success": "ใบรับรองอุปกรณ์ถูกเพิกถอนแล้ว", + "revoke_failed": "ไม่สามารถเพิกถอนการรับรองได้" + }, + "fleet": { + "title": "การจัดการยานพาหนะ", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "ตัวสร้างเวิร์กโฟลว์", + "tab_compliance": "Compliance", + "res_title": "การทำแผนที่ทรัพยากร", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "ไดรฟ์เครือข่าย", + "res_type_dns": "เซิร์ฟเวอร์ DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "เพิ่มทรัพยากร", + "res_name": "ชื่อทรัพยากร", + "res_type": "Type", + "res_address": "ที่อยู่/เส้นทาง", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "องค์กร", + "res_scope_group": "กลุ่ม", + "res_scope_device": "อุปกรณ์", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "ไม่พบทรัพยากร คลิก 'เพิ่มทรัพยากร' เพื่อสร้าง", + "res_confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการ���บทรัพยากรนี้", + "task_title": "ตัวกำหนดเวลางาน", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "ล้มเหลว", + "task_search": "Search tasks…", + "task_create": "สร้างงาน", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "อัปเดต", + "task_type_restart": "รีสตาร์ท", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "รหัสอุปกรณ์หรือชื่อกลุ่ม คั่นด้วยเครื่องหมายจุลภาค", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "ค่ากำหนดการ", + "task_script": "สคริปต์/คำสั่ง", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "ไม่พบงาน คลิก 'สร้างงาน' เพื่อเริ���มต้น", + "task_confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการลบงานนี้", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "เครื่องมือสร้างเวิร์กโฟลว์แบบภาพ", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "บันทึก", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "เลือกโหนดเพื่อแก้ไขคุณสมบัติ", + "builder_node_trigger_manual": "ทริกเกอร์แบบแมนนวล", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "ทริกเกอร์เหตุการณ์", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "รีสตาร์ท Svc", + "builder_node_action_file_deploy": "ปรับใช้ไฟล์", + "builder_node_action_message": "ส่งข้อความ", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "ส่งการแจ้งเตือน", + "builder_node_result_chain": "เวิร์กโฟลว์แบบลูกโซ่", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "ชื่อเวิร์กโฟลว์:", + "comp_title": "การปฏิบัติตามข้อกำหนดของซอฟต์แวร์", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "อุปกรณ์", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "เรียกใช้การแก้ไขอัตโนมัติในอุปกรณ์นี้ไหม", + "comp_no_data": "ไม่มีข้อมูลการปฏิบัติตามข้อกำหนด เรียกใช้การสแกนเพื่อเริ่มต้น", + "save": "บันทึก", + "cancel": "ยกเลิก", + "close": "ปิด", + "edit": "แก้ไข", + "delete": "ลบ", + "actions": "Actions", + "all_orgs": "ทุกองค์กร", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "ไดรฟ์เครือข่าย", + "type_dns": "เซิร์ฟเวอร์ DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "เพิ่มทรัพยากร", + "edit_resource": "แก้ไขทรัพยากร", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "ที่อยู่/เส้นทาง", + "scope_org": "องค์กร", + "scope_group": "กลุ่ม", + "scope_device": "อุปกรณ์", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้?", + "all_statuses": "สถานะทั้งหมด", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "ล้มเหลว", + "search_tasks": "Search tasks�", + "create_task": "สร้างงาน", + "edit_task": "แก้ไขงาน", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "การปรับใช้ไฟล์", + "task_type_registry": "Registry", + "target_devices": "อุปกรณ์เป้าหมาย", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "สคริปต์/คำสั่ง", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "กำลังโหลด", + "no_output": "ไม่มีเอาต์พุต", + "error_loading": "เกิดข้อผิดพลาดในการโหลดข้อมูล", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "ทริกเกอร์แบบแมนนวล", + "node_schedule": "Schedule", + "node_event": "ทริกเกอร์เหตุการณ์", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "รีสตาร์ท Svc", + "node_file_deploy": "ปรับใช้ไฟล์", + "node_send_message": "ส่งข้อความ", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "ส่งการแจ้งเตือน", + "node_chain": "เวิร์กโฟลว์แบบลูกโซ่", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "ทุกองค์กร", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "อุปกรณ์", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "เรียกใช้การแก้ไขอัตโนมัติในอุปกรณ์นี้ไหม" + }, + "scaling": { + "title": "การปรับขนาดและการจัดการรีเลย์", + "tab_overview": "ภาพรวม", + "tab_relays": "Relay Nodes", + "tab_rules": "กฎการมอบหมาย", + "tab_capacity": "การวางแผนกำลังการผลิต", + "arch_title": "สถาปัตยกรรมเครือข่าย", + "arch_loading": "กำลังโหลดไดอะแกรมสถาปัตยกรรม...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "อุปกรณ์ทั้งหมด", + "stat_active_sessions": "เซสชันที่ใช้งานอยู่", + "stat_bandwidth": "แบนด์วิธรวม", + "relay_health": "รีเลย์สุขภาพ", + "no_relays": "ไม่มีการกำหนดค่าโหนดรีเลย์ เพิ่มโหนดรีเลย์แรกของคุณเพื่อกระจายโหลด", + "relay_search": "ค้นหารีเลย์...", + "relay_add": "เพิ่มโหนดรีเลย์", + "relay_edit": "แก้ไขโหนดรีเลย์", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "อุปกรณ์", + "col_sessions": "เซสชัน", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "รีเลย์เป้าหมาย", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "เปิดใช้งานแล้ว", + "status_disabled": "ปิดการใช้งาน", + "confirm_delete_relay": "คุณแน่ใจหรือไม่ว่าต้องการลบโหนดรีเลย์นี้", + "confirm_delete_rule": "คุณแน่ใจหรือไม่ว่าต้องการลบกฎการมอบหมายนี้", + "rules_hint": "กฎการกำหนดจะกำหนดว่าเซิร์ฟเวอร์รีเลย์ใดที่จัดการกลุ่มอุปกรณ์เฉพาะ กฎจะได้รับการประเมินตามลำดับความสำคัญ (ต่ำสุดก่อน)", + "rule_add": "Add Rule", + "rule_edit": "แก้ไขกฎ", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "กลุ่มอุปกรณ์", + "match_tag": "แท็กอุปกรณ์", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "เซิร์ฟเวอร์หลัก", + "fallback_nearest": "รีเลย์ที่ใกล้ที่สุด", + "relay_max_sessions": "เซสชันสูงสุด", + "relay_max_bandwidth": "แบนด์วิธสูงสุด (Mbps)", + "cap_tiers": "ระดับความจุ", + "cap_loading": "กำลังโหลดข้อมูลความจุ...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "ไม่มีข้อเสนอแนะ", + "cap_planning": "การวางแผนโครงสร้างพื้นฐาน", + "cap_config": "การกำหนดค่า", + "cap_max_devices": "อุปกรณ์แม็กซ์", + "cap_max_sessions": "เซสชันสูงสุด", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "ความจุของอุปกรณ์", + "cap_tier_sessions": "ความจุเซสชัน", + "cap_tier_bandwidth": "ความจุแบนด์วิธ", + "cap_single_sqlite": "เซิร์ฟเวอร์เดี่ยว (SQLite)", + "cap_single_pg": "เซิร์ฟเวอร์เดี่ยว (PostgreSQL)", + "cap_master_3": "มาสเตอร์ + 3 รีเลย์", + "cap_master_10": "มาสเตอร์ + 10 รีเลย์", + "rec_no_relays": "ไม่มีการกำหนดค่าโหนดรีเลย์ พิจารณาเพิ่มโหนดรีเลย์เพื่อประสิทธิภาพที่ดีขึ้นและความซ้ำซ้อน", + "rec_devices_high": "การใช้งานอุปกรณ์อยู่ในระดับสูง พิจารณาเพิ่มโหนดรีเลย์เพิ่มเติมเพื่อกระจายโหลด", + "rec_sessions_high": "ความจุเซสชันใกล้จะถึงขีดจำกัดแล้ว พิจารณาอัปเกรดโครงสร้างพื้นฐานรีเลย์", + "rec_cpu_high": "โหนดรีเลย์บางตัวรายงานการใช้งาน CPU สูง พิจารณาการปรับสมดุลโหลดหรือการอัพเกรดความจุ", + "rec_all_good": "ระบบทั้งหมดทำงานภายใต้พารามิเตอร์ปกติ ไม่จำเป็นต้องดำเนินการใดๆ", + "save": "บันทึก", + "cancel": "ยกเลิก", + "edit": "แก้ไข", + "delete": "ลบ", + "close": "ปิด", + "no_rules": "ไม่มีกฎการมอบหมาย", + "relays_info_banner": "รายการนี้เป็นข้อมูล เซิร์ฟเวอร์รีเลย์ที่ไคลเอ็นต์ใช้จริงได้รับการกำหนดค่าผ่านตัวแปรสภาพแวดล้อม RELAY_SERVERS บนเซิร์ฟเวอร์ BetterDesk", + "relay_name_address_required": "ต้องระบุชื่อและที่อยู่", + "relay_save_failed": "ไม่สามารถบันทึกโหนดรีเลย์", + "relay_delete_failed": "ไม่สามารถลบโหนดรีเลย์", + "relay_saved": "บันทึกโหนดรีเลย์แล้ว", + "relay_deleted": "ลบโหนดรีเลย์แล้ว", + "rule_name_value_required": "ต้องระบุชื่อกฎและค่าการจับคู่", + "rule_save_failed": "บันทึกกฎไม่สำเร็จ", + "rule_delete_failed": "ลบกฎไม่สำเร็จ", + "rule_saved": "บันทึกกฎแล้ว", + "rule_deleted": "ลบกฎแล้ว" + }, + "cross_platform": { + "title": "ความเข้ากันได้ข้ามแพลตฟอร์ม", + "tab_matrix": "เมทริกซ์ความเข้ากันได้", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "เมทริกซ์การสนับสนุนคุณสมบัติในทุกแพลตฟอร์มที่รองรับ สีเขียว = รองรับเต็มที่ สีเหลือง = บางส่วน สีเทา = ไม่พร้อมใช้งาน สีน้ำเงิน = วางแผนไว้", + "col_feature": "Feature", + "legend_full": "การสนับสนุนอย่างเต็มที่", + "legend_partial": "การสนับสนุนบางส่วน", + "legend_none": "ไม่สามารถใช้ได้", + "legend_planned": "Planned", + "platform_breakdown": "พังทลายของแพลตฟอร์ม", + "arch_breakdown": "รายละเอียดทางสถาป��ตยกรรม", + "version_breakdown": "รายละเอียดเวอร์ชัน", + "summary": "Summary", + "total_devices": "อุปกรณ์ทั้งหมด", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "เวอร์ชันไคลเอ็นต์", + "no_devices": "ยังไม่มีอุปกรณ์ที่ลงทะเบียน", + "protocols_hint": "การเจรจาต่อรองความสามารถขอ���โปรโตคอลทำให้ลูกค้าแต่ละรายได้รับเฉพาะคุณสมบัติที่รองรับเท่านั้น เซิร์ฟเวอร์จะปรับพฤติกรรมตามความสามารถที่รายงาน", + "capability_negotiation": "การเจรจาต่อรองความสามารถ", + "codec_support": "รองรับ Codec (อุปกรณ์ออนไลน์)", + "feature_support": "การสนับสนุนคุณสมบัติ (อุปกรณ์ออนไลน์)", + "no_codec_data": "ไม่มีข้อมูลตัวแปลงสัญญาณจากอุปกรณ์ออนไลน์", + "no_feature_data": "ไม่มีข้อมูลคุณสมบัติจากอุปกรณ์ออนไลน์", + "protobuf_schema": "สคีมา Protobuf ความสามารถของไคลเอ็นต์", + "diagram_client": "Client", + "diagram_server": "เซิร์ฟเวอร์ BetterDesk", + "diagram_peer": "เพียร์ระยะไกล", + "limitations_hint": "แต่ละแพลตฟอร์มมีข้อจำกัดเฉพาะที่ส่งผลต่อฟีเจอร์ที่ใช้งานได้ ตรวจสอบข้อจำกัดเหล่านี้เมื่อวางแผนการปรับใช้", + "feat_desktop_client": "ไคลเอนต์เดสก์ท็อป", + "feat_background_agent": "ตัวแทนเบื้องหลัง", + "feat_remote_target": "เป้าหมายระยะไกล", + "feat_screen_capture": "การจับภาพหน้าจอ", + "feat_input_injection": "การฉีดเข้า", + "feat_file_transfer": "การถ่ายโอนไฟล์", + "feat_clipboard_sync": "การซิงค์คลิปบอร์ด", + "feat_audio_streaming": "การสตรีมเสียง", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "การยกระดับ UAC ที่จำเป็นสำหรับการติดตั้งบริการและการฉีดอินพุตบนเดสก์ท็อปที่ปลอดภัย", + "limit_win_service": "ทำงานเป็นบริการ NSSM; ต้องใช้สิทธิ์ผู้ดูแลระบบในการติดตั้ง", + "limit_win_firewall": "กฎไฟร์วอลล์ Windows ต้องอน��ญาตพอร์ต 21115-21119 สำหรับการเชื่อมต่อรีเลย์", + "limit_linux_wayland": "ผู้แต่ง Wayland จำกัด การจับภาพหน้าจอแบบเป็นโปรแกรม ต้องมีพอร์ทัล PipeWire API", + "limit_linux_pipewire": "การจับเสียงต้องใช้ PipeWire PulseAudio ทางเลือกสำรองใช้ได้แต่มีข้อจำกัด", + "limit_linux_arm": "มี ARM64 บิวด์ให้เลือก; ตัวแปลงสัญญาณบางตัวอาจใช้การถอดรหัสซอฟต์แวร์ (ช้ากว่า)", + "limit_mac_screen": "ต้องได้รับอนุญาตในการบันทึกหน้าจอในการตั้งค่าระบบ > ความเป็นส่วนตัวและความปลอดภัย", + "limit_mac_signing": "ตัวแทนจะต้องลงนามด้วย Apple Developer ID เพื่อการจัดจำหน่าย", + "limit_mac_notarize": "การรับรองเอกสารที่จำเป็นสำหรับ macOS Gatekeeper (การจัดจำหน่ายที่ไม่ใช่ App Store)", + "limit_android_projection": "MediaProjection API ต้องได้รับความยินยอมจากผู้ใช้สำหรับการจับภาพหน้าจอแต่ละครั้ง", + "limit_android_accessibility": "การป้อนข้อมูลจำเป็นต้องมี AccessibilityService ถูกจำกัดใน Android 14+", + "limit_android_battery": "บริการพื้นหลังถูกจำกัดโดยโหมด Doze อาจต้องมีการยกเว้นการเพิ่มประสิทธิภาพแบตเตอรี่", + "limit_ios_capture": "Apple ห้ามไม่ให้จับภาพหน้าจอพื้นหลัง รองรับโหมดผู้ดูเท่านั้น", + "limit_ios_input": "ไม่อนุญาตให้ฉีดอินพุต การดูจากระยะไกลและการแชทเท่านั้น", + "limit_ios_appstore": "จัดจำหน่ายผ่าน App Store เท่านั้น TestFlight สำหรับการทดสอบเบต้า", + "limit_web_https": "WebCodecs API และ WebRTC ต้องใช้ HTTPS; HTTP กลับไปเป็น JMuxer (ตัวแปลงสัญญาณจำกัด)", + "limit_web_codec": "การสนับสนุน Codec ขึ้นอยู่กับเบราว์เซอร์ H.264 รองรับอย่างกว้างขวาง VP9/AV1 จะแตกต่างกันไป", + "limit_web_performance": "ประสิทธิภาพถูกจำกัดโดยแซนด์บ็อกซ์ของเบราว์เซอร์ ไม่มีการเร่งด้วยฮาร์ดแวร์โดยตรง", + "limit_chrome_crostini": "การสนับสนุนตัวแทนเต็มรูปแบบภายในคอนเทนเนอร์ Crostini Linux เท่านั้น", + "limit_chrome_pwa": "โหมด PWA มีคุณสมบัติเฉพาะบนเว็บเท่านั้น ไม่มีความสามารถของตัวแทนดั้งเดิม", + "limit_chrome_input": "ไม่รองรับการป้อนข้อมูลภายนอกคอนเทนเนอร์ Crostini", + "feat_session_recording": "บันทึกเซสชัน", + "feat_multi_monitor": "หลายจอภาพ", + "feat_unattended_access": "การเข้าถึงแบบไม่มีผู้ดูแล", + "limit_win_virtual_account": "บริการรันภายใต้ virtual account ที่แยกออกมาแทน LocalSystem เส้นทาง log ที่กำหนดเองอาจต้องปรับ ACL", + "limit_linux_unprivileged": "บริการรันในบัญชี 'betterdesk' ที่ไม่มีสิทธิพิเศษพร้อม systemd hardening (NoNewPrivileges, ProtectSystem=strict)" + }, + "security_audit": { + "title": "การตรวจสอบความปลอดภัย", + "tab_overview": "ภาพรวม", + "tab_events": "เหตุการณ์การตรวจสอบ", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "คะแนนความปลอดภัย", + "failed_logins": "การเข้าสู่ระบบล้มเหลว (24 ชม.)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "กุญแจเก่า (>90d)", + "security_checks": "การตรวจสอบความปลอดภัย", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket ปลอดภัย", + "enabled": "เปิดใช้งานแล้ว", + "disabled": "ปิดการใช้งาน", + "all_events": "All Events", + "event_login_failed": "การเข้าสู่ระบบล้มเหลว", + "event_login_success": "เข้าสู่ระบบสำเร็จ", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "การกำหนดค่ามีการเปลี่ยนแปลง", + "event_key_created": "สร้างคีย์แล้ว", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "ไม่พบกิจกรรมการตรวจสอบ", + "hardening_hint": "ลำดับความสำคัญของการรักษาความปลอดภัยที่เข้มงวดขึ้นสำหรับการปรับใช้ BetterDesk ของคุณ สินค้าเรียงลำดับตามความรุนแรง", + "no_hardening": "ไม่มีรายการชุบแข็งให้ใช้งาน", + "vuln_hint": "ผลการสแกนช่องโหว่ในการพึ่งพา เรียกใช้การตรวจสอบ npm เป็นประจำเพื่อรักษาการขึ้นต่อกันให้ปลอดภัย", + "no_vulns": "ไม่พบช่องโหว่ การพึ่งพาของคุณมีความปลอดภัย" + }, + "languages": { + "title": "การจัดการภาษา", + "total_languages": "ภาษาทั้งหมด", + "fully_translated": "แปลครบแล้ว", + "needs_review": "ต้องการการตรวจสอบ", + "reference_keys": "คีย์อ้างอิง", + "no_languages": "ไม่พ��ไฟล์ภาษา", + "badge_reference": "Reference", + "badge_review": "ต้องการการตรวจสอบ", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "ดูที่หายไป", + "fix_missing": "Fix Missing", + "missing_keys_for": "กุญแจที่หายไปสำหรับ", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "และ {n} เพิ่มเติม...", + "all_keys_present": "มีกุญแจทั้งหมดอยู่!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "ต้องแปลคีย์ที่ขาดหายใน {code} ด้วยตนเอง", + "no_fix_needed": "ไม่มีคีย์ที่หายไปให้แก้ไข" + }, + "resource_control": { + "title": "การควบคุมทรัพยากร", + "tab_overview": "ภาพรวม", + "tab_usb": "USB Control", + "tab_optical": "ออปติคัลไดรฟ์", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "โควต้าทรัพยากร", + "compliance_by_category": "การปฏิบัติตามตามหมวดหมู่", + "device_compliance": "การปฏิบัติตามข้อกำหนดของอุปกรณ์", + "search_devices": "ค้นหาอุปกรณ์...", + "col_device": "อุปกรณ์", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "อุปกรณ์ทั้งหมด", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "อัตราการปฏิบัติตามข้อกำหนด", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "กำหนดค่า", + "no_devices": "ไม่พบอุปกรณ์", + "usb_title": "USB การควบคุมพอร์ต", + "usb_hint": "ควบคุมการเข้าถึงอุปกรณ์จัดเก็บข้อมูล USB สำหรับอุปกรณ์ที่เลือกหรือน��ยบายเริ่มต้นทั่วทั้งองค์กร", + "usb_storage_policy": "นโยบายการจัดเก็บ USB", + "usb_whitelist": "อุปกรณ์ที่อนุญาตพิเศษ (หนึ่งรายการต่อบรรทัด)", + "usb_whitelist_hint": "VID:PID (เช่น 0781:5583)", + "usb_audit_log": "บันทึกการเชื่อมต่ออุปกรณ์ USB", + "optical_title": "การควบคุมออปติคัลไดรฟ์", + "optical_hint": "ควบคุมการเข้าถึงไดรฟ์ซีดี/ดีวีดี/บลูเรย์สำหรับอุปกรณ์ที่เลือก", + "optical_policy": "นโยบายออปติคัลไดรฟ์", + "optical_audit_log": "บันทึกการเข้าถึงออปติคัลไดรฟ์", + "monitors_title": "ติดตามการจัดการ", + "monitors_hint": "กำหนดการตั้งค่าจอภาพ รวมถึงจำนวนสูงสุด การบังคับใช้ความละเอียด ความสว่าง และตารางพลังงาน", + "monitors_max_count": "จอภาพสูงสุด (0 = ไม่จำกัด)", + "monitors_max_hint": "0 หมายถึงไม่มีขีดจำกัด", + "monitors_resolution": "ความละเอียดสูงสุด", + "monitors_brightness": "ขีดจำกัดความสว่าง", + "monitors_power_schedule": "ตารางการใช้พลังงาน", + "monitors_power_hint": "เช่น ปิด:22:00-06:00 น", + "disks_title": "การควบคุมการเข้าถึงดิสก์", + "disks_hint": "กำหนดค่านโยบายการเข้าถึงดิสก์ รวมถึงโหมดอ่านอย่างเดียว การบังคับใช้การเข้ารหัส และการมองเห็นพาร์ติชัน", + "disks_readonly": "บังคับโหมดอ่านอย่างเดียว", + "disks_encryption": "ต้องมีการเข้ารหัส (BitLocker/LUKS)", + "disks_smart": "เปิดใช้งาน S.M.A.R.T. การตรวจสอบ", + "disks_hidden": "พาร์ติชันที่ซ่อนอยู่", + "disks_hidden_hint": "อักษรระบุไดรฟ์หรือจุดต่อเชื่อมที่คั่นด้วยเครื่องหมายจุลภาค", + "quotas_title": "โควต้าทรัพยากร", + "quotas_hint": "ตั้งค่า CPU, RAM, แบนด์วิธ และโควต้าดิสก์ต่อผู้ใช้สำหรับอุปกรณ์ที่เลือก", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "ขีดจำกัดแบนด์วิธ (Mbps)", + "quotas_bandwidth_hint": "0 = ไม่จำกัด", + "quotas_disk_quota": "โควต้าดิสก์ (GB)", + "quotas_disk_hint": "0 = ไม่จำกัด", + "quotas_process_whitelist": "ดำเนินการ Whitelist (หนึ่งรายการต่อบรรทัด)", + "quotas_process_hint": "เช่น chrome.exe, รหัส.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "รายการที่อนุญาตเท่านั้น", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "อัพเดตซอฟต์แวร์", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "เวอร์ชันที่ติดตั้ง", + "latest_version": "Latest version", + "status": "Status", + "check_now": "ตรวจสอบการอัปเดต", + "checking": "Checking…", + "up_to_date": "ถึงวันที่", + "update_available": "อัปเดตพร้อมใช้งาน", + "changelog": "Release Notes", + "no_changelog": "ไม่มีบันทึกประจำรุ่น", + "files_changed": "ไฟล์มีการเปลี่ยนแปลง", + "files": "ไฟล์", + "changes_unavailable": "ไม่สามารถโหลดรายการเปลี่ยนแปลงไฟล์ได้ คุณยังคงสามารถติดตั้งการอัปเดตได้", + "create_backup": "สร้างการสำรองข้อมูลก่อนที่จะอัปเดต", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "กำลังติดตั้งการอัปเดต...", + "creating_backup": "กำลังสร้างข้อมูลส��รอง...", + "downloading": "กำลังดาวน์โหลดไฟล์...", + "install_success": "ติดตั้งการอัปเดตสำเร็จแล้ว คอนโซลกำลังรีสตาร์ท...", + "install_failed": "การติดตั้งการอัปเดตล้มเหลว", + "restarting": "กำลังรอคอนโซลรีสตาร์ท...", + "restart_complete": "คอนโซลรีสตาร์ทสำเร็จ", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "ไม่ได้เลือกเวอร์ชันอัปเดต ตรวจสอบการอัปเดตก่อน", + "backups_title": "อัปเดตข้อมูลสำ���อง", + "backups_desc": "การสำรองข้อมูลล่วงหน้าที่สร้างขึ้นโดยอัตโนมัติก่อนการอัปเดตแต่ละครั้ง", + "no_backups": "ไม่พบข้อมูลสำรองการอัปเดต", + "restore": "Restore", + "restore_confirm": "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนจากข้อมูลสำรองนี้ ไฟล์ที่เปลี่ยนแปลงจะถูกเขียนทับ", + "restore_success": "กู้คืนข้อมูลสำรองเรียบร้อยแล้ว คอนโซลกำลังรีสตาร์ท...", + "baseline_set": "ชุดพื้นฐาน", + "commits_behind": "กระทำการอยู่เบื้องหลัง", + "total_files": "รวมไฟล์", + "applied": "Applied", + "failed": "ล้มเหลว", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "ไปที่เซิร์ฟเวอร์", + "component_agent": "Agent", + "component_scripts": "สคริปต์และ Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "กำลังตรวจสอบไป...", + "go_not_found": "ไปไม่ได้ติดตั้ง", + "go_check_failed": "ไม่สามารถตร���จสอบความพร้อมใช้งานของ Go ได้", + "server_building": "กำลังรวบรวม Go server… การดำเนินการนี้อาจใช้เวลาสักครู่", + "server_built": "คอมไพล์เซิร์ฟเวอร์ไบนารีแล้ว", + "server_build_failed": "การรวบรวมเซิร์ฟเวอร์ล้มเหลว", + "server_deployed": "ไบนารีเซิร์ฟเวอร์ปรับใช้แล้ว", + "server_deploy_failed": "การปรับใช้เซิร์ฟเวอร์ล้มเหลว", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "กำลังดาวน์โหลดแหล่งที่มาของเซิร์ฟเวอร์...", + "delete": "ลบ", + "delete_confirm": "ลบข้อมูลสำรอง {name} อย่างถาวรหรือไม่ สิ่งนี้ไม่สามารถยกเลิกได้", + "delete_success": "ลบข้อมูลสำรองแล้ว", + "delete_failed": "ลบข้อมูลสำรองไม่สำเร็จ", + "retention_label": "เก็บข้อมูลสำรองล่าสุดไว้ N", + "retention_hint": "ข้อมูลสำรองที่เก่ากว่าจะถูกลบโดยอัตโนมัติหลังจากการอัพเดตแต่ละครั้ง ใช้ 0 เพื่อเก็บข้อมูลสำรองทั้งหมด", + "retention_saved": "บันทึกการตั้งค่าการเก็บรักษาแล้ว", + "retention_invalid": "การเก็บรักษาต้องเป็นจำนวนเต็มระหว่าง 0 ถึง 1,000", + "retention_required_for_prune": "ตั้งค่าการเก็บรักษาที่มากกว่า 0 ก่อน", + "prune_now": "Apply now", + "prune_confirm": "เก็บเฉพาะข้อมูลสำรองล่าสุดของ {n} แล้วลบส่วนที่เหลือออกหรือไม่", + "prune_done": "ตัดการสำรองข้อมูล {n} แล้ว", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "วิธีการอัพเดต", + "strategy_download": "ดาวน์โหลดไบนารีที่สร้างไว้ล่วงหน้า", + "strategy_compile": "เรียบเรียงจากแหล่งที่มา", + "both_available": "ดาวน์โหลดและคอมไพล์", + "download_available": "ดาวน์โหลดได้", + "no_method": "ไม่มีวิธีการอัพเดต", + "no_release": "No release", + "available": "มีจำหน่าย", + "server_downloading": "กำลังดาวน์โหลดไบนารีเซิร์ฟเวอร์...", + "server_downloaded": "ดาวน์โหลดไบนารีเซิร์ฟเวอร์แล้ว", + "server_download_failed": "การดาวน์โหลดไบนารีของเซิร์ฟเวอร์ล้มเหลว", + "server_download_note": "ไบนารีที่สร้างไว้ล่วงหน้าจะถูกดาวน์โหลดจาก GitHub Releases โดยปกติจะใช้เวลาไม่ถึงหนึ่งนาที", + "install_go_hint": "ติดตั้ง Go จาก https://go.dev/dl/ เพื่อเปิดใช้งานการคอมไพล์ หรือเผยแพร่รีลีสด้วยไบนารีที่สร้างไว้ล่วงหน้า", + "strategy_install_go": "ติดตั้ง Go และคอมไพล์อัตโนมัติ", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "พร้อมสร้างใหม่อัตโนมัติแล้ว", + "toolchain_ready": "ติดตั้ง Toolchain แล้ว", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "กำลังดาวน์โหลด Go toolchain...", + "toolchain_failed": "การติดตั้ง toolchain ล้มเหลว", + "modal_title": "กำลังติดตั้งการอัปเดต", + "modal_done_title": "การอัปเดตเสร���จสมบูรณ์", + "modal_close": "ปิด", + "modal_reload_now": "โหลดคอนโซลอีกครั้ง", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "ไฟล์คอนโซล", + "phase_server": "ขั้นตอนเซิร์ฟเวอร์", + "phase_restart": "รีสตาร์ท", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "ข้ามการสำรองข้อมูล (ตามตัวเลือกของผู้ใช้)", + "server_skipped": "Go server ข้ามไป", + "server_not_selected": "Go server not selected", + "server_processing": "กำลังประมวลผลการอัปเดต Go server...", + "no_restart_needed": "ไม่จำเป็นต้องรีสตาร์ท", + "complete": "ใช้การอัปเดตแล้ว", + "complete_summary": "ใช้การอัปเดตสำเร็จแล้ว", + "complete_with_errors": "การอัปเดตเสร็จสิ้นแล้ว แต่บางขั้นตอนล้มเหลว ดูรายละเอียดด้านล่าง", + "modal_done_with_errors_title": "การอัปเดตเสร็จสิ้นโดยมีข้อผิดพลาด", + "console_will_restart": "กระบวนการคอนโซลจะรีสตาร์ททันที...", + "restart_complete_msg": "คอนโซลรีสตาร์ทเสร็จแล้ว คลิกโหลดซ้ำเพื่อโหลดเวอร์ชันใหม่ หน้าเว็บจะโหลดซ้ำโดยอัตโนมัติใน 8 วินาที", + "refresh_recommended": "เนื้อหาคงที่มีการเปลี่ยนแปลง — โหลดหน้าซ้ำเพื่อดู UI ใหม่", + "confirm_title": "ใช้การอัปเดต", + "confirm_with_backup": "ข้อมูลสำรองล่วงหน้าจะถูกสร้างขึ้นโดยอัตโนมัติ", + "confirm_no_backup": "จะไม่มีการสร้างการสำรองข้อมูล (โปรดดำเนินการด้วยความเสี่ยงของคุณเอง)", + "server_stale_title": "ไบนารีของเซิร์ฟเวอร์ล้าสมัย", + "server_stale_desc": "ซอร์ส Go server ได้รับการอัพเดตแล้ว แต่ไบนารี่ที่กำลังรันอยู่ไม่ได้ถูกสร้างใหม่ สร้างใหม่ทันทีเพื่อใช้การอัปเดตความปลอดภัยและไลบรารี", + "rebuild_server": "สร้างไบนารีเซิร์ฟเวอร์ใหม่", + "rebuilding_server": "กำลังสร้างใหม่...", + "rebuild_server_success": "ไบนารีของเซิร์ฟเวอร์สร้างใหม่และรีสตาร์ท", + "rebuild_server_failed": "การสร้างไบนารีของเซิร์ฟเวอร์ใหม่ล้มเหลว" + }, + "permissions": { + "title": "สิทธิ์", + "subtitle": "จัดการสิทธิ์ตามบทบาทและการแทนที่แบบกำหนดเอง", + "info_title": "สิทธิ์ทำงานอย่างไร", + "info_desc": "แต่ละบทบาทมีสิทธิ์เริ่มต้น คุณสามารถเพิ่มหรือลบสิทธิ์แต่ละรายการต่อบทบาทได้โดยการสลับสิทธิ์ด้านล่าง การแทนที่แบบกำหนดเองจะถูกไฮไลต์ไว้และสามารถเปลี่ยนกลับเป็นค่าเริ่มต้นได้ตลอดเวลา", + "select_role": "เลือกบทบาท", + "select_role_placeholder": "เลือกบทบาท...", + "reset_overrides": "รีเซ็ตการแทนที่ทั้งหมด", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "ระดับเซิร์ฟเวอร์", + "custom": "Custom", + "default": "Default", + "revert": "เปลี่ยนกลับเป็นค่าเริ่มต้น", + "saved": "อัปเดตสิทธิ์แล้ว", + "reverted": "เปลี่ยนกลับเป็นค่าเริ่มต้น", + "all_reverted": "เปลี่ยนกลับการแทนที่ทั้งหมดแล้ว", + "confirm_reset": "รีเซ็ตการแทนที่แบบกำหนดเองทั้งหมดสำหรับบทบาทนี้เป็นค่าเริ่มต้นหรือไม่", + "empty_title": "เลือกบทบาท", + "empty_desc": "เลือกบทบาทจากเมนูแบบเลื่อนลงด้านบนเพื่อดูและจัดการสิทธิ์", + "locked_title": "Super Admin", + "locked_desc": "ผู้ดูแลระบบขั้นสูงมีสิทธิ์ทั้งหมดตามค่าเริ่มต้นและไม่สามารถปรับแต่งได้", + "cat_device": "อุปกรณ์", + "cat_user": "Users", + "cat_server": "เซิร์ฟเวอร์", + "cat_org": "องค์กรต่างๆ", + "cat_audit": "การตรวจสอบและติดตาม", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "ดูอุปกรณ์", + "perm_device_connect": "เชื่อมต่อกับอุปกรณ์", + "perm_device_edit": "แก้ไขอุปกรณ์", + "perm_device_delete": "ลบอุปกรณ์", + "perm_device_ban": "แบน / ยกเลิกการแบนอุปกรณ์", + "perm_device_change_id": "เปลี่ยนรหัสอุปกรณ์", + "perm_user_view": "ดูผู้ใช้", + "perm_user_create": "สร้างผู้ใช้", + "perm_user_edit": "แก้ไขผู้ใช้", + "perm_user_delete": "ลบผู้ใช้", + "perm_server_config": "การกำหนดค่าเซิร์ฟเวอร์", + "perm_server_keys": "จัดการคีย์ API", + "perm_org_create": "สร้างองค์กร", + "perm_org_edit": "แก้ไของค์กร", + "perm_org_delete": "ลบองค์กร", + "perm_org_manage_users": "จัดการผู้ใช้ในองค์กร", + "perm_org_manage_devices": "จัดการอุปกรณ์ขององค์กร", + "perm_audit_view": "ดูบันทึกการตรวจสอบ", + "perm_metrics_view": "ดูตัวชี้วัด", + "perm_blocklist_edit": "แก้ไขรายการบล็อก", + "perm_cdap_view": "ดูอุปกรณ์ CDAP", + "perm_cdap_command": "ส่งคำสั่ง CDAP", + "perm_cdap_terminal": "การเข้าถึงเทอร์มินัล CDAP", + "perm_cdap_files": "การเข้าถึงไฟล์ CDAP", + "perm_enrollment_manage": "จัดการการลงทะเบียน", + "perm_enrollment_approve": "อนุมัติการลงทะเบียน", + "perm_chat_access": "Chat access", + "perm_branding_edit": "แก้ไขการสร้างแบรนด์", + "perm_server_attestation": "การรับรองประสิทธิภาพเซิร์ฟเวอร์" + }, + "notifications": { + "title": "การแจ้งเตือน", + "empty": "ไม่มีการแจ้งเตือนใหม่", + "mark_all_read": "ทำเครื่องหมายว่าอ่านแล้วทั้งหมด", + "see_all": "ดูคำขอความช่วยเหลือทั้งหมด", + "help_request": "ขอความช่วยเหลือ", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "ปรับคอนโซลให้เหมาะกับความต้อง��ารในการมองเห็น การเคลื่อนไหว และการอ่านของคุณ", + "close": "ปิดเมนูการเข้าถึง", + "profiles": "โปรไฟล์ด่วน", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "ข้อความขนาดใหญ่ คอนทราสต์และโฟกัสที่ชัดเจน", + "profile_dyslexia": "ความสะดวกสบายในการอ่าน", + "profile_dyslexia_hint": "แบบอักษรที่อ่านได้และระยะห่างที่กว้างขึ้น", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "ลดการเปลี่ยนและหยุดภาพเคลื่อนไหวชั่วคราว", + "profile_color_assist": "รองรับสี", + "profile_color_assist_hint": "ฟิลเตอร์สี ป้ายกำกับ และลิงก์ที่ไฮไลต์", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "ระยะห่างระหว่างตัวอักษร", + "word_spacing": "ระยะห่างระหว่างคำ", + "readable_font": "แบบอักษรที่อ่านได้", + "readable_font_hint": "ใช้รูปทรงตัวอักษรที่กว้างและคุ้นเคย", + "dyslexia_spacing": "ระยะห่างดิสเล็กเซีย", + "dyslexia_spacing_hint": "เพิ่มระยะห่างพิเศษสำหรับข้อความยาว", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "คอนทราสต์สูงมืด", + "contrast_high_light": "แสงคอนทราสต์สูง", + "contrast_yellow_black": "สีเหลืองบนพื้นสีดำ", + "color_filter": "ตัวกรองการมองเห็นสี", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "ความอิ่มตัวของสี", + "underline_links": "ขีดเส้นใต้ลิงก์", + "underline_links_hint": "ทำให้มองเห็นลิงก์ได้โดยไม่ต้องพึ่งสี", + "highlight_links": "เน้นการดำเนินการ", + "highlight_links_hint": "โครงร่างลิงก์และปุ่มต่างๆ", + "highlight_headings": "เน้นส่วนหัว", + "highlight_headings_hint": "ทำเครื่องหมายชื่อส่วนด้วยแถบสี", + "hide_media": "Dim media", + "hide_media_hint": "หรี่แสงรูปภาพ วิดีโอ และแคนวาส", + "interaction": "Interaction", + "strong_focus": "โฟกัสที่แข็งแกร่ง", + "strong_focus_hint": "แสดงวงแหวนปรับโฟกัสของแป้นพิมพ์ขนาดใหญ่", + "large_cursor": "เคอร์เซอร์ขนาดใหญ่", + "large_cursor_hint": "ใช้ตัวชี้คอนทราสต์สูงที่ใหญ่กว่า", + "reduce_motion": "ลดการเคลื่อนไหว", + "reduce_motion_hint": "ลดระยะเวลาการเปลี่ยนภาพและการเลื่อนอย่างราบรื่น", + "pause_animations": "หยุดภาพเคลื่อนไหวชั่วคราว", + "pause_animations_hint": "หยุดการเคลื่อนไหวของภาพแบบวนซ้ำ", + "reading_guide": "คู่มือการอ่าน", + "reading_guide_hint": "ตามด้วยเส้นสว่างตามตัวชี้", + "reading_mask": "หน้ากากอ่านหนังสือ", + "reading_mask_hint": "หรี่เนื้อหาด้านบนและด้านล่างของตัวชี้", + "preview": "Preview", + "preview_title": "การแสดงตัวอย่างพื้นที่ทำงานของผู้ปฏิบัติงาน", + "preview_text": "ตรวจสอบว่าข้อความ ลิงก์ ตัวควบคุม และป้ายกำกับสถานะอ่านได้ง่ายหรือไม่ก่อนปิดเมนูนี้", + "preview_link": "ลิงค์รายละเอียดอุปกรณ์", + "preview_status": "Online", + "preview_button": "การกระทำหลัก", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "จัดการเซิร์ฟเวอร์", + "subtitle": "ระนาบควบคุมเ��มือนห้องนักบินสำหรับโฮสต์คอนโซล BetterDesk (เบต้า)", + "beta_tooltip": "คุณลักษณะเบต้า — อยู่ระหว่างการพัฒนา", + "notice_title": "คุณลักษณะเบต้า", + "notice_body": "เครื่องมือเหล่านี้ทำงานบนโฮสต์ที่คอนโซลกระบวนการ BetterDesk ทำงานอยู่ การดำเนินงานทั้งหมดได้รับการตรวจสอบ ขอบเขตฟีเจอร์จะขยายออกไปในรุ่นต่อๆ ไป", + "tab_overview": "ภาพรวม", + "tab_terminal": "เทอร์มินัล", + "tab_files": "ไฟล์", + "tab_services": "บริการ", + "cpu": "CPU", + "memory": "หน่วยความจำ", + "load": "โหลดเฉลี่ย", + "disks": "ดิสก์", + "history": "ประวัติ (60 ตัวอย่างสุดท้าย)", + "host_info": "Host info", + "cores": "cores", + "uptime": "เวลาทำงาน", + "no_disks": "ไม่มีข้อมูลดิสก์", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY ใช้ได้", + "term_connect": "Connect", + "term_disconnect": "Disconnect", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "ข้อผิดพลาดในการเชื่อมต่อ", + "term_warning": "คำสั่งทำงานในฐานะผู้ใช้ที่เป็นเจ้าของกระบวนการคอนโซล เพิ่มกฎ sudoers เพื่อเปิดใช้งานการยกระดับ", + "term_hint": "เคล็ดลับ: พิมพ์ `sudo -i` เพื่อยกระดับ (ต้องมีการกำหนดค่า sudoers)", + "term_lib_failed": "โหลดไลบรารีเทอร์มินัลไม่สำเร็จ", + "files_up": "ขึ้นมาหนึ่งระดับ", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "ไดเร็กทอรีว่างเปล่า", + "files_error": "ไม่สามารถแสดงรายการไดเร็กทอรี", + "read_failed": "ไม่สามารถอ่านไฟล์ได้", + "save_failed": "ไม่สามารถบันทึกไฟล์ได้", + "rename_failed": "การเปลี่ยนชื่อล้มเหลว", + "delete_failed": "ลบไม่สำเร็จ", + "delete_confirm": "ลบรายการนี้ใช่ไหม", + "mkdir_prompt": "ชื่อโฟลเดอร์ใหม่:", + "mkdir_failed": "ไม่สามารถสร้างโฟลเดอร์ได้", + "file_saved": "บันทึกไฟล์แล้ว", + "binary_warn": "ไฟล์ไบนารี — ดูตัวอย่างเท่านั้น", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "บริการค้นหา...", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "ไม่พบบริการ", + "svc_load_failed": "โหลดบริการไม่สำเร็จ", + "svc_action_failed": "การดำเนินการล้มเหลว", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "รีสตาร์ท", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "ดาวน์โหลดตัวแทน BetterDesk", + "choose_platform": "เลือกแพลตฟอร์มของคุณ", + "choose_platform_hint": "เลือกตัวติดตั้งที่ตรงกับระบบปฏิบัติการของคุณ", + "download": "ดาวน์โหลด", + "building": "อาคาร...", + "failed": "การสร้างล้มเหลว", + "need_help": "ต้องการความช่วยเหลือ?", + "powered_by": "ขับเคลื่อนโดย" + }, + "server_attestation": { + "title": "การรับรองประสิทธิภาพเซิร์ฟเวอร์", + "subtitle": "การทดสอบ benchmark ประสิทธิภาพเพื่อกำหนดความจุการเชื่อมต่อพร้อมกันที่ระดับ CPU, RAM และดิสก์ 80%", + "warning_title": "การทดสอบโหลด", + "warning_body": "การทดสอบ benchmark จำลองการเชื่อมต่อ WebSocket แบบขนานกับ signal และ relay server ควรรันในช่วงนอกชั่วโมงเร่งด่วน — การทดสอบนี้สร้างโหลดให้ production", + "run_benchmark": "รัน Benchmark", + "abort": "ยกเลิก", + "download_report": "ดาวน์โหลดรายงาน JSON", + "last_test": "การทดสอบล่าสุด", + "no_test_yet": "ยังไม่มีการรัน benchmark", + "max_connections": "การเชื่อมต่อสูงสุด", + "threshold_80": "เกณฑ์ 80% — เมตริกสุดท้าย", + "disk": "ดิสก์", + "ramp_chart": "กราฟการเพิ่มโหลด", + "connections": "การเชื่อมต่อ", + "connections_short": "เชื่อมต่อ", + "tier_guide_title": "แต่ละระดับหมายความว่าอย่างไร?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "การเชื่อมต่อพร้อมกัน 1–25 รายการ — VPS ขนาดเล็ก (1–2 vCPU, 2–4 GB RAM)", + "tier_iron_desc": "การเชื่อมต่อ 26–75 รายการ — เซิร์ฟเวอร์ระดับกลาง (2–4 vCPU, 4–8 GB RAM)", + "tier_platinum_desc": "การเชื่อมต่อ 76–200 รายการ — เซิร์ฟเวอร์ประสิทธิภาพสูง (4–8 vCPU, 8–16 GB RAM)", + "tier_titanium_desc": "การเชื่อมต่อ 201–400 รายการ — โครงสร้างพื้นฐานระดับองค์กร (8+ vCPU, 16–32 GB RAM)", + "tier_obsidian_desc": "การเชื่อมต่อ 401+ รายการ — ระดับ Turbo: ฮาร์ดแวร์เฉพาะ, 16+ vCPU, 32+ GB RAM, NVMe", + "docker_note": "หมายเหตุ: ใน Docker เมตริก CPU/RAM อาจสะท้อนขีดจำกัดของ container ไม่ใช่ host จริง", + "badge_tooltip": "BetterDesk Server Attestation — การรับรองประสิทธิภาพเซิร์ฟเวอร์", + "confirm_run": "Benchmark นี้จะทดสอบโหลดเซิร์ฟเวอร์ด้วยการเชื่อมต่อจำลอง ต้องการดำเนินการต่อ?", + "starting": "กำลังเริ่มต้น…", + "complete": "Benchmark เสร็จสิ้น", + "signal_peers": "เพียร์สัญญาณ", + "relay_sessions": "เซสชันรีเลย์", + "page_error": "โหลดหน้า Server Attestation ล้มเหลว", + "mode_estimated": "ค่าประมาณ (WebSocket ไม่สามารถเข้าถึงได้)", + "incomplete": "Benchmark เสร็จสิ้นแต่ไม่ได้รับระดับที่ถูกต้อง" + }, + "commercialization": { + "title": "การทำให้เป็นเชิงพาณิชย์", + "subtitle": "แพ็กเกจสนับสนุน เซสชันที่เรียกเก็บเงิน และรายงาน", + "alpha_badge": "ALPHA", + "alpha_tooltip": "ฟีเจอร์ช่วงเริ่มต้น — การเรียกเก็บเงินและแพ็กเกจอยู่ระหว่างพัฒนา", + "tabs": { + "overview": "ภาพรวม", + "packages": "แพ็กเกจและสัญญา", + "sessions": "เซสชัน", + "reports": "รายงาน", + "settings": "การตั้งค่าขั้นสูง" }, - "branding": { - "identity_title": "เอกลักษณ์ของแบรนด์", - "identity_desc": "ปรับแต่งชื่อแอปพลิเคชันและคำอธิบายที่แสดงทั่วทั้งคอนโซล", - "app_name": "ชื่อแอปพลิเคชัน", - "app_description": "คำอธิบายแอปพลิเคชัน", - "logo_title": "Logo", - "logo_desc": "เลือกลักษณะที่โลโก้ของคุณจะปรากฏในแถบด้านข้างและหน้าเข้าสู่ระบบ", - "logo_type_icon": "ไอคอนวัสดุ", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "ป้อนชื่อไอคอนว���สดุ (เช่น DNS, คลาวด์, ความปลอดภัย) ดูที่fonts.google.com/icons", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "วางมาร์กอัป SVG ของคุณที่นี่ รองรับองค์ประกอบ เต็มรูปแบบพร้อมเส้นทางและสไตล์", - "logo_image_upload": "อัพโหลดรูปภาพ", - "logo_image_choose": "เลือกไฟล์รูปภาพ", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "ประเภทไฟล์ไม่ถูกต้อง ใช้ PNG, JPG, GIF, WebP หรือ SVG", - "preview": "Preview", - "colors_title": "โครงร่างสี", - "colors_desc": "ปรับแต่งจานสี เว้นว่างไว้เพื่อใช้ค่าเริ่มต้น", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "สีเน้น", - "colors_borders": "Borders", - "import_export_title": "นำเข้า/ส่งออก", - "import_export_desc": "บันทึกธีมของคุณเป็นไฟล์ JSON หรือนำเข้าจากอินสแตนซ์อื่น", - "export_theme": "ส่งออกธีม", - "import_theme": "นำเข้าธีม", - "reset_defaults": "รีเซ็ตเป็นค่าเริ่มต้น", - "save_branding": "บันทึกการสร้างแบรนด์", - "saved": "บันทึกการสร้างแบรนด์เรียบร้อยแล้ว กำลังโหลดซ้ำ...", - "exported": "ส่งออกธีมแล้ว", - "imported": "นำเข้าธีมเรียบร้อยแล้ว กำลังโหลดซ้ำ...", - "import_error": "ไม่สามารถนำเข้าธีมได้ รูปแบบไฟล์ไม่ถูกต้อง", - "reset_confirm": "คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการสร้างแบรนด์เป็นค่าเริ่มต้น สิ่งนี้ไม่สามารถยกเลิกได้", - "reset_success": "การสร้างแบรนด์รีเซ็ตเป็นค่าเริ่มต้น กำลังโหลดซ้ำ...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "ข้อความหลักที่แสดงเป็นโลโก้แบรนด์ของคุณ", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "ข้อความรองใต้โลโก้ (เช่น ชื่อผลิตภัณฑ์หรือสโลแกน)", - "logo_upload_success": "อัปโหลดโลโก้เรียบร้อยแล้ว", - "typography_title": "Typography", - "typography_desc": "เลือกแบบอักษรสำหรับส่วนหัวและข้อความเนื้อหา แบบอักษรจะถูกดาวน์โหลดไปยังเซิร์ฟเวอร์เพื่อการโฮสต์ด้วยต��เอง", - "font_heading": "แบบอักษรหัวเรื่อง", - "font_heading_hint": "ใช้สำหรับส่วนหัว (H1–H6) และโลโก้ข้อความ", - "font_body": "Body Font", - "font_body_hint": "ใช้สำหรับข้อความเนื้อหาและองค์ประกอบ UI", - "font_search_placeholder": "ค้นหาแบบอักษร...", - "font_system_default": "ค่าเริ่มต้นของระบบ", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "แบบอักษรที่ดาวน์โหลดบนเซิร์ฟเวอร์", - "powered_by": "ขับเคลื่อนโดย", - "background_title": "พื้นหลังและรูปลักษณ์", - "background_desc": "ตั้งค่าวอลเปเปอร์คอนโซล, gradient หรือพื้นหลังสีพื้น การ์ดจะลอยอยู่บน", - "bg_type_none": "ไม่มี", - "bg_type_color": "สีพื้น", - "bg_type_gradient": "Gradient", - "bg_type_image": "รูปภาพ", - "bg_color": "สีพื้นหลัง", - "bg_gradient": "ไล่ระดับสี CSS", - "bg_gradient_hint": "CSS gradient ที่ถูกต้องใดๆ เช่น linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "อัปโหลดรูปพื้นหลัง", - "bg_image_choose": "เลือกไฟล์รูปภาพ", - "bg_image_hint": "PNG, JPG, WebP หรือ GIF สูงสุด 8 MB บันทึกบนเซิร์ฟเวอร์", - "bg_image_url": "เส้นทาง / URL รูปภาพ", - "bg_size": "การปรับขนาดรูปภาพ", - "bg_size_cover": "Cover (เต็มหน้าจอ)", - "bg_size_contain": "Contain (พอดี)", - "bg_size_auto": "อัตโนมัติ (ขนาดเดิม)", - "bg_blur": "เบลอพื้นหลัง", - "bg_overlay": "Overlay มืด", - "bg_overlay_hint": "ทำให้พื้นหลังมืดลงเพื่อให้อ่านข้อความได้ง่ายขึ้น", - "bg_image_too_large": "รูปภาพใหญ่เกินไป ขนาดสูงสุด 8 MB", - "bg_image_invalid_type": "ประเภทไฟล์ไม่ถูกต้อง ใช้ PNG, JPG, WebP หรือ GIF", - "bg_upload_success": "อัปโหลดรูปพื้นหลังสำเร็จ", - "login_title": "หน้าเข้าสู่ระบบ", - "login_desc": "กำหนดค่าหัวเรื่อง, คำบรรยาย และพื้นหลังของหน้าเข้าสู่ระบบ", - "login_heading": "หัวเรื่องเข้าสู่ระบบ", - "login_heading_placeholder": "ยินดีต้อนรับกลับ", - "login_subheading": "คำบรรยายเข้าสู่ระบบ", - "login_subheading_placeholder": "เข้าสู่ระบบบัญชีของคุณ", - "login_bg_inherit": "เหมือนกับคอนโซล", - "agent_title": "หน้าดาวน์โหลด Agent", - "agent_desc": "กำหนดค่าพอร์ทัลดาวน์โหลด agent สาธารณะที่แสดงให้ผู้ใช้งาน", - "agent_show_powered": "แสดง \"Powered by BetterDesk\"", - "agent_show_powered_hint": "แสดงเครดิต BetterDesk ในส่วนท้ายพอร์ทัลดาวน์โหลด", - "footer_title": "ส่วนท้ายและลิขสิทธิ์", - "footer_desc": "เพิ่มข้อความส่วนท้ายที่กำหนดเองในหน้าเข้าสู่ระบบและแถบด้านข้างคอนโซล", - "footer_text": "ข้อความส่วนท้าย", - "footer_text_hint": "เช่น ประกาศลิขสิทธิ์หรือชื่อบริษัท", - "show_powered": "แสดงเครดิต \"BetterDesk\"", - "show_powered_hint": "แสดงชื่อและเวอร์ชัน BetterDesk ในส่วนท้ายเข้าสู่ระบบและแถบด้านข้าง", - "custom_css_title": "CSS กำหนดเอง", - "custom_css_desc": "ขั้นสูง: แทรก CSS กำหนดเองที่ใช้กับคอนโซลและหน้าเข้าสู่ระบบ", - "custom_css_hint": "ใช้ด้วยความระมัดระวัง กฎที่ไม่ถูกต้องหรือไม่ปลอดภัยจะถูกลบ สูงสุด 20,000 ตัวอักษร" + "clock": { + "title": "เวลาเซิร์ฟเวอร์ (NTP)", + "check_now": "ตรวจสอบตอนนี้", + "unsynced": "นาฬิกาเซิร์ฟเวอร์ไม่ซิงค์ — เซสชันที่เรียกเก็บเงินอาจถูกบล็อก" }, - "device_detail": { - "tab_overview": "ภาพรวม", - "tab_tags": "แท็ก & หมายเหตุ", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "การเชื่อมต่อ", - "section_manage": "การจัดการ", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "อุปกรณ์นี้ถูกแบน", - "no_reason": "ไม่มีการระบุเหตุผล", - "tags": "Tags", - "no_tags": "ไม่มีการกำหนดแท็กให้กับอุปกรณ์นี้", - "tag_placeholder": "ป้อนชื่อแท็ก...", - "add_tag": "Add", - "tag_exists": "มีแท็กนี้อยู่แล้ว", - "notes": "Notes", - "notes_placeholder": "เพิ่มบันทึกเกี่ยวกับอุปกรณ์นี้...", - "danger_zone": "Danger Zone", - "action_connect_web": "เว็บระยะไกล", - "action_connect_web_desc": "เชื่อมต่อผ่านเดสก์ท็อประยะไกลของเบราว์เซอร์", - "action_native_remote": "BetterDesk รีโมท", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "ไคลเอนต์เดสก์ท็อป", - "action_connect_desktop_desc": "เปิดในแอปไคลเอนต์เดสก์ท็อป", - "action_change_id_desc": "เปลี่ยนรหัสการลงทะเบียนอุปกรณ์", - "action_ban_desc": "บล็อกอุปกรณ์นี้ไม่ให้เชื่อมต่อ", - "action_unban_desc": "อนุญาตให้อุปกรณ์นี้เชื่อมต่ออีกครั้ง", - "action_delete_desc": "นำอุปกรณ์นี้ออกอย่างถาวร", - "tab_hardware": "Hardware", - "tab_metrics": "เมตริก", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "ความสามารถในการเข้ารหัส", - "section_live_metrics": "ตัวชี้วัดสด", - "section_current_usage": "การใช้งานปัจจุบัน", - "section_usage_history": "ประวัติการใช้งาน", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "ความถี่ซีพียู", - "total_memory": "หน่วยความจำทั้งหมด", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "อัปเดตแล้ว", - "device_groups": "กลุ่ม", - "no_sysinfo": "ไม่มีข้อมูลฮาร์ดแวร์", - "no_sysinfo_hint": "ข้อมูลระบบจะปรากฏขึ้นหลังจากที่อุปกรณ์ส่งรายงาน sysinfo", - "no_metrics": "ไม่มีข้อมูลเมตริก", - "no_metrics_hint": "การวัดจะปรากฏขึ้นหลังจากที่อุปกรณ์ส่งรายงานฮาร์ทบีท", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "ไฟล์", - "agent_lazy_hint": "คลิกแท็บนี้เพื่อโหลดข้อมูลสดจากตัวแทน", - "agent_offline": "ตัวแทนออฟไลน์อยู่", - "agent_timeout": "ตัวแทนไม่ตอบกลับทันเวลา", - "agent_error": "โหลดข้อมูลจากตัวแทนไม่สำเร็จ", - "service_name": "Name", - "service_display": "ชื่อที่แสดง", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "เซสชันที่เรียกเก็บเงินที่ใช้งานอยู่" }, - "inventory": { - "title": "Inventory", - "subtitle": "สินค้าคงคล��งฮาร์ดแวร์และซอฟต์แวร์ของอุปกรณ์ที่ได้รับการจัดการ", - "device_id": "รหัสอุปกรณ์", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "หน่วยความจำทั้งหมด", - "memory_used": "Used Memory", - "memory_available": "หน่วยความจำที่มีอยู่", - "memory_usage": "การใช้หน่วยความจำ", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "อินเทอร์เฟซเครือข่าย", - "software": "Software", - "software_count": "ซอฟต์แวร์ที่ติดตั้ง", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "แกนทางกายภาพ", - "logical_cores": "แกนลอจิคัล", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "มีจำหน่าย", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "ที่อยู่ IP", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "นักสะสมวิ่ง", - "collector_stopped": "นักสะสมหยุดแล้ว", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "รวบรวมไว้ที่", - "no_data": "ยังไม่มีข้อมูลสินค้าคงคลัง คลิก \"รวบรวมทันที\" เพื่อรวบรวมข้อมูลระบบ", - "no_devices": "ไม่พบอุปกรณ์ที่มีข้อมูลสินค้าคงคลัง", - "detail_title": "รายละเอียดสินค้าคงคลังของอุปกรณ์", - "telemetry": "Telemetry", - "view_detail": "ดูร��ยละเอียด", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "แพ็กเกจใหม่", + "name": "ชื่อ", + "included_minutes": "นาทีที่รวม", + "overage_rate": "อัตราเกิน / ชม.", + "currency": "สกุลเงิน", + "heading": "แพ็กเกจสนับสนุน", + "prompt_name": "ชื่อแพ็กเกจ", + "create_title": "แพ็กเกจใหม่สำหรับองค์กร", + "create_submit": "สร้างแพ็กเกจ", + "select_org": "องค์กร", + "select_org_placeholder": "เลือกองค์กร…" }, - "tickets": { - "title": "Tickets", - "subtitle": "ตั๋วสนับสนุนและการติดตามปัญหา", - "create": "New Ticket", - "edit": "แก้ไขตั๋ว", - "delete": "ลบตั๋ว", - "detail": "รายละเอียดตั๋ว", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "มอบหมายให้", - "created_by": "สร้างโดย", - "device": "อุปกรณ์", - "sla_due": "SLA Due", - "created_at": "สร้างแล้ว", - "updated_at": "อัปเดตแล้ว", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "เปิด", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "เขียนความคิดเห็น...", - "internal_note": "หมายเหตุภายใน (ผู้ใช้ปลายทางไม่สามารถมองเห็นได้)", - "attachments": "Attachments", - "upload_attachment": "อัพโหลดไฟล์แนบ", - "download": "Download", - "connect_device": "เชื่อมต่อกับอุปกรณ์", - "no_tickets": "ไม่พบตั๋ว", - "no_comments": "ยังไม่มีความคิดเห็น", - "no_attachments": "ไม่มีไฟล์แนบ", - "title_required": "ต้องระบุชื่อเรื่อง", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบตั๋ว #{id}", - "delete_success": "ลบตั๋วเรียบร้อยแล้ว", - "created_success": "สร้างตั๋วสำเร็จแล้ว", - "updated_success": "อัปเดตตั๋วเรียบร้อยแล้ว", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "ค้นหาตั๋ว...", - "assign_to_me": "มอบหมายให้ฉัน", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "เปิด", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "การตรวจสอบกิจกรรม", - "subtitle": "การใช้แอปพลิเคชันและการติดตามการไม่ได้ใช้งาน", - "device": "อุปกรณ์", - "hostname": "Hostname", - "sessions": "เซสชัน", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "แอปพลิเคชั่นยอดนิยม", - "app_name": "Application", - "window_title": "ชื่อหน้าต่าง", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "จำนวนเซสชัน", - "total_active": "ใช้งานอยู่ทั้งหมด", - "total_idle": "Total Idle", - "detail_count": "บันทึกรายละเอียด", - "no_data": "ไม่มีข้อมูลกิจกรรม", - "no_sessions": "ไม่มีเซสชัน", - "filter_from": "จาก", - "filter_to": "ถึง", - "filter_apply": "ใช้ตัวกรอง", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "ค้นหาอุปกรณ์...", - "date_range": "Date Range", - "device_id": "รหัสอุปกรณ์", - "session_start": "เริ่มเซสชัน", - "session_end": "สิ้นสุดเซสชัน", - "user": "User", - "no_activity": "ไม่มีการบันทึกกิจกรรม", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "ไม่มีแอปพลิเคชัน" - }, - "automation": { - "title": "ระบบอัตโนมัติและการแจ้งเตือน", - "subtitle": "กฎการแจ้งเตือน คำสั่งระยะไกล และการกำหนดค่า SMTP", - "rules": "Alert Rules", - "rules_subtitle": "กำหนดเงื่อนไขที่ทำให้เกิดการแจ้งเตือน", - "alerts": "ประวัติการแจ้งเตือน", - "alerts_subtitle": "ดูและรับทราบการแจ้งเตือนที่ถูกเรียกใช้", - "commands": "คำสั่งระยะไกล", - "commands_subtitle": "ส่งคำสั่งไปยังอุปกรณ์ระยะไกล", - "smtp": "การกำหนดค่า SMTP", - "smtp_subtitle": "การตั้งค่าการแจ้งเตือนทางอีเมล", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "ประเภทเงื่อนไข", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "อุปกรณ์เป้าหมาย", - "scope_all": "อุปกรณ์ทั้งหมด", - "cooldown": "คูลดาวน์ (วินาที)", - "notify_emails": "อีเมลแจ้งเตือน", - "enabled": "เปิดใช้งานแล้ว", - "disabled": "ปิดการใช้งาน", - "create_rule": "สร้างกฎ", - "edit_rule": "แก้ไขกฎ", - "delete_rule": "ลบกฎ", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "ทริกเกอร์ที่", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "มากกว่า", - "op_gte": "มากกว่าหรือเท่ากัน", - "op_lt": "Less than", - "op_lte": "น้อยกว่าหรือเท่ากัน", - "op_eq": "เท่ากับ", - "op_neq": "ไม่เท่ากับ", - "type_cpu_usage": "การใช้งานซีพียู (%)", - "type_memory_usage": "การใช้หน่วยความจำ (%)", - "type_disk_usage": "การใช้ดิสก์ (%)", - "type_offline_duration": "ระยะเวลาออฟไลน์ (s)", - "type_idle_duration": "ระยะเวลาไม่ได้ใช้งาน (s)", - "type_custom": "Custom", - "command_type": "ประเภทคำสั่ง", - "command_payload": "คำสั่ง / สคริปต์", - "command_result": "Result", - "command_status": "Status", - "send_command": "ส่งคำสั่ง", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "ล้มเหลว", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "ชื่อผู้ใช้", - "smtp_pass": "รหัสผ่าน", - "smtp_from": "จากที่อยู่", - "smtp_test": "ทดสอบการเชื่อมต่อ", - "smtp_save": "บันทึกการกำหนดค่า", - "smtp_test_success": "การเชื่อมต่อสำเร็จ", - "smtp_test_failed": "การเชื่อมต่อล้มเหลว", - "no_rules": "ไม่มีการกำหนดค่ากฎการแจ้งเตือน", - "no_alerts": "ไม่มีการแจ้งเตือนเกิดขึ้น", - "no_commands": "ไม่มีการส่งคำสั่ง", - "id_payload_required": "ต้องมีรหัสอุปกรณ์และเพย์โหลด", - "no_commands_sent": "ยังไม่มีการส่งคำสั่งใดๆ" - }, - "file_transfer": { - "title": "การถ่ายโอนไฟล์", - "transfers": "Transfers", - "new_transfer": "โอนใหม่", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "ขนาดไฟล์", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "อุปกรณ์", - "initiated_by": "เริ่มโดย", - "created_at": "สร้างเมื่อ", - "cancel": "ยกเลิก", - "cancel_confirm": "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการโอนนี้", - "download_file": "ดาวน์โหลดไฟล์", - "browse_files": "เรียกดูไฟล์", - "select_file": "เลือกไฟล์", - "select_device": "เลือกอุปกรณ์", - "no_transfers": "ไม่มีการถ่ายโอนไฟล์", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "ล้มเหลว", - "status_cancelled": "Cancelled", - "bytes_transferred": "ไบต์ที่ถ่ายโอนแล้ว", - "chunks": "Chunks", - "transfer_started": "เริ่มการโอนแล้ว", - "transfer_completed": "โอนเรียบร้อยแล้ว", - "transfer_failed": "การโอนล้มเหลว", - "transfer_cancelled": "ยกเลิกการโอนแล้ว", - "max_file_size": "ขนาดไฟล์สูงสุด: 4 GB", - "error_too_large": "ไฟล์มีขนาดใหญ่เกินไป", - "error_no_device": "ไม่ได้เลือกอุปกรณ์", - "error_no_file": "ไม่ได้เลือกไฟล์" - }, - "network": { - "title": "การตรวจสอบเครือข่าย", - "targets": "การติดตามเป้าหมาย", - "add_target": "Add Target", - "edit_target": "แก้ไขเป้าหมาย", - "delete_target": "ลบเป้าหมาย", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบเป้าหมายนี้", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "หมดเวลา (มิลลิวินาที)", - "interval": "ช่วงเวลา (มิลลิวินาที)", - "enabled": "เปิดใช้งานแล้ว", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "ตรวจสอบประวัติ", - "stats": "Statistics", - "total_targets": "เป้าหมายทั้งหมด", - "targets_up": "Targets Up", - "targets_down": "เป้าหมายลง", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "เครื่องมือเครือข่าย", - "ping_tool": "Ping Test", - "tcp_tool": "TCP ตรวจสอบพอร์ต", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "เริ่มการตรวจสอบ", - "monitor_stop": "หยุดการตรวจสอบ", - "monitor_running": "จอภาพกำลังทำงาน", - "monitor_stopped": "จอภาพหยุดทำงาน", - "no_targets": "ไม่มีการกำหนดค่าเป้าหมายการตรวจสอบ", - "no_history": "ไม่มีประวัติการตรวจสอบ", - "error_code": "Error", - "status_code": "รหัสสถานะ HTTP", - "search_targets": "ค้นหาเป้าหมาย...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "ตรวจสอบประวัติ", - "name_host_required": "ต้องระบุชื่อและโฮสต์", - "uptime": "Uptime", - "response_time": "เวลาตอบสนอง", - "avg_response": "การตอบสนองโดยเฉลี่ย", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "เวลาตอบสนอง (มิลลิวินาที)", - "uptime_percent": "Uptime %", - "last_24h": "24ชม.ที่ผ่านมา", - "last_7d": "Last 7 days", - "last_30d": "30 วันที่ผ่านมา" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "นโยบายดีแอลพี", - "add_policy": "เพิ่มนโยบาย", - "edit_policy": "แก้ไขนโยบาย", - "delete_policy": "ลบนโยบาย", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "เปิดใช้งานแล้ว", - "disabled": "ปิดการใช้งาน", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "อุปกรณ์ USB", - "rule_type_file": "การทำงานของไฟล์", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "รหัสผู้ขาย (VID)", - "pid": "รหัสผลิตภัณฑ์ (PID)", - "serial": "หมายเลขซีเรียล", - "device_class": "คลาสอุปกรณ์", - "drive_type": "Drive Type", - "file_extensions": "นามสกุลไฟล์", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "ไฟล์", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "ไม่มีการกำหนดค่านโยบาย DLP", - "no_events": "ไม่มีการบันทึกเหตุการณ์ DLP", - "stats": "Statistics", - "total_events": "เหตุการณ์ทั้งหมด", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "ไฟล์เหตุการณ์", - "device_id": "รหัสอุปกรณ์", - "policy_matched": "นโยบายที่ตรงกัน", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "นโยบายรวม", - "active_policies": "นโยบายที่ใช้งานอยู่", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "นโยบาย", - "tab_events": "Events", - "search_policies": "นโยบายการค้นหา...", - "create_policy": "สร้างนโยบาย", - "policy_type": "ประเภทกรมธรรม์", - "scope": "Scope", - "events_count": "Events", - "search_events": "ค้นหากิจกรรม...", - "event_time": "Event Time", - "device": "อุปกรณ์", - "policy": "นโยบาย", - "detail": "Detail", - "scope_help": "รหัสอุปกรณ์ที่คั่นด้วยเครื่องหมายจุลภาค หรือเว้นว่างไว้สำหรับทั้งหมด", - "scope_all": "อุปกรณ์ทั้งหมด", - "active": "Active", - "type_file_type": "ประเภทไฟล์", - "type_clipboard": "คลิปบอร์ด", - "type_screen_share": "แชร์หน้าจอ", - "type_file_transfer": "การถ่ายโอนไฟล์", - "policy_desc": "คำอธิบายนโยบาย", - "type_usb": "USB" + "sessions": { + "device": "อุปกรณ์", + "operator": "ผู้ปฏิบัติการ", + "duration": "ระยะเวลา", + "phase": "ระยะ", + "amount": "จำนวนเงิน" }, "reports": { - "title": "Reports", - "generate": "สร้างรายงาน", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "สรุปอุปกรณ์", - "type_activity": "สรุปกิจกรรม", - "type_security": "รายงานความปลอดภัย", - "type_tickets": "รายงานตั๋ว", - "type_network": "รายงานเครือข่าย", - "type_inventory": "รายงานสินค้าคงคลัง", - "type_alerts": "รายงานการแจ้งเตือน", - "saved": "รายงานที่บันทึกไว้", - "save_report": "บันทึกรายงาน", - "delete_report": "ลบรายงาน", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบรายงานที่บันทึกไว้นี้", - "no_saved": "ไม่มีรายงานที่บันทึกไว้", - "report_title": "Title", - "created_by": "สร้างโดย", - "created_at": "สร้างเมื่อ", - "filters": "Filters", - "date_from": "จาก", - "date_to": "ถึง", - "device_filter": "รหัสอุปกรณ์", - "generated_at": "สร้างเมื่อ", - "section": "ส่วนข้อมูล", - "total_devices": "อุปกรณ์ทั้งหมด", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "การกระจายแพลตฟอร์ม", - "top_applications": "แอปพลิเคชั่นยอดนิยม", - "total_active": "เวลาใช้งานทั้งหมด", - "total_idle": "เวลาว่างทั้งหมด", - "dlp_stats": "สถิติ DLP", - "banned_devices": "อุปกรณ์ที่ถูกแบน", - "audit_logs": "Audit Logs", - "ticket_stats": "สถิติตั๋ว", - "category_distribution": "การกระจายหมวดหมู่", - "priority_distribution": "การกระจายลำดับความสำคัญ", - "targets_status": "สถานะเป้าหมาย", - "os_distribution": "การกระจายระบบปฏิบัติการ", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "การแจ้งเตือนล่าสุด", - "tab_generate": "สร้างรายงาน", - "tab_saved": "รายงานที่บันทึกไว้", - "type_devices_desc": "ภาพรวมของอุปกรณ์ แพลตฟอร์ม และสถานะทั้งหมด", - "type_activity_desc": "สรุปการใช้งานแอพพลิเคชั่นและเวลาว่าง", - "type_security_desc": "การกระทำการแบน กิจกรรม DLP และบันทึกการตรวจสอบ", - "type_tickets_desc": "สถิติตั๋วและประสิทธิภาพ SLA", - "type_network_desc": "เป้าหมายการตรวจสอบเครือข่ายและข้อมูลสถานะการออนไลน์", - "type_inventory_desc": "สรุปรายการฮาร์ดแวร์และซอฟต์แวร์", - "type_alerts_desc": "กฎการแจ้งเตือนและประวัติการแจ้งเตือนที่เรียกใช้", - "report_name": "Report Name", - "format": "Format", - "save": "บันทึกรายงาน", - "preview": "Preview", - "download": "Download", - "delete_saved": "ลบรายงาน", - "raw_json": "Raw JSON" + "session": "เซสชัน", + "summary": "สรุป", + "date": "วันที่" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "แก้ไขผู้เช่า", - "delete_tenant": "ลบผู้เช่า", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบผู้เช่ารายนี้ การกำหนดอุปกรณ์และผู้ใช้ทั้งหมดจะถูกลบออก", - "name": "Name", - "slug": "Slug", - "contact_name": "ชื่อผู้ติดต่อ", - "contact_email": "อีเมล์ติดต่อ", - "max_devices": "อุปกรณ์แม็กซ์", - "max_devices_hint": "0 = ไม่จำกัด", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "อุปกรณ์", - "users": "Users", - "assign_device": "กำหนดอุปกรณ์", - "assign_devices": "กำหนดอุปกรณ์", - "remove_device": "ถอดอุปกรณ์", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "ไม่มีการกำหนดค่าผู้เช่า", - "no_devices": "ไม่มีอุปกรณ์ที่มอบหมายให้กับผู้เช่ารายนี้", - "no_users": "ไม่มีผู้ใช้ที่กำหนดให้กับผู้เช่ารายนี้", - "stats": "สถิติผู้เช่า", - "total_devices": "อุปกรณ์ทั้งหมด", - "online_devices": "อุป���รณ์ออนไลน์", - "total_users": "Total Users", - "created_at": "สร้างเมื่อ", - "updated_at": "อัปเดตเมื่อ", - "slug_exists": "ทากผู้เช่ามีอยู่แล้ว", - "total_tenants": "ผู้เช่าทั้งหมด", - "active_tenants": "ผู้เช่าที่ใช้งานอยู่", - "search": "ค้นหาผู้เช่า...", - "create_tenant": "สร้างผู้เช่า", - "detail": "รายละเอียดผู้เช่า", - "contact": "Contact", - "enabled": "เปิดใช้งานแล้ว", - "disabled": "ปิดการใช้งาน", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "สัญญาองค์กร", + "new": "กำหนดแพ็กเกจ", + "org": "องค์กร", + "package": "แพ็กเกจ", + "remaining": "นาทีที่เหลือ", + "status": "สถานะ", + "actions": "การดำเนินการ", + "suspend": "ระงับ", + "activate": "เปิดใช้งาน", + "select_org": "เลือกองค์กร", + "select_package": "เลือกแพ็กเกจ", + "no_orgs": "ไม่พบองค์กร", + "no_packages": "สร้างแพ็กเกจก่อน" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "ค้นหาตามรหัสอุปกรณ์ ชื่อโฮสต์ หรือ IP...", - "no_registrations": "No registration requests", - "col_device_id": "รหัสอุปกรณ์", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "คุณแน่ใจหรือไม่ว่าต้องการอนุมัติอุปกรณ์นี้ จะได้รับข้อมูลรับรองเซิร์ฟเวอร์และสามารถเชื่อมต่อได้โดยอัตโนมัติ", - "approved_success": "การลงทะเบียนอุปกรณ์ได้รับอนุมัติเรียบร้อยแล้ว", - "reject_btn": "Reject", - "reject_title": "ปฏิเสธการลงทะเบียน", - "reject_confirm": "คุณแน่ใจหรือไม่ว่าต้องการปฏิเสธคำขอลงทะเบียนนี้", - "reject_reason": "เหตุผล (ไม่บังคับ)", - "reject_reason_placeholder": "ป้อนเหตุผลในการปฏิเสธ...", - "rejected_success": "การลงทะเบียนอุปกรณ์ถูกปฏิเสธ", - "delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการลงทะเบียนนี้", - "deleted_success": "ลบบันทึกการลงทะเบียนแล้ว", - "enrollment_title": "การลงทะเบียนอุปกรณ์", - "enrollment_subtitle": "คำขอการลงทะเบียนที่รอดำเนินการจากไคลเอ็นต์เดสก์ท็อป BetterDesk", - "enrollment_empty": "ไม่มีคำขอลงทะเบียนที่รอดำเนินการ", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "ชื่อที่แสดง", - "enrollment_display_name_placeholder": "ป้อนชื่อสำหรับอุปกรณ์นี้...", - "enrollment_sync_mode": "โหมดการซิงค์", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "อนุมัติการลงทะเบียนอุปกรณ์แล้ว", - "enrollment_rejected_success": "การลงทะเบียนอุปกรณ์ถูกปฏิเสธ", - "approve_title": "อนุมัติอุปกรณ์", - "field_name": "ชื่ออุปกรณ์", - "field_name_placeholder": "กรุณากรอกชื่อสำหรับอุปกรณ์นี้...", - "field_sync_mode": "โหมดซิงค์", - "sync_standard": "มาตรฐาน — ซิงค์แบบสมดุล", - "sync_silent": "เงียบ — telemetry ขั้นต่ำ", - "sync_turbo": "Turbo — ซิงค์เชิงรุก", - "field_tags": "แท็ก", - "field_tags_placeholder": "แท็กคั่นด้วยเครื่องหมายจุลภาค (เช่น ออฟฟิศ, แล็ปท็อป)...", - "field_tags_existing": "แท็กที่มีอยู่", - "field_tag_add_placeholder": "เพิ่มแท็กใหม่...", - "field_tag_add_btn": "เพิ่ม", - "field_groups": "กลุ่มอุปกรณ์", - "field_folder": "โฟลเดอร์", - "field_folder_none": "ไม่มีโฟลเดอร์", - "reject_ban_option": "แบนอุปกรณ์นี้", - "reject_ban_hint": "อุปกรณ์จะถูกบล็อกและไม่สามารถส่งคำขอลงทะเบียนใหม่ได้", - "banner_open_mode": "การลงทะเบียนเปิดอยู่ — RustDesk ไคลเอนต์ใหม่ลงทะเบียนโดยไม่ต้องอนุมัติจากผู้ดำเนินการ ตั้งค่า Managed mode ในการตั้งค่าเพื่อใช้คิวนี้", - "banner_locked_mode": "การลงทะเบียนถูกล็อก — เฉพาะอุปกรณ์ที่ผูกกับ token เท่านั้นที่ลงทะเบียนได้ ต้องใช้ Managed mode สำหรับการอนุมัติผู้ดำเนินการ", - "enrollment_settings_link": "การตั้งค่าลงทะเบียน" + "export": { + "csv": "ส่งออก CSV", + "pdf": "ส่งออก PDF", + "sessions_csv": "ส่งออกเซสชัน CSV" }, - "backup": { - "title": "Backup", - "desc": "ดาวน์โหลดการสำรองข้อมูลการกำหนดค่าคอนโซล ผู้ใช้ กลุ่ม และการตั้งค่าทั้งหมด ข้อมูลเพียร์ Go server จะถูกรวมไว้เมื่อแบ็กเอนด์ BetterDesk ทำงานอยู่", - "restore_title": "Restore", - "restore_desc": "อัปโหลดไฟล์สำรองข้อมูลที่ดาวน์โหลดไว้ก่อนหน้านี้เพื่อคืนค่าการกำหนดค่าคอนโซล เลือกส่วนที่จะกู้คืนด้านล่าง", - "stat_users": "Users", - "stat_settings": "การตั้งค่า", - "stat_folders": "Folders", - "stat_groups": "กลุ่ม", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "ดาวน์โหลดการสำรองข้อมูล", - "creating": "กำลังสร้างข้อมูลสำรอง...", - "download_success": "ดาวน์โหลดข้อมูลสำรองเรียบร้อยแล้ว", - "upload": "อัพโหลดข้อมูลสำรอง", - "restore_confirm": "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนจากข้อมูลสำรองนี้ ส่วนที่เลือกจะถูกเขียนทับ", - "restore_success": "กู้คืนข้อมูลสำรองเรียบร้อยแล้ว การเปลี่ยนแปลงบางอย่างอาจต้องมีการโหลดหน้าซ้ำ", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "การตั้งค่าคอนโซล", - "opt_branding": "การสร้างแบรนด์ / ธีม", - "opt_folders": "โฟลเดอร์อุปกรณ์", - "opt_groups": "ผู้ใช้และกลุ่มอุปกรณ์", - "opt_addressbooks": "สมุดที่อยู่", - "opt_users": "บัญชีผู้ใช้", - "opt_users_warning": "ทำลายล้าง: แทนที่บัญชีผู้ใช้ทั้งหมดด้วยข้อมูลสำรอง คุณอาจออกจากระบบ", - "no_file": "ไม่ได้เลือกไฟล์สำรอง", - "invalid_json": "ไฟล์สำรองไม่ถูกต้อง: JSON ไม่ถูกต้อง", - "invalid_format": "ไฟล์สำรองไม่ถูกต้อง: ไม่ใช่ข้อมูลสำรอง BetterDesk", - "stat_database": "เอ็นจิน Database", - "stat_keys": "รวม Server keys", - "stat_env": "ไฟล์ Environment", - "stat_uploads": "ไฟล์ Branding", - "restart_required": "บางคอมโพเนนต์ที่กู้คืน (keys / .env / Go database) ต้องรีสตาร์ทบริการเพื่อให้มีผล", - "security_warning": "การสำรองนี้มีข้อมูลความลับ (server keys, environment file, password hashes และ 2FA secrets) เก็บให้ปลอดภัยและอย่าแชร์", - "restore_warning": "การกู้คืน secrets, environment file หรือ Go server database จะเขียนทับ server identity และต้องรีสตาร์ทบริการหลังจากนั้น", - "opt_database": "Database (ทุกตาราง)", - "opt_database_hint": "นำเข้าข้อมูลคอนโซลทั้งหมดใหม่ ใช้งานทันที ไม่ต้องรีสตาร์ท", - "opt_uploads": "ไฟล์ Branding", - "opt_uploads_hint": "โลโก้และรูปภาพที่อัปโหลด", - "opt_secrets": "คีย์และความลับของเซิร์ฟเวอร์", - "opt_secrets_warning": "เขียนทับ Ed25519 server identity, API key และ session secret ต้องรีสตาร์ทบริการ", - "opt_env": "ไฟล์สภาพแวดล้อม (.env)", - "opt_env_warning": "เขียนทับ SESSION_SECRET, API key, database DSN, ports และ TLS settings ต้องรีสตาร์ทบริการ", - "opt_godb": "ฐานข้อมูลเซิร์ฟเวอร์ Go", - "opt_godb_warning": "เขียนทับ Go server SQLite database (เฉพาะ SQLite backend) ต้องรีสตาร์ทบริการ" + "report": { + "title": "รายงานการทำงาน", + "subtitle": "อธิบายงานที่ทำระหว่างเซสชันรีโมตนี้", + "category": "หมวดหมู่", + "ticket_ref": "อ้างอิงตั๋ว", + "summary": "งานที่ทำ", + "skip": "ข้ามไปก่อน", + "submit": "ส่งรายงาน", + "summary_required": "ต้องมีสรุป", + "saved": "บันทึกรายงานการทำงานแล้ว" }, - "cdap": { - "device_detail": "อุปกรณ์ CDAP", - "loading": "กำลังโหลด...", - "loading_widgets": "กำลังโหลดวิดเจ็ตของอุปกรณ์...", - "load_error": "โหลดข้อมูลอุปกรณ์ไม่สำเร็จ", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "อุปกรณ์ออฟไลน์อยู่ในขณะนี้ ค่าวิดเจ็ตอาจเก่าแล้ว", - "no_widgets": "ไม่มีวิดเจ็ตที่ใช้ได้", - "no_widgets_desc": "อุปกรณ์นี้ไม่ได้ลงทะเบียนรายการ CDAP ด้วยคำจำกัดความของวิดเจ็ต", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "ยืนยันคำสั่ง", - "select_option": "เลือก", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "ส่งคำสั่ง", - "command_sent": "ส่งคำสั่งเรียบร้อยแล้ว", - "command_failed": "ไม่สามารถส่งคำสั่งได้", - "devices_title": "อุปกรณ์ CDAP", - "devices_subtitle": "อุปกรณ์ที่เชื่อมต่อผ่าน Custom Device Application Protocol", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "ค้นหาอุปกรณ์...", - "no_devices": "ไม่มีอุปกรณ์เชื่อมต่ออยู่", - "no_devices_desc": "ไม่มีอุปกรณ์ CDAP เชื่อมต่ออยู่ในขณะนี้ อุปกรณ์จะปรากฏที่นี่เมื่อเชื่อมต่อกับเกตเวย์", - "gateway_disabled": "CDAP เกตเวย์ถูกปิดใช้งาน", - "gateway_disabled_desc": "เปิดใช้งานเกตเวย์ CDAP โดยการตั้งค่า CDAP_ENABLED=true ในการกำหนดค่าเซิร์ฟเวอร์", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "ปิดการใช้งาน CDAP", - "enabled_restart": "เปิดใช้งาน CDAP แล้ว จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลง", - "disabled_restart": "CDAP ปิดการใช้งาน จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลง", - "widgets": "วิดเจ็ต", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "การแจ้งเตือนที่ใช้งานอยู่", - "alert_fired": "Alert fired", - "alert_cleared": "ล้างการแจ้งเตือนแล้ว", - "no_alerts": "ไม่มีการแจ้งเตือนที่ทำงานอยู่", - "connect_terminal": "เชื่อมต่อเทอร์มินัล", - "table_search": "ค้นหา...", - "just_now": "Just now", - "terminal_connecting": "กำลังเชื่อมต่อกับอุปกรณ์...", - "terminal_disconnected": "Disconnected", - "terminal_error": "การเชื่อมต่อเทอร์มินัลล้มเหลว", - "linked_devices": "อุปกรณ์ที่เชื่อมโยง", - "link_device": "เชื่อมโยงอุปกรณ์", - "unlink_device": "Unlink", - "no_linked_devices": "ไม่มีอุปกรณ์ที่เชื่อมโยง", - "unlink_confirm": "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการลิงก์อุปกรณ์นี้", - "link_prompt": "ป้อน Peer ID เพื่อเชื่อมโยงกับอุปกรณ์นี้:", - "connect_desktop": "เชื่อมต่อเดสก์ท็อป", - "connect_video": "เชื่อมต่อสตรีม", - "connect_files": "เรียกดูไฟล์", - "connect_audio": "เชื่อมต่อเสียง", - "upload_file": "Upload", - "desktop_connecting": "กำลังเชื่อมต่อ...", - "video_connecting": "กำลังเชื่อมต่อ...", - "files_connecting": "กำลังเชื่อมต่อ...", - "audio_connecting": "กำลังเชื่อมต่อ...", - "audio_streaming": "Streaming", - "clipboard_in": "ได้รับคลิปบอร์ดแล้ว", - "clipboard_out": "ส่งคลิปบอร์ดแล้ว", - "monitor_select": "เลือก จอภาพ", - "keyframe_request": "ขอคีย์เฟรม", - "quality_auto": "คุณภาพรถยนต์" + "empty": { + "packages": "ยังไม่มีแพ็กเกจ สร้างด้วยปุ่มด้านบน", + "contracts": "ยังไม่มีสัญญาองค์กร กำหนดแพ็กเกจให้องค์กร", + "sessions": "ยังไม่มีเซสชันที่เรียกเก็บเงิน", + "reports": "ยังไม่มีรายงานการทำงาน" }, - "desktop": { - "switch_mode": "โหมดเดสก์ท็อป", - "console_mode": "โหมดคอนโซล", - "loading": "กำลังโหลด...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "ปิด", - "widgets_mode": "วิดเจ็ต", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "เพิ่มวิดเจ็ต", - "remove_widget": "ลบวิดเจ็ต", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "กำหนดค่า", - "search_widgets": "วิดเจ็ตการค้นหา...", - "cat_monitoring": "Monitoring", - "cat_devices": "อุปกรณ์", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "เขียนบันทึกที่นี่...", - "search_placeholder": "ค้นหาอุปกรณ์ เพจ การตั้งค่า...", - "search_pages": "Pages", - "search_devices": "อุปกรณ์", - "search_no_results": "No results", - "exit_desktop": "ออกจากโหมดเดสก์ท็อป", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "สถานะอุปก���ณ์", - "widget_server_health": "ข้อมูลเซิร์ฟเวอร์", - "widget_system_stats": "มาตรวัดอุปกรณ์", - "widget_device_list": "รายการอุปกรณ์", - "widget_quick_actions": "การดำเนินการด่วน", - "widget_recent_activity": "กิจกรรมล่าสุด", - "widget_notes": "Notes", - "widget_network_monitor": "การตรวจสอบเครือข่าย", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "อุปกรณ์ CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "ตารางอุปกรณ์", - "widget_multi_gauge": "มาตรวัดเซิร์ฟเวอร์", - "widget_weekly_chart": "กิจกรรมประจำสัปดาห์", - "widget_quick_controls": "การควบคุมด่วน", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "สถิติการเชื่อมต่อ", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "เซสชันผู้ใช้", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "ไม่มีอุปกรณ์", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "เปิด", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "ตั้งค่า URL ใน config", - "label_server_uptime": "เวลาทำงานของเซิร์ฟเวอร์", - "label_merged_info": "รวมเข้ากับวิดเจ็ตข้อมูลเซิร์ฟเวอร์", - "label_with_notes": "ด้วยหมายเหตุ", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "อุปกรณ์ทั้งหมด", - "label_throughput": "Throughput", - "label_active_relays": "รีเลย์ที่ใช้งานอยู่", - "label_total_relayed": "รวมรีเลย์", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "อุปกรณ์กรอง...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "ไม่มีอุปกรณ์ CDAP", - "action_add_widget": "เพิ่มวิดเจ็ต", - "label_merged_server_info": "รวมเข้ากับวิดเจ็ตข้อมูลเซิร์ฟเวอร์", - "wp_images": "Images", - "wp_colors": "สีทึบ", - "wp_custom_color": "สีที่กำหนดเอง", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "ภาพวอลเปเปอร์ไม่ได้ถูกติดตั้งบนเซิร์ฟเวอร์นี้", - "wp_download_hint": "วางภาพ PNG ในไดเร็กทอรี public/wallpapers/ เพื่อเปิดใช้งานการเลือกวอลเปเปอร์", - "widget_calendar": "Calendar", - "widget_process_monitor": "การตรวจสอบกระบวนการ", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "สถิติฐานข้อมูล", - "widget_docker_containers": "Docker คอนเทนเนอร์", - "widget_shell_command": "คำสั่งเชลล์", - "widget_device_map": "แผนที่อุปกรณ์", - "widget_remote_connect": "เชื่อมต่อระยะไกล", - "label_no_online": "ไม่มีอุปกรณ์ออนไลน์", - "label_no_events": "ไม่มีกิจกรรมในวันนี้", - "label_event_title": "ชื่อกิจกรรม:", - "label_no_data": "ไม่มีข้อมูล", - "label_download_speed": "ความเร็วในการดาวน์โหลด", - "label_latency": "Latency", - "label_server": "เซิร์ฟเวอร์", - "label_run_test": "Run Test", - "label_testing": "กำลังทดสอบ...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "ไม่มีภาชนะ", - "label_docker_unavailable": "Docker ไม่พร้อมใช้งาน", - "label_no_command": "ไม่มีการกำหนดค่าคำสั่ง", - "label_no_output": "ยังไม่มีเอาท์พุต", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "บันทึกค่าที่ตั้งล่วงหน้า", - "label_load_preset": "Load Preset", - "label_preset_name": "ชื่อที่ตั้งไว้ล่วงหน้า:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "จัดเรียงอัตโนมัติ", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 คอลัมน์ (เท่ากัน)", - "label_2col_wide": "2 คอลัมน์ (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "กลุ่มวิดเจ็ต", - "ungroup_widgets": "ยกเลิกการจัดกลุ่มวิดเจ็ต", - "group_widgets": "จัดกลุ่มวิดเจ็ตที่เลือก", - "snap_layouts": "สแน็ปเค้าโครง", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "สแน็ปซ้ายบน", - "snap_top_right": "สแน็ปบนขวา", - "snap_bottom_left": "สแน็ปล่างซ้าย", - "snap_bottom_right": "สแนปล่างขวา", - "aero_shake": "เขย่าเพื่อลดขนาดผู้อื่น", - "zone_resize": "ลากเส้นขอบเพื่อปรับขนาดโซน", - "zone_borders": "เส้นขอบโซนที่ลากได้", - "app_drawer": "Applications", - "search_apps": "ค้นหาแอป...", - "edit_shortcuts": "แก้ไขทางลัด", - "widgets": "วิดเจ็ต", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "กำหนดแพ็กเกจที่มีอยู่", + "submit": "กำหนด" }, - "desktop_login": { - "click_to_sign_in": "คลิกที่ใดก็ได้หรือกดปุ่มเพื่อลงชื่อเข้าใช้", - "username_placeholder": "ชื่อผู้ใช้", - "password_placeholder": "รหัสผ่าน", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "การรับรองความถูกต้องด้วยสองปัจจัย", - "totp_subtitle": "ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ", - "back_to_login": "กลับสู่การเข้าสู่ระบบ", - "fill_all_fields": "กรุณากรอกข้อมูลให้ครบทุกช่อง", - "invalid_credentials": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", - "invalid_code": "รหัสยืนยันไม่ถูกต้อง", - "enter_6_digits": "ใส่ตัวเลขทั้งหมด 6 หลัก", - "network_error": "Network error — check your connection", - "session_expired": "เซสชั่นหมดอายุแล้ว กรุณาเข้าสู่ระบบอีกครั้ง" - }, - "tokens": { - "title": "โทเค็นอุปกรณ์", - "subtitle": "จัดการโทเค็นการลงทะเบียนสำหรับการจัดสรรอุปกรณ์อัตโนมัติ", - "enrollment_mode": "โหมดการลงทะเบียน", - "mode_open": "เปิด", - "mode_open_desc": "อุปกรณ์ใดๆ ก็ตามสามารถลงทะเบียนได้โดยไม่ต้องใช้โทเค็น", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "โทเค็นทั้งหมด", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "โทเค็นการค้นหา...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "สร้างจำนวนมาก", - "create": "สร้างโทเค็น", - "edit": "แก้ไขโทเค็น", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "สร้างแล้ว", - "actions": "Actions", - "name_placeholder": "เช่น ชุดพีซีสำนักงาน", - "max_uses": "Max Uses", - "max_uses_hint": "0 = ไม่จำกัด", - "expires_in": "Expires In", - "no_expiration": "ไม่มีวันหมดอายุ", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "หมายเหตุเพิ่มเติมเกี่ยวกับโทเค็นนี้...", - "count": "Count", - "count_range": "จำนวนโทเค็นที่จะสร้าง (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "สร้างโทเค็นแล้ว", - "tokens_generated": "โทเค็นที่สร้างขึ้น", - "copy_warning": "คัดลอกโทเค็นทันที มันจะไม่แสดงอีก", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "คุณแน่ใจหรือไม่ว่าต้องการเพิกถอนโทเค็นนี้ อุปกรณ์ที่ลงทะเบียนไว้แล้วจะไม่ได้รับผลก��ะทบ", - "revoked_success": "เพิกถอนโทเค็นเรียบร้อยแล้ว", - "no_tokens": "ไม่พบโทเค็น", - "expired": "Expired", - "never": "Never", - "save": "บันทึก", - "cancel": "ยกเลิก", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "ถัดไป", - "prev": "Previous", - "skip": "Skip", - "finish": "เสร็จสิ้น", - "close": "ปิด", - "step_of": "{current} ของ {total}", - "console_sidebar_title": "แถบนำทางด้านข้าง", - "console_sidebar_text": "เข้าถึงโมดูลทั้งหมดได้จากที่นี่ คลิกไอคอนใดก็ได้เพื่อไปยังส่วนนั้น แถบด้านข้างจะปรับให้เข้ากับขนาดหน้าจอของคุณ", - "console_expand_title": "ขยายแถบด้านข้าง", - "console_expand_text": "คลิกที่นี่เพื่อขยายแถบด้านข้างและดูป้ายกำกับแบบเต็มสำหรับรายการนำทางทั้งหมด คลิกอีกครั้งเพื่อยุบ", - "console_search_title": "ค้นหาด่วน", - "console_search_text": "ค้นหาอุปกรณ์ การตั้งค่า หรือการทำงานอย่างรวดเร็ว กด Ctrl+K เพื่อดูแป้นพิมพ์ลัด", - "console_dashboard_title": "แดชบอร์ด", - "console_dashboard_text": "ฮับกลางของคุณแสดงสถานะเซิร์ฟเวอร์ อุปกรณ์ออนไลน์ และการดำเนินการด่วน จับตาดูตัวชี้วัดที่สำคัญได้อย่างรวดเร็ว", - "console_devices_title": "การจัดการอุปกรณ์", - "console_devices_text": "ดู ค้นหา และจัดการอุปกรณ์ที่เชื่อมต่อทั้งหมด กรองตามสถานะ กำหนดแท็ก และกำหนดการตั้งค่าอุปกรณ์แต่ละรายการ", - "console_settings_title": "การตั้งค่า", - "console_settings_text": "กำหนดค่าพฤติกรรมของเซิร์ฟเวอร์ ตัวเลือกความปลอดภัย การสร้างแบรนด์ และการจัดการผู้ใช้ ปรับแต่ง BetterDesk ให้เหมาะกับความต้องการของคุณ", - "console_desktop_title": "โหมดเดสก์ท็อป", - "console_desktop_text": "สลับไปที่โหมดเดสก์ท็อปสำหรับพื้นที่ทำงานแบบหน้าต่างพร้อมวิดเจ็ต เหมาะสำหรับแดชบอร์ดแบบมัลติทาสกิ้งและการตรวจสอบ", - "console_complete_title": "คุณพร้อมแล้ว!", - "console_complete_text": "สำรวจหมวดหมู่แถบด้านข้างเพื่อค้นหาคุณสมบัติทั้งหมด คลิกไอคอนวิธีใช้เมื่อใดก็ได้เพื่อเริ่มคู่มือนี้ใหม่", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "แถบด้านบนแสดงนาฬิกา การควบคุมด่วน และการเข้าถึงลิ้นชักแอป คลิกไอคอนตารางเพื่อเรียกดูแอปทั้งหมด", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "เปิดลิ้นชักแอปเพื่อค้นหาและเปิดใช้ฟังก์ชันคอนโซลใดๆ ในรูปแบบหน้าต่างลอย แอพจัดเรียงตามหมวดหมู่", - "desktop_widgets_title": "แดชบอร์ดวิดเจ็ต", - "desktop_widgets_text": "พื้นที่ทำงานที่ปรับแต่งได้ของคุณ วิดเจ็ตแสดงข้อมูลสดและให้การเข้าถึงคุณสมบัติต่างๆ ได้อย่างรวดเร็ว ลากเพื่อจัดเรียงใหม่", - "desktop_add_widget_title": "เพิ่มวิดเจ็ต", - "desktop_add_widget_text": "คลิกที่นี่เพื่อเรียกดูวิดเจ็ตที่มีอยู่ เลือกจากการตรวจสอบจอแสดงผล รายการอุปกรณ์ บันทึก และอื่นๆ", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "แอพที่เปิดอยู่จะปรากฏที่นี่ คลิกเพื่อโฟกัสหรือย่อหน้าต่าง วางเมาส์เหนือไอคอนเพื่อดูป้ายกำกับแอป", - "desktop_snap_title": "สแน็ปเค้าโครง", - "desktop_snap_text": "ลากหน้าต่างไปที่ขอบหน้าจอเพื่อจัดชิดตำแหน่ง หรือเลื่อนปุ่มขยายใหญ่สุดเพื่อตั้งค่าเค้าโครงล่วงหน้า ลอง Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "แอปจะเปิดในหน้าต่างที่ลากได้และปรับขนาดได้ ย่อเล็กสุด ขยายใหญ่สุด หรือปิดจากแถบชื่อเรื่อง Windows เลเยอร์เหนือวิดเจ็ต", - "desktop_search_title": "ค้นหาด่วน", - "desktop_search_text": "ค้นหาในอุปกรณ์ หน้า และการตั้งค่า กด Ctrl+K ที่ใดก็ได้เพื่อเปิดการค้นหาทันที", - "desktop_complete_title": "โหมดเดสก์ท็อปพร้อมแล้ว!", - "desktop_complete_text": "ลองเปิดแอปจากลิ้นชักและจัดเรียงหน้าต่างไว้เคียงข้างกัน ใช้การตั้งค่าวิดเจ็ตล่วงหน้าสำหรับรูปแบบแดชบอร์ดที่รวดเร็ว", - "devices_folders_title": "โฟลเดอร์อุปกรณ์", - "devices_folders_text": "จัดระเบียบอุปกรณ์เป็นโฟลเดอร์ คลิกโฟลเดอร์เพื่อกรองรายการ คลิกขวาเพื่อเปลี่ยนชื่อหรือลบ", - "devices_search_title": "ค้นหาและกรอง", - "devices_search_text": "ค้นหาตาม ID ชื่อโฮสต์ หรือแพลตฟอร์ม ใช้ยาสถานะเพื่อแสดงเฉพาะออนไลน์ ออฟ���ลน์ หรือทุกอุปกรณ์", - "devices_table_title": "รายการอุปกรณ์", - "devices_table_text": "คลิกแถวอุปกรณ์ใดก็ได้เพื่อดูรายละเอียด ใช้เมนูเคบับทางด้านขวาเพื่อดำเนินการอย่างรวดเร็ว เช่น เชื่อมต่อ แก้ไขแท็ก หรือลบ", - "devices_complete_title": "การจัดการอุปกรณ์พร้อมแล้ว!", - "devices_complete_text": "ลากอุปกรณ์ระหว่างโฟลเดอร์เพื่อจัดระเบียบ คลิกสองครั้งที่อุปกรณ์เพื่อเปิดแผงรายละเอียด", - "settings_tabs_title": "หมวดหมู่การตั้งค่า", - "settings_tabs_text": "นำทางระหว่างส่วนทั่วไป ความปลอดภัย ลักษณะ และการกำหนดค่าอื่น ๆ", - "settings_content_title": "การกำหนดค่า", - "settings_content_text": "แต่ละส่วนประกอบด้วยการตั้งค่าเซิร์ฟเวอร์และคอนโซลเฉพาะ การเปลี่ยนแปลงจะถูกบันทึกเมื่อคุณคลิกบันทึก", - "settings_complete_title": "ภาพรวมการตั้งค่า", - "settings_complete_text": "ตรวจสอบการตั้งค่าความปลอดภัยสำหรับคีย์ 2FA, API และการจัดการผู้ใช้ ไปที่ลักษณะที่ปรากฏเพื่อปรับแต่งรูปลักษณ์คอนโซล", - "help": "ความช่วยเหลือและบทช่วยสอน", - "tour_console": "ทัวร์คอนโซล", - "tour_desktop": "ทัวร์ชมโหมดเดสก์ท็อป", - "tour_devices": "ทัวร์ชมอุปกรณ์", - "tour_settings": "ทัวร์ชมการตั้งค่า", - "reset_all": "รีเซ็ตบทช่วยสอนทั้งหมด", - "tour_remote": "ทัวร์เซสชันระยะไกล", - "tour_organization": "การตั้งค่าองค์กร", - "tour_cdap": "ภาพรวม CDAP", - "tour_chat": "พื้นฐานการแชท", - "remote_toolbar_title": "แถบเครื่องมือระยะไกล", - "remote_toolbar_text": "เข้าถึงส่วนคว��คุมการแสดงผล การซิงค์คลิปบอร์ด ปุ่มพิเศษ และการตั้งค่าคุณภาพจากแถบเครื่องมือ สลับโหมดเต็มหน้าจอด้วย F11", - "remote_canvas_title": "จอแสดงผลระยะไกล", - "remote_canvas_text": "นี่คือหน้าจอระยะไกล คลิกด้านในเพื่อเริ่มควบคุมอุปกรณ์ระยะไกล อินพุตเมาส์และคีย์บอร์ดจะถูกส่งต่อโดยอัตโนมัติ", - "remote_clipboard_title": "การซิงค์คลิปบอร์ด", - "remote_clipboard_text": "คัดลอกและวางข้อความระหว่างคอมพิวเตอร์ของคุณและอุปกรณ์ระยะไกล ใช้ Ctrl+C / Ctrl+V ตามปกติขณะโฟกัสไปที่จอแสดงผลระยะไกล", - "remote_complete_title": "เซสชันระยะไกลพร้อมแล้ว!", - "remote_complete_text": "ใช้ปุ่มแถบเครื่องมือสำหรับปุ่มพิเศษ (Ctrl+Alt+Del, PrintScreen) และการสลับจอภาพ กด Escape หรือคลิก Disconnect เพื่อสิ้นสุดเซสชัน", - "org_overview_title": "องค์กรต่างๆ", - "org_overview_text": "องค์กรให้คุณจัดกลุ่มผู้ใช้ อุปกรณ์ และ���โยบายได้ แต่ละองค์กรมีผู้ดูแลระบบ ผู้ปฏิบัติงาน และการตั้งค่าของตนเอง", - "org_create_title": "สร้างองค์กร", - "org_create_text": "คลิกที่นี่เพื่อสร้างองค์กรใหม่ ระบุชื่อ ตัวบุ้ง และคำอธิบายเพิ่มเติม คุณจะเป็นเจ้าขององค์กรใหม่", - "org_members_title": "จัดการสมาชิก", - "org_members_text": "เชิญผู้ใช้ทางอีเมล กำหนดบทบาท (ผู้ดูแลระบบ ผู้ปฏิบัติงาน ผู้ใช้) และจัดการการเข้าถึง สมาชิกสามารถดูอุปกรณ์ที่กำหนดให้กับองค์กรของตนได้", - "org_devices_title": "กำหนดอุปกรณ์", - "org_devices_text": "เพิ่มอุปกรณ์ให้กับองค์กร อุปกรณ์ที่ได้รับมอบหมายที่นี่จะสืบทอดนโยบายขององค์กรและสมาชิกจะมองเห็นได้", - "org_policies_title": "นโยบายองค์กร", - "org_policies_text": "กำหนดนโยบายความปลอดภัย เช่น ข้อกำหนดรหัสผ่าน การหมดเวลาเซสชัน การบังคับใช้ 2FA และกฎการลงทะเบียนอุปกรณ์สำหรับองค์กร", - "org_complete_title": "การตั้งค่าองค์กรเสร็จสมบูรณ์!", - "org_complete_text": "เชิญทีมของคุณและมอบหมายอุปกรณ์ให้เริ่มใช้การจัดการในขอบเขตองค์กร นโยบายมีผลกับสมาชิกทุกคนโดยอัตโนมัติ", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "ผู้ติดต่อและกลุ่ม", - "chat_contacts_text": "ดูผู้ติดต่อและกลุ่มแชทของคุณ คลิกที่ผู้ติดต่อเพื่อเปิดการสนทนา จุดสีเขียวหมายถึงผู้ใช้ออนไลน์", - "chat_send_title": "ส่งข้อความ", - "chat_send_text": "พิมพ์ข้อความของคุณแล้วกด Enter เพื่อส่ง ข้อความได้รับการเข้ารหัสจากต้นทางถึงปลายทางเมื่อทั้งสองฝ่ายรองรับ E2E", - "chat_file_title": "แชร์ไฟล์", - "chat_file_text": "คลิกไอคอนไฟล์แนบเพื่อแชร์ไฟล์ ไฟล์ถูกเข้ารหัสและสามารถมีขนาดสูงสุด 50 MB", - "chat_complete_title": "แชทพร้อม!", - "chat_complete_text": "สนทนากับโอเปอเรเตอร์และผู้ใช้ปลายทางแบบเรียลไทม์ สร้างกลุ่มเพื่อการสื่อสารในทีม ข้อความทั้งหมดรองรับใบตอบรับการอ่าน", - "disable_tutorials": "ปิดการใช้งานบทช่วยสอน", - "enable_tutorials": "เปิดใช้งานบทช่วยสอน" - }, - "help_request": { - "title": "คำขอความช่วยเหลือ", - "subtitle": "จัดการคำขอความช่วยเหลือที่เข้ามาจากไคลเอนต์เดสก์ท็อป", - "new_request": "คำขอความช่วยเหลือใหม่", - "device": "อุปกรณ์", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "ไม่มีการร้องขอความช่วยเหลือ", - "notification": "ได้รับการร้องขอความช่วยเหลือจาก", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "องค์กรต่างๆ", - "create": "สร้างองค์กร", - "edit": "แก้ไของค์กร", - "detail": "รายละเอียดองค์กร", - "name": "Name", - "slug": "ทาก (ปลอดภัย URL)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "อุปกรณ์", - "invitations": "Invitations", - "settings": "การตั้งค่า", - "add_user": "Add User", - "assign_device": "กำหนดอุปกรณ์", - "create_invitation": "สร้างคำเชิญ", - "delete_confirm": "ลบองค์กรนี้ใช่ไหม การดำเนินการนี้จะลบผู้ใช้ อุปกรณ์ และการตั้งค่าที่เกี่ยวข้องทั้งหมด", - "no_orgs": "ยังไม่มีองค์กร", - "no_orgs_hint": "สร้างองค์กรแรกของคุณเพื่อเริ่มจัดการอุปกรณ์และผู้ใช้", - "connection_policy": "นโยบายการเชื่อมต่อ", - "allow_file_transfer": "อนุญาตให้ถ่ายโอนไฟล์", - "allow_clipboard": "อนุญาตคลิปบอร์ด", - "max_session_duration": "ระยะเวลาเซสชันสูงสุด (นาที)", - "role_owner": "Owner", - "role_admin": "ผู้ดูแลระบบ", - "role_operator": "Operator", - "role_user": "สมาชิก", - "username": "ชื่อผู้ใช้", - "password": "รหัสผ่าน", - "display_name": "ชื่อที่แสดง", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "รหัสอุปกรณ์", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "ผู้ใช้ที่ได้รับมอบหมาย", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "ไม่มีผู้ใช้ในองค์กรนี้", - "no_devices": "ไม่มีอุปกรณ์ที่กำหนดให้กับองค์กรนี้", - "no_invitations": "ไม่มีคำเชิญ", - "user_added": "User added", - "user_removed": "นำผู้ใช้ออกแล้ว", - "user_updated": "อัปเดตบทบาทของผู้ใช้แล้ว", - "device_assigned": "กำหนดอุปกรณ์แล้ว", - "device_unassigned": "ยกเลิกการกำหนดอุปกรณ์แล้ว", - "invitation_created": "สร้างคำเชิญแล้ว", - "settings_saved": "บันทึกการตั้งค่าแล้ว", - "org_deleted": "ลบองค์กรแล้ว", - "confirm_remove_user": "ลบผู้ใช้รายนี้ออกจากองค์กรใช่ไหม", - "confirm_unassign_device": "ยกเลิกการมอบหมายอุปกรณ์นี้จากองค์กรใช่ไหม", - "confirm_delete_org": "ลบองค์กรนี้และข้อมูลที่เกี่ยวข้องทั้งหมดใช่ไหม", - "edit_role": "แก้ไขบทบาท", - "raw_settings": "การตั้งค่าดิบ", - "key": "Key", - "value": "Value", - "save": "บันทึกการตั้งค่า", - "policy_unattended": "อัตโนมัติ (ทันที)", - "policy_attended": "เข้าร่วม (พร้อมการยืนยัน)", - "policy_ask": "Always ask", - "expires_hours": "หมดอายุ (ชั่วโมง)", - "loading_failed": "โหลดข้อมูลองค์กรไม่สำเร็จ", - "name_slug_required": "ต้องระบุชื่อและตัวทาก", - "org_created": "สร้างองค์กรแล้ว", - "org_updated": "อัปเดตองค์กรแล้ว", - "create_new_user": "สร้างใหม่", - "add_existing_user": "เพิ่มที่มีอยู่", - "none_available": "none", - "select_user": "เลือกผู้ใช้", - "org_role": "บทบาทขององค์กร", - "link_user_hint": "ผู้ใช้ที่เลือกจะเชื่อมโยงกับองค์กรนี้โดยใช้ข้อมูลรับรองบัญชีเซิร์ฟเวอร์ของตน", - "no_available_users": "ผู้ใช้เซิร์ฟเวอร์ทั้งหมดเชื่อมโยงกับองค์กรนี้แล้ว", - "user_linked": "ผู้ใช้เชื่อมโยงกับองค์กร" - }, - "chat": { - "e2e_enabled": "เข้ารหัสตั้งแต่ต้นทางถึงปลายทาง", - "e2e_establishing": "การสร้างช่องทางที่ปลอดภัย...", - "e2e_established": "สร้างช่องทางที่ปลอดภัยแล้ว", - "e2e_unsupported": "ไม่รองรับการเข้ารหัส E2E ในเบราว์เซอร์นี้", - "typing_indicator": "กำลังพิมพ์...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "ไฟล์", - "file_too_large": "ไฟล์ใหญ่เกินไป (สูงสุด 50MB)", - "file_encrypted": "การถ่ายโอนไฟล์ที่เข้ารหัส", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "หมุนคีย์ความปลอดภัยแล้ว", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "กลุ่ม", - "no_contacts": "ยังไม่มีการติดต่อ", - "no_groups": "ยังไม่มีกลุ่ม", - "no_messages": "ยังไม่มีข้อความ", - "no_results": "ไม่พบผลลัพธ์", - "select_conversation": "เลือกการสนทนาเพื่อเริ่มแชท", - "type_message": "���ิมพ์ข้อความ...", - "send": "ส่ง", - "attach_file": "แนบไฟล์", - "emoji": "Emoji", - "search_messages": "ค้นหาข้อความ", - "create_group": "สร้างกลุ่ม", - "group_name": "ชื่อกลุ่ม", - "group_members": "สมาชิก", - "cancel": "ยกเลิก", - "create": "สร้าง", - "members": "สมาชิก", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "ค้นหาผู้ติดต่อและข้อความ", - "select_conversation_hint": "เลือกการสนทนาเพื่อดูข้อความ", - "info": "Info", - "group_name_placeholder": "ป้อนชื่อกลุ่ม" - }, - "toast": { - "device_connected": "เชื่อมต่ออุปกรณ์แล้ว", - "device_disconnected": "อุปกรณ์ถูกตัดการเชื่อมต่อ", - "session_started": "เซสชันระยะไกลเริ่มต้นแล้ว", - "session_ended": "เซสชันระยะไกลสิ้นสุดลง", - "file_upload_complete": "การอัพโหลดไฟล์เสร็จสมบูรณ์", - "settings_saved": "บันทึกการตั้งค่าแล้ว", - "error_generic": "เกิดข้อผิดพลาด", - "connection_lost": "การเชื่อมต่อขาดหายไป", - "reconnecting": "กำลังเชื่อมต่อใหม่..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "ยูทิลิตี้ผู้ดูแลระบบและเครื่องมือวินิจฉัย", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "ส่ง", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "ป้อนข้อความ...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "ไปที่เซิร์ฟเวอร์", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "ตรวจสอบความสามารถในการเข้าถึงและเวลาในการตอบสนองของโฮสต์", - "tcp_title": "TCP ตรวจสอบพอร์ต", - "tcp_desc": "ทดสอบการเชื่อมต่อพอร์ต TCP", - "ssl_title": "ตัวตรวจสอบ SSL", - "ssl_desc": "ตรวจสอบรายละเอียดใบรับรอง SSL/TLS", - "http_title": "HTTP ตรวจสุขภาพ", - "http_desc": "ตรวจสอบสถานะตำแหน่งข้อมูล HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "แก้ไขชื่อโฮสต์เป็นที่อ��ู่ IP", - "whois_title": "DNS Records", - "whois_desc": "แบบสอบถาม A, AAAA, MX, TXT, NS บันทึก", - "speed_title": "Speed Test", - "speed_desc": "วัดแบนด์วิธการดาวน์โหลด", - "run_speed_test": "รันการทดสอบความเร็ว", - "wol_title": "Wake-on-LAN", - "wol_desc": "ส่งแพ็คเก็ตเวทย์มนตร์เพื่อปลุกอุปกรณ์", - "wol_sent": "ส่งแพ็คเก็ตเมจิกแล้ว", - "hash_title": "เครื่องกำเนิดแฮช", - "hash_desc": "สร้างแฮชที่เข้ารหัส", - "password_title": "ตัวสร้างรหัสผ่าน", - "password_desc": "สร้างรหัสผ่านแบบสุ่มที่ปลอดภัย", - "jwt_title": "JWT Decoder", - "jwt_desc": "ถอดรหัสและตรวจสอบ JSON Web Token", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "เข้ารหัสหรือถอดรหัสข้อมูล Base64", - "url_title": "URL Encoder", - "url_desc": "เข้ารหัสหรือถอดรหัสส่วนประกอบ URL", - "processes_title": "รายการกระบวนการ", - "processes_desc": "ดูกระบวนการของระบบที่ทำงานอยู่", - "disk_title": "Disk Usage", - "disk_desc": "ดูการใช้งานพาร์ติชันดิสก์", - "db_title": "สถิติฐานข้อมูล", - "db_desc": "ดูสถิติตารางฐานข้อมูล", - "docker_title": "Docker คอนเทนเนอร์", - "docker_desc": "ดูคอนเทนเนอร์ Docker ที่ทำงานอยู่", - "logs_title": "Log Viewer", - "logs_desc": "ดูผลลัพธ์บันทึกล่าสุด", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "ใช้ได้ตั้งแต่", - "valid_to": "ถูกต้องถึง", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "ไม่มีข้อมูล", - "no_docker": "ไม่พบคอนเทนเนอร์ Docker หรือ Docker ไม่พร้อมใช้งาน", - "no_logs": "ไม่มีบรรทัดบันทึกที่พร้อมใช้งาน" - }, - "policies": { - "title": "นโยบายองค์กร", - "subtitle": "จัดการนโยบายความปลอดภัย การเชื่อมต่อ และฟีเจอร์สำหรับองค์กรของคุณ", - "select_org": "องค์กร", - "select_org_placeholder": "เลือกองค์กร...", - "select_org_first": "เลือกองค์กรเพื่อดูบันทึกการตรวจสอบนโยบาย", - "configured": "Configured", - "connection_title": "นโยบายการเชื่อมต่อ", - "connection_desc": "ควบคุมวิธีการสร้างเซสชันระยะไกล", - "connection_mode": "โหมดการเชื่อมต่อ", - "mode_attended": "เข้าร่วม (ต้องได้รับการอนุมัติจากผู้ใช้)", - "mode_unattended": "ไม่ต้องใส่ข้อมูล (อนุญาตเสมอ)", - "mode_ask": "Always Ask", - "max_session": "ระยะเวลาเซส��ันสูงสุด (นาที)", - "idle_lock": "หมดเวลาล็อครอบเดินเบา (นาที)", - "wallpaper_policy": "ภาพพื้นหลังระหว่างเซสชัน", - "wallpaper_show": "Show", - "wallpaper_hide_session": "ซ่อนระหว่างเซสชั่น", - "wallpaper_hide_always": "Always hide", - "features_title": "นโยบาย��ุณลักษณะ", - "features_desc": "เปิดหรือปิดคุณสมบัติเฉพาะสำหรับอุปกรณ์", - "allow_file_transfer": "อนุญาตให้ถ่ายโอนไฟล์", - "allow_clipboard": "อนุญาตให้ซิงค์คลิปบอร์ด", - "allow_audio": "อนุญาตการสตรีมเสียง", - "allow_recording": "อนุญาตให้บันทึกเซสชัน", - "security_title": "นโยบายความปลอดภัย", - "security_desc": "บังคับใช้ข้อกำหนดด้านความปลอดภัยสำหรับอุปกรณ์ขององค์กร", - "require_2fa": "ต้องมี 2FA สำหรับการเข้าถึงแบบอัตโนมัติ", - "password_min_length": "ความยาวรหัสผ่านขั้นต่ำ", - "password_require_special": "ต้องใช้อักขระพิเศษ", - "password_max_age": "รหัสผ่านอายุสูงสุด (วัน 0=ไม่เคย)", - "allowed_operators": "บทบาทของตัวดำเนินการที่อนุญาต (คั่นด้วยเครื่องหมายจุลภาค)", - "network_title": "นโยบายเครือข่าย", - "network_desc": "ควบคุมเซิร์ฟเวอร์รีเลย์และการ���ชื่อมต่อโดยตรง", - "block_direct_p2p": "บล็อกโดยตรง P2P (รีเลย์บังคับ)", - "allowed_relays": "เซิร์ฟเวอร์รีเลย์ที่อนุญาต (หนึ่งรายการต่อบรรทัด)", - "ip_allowlist": "รายการที่อนุญาต IP (CIDR หนึ่งรายการต่อบรรทัด)", - "update_title": "ปรับปรุงนโยบาย", - "update_desc": "ควบคุมการอัพเดตอัตโนมัติและช่องทางการอัพเดต", - "auto_update": "เปิดใช้งานการอัปเดตอัตโนมัติ", - "update_channel": "อัพเดทช่อง", - "audit_title": "การเปลี่ยนแปลงนโยบาย", - "audit_desc": "ประวัติการเปลี่ยนแปลงนโยบายล่าสุด", - "no_audit": "ไม่มีการบันทึกการเปลี่ยนแปลงนโยบาย", - "save_success": "บันทึกนโยบายเรียบร้อยแล้ว", - "save_failed": "ไม่สามารถบันทึกนโยบาย", - "load_failed": "โหลดนโยบายไม่สำเร็จ", - "block_direct_p2p_hint": "ใช้กับอุปกรณ์ในองค์กรนี้ ค่าเริ่มต้นทั่วโลกอยู่ใน การตั้งค่า → กลยุทธ์การเชื่อมต่อ" - }, - "attestation": { - "title": "การรับรองอุปกรณ์", - "subtitle": "ตรวจสอบการยืนยันตัวตนอุปกรณ์และลายนิ้วมือของฮาร์ดแวร์", - "verified": "Verified", - "pending": "Pending", - "failed": "ล้มเหลว", - "device_list": "บันทึกการรับรองอุปกรณ์", - "device_list_desc": "ลายนิ้วมือของฮาร์ดแวร์และสถานะการตรวจสอบตัวตน", - "col_device": "รหัสอุปกรณ์", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "ไม่พบบันทึกการรับรอง", - "verify_success": "อุปกรณ์ทำเครื่องหมายว่าได้รับการยืนยันแล้ว", - "verify_failed": "ไม่สามารถยืนยันอุปกรณ์ได้", - "revoke_success": "ใบรับรองอุปกรณ์ถูกเพิกถอนแล้ว", - "revoke_failed": "ไม่สามารถเพิกถอนการรับรองได้" - }, - "fleet": { - "title": "การจัดการยานพาหนะ", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "ตัวสร้างเวิร์กโฟลว์", - "tab_compliance": "Compliance", - "res_title": "การทำแผนที่ทรัพยากร", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "ไดรฟ์เครือข่าย", - "res_type_dns": "เซิร์ฟเวอร์ DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "เพิ่มทรัพยากร", - "res_name": "ชื่อทรัพยากร", - "res_type": "Type", - "res_address": "ที่อยู่/เส้นทาง", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "องค์กร", - "res_scope_group": "กลุ่ม", - "res_scope_device": "อุปกรณ์", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "ไม่พบทรัพยากร คลิก 'เพิ่มทรัพยากร' เพื่อสร้าง", - "res_confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการ���บทรัพยากรนี้", - "task_title": "ตัวกำหนดเวลางาน", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "ล้มเหลว", - "task_search": "Search tasks…", - "task_create": "สร้างงาน", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "อัปเดต", - "task_type_restart": "รีสตาร์ท", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "รหัสอุปกรณ์หรือชื่อกลุ่ม คั่นด้วยเครื่องหมายจุลภาค", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "ค่ากำหนดการ", - "task_script": "สคริปต์/คำสั่ง", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "ไม่พบงาน คลิก 'สร้างงาน' เพื่อเริ���มต้น", - "task_confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการลบงานนี้", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "เครื่องมือสร้างเวิร์กโฟลว์แบบภาพ", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "บันทึก", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "เลือกโหนดเพื่อแก้ไขคุณสมบัติ", - "builder_node_trigger_manual": "ทริกเกอร์แบบแมนนวล", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "ทริกเกอร์เหตุการณ์", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "รีสตาร์ท Svc", - "builder_node_action_file_deploy": "ปรับใช้ไฟล์", - "builder_node_action_message": "ส่งข้อความ", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "ส่งการแจ้งเตือน", - "builder_node_result_chain": "เวิร์กโฟลว์แบบลูกโซ่", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "ชื่อเวิร์กโฟลว์:", - "comp_title": "การปฏิบัติตามข้อกำหนดของซอฟต์แวร์", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "อุปกรณ์", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "เรียกใช้การแก้ไขอัตโนมัติในอุปกรณ์นี้ไหม", - "comp_no_data": "ไม่มีข้อมูลการปฏิบัติตามข้อกำหนด เรียกใช้การสแกนเพื่อเริ่มต้น", - "save": "บันทึก", - "cancel": "ยกเลิก", - "close": "ปิด", - "edit": "แก้ไข", - "delete": "ลบ", - "actions": "Actions", - "all_orgs": "ทุกองค์กร", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "ไดรฟ์เครือข่าย", - "type_dns": "เซิร์ฟเวอร์ DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "เพิ่มทรัพยากร", - "edit_resource": "แก้ไขทรัพยากร", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "ที่อยู่/เส้นทาง", - "scope_org": "องค์กร", - "scope_group": "กลุ่ม", - "scope_device": "อุปกรณ์", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้?", - "all_statuses": "สถานะทั้งหมด", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "ล้มเหลว", - "search_tasks": "Search tasks�", - "create_task": "สร้างงาน", - "edit_task": "แก้ไขงาน", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "การปรับใช้ไฟล์", - "task_type_registry": "Registry", - "target_devices": "อุปกรณ์เป้าหมาย", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "สคริปต์/คำสั่ง", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "กำลังโหลด", - "no_output": "ไม่มีเอาต์พุต", - "error_loading": "เกิดข้อผิดพลาดในการโหลดข้อมูล", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "ทริกเกอร์แบบแมนนวล", - "node_schedule": "Schedule", - "node_event": "ทริกเกอร์เหตุการณ์", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "รีสตาร์ท Svc", - "node_file_deploy": "ปรับใช้ไฟล์", - "node_send_message": "ส่งข้อความ", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "ส่งการแจ้งเตือน", - "node_chain": "เวิร์กโฟลว์แบบลูกโซ่", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "ทุกองค์กร", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "อุปกรณ์", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "เรียกใช้การแก้ไขอัตโนมัติในอุปกรณ์นี้ไหม" - }, - "scaling": { - "title": "การปรับขนาดและการจัดการรีเลย์", - "tab_overview": "ภาพรวม", - "tab_relays": "Relay Nodes", - "tab_rules": "กฎการมอบหมาย", - "tab_capacity": "การวางแผนกำลังการผลิต", - "arch_title": "สถาปัตยกรรมเครือข่าย", - "arch_loading": "กำลังโหลดไดอะแกรมสถาปัตยกรรม...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "อุปกรณ์ทั้งหมด", - "stat_active_sessions": "เซสชันที่ใช้งานอยู่", - "stat_bandwidth": "แบนด์วิธรวม", - "relay_health": "รีเลย์สุขภาพ", - "no_relays": "ไม่มีการกำหนดค่าโหนดรีเลย์ เพิ่มโหนดรีเลย์แรกของคุณเพื่อกระจายโหลด", - "relay_search": "ค้นหารีเลย์...", - "relay_add": "เพิ่มโหนดรีเลย์", - "relay_edit": "แก้ไขโหนดรีเลย์", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "อุปกรณ์", - "col_sessions": "เซสชัน", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "รีเลย์เป้าหมาย", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "เปิดใช้งานแล้ว", - "status_disabled": "ปิดการใช้งาน", - "confirm_delete_relay": "คุณแน่ใจหรือไม่ว่าต้องการลบโหนดรีเลย์นี้", - "confirm_delete_rule": "คุณแน่ใจหรือไม่ว่าต้องการลบกฎการมอบหมายนี้", - "rules_hint": "กฎการกำหนดจะกำหนดว่าเซิร์ฟเวอร์รีเลย์ใดที่จัดการกลุ่มอุปกรณ์เฉพาะ กฎจะได้รับการประเมินตามลำดับความสำคัญ (ต่ำสุดก่อน)", - "rule_add": "Add Rule", - "rule_edit": "แก้ไขกฎ", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "กลุ่มอุปกรณ์", - "match_tag": "แท็กอุปกรณ์", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "เซิร์ฟเวอร์หลัก", - "fallback_nearest": "รีเลย์ที่ใกล้ที่สุด", - "relay_max_sessions": "เซสชันสูงสุด", - "relay_max_bandwidth": "แบนด์วิธสูงสุด (Mbps)", - "cap_tiers": "ระดับความจุ", - "cap_loading": "กำลังโหลดข้อมูลความจุ...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "ไม่มีข้อเสนอแนะ", - "cap_planning": "การวางแผนโครงสร้างพื้นฐาน", - "cap_config": "การกำหนดค่า", - "cap_max_devices": "อุปกรณ์แม็กซ์", - "cap_max_sessions": "เซสชันสูงสุด", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "ความจุของอุปกรณ์", - "cap_tier_sessions": "ความจุเซสชัน", - "cap_tier_bandwidth": "ความจุแบนด์วิธ", - "cap_single_sqlite": "เซิร์ฟเวอร์เดี่ยว (SQLite)", - "cap_single_pg": "เซิร์ฟเวอร์เดี่ยว (PostgreSQL)", - "cap_master_3": "มาสเตอร์ + 3 รีเลย์", - "cap_master_10": "มาสเตอร์ + 10 รีเลย์", - "rec_no_relays": "ไม่มีการกำหนดค่าโหนดรีเลย์ พิจารณาเพิ่มโหนดรีเลย์เพื่อประสิทธิภาพที่ดีขึ้นและความซ้ำซ้อน", - "rec_devices_high": "การใช้งานอุปกรณ์อยู่ในระดับสูง พิจารณาเพิ่มโหนดรีเลย์เพิ่มเติมเพื่อกระจายโหลด", - "rec_sessions_high": "ความจุเซสชันใกล้จะถึงขีดจำกัดแล้ว พิจารณาอัปเกรดโครงสร้างพื้นฐานรีเลย์", - "rec_cpu_high": "โหนดรีเลย์บางตัวรายงานการใช้งาน CPU สูง พิจารณาการปรับสมดุลโหลดหรือการอัพเกรดความจุ", - "rec_all_good": "ระบบทั้งหมดทำงานภายใต้พารามิเตอร์ปกติ ไม่จำเป็นต้องดำเนินการใดๆ", - "save": "บันทึก", - "cancel": "ยกเลิก", - "edit": "แก้ไข", - "delete": "ลบ", - "close": "ปิด", - "no_rules": "ไม่มีกฎการมอบหมาย", - "relays_info_banner": "รายการนี้เป็นข้อมูล เซิร์ฟเวอร์รีเลย์ที่ไคลเอ็นต์ใช้จริงได้รับการกำหนดค่าผ่านตัวแปรสภาพแวดล้อม RELAY_SERVERS บนเซิร์ฟเวอร์ BetterDesk", - "relay_name_address_required": "ต้องระบุชื่อและที่อยู่", - "relay_save_failed": "ไม่สามารถบันทึกโหนดรีเลย์", - "relay_delete_failed": "ไม่สามารถลบโหนดรีเลย์", - "relay_saved": "บันทึกโหนดรีเลย์แล้ว", - "relay_deleted": "ลบโหนดรีเลย์แล้ว", - "rule_name_value_required": "ต้องระบุชื่อกฎและค่าการจับคู่", - "rule_save_failed": "บันทึกกฎไม่สำเร็จ", - "rule_delete_failed": "ลบกฎไม่สำเร็จ", - "rule_saved": "บันทึกกฎแล้ว", - "rule_deleted": "ลบกฎแล้ว" - }, - "cross_platform": { - "title": "ความเข้ากันได้ข้ามแพลตฟอร์ม", - "tab_matrix": "เมทริกซ์ความเข้ากันได้", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "เมทริกซ์การสนับสนุนคุณสมบัติในทุกแพลตฟอร์มที่รองรับ สีเขียว = รองรับเต็มที่ สีเหลือง = บางส่วน สีเทา = ไม่พร้อมใช้งาน สีน้ำเงิน = วางแผนไว้", - "col_feature": "Feature", - "legend_full": "การสนับสนุนอย่างเต็มที่", - "legend_partial": "การสนับสนุนบางส่วน", - "legend_none": "ไม่สามารถใช้ได้", - "legend_planned": "Planned", - "platform_breakdown": "พังทลายของแพลตฟอร์ม", - "arch_breakdown": "รายละเอียดทางสถาป��ตยกรรม", - "version_breakdown": "รายละเอียดเวอร์ชัน", - "summary": "Summary", - "total_devices": "อุปกรณ์ทั้งหมด", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "เวอร์ชันไคลเอ็นต์", - "no_devices": "ยังไม่มีอุปกรณ์ที่ลงทะเบียน", - "protocols_hint": "การเจรจาต่อรองความสามารถขอ���โปรโตคอลทำให้ลูกค้าแต่ละรายได้รับเฉพาะคุณสมบัติที่รองรับเท่านั้น เซิร์ฟเวอร์จะปรับพฤติกรรมตามความสามารถที่รายงาน", - "capability_negotiation": "การเจรจาต่อรองความสามารถ", - "codec_support": "รองรับ Codec (อุปกรณ์ออนไลน์)", - "feature_support": "การสนับสนุนคุณสมบัติ (อุปกรณ์ออนไลน์)", - "no_codec_data": "ไม่มีข้อมูลตัวแปลงสัญญาณจากอุปกรณ์ออนไลน์", - "no_feature_data": "ไม่มีข้อมูลคุณสมบัติจากอุปกรณ์ออนไลน์", - "protobuf_schema": "สคีมา Protobuf ความสามารถของไคลเอ็นต์", - "diagram_client": "Client", - "diagram_server": "เซิร์ฟเวอร์ BetterDesk", - "diagram_peer": "เพียร์ระยะไกล", - "limitations_hint": "แต่ละแพลตฟอร์มมีข้อจำกัดเฉพาะที่ส่งผลต่อฟีเจอร์ที่ใช้งานได้ ตรวจสอบข้อจำกัดเหล่านี้เมื่อวางแผนการปรับใช้", - "feat_desktop_client": "ไคลเอนต์เดสก์ท็อป", - "feat_background_agent": "ตัวแทนเบื้องหลัง", - "feat_remote_target": "เป้าหมายระยะไกล", - "feat_screen_capture": "การจับภาพหน้าจอ", - "feat_input_injection": "การฉีดเข้า", - "feat_file_transfer": "การถ่ายโอนไฟล์", - "feat_clipboard_sync": "การซิงค์คลิปบอร์ด", - "feat_audio_streaming": "การสตรีมเสียง", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "การยกระดับ UAC ที่จำเป็นสำหรับการติดตั้งบริการและการฉีดอินพุตบนเดสก์ท็อปที่ปลอดภัย", - "limit_win_service": "ทำงานเป็นบริการ NSSM; ต้องใช้สิทธิ์ผู้ดูแลระบบในการติดตั้ง", - "limit_win_firewall": "กฎไฟร์วอลล์ Windows ต้องอน��ญาตพอร์ต 21115-21119 สำหรับการเชื่อมต่อรีเลย์", - "limit_linux_wayland": "ผู้แต่ง Wayland จำกัด การจับภาพหน้าจอแบบเป็นโปรแกรม ต้องมีพอร์ทัล PipeWire API", - "limit_linux_pipewire": "การจับเสียงต้องใช้ PipeWire PulseAudio ทางเลือกสำรองใช้ได้แต่มีข้อจำกัด", - "limit_linux_arm": "มี ARM64 บิวด์ให้เลือก; ตัวแปลงสัญญาณบางตัวอาจใช้การถอดรหัสซอฟต์แวร์ (ช้ากว่า)", - "limit_mac_screen": "ต้องได้รับอนุญาตในการบันทึกหน้าจอในการตั้งค่าระบบ > ความเป็นส่วนตัวและความปลอดภัย", - "limit_mac_signing": "ตัวแทนจะต้องลงนามด้วย Apple Developer ID เพื่อการจัดจำหน่าย", - "limit_mac_notarize": "การรับรองเอกสารที่จำเป็นสำหรับ macOS Gatekeeper (การจัดจำหน่ายที่ไม่ใช่ App Store)", - "limit_android_projection": "MediaProjection API ต้องได้รับความยินยอมจากผู้ใช้สำหรับการจับภาพหน้าจอแต่ละครั้ง", - "limit_android_accessibility": "การป้อนข้อมูลจำเป็นต้องมี AccessibilityService ถูกจำกัดใน Android 14+", - "limit_android_battery": "บริการพื้นหลังถูกจำกัดโดยโหมด Doze อาจต้องมีการยกเว้นการเพิ่มประสิทธิภาพแบตเตอรี่", - "limit_ios_capture": "Apple ห้ามไม่ให้จับภาพหน้าจอพื้นหลัง รองรับโหมดผู้ดูเท่านั้น", - "limit_ios_input": "ไม่อนุญาตให้ฉีดอินพุต การดูจากระยะไกลและการแชทเท่านั้น", - "limit_ios_appstore": "จัดจำหน่ายผ่าน App Store เท่านั้น TestFlight สำหรับการทดสอบเบต้า", - "limit_web_https": "WebCodecs API และ WebRTC ต้องใช้ HTTPS; HTTP กลับไปเป็น JMuxer (ตัวแปลงสัญญาณจำกัด)", - "limit_web_codec": "การสนับสนุน Codec ขึ้นอยู่กับเบราว์เซอร์ H.264 รองรับอย่างกว้างขวาง VP9/AV1 จะแตกต่างกันไป", - "limit_web_performance": "ประสิทธิภาพถูกจำกัดโดยแซนด์บ็อกซ์ของเบราว์เซอร์ ไม่มีการเร่งด้วยฮาร์ดแวร์โดยตรง", - "limit_chrome_crostini": "การสนับสนุนตัวแทนเต็มรูปแบบภายในคอนเทนเนอร์ Crostini Linux เท่านั้น", - "limit_chrome_pwa": "โหมด PWA มีคุณสมบัติเฉพาะบนเว็บเท่านั้น ไม่มีความสามารถของตัวแทนดั้งเดิม", - "limit_chrome_input": "ไม่รองรับการป้อนข้อมูลภายนอกคอนเทนเนอร์ Crostini", - "feat_session_recording": "บันทึกเซสชัน", - "feat_multi_monitor": "หลายจอภาพ", - "feat_unattended_access": "การเข้าถึงแบบไม่มีผู้ดูแล", - "limit_win_virtual_account": "บริการรันภายใต้ virtual account ที่แยกออกมาแทน LocalSystem เส้นทาง log ที่กำหนดเองอาจต้องปรับ ACL", - "limit_linux_unprivileged": "บริการรันในบัญชี 'betterdesk' ที่ไม่มีสิทธิพิเศษพร้อม systemd hardening (NoNewPrivileges, ProtectSystem=strict)" - }, - "security_audit": { - "title": "การตรวจสอบความปลอดภัย", - "tab_overview": "ภาพรวม", - "tab_events": "เหตุการณ์การตรวจสอบ", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "คะแนนความปลอดภัย", - "failed_logins": "การเข้าสู่ระบบล้มเหลว (24 ชม.)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "กุญแจเก่า (>90d)", - "security_checks": "การตรวจสอบความปลอดภัย", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket ปลอดภัย", - "enabled": "เปิดใช้งานแล้ว", - "disabled": "ปิดการใช้งาน", - "all_events": "All Events", - "event_login_failed": "การเข้าสู่ระบบล้มเหลว", - "event_login_success": "เข้าสู่ระบบสำเร็จ", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "การกำหนดค่ามีการเปลี่ยนแปลง", - "event_key_created": "สร้างคีย์แล้ว", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "ไม่พบกิจกรรมการตรวจสอบ", - "hardening_hint": "ลำดับความสำคัญของการรักษาความปลอดภัยที่เข้มงวดขึ้นสำหรับการปรับใช้ BetterDesk ของคุณ สินค้าเรียงลำดับตามความรุนแรง", - "no_hardening": "ไม่มีรายการชุบแข็งให้ใช้งาน", - "vuln_hint": "ผลการสแกนช่องโหว่ในการพึ่งพา เรียกใช้การตรวจสอบ npm เป็นประจำเพื่อรักษาการขึ้นต่อกันให้ปลอดภัย", - "no_vulns": "ไม่พบช่องโหว่ การพึ่งพาของคุณมีความปลอดภัย" - }, - "languages": { - "title": "การจัดการภาษา", - "total_languages": "ภาษาทั้งหมด", - "fully_translated": "แปลครบแล้ว", - "needs_review": "ต้องการการตรวจสอบ", - "reference_keys": "คีย์อ้างอิง", - "no_languages": "ไม่พ��ไฟล์ภาษา", - "badge_reference": "Reference", - "badge_review": "ต้องการการตรวจสอบ", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "ดูที่หายไป", - "fix_missing": "Fix Missing", - "missing_keys_for": "กุญแจที่หายไปสำหรับ", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "และ {n} เพิ่มเติม...", - "all_keys_present": "มีกุญแจทั้งหมดอยู่!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "ต้องแปลคีย์ที่ขาดหายใน {code} ด้วยตนเอง", - "no_fix_needed": "ไม่มีคีย์ที่หายไปให้แก้ไข" - }, - "resource_control": { - "title": "การควบคุมทรัพยากร", - "tab_overview": "ภาพรวม", - "tab_usb": "USB Control", - "tab_optical": "ออปติคัลไดรฟ์", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "โควต้าทรัพยากร", - "compliance_by_category": "การปฏิบัติตามตามหมวดหมู่", - "device_compliance": "การปฏิบัติตามข้อกำหนดของอุปกรณ์", - "search_devices": "ค้นหาอุปกรณ์...", - "col_device": "อุปกรณ์", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "อุปกรณ์ทั้งหมด", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "อัตราการปฏิบัติตามข้อกำหนด", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "กำหนดค่า", - "no_devices": "ไม่พบอุปกรณ์", - "usb_title": "USB การควบคุมพอร์ต", - "usb_hint": "ควบคุมการเข้าถึงอุปกรณ์จัดเก็บข้อมูล USB สำหรับอุปกรณ์ที่เลือกหรือน��ยบายเริ่มต้นทั่วทั้งองค์กร", - "usb_storage_policy": "นโยบายการจัดเก็บ USB", - "usb_whitelist": "อุปกรณ์ที่อนุญาตพิเศษ (หนึ่งรายการต่อบรรทัด)", - "usb_whitelist_hint": "VID:PID (เช่น 0781:5583)", - "usb_audit_log": "บันทึกการเชื่อมต่ออุปกรณ์ USB", - "optical_title": "การควบคุมออปติคัลไดรฟ์", - "optical_hint": "ควบคุมการเข้าถึงไดรฟ์ซีดี/ดีวีดี/บลูเรย์สำหรับอุปกรณ์ที่เลือก", - "optical_policy": "นโยบายออปติคัลไดรฟ์", - "optical_audit_log": "บันทึกการเข้าถึงออปติคัลไดรฟ์", - "monitors_title": "ติดตามการจัดการ", - "monitors_hint": "กำหนดการตั้งค่าจอภาพ รวมถึงจำนวนสูงสุด การบังคับใช้ความละเอียด ความสว่าง และตารางพลังงาน", - "monitors_max_count": "จอภาพสูงสุด (0 = ไม่จำกัด)", - "monitors_max_hint": "0 หมายถึงไม่มีขีดจำกัด", - "monitors_resolution": "ความละเอียดสูงสุด", - "monitors_brightness": "ขีดจำกัดความสว่าง", - "monitors_power_schedule": "ตารางการใช้พลังงาน", - "monitors_power_hint": "เช่น ปิด:22:00-06:00 น", - "disks_title": "การควบคุมการเข้าถึงดิสก์", - "disks_hint": "กำหนดค่านโยบายการเข้าถึงดิสก์ รวมถึงโหมดอ่านอย่างเดียว การบังคับใช้การเข้ารหัส และการมองเห็นพาร์ติชัน", - "disks_readonly": "บังคับโหมดอ่านอย่างเดียว", - "disks_encryption": "ต้องมีการเข้ารหัส (BitLocker/LUKS)", - "disks_smart": "เปิดใช้งาน S.M.A.R.T. การตรวจสอบ", - "disks_hidden": "พาร์ติชันที่ซ่อนอยู่", - "disks_hidden_hint": "อักษรระบุไดรฟ์หรือจุดต่อเชื่อมที่คั่นด้วยเครื่องหมายจุลภาค", - "quotas_title": "โควต้าทรัพยากร", - "quotas_hint": "ตั้งค่า CPU, RAM, แบนด์วิธ และโควต้าดิสก์ต่อผู้ใช้สำหรับอุปกรณ์ที่เลือก", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "ขีดจำกัดแบนด์วิธ (Mbps)", - "quotas_bandwidth_hint": "0 = ไม่จำกัด", - "quotas_disk_quota": "โควต้าดิสก์ (GB)", - "quotas_disk_hint": "0 = ไม่จำกัด", - "quotas_process_whitelist": "ดำเนินการ Whitelist (หนึ่งรายการต่อบรรทัด)", - "quotas_process_hint": "เช่น chrome.exe, รหัส.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "รายการที่อนุญาตเท่านั้น", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "อัพเดตซอฟต์แวร์", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "เวอร์ชันที่ติดตั้ง", - "latest_version": "Latest version", - "status": "Status", - "check_now": "ตรวจสอบการอัปเดต", - "checking": "Checking…", - "up_to_date": "ถึงวันที่", - "update_available": "อัปเดตพร้อมใช้งาน", - "changelog": "Release Notes", - "no_changelog": "ไม่มีบันทึกประจำรุ่น", - "files_changed": "ไฟล์มีการเปลี่ยนแปลง", - "files": "ไฟล์", - "changes_unavailable": "ไม่สามารถโหลดรายการเปลี่ยนแปลงไฟล์ได้ คุณยังคงสามารถติดตั้งการอัปเดตได้", - "create_backup": "สร้างการสำรองข้อมูลก่อนที่จะอัปเดต", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "กำลังติดตั้งการอัปเดต...", - "creating_backup": "กำลังสร้างข้อมูลส��รอง...", - "downloading": "กำลังดาวน์โหลดไฟล์...", - "install_success": "ติดตั้งการอัปเดตสำเร็จแล้ว คอนโซลกำลังรีสตาร์ท...", - "install_failed": "การติดตั้งการอัปเดตล้มเหลว", - "restarting": "กำลังรอคอนโซลรีสตาร์ท...", - "restart_complete": "คอนโซลรีสตาร์ทสำเร็จ", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "ไม่ได้เลือกเวอร์ชันอัปเดต ตรวจสอบการอัปเดตก่อน", - "backups_title": "อัปเดตข้อมูลสำ���อง", - "backups_desc": "การสำรองข้อมูลล่วงหน้าที่สร้างขึ้นโดยอัตโนมัติก่อนการอัปเดตแต่ละครั้ง", - "no_backups": "ไม่พบข้อมูลสำรองการอัปเดต", - "restore": "Restore", - "restore_confirm": "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนจากข้อมูลสำรองนี้ ไฟล์ที่เปลี่ยนแปลงจะถูกเขียนทับ", - "restore_success": "กู้คืนข้อมูลสำรองเรียบร้อยแล้ว คอนโซลกำลังรีสตาร์ท...", - "baseline_set": "ชุดพื้นฐาน", - "commits_behind": "กระทำการอยู่เบื้องหลัง", - "total_files": "รวมไฟล์", - "applied": "Applied", - "failed": "ล้มเหลว", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "ไปที่เซิร์ฟเวอร์", - "component_agent": "Agent", - "component_scripts": "สคริปต์และ Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "กำลังตรวจสอบไป...", - "go_not_found": "ไปไม่ได้ติดตั้ง", - "go_check_failed": "ไม่สามารถตร���จสอบความพร้อมใช้งานของ Go ได้", - "server_building": "กำลังรวบรวม Go server… การดำเนินการนี้อาจใช้เวลาสักครู่", - "server_built": "คอมไพล์เซิร์ฟเวอร์ไบนารีแล้ว", - "server_build_failed": "การรวบรวมเซิร์ฟเวอร์ล้มเหลว", - "server_deployed": "ไบนารีเซิร์ฟเวอร์ปรับใช้แล้ว", - "server_deploy_failed": "การปรับใช้เซิร์ฟเวอร์ล้มเหลว", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "กำลังดาวน์โหลดแหล่งที่มาของเซิร์ฟเวอร์...", - "delete": "ลบ", - "delete_confirm": "ลบข้อมูลสำรอง {name} อย่างถาวรหรือไม่ สิ่งนี้ไม่สามารถยกเลิกได้", - "delete_success": "ลบข้อมูลสำรองแล้ว", - "delete_failed": "ลบข้อมูลสำรองไม่สำเร็จ", - "retention_label": "เก็บข้อมูลสำรองล่าสุดไว้ N", - "retention_hint": "ข้อมูลสำรองที่เก่ากว่าจะถูกลบโดยอัตโนมัติหลังจากการอัพเดตแต่ละครั้ง ใช้ 0 เพื่อเก็บข้อมูลสำรองทั้งหมด", - "retention_saved": "บันทึกการตั้งค่าการเก็บรักษาแล้ว", - "retention_invalid": "การเก็บรักษาต้องเป็นจำนวนเต็มระหว่าง 0 ถึง 1,000", - "retention_required_for_prune": "ตั้งค่าการเก็บรักษาที่มากกว่า 0 ก่อน", - "prune_now": "Apply now", - "prune_confirm": "เก็บเฉพาะข้อมูลสำรองล่าสุดของ {n} แล้วลบส่วนที่เหลือออกหรือไม่", - "prune_done": "ตัดการสำรองข้อมูล {n} แล้ว", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "วิธีการอัพเดต", - "strategy_download": "ดาวน์โหลดไบนารีที่สร้างไว้ล่วงหน้า", - "strategy_compile": "เรียบเรียงจากแหล่งที่มา", - "both_available": "ดาวน์โหลดและคอมไพล์", - "download_available": "ดาวน์โหลดได้", - "no_method": "ไม่มีวิธีการอัพเดต", - "no_release": "No release", - "available": "มีจำหน่าย", - "server_downloading": "กำลังดาวน์โหลดไบนารีเซิร์ฟเวอร์...", - "server_downloaded": "ดาวน์โหลดไบนารีเซิร์ฟเวอร์แล้ว", - "server_download_failed": "การดาวน์โหลดไบนารีของเซิร์ฟเวอร์ล้มเหลว", - "server_download_note": "ไบนารีที่สร้างไว้ล่วงหน้าจะถูกดาวน์โหลดจาก GitHub Releases โดยปกติจะใช้เวลาไม่ถึงหนึ่งนาที", - "install_go_hint": "ติดตั้ง Go จาก https://go.dev/dl/ เพื่อเปิดใช้งานการคอมไพล์ หรือเผยแพร่รีลีสด้วยไบนารีที่สร้างไว้ล่วงหน้า", - "strategy_install_go": "ติดตั้ง Go และคอมไพล์อัตโนมัติ", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "พร้อมสร้างใหม่อัตโนมัติแล้ว", - "toolchain_ready": "ติดตั้ง Toolchain แล้ว", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "กำลังดาวน์โหลด Go toolchain...", - "toolchain_failed": "การติดตั้ง toolchain ล้มเหลว", - "modal_title": "กำลังติดตั้งการอัปเดต", - "modal_done_title": "การอัปเดตเสร���จสมบูรณ์", - "modal_close": "ปิด", - "modal_reload_now": "โหลดคอนโซลอีกครั้ง", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "ไฟล์คอนโซล", - "phase_server": "ขั้นตอนเซิร์ฟเวอร์", - "phase_restart": "รีสตาร์ท", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "ข้ามการสำรองข้อมูล (ตามตัวเลือกของผู้ใช้)", - "server_skipped": "Go server ข้ามไป", - "server_not_selected": "Go server not selected", - "server_processing": "กำลังประมวลผลการอัปเดต Go server...", - "no_restart_needed": "ไม่จำเป็นต้องรีสตาร์ท", - "complete": "ใช้การอัปเดตแล้ว", - "complete_summary": "ใช้การอัปเดตสำเร็จแล้ว", - "complete_with_errors": "การอัปเดตเสร็จสิ้นแล้ว แต่บางขั้นตอนล้มเหลว ดูรายละเอียดด้านล่าง", - "modal_done_with_errors_title": "การอัปเดตเสร็จสิ้นโดยมีข้อผิดพลาด", - "console_will_restart": "กระบวนการคอนโซลจะรีสตาร์ททันที...", - "restart_complete_msg": "คอนโซลรีสตาร์ทเสร็จแล้ว คลิกโหลดซ้ำเพื่อโหลดเวอร์ชันใหม่ หน้าเว็บจะโหลดซ้ำโดยอัตโนมัติใน 8 วินาที", - "refresh_recommended": "เนื้อหาคงที่มีการเปลี่ยนแปลง — โหลดหน้าซ้ำเพื่อดู UI ใหม่", - "confirm_title": "ใช้การอัปเดต", - "confirm_with_backup": "ข้อมูลสำรองล่วงหน้าจะถูกสร้างขึ้นโดยอัตโนมัติ", - "confirm_no_backup": "จะไม่มีการสร้างการสำรองข้อมูล (โปรดดำเนินการด้วยความเสี่ยงของคุณเอง)", - "server_stale_title": "ไบนารีของเซิร์ฟเวอร์ล้าสมัย", - "server_stale_desc": "ซอร์ส Go server ได้รับการอัพเดตแล้ว แต่ไบนารี่ที่กำลังรันอยู่ไม่ได้ถูกสร้างใหม่ สร้างใหม่ทันทีเพื่อใช้การอัปเดตความปลอดภัยและไลบรารี", - "rebuild_server": "สร้างไบนารีเซิร์ฟเวอร์ใหม่", - "rebuilding_server": "กำลังสร้างใหม่...", - "rebuild_server_success": "ไบนารีของเซิร์ฟเวอร์สร้างใหม่และรีสตาร์ท", - "rebuild_server_failed": "การสร้างไบนารีของเซิร์ฟเวอร์ใหม่ล้มเหลว" - }, - "permissions": { - "title": "สิทธิ์", - "subtitle": "จัดการสิทธิ์ตามบทบาทและการแทนที่แบบกำหนดเอง", - "info_title": "สิทธิ์ทำงานอย่างไร", - "info_desc": "แต่ละบทบาทมีสิทธิ์เริ่มต้น คุณสามารถเพิ่มหรือลบสิทธิ์แต่ละรายการต่อบทบาทได้โดยการสลับสิทธิ์ด้านล่าง การแทนที่แบบกำหนดเองจะถูกไฮไลต์ไว้และสามารถเปลี่ยนกลับเป็นค่าเริ่มต้นได้ตลอดเวลา", - "select_role": "เลือกบทบาท", - "select_role_placeholder": "เลือกบทบาท...", - "reset_overrides": "รีเซ็ตการแทนที่ทั้งหมด", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "ระดับเซิร์ฟเวอร์", - "custom": "Custom", - "default": "Default", - "revert": "เปลี่ยนกลับเป็นค่าเริ่มต้น", - "saved": "อัปเดตสิทธิ์แล้ว", - "reverted": "เปลี่ยนกลับเป็นค่าเริ่มต้น", - "all_reverted": "เปลี่ยนกลับการแทนที่ทั้งหมดแล้ว", - "confirm_reset": "รีเซ็ตการแทนที่แบบกำหนดเองทั้งหมดสำหรับบทบาทนี้เป็นค่าเริ่มต้นหรือไม่", - "empty_title": "เลือกบทบาท", - "empty_desc": "เลือกบทบาทจากเมนูแบบเลื่อนลงด้านบนเพื่อดูและจัดการสิทธิ์", - "locked_title": "Super Admin", - "locked_desc": "ผู้ดูแลระบบขั้นสูงมีสิทธิ์ทั้งหมดตามค่าเริ่มต้นและไม่สามารถปรับแต่งได้", - "cat_device": "อุปกรณ์", - "cat_user": "Users", - "cat_server": "เซิร์ฟเวอร์", - "cat_org": "องค์กรต่างๆ", - "cat_audit": "การตรวจสอบและติดตาม", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "ดูอุปกรณ์", - "perm_device_connect": "เชื่อมต่อกับอุปกรณ์", - "perm_device_edit": "แก้ไขอุปกรณ์", - "perm_device_delete": "ลบอุปกรณ์", - "perm_device_ban": "แบน / ยกเลิกการแบนอุปกรณ์", - "perm_device_change_id": "เปลี่ยนรหัสอุปกรณ์", - "perm_user_view": "ดูผู้ใช้", - "perm_user_create": "สร้างผู้ใช้", - "perm_user_edit": "แก้ไขผู้ใช้", - "perm_user_delete": "ลบผู้ใช้", - "perm_server_config": "การกำหนดค่าเซิร์ฟเวอร์", - "perm_server_keys": "จัดการคีย์ API", - "perm_org_create": "สร้างองค์กร", - "perm_org_edit": "แก้ไของค์กร", - "perm_org_delete": "ลบองค์กร", - "perm_org_manage_users": "จัดการผู้ใช้ในองค์กร", - "perm_org_manage_devices": "จัดการอุปกรณ์ขององค์กร", - "perm_audit_view": "ดูบันทึกการตรวจสอบ", - "perm_metrics_view": "ดูตัวชี้วัด", - "perm_blocklist_edit": "แก้ไขรายการบล็อก", - "perm_cdap_view": "ดูอุปกรณ์ CDAP", - "perm_cdap_command": "ส่งคำสั่ง CDAP", - "perm_cdap_terminal": "การเข้าถึงเทอร์มินัล CDAP", - "perm_cdap_files": "การเข้าถึงไฟล์ CDAP", - "perm_enrollment_manage": "จัดการการลงทะเบียน", - "perm_enrollment_approve": "อนุมัติการลงทะเบียน", - "perm_chat_access": "Chat access", - "perm_branding_edit": "แก้ไขการสร้างแบรนด์", - "perm_server_attestation": "การรับรองประสิทธิภาพเซิร์ฟเวอร์" - }, - "notifications": { - "title": "การแจ้งเตือน", - "empty": "ไม่มีการแจ้งเตือนใหม่", - "mark_all_read": "ทำเครื่องหมายว่าอ่านแล้วทั้งหมด", - "see_all": "ดูคำขอความช่วยเหลือทั้งหมด", - "help_request": "ขอความช่วยเหลือ", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "ปรับคอนโซลให้เหมาะกับความต้อง��ารในการมองเห็น การเคลื่อนไหว และการอ่านของคุณ", - "close": "ปิดเมนูการเข้าถึง", - "profiles": "โปรไฟล์ด่วน", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "ข้อความขนาดใหญ่ คอนทราสต์และโฟกัสที่ชัดเจน", - "profile_dyslexia": "ความสะดวกสบายในการอ่าน", - "profile_dyslexia_hint": "แบบอักษรที่อ่านได้และระยะห่างที่กว้างขึ้น", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "ลดการเปลี่ยนและหยุดภาพเคลื่อนไหวชั่วคราว", - "profile_color_assist": "รองรับสี", - "profile_color_assist_hint": "ฟิลเตอร์สี ป้ายกำกับ และลิงก์ที่ไฮไลต์", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "ระยะห่างระหว่างตัวอักษร", - "word_spacing": "ระยะห่างระหว่างคำ", - "readable_font": "แบบอักษรที่อ่านได้", - "readable_font_hint": "ใช้รูปทรงตัวอักษรที่กว้างและคุ้นเคย", - "dyslexia_spacing": "ระยะห่างดิสเล็กเซีย", - "dyslexia_spacing_hint": "เพิ่มระยะห่างพิเศษสำหรับข้อความยาว", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "คอนทราสต์สูงมืด", - "contrast_high_light": "แสงคอนทราสต์สูง", - "contrast_yellow_black": "สีเหลืองบนพื้นสีดำ", - "color_filter": "ตัวกรองการมองเห็นสี", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "ความอิ่มตัวของสี", - "underline_links": "ขีดเส้นใต้ลิงก์", - "underline_links_hint": "ทำให้มองเห็นลิงก์ได้โดยไม่ต้องพึ่งสี", - "highlight_links": "เน้นการดำเนินการ", - "highlight_links_hint": "โครงร่างลิงก์และปุ่มต่างๆ", - "highlight_headings": "เน้นส่วนหัว", - "highlight_headings_hint": "ทำเครื่องหมายชื่อส่วนด้วยแถบสี", - "hide_media": "Dim media", - "hide_media_hint": "หรี่แสงรูปภาพ วิดีโอ และแคนวาส", - "interaction": "Interaction", - "strong_focus": "โฟกัสที่แข็งแกร่ง", - "strong_focus_hint": "แสดงวงแหวนปรับโฟกัสของแป้นพิมพ์ขนาดใหญ่", - "large_cursor": "เคอร์เซอร์ขนาดใหญ่", - "large_cursor_hint": "ใช้ตัวชี้คอนทราสต์สูงที่ใหญ่กว่า", - "reduce_motion": "ลดการเคลื่อนไหว", - "reduce_motion_hint": "ลดระยะเวลาการเปลี่ยนภาพและการเลื่อนอย่างราบรื่น", - "pause_animations": "หยุดภาพเคลื่อนไหวชั่วคราว", - "pause_animations_hint": "หยุดการเคลื่อนไหวของภาพแบบวนซ้ำ", - "reading_guide": "คู่มือการอ่าน", - "reading_guide_hint": "ตามด้วยเส้นสว่างตามตัวชี้", - "reading_mask": "หน้ากากอ่านหนังสือ", - "reading_mask_hint": "หรี่เนื้อหาด้านบนและด้านล่างของตัวชี้", - "preview": "Preview", - "preview_title": "การแสดงตัวอย่างพื้นที่ทำงานของผู้ปฏิบัติงาน", - "preview_text": "ตรวจสอบว่าข้อความ ลิงก์ ตัวควบคุม และป้ายกำกับสถานะอ่านได้ง่ายหรือไม่ก่อนปิดเมนูนี้", - "preview_link": "ลิงค์รายละเอียดอุปกรณ์", - "preview_status": "Online", - "preview_button": "การกระทำหลัก", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "จัดการเซิร์ฟเวอร์", - "subtitle": "ระนาบควบคุมเ��มือนห้องนักบินสำหรับโฮสต์คอนโซล BetterDesk (เบต้า)", - "beta_tooltip": "คุณลักษณะเบต้า — อยู่ระหว่างการพัฒนา", - "notice_title": "คุณลักษณะเบต้า", - "notice_body": "เครื่องมือเหล่านี้ทำงานบนโฮสต์ที่คอนโซลกระบวนการ BetterDesk ทำงานอยู่ การดำเนินงานทั้งหมดได้รับการตรวจสอบ ขอบเขตฟีเจอร์จะขยายออกไปในรุ่นต่อๆ ไป", - "tab_overview": "ภาพรวม", - "tab_terminal": "เทอร์มินัล", - "tab_files": "ไฟล์", - "tab_services": "บริการ", - "cpu": "CPU", - "memory": "หน่วยความจำ", - "load": "โหลดเฉลี่ย", - "disks": "ดิสก์", - "history": "ประวัติ (60 ตัวอย่างสุดท้าย)", - "host_info": "Host info", - "cores": "cores", - "uptime": "เวลาทำงาน", - "no_disks": "ไม่มีข้อมูลดิสก์", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY ใช้ได้", - "term_connect": "Connect", - "term_disconnect": "Disconnect", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "ข้อผิดพลาดในการเชื่อมต่อ", - "term_warning": "คำสั่งทำงานในฐานะผู้ใช้ที่เป็นเจ้าของกระบวนการคอนโซล เพิ่มกฎ sudoers เพื่อเปิดใช้งานการยกระดับ", - "term_hint": "เคล็ดลับ: พิมพ์ `sudo -i` เพื่อยกระดับ (ต้องมีการกำหนดค่า sudoers)", - "term_lib_failed": "โหลดไลบรารีเทอร์มินัลไม่สำเร็จ", - "files_up": "ขึ้นมาหนึ่งระดับ", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "ไดเร็กทอรีว่างเปล่า", - "files_error": "ไม่สามารถแสดงรายการไดเร็กทอรี", - "read_failed": "ไม่สามารถอ่านไฟล์ได้", - "save_failed": "ไม่สามารถบันทึกไฟล์ได้", - "rename_failed": "การเปลี่ยนชื่อล้มเหลว", - "delete_failed": "ลบไม่สำเร็จ", - "delete_confirm": "ลบรายการนี้ใช่ไหม", - "mkdir_prompt": "ชื่อโฟลเดอร์ใหม่:", - "mkdir_failed": "ไม่สามารถสร้างโฟลเดอร์ได้", - "file_saved": "บันทึกไฟล์แล้ว", - "binary_warn": "ไฟล์ไบนารี — ดูตัวอย่างเท่านั้น", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "บริการค้นหา...", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "ไม่พบบริการ", - "svc_load_failed": "โหลดบริการไม่สำเร็จ", - "svc_action_failed": "การดำเนินการล้มเหลว", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "รีสตาร์ท", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "ดาวน์โหลดตัวแทน BetterDesk", - "choose_platform": "เลือกแพลตฟอร์มของคุณ", - "choose_platform_hint": "เลือกตัวติดตั้งที่ตรงกับระบบปฏิบัติการของคุณ", - "download": "ดาวน์โหลด", - "building": "อาคาร...", - "failed": "การสร้างล้มเหลว", - "need_help": "ต้องการความช่วยเหลือ?", - "powered_by": "ขับเคลื่อนโดย" - }, - "server_attestation": { - "title": "การรับรองประสิทธิภาพเซิร์ฟเวอร์", - "subtitle": "การทดสอบ benchmark ประสิทธิภาพเพื่อกำหนดความจุการเชื่อมต่อพร้อมกันที่ระดับ CPU, RAM และดิสก์ 80%", - "warning_title": "การทดสอบโหลด", - "warning_body": "การทดสอบ benchmark จำลองการเชื่อมต่อ WebSocket แบบขนานกับ signal และ relay server ควรรันในช่วงนอกชั่วโมงเร่งด่วน — การทดสอบนี้สร้างโหลดให้ production", - "run_benchmark": "รัน Benchmark", - "abort": "ยกเลิก", - "download_report": "ดาวน์โหลดรายงาน JSON", - "last_test": "การทดสอบล่าสุด", - "no_test_yet": "ยังไม่มีการรัน benchmark", - "max_connections": "การเชื่อมต่อสูงสุด", - "threshold_80": "เกณฑ์ 80% — เมตริกสุดท้าย", - "disk": "ดิสก์", - "ramp_chart": "กราฟการเพิ่มโหลด", - "connections": "การเชื่อมต่อ", - "connections_short": "เชื่อมต่อ", - "tier_guide_title": "แต่ละระดับหมายความว่าอย่างไร?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "การเชื่อมต่อพร้อมกัน 1–25 รายการ — VPS ขนาดเล็ก (1–2 vCPU, 2–4 GB RAM)", - "tier_iron_desc": "การเชื่อมต่อ 26–75 รายการ — เซิร์ฟเวอร์ระดับกลาง (2–4 vCPU, 4–8 GB RAM)", - "tier_platinum_desc": "การเชื่อมต่อ 76–200 รายการ — เซิร์ฟเวอร์ประสิทธิภาพสูง (4–8 vCPU, 8–16 GB RAM)", - "tier_titanium_desc": "การเชื่อมต่อ 201–400 รายการ — โครงสร้างพื้นฐานระดับองค์กร (8+ vCPU, 16–32 GB RAM)", - "tier_obsidian_desc": "การเชื่อมต่อ 401+ รายการ — ระดับ Turbo: ฮาร์ดแวร์เฉพาะ, 16+ vCPU, 32+ GB RAM, NVMe", - "docker_note": "หมายเหตุ: ใน Docker เมตริก CPU/RAM อาจสะท้อนขีดจำกัดของ container ไม่ใช่ host จริง", - "badge_tooltip": "BetterDesk Server Attestation — การรับรองประสิทธิภาพเซิร์ฟเวอร์", - "confirm_run": "Benchmark นี้จะทดสอบโหลดเซิร์ฟเวอร์ด้วยการเชื่อมต่อจำลอง ต้องการดำเนินการต่อ?", - "starting": "กำลังเริ่มต้น…", - "complete": "Benchmark เสร็จสิ้น", - "signal_peers": "เพียร์สัญญาณ", - "relay_sessions": "เซสชันรีเลย์", - "page_error": "โหลดหน้า Server Attestation ล้มเหลว", - "mode_estimated": "ค่าประมาณ (WebSocket ไม่สามารถเข้าถึงได้)", - "incomplete": "Benchmark เสร็จสิ้นแต่ไม่ได้รับระดับที่ถูกต้อง" + "form": { + "cancel": "ยกเลิก" } + } } diff --git a/web-nodejs/lang/tr.json b/web-nodejs/lang/tr.json index 29d7e669..8134bd40 100644 --- a/web-nodejs/lang/tr.json +++ b/web-nodejs/lang/tr.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Turkish", - "native_name": "Türkçe", - "flag": "🇹🇷", - "needs_review": true + "_meta": { + "name": "Turkish", + "native_name": "Türkçe", + "flag": "🇹🇷", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Yükleniyor...", + "confirm": "Onayla", + "alert": "Alert", + "prompt": "Değeri girin", + "copied": "Panoya kopyalandı", + "save": "Kaydet", + "saved": "Kaydedildi", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "İptal", + "delete": "Sil", + "actions": "Actions", + "close": "Kapat", + "required": "gerekli", + "name_required": "Ad gerekli", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "Geçersiz JSON", + "field_required": "{field} gereklidir", + "back": "Geri", + "edit": "Düzenle", + "yes": "Evet", + "no": "Hayır" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "Kontrol Paneli", + "devices": "Cihazlar", + "keys": "Keys", + "generator": "Generator", + "settings": "Ayarlar", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Yardım İstekleri", + "activity": "Activity", + "automation": "Otomasyon", + "file_transfer": "Dosya Aktarımı", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "Yönetim", + "toggle_sidebar": "Kenar çubuğunu aç/kapat", + "cdap": "CDAP Cihazlar", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "Cihaz Jetonları", + "organizations": "Organizasyonlar", + "policies": "Politikalar", + "attestation": "Attestation", + "remote": "Uzak Masaüstü", + "toolkit": "Toolkit", + "security_audit": "Güvenlik Denetimi", + "languages": "Languages", + "resource_control": "Kaynak Kontrolü", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "Kenar çubuğunu genişlet", + "toggle_theme": "Temayı değiştir", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "İzinler", + "server_management": "Sunucu Yönetimi", + "server_attestation": "Sunucu Performans Onayı", + "commercialization": "Ticarileştirme" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "BetterDesk Konsolunda oturum açın", + "username": "Kullanıcı adı", + "username_placeholder": "Kullanıcı adını girin", + "password": "Şifre", + "password_placeholder": "Şifreyi girin", + "remember_me": "Remember me", + "login_failed": "Giriş başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin.", + "invalid_credentials": "Geçersiz kullanıcı adı veya şifre.", + "username_collision": "Bu kullanıcı adına sahip yerel bir hesap zaten mevcut. Yerel şifrenizle giriş yapın veya yöneticiden çakışan hesabı yeniden adlandırmasını ya da kaldırmasını isteyin.", + "fill_all_fields": "Lütfen tüm alanları doldurun", + "logout_confirm": "Oturumu kapatmak istediğinizden emin misiniz?", + "change_password": "Şifreyi Değiştir", + "password_required": "Şifre gerekli", + "totp_title": "İki Faktörlü Kimlik Doğrulama", + "totp_subtitle": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Bunun yerine bir kurtarma kodu kullanın", + "totp_use_code": "Bunun yerine kimlik doğrulama kodunu kullanın", + "totp_recovery_code": "Kurtarma Kodu", + "totp_back_to_login": "Girişe geri dön", + "totp_invalid_code": "Geçersiz doğrulama kodu. Lütfen tekrar deneyin.", + "totp_enter_code": "Lütfen 6 haneli kodu girin", + "totp_enter_recovery": "Lütfen bir kurtarma kodu girin", + "totp_session_expired": "Oturumun süresi doldu. Lütfen tekrar giriş yapın.", + "totp_already_enabled": "İki faktörlü kimlik doğrulama zaten etkin", + "pro_only_account": "Bu hesap yalnızca RustDesk masaüstü istemcisi içindir. Giriş yapmak için lütfen RustDesk uygulamasını kullanın.", + "passwords_mismatch": "Şifreler eşleşmiyor", + "or": "veya", + "login_sso": "SSO ile oturum açın", + "login_sso_with": "{{provider}} ile oturum açın", + "oidc_denied": "Erişim kimlik sağlayıcı tarafından reddedildi.", + "oidc_invalid": "Geçersiz OIDC geri araması. Lütfen tekrar deneyin.", + "oidc_failed": "OIDC kimlik doğrulaması başarısız oldu. Lütfen tekrar deneyin.", + "oidc_error": "SSO oturum açma işlemi sırasında bir hata oluştu.", + "oidc_no_account": "Hesabınız bulunamadı ve otomatik kayıt devre dışı bırakıldı.", + "totp_rate_limited": "Çok fazla deneme. Lütfen daha sonra tekrar deneyin.", + "emergency_mode_banner": "Go server erişilemiyor — acil durum modunda çalışıyor (yalnızca yönetici, sınırlı işlevsellik)" + }, + "dashboard": { + "title": "Kontrol Paneli", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Toplam Cihazlar", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Aktif Bağlantılar", + "offline_devices": "Offline", + "server_status": "Sunucu Durumu", + "quick_actions": "Hızlı Eylemler", + "manage_devices": "Bağlı cihazları yönetin", + "view_keys": "Sunucu anahtarlarını görüntüle", + "generate_config": "İstemci yapılandırması oluştur", + "server_settings": "Ayarları yapılandırın", + "greeting_morning": "Günaydın {name}", + "greeting_afternoon": "İyi günler, {name}", + "greeting_evening": "İyi akşamlar {name}", + "greeting_night": "İyi geceler {name}", + "health_overview": "Sağlığa Genel Bakış", + "devices_online": "Çevrimiçi Cihazlar", + "active_alerts": "Aktif Uyarılar", + "recent_connections": "Toplam Cihazlar", + "server_uptime": "Sunucu Çalışma Süresi", + "activity_feed": "Son Etkinlik", + "no_recent_activity": "Yakın zamanda etkinlik yok", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "İzleme widget'larına sahip çok pencereli bir çalışma alanı için Masaüstü Modunu deneyin.", + "tip_keyboard_shortcuts": "Hızlı arama komut paletini açmak için herhangi bir yerde Ctrl+K tuşlarına basın.", + "tip_address_book": "RustDesk istemcisinden oturum açarak adres defterinizi cihazlar arasında senkronize edin.", + "tip_2fa": "Ekstra hesap güvenliği için Ayarlar'da İki Faktörlü Kimlik Doğrulamayı etkinleştirin.", + "tip_bulk_actions": "Birden fazla cihaz seçin ve bunları aynı anda yönetmek için toplu işlemleri kullanın.", + "tip_theme": "Kenar çubuğu ayarlarında Koyu ve Açık temalar arasında geçiş yapın.", + "tip_cdap": "IoT cihazlarını ve endüstriyel sensörleri CDAP ağ geçidi aracılığıyla bağlayın.", + "tip_tutorials": "Etkileşimli eğitimler için sağ alt köşedeki yardım düğmesine tıklayın." + }, + "devices": { + "title": "Cihazlar", + "id": "ID", + "hostname": "Hostname", + "username": "Kullanıcı adı", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Oluşturuldu", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Cihazları ara...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Senkronizasyon Durumu", + "sync_success": "Durum başarıyla senkronize edildi", + "empty_title": "Hiçbir cihaz bulunamadı", + "empty_text": "Mevcut filtrelerinizle eşleşen cihaz yok", + "edit_title": "Cihaz Detayları", + "delete_title": "Cihazı Sil", + "delete_confirm": "{id} cihazını silmek istediğinizden emin misiniz?", + "delete_warning": "Bu cihazı kalıcı olarak silmek üzeresiniz:", + "delete_permanent": "Bu eylem geri alınamaz. Bu cihazla ilişkili tüm veriler veritabanından kalıcı olarak kaldırılacaktır.", + "delete_success": "Cihaz başarıyla silindi", + "revoke_option": "Cihazı iptal et", + "revoke_hint": "Cihaz kimliğini engelleyin ve etkin bağlantıların bağlantısını kesin", + "revoke_success": "Cihaz başarıyla iptal edildi", + "details": "Cihaz Detayları", + "ban_title": "Cihazı Yasakla", + "ban_confirm": "{id} cihazını yasaklamak istediğinizden emin misiniz?", + "ban_success": "Cihaz başarıyla yasaklandı", + "unban_title": "Cihazın Yasağını Kaldır", + "unban_confirm": "{id} cihazının yasağını kaldırmak istediğinizden emin misiniz?", + "unban_success": "Cihazın yasağı başarıyla kaldırıldı", + "change_id": "Change ID", + "change_id_title": "Cihaz Kimliğini Değiştir", + "new_id": "New ID", + "change_id_hint": "Yalnızca 6-16 karakter, harf, rakam, tire ve alt çizgi", + "change_id_success": "Cihaz kimliği başarıyla değiştirildi", + "id_length_error": "Kimlik 6-16 karakter uzunluğunda olmalıdır", + "id_format_error": "Kimlik yalnızca harf, rakam, tire ve alt çizgi içerebilir", + "bulk_delete_title": "Birden Fazla Cihazı Sil", + "bulk_delete_confirm": "{count} cihazlarını silmek istediğinizden emin misiniz?", + "bulk_delete_success": "{count} cihazları başarıyla silindi", + "columns": "Columns", + "toggle_columns": "Görünür sütunları değiştir", + "not_found": "Cihaz bulunamadı", + "delete_failed": "Cihaz silinemedi", + "change_id_failed": "Cihaz kimliği değiştirilemedi", + "invalid_id": "Geçersiz cihaz kimliği (6-16 karakter gereklidir)", + "invalid_id_format": "Geçersiz kimlik biçimi (yalnızca harfler, sayılar, tireler, alt çizgiler)", + "id_exists": "Cihaz Kimliği zaten mevcut", + "no_selection": "Hiçbir cihaz seçilmedi", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "Erişim Politikası", + "unattended_access": "Katılımsız Erişim", + "enable_unattended": "Katılımsız erişimi etkinleştir", + "access_password": "Erişim Şifresi", + "password_configured": "Şifre seti", + "no_password": "Şifre yok", + "new_password": "Yeni şifre (güncel kalması için boş bırakın)", + "clear_password": "Şifreyi temizle", + "access_schedule": "Erişim Planı", + "enable_schedule": "Zamana dayalı erişimi etkinleştir", + "allowed_days": "İzin verilen günler", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "İzin Verilen Operatörler", + "all_operators": "Tüm operatörler (boş bırakın)", + "operators_hint": "Virgülle ayrılmış kullanıcı adları. Tüm operatörlere izin vermek için boş bırakın.", + "last_updated_by": "En son güncelleyen:", + "access_policy_saved": "Erişim politikası kaydedildi", + "tabs": { + "overview": "Genel Bakış", + "hardware": "Hardware", + "metrics": "Metrikler", + "connections": "Bağlantılar", + "audit": "Audit", + "info": "Info", + "history": "Tarih" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Yük Ortalaması", + "network": "Ağ Adaptörleri", + "no_data": "Donanım verisi yok", + "title": "Donanım Bilgileri", + "gpu": "Graphics Card" }, - "common": { - "loading": "Yükleniyor...", - "confirm": "Onayla", - "alert": "Alert", - "prompt": "Değeri girin", - "copied": "Panoya kopyalandı", - "save": "Kaydet", - "saved": "Kaydedildi", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "İptal", - "delete": "Sil", - "actions": "Actions", - "close": "Kapat", - "required": "gerekli", - "name_required": "Ad gerekli", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "Geçersiz JSON", - "field_required": "{field} gereklidir", - "back": "Geri", - "edit": "Düzenle", - "yes": "Evet", - "no": "Hayır" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "Kontrol Paneli", - "devices": "Cihazlar", - "keys": "Keys", - "generator": "Generator", - "settings": "Ayarlar", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Yardım İstekleri", - "activity": "Activity", - "automation": "Otomasyon", - "file_transfer": "Dosya Aktarımı", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "Yönetim", - "toggle_sidebar": "Kenar çubuğunu aç/kapat", - "cdap": "CDAP Cihazlar", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "Cihaz Jetonları", - "organizations": "Organizasyonlar", - "policies": "Politikalar", - "attestation": "Attestation", - "remote": "Uzak Masaüstü", - "toolkit": "Toolkit", - "security_audit": "Güvenlik Denetimi", - "languages": "Languages", - "resource_control": "Kaynak Kontrolü", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "Kenar çubuğunu genişlet", - "toggle_theme": "Temayı değiştir", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "İzinler", - "server_management": "Sunucu Yönetimi", - "server_attestation": "Sunucu Performans Onayı" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "BetterDesk Konsolunda oturum açın", - "username": "Kullanıcı adı", - "username_placeholder": "Kullanıcı adını girin", - "password": "Şifre", - "password_placeholder": "Şifreyi girin", - "remember_me": "Remember me", - "login_failed": "Giriş başarısız oldu. Lütfen kimlik bilgilerinizi kontrol edin.", - "invalid_credentials": "Geçersiz kullanıcı adı veya şifre.", - "username_collision": "Bu kullanıcı adına sahip yerel bir hesap zaten mevcut. Yerel şifrenizle giriş yapın veya yöneticiden çakışan hesabı yeniden adlandırmasını ya da kaldırmasını isteyin.", - "fill_all_fields": "Lütfen tüm alanları doldurun", - "logout_confirm": "Oturumu kapatmak istediğinizden emin misiniz?", - "change_password": "Şifreyi Değiştir", - "password_required": "Şifre gerekli", - "totp_title": "İki Faktörlü Kimlik Doğrulama", - "totp_subtitle": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Bunun yerine bir kurtarma kodu kullanın", - "totp_use_code": "Bunun yerine kimlik doğrulama kodunu kullanın", - "totp_recovery_code": "Kurtarma Kodu", - "totp_back_to_login": "Girişe geri dön", - "totp_invalid_code": "Geçersiz doğrulama kodu. Lütfen tekrar deneyin.", - "totp_enter_code": "Lütfen 6 haneli kodu girin", - "totp_enter_recovery": "Lütfen bir kurtarma kodu girin", - "totp_session_expired": "Oturumun süresi doldu. Lütfen tekrar giriş yapın.", - "totp_already_enabled": "İki faktörlü kimlik doğrulama zaten etkin", - "pro_only_account": "Bu hesap yalnızca RustDesk masaüstü istemcisi içindir. Giriş yapmak için lütfen RustDesk uygulamasını kullanın.", - "passwords_mismatch": "Şifreler eşleşmiyor", - "or": "veya", - "login_sso": "SSO ile oturum açın", - "login_sso_with": "{{provider}} ile oturum açın", - "oidc_denied": "Erişim kimlik sağlayıcı tarafından reddedildi.", - "oidc_invalid": "Geçersiz OIDC geri araması. Lütfen tekrar deneyin.", - "oidc_failed": "OIDC kimlik doğrulaması başarısız oldu. Lütfen tekrar deneyin.", - "oidc_error": "SSO oturum açma işlemi sırasında bir hata oluştu.", - "oidc_no_account": "Hesabınız bulunamadı ve otomatik kayıt devre dışı bırakıldı.", - "totp_rate_limited": "Çok fazla deneme. Lütfen daha sonra tekrar deneyin.", - "emergency_mode_banner": "Go server erişilemiyor — acil durum modunda çalışıyor (yalnızca yönetici, sınırlı işlevsellik)" - }, - "dashboard": { - "title": "Kontrol Paneli", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Toplam Cihazlar", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Aktif Bağlantılar", - "offline_devices": "Offline", - "server_status": "Sunucu Durumu", - "quick_actions": "Hızlı Eylemler", - "manage_devices": "Bağlı cihazları yönetin", - "view_keys": "Sunucu anahtarlarını görüntüle", - "generate_config": "İstemci yapılandırması oluştur", - "server_settings": "Ayarları yapılandırın", - "greeting_morning": "Günaydın {name}", - "greeting_afternoon": "İyi günler, {name}", - "greeting_evening": "İyi akşamlar {name}", - "greeting_night": "İyi geceler {name}", - "health_overview": "Sağlığa Genel Bakış", - "devices_online": "Çevrimiçi Cihazlar", - "active_alerts": "Aktif Uyarılar", - "recent_connections": "Toplam Cihazlar", - "server_uptime": "Sunucu Çalışma Süresi", - "activity_feed": "Son Etkinlik", - "no_recent_activity": "Yakın zamanda etkinlik yok", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "İzleme widget'larına sahip çok pencereli bir çalışma alanı için Masaüstü Modunu deneyin.", - "tip_keyboard_shortcuts": "Hızlı arama komut paletini açmak için herhangi bir yerde Ctrl+K tuşlarına basın.", - "tip_address_book": "RustDesk istemcisinden oturum açarak adres defterinizi cihazlar arasında senkronize edin.", - "tip_2fa": "Ekstra hesap güvenliği için Ayarlar'da İki Faktörlü Kimlik Doğrulamayı etkinleştirin.", - "tip_bulk_actions": "Birden fazla cihaz seçin ve bunları aynı anda yönetmek için toplu işlemleri kullanın.", - "tip_theme": "Kenar çubuğu ayarlarında Koyu ve Açık temalar arasında geçiş yapın.", - "tip_cdap": "IoT cihazlarını ve endüstriyel sensörleri CDAP ağ geçidi aracılığıyla bağlayın.", - "tip_tutorials": "Etkileşimli eğitimler için sağ alt köşedeki yardım düğmesine tıklayın." - }, - "devices": { - "title": "Cihazlar", - "id": "ID", - "hostname": "Hostname", - "username": "Kullanıcı adı", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Oluşturuldu", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Cihazları ara...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Senkronizasyon Durumu", - "sync_success": "Durum başarıyla senkronize edildi", - "empty_title": "Hiçbir cihaz bulunamadı", - "empty_text": "Mevcut filtrelerinizle eşleşen cihaz yok", - "edit_title": "Cihaz Detayları", - "delete_title": "Cihazı Sil", - "delete_confirm": "{id} cihazını silmek istediğinizden emin misiniz?", - "delete_warning": "Bu cihazı kalıcı olarak silmek üzeresiniz:", - "delete_permanent": "Bu eylem geri alınamaz. Bu cihazla ilişkili tüm veriler veritabanından kalıcı olarak kaldırılacaktır.", - "delete_success": "Cihaz başarıyla silindi", - "revoke_option": "Cihazı iptal et", - "revoke_hint": "Cihaz kimliğini engelleyin ve etkin bağlantıların bağlantısını kesin", - "revoke_success": "Cihaz başarıyla iptal edildi", - "details": "Cihaz Detayları", - "ban_title": "Cihazı Yasakla", - "ban_confirm": "{id} cihazını yasaklamak istediğinizden emin misiniz?", - "ban_success": "Cihaz başarıyla yasaklandı", - "unban_title": "Cihazın Yasağını Kaldır", - "unban_confirm": "{id} cihazının yasağını kaldırmak istediğinizden emin misiniz?", - "unban_success": "Cihazın yasağı başarıyla kaldırıldı", - "change_id": "Change ID", - "change_id_title": "Cihaz Kimliğini Değiştir", - "new_id": "New ID", - "change_id_hint": "Yalnızca 6-16 karakter, harf, rakam, tire ve alt çizgi", - "change_id_success": "Cihaz kimliği başarıyla değiştirildi", - "id_length_error": "Kimlik 6-16 karakter uzunluğunda olmalıdır", - "id_format_error": "Kimlik yalnızca harf, rakam, tire ve alt çizgi içerebilir", - "bulk_delete_title": "Birden Fazla Cihazı Sil", - "bulk_delete_confirm": "{count} cihazlarını silmek istediğinizden emin misiniz?", - "bulk_delete_success": "{count} cihazları başarıyla silindi", - "columns": "Columns", - "toggle_columns": "Görünür sütunları değiştir", - "not_found": "Cihaz bulunamadı", - "delete_failed": "Cihaz silinemedi", - "change_id_failed": "Cihaz kimliği değiştirilemedi", - "invalid_id": "Geçersiz cihaz kimliği (6-16 karakter gereklidir)", - "invalid_id_format": "Geçersiz kimlik biçimi (yalnızca harfler, sayılar, tireler, alt çizgiler)", - "id_exists": "Cihaz Kimliği zaten mevcut", - "no_selection": "Hiçbir cihaz seçilmedi", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "Erişim Politikası", - "unattended_access": "Katılımsız Erişim", - "enable_unattended": "Katılımsız erişimi etkinleştir", - "access_password": "Erişim Şifresi", - "password_configured": "Şifre seti", - "no_password": "Şifre yok", - "new_password": "Yeni şifre (güncel kalması için boş bırakın)", - "clear_password": "Şifreyi temizle", - "access_schedule": "Erişim Planı", - "enable_schedule": "Zamana dayalı erişimi etkinleştir", - "allowed_days": "İzin verilen günler", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "İzin Verilen Operatörler", - "all_operators": "Tüm operatörler (boş bırakın)", - "operators_hint": "Virgülle ayrılmış kullanıcı adları. Tüm operatörlere izin vermek için boş bırakın.", - "last_updated_by": "En son güncelleyen:", - "access_policy_saved": "Erişim politikası kaydedildi", - "tabs": { - "overview": "Genel Bakış", - "hardware": "Hardware", - "metrics": "Metrikler", - "connections": "Bağlantılar", - "audit": "Audit", - "info": "Info", - "history": "Tarih" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Yük Ortalaması", - "network": "Ağ Adaptörleri", - "no_data": "Donanım verisi yok", - "title": "Donanım Bilgileri", - "gpu": "Graphics Card" - }, - "display_name": "Görünen Ad", - "display_name_placeholder": "Özel ad (ana bilgisayar adını geçersiz kılar)", - "note_placeholder": "Bu cihazla ilgili notlar", - "tags": "Tags", - "filter_by_tags": "Etiketlere göre filtrele", - "no_tags": "No tags", - "all_groups": "Tüm gruplar", - "create_group": "Grup oluştur", - "manage_groups": "Grupları Yönet", - "group_name": "Grup adı", - "group_name_placeholder": "örneğin Medya PC'leri", - "dynamic_group": "Etiketten dinamik grup", - "dynamic_group_hint": "Bu etikete sahip cihazlar otomatik olarak katılır.", - "tag_filter": "Tag filter", - "group_allowed_users": "İzin verilen kullanıcılar", - "group_allowed_users_hint": "Grubun cihaz izinlerine sahip herkes tarafından görülebilmesini sağlamak için boş bırakın.", - "group_tag_required": "Dinamik gruplar için etiket filtresi gereklidir", - "group_invalid": "Geçersiz grup tanımlayıcı", - "group_not_found": "Grup bulunamadı", - "group_saved": "Cihaz grubu kaydedildi", - "groups_saved": "Cihaz grupları kaydedildi", + "display_name": "Görünen Ad", + "display_name_placeholder": "Özel ad (ana bilgisayar adını geçersiz kılar)", + "note_placeholder": "Bu cihazla ilgili notlar", + "tags": "Tags", + "filter_by_tags": "Etiketlere göre filtrele", + "no_tags": "No tags", + "all_groups": "Tüm gruplar", + "create_group": "Grup oluştur", + "manage_groups": "Grupları Yönet", + "group_name": "Grup adı", + "group_name_placeholder": "örneğin Medya PC'leri", + "dynamic_group": "Etiketten dinamik grup", + "dynamic_group_hint": "Bu etikete sahip cihazlar otomatik olarak katılır.", + "tag_filter": "Tag filter", + "group_allowed_users": "İzin verilen kullanıcılar", + "group_allowed_users_hint": "Grubun cihaz izinlerine sahip herkes tarafından görülebilmesini sağlamak için boş bırakın.", + "group_tag_required": "Dinamik gruplar için etiket filtresi gereklidir", + "group_invalid": "Geçersiz grup tanımlayıcı", + "group_not_found": "Grup bulunamadı", + "group_saved": "Cihaz grubu kaydedildi", + "groups_saved": "Cihaz grupları kaydedildi", "group_membership_added": "Gruba eklendi", "group_membership_removed": "Gruptan kaldırıldı", - "no_groups": "Henüz grup yok", - "manual_groups": "Manuel gruplar", - "dynamic_memberships": "Dinamik üyelikler", - "group_allowed_user_groups": "İzin verilen kullanıcı grupları", - "group_allowed_user_groups_hint": "Seçilen kullanıcı gruplarındaki kullanıcılar bu cihaz grubuna erişebilir.", - "no_user_groups": "Kullanıcı grubu yok", - "edit_group": "Grubu düzenle", - "delete_group": "Grubu sil", - "delete_group_confirm": "{name} cihaz grubu silinsin mi?", - "group_deleted": "Cihaz grubu silindi", - "folder_group_readonly": "Klasör destekli gruplar klasörlerden yönetilir.", - "manage_user_groups": "Kullanıcı gruplarını yönet", - "restore_failed": "Cihaz geri yükleme başarısız", - "no_signal_tooltip": "İstemci yakın zamanda API ile iletişim kurdu ancak sinyal sunucusuna (UDP :21116) kayıtlı değil. Sunucu geçişinden sonra istemciyi yeniden başlatın.", - "per_page": "Sayfa başına" - }, - "keys": { - "title": "Sunucu Anahtarları", - "subtitle": "RustDesk istemcileri için ortak anahtar ve yapılandırma", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Sunucu Bilgileri", - "download": "Anahtarı İndir", - "show_qr": "Show QR", - "qr_hint": "Bu QR kodunu RustDesk mobil uygulamasıyla tarayın", - "no_key": "Ortak anahtar bulunamadı", - "no_key_to_copy": "Kopyalanacak anahtar yok", - "no_qr": "QR kodu mevcut değil", - "download_success": "Anahtar dosyası indirildi", - "not_found": "Anahtar bulunamadı", - "api_not_found": "API anahtarı bulunamadı" - }, - "settings": { - "title": "Ayarlar", - "subtitle": "Konsol yapılandırması ve hesap ayarları", - "tab_general": "General", - "tab_server": "Sunucu", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Dil", - "change_password": "Şifreyi Değiştir", - "password_desc": "Hesap şifrenizi güncelleyin", - "current_password": "Mevcut Şifre", - "new_password": "Yeni Şifre", - "confirm_password": "Şifreyi Onayla", - "save_password": "Şifreyi Güncelle", - "password_changed": "Şifre başarıyla değiştirildi", - "fill_all_fields": "Lütfen tüm alanları doldurun", - "passwords_not_match": "Şifreler eşleşmiyor", - "password_requirements": "Şifre gereksinimleri", - "password_requirements_not_met": "Şifre gereksinimleri karşılamıyor", - "req_length": "En az 8 karakter", - "req_uppercase": "En az bir büyük harf", - "req_lowercase": "En az bir küçük harf", - "req_number": "En az bir sayı", - "server_info": "Sunucu Bilgileri", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Son konsol etkinliği", - "no_audit_logs": "Denetim günlüğü bulunamadı", - "backend_title": "Sunucu Arka Ucu", - "backend_desc": "Cihaz yönetimi ve sinyal/aktarma hizmetleri için hangi sunucu arka ucunun kullanılacağını seçin.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Standart RustDesk sinyal ve aktarma sunucuları (hbbs + hbbr). Sınırlı uç noktalara sahip temel HTTP API.", - "backend_betterdesk_desc": "Tam REST API, JWT kimlik doğrulaması, engellenenler listesi, etiketler, gerçek zamanlı WebSocket olayları ve denetim günlüğüne sahip gelişmiş Go tabanlı sunucu.", - "backend_feature_signal": "Sinyal sunucusu (ID kaydı)", - "backend_feature_relay": "Aktarma sunucusu (bağlantı rölesi)", - "backend_feature_basic_api": "Temel REST API", - "backend_feature_full_api": "Tam REST API (34+ uç nokta)", - "backend_feature_jwt": "JWT kimlik doğrulaması ve TOTP 2FA", - "backend_feature_blocklist": "IP/ID engelleme listesi yönetimi", - "backend_feature_tags": "Cihaz etiketleri ve gruplandırma", - "backend_feature_audit": "Olay günlüğünü denetleme", - "backend_feature_websocket": "Gerçek zamanlı WebSocket etkinlikleri", - "backend_connection": "Bağlantı", - "backend_api_url": "API URL", - "backend_test": "Bağlantıyı Test Et", - "backend_testing": "Test ediliyor...", - "backend_save": "Arka Uç Uygula", - "backend_saved": "Sunucu arka ucu başarıyla değiştirildi. Cihaz verileri artık yeni arka uç tarafından yönetilecek.", - "backend_save_failed": "Sunucu arka ucu değiştirilemedi", - "backend_test_success": "Bağlantı başarılı! Sunucuya ulaşılabilir.", - "backend_test_failed": "Bağlantı başarısız oldu. Sunucuya ulaşılamıyor.", - "backend_confirm_switch": "Sunucu arka ucunu değiştirmek istediğinizden emin misiniz? Bu, cihazların yönetilme şeklini değiştirecek.", - "backend_unreachable": "Geçiş yapılamıyor: Hedef sunucuya ulaşılamıyor. İlk önce sunucuyu başlatın.", - "invalid_backend": "Geçersiz arka uç seçimi. 'Rustdesk' veya 'betterdesk'i seçin.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "İki Faktörlü Kimlik Doğrulama", - "totp_desc": "TOTP kimlik doğrulama uygulamalarıyla (Google Authenticator, Microsoft Authenticator, Authy vb.) ekstra bir güvenlik katmanı ekleyin.", - "totp_enabled": "2FA Etkin", - "totp_enabled_desc": "Hesabınız iki faktörlü kimlik doğrulama ile korunmaktadır.", - "totp_disabled": "2FA Etkin Değil", - "totp_disabled_desc": "Ek hesap güvenliği için iki faktörlü kimlik doğrulamayı etkinleştirin.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Telefonunuza bir kimlik doğrulama uygulaması yükleyin", - "totp_step2": "Aşağıdaki QR kodunu tarayın", - "totp_step3": "Doğrulamak için 6 haneli kodu girin", - "totp_manual_key": "Manual key", - "totp_enter_code": "Doğrulama kodunu girin", - "totp_verify_enable": "Doğrula ve Etkinleştir", - "totp_enabled_success": "İki faktörlü kimlik doğrulama etkin!", - "totp_recovery_warning": "Bu kurtarma kodlarını güvenli bir yere kaydedin. Her kod yalnızca bir kez kullanılabilir. Kimlik doğrulama uygulamanıza erişiminizi kaybederseniz oturum açmak için bu kodları kullanabilirsiniz.", - "totp_done": "Done", - "totp_disable_warning": "İki faktörlü kimlik doğrulamayı devre dışı bırakmak hesabınızı daha az güvenli hale getirecektir. Onaylamak için şifrenizi girin.", - "totp_disabled_success": "İki faktörlü kimlik doğrulama devre dışı bırakıldı.", - "tutorials_title": "Öğreticiler ve Kılavuzlar", - "tutorials_desc": "Konsol boyunca gösterilen rehberli turları ve yardım katmanlarını kontrol edin", - "tutorials_enabled": "Eğiticileri etkinleştir", - "tutorials_enabled_hint": "Devre dışı bırakıldığında öğreticiler otomatik olarak başlamaz ve yardım düğmesi gizlenir", - "tutorials_reset_hint": "Tekrar gösterilebilmeleri için tüm eğitimleri görünmeyen olarak işaretleyin", - "tutorials_enabled_toast": "Eğiticiler etkinleştirildi", - "tutorials_disabled_toast": "Eğiticiler devre dışı bırakıldı", - "tutorials_reset_toast": "Tüm eğitimler sıfırlandı", - "tab_auth": "Kimlik doğrulama", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "LDAP veya Active Directory aracılığıyla harici kimlik doğrulamayı yapılandırın. Kullanıcılar alan adı kimlik bilgileriyle oturum açabilecektir.", - "ldap_enabled": "LDAP Kimlik Doğrulamasını Etkinleştir", - "ldap_enabled_hint": "Etkinleştirildiğinde kullanıcılar LDAP/AD kimlik bilgileriyle oturum açabilir. Yerel hesaplar hala yedek olarak çalışıyor.", - "ldap_connection": "Sunucu Bağlantısı", - "ldap_host": "Sunucu", - "ldap_port": "Liman", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "TLS doğrulamasını atla", - "ldap_timeout": "Bağlantı zaman aşımı (s)", - "ldap_timeout_hint": "LDAP sunucu yanıtı için beklenecek saniyeler", - "ldap_bind_mode": "Ciltleme Modu", - "ldap_direct_bind": "Doğrudan Bağlama", - "ldap_direct_bind_hint": "Aramak için bir hizmet hesabı kullanmak yerine doğrudan bir DN şablonuyla bağlantı kurun.", - "ldap_bind_dn": "DN'yi bağla (hizmet hesabı)", - "ldap_bind_dn_hint": "Kullanıcıları aramak için kullanılan salt okunur bir hizmet hesabının Ayırt Edici Adı.", - "ldap_bind_password": "Şifreyi Bağla", - "ldap_base_dn": "Temel DN", - "ldap_base_dn_hint": "Kullanıcıları bulmak için arama tabanı, ör. dc=örnek,dc=com", - "ldap_user_filter": "Kullanıcı Filtresi", - "ldap_user_filter_hint": "Kullanıcıları bulmak için LDAP filtresi. Yer tutucu olarak {{username}} kullanın. Varsayılan: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Doğrudan Bağlama DN Şablonu", - "ldap_direct_bind_dn_hint": "Doğrudan bağlama için DN şablonu. Yer tutucu olarak {{username}} kullanın, ör. uid={{username}},ou=kullanıcılar,dc=örnek,dc=com", - "ldap_user_attrs": "Kullanıcı Özellikleri", - "ldap_attr_id": "Kullanıcı Adı Özelliği", - "ldap_attr_email": "E-posta Özelliği", - "ldap_attr_name": "Görünen Ad Özelliği", - "ldap_group_mapping": "Grup → Rol Eşleme", - "ldap_group_base_dn": "Grup Tabanı DN", - "ldap_group_base_dn_hint": "Ana Base DN'yi kullanmak için boş bırakın", - "ldap_group_filter": "Grup Filtresi", - "ldap_group_attr_name": "Grup Adı Özelliği", - "ldap_default_role": "Varsayılan Rol", - "ldap_default_role_hint": "LDAP grupları hiçbir eşlemeyle eşleşmeyen kullanıcılara atanan rol", - "ldap_role_viewer": "Görüntüleyici", - "ldap_role_operator": "Operatör", - "ldap_role_admin": "Yönetici", - "ldap_group_role_map": "Grup → Rol Haritası", - "ldap_group_role_map_hint": "LDAP gruplarını BetterDesk rolleriyle eşleyin. Biçim: GroupDN=rol ile ayrılmış | (boru). Örnek: CN=Yöneticiler,DC=örnek,DC=com=yönetici|CN=Ops,DC=örnek,DC=com=operatör", - "ldap_test_connection": "Bağlantıyı Test Et", - "ldap_testing": "Test ediliyor...", - "ldap_test_success": "Bağlantı başarılı! LDAP sunucusu erişilebilir ve bağlama kimlik bilgileri geçerli.", - "ldap_test_failed": "Bağlantı başarısız oldu", - "ldap_save": "LDAP Yapılandırmasını Kaydet", - "ldap_saved": "LDAP yapılandırması başarıyla kaydedildi", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Bir OpenID Connect sağlayıcısı (Azure AD, Okta, Google, Keycloak vb.) aracılığıyla Tekli Oturum Açma'yı yapılandırın.", - "oidc_enabled": "OIDC Kimlik Doğrulamasını Etkinleştir", - "oidc_enabled_hint": "Kullanıcıların harici bir kimlik sağlayıcıyla oturum açmasına izin ver", - "oidc_provider": "Kimlik Sağlayıcı", - "oidc_display_name": "Düğme Görünen Adı", - "oidc_display_name_hint": "Oturum açma düğmesinde gösterilen metin (ör. Azure AD, Okta)", - "oidc_issuer_url": "Verici URL", - "oidc_issuer_url_hint": "OpenID Connect veren URL (keşif otomatik olacaktır)", - "oidc_client_id": "Müşteri Kimliği", - "oidc_client_secret": "Müşteri Sırrı", - "oidc_redirect_url": "URL'yi yönlendir (Geri arama)", - "oidc_redirect_url_hint": "IdP'nizde yapılandırılanlarla tam olarak eşleşmelidir. Genellikle: http(s):://sunucunuz:21114/api/auth/oidc/callback", - "oidc_scopes": "Kapsamlar", - "oidc_use_pkce": "PKCE kullanın (önerilir)", - "oidc_auto_discovery": "Otomatik keşif", - "oidc_allow_signup": "Kullanıcıları otomatik oluştur", - "oidc_manual_endpoints": "Manuel Uç Nokta URL'leri", - "oidc_authorization_url": "Yetkilendirme Uç Noktası", - "oidc_token_url": "Token Uç Noktası", - "oidc_userinfo_url": "Kullanıcı Bilgisi Uç Noktası", - "oidc_claim_mapping": "Talep Eşleme", - "oidc_claim_username": "Kullanıcı Adı Talebi", - "oidc_claim_email": "E-posta Talebi", - "oidc_claim_name": "Görünen Ad Hak Talebi", - "oidc_claim_groups": "Grup Hak Talebi", - "oidc_role_mapping": "Rol Eşleme", - "oidc_default_role": "Varsayılan Rol", - "oidc_group_role_map": "Grup → Rol Eşleme", - "oidc_group_role_map_hint": "Her satıra bir eşleme: grup_adı=role (ör. yöneticiler=yönetici, operatörler=operatör)", - "oidc_test_discovery": "Test Keşfi", - "oidc_testing": "Test ediliyor...", - "oidc_test_success": "Keşif başarılı! Uç noktalar çözüldü.", - "oidc_test_failed": "Keşif başarısız oldu", - "oidc_issuer_required": "Keşfi test etmek için URL veren kuruluş gereklidir", - "oidc_save": "OIDC Yapılandırmasını Kaydet", - "oidc_saved": "OIDC yapılandırması başarıyla kaydedildi", - "tab_advanced": "Gelişmiş", - "connection_mode_title": "Bağlantı stratejisi", - "connection_mode_desc": "RustDesk masaüstü istemcilerinin bağlantı yöntemini kontrol edin: mümkün olduğunda doğrudan P2P (delik delme), ya da her zaman röle üzerinden.", - "connection_mode_label": "Varsayılan bağlantı modu", - "connection_mode_p2p_first": "Önce P2P (önerilen) — doğrudan bağlantı dene, başarısız olursa röleye geç", - "connection_mode_relay_only": "Yalnızca röle — tüm oturumlar röle sunucusu kullanır", - "connection_mode_advanced": "Gelişmiş seçenekler", - "connection_mode_fallback_ms": "P2P geri dönüş zaman aşımı (ms)", - "connection_mode_same_nat_relay": "Her iki taraf aynı genel IP'yi paylaşırsa röleye zorla (NAT saç tokası)", - "connection_mode_network_hint": "P2P için istemciler arasında UDP 21116 portuna erişilebilir olmalı. Sunucuda Sinyal TCP 21116, Röle TCP 21117, NAT testi TCP 21115 açık olmalı. Web tarayıcısı istemcileri her zaman röle kullanır.", - "connection_mode_save": "Kaydet", - "connection_mode_save_restart": "Kaydet ve sunucuyu yeniden başlat", - "connection_mode_saved": "Bağlantı modu kaydedildi", - "connection_mode_restart_started": "Sunucu yeniden başlatma başladı", - "connection_mode_restart_failed": "Sunucu yeniden başlatma başarısız", - "connection_mode_not_configurable": "Bu dağıtımda bağlantı modu değiştirilemiyor (systemd birimi veya docker-compose bulunamadı)", - "connection_mode_compose_error": "docker-compose.yml dosyasında sunucu ortam bölümü bulunamadı", - "connection_mode_source_saved": "Kaydedilen", - "connection_mode_source_defaults": "Sunucu varsayılanları kullanılıyor (panelden yazılamaz)", - "connection_mode_runtime": "Etkin sunucu", - "advanced_title": "Yapılandırma dosyaları", - "advanced_desc": "Sunucu yapılandırma dosyalarını doğrudan düzenleyin. Değişiklikler servislerin yeniden başlatılmasını gerektirebilir. Her kaydetmeden önce yedek kopya oluşturulur.", - "advanced_warning": "Bu dosyalar gizli bilgiler içerir (API anahtarları, veritabanı şifreleri, oturum sırları). Yalnızca etkisini anlıyorsanız düzenleyin. Sözdizimi hataları sunucunun başlamasını engelleyebilir.", - "advanced_files_label": "Dosyalar", - "advanced_select_file": "İçeriğini görüntülemek veya düzenlemek için listeden bir dosya seçin.", - "advanced_reload": "Yeniden yükle", - "advanced_save": "Dosyayı kaydet", - "advanced_apply_restart": "Uygula (servisi yeniden başlat)", - "advanced_saved": "Yapılandırma dosyası kaydedildi", - "advanced_restart_after_save": "Yapılandırma kaydedildi. Değişikliklerin geçerli olması için etkilenen servisi şimdi yeniden başlatılsın mı?", - "advanced_restart_confirm": "İlgili BetterDesk servisleri yeniden başlatılsın mı? Etkin bağlantılar kısa süreliğine kesintiye uğrayabilir.", - "advanced_restart_console_confirm": "Web konsol servisi yeniden başlatılsın mı? Tarayıcı oturumu kısa süreliğine kesilecek ve konsol geri döndüğünde sayfa yeniden yüklenecek.", - "advanced_restart_started": "Servis yeniden başlatma başladı", - "advanced_restart_done": "Konsol yeniden başlatıldı — sayfa yeniden yükleniyor…", - "advanced_restart_polling": "Konsolun çevrimiçi dönmesi bekleniyor…", - "advanced_restart_timeout": "Yeniden başlatma gönderildi ama konsol zamanında yanıt vermedi. systemd/NSSM günlüklerini kontrol edin ve manuel olarak yeniden yükleyin.", - "advanced_restart_failed": "Servis yeniden başlatma başarısız (yetersiz ayrıcalık veya servis kurulu değil)", - "advanced_save_confirm": "Bu dosyadaki değişiklikler kaydedilsin mi? Önceki sürümün yedeği oluşturulacak.", - "advanced_unsaved_confirm": "Kaydedilmemiş değişiklikleriniz var. Bunlar atılsın mı?", - "advanced_no_files": "Bu sistemde kullanılabilir yapılandırma dosyası yok.", - "advanced_readonly": "salt okunur", - "advanced_missing": "eksik", - "advanced_new_file": "Yeni dosya (kaydetene kadar oluşturulmaz)", - "advanced_new_file_hint": "Yeni dosya — içerik ekleyin ve kaydedin", - "advanced_backup_created": "yedek oluşturuldu", - "advanced_restart_console": ".env değişikliklerinin geçerli olması için web konsol servisini yeniden başlatın (örn. systemctl restart betterdesk-console).", - "advanced_restart_goserver": "Engelleme listesi değişikliklerini yüklemek için BetterDesk Go sunucusunu yeniden başlatın.", - "advanced_restart_systemd": "systemd birimlerini düzenledikten sonra çalıştırın: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Değişikliklerin geçerli olması için etkilenen servisi yeniden başlatın.", - "advanced_error_unknown": "Bilinmeyen yapılandırma dosyası", - "advanced_error_not_found": "Dosya mevcut değil", - "advanced_error_not_file": "Yol normal bir dosya değil", - "advanced_error_too_large": "Dosya maksimum düzenlenebilir boyutu aşıyor (512 KB)", - "advanced_error_binary": "İkili dosyalar panelde düzenlenemez", - "advanced_error_invalid": "Geçersiz dosya içeriği", - "advanced_error_not_writable": "Konsol süreci bu dosyaya yazamıyor", - "advanced_file_console-env": "Konsol ortamı (.env)", - "advanced_file_console-env-local": "Konsol geçersiz kılmaları (.env.local)", - "advanced_file_go-blocklist": "Go sunucu engelleme listesi (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (servis birimi)", - "advanced_file_systemd-server": "systemd: betterdesk-server (servis birimi)", - "advanced_file_console-session-secret": "Konsol oturum sırrı (.session_secret)", - "advanced_file_go-audit-log": "Go sunucu denetim günlüğü (audit.jsonl)", - "advanced_file_build-env": "Ajan yapılandırma ortamı (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisord yapılandırması)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrasyon)", - "advanced_restart_none": "Bu dosya için servis yeniden başlatma gerekmez.", - "enrollment_title": "Cihaz kaydı (RustDesk)", - "enrollment_desc": "Yeni RustDesk istemcilerinin nasıl kayıt olacağını ve operatörlerin kayıt istekleri sayfasında bunları nasıl onaylayacağını kontrol edin.", - "enrollment_require_approval": "Operatör onayı gerekli (Yönetilen mod)", - "enrollment_require_approval_hint": "Etkinleştirildiğinde, bilinmeyen istemciler operatör \"Kayıt İstekleri\"nde onaylayana kadar sırada bekler.", - "enrollment_rich_approve": "Tam onay formu (ad, klasör, gruplar, etiketler)", - "enrollment_rich_approve_hint": "Kayıt veya LAN kayıt isteklerini onaylarken ayrıntılı iletişim kutusu gösterir.", - "enrollment_tag_picker": "Mevcut cihaz etiketlerinden etiket seç", - "enrollment_tag_picker_hint": "Operatörlerin yalnızca yazmak yerine Cihazlar sayfasındaki etiket listesinden seçmesine olanak tanır.", - "enrollment_open_requests": "Kayıt isteklerini aç", - "enrollment_pending_count": "{count} bekleyen kayıt isteği" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Giriş Başarısız Oldu", - "action_logout": "Logout", - "action_password_change": "Şifre Değiştirildi", - "action_2fa_enable": "2FA Etkin", - "action_2fa_disable": "2FA Devre Dışı", - "action_user_create": "Kullanıcı Oluşturuldu", - "action_user_update": "Kullanıcı Güncellendi", - "action_user_delete": "Kullanıcı Silindi", - "action_settings_update": "Ayarlar Güncellendi", - "action_device_ban": "Cihaz Yasaklandı", - "action_device_unban": "Cihazın Yasağı Kaldırıldı", - "action_device_delete": "Cihaz Silindi" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Yapılandırma Seçenekleri", - "server_address": "Sunucu Adresi", - "server_address_hint": "Sunucunuzun alan adı veya IP adresi", - "custom_port": "Custom Port", - "port_hint": "Varsayılan olarak boş bırakın (21116)", - "relay_server": "Aktarma Sunucusu", - "relay_placeholder": "Boşsa kimlik sunucusuyla aynı", - "relay_hint": "İsteğe bağlı: ayrı aktarma sunucusu adresi", - "include_key": "Ortak anahtarı yapılandırmaya dahil et", - "generate": "Yapılandırma Oluştur", - "output": "Yapılandırma Çıkışı", - "usage_title": "Bağlantı Detayları", - "generated": "Yapılandırma oluşturuldu", - "server_required": "Sunucu adresi gerekli", - "nothing_to_copy": "Önce bir konfigürasyon oluşturun", - "bundles_title": "Temsilci paketleri", - "new_bundle": "Yeni paket", - "editor_title": "Paket düzenleyici", - "empty_state": "Başlamak için soldan bir paket seçin veya yeni bir paket oluşturun.", - "loading": "Yükleniyor…", - "no_bundles": "Henüz paket yok. İlkini yarat.", - "bundle_name": "Paket adı", - "bundle_name_hint": "Yalnızca dahili etiket — son kullanıcılara gösterilmez.", - "short_link": "Kısa indirme bağlantısı", - "short_link_hint": "Genel URL’de (/d/…) kullanılır. Yalnızca küçük harfler, rakamlar ve tireler (2–32 karakter). Paket adından otomatik doldurulur — paylaşımı kolaylaştırmak için kısaltın (örn. acme).", - "branding_section": "Markalaşma", - "company_name": "Şirket / marka adı", - "short_text": "Kısa açıklama", - "contact_email": "İletişim e-postası", - "contact_phone": "İletişim telefonu", - "contact_url": "İletişim web sitesi", - "logo": "logosu", - "logo_hint": "PNG, JPEG, SVG veya WebP. Maksimum 256 KB.", - "logo_clear": "Logoyu kaldır", - "primary_color": "Ana renk", - "accent_color": "Başlık rengi", - "default_lang": "Varsayılan dil", - "allow_unattended": "Katılımsız erişime izin ver", - "allow_unattended_hint": "Etkinleştirildiğinde temsilci, operatör erişimi için kalıcı bir parola gösterir.", - "save": "Paketi kaydet", - "revoke": "İptal et", - "unrevoke": "Yeniden etkinleştir", - "revoked": "İptal edildi", - "preview_title": "Canlı önizleme", - "preview_hint": "Son kullanıcı aracısı penceresinin yaklaşık görünümü.", - "preview_default_name": "BetterDesk Desteği", - "preview_status_ready": "Hazır", - "preview_id": "Kimliğiniz", - "preview_password": "Şifre", - "preview_chat": "Destek ekibiyle sohbet edin", - "preview_settings": "Ayarlar (yalnızca yönetici)", - "preview_quit": "Çık (yalnızca yönetici)", - "download_link_title": "İndirme bağlantısı", - "download_link_hint": "Bu bağlantıyı son kullanıcılarla paylaşın. Markalı bir indirme sayfası görecekler. Kısa bağlantıyı değiştirdikten sonra eski hex bağlantılar çalışmaya devam eder.", - "open_portal": "Açık", - "created": "Paket oluşturuldu", - "saved": "Paket kaydedildi", - "deleted": "Paket silindi", - "revoked_ok": "Paket iptal edildi", - "unrevoked_ok": "Paket yeniden etkinleştirildi", - "link_copied": "Bağlantı panoya kopyalandı", - "copy_failed": "Otomatik olarak kopyalanamadı — lütfen manuel olarak kopyalayın", - "unsaved_confirm": "Kaydedilmemiş değişiklikler silinsin mi?", - "confirm_revoke": "Bu paket iptal edilsin mi? İndirme bağlantısı çalışmayı durduracaktır.", - "confirm_unrevoke": "Bu paket yeniden etkinleştirilsin mi?", - "confirm_delete": "Bu paket kalıcı olarak silinsin mi? Bu geri alınamaz.", - "errors": { - "validation_failed": "Doğrulama başarısız oldu", - "name_required": "Paket adı gerekli", - "company_name_required": "Şirket adı gerekli", - "logo_invalid": "Logo geçerli bir resim dosyası olmalıdır", - "logo_too_large": "Logo 256 KB veya daha küçük olmalıdır", - "logo_read_failed": "Logo dosyası okunamadı", - "primary_color_invalid": "Ana renk onaltılık bir değer olmalıdır (ör. #2563eb)", - "accent_color_invalid": "Başlık rengi onaltılık bir değer olmalıdır (ör. #1e293b)", - "contact_url_invalid": "İletişim web sitesi geçerli bir URL olmalıdır", - "server_host_required": "Genel sunucu adresi zorunludur", - "server_host_invalid": "Geçerli bir etki alanı adı veya IPv4 adresi girin", - "token_failed": "Kayıt belirteci oluşturulamadı — sunucu bağlantısını kontrol edin", - "rebuild_revoked": "İptal edilmiş paket yeniden derlenemez — önce yeniden etkinleştirin", - "slug_invalid": "Kısa bağlantı yalnızca küçük harf, rakam ve tire içerebilir", - "slug_too_short": "Kısa bağlantı en az 2 karakter olmalıdır", - "slug_too_long": "Kısa bağlantı en fazla 32 karakter olabilir", - "slug_taken": "Bu kısa bağlantı başka bir paket tarafından zaten kullanılıyor" - }, - "legacy_title": "İstemci Yapılandırma Oluşturucu", - "connection_section": "Sunucu bağlantısı", - "server_host": "Genel sunucu adresi", - "server_host_placeholder": "support.example.com veya 203.0.113.10", - "server_host_hint": "Son kullanıcıların BetterDesk sunucunuza ulaştığı etki alanı adı veya genel IP. Port, konsol yapılandırmasından alınır.", - "use_https": "HTTPS / WSS kullan (önerilen)", - "enrollment_token": "Cihaz kaydı", - "enrollment_token_pending": "Onaydan sonra cihaz başına", - "enrollment_token_set": "Cihaz başına — Kayıtlar'da onayla", - "enrollment_token_hint": "Her kurulum kendi kendine kayıt olur. Kayıtlar panelinde yeni cihazları onaylayın; sunucu ardından her bilgisayar için benzersiz erişim anahtarı verir.", - "enrollment_per_device": "Cihaz başına — Kayıtlar'da onayla", - "background_color": "Pencere arka planı", - "surface_color": "Kart arka planı", - "text_color": "Metin rengi", - "text_muted_color": "Soluk metin rengi", - "status_ready_color": "Hazır gösterge rengi", - "header_text_color": "Başlık metin rengi", - "builds_title": "İstemci derlemeleri", - "builds_hint": "Her platform için bu sunucuda derlenen yükleyiciler. Araç zinciri hatalarını düzelttikten veya ajan kaynağını güncelledikten sonra yeniden derleyin.", - "builds_loading": "Derleme durumu yükleniyor…", - "builds_empty": "Henüz sırada derleme yok — paketi kaydedin veya Tümünü yeniden derle'ye tıklayın.", - "rebuild_all": "Tümünü yeniden derle", - "rebuilding_all": "Yeniden derleme sıraya alınıyor…", - "rebuild_queued": "Tüm platform derlemeleri sıraya alındı", - "rebuild_confirm": "Bu paket için tüm platform yükleyicileri yeniden derlensin mi? Mevcut hazır yapıtlar değiştirilecek.", - "build_status_ready": "Hazır", - "build_status_pending": "Sırada", - "build_status_building": "Derleniyor", - "build_status_failed": "Başarısız", - "builds_summary": "{{ready}} hazır · {{pending}} sırada · {{building}} derleniyor · {{failed}} başarısız", - "build_error_hint": "Derleme hatası", - "preview_help": "Yardım iste" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "Kimlik Sunucusu", - "relay_server": "Aktarma Sunucusu", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Kontrol ediliyor...", - "label": "Status", - "no_signal": "Sinyal yok" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Masaüstü İstemcisi aracılığıyla bağlanın", - "remote_viewer": "Uzaktan Görüntüleyici", - "web_remote": "Web Uzaktan Kumandası", - "details": "Details", - "edit": "Düzenle", - "delete": "Sil", - "ban": "Ban", - "unban": "Unban", - "save": "Kaydet", - "cancel": "İptal", - "confirm": "Onayla", - "close": "Kapat", - "clear": "Clear", - "ok": "OK", - "saved": "Başarıyla kaydedildi", - "back": "Geri", - "create": "Oluştur", - "dismiss": "Dismiss", - "view_all": "Tümünü Görüntüle", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count} saniye önce", - "minutes_ago": "{count} dk önce", - "hours_ago": "{count}h önce", - "days_ago": "{count} gün önce", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Kullanıcı Yönetimi", - "subtitle": "Konsol kullanıcılarını ve izinlerini yönetin", - "add_user": "Add User", - "edit_user": "Kullanıcıyı Düzenle", - "username": "Kullanıcı adı", - "username_placeholder": "Kullanıcı adını girin", - "username_hint": "Yalnızca 3-32 karakter, harf, rakam ve alt çizgi", - "password": "Şifre", - "password_placeholder": "Şifreyi girin", - "password_hint": "Karışık harf, sayı ve simgelerden oluşan minimum 8 karakter", - "password_leave_empty": "Güncel tutmak için boş bırakın", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Oluşturuldu", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Kullanıcı Oluştur", - "edit": "Düzenle", - "reset_password": "Şifreyi Sıfırla", - "new_password": "Yeni Şifre", - "delete_title": "Kullanıcıyı Sil", - "delete_confirm": "{username} kullanıcısını silmek istediğinizden emin misiniz?", - "delete_success": "Kullanıcı başarıyla silindi", - "user_created": "Kullanıcı başarıyla oluşturuldu", - "user_updated": "Kullanıcı başarıyla güncellendi", - "password_reset_success": "Şifre başarıyla sıfırlandı", - "empty_title": "Kullanıcı bulunamadı", - "empty_text": "Konsol erişimini yönetmek için kullanıcı ekleyin", - "fill_required": "Lütfen gerekli tüm alanları doldurun", - "invalid_username": "Kullanıcı adı yalnızca 3-32 karakter, harf, rakam ve alt çizgiden oluşmalıdır", - "username_exists": "Kullanıcı adı zaten mevcut", - "weak_password": "Şifre çok zayıf", - "password_too_short": "Şifre en az 8 karakter olmalıdır", - "invalid_role": "Geçersiz rol", - "cannot_demote_self": "Kendinizi düşüremezsiniz", - "cannot_delete_self": "Kendi hesabınızı silemezsiniz", - "last_admin": "Son yönetici silinemiyor", - "admin_only": "Bu özellik yalnızca yöneticilere açıktır", - "password_required": "Şifre gerekli", - "not_found": "Kullanıcı bulunamadı", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "En İyi Güvenlik Uygulamaları", - "tip_strong_passwords": "Her kullanıcı için güçlü, benzersiz şifreler kullanın", - "tip_unique_accounts": "Her kişi için ayrı hesaplar oluşturun", - "tip_viewer_role": "Yalnızca okuma erişimine ihtiyaç duyan kullanıcılar için görüntüleyici rolünü kullanın", - "tip_operator_role": "Cihazları yönetmesi gereken ancak kullanıcıları yönetmesi gerekmeyen kullanıcılar için operatör rolünü kullanın", - "tip_audit_logs": "Şüpheli etkinlik açısından denetim günlüklerini düzenli olarak inceleyin", - "role_pro": "Pro (yalnızca API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Sunucu Yöneticisi", - "role_global_admin": "Genel Yönetici", - "organizations": "Organizasyonlar", - "user_organizations": "{username} organizasyonları", - "no_organizations": "Kullanıcı herhangi bir kuruluşa atanmamış", - "org_removed": "Organizasyon ataması kaldırıldı", - "server_role_label": "Sunucu Rolü", - "server_role_hint": "Kullanıcının tüm konsolda neler yapabileceğini belirler (panel erişimi, sunucu yapılandırması, denetim vb.).", - "org_membership_section": "Organizasyon Üyeliği", - "org_membership_hint": "Bir kullanıcı birden fazla kuruluşa ait olabilir. Kuruluş rolü yalnızca o kuruluş içindeki izinleri denetler ve yukarıdaki sunucu rolünden bağımsızdır.", - "column_organizations": "Organizasyonlar", - "no_orgs_short": "—", - "org_count_one": "{count} organizasyonu", - "org_count_many": "{count} kuruluşları", - "all_orgs_assigned": "Kullanıcı zaten her kuruluşun üyesidir.", - "user_groups": "Kullanıcı grupları", - "user_groups_hint": "Kullanıcı grupları, seçilen cihaz gruplarına erişim vermek için kullanılabilir.", - "loading_user_groups": "Kullanıcı grupları yükleniyor...", - "no_user_groups": "Kullanılabilir kullanıcı grubu yok", - "create_user_group": "Grup oluştur", - "edit_user_group": "Kullanıcı grubunu düzenle", - "delete_user_group": "Kullanıc�� grubunu sil", - "delete_user_group_confirm": "{name} kullanıcı grubu silinsin mi? Üyeler bu grup aracılığıyla verilen erişimi kaybedecek.", - "user_group_created": "Kullanıcı grubu oluşturuldu", - "user_group_updated": "Kullanıcı grubu güncellendi", - "user_group_deleted": "Kullanıcı grubu silindi", - "user_group_not_found": "Kullanıcı grubu bulunamadı", - "group_name": "Grup adı", - "group_name_placeholder": "Operatörler", - "group_note": "Note", - "group_note_placeholder": "İsteğe bağlı not", - "group_name_required": "Grup adı gerekli", - "group_members_count": "{count} üyeleri", - "provider": "Sağlayıcı", - "provider_local": "Yerel", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Kimlik sağlayıcı tarafından yönetiliyor", - "provider_managed_hint": "Bu hesap harici bir kimlik sağlayıcı (LDAP/AD veya SSO) tarafından yönetiliyor. Şifre ve rol sağlayıcı tarafından kontrol ediliyor ve burada değiştirilemez." - }, - "folders": { - "title": "Folders", - "create": "Klasör Oluştur", - "edit": "Klasörü Düzenle", - "delete": "Klasörü Sil", - "name": "Folder Name", - "name_placeholder": "Klasör adını girin", - "name_required": "Klasör adı gerekli", - "name_too_long": "Klasör adı çok uzun (en fazla 50 karakter)", - "color": "Color", - "icon": "Icon", - "not_found": "Klasör bulunamadı", - "delete_confirm": "Bu klasörü silmek istediğinizden emin misiniz? Cihazların ataması kaldırılacak.", - "delete_success": "Klasör başarıyla silindi", - "created": "Klasör başarıyla oluşturuldu", - "updated": "Klasör başarıyla güncellendi", - "no_devices_selected": "Hiçbir cihaz seçilmedi", - "devices_moved": "Cihazlar başarıyla taşındı", - "device_assigned": "Klasöre atanan cihaz", - "unassigned": "Unassigned", - "all_devices": "Tüm Cihazlar", - "drag_hint": "Cihazları düzenlemek için klasörlere sürükleyin", - "move_to": "Şuraya taşı:", - "toggle_sidebar": "Kenar çubuğunu aç/kapat" - }, + "no_groups": "Henüz grup yok", + "manual_groups": "Manuel gruplar", + "dynamic_memberships": "Dinamik üyelikler", + "group_allowed_user_groups": "İzin verilen kullanıcı grupları", + "group_allowed_user_groups_hint": "Seçilen kullanıcı gruplarındaki kullanıcılar bu cihaz grubuna erişebilir.", + "no_user_groups": "Kullanıcı grubu yok", + "edit_group": "Grubu düzenle", + "delete_group": "Grubu sil", + "delete_group_confirm": "{name} cihaz grubu silinsin mi?", + "group_deleted": "Cihaz grubu silindi", + "folder_group_readonly": "Klasör destekli gruplar klasörlerden yönetilir.", + "manage_user_groups": "Kullanıcı gruplarını yönet", + "restore_failed": "Cihaz geri yükleme başarısız", + "no_signal_tooltip": "İstemci yakın zamanda API ile iletişim kurdu ancak sinyal sunucusuna (UDP :21116) kayıtlı değil. Sunucu geçişinden sonra istemciyi yeniden başlatın.", + "per_page": "Sayfa başına" + }, + "keys": { + "title": "Sunucu Anahtarları", + "subtitle": "RustDesk istemcileri için ortak anahtar ve yapılandırma", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Sunucu Bilgileri", + "download": "Anahtarı İndir", + "show_qr": "Show QR", + "qr_hint": "Bu QR kodunu RustDesk mobil uygulamasıyla tarayın", + "no_key": "Ortak anahtar bulunamadı", + "no_key_to_copy": "Kopyalanacak anahtar yok", + "no_qr": "QR kodu mevcut değil", + "download_success": "Anahtar dosyası indirildi", + "not_found": "Anahtar bulunamadı", + "api_not_found": "API anahtarı bulunamadı" + }, + "settings": { + "title": "Ayarlar", + "subtitle": "Konsol yapılandırması ve hesap ayarları", + "tab_general": "General", + "tab_server": "Sunucu", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Dil", + "change_password": "Şifreyi Değiştir", + "password_desc": "Hesap şifrenizi güncelleyin", + "current_password": "Mevcut Şifre", + "new_password": "Yeni Şifre", + "confirm_password": "Şifreyi Onayla", + "save_password": "Şifreyi Güncelle", + "password_changed": "Şifre başarıyla değiştirildi", + "fill_all_fields": "Lütfen tüm alanları doldurun", + "passwords_not_match": "Şifreler eşleşmiyor", + "password_requirements": "Şifre gereksinimleri", + "password_requirements_not_met": "Şifre gereksinimleri karşılamıyor", + "req_length": "En az 8 karakter", + "req_uppercase": "En az bir büyük harf", + "req_lowercase": "En az bir küçük harf", + "req_number": "En az bir sayı", + "server_info": "Sunucu Bilgileri", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Son konsol etkinliği", + "no_audit_logs": "Denetim günlüğü bulunamadı", + "backend_title": "Sunucu Arka Ucu", + "backend_desc": "Cihaz yönetimi ve sinyal/aktarma hizmetleri için hangi sunucu arka ucunun kullanılacağını seçin.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Standart RustDesk sinyal ve aktarma sunucuları (hbbs + hbbr). Sınırlı uç noktalara sahip temel HTTP API.", + "backend_betterdesk_desc": "Tam REST API, JWT kimlik doğrulaması, engellenenler listesi, etiketler, gerçek zamanlı WebSocket olayları ve denetim günlüğüne sahip gelişmiş Go tabanlı sunucu.", + "backend_feature_signal": "Sinyal sunucusu (ID kaydı)", + "backend_feature_relay": "Aktarma sunucusu (bağlantı rölesi)", + "backend_feature_basic_api": "Temel REST API", + "backend_feature_full_api": "Tam REST API (34+ uç nokta)", + "backend_feature_jwt": "JWT kimlik doğrulaması ve TOTP 2FA", + "backend_feature_blocklist": "IP/ID engelleme listesi yönetimi", + "backend_feature_tags": "Cihaz etiketleri ve gruplandırma", + "backend_feature_audit": "Olay günlüğünü denetleme", + "backend_feature_websocket": "Gerçek zamanlı WebSocket etkinlikleri", + "backend_connection": "Bağlantı", + "backend_api_url": "API URL", + "backend_test": "Bağlantıyı Test Et", + "backend_testing": "Test ediliyor...", + "backend_save": "Arka Uç Uygula", + "backend_saved": "Sunucu arka ucu başarıyla değiştirildi. Cihaz verileri artık yeni arka uç tarafından yönetilecek.", + "backend_save_failed": "Sunucu arka ucu değiştirilemedi", + "backend_test_success": "Bağlantı başarılı! Sunucuya ulaşılabilir.", + "backend_test_failed": "Bağlantı başarısız oldu. Sunucuya ulaşılamıyor.", + "backend_confirm_switch": "Sunucu arka ucunu değiştirmek istediğinizden emin misiniz? Bu, cihazların yönetilme şeklini değiştirecek.", + "backend_unreachable": "Geçiş yapılamıyor: Hedef sunucuya ulaşılamıyor. İlk önce sunucuyu başlatın.", + "invalid_backend": "Geçersiz arka uç seçimi. 'Rustdesk' veya 'betterdesk'i seçin.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "İki Faktörlü Kimlik Doğrulama", + "totp_desc": "TOTP kimlik doğrulama uygulamalarıyla (Google Authenticator, Microsoft Authenticator, Authy vb.) ekstra bir güvenlik katmanı ekleyin.", + "totp_enabled": "2FA Etkin", + "totp_enabled_desc": "Hesabınız iki faktörlü kimlik doğrulama ile korunmaktadır.", + "totp_disabled": "2FA Etkin Değil", + "totp_disabled_desc": "Ek hesap güvenliği için iki faktörlü kimlik doğrulamayı etkinleştirin.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Telefonunuza bir kimlik doğrulama uygulaması yükleyin", + "totp_step2": "Aşağıdaki QR kodunu tarayın", + "totp_step3": "Doğrulamak için 6 haneli kodu girin", + "totp_manual_key": "Manual key", + "totp_enter_code": "Doğrulama kodunu girin", + "totp_verify_enable": "Doğrula ve Etkinleştir", + "totp_enabled_success": "İki faktörlü kimlik doğrulama etkin!", + "totp_recovery_warning": "Bu kurtarma kodlarını güvenli bir yere kaydedin. Her kod yalnızca bir kez kullanılabilir. Kimlik doğrulama uygulamanıza erişiminizi kaybederseniz oturum açmak için bu kodları kullanabilirsiniz.", + "totp_done": "Done", + "totp_disable_warning": "İki faktörlü kimlik doğrulamayı devre dışı bırakmak hesabınızı daha az güvenli hale getirecektir. Onaylamak için şifrenizi girin.", + "totp_disabled_success": "İki faktörlü kimlik doğrulama devre dışı bırakıldı.", + "tutorials_title": "Öğreticiler ve Kılavuzlar", + "tutorials_desc": "Konsol boyunca gösterilen rehberli turları ve yardım katmanlarını kontrol edin", + "tutorials_enabled": "Eğiticileri etkinleştir", + "tutorials_enabled_hint": "Devre dışı bırakıldığında öğreticiler otomatik olarak başlamaz ve yardım düğmesi gizlenir", + "tutorials_reset_hint": "Tekrar gösterilebilmeleri için tüm eğitimleri görünmeyen olarak işaretleyin", + "tutorials_enabled_toast": "Eğiticiler etkinleştirildi", + "tutorials_disabled_toast": "Eğiticiler devre dışı bırakıldı", + "tutorials_reset_toast": "Tüm eğitimler sıfırlandı", + "tab_auth": "Kimlik doğrulama", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "LDAP veya Active Directory aracılığıyla harici kimlik doğrulamayı yapılandırın. Kullanıcılar alan adı kimlik bilgileriyle oturum açabilecektir.", + "ldap_enabled": "LDAP Kimlik Doğrulamasını Etkinleştir", + "ldap_enabled_hint": "Etkinleştirildiğinde kullanıcılar LDAP/AD kimlik bilgileriyle oturum açabilir. Yerel hesaplar hala yedek olarak çalışıyor.", + "ldap_connection": "Sunucu Bağlantısı", + "ldap_host": "Sunucu", + "ldap_port": "Liman", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "TLS doğrulamasını atla", + "ldap_timeout": "Bağlantı zaman aşımı (s)", + "ldap_timeout_hint": "LDAP sunucu yanıtı için beklenecek saniyeler", + "ldap_bind_mode": "Ciltleme Modu", + "ldap_direct_bind": "Doğrudan Bağlama", + "ldap_direct_bind_hint": "Aramak için bir hizmet hesabı kullanmak yerine doğrudan bir DN şablonuyla bağlantı kurun.", + "ldap_bind_dn": "DN'yi bağla (hizmet hesabı)", + "ldap_bind_dn_hint": "Kullanıcıları aramak için kullanılan salt okunur bir hizmet hesabının Ayırt Edici Adı.", + "ldap_bind_password": "Şifreyi Bağla", + "ldap_base_dn": "Temel DN", + "ldap_base_dn_hint": "Kullanıcıları bulmak için arama tabanı, ör. dc=örnek,dc=com", + "ldap_user_filter": "Kullanıcı Filtresi", + "ldap_user_filter_hint": "Kullanıcıları bulmak için LDAP filtresi. Yer tutucu olarak {{username}} kullanın. Varsayılan: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Doğrudan Bağlama DN Şablonu", + "ldap_direct_bind_dn_hint": "Doğrudan bağlama için DN şablonu. Yer tutucu olarak {{username}} kullanın, ör. uid={{username}},ou=kullanıcılar,dc=örnek,dc=com", + "ldap_user_attrs": "Kullanıcı Özellikleri", + "ldap_attr_id": "Kullanıcı Adı Özelliği", + "ldap_attr_email": "E-posta Özelliği", + "ldap_attr_name": "Görünen Ad Özelliği", + "ldap_group_mapping": "Grup → Rol Eşleme", + "ldap_group_base_dn": "Grup Tabanı DN", + "ldap_group_base_dn_hint": "Ana Base DN'yi kullanmak için boş bırakın", + "ldap_group_filter": "Grup Filtresi", + "ldap_group_attr_name": "Grup Adı Özelliği", + "ldap_default_role": "Varsayılan Rol", + "ldap_default_role_hint": "LDAP grupları hiçbir eşlemeyle eşleşmeyen kullanıcılara atanan rol", + "ldap_role_viewer": "Görüntüleyici", + "ldap_role_operator": "Operatör", + "ldap_role_admin": "Yönetici", + "ldap_group_role_map": "Grup → Rol Haritası", + "ldap_group_role_map_hint": "LDAP gruplarını BetterDesk rolleriyle eşleyin. Biçim: GroupDN=rol ile ayrılmış | (boru). Örnek: CN=Yöneticiler,DC=örnek,DC=com=yönetici|CN=Ops,DC=örnek,DC=com=operatör", + "ldap_test_connection": "Bağlantıyı Test Et", + "ldap_testing": "Test ediliyor...", + "ldap_test_success": "Bağlantı başarılı! LDAP sunucusu erişilebilir ve bağlama kimlik bilgileri geçerli.", + "ldap_test_failed": "Bağlantı başarısız oldu", + "ldap_save": "LDAP Yapılandırmasını Kaydet", + "ldap_saved": "LDAP yapılandırması başarıyla kaydedildi", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Bir OpenID Connect sağlayıcısı (Azure AD, Okta, Google, Keycloak vb.) aracılığıyla Tekli Oturum Açma'yı yapılandırın.", + "oidc_enabled": "OIDC Kimlik Doğrulamasını Etkinleştir", + "oidc_enabled_hint": "Kullanıcıların harici bir kimlik sağlayıcıyla oturum açmasına izin ver", + "oidc_provider": "Kimlik Sağlayıcı", + "oidc_display_name": "Düğme Görünen Adı", + "oidc_display_name_hint": "Oturum açma düğmesinde gösterilen metin (ör. Azure AD, Okta)", + "oidc_issuer_url": "Verici URL", + "oidc_issuer_url_hint": "OpenID Connect veren URL (keşif otomatik olacaktır)", + "oidc_client_id": "Müşteri Kimliği", + "oidc_client_secret": "Müşteri Sırrı", + "oidc_redirect_url": "URL'yi yönlendir (Geri arama)", + "oidc_redirect_url_hint": "IdP'nizde yapılandırılanlarla tam olarak eşleşmelidir. Genellikle: http(s):://sunucunuz:21114/api/auth/oidc/callback", + "oidc_scopes": "Kapsamlar", + "oidc_use_pkce": "PKCE kullanın (önerilir)", + "oidc_auto_discovery": "Otomatik keşif", + "oidc_allow_signup": "Kullanıcıları otomatik oluştur", + "oidc_manual_endpoints": "Manuel Uç Nokta URL'leri", + "oidc_authorization_url": "Yetkilendirme Uç Noktası", + "oidc_token_url": "Token Uç Noktası", + "oidc_userinfo_url": "Kullanıcı Bilgisi Uç Noktası", + "oidc_claim_mapping": "Talep Eşleme", + "oidc_claim_username": "Kullanıcı Adı Talebi", + "oidc_claim_email": "E-posta Talebi", + "oidc_claim_name": "Görünen Ad Hak Talebi", + "oidc_claim_groups": "Grup Hak Talebi", + "oidc_role_mapping": "Rol Eşleme", + "oidc_default_role": "Varsayılan Rol", + "oidc_group_role_map": "Grup → Rol Eşleme", + "oidc_group_role_map_hint": "Her satıra bir eşleme: grup_adı=role (ör. yöneticiler=yönetici, operatörler=operatör)", + "oidc_test_discovery": "Test Keşfi", + "oidc_testing": "Test ediliyor...", + "oidc_test_success": "Keşif başarılı! Uç noktalar çözüldü.", + "oidc_test_failed": "Keşif başarısız oldu", + "oidc_issuer_required": "Keşfi test etmek için URL veren kuruluş gereklidir", + "oidc_save": "OIDC Yapılandırmasını Kaydet", + "oidc_saved": "OIDC yapılandırması başarıyla kaydedildi", + "tab_advanced": "Gelişmiş", + "connection_mode_title": "Bağlantı stratejisi", + "connection_mode_desc": "RustDesk masaüstü istemcilerinin bağlantı yöntemini kontrol edin: mümkün olduğunda doğrudan P2P (delik delme), ya da her zaman röle üzerinden.", + "connection_mode_label": "Varsayılan bağlantı modu", + "connection_mode_p2p_first": "Önce P2P (önerilen) — doğrudan bağlantı dene, başarısız olursa röleye geç", + "connection_mode_relay_only": "Yalnızca röle — tüm oturumlar röle sunucusu kullanır", + "connection_mode_advanced": "Gelişmiş seçenekler", + "connection_mode_fallback_ms": "P2P geri dönüş zaman aşımı (ms)", + "connection_mode_same_nat_relay": "Her iki taraf aynı genel IP'yi paylaşırsa röleye zorla (NAT saç tokası)", + "connection_mode_network_hint": "P2P için istemciler arasında UDP 21116 portuna erişilebilir olmalı. Sunucuda Sinyal TCP 21116, Röle TCP 21117, NAT testi TCP 21115 açık olmalı. Web tarayıcısı istemcileri her zaman röle kullanır.", + "connection_mode_save": "Kaydet", + "connection_mode_save_restart": "Kaydet ve sunucuyu yeniden başlat", + "connection_mode_saved": "Bağlantı modu kaydedildi", + "connection_mode_restart_started": "Sunucu yeniden başlatma başladı", + "connection_mode_restart_failed": "Sunucu yeniden başlatma başarısız", + "connection_mode_not_configurable": "Bu dağıtımda bağlantı modu değiştirilemiyor (systemd birimi veya docker-compose bulunamadı)", + "connection_mode_compose_error": "docker-compose.yml dosyasında sunucu ortam bölümü bulunamadı", + "connection_mode_source_saved": "Kaydedilen", + "connection_mode_source_defaults": "Sunucu varsayılanları kullanılıyor (panelden yazılamaz)", + "connection_mode_runtime": "Etkin sunucu", + "advanced_title": "Yapılandırma dosyaları", + "advanced_desc": "Sunucu yapılandırma dosyalarını doğrudan düzenleyin. Değişiklikler servislerin yeniden başlatılmasını gerektirebilir. Her kaydetmeden önce yedek kopya oluşturulur.", + "advanced_warning": "Bu dosyalar gizli bilgiler içerir (API anahtarları, veritabanı şifreleri, oturum sırları). Yalnızca etkisini anlıyorsanız düzenleyin. Sözdizimi hataları sunucunun başlamasını engelleyebilir.", + "advanced_files_label": "Dosyalar", + "advanced_select_file": "İçeriğini görüntülemek veya düzenlemek için listeden bir dosya seçin.", + "advanced_reload": "Yeniden yükle", + "advanced_save": "Dosyayı kaydet", + "advanced_apply_restart": "Uygula (servisi yeniden başlat)", + "advanced_saved": "Yapılandırma dosyası kaydedildi", + "advanced_restart_after_save": "Yapılandırma kaydedildi. Değişikliklerin geçerli olması için etkilenen servisi şimdi yeniden başlatılsın mı?", + "advanced_restart_confirm": "İlgili BetterDesk servisleri yeniden başlatılsın mı? Etkin bağlantılar kısa süreliğine kesintiye uğrayabilir.", + "advanced_restart_console_confirm": "Web konsol servisi yeniden başlatılsın mı? Tarayıcı oturumu kısa süreliğine kesilecek ve konsol geri döndüğünde sayfa yeniden yüklenecek.", + "advanced_restart_started": "Servis yeniden başlatma başladı", + "advanced_restart_done": "Konsol yeniden başlatıldı — sayfa yeniden yükleniyor…", + "advanced_restart_polling": "Konsolun çevrimiçi dönmesi bekleniyor…", + "advanced_restart_timeout": "Yeniden başlatma gönderildi ama konsol zamanında yanıt vermedi. systemd/NSSM günlüklerini kontrol edin ve manuel olarak yeniden yükleyin.", + "advanced_restart_failed": "Servis yeniden başlatma başarısız (yetersiz ayrıcalık veya servis kurulu değil)", + "advanced_save_confirm": "Bu dosyadaki değişiklikler kaydedilsin mi? Önceki sürümün yedeği oluşturulacak.", + "advanced_unsaved_confirm": "Kaydedilmemiş değişiklikleriniz var. Bunlar atılsın mı?", + "advanced_no_files": "Bu sistemde kullanılabilir yapılandırma dosyası yok.", + "advanced_readonly": "salt okunur", + "advanced_missing": "eksik", + "advanced_new_file": "Yeni dosya (kaydetene kadar oluşturulmaz)", + "advanced_new_file_hint": "Yeni dosya — içerik ekleyin ve kaydedin", + "advanced_backup_created": "yedek oluşturuldu", + "advanced_restart_console": ".env değişikliklerinin geçerli olması için web konsol servisini yeniden başlatın (örn. systemctl restart betterdesk-console).", + "advanced_restart_goserver": "Engelleme listesi değişikliklerini yüklemek için BetterDesk Go sunucusunu yeniden başlatın.", + "advanced_restart_systemd": "systemd birimlerini düzenledikten sonra çalıştırın: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Değişikliklerin geçerli olması için etkilenen servisi yeniden başlatın.", + "advanced_error_unknown": "Bilinmeyen yapılandırma dosyası", + "advanced_error_not_found": "Dosya mevcut değil", + "advanced_error_not_file": "Yol normal bir dosya değil", + "advanced_error_too_large": "Dosya maksimum düzenlenebilir boyutu aşıyor (512 KB)", + "advanced_error_binary": "İkili dosyalar panelde düzenlenemez", + "advanced_error_invalid": "Geçersiz dosya içeriği", + "advanced_error_not_writable": "Konsol süreci bu dosyaya yazamıyor", + "advanced_file_console-env": "Konsol ortamı (.env)", + "advanced_file_console-env-local": "Konsol geçersiz kılmaları (.env.local)", + "advanced_file_go-blocklist": "Go sunucu engelleme listesi (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (servis birimi)", + "advanced_file_systemd-server": "systemd: betterdesk-server (servis birimi)", + "advanced_file_console-session-secret": "Konsol oturum sırrı (.session_secret)", + "advanced_file_go-audit-log": "Go sunucu denetim günlüğü (audit.jsonl)", + "advanced_file_build-env": "Ajan yapılandırma ortamı (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (supervisord yapılandırması)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (orkestrasyon)", + "advanced_restart_none": "Bu dosya için servis yeniden başlatma gerekmez.", + "enrollment_title": "Cihaz kaydı (RustDesk)", + "enrollment_desc": "Yeni RustDesk istemcilerinin nasıl kayıt olacağını ve operatörlerin kayıt istekleri sayfasında bunları nasıl onaylayacağını kontrol edin.", + "enrollment_require_approval": "Operatör onayı gerekli (Yönetilen mod)", + "enrollment_require_approval_hint": "Etkinleştirildiğinde, bilinmeyen istemciler operatör \"Kayıt İstekleri\"nde onaylayana kadar sırada bekler.", + "enrollment_rich_approve": "Tam onay formu (ad, klasör, gruplar, etiketler)", + "enrollment_rich_approve_hint": "Kayıt veya LAN kayıt isteklerini onaylarken ayrıntılı iletişim kutusu gösterir.", + "enrollment_tag_picker": "Mevcut cihaz etiketlerinden etiket seç", + "enrollment_tag_picker_hint": "Operatörlerin yalnızca yazmak yerine Cihazlar sayfasındaki etiket listesinden seçmesine olanak tanır.", + "enrollment_open_requests": "Kayıt isteklerini aç", + "enrollment_pending_count": "{count} bekleyen kayıt isteği" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Giriş Başarısız Oldu", + "action_logout": "Logout", + "action_password_change": "Şifre Değiştirildi", + "action_2fa_enable": "2FA Etkin", + "action_2fa_disable": "2FA Devre Dışı", + "action_user_create": "Kullanıcı Oluşturuldu", + "action_user_update": "Kullanıcı Güncellendi", + "action_user_delete": "Kullanıcı Silindi", + "action_settings_update": "Ayarlar Güncellendi", + "action_device_ban": "Cihaz Yasaklandı", + "action_device_unban": "Cihazın Yasağı Kaldırıldı", + "action_device_delete": "Cihaz Silindi" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Erken özellik — ajan paketi oluşturucu aktif geliştirmede.", + "config_options": "Yapılandırma Seçenekleri", + "server_address": "Sunucu Adresi", + "server_address_hint": "Sunucunuzun alan adı veya IP adresi", + "custom_port": "Custom Port", + "port_hint": "Varsayılan olarak boş bırakın (21116)", + "relay_server": "Aktarma Sunucusu", + "relay_placeholder": "Boşsa kimlik sunucusuyla aynı", + "relay_hint": "İsteğe bağlı: ayrı aktarma sunucusu adresi", + "include_key": "Ortak anahtarı yapılandırmaya dahil et", + "generate": "Yapılandırma Oluştur", + "output": "Yapılandırma Çıkışı", + "usage_title": "Bağlantı Detayları", + "generated": "Yapılandırma oluşturuldu", + "server_required": "Sunucu adresi gerekli", + "nothing_to_copy": "Önce bir konfigürasyon oluşturun", + "bundles_title": "Temsilci paketleri", + "new_bundle": "Yeni paket", + "editor_title": "Paket düzenleyici", + "empty_state": "Başlamak için soldan bir paket seçin veya yeni bir paket oluşturun.", + "loading": "Yükleniyor…", + "no_bundles": "Henüz paket yok. İlkini yarat.", + "bundle_name": "Paket adı", + "bundle_name_hint": "Yalnızca dahili etiket — son kullanıcılara gösterilmez.", + "short_link": "Kısa indirme bağlantısı", + "short_link_hint": "Genel URL’de (/d/…) kullanılır. Yalnızca küçük harfler, rakamlar ve tireler (2–32 karakter). Paket adından otomatik doldurulur — paylaşımı kolaylaştırmak için kısaltın (örn. acme).", + "branding_section": "Markalaşma", + "company_name": "Şirket / marka adı", + "short_text": "Kısa açıklama", + "contact_email": "İletişim e-postası", + "contact_phone": "İletişim telefonu", + "contact_url": "İletişim web sitesi", + "logo": "logosu", + "logo_hint": "PNG, JPEG, SVG veya WebP. Maksimum 256 KB.", + "logo_clear": "Logoyu kaldır", + "primary_color": "Ana renk", + "accent_color": "Başlık rengi", + "default_lang": "Varsayılan dil", + "allow_unattended": "Katılımsız erişime izin ver", + "allow_unattended_hint": "Etkinleştirildiğinde temsilci, operatör erişimi için kalıcı bir parola gösterir.", + "save": "Paketi kaydet", + "revoke": "İptal et", + "unrevoke": "Yeniden etkinleştir", + "revoked": "İptal edildi", + "preview_title": "Canlı önizleme", + "preview_hint": "Son kullanıcı aracısı penceresinin yaklaşık görünümü.", + "preview_default_name": "BetterDesk Desteği", + "preview_status_ready": "Hazır", + "preview_id": "Kimliğiniz", + "preview_password": "Şifre", + "preview_chat": "Destek ekibiyle sohbet edin", + "preview_settings": "Ayarlar (yalnızca yönetici)", + "preview_quit": "Çık (yalnızca yönetici)", + "download_link_title": "İndirme bağlantısı", + "download_link_hint": "Bu bağlantıyı son kullanıcılarla paylaşın. Markalı bir indirme sayfası görecekler. Kısa bağlantıyı değiştirdikten sonra eski hex bağlantılar çalışmaya devam eder.", + "open_portal": "Açık", + "created": "Paket oluşturuldu", + "saved": "Paket kaydedildi", + "deleted": "Paket silindi", + "revoked_ok": "Paket iptal edildi", + "unrevoked_ok": "Paket yeniden etkinleştirildi", + "link_copied": "Bağlantı panoya kopyalandı", + "copy_failed": "Otomatik olarak kopyalanamadı — lütfen manuel olarak kopyalayın", + "unsaved_confirm": "Kaydedilmemiş değişiklikler silinsin mi?", + "confirm_revoke": "Bu paket iptal edilsin mi? İndirme bağlantısı çalışmayı durduracaktır.", + "confirm_unrevoke": "Bu paket yeniden etkinleştirilsin mi?", + "confirm_delete": "Bu paket kalıcı olarak silinsin mi? Bu geri alınamaz.", "errors": { - "forbidden_title": "Erişim Reddedildi", - "forbidden_message": "Bu kaynağa erişim izniniz yok.", - "not_found_title": "Sayfa Bulunamadı", - "not_found_message": "Aradığınız sayfa mevcut değil veya taşınmış.", - "server_error_title": "Sunucu Hatası", - "server_error_message": "Bir şeyler ters gitti. Lütfen daha sonra tekrar deneyin.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Cihazlar yüklenemedi", - "load_key_failed": "Anahtar yüklenemedi", - "load_qr_failed": "QR yüklenemedi", - "load_audit_failed": "Denetim günlüğü yüklenemedi", - "load_users_failed": "Kullanıcılar yüklenemedi", - "load_folders_failed": "Klasörler yüklenemedi", - "download_failed": "İndirme başarısız oldu", - "logout_failed": "Oturum kapatılamadı", - "password_change_failed": "Şifre değiştirilemedi", - "language_change_failed": "Dil değiştirilemedi", - "ban_failed": "Cihaz yasaklanamadı", - "unban_failed": "Cihazın yasağı kaldırılamadı", - "delete_failed": "Cihaz silinemedi", - "change_id_failed": "Cihaz kimliği değiştirilemedi", - "bulk_delete_failed": "Cihazlar silinemedi", - "sync_failed": "Durum senkronize edilemedi", - "error": "Error", - "not_found": "Not found", - "server_error": "Sunucu hatası", - "load_device_failed": "Cihaz yüklenemedi", - "load_orgs_failed": "Kuruluşlar yüklenemedi" + "validation_failed": "Doğrulama başarısız oldu", + "name_required": "Paket adı gerekli", + "company_name_required": "Şirket adı gerekli", + "logo_invalid": "Logo geçerli bir resim dosyası olmalıdır", + "logo_too_large": "Logo 256 KB veya daha küçük olmalıdır", + "logo_read_failed": "Logo dosyası okunamadı", + "primary_color_invalid": "Ana renk onaltılık bir değer olmalıdır (ör. #2563eb)", + "accent_color_invalid": "Başlık rengi onaltılık bir değer olmalıdır (ör. #1e293b)", + "contact_url_invalid": "İletişim web sitesi geçerli bir URL olmalıdır", + "server_host_required": "Genel sunucu adresi zorunludur", + "server_host_invalid": "Geçerli bir etki alanı adı veya IPv4 adresi girin", + "token_failed": "Kayıt belirteci oluşturulamadı — sunucu bağlantısını kontrol edin", + "rebuild_revoked": "İptal edilmiş paket yeniden derlenemez — önce yeniden etkinleştirin", + "slug_invalid": "Kısa bağlantı yalnızca küçük harf, rakam ve tire içerebilir", + "slug_too_short": "Kısa bağlantı en az 2 karakter olmalıdır", + "slug_too_long": "Kısa bağlantı en fazla 32 karakter olabilir", + "slug_taken": "Bu kısa bağlantı başka bir paket tarafından zaten kullanılıyor" }, - "remote": { - "title": "Uzak Masaüstü", - "connecting": "Bağlanıyor...", - "waiting_password": "Şifre bekleniyor", - "authenticating": "Kimlik doğrulanıyor...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Şifre Gerekli", - "enter_password_for": "Cihaz için şifreyi girin", - "password_placeholder": "Cihaz şifresi", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Cihazlara Geri Dön", - "fullscreen": "Fullscreen", - "toggle_audio": "Sesi Değiştir", - "send_keys": "Anahtarları Gönder", - "scale_mode": "Scale Mode", - "scale_fit": "Pencereye Sığdır", - "scale_fill": "Fill Window", - "scale_original": "Orijinal Boyut (1:1)", - "scale_stretch": "Doldurmak için Uzat", - "actions": "Actions", - "lock_screen": "Kilit Ekranı", - "restart_remote": "Uzak Cihazı Yeniden Başlatın", - "refresh_screen": "Ekranı Yenile", - "clipboard_paste": "Panodan yapıştır", - "block_input": "Block Input", - "display_settings": "Ekran Ayarları", - "image_quality": "Görüntü Kalitesi", - "quality_best": "En İyi (Tam Kalite, 60 fps)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Uzak İmleci Göster", - "lock_after_session": "Oturumdan Sonra Kilitle", - "privacy_mode": "Gizlilik Modu", - "disable_clipboard": "Panoyu Devre Dışı Bırak", - "chat": "Chat", - "chat_placeholder": "Bir mesaj yazın...", - "record": "Kayıt Ekranı", - "view_only": "Yalnızca Görüntüle", - "pin_toolbar": "Araç Çubuğunu Sabitle", - "monitors": "Monitors", - "select_monitor": "Monitörü Seçin", - "quality_speed": "Hız (Düşük Kalite, 60 fps)", - "quality_quality": "Kalite (En İyi, 30 fps)", - "recording_started": "Kayıt başladı", - "recording_stopped": "Kayıt durduruldu", - "download_recording": "Kaydı İndir", - "e2e_encrypted": "Uçtan Uca Şifrelenmiş", - "e2e_key_exchange": "Güvenli kanal oluşturuluyor...", - "confirm_restart": "Uzak cihazı yeniden başlatmak istediğinizden emin misiniz?", - "webcodecs_not_supported": "Tarayıcınız WebCodecs API'yi desteklemiyor. Lütfen Chrome 94+ veya Edge 94+ kullanın.", - "webcodecs_insecure_context": "WebCodecs, HTTP üzerinde mevcut değildir. Video, yazılım geri dönüşünü kullanır. En iyi performans için HTTPS kullanın.", - "webcodecs_fallback_active": "Yazılım video kod çözücüsü etkin (sınırlı performans)", - "click_to_start": "Başlamak için tıklayın", - "autoplay_blocked": "Tarayıcı, video ve ses oynatmayı başlatmak için kullanıcı etkileşimi gerektirir.", - "start_playback": "Oynatmayı Başlat", - "new_connection": "Yeni Bağlantı", - "device_id_placeholder": "Cihaz Kimliğini Girin", - "http_warning": "HTTP modu: H.264 yazılım kod çözme (~15 FPS) ile sınırlıdır. Tam performans için HTTPS kullanın (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Dosya Aktarımı", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Bu klasör boş", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Aktarım başarısız oldu", - "file_show_hidden": "Gizli dosyaları göster", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Klasör adını girin:", - "file_parent": "Ana klasör", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Yeni adı girin:", - "file_delete_confirm": "Bu öğeyi silmek istediğinizden emin misiniz?", - "file_cancelled": "Aktarım iptal edildi", - "2fa_required": "2FA Doğrulaması Gerekli", - "2fa_hint": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", - "2fa_invalid": "6 haneli geçerli bir kod girin", - "verify": "Verify", - "use_cdap_fallback": "CDAP görüntüleyiciyi kullanın", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "Pano boş", - "clipboard_denied": "Pano erişimi reddedildi. HTTPS gerekli veya izin verilmedi.", - "file_loading": "Yükleniyor...", - "file_timeout": "Uzak aygıt yanıt vermedi. Uzak makinede dosya aktarımı desteklenmiyor veya devre dışı bırakılmış olabilir.", - "codec": "Video Codec'i", - "codec_auto": "Otomatik (önerilen)" + "legacy_title": "İstemci Yapılandırma Oluşturucu", + "connection_section": "Sunucu bağlantısı", + "server_host": "Genel sunucu adresi", + "server_host_placeholder": "support.example.com veya 203.0.113.10", + "server_host_hint": "Son kullanıcıların BetterDesk sunucunuza ulaştığı etki alanı adı veya genel IP. Port, konsol yapılandırmasından alınır.", + "use_https": "HTTPS / WSS kullan (önerilen)", + "enrollment_token": "Cihaz kaydı", + "enrollment_token_pending": "Onaydan sonra cihaz başına", + "enrollment_token_set": "Cihaz başına — Kayıtlar'da onayla", + "enrollment_token_hint": "Her kurulum kendi kendine kayıt olur. Kayıtlar panelinde yeni cihazları onaylayın; sunucu ardından her bilgisayar için benzersiz erişim anahtarı verir.", + "enrollment_per_device": "Cihaz başına — Kayıtlar'da onayla", + "background_color": "Pencere arka planı", + "surface_color": "Kart arka planı", + "text_color": "Metin rengi", + "text_muted_color": "Soluk metin rengi", + "status_ready_color": "Hazır gösterge rengi", + "header_text_color": "Başlık metin rengi", + "builds_title": "İstemci derlemeleri", + "builds_hint": "Her platform için bu sunucuda derlenen yükleyiciler. Araç zinciri hatalarını düzelttikten veya ajan kaynağını güncelledikten sonra yeniden derleyin.", + "builds_loading": "Derleme durumu yükleniyor…", + "builds_empty": "Henüz sırada derleme yok — paketi kaydedin veya Tümünü yeniden derle'ye tıklayın.", + "rebuild_all": "Tümünü yeniden derle", + "rebuilding_all": "Yeniden derleme sıraya alınıyor…", + "rebuild_queued": "Tüm platform derlemeleri sıraya alındı", + "rebuild_confirm": "Bu paket için tüm platform yükleyicileri yeniden derlensin mi? Mevcut hazır yapıtlar değiştirilecek.", + "build_status_ready": "Hazır", + "build_status_pending": "Sırada", + "build_status_building": "Derleniyor", + "build_status_failed": "Başarısız", + "builds_summary": "{{ready}} hazır · {{pending}} sırada · {{building}} derleniyor · {{failed}} başarısız", + "build_error_hint": "Derleme hatası", + "preview_help": "Yardım iste" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "Kimlik Sunucusu", + "relay_server": "Aktarma Sunucusu", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Kontrol ediliyor...", + "label": "Status", + "no_signal": "Sinyal yok" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Masaüstü İstemcisi aracılığıyla bağlanın", + "remote_viewer": "Uzaktan Görüntüleyici", + "web_remote": "Web Uzaktan Kumandası", + "details": "Details", + "edit": "Düzenle", + "delete": "Sil", + "ban": "Ban", + "unban": "Unban", + "save": "Kaydet", + "cancel": "İptal", + "confirm": "Onayla", + "close": "Kapat", + "clear": "Clear", + "ok": "OK", + "saved": "Başarıyla kaydedildi", + "back": "Geri", + "create": "Oluştur", + "dismiss": "Dismiss", + "view_all": "Tümünü Görüntüle", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count} saniye önce", + "minutes_ago": "{count} dk önce", + "hours_ago": "{count}h önce", + "days_ago": "{count} gün önce", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Kullanıcı Yönetimi", + "subtitle": "Konsol kullanıcılarını ve izinlerini yönetin", + "add_user": "Add User", + "edit_user": "Kullanıcıyı Düzenle", + "username": "Kullanıcı adı", + "username_placeholder": "Kullanıcı adını girin", + "username_hint": "Yalnızca 3-32 karakter, harf, rakam ve alt çizgi", + "password": "Şifre", + "password_placeholder": "Şifreyi girin", + "password_hint": "Karışık harf, sayı ve simgelerden oluşan minimum 8 karakter", + "password_leave_empty": "Güncel tutmak için boş bırakın", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Oluşturuldu", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Kullanıcı Oluştur", + "edit": "Düzenle", + "reset_password": "Şifreyi Sıfırla", + "new_password": "Yeni Şifre", + "delete_title": "Kullanıcıyı Sil", + "delete_confirm": "{username} kullanıcısını silmek istediğinizden emin misiniz?", + "delete_success": "Kullanıcı başarıyla silindi", + "user_created": "Kullanıcı başarıyla oluşturuldu", + "user_updated": "Kullanıcı başarıyla güncellendi", + "password_reset_success": "Şifre başarıyla sıfırlandı", + "empty_title": "Kullanıcı bulunamadı", + "empty_text": "Konsol erişimini yönetmek için kullanıcı ekleyin", + "fill_required": "Lütfen gerekli tüm alanları doldurun", + "invalid_username": "Kullanıcı adı yalnızca 3-32 karakter, harf, rakam ve alt çizgiden oluşmalıdır", + "username_exists": "Kullanıcı adı zaten mevcut", + "weak_password": "Şifre çok zayıf", + "password_too_short": "Şifre en az 8 karakter olmalıdır", + "invalid_role": "Geçersiz rol", + "cannot_demote_self": "Kendinizi düşüremezsiniz", + "cannot_delete_self": "Kendi hesabınızı silemezsiniz", + "last_admin": "Son yönetici silinemiyor", + "admin_only": "Bu özellik yalnızca yöneticilere açıktır", + "password_required": "Şifre gerekli", + "not_found": "Kullanıcı bulunamadı", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "En İyi Güvenlik Uygulamaları", + "tip_strong_passwords": "Her kullanıcı için güçlü, benzersiz şifreler kullanın", + "tip_unique_accounts": "Her kişi için ayrı hesaplar oluşturun", + "tip_viewer_role": "Yalnızca okuma erişimine ihtiyaç duyan kullanıcılar için görüntüleyici rolünü kullanın", + "tip_operator_role": "Cihazları yönetmesi gereken ancak kullanıcıları yönetmesi gerekmeyen kullanıcılar için operatör rolünü kullanın", + "tip_audit_logs": "Şüpheli etkinlik açısından denetim günlüklerini düzenli olarak inceleyin", + "role_pro": "Pro (yalnızca API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Sunucu Yöneticisi", + "role_global_admin": "Genel Yönetici", + "organizations": "Organizasyonlar", + "user_organizations": "{username} organizasyonları", + "no_organizations": "Kullanıcı herhangi bir kuruluşa atanmamış", + "org_removed": "Organizasyon ataması kaldırıldı", + "server_role_label": "Sunucu Rolü", + "server_role_hint": "Kullanıcının tüm konsolda neler yapabileceğini belirler (panel erişimi, sunucu yapılandırması, denetim vb.).", + "org_membership_section": "Organizasyon Üyeliği", + "org_membership_hint": "Bir kullanıcı birden fazla kuruluşa ait olabilir. Kuruluş rolü yalnızca o kuruluş içindeki izinleri denetler ve yukarıdaki sunucu rolünden bağımsızdır.", + "column_organizations": "Organizasyonlar", + "no_orgs_short": "—", + "org_count_one": "{count} organizasyonu", + "org_count_many": "{count} kuruluşları", + "all_orgs_assigned": "Kullanıcı zaten her kuruluşun üyesidir.", + "user_groups": "Kullanıcı grupları", + "user_groups_hint": "Kullanıcı grupları, seçilen cihaz gruplarına erişim vermek için kullanılabilir.", + "loading_user_groups": "Kullanıcı grupları yükleniyor...", + "no_user_groups": "Kullanılabilir kullanıcı grubu yok", + "create_user_group": "Grup oluştur", + "edit_user_group": "Kullanıcı grubunu düzenle", + "delete_user_group": "Kullanıc�� grubunu sil", + "delete_user_group_confirm": "{name} kullanıcı grubu silinsin mi? Üyeler bu grup aracılığıyla verilen erişimi kaybedecek.", + "user_group_created": "Kullanıcı grubu oluşturuldu", + "user_group_updated": "Kullanıcı grubu güncellendi", + "user_group_deleted": "Kullanıcı grubu silindi", + "user_group_not_found": "Kullanıcı grubu bulunamadı", + "group_name": "Grup adı", + "group_name_placeholder": "Operatörler", + "group_note": "Note", + "group_note_placeholder": "İsteğe bağlı not", + "group_name_required": "Grup adı gerekli", + "group_members_count": "{count} üyeleri", + "provider": "Sağlayıcı", + "provider_local": "Yerel", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Kimlik sağlayıcı tarafından yönetiliyor", + "provider_managed_hint": "Bu hesap harici bir kimlik sağlayıcı (LDAP/AD veya SSO) tarafından yönetiliyor. Şifre ve rol sağlayıcı tarafından kontrol ediliyor ve burada değiştirilemez." + }, + "folders": { + "title": "Folders", + "create": "Klasör Oluştur", + "edit": "Klasörü Düzenle", + "delete": "Klasörü Sil", + "name": "Folder Name", + "name_placeholder": "Klasör adını girin", + "name_required": "Klasör adı gerekli", + "name_too_long": "Klasör adı çok uzun (en fazla 50 karakter)", + "color": "Color", + "icon": "Icon", + "not_found": "Klasör bulunamadı", + "delete_confirm": "Bu klasörü silmek istediğinizden emin misiniz? Cihazların ataması kaldırılacak.", + "delete_success": "Klasör başarıyla silindi", + "created": "Klasör başarıyla oluşturuldu", + "updated": "Klasör başarıyla güncellendi", + "no_devices_selected": "Hiçbir cihaz seçilmedi", + "devices_moved": "Cihazlar başarıyla taşındı", + "device_assigned": "Klasöre atanan cihaz", + "unassigned": "Unassigned", + "all_devices": "Tüm Cihazlar", + "drag_hint": "Cihazları düzenlemek için klasörlere sürükleyin", + "move_to": "Şuraya taşı:", + "toggle_sidebar": "Kenar çubuğunu aç/kapat" + }, + "errors": { + "forbidden_title": "Erişim Reddedildi", + "forbidden_message": "Bu kaynağa erişim izniniz yok.", + "not_found_title": "Sayfa Bulunamadı", + "not_found_message": "Aradığınız sayfa mevcut değil veya taşınmış.", + "server_error_title": "Sunucu Hatası", + "server_error_message": "Bir şeyler ters gitti. Lütfen daha sonra tekrar deneyin.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Cihazlar yüklenemedi", + "load_key_failed": "Anahtar yüklenemedi", + "load_qr_failed": "QR yüklenemedi", + "load_audit_failed": "Denetim günlüğü yüklenemedi", + "load_users_failed": "Kullanıcılar yüklenemedi", + "load_folders_failed": "Klasörler yüklenemedi", + "download_failed": "İndirme başarısız oldu", + "logout_failed": "Oturum kapatılamadı", + "password_change_failed": "Şifre değiştirilemedi", + "language_change_failed": "Dil değiştirilemedi", + "ban_failed": "Cihaz yasaklanamadı", + "unban_failed": "Cihazın yasağı kaldırılamadı", + "delete_failed": "Cihaz silinemedi", + "change_id_failed": "Cihaz kimliği değiştirilemedi", + "bulk_delete_failed": "Cihazlar silinemedi", + "sync_failed": "Durum senkronize edilemedi", + "error": "Error", + "not_found": "Not found", + "server_error": "Sunucu hatası", + "load_device_failed": "Cihaz yüklenemedi", + "load_orgs_failed": "Kuruluşlar yüklenemedi" + }, + "remote": { + "title": "Uzak Masaüstü", + "connecting": "Bağlanıyor...", + "waiting_password": "Şifre bekleniyor", + "authenticating": "Kimlik doğrulanıyor...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Şifre Gerekli", + "enter_password_for": "Cihaz için şifreyi girin", + "password_placeholder": "Cihaz şifresi", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Cihazlara Geri Dön", + "fullscreen": "Fullscreen", + "toggle_audio": "Sesi Değiştir", + "send_keys": "Anahtarları Gönder", + "scale_mode": "Scale Mode", + "scale_fit": "Pencereye Sığdır", + "scale_fill": "Fill Window", + "scale_original": "Orijinal Boyut (1:1)", + "scale_stretch": "Doldurmak için Uzat", + "actions": "Actions", + "lock_screen": "Kilit Ekranı", + "restart_remote": "Uzak Cihazı Yeniden Başlatın", + "refresh_screen": "Ekranı Yenile", + "clipboard_paste": "Panodan yapıştır", + "block_input": "Block Input", + "display_settings": "Ekran Ayarları", + "image_quality": "Görüntü Kalitesi", + "quality_best": "En İyi (Tam Kalite, 60 fps)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Uzak İmleci Göster", + "lock_after_session": "Oturumdan Sonra Kilitle", + "privacy_mode": "Gizlilik Modu", + "disable_clipboard": "Panoyu Devre Dışı Bırak", + "chat": "Chat", + "chat_placeholder": "Bir mesaj yazın...", + "record": "Kayıt Ekranı", + "view_only": "Yalnızca Görüntüle", + "pin_toolbar": "Araç Çubuğunu Sabitle", + "monitors": "Monitors", + "select_monitor": "Monitörü Seçin", + "quality_speed": "Hız (Düşük Kalite, 60 fps)", + "quality_quality": "Kalite (En İyi, 30 fps)", + "recording_started": "Kayıt başladı", + "recording_stopped": "Kayıt durduruldu", + "download_recording": "Kaydı İndir", + "e2e_encrypted": "Uçtan Uca Şifrelenmiş", + "e2e_key_exchange": "Güvenli kanal oluşturuluyor...", + "confirm_restart": "Uzak cihazı yeniden başlatmak istediğinizden emin misiniz?", + "webcodecs_not_supported": "Tarayıcınız WebCodecs API'yi desteklemiyor. Lütfen Chrome 94+ veya Edge 94+ kullanın.", + "webcodecs_insecure_context": "WebCodecs, HTTP üzerinde mevcut değildir. Video, yazılım geri dönüşünü kullanır. En iyi performans için HTTPS kullanın.", + "webcodecs_fallback_active": "Yazılım video kod çözücüsü etkin (sınırlı performans)", + "click_to_start": "Başlamak için tıklayın", + "autoplay_blocked": "Tarayıcı, video ve ses oynatmayı başlatmak için kullanıcı etkileşimi gerektirir.", + "start_playback": "Oynatmayı Başlat", + "new_connection": "Yeni Bağlantı", + "device_id_placeholder": "Cihaz Kimliğini Girin", + "http_warning": "HTTP modu: H.264 yazılım kod çözme (~15 FPS) ile sınırlıdır. Tam performans için HTTPS kullanın (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Dosya Aktarımı", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Bu klasör boş", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Aktarım başarısız oldu", + "file_show_hidden": "Gizli dosyaları göster", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Klasör adını girin:", + "file_parent": "Ana klasör", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Yeni adı girin:", + "file_delete_confirm": "Bu öğeyi silmek istediğinizden emin misiniz?", + "file_cancelled": "Aktarım iptal edildi", + "2fa_required": "2FA Doğrulaması Gerekli", + "2fa_hint": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", + "2fa_invalid": "6 haneli geçerli bir kod girin", + "verify": "Verify", + "use_cdap_fallback": "CDAP görüntüleyiciyi kullanın", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "Pano boş", + "clipboard_denied": "Pano erişimi reddedildi. HTTPS gerekli veya izin verilmedi.", + "file_loading": "Yükleniyor...", + "file_timeout": "Uzak aygıt yanıt vermedi. Uzak makinede dosya aktarımı desteklenmiyor veya devre dışı bırakılmış olabilir.", + "codec": "Video Codec'i", + "codec_auto": "Otomatik (önerilen)" + }, + "branding": { + "identity_title": "Marka Kimliği", + "identity_desc": "Konsolda gösterilen uygulama adını ve açıklamasını özelleştirin", + "app_name": "Uygulama Adı", + "app_description": "Uygulama Açıklaması", + "logo_title": "Logo", + "logo_desc": "Logonuzun kenar çubuğunda ve giriş sayfasında nasıl görüneceğini seçin", + "logo_type_icon": "Malzeme Simgesi", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "Bir Malzeme Simgesi adı girin (ör. dns, bulut, güvenlik). Fonts.google.com/icons'a bakın", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "SVG işaretlemenizi buraya yapıştırın. Yollar ve stillerle birlikte tam öğelerini destekler.", + "logo_image_upload": "Resim Yükle", + "logo_image_choose": "Resim dosyasını seç", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Geçersiz dosya türü. PNG, JPG, GIF, WebP veya SVG kullanın.", + "preview": "Preview", + "colors_title": "Renk Şeması", + "colors_desc": "Renk paletini özelleştirin. Varsayılanları kullanmak için boş bırakın.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "Vurgu Renkleri", + "colors_borders": "Borders", + "import_export_title": "İthalat / İhracat", + "import_export_desc": "Temanızı JSON dosyası olarak kaydedin veya başka bir örnekten içe aktarın", + "export_theme": "İhracat Teması", + "import_theme": "Temayı İçe Aktar", + "reset_defaults": "Varsayılanlara Sıfırla", + "save_branding": "Markalamayı Kaydet", + "saved": "Markalama başarıyla kaydedildi. Yeniden yükleniyor...", + "exported": "Tema dışa aktarıldı", + "imported": "Tema başarıyla içe aktarıldı. Yeniden yükleniyor...", + "import_error": "Tema içe aktarılamadı. Geçersiz dosya biçimi.", + "reset_confirm": "Markalamayı varsayılanlara sıfırlamak istediğinizden emin misiniz? Bu geri alınamaz.", + "reset_success": "Markalama varsayılanlara sıfırlandı. Yeniden yükleniyor...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Marka logonuz olarak görüntülenen birincil metin", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Logonun altındaki ikincil metin (ör. ürün adı veya kısa açıklama)", + "logo_upload_success": "Logo başarıyla yüklendi.", + "typography_title": "Typography", + "typography_desc": "Başlıklar ve gövde metni için yazı tiplerini seçin. Yazı tipleri, kendi kendine barındırma için sunucuya indirilir.", + "font_heading": "Başlık Yazı Tipi", + "font_heading_hint": "Başlıklar (H1–H6) ve metin logosu için kullanılır", + "font_body": "Body Font", + "font_body_hint": "Gövde metni ve kullanıcı arayüzü öğeleri için kullanılır", + "font_search_placeholder": "Yazı tiplerini ara...", + "font_system_default": "Sistem varsayılanı", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "sunucuya indirilen yazı tipleri", + "powered_by": "Tarafından destekleniyor", + "background_title": "Arka Plan ve Görünüm", + "background_desc": "Konsol duvar kağıdı, gradyan veya düz renk arka plan ayarlayın. Kartlar bunun üzerinde yüzer.", + "bg_type_none": "Yok", + "bg_type_color": "Düz Renk", + "bg_type_gradient": "Gradyan", + "bg_type_image": "Görüntü", + "bg_color": "Arka Plan Rengi", + "bg_gradient": "CSS Gradyanı", + "bg_gradient_hint": "Geçerli herhangi bir CSS gradyanı, örn. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Arka Plan Görüntüsü Yükle", + "bg_image_choose": "Görüntü dosyası seç", + "bg_image_hint": "PNG, JPG, WebP veya GIF. Maksimum 8 MB. Sunucuda depolanır.", + "bg_image_url": "Görüntü Yolu / URL", + "bg_size": "Görüntü Boyutlandırma", + "bg_size_cover": "Kapla (ekranı doldur)", + "bg_size_contain": "Sığdır", + "bg_size_auto": "Otomatik (orijinal)", + "bg_blur": "Arka Plan Bulanıklığı", + "bg_overlay": "Karanlık Örtü", + "bg_overlay_hint": "Metin okunabilirliğini artırmak için arka planı koyulaştırır.", + "bg_image_too_large": "Görüntü çok büyük. Maksimum boyut 8 MB'dir.", + "bg_image_invalid_type": "Geçersiz dosya türü. PNG, JPG, WebP veya GIF kullanın.", + "bg_upload_success": "Arka plan görüntüsü başarıyla yüklendi.", + "login_title": "Giriş Sayfası", + "login_desc": "Giriş ekranı başlığını, alt başlığını ve arka planını özelleştirin.", + "login_heading": "Giriş Başlığı", + "login_heading_placeholder": "Tekrar hoş geldiniz", + "login_subheading": "Giriş Alt Başlığı", + "login_subheading_placeholder": "Hesabınıza giriş yapın", + "login_bg_inherit": "Konsol ile aynı", + "agent_title": "Ajan İndirme Sayfası", + "agent_desc": "Son kullanıcılara gösterilen genel ajan indirme portalını özelleştirin.", + "agent_show_powered": "\"Powered by BetterDesk\" göster", + "agent_show_powered_hint": "İndirme portalı alt bilgisinde BetterDesk atıfını göster.", + "footer_title": "Alt Bilgi ve Telif Hakkı", + "footer_desc": "Giriş ekranında ve konsol yan çubuğunda gösterilen özel alt bilgi satırı ekleyin.", + "footer_text": "Alt Bilgi Metni", + "footer_text_hint": "örn. telif hakkı bildirimi veya şirket adı.", + "show_powered": "\"BetterDesk\" atfını göster", + "show_powered_hint": "Giriş alt bilgisinde ve yan çubukta BetterDesk adını ve sürümünü göster.", + "custom_css_title": "Özel CSS", + "custom_css_desc": "Gelişmiş: konsol ve giriş sayfasına uygulanan özel CSS ekle.", + "custom_css_hint": "Dikkatli kullanın. Geçersiz veya güvensiz kurallar temizlenir. Maksimum 20.000 karakter." + }, + "device_detail": { + "tab_overview": "Genel Bakış", + "tab_tags": "Etiketler ve Notlar", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Bağlantı", + "section_manage": "Yönetim", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Bu cihaz yasaklandı", + "no_reason": "Herhangi bir neden belirtilmedi", + "tags": "Tags", + "no_tags": "Bu cihaza etiket atanmamış", + "tag_placeholder": "Bir etiket adı girin...", + "add_tag": "Add", + "tag_exists": "Bu etiket zaten mevcut", + "notes": "Notes", + "notes_placeholder": "Bu cihazla ilgili not ekleyin...", + "danger_zone": "Danger Zone", + "action_connect_web": "Web Uzaktan Kumandası", + "action_connect_web_desc": "Tarayıcı uzak masaüstü aracılığıyla bağlanın", + "action_native_remote": "BetterDesk Uzaktan Kumanda", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Masaüstü İstemcisi", + "action_connect_desktop_desc": "Masaüstü istemci uygulamasında aç", + "action_change_id_desc": "Cihaz kayıt kimliğini değiştirme", + "action_ban_desc": "Bu cihazın bağlanmasını engelle", + "action_unban_desc": "Bu cihazın tekrar bağlanmasına izin ver", + "action_delete_desc": "Bu cihazı kalıcı olarak kaldır", + "tab_hardware": "Hardware", + "tab_metrics": "Metrikler", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Kodlama Yetenekleri", + "section_live_metrics": "Canlı Metrikler", + "section_current_usage": "Mevcut Kullanım", + "section_usage_history": "Kullanım Geçmişi", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "CPU Frekansı", + "total_memory": "Toplam Bellek", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Güncellendi", + "device_groups": "Gruplar", + "no_sysinfo": "Donanım bilgisi mevcut değil", + "no_sysinfo_hint": "Cihaz bir sistem bilgisi raporu gönderdikten sonra sistem bilgileri görünecektir", + "no_metrics": "Metrik verisi yok", + "no_metrics_hint": "Cihaz kalp atışı raporları gönderdikten sonra ölçümler görünecek", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Dosyalar", + "agent_lazy_hint": "Temsilciden canlı verileri yüklemek için bu sekmeyi tıklayın", + "agent_offline": "Temsilci çevrimdışı", + "agent_timeout": "Temsilci zamanında yanıt vermedi", + "agent_error": "Aracıdan veriler yüklenemedi", + "service_name": "Name", + "service_display": "Görünen ad", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Yönetilen cihazların donanım ve yazılım envanteri", + "device_id": "Cihaz Kimliği", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Toplam Bellek", + "memory_used": "Used Memory", + "memory_available": "Kullanılabilir Bellek", + "memory_usage": "Bellek Kullanımı", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Ağ Arayüzleri", + "software": "Software", + "software_count": "Yüklü Yazılım", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Fiziksel Çekirdekler", + "logical_cores": "Mantıksal Çekirdekler", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Mevcut", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP Adresleri", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Toplayıcı Çalışıyor", + "collector_stopped": "Toplayıcı Durduruldu", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Toplama tarihi", + "no_data": "Henüz envanter verisi mevcut değil. Sistem bilgilerini toplamak için \"Şimdi Topla\"ya tıklayın.", + "no_devices": "Envanter verilerine sahip cihaz bulunamadı", + "detail_title": "Cihaz Envanteri Detayı", + "telemetry": "Telemetry", + "view_detail": "Detayı Görüntüle", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Destek biletleri ve sorun takibi", + "create": "New Ticket", + "edit": "Bileti Düzenle", + "delete": "Bileti Sil", + "detail": "Bilet Detayı", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Atanan Kişi", + "created_by": "Oluşturan", + "device": "Cihaz", + "sla_due": "SLA Due", + "created_at": "Oluşturuldu", + "updated_at": "Güncellendi", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Açık", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Bir yorum yazın...", + "internal_note": "Dahili not (son kullanıcılar tarafından görülemez)", + "attachments": "Attachments", + "upload_attachment": "Eki Yükle", + "download": "Download", + "connect_device": "Cihaza Bağlan", + "no_tickets": "Bilet bulunamadı", + "no_comments": "Henüz yorum yok", + "no_attachments": "Ek yok", + "title_required": "Başlık gerekli", + "delete_confirm": "#{id} biletini silmek istediğinizden emin misiniz?", + "delete_success": "Bilet başarıyla silindi", + "created_success": "Bilet başarıyla oluşturuldu", + "updated_success": "Bilet başarıyla güncellendi", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Bilet ara...", + "assign_to_me": "Bana ata", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Açık", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Etkinlik İzleme", + "subtitle": "Uygulama kullanımı ve boşta izleme", + "device": "Cihaz", + "hostname": "Hostname", + "sessions": "Oturumlar", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "En İyi Uygulamalar", + "app_name": "Application", + "window_title": "Pencere Başlığı", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Oturum Sayısı", + "total_active": "Toplam Aktif", + "total_idle": "Total Idle", + "detail_count": "Detay Kayıtları", + "no_data": "Etkinlik verisi yok", + "no_sessions": "Oturum yok", + "filter_from": "Gönderen", + "filter_to": "Kime", + "filter_apply": "Filtreyi uygula", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Cihazları ara...", + "date_range": "Date Range", + "device_id": "Cihaz Kimliği", + "session_start": "Oturum Başlangıcı", + "session_end": "Oturum Sonu", + "user": "User", + "no_activity": "Etkinlik kaydedilmedi", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Başvuru yok" + }, + "automation": { + "title": "Otomasyon ve Uyarılar", + "subtitle": "Uyarı kuralları, uzak komutlar ve SMTP yapılandırması", + "rules": "Alert Rules", + "rules_subtitle": "Bildirimleri tetikleyen koşulları tanımlayın", + "alerts": "Uyarı Geçmişi", + "alerts_subtitle": "Tetiklenen uyarıları görüntüleyin ve onaylayın", + "commands": "Uzaktan Komutlar", + "commands_subtitle": "Uzak cihazlara komut gönderme", + "smtp": "SMTP Yapılandırması", + "smtp_subtitle": "E-posta bildirim ayarları", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Koşul Türü", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Hedef Cihaz", + "scope_all": "Tüm Cihazlar", + "cooldown": "Bekleme süresi (saniye)", + "notify_emails": "Bildirim E-postaları", + "enabled": "Etkin", + "disabled": "Devre dışı", + "create_rule": "Kural Oluştur", + "edit_rule": "Kuralı Düzenle", + "delete_rule": "Kuralı Sil", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Tetiklenme Tarihi", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Şundan büyük:", + "op_gte": "Büyük veya eşit", + "op_lt": "Less than", + "op_lte": "Daha az veya eşit", + "op_eq": "Eşittir", + "op_neq": "Eşit değil", + "type_cpu_usage": "CPU Kullanımı (%)", + "type_memory_usage": "Bellek Kullanımı (%)", + "type_disk_usage": "Disk Kullanımı (%)", + "type_offline_duration": "Çevrimdışı Süre (ler)", + "type_idle_duration": "Boşta Kalma Süresi (ler)", + "type_custom": "Custom", + "command_type": "Komut Türü", + "command_payload": "Komut / Komut Dosyası", + "command_result": "Result", + "command_status": "Status", + "send_command": "Komut Gönder", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Başarısız", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Kullanıcı adı", + "smtp_pass": "Şifre", + "smtp_from": "Adresten", + "smtp_test": "Bağlantıyı Test Et", + "smtp_save": "Yapılandırmayı Kaydet", + "smtp_test_success": "Bağlantı başarılı", + "smtp_test_failed": "Bağlantı başarısız oldu", + "no_rules": "Hiçbir uyarı kuralı yapılandırılmadı", + "no_alerts": "Hiçbir uyarı tetiklenmedi", + "no_commands": "Hiçbir komut gönderilmedi", + "id_payload_required": "Cihaz kimliği ve yük gerekli", + "no_commands_sent": "Henüz herhangi bir komut gönderilmedi" + }, + "file_transfer": { + "title": "Dosya Aktarımı", + "transfers": "Transfers", + "new_transfer": "Yeni Transfer", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Dosya Boyutu", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Cihaz", + "initiated_by": "Başlatan", + "created_at": "Oluşturulma Tarihi", + "cancel": "İptal", + "cancel_confirm": "Bu aktarımı iptal etmek istediğinizden emin misiniz?", + "download_file": "Dosyayı İndir", + "browse_files": "Dosyalara Göz Atın", + "select_file": "Dosya Seç", + "select_device": "Cihaz Seç", + "no_transfers": "Dosya aktarımı yok", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Başarısız", + "status_cancelled": "Cancelled", + "bytes_transferred": "Aktarılan Bayt Sayısı", + "chunks": "Chunks", + "transfer_started": "Aktarım başladı", + "transfer_completed": "Aktarım tamamlandı", + "transfer_failed": "Aktarım başarısız oldu", + "transfer_cancelled": "Aktarım iptal edildi", + "max_file_size": "Maksimum dosya boyutu: 4 GB", + "error_too_large": "Dosya çok büyük", + "error_no_device": "Hiçbir cihaz seçilmedi", + "error_no_file": "Hiçbir dosya seçilmedi" + }, + "network": { + "title": "Ağ İzleme", + "targets": "Hedeflerin İzlenmesi", + "add_target": "Add Target", + "edit_target": "Hedefi Düzenle", + "delete_target": "Hedefi Sil", + "delete_confirm": "Bu hedefi silmek istediğinizden emin misiniz?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Zaman aşımı (ms)", + "interval": "Aralık (ms)", + "enabled": "Etkin", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Geçmişi Kontrol Et", + "stats": "Statistics", + "total_targets": "Toplam Hedefler", + "targets_up": "Targets Up", + "targets_down": "Hedefler Aşağı", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Ağ Araçları", + "ping_tool": "Ping Test", + "tcp_tool": "TCP Bağlantı Noktası Kontrolü", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Monitörü Başlat", + "monitor_stop": "Monitörü Durdur", + "monitor_running": "Monitör çalışıyor", + "monitor_stopped": "Monitör durduruldu", + "no_targets": "Yapılandırılmış izleme hedefi yok", + "no_history": "Kontrol geçmişi yok", + "error_code": "Error", + "status_code": "HTTP Durum Kodu", + "search_targets": "Hedefleri ara...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Geçmişi Kontrol Et", + "name_host_required": "Ad ve barındırıcı gerekli", + "uptime": "Uptime", + "response_time": "Tepki Süresi", + "avg_response": "Ortalama Yanıt", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Tepki Süresi (ms)", + "uptime_percent": "Uptime %", + "last_24h": "Son 24 saat", + "last_7d": "Last 7 days", + "last_30d": "Son 30 gün" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "DLP Politikaları", + "add_policy": "Politika Ekle", + "edit_policy": "Politikayı Düzenle", + "delete_policy": "Politikayı Sil", + "delete_confirm": "Bu politikayı silmek istediğinizden emin misiniz?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Etkin", + "disabled": "Devre dışı", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "USB Cihazı", + "rule_type_file": "Dosya İşlemi", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Satıcı Kimliği (VID)", + "pid": "Ürün Kimliği (PID)", + "serial": "Seri Numarası", + "device_class": "Cihaz Sınıfı", + "drive_type": "Drive Type", + "file_extensions": "Dosya Uzantıları", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Dosya", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Hiçbir DLP politikası yapılandırılmadı", + "no_events": "Hiçbir DLP etkinliği kaydedilmedi", + "stats": "Statistics", + "total_events": "Toplam Olaylar", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Dosya Olayları", + "device_id": "Cihaz Kimliği", + "policy_matched": "Politika Eşleşti", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Toplam Politikalar", + "active_policies": "Aktif Politikalar", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Politikalar", + "tab_events": "Events", + "search_policies": "Arama politikaları...", + "create_policy": "Politika Oluştur", + "policy_type": "Politika Türü", + "scope": "Scope", + "events_count": "Events", + "search_events": "Etkinlikleri ara...", + "event_time": "Event Time", + "device": "Cihaz", + "policy": "Politika", + "detail": "Detail", + "scope_help": "Virgülle ayrılmış cihaz kimlikleri veya tümü için boş bırakın", + "scope_all": "Tüm Cihazlar", + "active": "Active", + "type_file_type": "Dosya Türü", + "type_clipboard": "Pano", + "type_screen_share": "Ekran Paylaşımı", + "type_file_transfer": "Dosya Aktarımı", + "policy_desc": "Politika Açıklaması", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Rapor Oluştur", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Cihaz Özeti", + "type_activity": "Etkinlik Özeti", + "type_security": "Güvenlik Raporu", + "type_tickets": "Bilet Raporu", + "type_network": "Ağ Raporu", + "type_inventory": "Envanter Raporu", + "type_alerts": "Uyarı Raporu", + "saved": "Kaydedilen Raporlar", + "save_report": "Raporu Kaydet", + "delete_report": "Raporu Sil", + "delete_confirm": "Kaydedilen bu raporu silmek istediğinizden emin misiniz?", + "no_saved": "Kayıtlı rapor yok", + "report_title": "Title", + "created_by": "Oluşturan", + "created_at": "Oluşturulma Tarihi", + "filters": "Filters", + "date_from": "Gönderen", + "date_to": "Kime", + "device_filter": "Cihaz Kimliği", + "generated_at": "Oluşturulma Tarihi", + "section": "Veri Bölümü", + "total_devices": "Toplam Cihazlar", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Platform Dağıtımı", + "top_applications": "En İyi Uygulamalar", + "total_active": "Toplam Aktif Süre", + "total_idle": "Toplam Boşta Kalma Süresi", + "dlp_stats": "DLP İstatistikleri", + "banned_devices": "Yasaklı Cihazlar", + "audit_logs": "Audit Logs", + "ticket_stats": "Bilet İstatistikleri", + "category_distribution": "Kategori Dağılımı", + "priority_distribution": "Öncelik Dağılımı", + "targets_status": "Hedef Durumu", + "os_distribution": "İşletim Sistemi Dağıtımı", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Son Uyarılar", + "tab_generate": "Rapor Oluştur", + "tab_saved": "Kaydedilen Raporlar", + "type_devices_desc": "Tüm cihazlara, platformlara ve durumlara genel bakış", + "type_activity_desc": "Uygulama kullanımı ve boşta kalma süresi özeti", + "type_security_desc": "Eylemleri, DLP etkinliklerini ve denetim günlüklerini yasaklayın", + "type_tickets_desc": "Bilet istatistikleri ve SLA performansı", + "type_network_desc": "Ağ izleme hedefleri ve çalışma süresi verileri", + "type_inventory_desc": "Donanım ve yazılım envanter özeti", + "type_alerts_desc": "Uyarı kuralları ve tetiklenen uyarı geçmişi", + "report_name": "Report Name", + "format": "Format", + "save": "Raporu Kaydet", + "preview": "Preview", + "download": "Download", + "delete_saved": "Raporu Sil", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Kiracıyı Düzenle", + "delete_tenant": "Kiracıyı Sil", + "delete_confirm": "Bu kiracıyı silmek istediğinizden emin misiniz? Tüm cihaz ve kullanıcı atamaları kaldırılacak.", + "name": "Name", + "slug": "Slug", + "contact_name": "Kişi Adı", + "contact_email": "İletişim E-postası", + "max_devices": "Maksimum Cihaz Sayısı", + "max_devices_hint": "0 = sınırsız", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Cihazlar", + "users": "Users", + "assign_device": "Cihaz Ata", + "assign_devices": "Cihazları Ata", + "remove_device": "Cihazı Kaldır", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Hiçbir kiracı yapılandırılmadı", + "no_devices": "Bu kiracıya atanan cihaz yok", + "no_users": "Bu kiracıya atanan kullanıcı yok", + "stats": "Kiracı İstatistikleri", + "total_devices": "Toplam Cihazlar", + "online_devices": "Çevrimiçi Cihazlar", + "total_users": "Total Users", + "created_at": "Oluşturulma Tarihi", + "updated_at": "Güncelleme Tarihi:", + "slug_exists": "Kiracı bildirimi zaten mevcut", + "total_tenants": "Toplam Kiracı", + "active_tenants": "Aktif Kiracılar", + "search": "Kiracıları arayın...", + "create_tenant": "Kiracı Oluştur", + "detail": "Kiracı Detayı", + "contact": "Contact", + "enabled": "Etkin", + "disabled": "Devre dışı", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Cihaz kimliğine, ana bilgisayar adına veya IP'ye göre arayın...", + "no_registrations": "No registration requests", + "col_device_id": "Cihaz Kimliği", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "Bu cihazı onaylamak istediğinizden emin misiniz? Sunucu kimlik bilgilerini alacak ve otomatik olarak bağlanabilecektir.", + "approved_success": "Cihaz kaydı başarıyla onaylandı", + "reject_btn": "Reject", + "reject_title": "Kaydı Reddet", + "reject_confirm": "Bu kayıt isteğini reddetmek istediğinizden emin misiniz?", + "reject_reason": "Sebep (isteğe bağlı)", + "reject_reason_placeholder": "Reddedilme nedenini girin...", + "rejected_success": "Cihaz kaydı reddedildi", + "delete_confirm": "Bu kayıt kaydını silmek istediğinizden emin misiniz?", + "deleted_success": "Kayıt kaydı silindi", + "enrollment_title": "Cihaz Kaydı", + "enrollment_subtitle": "BetterDesk masaüstü istemcilerinden beklemedeki kayıt istekleri", + "enrollment_empty": "Bekleyen kayıt isteği yok", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Görünen Ad", + "enrollment_display_name_placeholder": "Bu cihaz için bir ad girin...", + "enrollment_sync_mode": "Senkronizasyon Modu", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Cihaz kaydı onaylandı", + "enrollment_rejected_success": "Cihaz kaydı reddedildi", + "approve_title": "Cihazı Onayla", + "field_name": "Cihaz adı", + "field_name_placeholder": "Bu cihaz için bir ad girin...", + "field_sync_mode": "Eşitleme modu", + "sync_standard": "Standart — dengeli eşitleme", + "sync_silent": "Sessiz — minimum telemetri", + "sync_turbo": "Turbo — agresif eşitleme", + "field_tags": "Etiketler", + "field_tags_placeholder": "Virgülle ayrılmış etiketler (örn. ofis, dizüstü)...", + "field_tags_existing": "Mevcut etiketler", + "field_tag_add_placeholder": "Yeni etiket ekle...", + "field_tag_add_btn": "Ekle", + "field_groups": "Cihaz grupları", + "field_folder": "Klasör", + "field_folder_none": "Klasör yok", + "reject_ban_option": "Bu cihazı yasakla", + "reject_ban_hint": "Cihaz engellenir ve yeni kayıt isteği gönderemez.", + "banner_open_mode": "Kayıt açık — yeni RustDesk istemcileri operatör onayı olmadan kaydoluyor. Bu kuyruğu kullanmak için Ayarlar'da Yönetilen mod'u ayarlayın.", + "banner_locked_mode": "Kayıt kilitli — yalnızca belirteçe bağlı cihazlar kaydolabilir. Bilinmeyen istemciler için operatör onayı amacıyla Yönetilen mod gereklidir.", + "enrollment_settings_link": "Kayıt ayarları" + }, + "backup": { + "title": "Backup", + "desc": "Konsol yapılandırmanızın, kullanıcılarınızın, gruplarınızın ve ayarlarınızın tam yedeğini indirin. Go server eş verileri, BetterDesk arka ucu etkin olduğunda dahil edilir.", + "restore_title": "Restore", + "restore_desc": "Konsol yapılandırmasını geri yüklemek için önceden indirilmiş bir yedekleme dosyasını yükleyin. Aşağıdan hangi bölümlerin geri yükleneceğini seçin.", + "stat_users": "Users", + "stat_settings": "Ayarlar", + "stat_folders": "Folders", + "stat_groups": "Gruplar", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "Yedeklemeyi İndir", + "creating": "Yedek oluşturuluyor...", + "download_success": "Yedekleme başarıyla indirildi", + "upload": "Yedeklemeyi Yükle", + "restore_confirm": "Bu yedeklemeden geri yüklemek istediğinizden emin misiniz? Seçilen bölümlerin üzerine yazılacaktır.", + "restore_success": "Yedekleme başarıyla geri yüklendi. Bazı değişiklikler sayfanın yeniden yüklenmesini gerektirebilir.", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "Konsol ayarları", + "opt_branding": "Markalama / Tema", + "opt_folders": "Cihaz klasörleri", + "opt_groups": "Kullanıcı ve cihaz grupları", + "opt_addressbooks": "Adres defterleri", + "opt_users": "Kullanıcı hesapları", + "opt_users_warning": "Yıkıcı: TÜM kullanıcı hesaplarını yedek verilerle değiştirir. Çıkış yapmış olabilirsiniz.", + "no_file": "Yedekleme dosyası seçilmedi", + "invalid_json": "Geçersiz yedekleme dosyası: geçerli değil JSON", + "invalid_format": "Geçersiz yedekleme dosyası: BetterDesk yedeği değil", + "stat_database": "Veritabanı motoru", + "stat_keys": "Sunucu anahtarları dahil", + "stat_env": "Ortam dosyası", + "stat_uploads": "Marka dosyaları", + "restart_required": "Bazı geri yüklenen bileşenler (anahtarlar / .env / Go veritabanı) geçerli olması için servis yeniden başlatması gerektirir.", + "security_warning": "Bu yedek gizli bilgiler içerir (sunucu anahtarları, ortam dosyası, şifre özetleri ve 2FA sırları). Güvenli saklayın ve asla paylaşmayın.", + "restore_warning": "Sırları, ortam dosyasını veya Go sunucu veritabanını geri yüklemek sunucu kimliğinin üzerine yazar ve ardından servis yeniden başlatması gerektirir.", + "opt_database": "Veritabanı (tüm tablolar)", + "opt_database_hint": "Tüm konsol verilerini yeniden içe aktarır. Canlı uygulanır, yeniden başlatma gerekmez.", + "opt_uploads": "Marka dosyaları", + "opt_uploads_hint": "Logo ve yüklenen görseller.", + "opt_secrets": "Sunucu anahtarları ve sırlar", + "opt_secrets_warning": "Ed25519 sunucu kimliğinin, API anahtarının ve oturum sırrının üzerine yazar. Servis yeniden başlatması gerektirir.", + "opt_env": "Ortam dosyası (.env)", + "opt_env_warning": "SESSION_SECRET, API anahtarı, veritabanı DSN, portlar ve TLS ayarlarının üzerine yazar. Servis yeniden başlatması gerektirir.", + "opt_godb": "Go sunucu veritabanı", + "opt_godb_warning": "Go sunucu SQLite veritabanının üzerine yazar (yalnızca SQLite arka uç). Servis yeniden başlatması gerektirir." + }, + "cdap": { + "device_detail": "CDAP Cihazı", + "loading": "Yükleniyor...", + "loading_widgets": "Cihaz widget'ları yükleniyor...", + "load_error": "Cihaz verileri yüklenemedi", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "Cihaz şu anda çevrimdışı. Widget değerleri eski olabilir.", + "no_widgets": "Kullanılabilir widget yok", + "no_widgets_desc": "Bu cihaz, widget tanımlarını içeren bir CDAP bildirimini kaydetmedi.", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "Komutu Onayla", + "select_option": "Seç", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "Komut Gönder", + "command_sent": "Komut başarıyla gönderildi", + "command_failed": "Komut gönderilemedi", + "devices_title": "CDAP Cihazlar", + "devices_subtitle": "Özel Cihaz Uygulama Protokolü aracılığıyla bağlı cihazlar", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "Cihazları ara...", + "no_devices": "Bağlı cihaz yok", + "no_devices_desc": "Şu anda hiçbir CDAP cihazı bağlı değil. Cihazlar ağ geçidine bağlandıklarında burada görünecekler.", + "gateway_disabled": "CDAP Ağ Geçidi Devre Dışı", + "gateway_disabled_desc": "Sunucu yapılandırmasında CDAP_ENABLED=true ayarını yaparak CDAP ağ geçidini etkinleştirin.", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "CDAP'yi devre dışı bırakın", + "enabled_restart": "CDAP etkinleştirildi. Değişikliklerin uygulanması için sunucunun yeniden başlatılması gerekiyor.", + "disabled_restart": "CDAP devre dışı. Değişikliklerin uygulanması için sunucunun yeniden başlatılması gerekiyor.", + "widgets": "widget'lar", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "Aktif Uyarılar", + "alert_fired": "Alert fired", + "alert_cleared": "Uyarı temizlendi", + "no_alerts": "Etkin uyarı yok", + "connect_terminal": "Terminali Bağla", + "table_search": "Ara...", + "just_now": "Just now", + "terminal_connecting": "Cihaza bağlanılıyor...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Terminal bağlantısı başarısız oldu", + "linked_devices": "Bağlı Cihazlar", + "link_device": "Cihazı Bağla", + "unlink_device": "Unlink", + "no_linked_devices": "Bağlı cihaz yok", + "unlink_confirm": "Bu cihazın bağlantısını kaldırmak istediğinizden emin misiniz?", + "link_prompt": "Bu cihaza bağlanmak için Eş Kimliğini girin:", + "connect_desktop": "Masaüstünü Bağla", + "connect_video": "Akışı Bağla", + "connect_files": "Dosyalara Göz Atın", + "connect_audio": "Sesi Bağla", + "upload_file": "Upload", + "desktop_connecting": "Bağlanıyor...", + "video_connecting": "Bağlanıyor...", + "files_connecting": "Bağlanıyor...", + "audio_connecting": "Bağlanıyor...", + "audio_streaming": "Streaming", + "clipboard_in": "Pano alındı", + "clipboard_out": "Pano gönderildi", + "monitor_select": "Monitörü Seçin", + "keyframe_request": "Ana Kare İste", + "quality_auto": "Otomatik Kalite" + }, + "desktop": { + "switch_mode": "Masaüstü Modu", + "console_mode": "Konsol Modu", + "loading": "Yükleniyor...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Kapat", + "widgets_mode": "Widget'lar", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Widget Ekle", + "remove_widget": "Widget'ı Kaldır", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Yapılandır", + "search_widgets": "Widget'ları arayın...", + "cat_monitoring": "Monitoring", + "cat_devices": "Cihazlar", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Notlarınızı buraya yazın...", + "search_placeholder": "Cihazlarda, sayfalarda, ayarlarda arama yapın...", + "search_pages": "Pages", + "search_devices": "Cihazlar", + "search_no_results": "No results", + "exit_desktop": "Masaüstü Modundan Çık", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Cihaz Durumu", + "widget_server_health": "Sunucu Bilgileri", + "widget_system_stats": "Cihaz Göstergeleri", + "widget_device_list": "Cihaz Listesi", + "widget_quick_actions": "Hızlı Eylemler", + "widget_recent_activity": "Son Etkinlik", + "widget_notes": "Notes", + "widget_network_monitor": "Ağ Monitörü", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP Cihazlar", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Cihaz Izgarası", + "widget_multi_gauge": "Sunucu Göstergeleri", + "widget_weekly_chart": "Haftalık Etkinlik", + "widget_quick_controls": "Hızlı Kontroller", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Bağlantı İstatistikleri", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Kullanıcı Oturumları", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Cihaz yok", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Açık", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Yapılandırmada URL'yi ayarlayın", + "label_server_uptime": "Sunucu Çalışma Süresi", + "label_merged_info": "Sunucu Bilgileri widget'ıyla birleştirildi", + "label_with_notes": "Notlarla", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Toplam Cihazlar", + "label_throughput": "Throughput", + "label_active_relays": "Aktif Röleler", + "label_total_relayed": "Toplam Aktarılan", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Cihazları filtrele...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "CDAP cihazı yok", + "action_add_widget": "Widget Ekle", + "label_merged_server_info": "Sunucu Bilgileri widget'ıyla birleştirildi", + "wp_images": "Images", + "wp_colors": "Katı Renkler", + "wp_custom_color": "Özel renk", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Duvar kağıdı resimleri bu sunucuda yüklü değil.", + "wp_download_hint": "Duvar kağıdı seçimini etkinleştirmek için PNG resimlerini public/wallpapers/ dizinine yerleştirin.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Süreç Monitörü", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Veritabanı İstatistikleri", + "widget_docker_containers": "Docker Konteynerler", + "widget_shell_command": "Kabuk Komutanlığı", + "widget_device_map": "Cihaz Haritası", + "widget_remote_connect": "Uzaktan Bağlantı", + "label_no_online": "Çevrimiçi cihaz yok", + "label_no_events": "Bugün etkinlik yok", + "label_event_title": "Etkinlik başlığı:", + "label_no_data": "Veri yok", + "label_download_speed": "İndirme Hızı", + "label_latency": "Latency", + "label_server": "Sunucu", + "label_run_test": "Run Test", + "label_testing": "Test ediliyor...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Kapsayıcı yok", + "label_docker_unavailable": "Docker mevcut değil", + "label_no_command": "Hiçbir komut yapılandırılmadı", + "label_no_output": "Henüz çıktı yok", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Ön Ayarı Kaydet", + "label_load_preset": "Load Preset", + "label_preset_name": "Ön ayar adı:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Otomatik Düzenleme", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 Sütun (Eşit)", + "label_2col_wide": "2 Sütun (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Widget Grubu", + "ungroup_widgets": "Widget'ların Grubunu Çöz", + "group_widgets": "Seçilen Widget'ları Gruplandır", + "snap_layouts": "Yapış Düzenleri", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Sol Üste Yasla", + "snap_top_right": "Sağ Üste Yasla", + "snap_bottom_left": "Sol Alttan Yasla", + "snap_bottom_right": "Sağ Alttan Yapış", + "aero_shake": "Diğerlerini En Aza İndirmek İçin Sallayın", + "zone_resize": "Bölgeleri yeniden boyutlandırmak için kenarlığı sürükleyin", + "zone_borders": "Sürüklenebilir Bölge Sınırları", + "app_drawer": "Applications", + "search_apps": "Uygulamaları ara...", + "edit_shortcuts": "Kısayolları düzenle", + "widgets": "Widget'lar", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Oturum açmak için herhangi bir yeri tıklayın veya bir tuşa basın", + "username_placeholder": "Kullanıcı adı", + "password_placeholder": "Şifre", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "İki Faktörlü Kimlik Doğrulama", + "totp_subtitle": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", + "back_to_login": "Girişe geri dön", + "fill_all_fields": "Lütfen tüm alanları doldurun", + "invalid_credentials": "Geçersiz kullanıcı adı veya şifre", + "invalid_code": "Geçersiz doğrulama kodu", + "enter_6_digits": "6 rakamın tamamını girin", + "network_error": "Network error — check your connection", + "session_expired": "Oturumun süresi doldu. Lütfen tekrar oturum açın." + }, + "tokens": { + "title": "Cihaz Jetonları", + "subtitle": "Otomatik cihaz temel hazırlığı için kayıt jetonlarını yönetin", + "enrollment_mode": "Kayıt Modu", + "mode_open": "Açık", + "mode_open_desc": "Herhangi bir cihaz jeton olmadan kaydolabilir", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Toplam Jetonlar", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Jetonları ara...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Toplu Oluştur", + "create": "Jeton Oluştur", + "edit": "Jetonu Düzenle", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Oluşturuldu", + "actions": "Actions", + "name_placeholder": "örneğin Ofis bilgisayarı toplu", + "max_uses": "Max Uses", + "max_uses_hint": "0 = sınırsız", + "expires_in": "Expires In", + "no_expiration": "Son kullanma tarihi yok", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Bu belirteçle ilgili isteğe bağlı not...", + "count": "Count", + "count_range": "Oluşturulacak jeton sayısı (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Jeton Oluşturuldu", + "tokens_generated": "Oluşturulan Tokenlar", + "copy_warning": "Belirteci şimdi kopyalayın. Bir daha gösterilmeyecek.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Bu jetonu iptal etmek istediğinizden emin misiniz? Halihazırda kayıtlı olan cihazlar etkilenmeyecektir.", + "revoked_success": "Jeton başarıyla iptal edildi", + "no_tokens": "Jeton bulunamadı", + "expired": "Expired", + "never": "Never", + "save": "Kaydet", + "cancel": "İptal", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Sonraki", + "prev": "Previous", + "skip": "Skip", + "finish": "Bitiş", + "close": "Kapat", + "step_of": "{total}'nin {current}'si", + "console_sidebar_title": "Gezinme Kenar Çubuğu", + "console_sidebar_text": "Tüm modüllere buradan erişin. Bu bölüme gitmek için herhangi bir simgeye tıklayın. Kenar çubuğu ekran boyutunuza uyum sağlar.", + "console_expand_title": "Kenar Çubuğunu Genişlet", + "console_expand_text": "Kenar çubuğunu genişletmek ve tüm gezinme öğelerinin tam etiketlerini görmek için burayı tıklayın. Daraltmak için tekrar tıklayın.", + "console_search_title": "Hızlı Arama", + "console_search_text": "Cihazları, ayarları veya eylemleri hızlı bir şekilde arayın. Klavye kısayolu için Ctrl+K tuşlarına basın.", + "console_dashboard_title": "Kontrol Paneli", + "console_dashboard_text": "Sunucu durumunu, çevrimiçi cihazları ve hızlı eylemleri gösteren merkezi merkeziniz. Bir bakışta önemli metriklere göz atın.", + "console_devices_title": "Cihaz Yönetimi", + "console_devices_text": "Bağlı tüm cihazları görüntüleyin, arayın ve yönetin. Duruma göre filtreleyin, etiket atayın ve bireysel cihaz ayarlarını yapılandırın.", + "console_settings_title": "Ayarlar", + "console_settings_text": "Sunucu davranışını, güvenlik seçeneklerini, markalamayı ve kullanıcı yönetimini yapılandırın. İhtiyaçlarınıza uyacak şekilde BetterDesk'yi özelleştirin.", + "console_desktop_title": "Masaüstü Modu", + "console_desktop_text": "Widget'lar içeren pencereli bir çalışma alanı için masaüstü moduna geçin. Çoklu görev ve kontrol panellerini izlemek için mükemmeldir.", + "console_complete_title": "Hazırsın!", + "console_complete_text": "Tüm özellikleri keşfetmek için kenar çubuğu kategorilerini keşfedin. Bu kılavuzu yeniden başlatmak için istediğiniz zaman Yardım simgesini tıklayın.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Üstteki çubuk saati, hızlı kontrolleri ve uygulama çekmecesine erişimi gösterir. Tüm uygulamalara göz atmak için ızgara simgesini tıklayın.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Herhangi bir konsol işlevini kayan pencere olarak aramak ve başlatmak için uygulama çekmecesini açın. Uygulamalar kategoriye göre düzenlenir.", + "desktop_widgets_title": "Widget Kontrol Paneli", + "desktop_widgets_text": "Kişiselleştirilebilir çalışma alanınız. Widget'lar canlı bilgileri görüntüler ve özelliklere hızlı erişim sağlar. Yeniden düzenlemek için sürükleyin.", + "desktop_add_widget_title": "Widget Ekle", + "desktop_add_widget_text": "Mevcut widget'lara göz atmak için burayı tıklayın. İzleme ekranları, cihaz listeleri, notlar ve daha fazlası arasından seçim yapın.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Açık uygulamalar burada görünür. Pencereleri odaklamak veya simge durumuna küçültmek için tıklayın. Uygulama etiketlerini görmek için simgelerin üzerine gelin.", + "desktop_snap_title": "Yapış Düzenleri", + "desktop_snap_text": "Pencereleri konumlarına oturtmak için ekran kenarlarına sürükleyin veya düzen ön ayarları için ekranı kapla düğmesinin üzerine gelin. Aero Shake'ı deneyin!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Uygulamalar sürüklenebilir, yeniden boyutlandırılabilir pencerelerde açılır. Başlık çubuğundan simge durumuna küçültün, büyütün veya kapatın. Widget'ların üzerindeki Windows katmanı.", + "desktop_search_title": "Hızlı Arama", + "desktop_search_text": "Cihazlar, sayfalar ve ayarlar arasında arama yapın. Aramayı anında açmak için herhangi bir yerde Ctrl+K tuşlarına basın.", + "desktop_complete_title": "Masaüstü Modu Hazır!", + "desktop_complete_text": "Uygulamaları çekmeceden açmayı ve pencereleri yan yana yerleştirmeyi deneyin. Hızlı kontrol paneli düzenleri için widget ön ayarlarını kullanın.", + "devices_folders_title": "Cihaz Klasörleri", + "devices_folders_text": "Cihazları klasörler halinde düzenleyin. Listeyi filtrelemek için bir klasörü tıklayın. Yeniden adlandırmak veya silmek için sağ tıklayın.", + "devices_search_title": "Ara ve Filtrele", + "devices_search_text": "Kimliğe, ana makine adına veya platforma göre arama yapın. Yalnızca çevrimiçi, çevrimdışı veya tüm cihazları göstermek için durum kutularını kullanın.", + "devices_table_title": "Cihaz Listesi", + "devices_table_text": "Ayrıntılar için herhangi bir cihaz satırını tıklayın. Bağlanma, etiketleri düzenleme veya silme gibi hızlı işlemler için sağdaki kebap menüsünü kullanın.", + "devices_complete_title": "Cihaz Yönetimi Hazır!", + "devices_complete_text": "Cihazları düzenlemek için klasörler arasında sürükleyin. Ayrıntı panelini açmak için bir aygıta çift tıklayın.", + "settings_tabs_title": "Ayarlar Kategorileri", + "settings_tabs_text": "Genel, Güvenlik, Görünüm ve diğer yapılandırma bölümleri arasında gezinin.", + "settings_content_title": "Yapılandırma", + "settings_content_text": "Her bölüm belirli sunucu ve konsol ayarlarını içerir. Kaydet'e tıkladığınızda değişiklikler kaydedilir.", + "settings_complete_title": "Ayarlara Genel Bakış", + "settings_complete_text": "2FA, API anahtarları ve kullanıcı yönetimi için Güvenlik ayarlarını kontrol edin. Konsol görünümünü özelleştirmek için Görünüm'ü ziyaret edin.", + "help": "Yardım ve Öğreticiler", + "tour_console": "Konsol Turu", + "tour_desktop": "Masaüstü Modu Turu", + "tour_devices": "Cihaz Turu", + "tour_settings": "Ayarlar Turu", + "reset_all": "Tüm Eğiticileri Sıfırla", + "tour_remote": "Uzaktan Oturum Turu", + "tour_organization": "Organizasyon Kurulumu", + "tour_cdap": "CDAP Genel Bakış", + "tour_chat": "Sohbetin Temelleri", + "remote_toolbar_title": "Uzak Araç Çubuğu", + "remote_toolbar_text": "Araç çubuğundan ekran kontrollerine, pano senkronizasyonuna, özel tuşlara ve kalite ayarlarına erişin. F11 ile tam ekrana geçin.", + "remote_canvas_title": "Uzak Ekran", + "remote_canvas_text": "Bu uzak ekran. Uzak cihazı kontrol etmeye başlamak için içeriye tıklayın. Fare ve klavye girişi otomatik olarak iletilir.", + "remote_clipboard_title": "Pano Senkronizasyonu", + "remote_clipboard_text": "Bilgisayarınız ile uzaktaki aygıt arasında metni kopyalayıp yapıştırın. Uzak ekrana odaklanırken normal şekilde Ctrl+C / Ctrl+V tuşlarını kullanın.", + "remote_complete_title": "Uzaktan Oturuma Hazır!", + "remote_complete_text": "Özel tuşlar (Ctrl+Alt+Del, PrintScreen) ve monitör geçi��i için araç çubuğu düğmelerini kullanın. Oturumu sonlandırmak için Escape tuşuna basın veya Bağlantıyı Kes'e tıklayın.", + "org_overview_title": "Organizasyonlar", + "org_overview_text": "Kuruluşlar kullanıcıları, cihazları ve politikaları gruplandırmanıza olanak tanır. Her kuruluşun kendi yöneticisi, operatörleri ve ayarları vardır.", + "org_create_title": "Organizasyon Oluştur", + "org_create_text": "Yeni bir organizasyon oluşturmak için burayı tıklayın. Bir ad, bilgi ve isteğe bağlı bir açıklama girin. Yeni organizasyonun sahibi siz olacaksınız.", + "org_members_title": "Üyeleri Yönet", + "org_members_text": "Kullanıcıları e-postayla davet edin, roller atayın (yönetici, operatör, kullanıcı) ve erişimi yönetin. Üyeler, kuruluşlarına atanan cihazları görebilir.", + "org_devices_title": "Cihazları Ata", + "org_devices_text": "Kuruluşa cihazlar ekleyin. Buraya atanan cihazlar kuruluşun politikalarını devralacak ve üyeleri tarafından görülebilecektir.", + "org_policies_title": "Organizasyon Politikaları", + "org_policies_text": "Kuruluş için şifre gereksinimleri, oturum zaman aşımları, 2FA uygulaması ve cihaz kayıt kuralları gibi güvenlik politikalarını ayarlayın.", + "org_complete_title": "Organizasyon Kurulumu Tamamlandı!", + "org_complete_text": "Kuruluş kapsamlı yönetimi kullanmaya başlamak için ekibinizi davet edin ve cihazları atayın. Politikalar tüm üyelere otomatik olarak uygulanır.", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "Kişiler ve Gruplar", + "chat_contacts_text": "Kişilerinizi ve sohbet gruplarınızı görün. Bir görüşme açmak için herhangi bir kişiye tıklayın. Yeşil noktalar çevrimiçi kullanıcıları gösterir.", + "chat_send_title": "Mesaj Gönder", + "chat_send_text": "Mesajınızı yazın ve göndermek için Enter tuşuna basın. Her iki taraf da E2E'yi desteklediğinde mesajlar uçtan uca şifrelenir.", + "chat_file_title": "Dosyaları Paylaş", + "chat_file_text": "Dosyaları paylaşmak için ek simgesini tıklayın. Dosyalar şifrelidir ve boyutu 50 MB'a kadar olabilir.", + "chat_complete_title": "Sohbete Hazır!", + "chat_complete_text": "Operatörler ve son kullanıcılarla gerçek zamanlı sohbet edin. Ekip iletişimi için gruplar oluşturun. Tüm iletiler okundu bilgilerini destekler.", + "disable_tutorials": "Öğreticileri Devre Dışı Bırak", + "enable_tutorials": "Eğiticileri Etkinleştir" + }, + "help_request": { + "title": "Yardım İstekleri", + "subtitle": "Masaüstü istemcilerden gelen yardım isteklerini yönetin", + "new_request": "Yeni Yardım Talebi", + "device": "Cihaz", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Yardım talebi yok", + "notification": "Yardım isteği alındı", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Organizasyonlar", + "create": "Organizasyon Oluştur", + "edit": "Kuruluşu Düzenle", + "detail": "Organizasyon Detayları", + "name": "Name", + "slug": "Sümüklü böcek (URL-güvenli)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Cihazlar", + "invitations": "Invitations", + "settings": "Ayarlar", + "add_user": "Add User", + "assign_device": "Cihaz Ata", + "create_invitation": "Davetiye Oluştur", + "delete_confirm": "Bu kuruluş silinsin mi? Bu, ilişkili tüm kullanıcıları, cihazları ve ayarları kaldıracaktır.", + "no_orgs": "Henüz organizasyon yok", + "no_orgs_hint": "Cihazları ve kullanıcıları yönetmeye başlamak için ilk kuruluşunuzu oluşturun.", + "connection_policy": "Bağlantı Politikası", + "allow_file_transfer": "Dosya Aktarımına İzin Ver", + "allow_clipboard": "Panoya İzin Ver", + "max_session_duration": "Maksimum Oturum Süresi (dk)", + "role_owner": "Owner", + "role_admin": "Yönetici", + "role_operator": "Operator", + "role_user": "Üye", + "username": "Kullanıcı adı", + "password": "Şifre", + "display_name": "Görünen Ad", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "Cihaz Kimliği", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Atanan Kullanıcı", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Bu kuruluşta kullanıcı yok.", + "no_devices": "Bu kuruluşa atanan cihaz yok.", + "no_invitations": "Davetiye yok.", + "user_added": "User added", + "user_removed": "Kullanıcı kaldırıldı", + "user_updated": "Kullanıcı rolü güncellendi", + "device_assigned": "Cihaz atandı", + "device_unassigned": "Cihazın ataması kaldırıldı", + "invitation_created": "Davetiye oluşturuldu", + "settings_saved": "Ayarlar kaydedildi", + "org_deleted": "Kuruluş silindi", + "confirm_remove_user": "Bu kullanıcı kuruluştan kaldırılsın mı?", + "confirm_unassign_device": "Bu cihazın kuruluştaki ataması kaldırılsın mı?", + "confirm_delete_org": "Bu kuruluş ve ilişkili tüm veriler silinsin mi?", + "edit_role": "Rolü Düzenle", + "raw_settings": "Ham Ayarlar", + "key": "Key", + "value": "Value", + "save": "Ayarları Kaydet", + "policy_unattended": "Katılımsız (anlık)", + "policy_attended": "Katıldık (Onay ile)", + "policy_ask": "Always ask", + "expires_hours": "Son kullanma tarihi (saat)", + "loading_failed": "Kuruluş verileri yüklenemedi", + "name_slug_required": "İsim ve bilgi gerekli", + "org_created": "Kuruluş oluşturuldu", + "org_updated": "Kuruluş güncellendi", + "create_new_user": "Yeni Oluştur", + "add_existing_user": "Mevcut Ekle", + "none_available": "none", + "select_user": "Kullanıcı seç", + "org_role": "Organizasyon Rolü", + "link_user_hint": "Seçilen kullanıcı, sunucu hesabı kimlik bilgilerini kullanarak bu kuruluşa bağlanacak.", + "no_available_users": "Tüm sunucu kullanıcıları zaten bu kuruluşa bağlı.", + "user_linked": "Kullanıcı kuruluşa bağlı" + }, + "chat": { + "e2e_enabled": "Uçtan uca şifrelenmiş", + "e2e_establishing": "Güvenli kanal oluşturuluyor...", + "e2e_established": "Güvenli kanal kuruldu", + "e2e_unsupported": "E2E şifrelemesi bu tarayıcıda desteklenmiyor", + "typing_indicator": "yazarak...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Dosya", + "file_too_large": "Dosya çok büyük (maks. 50MB)", + "file_encrypted": "Şifreli dosya aktarımı", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Güvenlik anahtarları döndürüldü", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Gruplar", + "no_contacts": "Henüz kişi yok", + "no_groups": "Henüz grup yok", + "no_messages": "Henüz mesaj yok", + "no_results": "Sonuç bulunamadı", + "select_conversation": "Sohbete başlamak için bir sohbet seçin", + "type_message": "Bir mesaj yazın...", + "send": "Gönder", + "attach_file": "Dosya ekle", + "emoji": "Emoji", + "search_messages": "Mesajlarda ara", + "create_group": "Grup oluştur", + "group_name": "Grup adı", + "group_members": "Üyeler", + "cancel": "İptal", + "create": "Oluştur", + "members": "üyeler", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Kişileri ve mesajları arayın", + "select_conversation_hint": "Mesajları görüntülemek için bir görüşme seçin", + "info": "Info", + "group_name_placeholder": "Grup adını girin" + }, + "toast": { + "device_connected": "Cihaz bağlandı", + "device_disconnected": "Cihazın bağlantısı kesildi", + "session_started": "Uzak oturum başlatıldı", + "session_ended": "Uzak oturum sona erdi", + "file_upload_complete": "Dosya yükleme tamamlandı", + "settings_saved": "Ayarlar kaydedildi", + "error_generic": "Bir hata oluştu", + "connection_lost": "Bağlantı kesildi", + "reconnecting": "Yeniden bağlanılıyor..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Yönetici yardımcı programları ve tanılama araçları", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Gönder", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Metni girin...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Sunucuya Git", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Ana makinenin erişilebilirliğini ve gecikmesini kontrol edin", + "tcp_title": "TCP Bağlantı Noktası Kontrolü", + "tcp_desc": "TCP bağlantı noktası bağlantısını test edin", + "ssl_title": "SSL Denetleyicisi", + "ssl_desc": "SSL/TLS sertifika ayrıntılarını inceleyin", + "http_title": "HTTP Durum Kontrolü", + "http_desc": "HTTP uç nokta durumunu doğrulayın", + "dns_title": "DNS Lookup", + "dns_desc": "Ana bilgisayar adını IP adresine çözümle", + "whois_title": "DNS Records", + "whois_desc": "A, AAAA, MX, TXT, NS kayıtlarını sorgulayın", + "speed_title": "Speed Test", + "speed_desc": "İndirme bant genişliğini ölçün", + "run_speed_test": "Hız Testini Çalıştır", + "wol_title": "Wake-on-LAN", + "wol_desc": "Bir cihazı uyandırmak için sihirli paket gönder", + "wol_sent": "Sihirli paket gönderildi", + "hash_title": "Karma Oluşturucu", + "hash_desc": "Kriptografik karmalar oluştur", + "password_title": "Şifre Oluşturucu", + "password_desc": "Güvenli, rastgele bir şifre oluşturun", + "jwt_title": "JWT Decoder", + "jwt_desc": "JSON Web Tokenlarının kodunu çözün ve inceleyin", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Base64 verilerini kodlayın veya kodunu çözün", + "url_title": "URL Encoder", + "url_desc": "URL bileşenlerini kodlama veya kodunu çözme", + "processes_title": "Süreç Listesi", + "processes_desc": "Çalışan sistem işlemlerini görüntüleyin", + "disk_title": "Disk Usage", + "disk_desc": "Disk bölümü kullanımını görüntüle", + "db_title": "Veritabanı İstatistikleri", + "db_desc": "Veritabanı tablosu istatistiklerini görüntüle", + "docker_title": "Docker Konteynerler", + "docker_desc": "Çalışan Docker kapsayıcılarını görüntüleyin", + "logs_title": "Log Viewer", + "logs_desc": "Son günlük çıktısını görüntüle", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Geçerlilik Tarihi", + "valid_to": "Geçerlilik Tarihi", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Veri yok", + "no_docker": "Docker kapsayıcısı bulunamadı veya Docker mevcut değil", + "no_logs": "Günlük satırı yok" + }, + "policies": { + "title": "Organizasyon Politikaları", + "subtitle": "Kuruluşlarınız için güvenlik, bağlantı ve özellik politikalarını yönetin", + "select_org": "Organizasyon", + "select_org_placeholder": "Bir kuruluş seçin...", + "select_org_first": "Politika denetim günlüğünü görüntülemek için bir kuruluş seçin.", + "configured": "Configured", + "connection_title": "Bağlantı Politikası", + "connection_desc": "Uzak oturumların nasıl kurulduğunu kontrol edin", + "connection_mode": "Bağlantı Modu", + "mode_attended": "Katıldınız (kullanıcı onayı gerektirir)", + "mode_unattended": "Katılımsız (her zaman izin ver)", + "mode_ask": "Always Ask", + "max_session": "Maksimum Oturum Süresi (dakika)", + "idle_lock": "Boşta Kilitleme Zaman Aşımı (dakika)", + "wallpaper_policy": "Oturum Sırasında Duvar Kağıdı", + "wallpaper_show": "Show", + "wallpaper_hide_session": "Oturum sırasında gizle", + "wallpaper_hide_always": "Always hide", + "features_title": "Özellik Politikası", + "features_desc": "Cihazlar için belirli özellikleri etkinleştirme veya devre dışı bırakma", + "allow_file_transfer": "Dosya Aktarımına İzin Ver", + "allow_clipboard": "Pano Senkronizasyonuna İzin Ver", + "allow_audio": "Ses Akışına İzin Ver", + "allow_recording": "Oturum Kaydına İzin Ver", + "security_title": "Güvenlik Politikası", + "security_desc": "Kuruluş cihazları için güvenlik gereksinimlerini zorunlu kılın", + "require_2fa": "Katılımsız Erişim için 2FA'yı zorunlu kılın", + "password_min_length": "Minimum Şifre Uzunluğu", + "password_require_special": "Özel Karakterler Gerektirir", + "password_max_age": "Şifre Maksimum Süresi (gün, 0=hiçbir zaman)", + "allowed_operators": "İzin Verilen Operatör Rolleri (virgülle ayrılmış)", + "network_title": "Ağ Politikası", + "network_desc": "Aktarma sunucularını ve doğrudan bağlantıları kontrol edin", + "block_direct_p2p": "Doğrudan P2P'yi Engelle (kuvvet rölesi)", + "allowed_relays": "İzin Verilen Aktarma Sunucuları (satır başına bir tane)", + "ip_allowlist": "IP İzin Verilenler Listesi (CIDR, her satıra bir tane)", + "update_title": "Politikayı Güncelle", + "update_desc": "Otomatik güncellemeleri kontrol edin ve kanalları güncelleyin", + "auto_update": "Otomatik Güncellemeyi Etkinleştir", + "update_channel": "Kanalı Güncelle", + "audit_title": "Politika Değişiklikleri", + "audit_desc": "Son politika değişikliği geçmişi", + "no_audit": "Hiçbir politika değişikliği kaydedilmedi.", + "save_success": "Politika başarıyla kaydedildi", + "save_failed": "Politika kaydedilemedi", + "load_failed": "Politikalar yüklenemedi", + "block_direct_p2p_hint": "Bu kuruluştaki cihazlar için geçerlidir. Genel varsayılan Ayarlar → Bağlantı stratejisi altındadır." + }, + "attestation": { + "title": "Cihaz Onayı", + "subtitle": "Cihaz kimlik doğrulamasını ve donanım parmak izlerini izleyin", + "verified": "Verified", + "pending": "Pending", + "failed": "Başarısız", + "device_list": "Cihaz Onay Kayıtları", + "device_list_desc": "Donanım parmak izleri ve kimlik doğrulama durumu", + "col_device": "Cihaz Kimliği", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Onay kaydı bulunamadı.", + "verify_success": "Cihaz doğrulandı olarak işaretlendi", + "verify_failed": "Cihaz doğrulanamadı", + "revoke_success": "Cihaz onayı iptal edildi", + "revoke_failed": "Onay iptal edilemedi" + }, + "fleet": { + "title": "Filo Yönetimi", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "İş Akışı Oluşturucu", + "tab_compliance": "Compliance", + "res_title": "Kaynak Haritalama", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Ağ Sürücüsü", + "res_type_dns": "DNS Sunucusu", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Kaynak Ekle", + "res_name": "Kaynak Adı", + "res_type": "Type", + "res_address": "Adres / Yol", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Organizasyon", + "res_scope_group": "Grup", + "res_scope_device": "Cihaz", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Kaynak bulunamadı. Bir tane oluşturmak için 'Kaynak Ekle'yi tıklayın.", + "res_confirm_delete": "Bu kaynağı silmek istediğinizden emin misiniz?", + "task_title": "Görev Zamanlayıcı", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Başarısız", + "task_search": "Search tasks…", + "task_create": "Görev Oluştur", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "Güncelleme", + "task_type_restart": "Yeniden başlat", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Virgülle ayrılmış cihaz kimlikleri veya grup adları", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Zamanlama Değeri", + "task_script": "Komut Dosyası / Komut", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Hiçbir görev bulunamadı. Başlamak için 'Görev Oluştur'u tıklayın.", + "task_confirm_delete": "Bu görevi silmek istediğinizden emin misiniz?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Görsel İş Akışı Oluşturucu", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Kaydet", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Özelliklerini düzenlemek için bir düğüm seçin.", + "builder_node_trigger_manual": "Manuel Tetikleyici", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Olay Tetikleyici", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Svc'yi yeniden ba��latın", + "builder_node_action_file_deploy": "Dosyayı Dağıt", + "builder_node_action_message": "Mesaj Gönder", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Uyarı Gönder", + "builder_node_result_chain": "Zincir İş Akışı", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "İş akışı adı:", + "comp_title": "Yazılım Uyumluluğu", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Cihaz", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Bu cihazda otomatik düzeltme çalıştırılsın mı?", + "comp_no_data": "Uyumluluk verisi mevcut değil. Başlamak için bir tarama çalıştırın.", + "save": "Kaydet", + "cancel": "İptal", + "close": "Kapat", + "edit": "Düzenle", + "delete": "Sil", + "actions": "Actions", + "all_orgs": "Tüm Organizasyonlar", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Ağ Sürücüsü", + "type_dns": "DNS Sunucusu", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Kaynak Ekle", + "edit_resource": "Kaynağı Düzenle", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Adres / Yol", + "scope_org": "Organizasyon", + "scope_group": "Grup", + "scope_device": "Cihaz", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Bu öğeyi silmek istediğinizden emin misiniz?", + "all_statuses": "Tüm Durumlar", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Başarısız", + "search_tasks": "Search tasks�", + "create_task": "Görev Oluştur", + "edit_task": "Görevi Düzenle", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Dosya Dağıtımı", + "task_type_registry": "Registry", + "target_devices": "Hedef Cihazlar", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Komut Dosyası / Komut", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Yükleniyor", + "no_output": "Çıkış mevcut değil", + "error_loading": "Veriler yüklenirken hata oluştu", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Manuel Tetikleyici", + "node_schedule": "Schedule", + "node_event": "Olay Tetikleyici", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Svc'yi yeniden ba��latın", + "node_file_deploy": "Dosyayı Dağıt", + "node_send_message": "Mesaj Gönder", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Uyarı Gönder", + "node_chain": "Zincir İş Akışı", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Tüm Organizasyonlar", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Cihaz", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Bu cihazda otomatik düzeltme çalıştırılsın mı?" + }, + "scaling": { + "title": "Ölçeklendirme ve Aktarma Yönetimi", + "tab_overview": "Genel Bakış", + "tab_relays": "Relay Nodes", + "tab_rules": "Atama Kuralları", + "tab_capacity": "Kapasite Planlama", + "arch_title": "Ağ Mimarisi", + "arch_loading": "Mimari diyagramı yükleniyor...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Toplam Cihazlar", + "stat_active_sessions": "Aktif Oturumlar", + "stat_bandwidth": "Toplam Bant Genişliği", + "relay_health": "Röle Sağlığı", + "no_relays": "Hiçbir geçiş düğümü yapılandırılmadı. Yükü dağıtmak için ilk aktarma düğümünüzü ekleyin.", + "relay_search": "Röleleri ara...", + "relay_add": "Aktarma Düğümü Ekle", + "relay_edit": "Röle Düğümünü Düzenle", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Cihazlar", + "col_sessions": "Oturumlar", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Hedef Rölesi", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Etkin", + "status_disabled": "Devre dışı", + "confirm_delete_relay": "Bu geçiş düğümünü silmek istediğinizden emin misiniz?", + "confirm_delete_rule": "Bu atama kuralını silmek istediğinizden emin misiniz?", + "rules_hint": "Atama kuralları, belirli cihaz gruplarını hangi aktarma sunucusunun işleyeceğini belirler. Kurallar önceliğe göre değerlendirilir (önce en düşük).", + "rule_add": "Add Rule", + "rule_edit": "Kuralı Düzenle", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Cihaz Grubu", + "match_tag": "Cihaz Etiketi", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Ana Sunucu", + "fallback_nearest": "En Yakın Aktarma", + "relay_max_sessions": "Maksimum Oturum", + "relay_max_bandwidth": "Maksimum Bant Genişliği (Mbps)", + "cap_tiers": "Kapasite Katmanları", + "cap_loading": "Kapasite verileri yükleniyor...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Hiçbir öneri mevcut değil.", + "cap_planning": "Altyapı Planlama", + "cap_config": "Yapılandırma", + "cap_max_devices": "Maksimum Cihaz Sayısı", + "cap_max_sessions": "Maksimum Oturum", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Cihaz Kapasitesi", + "cap_tier_sessions": "Oturum Kapasitesi", + "cap_tier_bandwidth": "Bant Genişliği Kapasitesi", + "cap_single_sqlite": "Tek Sunucu (SQLite)", + "cap_single_pg": "Tek Sunucu (PostgreSQL)", + "cap_master_3": "Master + 3 Röle", + "cap_master_10": "Master + 10 Röle", + "rec_no_relays": "Hiçbir geçiş düğümü yapılandırılmadı. Daha iyi performans ve yedeklilik için geçiş düğümleri eklemeyi düşünün.", + "rec_devices_high": "Cihaz kullanımı yüksektir. Yükü dağıtmak için daha fazla aktarma düğümü eklemeyi düşünün.", + "rec_sessions_high": "Oturum kapasitesi sınırına yaklaşıyor. Aktarma altyapısını yükseltmeyi düşünün.", + "rec_cpu_high": "Bazı geçiş düğümleri yüksek CPU kullanımı bildiriyor. Yük dengelemeyi veya kapasite yükseltmelerini düşünün.", + "rec_all_good": "Tüm sistemler normal parametreler dahilinde çalışmaktadır. Herhangi bir işlem yapılmasına gerek yoktur.", + "save": "Kaydet", + "cancel": "İptal", + "edit": "Düzenle", + "delete": "Sil", + "close": "Kapat", + "no_rules": "Atama kuralı yok.", + "relays_info_banner": "Bu liste bilgilendirme amaçlıdır. İstemciler tarafından fiilen kullanılan aktarma sunucuları, BetterDesk sunucusundaki RELAY_SERVERS ortam değişkeni aracılığıyla yapılandırılır.", + "relay_name_address_required": "İsim ve adres gereklidir.", + "relay_save_failed": "Aktarma düğümü kaydedilemedi.", + "relay_delete_failed": "Aktarma düğümü silinemedi.", + "relay_saved": "Aktarma düğümü kaydedildi.", + "relay_deleted": "Röle düğümü silindi.", + "rule_name_value_required": "Kural adı ve eşleşme değeri gerekli.", + "rule_save_failed": "Kural kaydedilemedi.", + "rule_delete_failed": "Kural silinemedi.", + "rule_saved": "Kural kaydedildi.", + "rule_deleted": "Kural silindi." + }, + "cross_platform": { + "title": "Platformlar Arası Uyumluluk", + "tab_matrix": "Uyumluluk Matrisi", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "Desteklenen tüm platformlarda özellik destek matrisi. Yeşil = tam destek, sarı = kısmi, gri = mevcut değil, mavi = planlanmış.", + "col_feature": "Feature", + "legend_full": "Tam destek", + "legend_partial": "Kısmi destek", + "legend_none": "Mevcut değil", + "legend_planned": "Planned", + "platform_breakdown": "Platform Dağılımı", + "arch_breakdown": "Mimari Dağılımı", + "version_breakdown": "Sürüm Dağılımı", + "summary": "Summary", + "total_devices": "Toplam Cihazlar", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "İstemci Sürümleri", + "no_devices": "Henüz kayıtlı cihaz yok.", + "protocols_hint": "Protokol yeteneği anlaşması, her istemcinin yalnızca desteklediği özellikleri almasını sağlar. Sunucu, bildirilen yeteneklere göre davranışı uyarlar.", + "capability_negotiation": "Yetenek Müzakereleri", + "codec_support": "Codec Desteği (Çevrimiçi Cihazlar)", + "feature_support": "Özellik Desteği (Çevrimiçi Cihazlar)", + "no_codec_data": "Çevrimiçi cihazlarda codec verileri mevcut değil.", + "no_feature_data": "Çevrimiçi cihazlarda özellik verisi yok.", + "protobuf_schema": "İstemci Yetenekleri Protobuf Şeması", + "diagram_client": "Client", + "diagram_server": "BetterDesk Sunucusu", + "diagram_peer": "Uzak Eş", + "limitations_hint": "Her platformun mevcut özellikleri etkileyen belirli sınırlamaları vardır. Dağıtımları planlarken bu kısıtlamaları gözden geçirin.", + "feat_desktop_client": "Masaüstü İstemcisi", + "feat_background_agent": "Arka Plan Aracısı", + "feat_remote_target": "Uzak Hedef", + "feat_screen_capture": "Ekran Yakalama", + "feat_input_injection": "Giriş Enjeksiyonu", + "feat_file_transfer": "Dosya Aktarımı", + "feat_clipboard_sync": "Pano Senkronizasyonu", + "feat_audio_streaming": "Ses Akışı", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "Güvenli masaüstü bilgisayarlara hizmet kurulumu ve giriş enjeksiyonu için UAC yükseltmesi gerekir.", + "limit_win_service": "NSSM hizmeti olarak çalışır; kurulum için Yönetici ayrıcalıkları gerektirir.", + "limit_win_firewall": "Windows Güvenlik duvarı kuralları, geçiş bağlantıları için 21115-21119 bağlantı noktalarına izin vermelidir.", + "limit_linux_wayland": "Wayland dizgicileri programatik ekran yakalamayı kısıtlıyor; PipeWire portalı API gereklidir.", + "limit_linux_pipewire": "Ses yakalama PipeWire gerektirir; PulseAudio geri dönüşü mevcut ancak sınırlıdır.", + "limit_linux_arm": "ARM64 yapıları mevcut; bazı codec bileşenleri yazılım kod çözmeyi kullanabilir (daha yavaş).", + "limit_mac_screen": "Sistem Tercihleri > Gizlilik ve Güvenlik bölümünde Ekran Kaydı izni gereklidir.", + "limit_mac_signing": "Temsilcinin dağıtım için Apple Developer ID ile imzalanması gerekir.", + "limit_mac_notarize": "macOS Gatekeeper (App Store dışı dağıtım) için noter onayı gereklidir.", + "limit_android_projection": "MediaProjection API, her ekran yakalama oturumu için kullanıcının onayını gerektirir.", + "limit_android_accessibility": "Giriş ekleme, Erişilebilirlik Hizmeti gerektirir; Android 14+ sürümlerinde kısıtlanmıştır.", + "limit_android_battery": "Arka plan hizmeti Doze moduyla sınırlıdır; pil optimizasyonundan muafiyet gerektirebilir.", + "limit_ios_capture": "Apple, arka planda ekran yakalamayı yasaklar; yalnızca izleyici modu desteklenir.", + "limit_ios_input": "Giriş enjeksiyonuna izin verilmez; yalnızca uzaktan görüntüleme ve sohbet.", + "limit_ios_appstore": "Yalnızca App Store aracılığıyla dağıtım; Beta testi için TestFlight.", + "limit_web_https": "WebCodecs API ve WebRTC, HTTPS gerektirir; HTTP, JMuxer'a (sınırlı codec bileşenleri) geri döner.", + "limit_web_codec": "Codec desteği tarayıcıya bağlıdır; H.264 geniş çapta desteklenir, VP9/AV1 değişiklik gösterir.", + "limit_web_performance": "Performans, tarayıcı sanal alanıyla sınırlıdır; doğrudan donanım hızlandırması yok.", + "limit_chrome_crostini": "Yalnızca Crostini Linux kapsayıcısının içinde tam aracı desteği.", + "limit_chrome_pwa": "PWA modu yalnızca web özellikleri sağlar; yerel aracı özelliği yok.", + "limit_chrome_input": "Giriş enjeksiyonu Crostini kapsayıcısının dışında desteklenmez.", + "feat_session_recording": "Oturum Kaydı", + "feat_multi_monitor": "Çoklu Monitör", + "feat_unattended_access": "Gözetimsiz Erişim", + "limit_win_virtual_account": "Servisler LocalSystem yerine izole sanal hesaplar altında çalışır; özel günlük yolları ACL ayarlaması gerektirebilir.", + "limit_linux_unprivileged": "Servisler, systemd sertleştirmesi (NoNewPrivileges, ProtectSystem=strict) ile özel ayrıcalıksız 'betterdesk' hesabı olarak çalışır." + }, + "security_audit": { + "title": "Güvenlik Denetimi", + "tab_overview": "Genel Bakış", + "tab_events": "Denetim Etkinlikleri", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Güvenlik Puanı", + "failed_logins": "Başarısız Girişler (24 saat)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Eski Tuşlar (>90d)", + "security_checks": "Güvenlik Kontrolleri", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Güvenli", + "enabled": "Etkin", + "disabled": "Devre dışı", + "all_events": "All Events", + "event_login_failed": "Giriş Başarısız Oldu", + "event_login_success": "Giriş Başarılı", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Yapılandırma Değiştirildi", + "event_key_created": "Anahtar Oluşturuldu", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Hiçbir denetim etkinliği bulunamadı.", + "hardening_hint": "BetterDesk dağıtımınız için güvenliği güçlendirme öncelikleri. Öğeler önem derecesine göre sıralanır.", + "no_hardening": "Sertleştirici öğe mevcut değil.", + "vuln_hint": "Bağımlılık güvenlik açığı taraması sonuçları. Bağımlılıkları güvende tutmak için npm denetimini düzenli olarak çalıştırın.", + "no_vulns": "Hiçbir güvenlik açığı bulunamadı. Bağımlılıklarınız güvende." + }, + "languages": { + "title": "Dil Yönetimi", + "total_languages": "Toplam Diller", + "fully_translated": "Tamamen Çevrilmiş", + "needs_review": "İncelenmesi Gerekiyor", + "reference_keys": "Referans Anahtarları", + "no_languages": "Dil dosyası bulunamadı.", + "badge_reference": "Reference", + "badge_review": "İncelenmesi Gerekiyor", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Eksikleri Görüntüle", + "fix_missing": "Fix Missing", + "missing_keys_for": "için eksik anahtarlar", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "ve {n} daha fazlası...", + "all_keys_present": "Tüm anahtarlar mevcut!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code} içindeki eksik anahtarlar elle çevrilmelidir.", + "no_fix_needed": "Düzeltilecek eksik anahtar yok." + }, + "resource_control": { + "title": "Kaynak Kontrolü", + "tab_overview": "Genel Bakış", + "tab_usb": "USB Control", + "tab_optical": "Optik Sürücüler", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Kaynak Kotaları", + "compliance_by_category": "Kategoriye Göre Uyumluluk", + "device_compliance": "Cihaz Uyumluluğu", + "search_devices": "Cihazları ara...", + "col_device": "Cihaz", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Toplam Cihazlar", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Uyumluluk Oranı", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Yapılandır", + "no_devices": "Hiçbir cihaz bulunamadı", + "usb_title": "USB Bağlantı Noktası Kontrolü", + "usb_hint": "Seçilen cihaz veya kuruluş çapında varsayılan politika için USB depolama cihazı erişimini kontrol edin.", + "usb_storage_policy": "USB Depolama Politikası", + "usb_whitelist": "Beyaz Listeye Eklenen Cihazlar (satır başına bir tane)", + "usb_whitelist_hint": "VID:PID (ör. 0781:5583)", + "usb_audit_log": "USB cihaz bağlantılarını günlüğe kaydedin", + "optical_title": "Optik Sürücü Kontrolü", + "optical_hint": "Seçilen aygıt için CD/DVD/Blu-ray sürücü erişimini kontrol edin.", + "optical_policy": "Optik Sürücü Politikası", + "optical_audit_log": "Optik sürücü erişimini günlüğe kaydet", + "monitors_title": "Monitör Yönetimi", + "monitors_hint": "Maksimum sayım, çözünürlük uygulaması, parlaklık ve güç programları dahil olmak üzere monitör ayarlarını yapılandırın.", + "monitors_max_count": "Maksimum Monitör (0 = sınırsız)", + "monitors_max_hint": "0 limit yok demektir", + "monitors_resolution": "Maksimum Çözünürlük", + "monitors_brightness": "Parlaklık Sınırı", + "monitors_power_schedule": "Güç Programı", + "monitors_power_hint": "örneğin kapalı:22:00-06:00", + "disks_title": "Disk Erişim Kontrolü", + "disks_hint": "Salt okunur mod, şifreleme uygulaması ve bölüm görünürlüğü dahil olmak üzere disk erişim ilkelerini yapılandırın.", + "disks_readonly": "Salt okunur modu zorla", + "disks_encryption": "Şifreleme gerektir (BitLocker/LUKS)", + "disks_smart": "S.M.A.R.T.'yi etkinleştirin izleme", + "disks_hidden": "Gizli Bölümler", + "disks_hidden_hint": "Virgülle ayrılmış sürücü harfleri veya bağlama noktaları", + "quotas_title": "Kaynak Kotaları", + "quotas_hint": "Seçilen cihaz için kullanıcı başına CPU, RAM, bant genişliği ve disk kotalarını ayarlayın.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Bant Genişliği Sınırı (Mbps)", + "quotas_bandwidth_hint": "0 = sınırsız", + "quotas_disk_quota": "Disk Kotası (GB)", + "quotas_disk_hint": "0 = sınırsız", + "quotas_process_whitelist": "İşlem Beyaz Listesi (satır başına bir tane)", + "quotas_process_hint": "örneğin chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Yalnızca Beyaz Liste", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Yazılım Güncellemeleri", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Yüklü sürüm", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Güncellemeleri kontrol edin", + "checking": "Checking…", + "up_to_date": "güncel", + "update_available": "Güncelleme mevcut", + "changelog": "Release Notes", + "no_changelog": "Sürüm notu mevcut değil", + "files_changed": "Dosyalar değiştirildi", + "files": "dosyalar", + "changes_unavailable": "Dosya değişiklik listesi yüklenemedi. Güncellemeyi yine de yükleyebilirsiniz.", + "create_backup": "Güncellemeden önce yedekleme oluşturun", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Güncelleme yükleniyor…", + "creating_backup": "Yedek oluşturuluyor…", + "downloading": "Dosyalar indiriliyor…", + "install_success": "Güncelleme başarıyla yüklendi. Konsol yeniden başlatılıyor…", + "install_failed": "Güncelleme yüklemesi başarısız oldu", + "restarting": "Konsolun yeniden başlatılması bekleniyor…", + "restart_complete": "Konsol başarıyla yeniden başlatıldı", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Güncelleme sürümü seçilmedi. Önce güncellemeleri kontrol edin.", + "backups_title": "Yedeklemeleri Güncelle", + "backups_desc": "Her güncellemeden önce otomatik olarak oluşturulan güncelleme öncesi yedeklemeler", + "no_backups": "Güncelleme yedeği bulunamadı", + "restore": "Restore", + "restore_confirm": "Bu yedeklemeden geri yüklemek istediğinizden emin misiniz? Değiştirilen dosyaların üzerine yazılacaktır.", + "restore_success": "Yedekleme başarıyla geri yüklendi. Konsol yeniden başlatılıyor…", + "baseline_set": "Temel ayar", + "commits_behind": "arkasında taahhüt eder", + "total_files": "Toplam dosyalar", + "applied": "Applied", + "failed": "Başarısız", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Sunucuya Git", + "component_agent": "Agent", + "component_scripts": "Komut Dosyaları ve Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Git kontrol ediliyor…", + "go_not_found": "Yüklü değil git", + "go_check_failed": "Go'nun kullanılabilirliği kontrol edilemedi", + "server_building": "Go server derleniyor... Bu işlem birkaç dakika sürebilir.", + "server_built": "Sunucu ikili dosyası derlendi", + "server_build_failed": "Sunucu derlemesi başarısız oldu", + "server_deployed": "Sunucu ikili programı dağıtıldı", + "server_deploy_failed": "Sunucu dağıtımı başarısız oldu", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Sunucu kaynağı indiriliyor…", + "delete": "Sil", + "delete_confirm": "{name} yedeklemesi kalıcı olarak silinsin mi? Bu geri alınamaz.", + "delete_success": "Yedekleme silindi", + "delete_failed": "Yedekleme silinemedi", + "retention_label": "En yeni N yedeği sakla", + "retention_hint": "Her güncellemeden sonra eski yedeklemeler otomatik olarak silinir. Tüm yedeklemeleri saklamak için 0'ı kullanın.", + "retention_saved": "Saklama ayarı kaydedildi", + "retention_invalid": "Saklama 0 ile 1000 arasında bir tam sayı olmalıdır", + "retention_required_for_prune": "Önce 0'dan büyük bir saklama değeri ayarlayın", + "prune_now": "Apply now", + "prune_confirm": "Yalnızca {n}'nin en son yedeklemeleri tutulup geri kalanı silinsin mi?", + "prune_done": "{n} yedekleri budandı", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Güncelleme yöntemi", + "strategy_download": "Önceden oluşturulmuş ikili programı indirin", + "strategy_compile": "Kaynaktan derle", + "both_available": "İndir ve Derle", + "download_available": "İndirilebilir", + "no_method": "Güncelleme yöntemi yok", + "no_release": "No release", + "available": "Mevcut", + "server_downloading": "Sunucu ikili programı indiriliyor…", + "server_downloaded": "Sunucu ikili dosyası indirildi", + "server_download_failed": "Sunucu ikili indirme işlemi başarısız oldu", + "server_download_note": "GitHub Sürümlerinden önceden oluşturulmuş bir ikili dosya indirilecektir. Bu genellikle bir dakikadan az sürer.", + "install_go_hint": "Derlemeyi etkinleştirmek veya önceden oluşturulmuş ikili dosyalar içeren bir sürüm yayınlamak için https://go.dev/dl/'den Go'yu yükleyin", + "strategy_install_go": "Go'yu otomatik olarak yükle ve derle", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Otomatik yeniden oluşturmaya hazır", + "toolchain_ready": "Alet zinciri kuruldu", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Go toolchain indiriliyor…", + "toolchain_failed": "Go toolchain kurulumu başarısız oldu", + "modal_title": "Güncelleme yükleniyor", + "modal_done_title": "Güncelleme tamamlandı", + "modal_close": "Kapat", + "modal_reload_now": "Konsolu yeniden yükle", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Konsol dosyaları", + "phase_server": "Sunucu aşaması", + "phase_restart": "Yeniden başlat", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Yedekleme atlandı (kullanıcı seçimine göre)", + "server_skipped": "Go server atlandı", + "server_not_selected": "Go server not selected", + "server_processing": "Go server güncellemesi işleniyor…", + "no_restart_needed": "Yeniden başlatmaya gerek yok", + "complete": "Güncelleme uygulandı", + "complete_summary": "Güncelleme başarıyla uygulandı.", + "complete_with_errors": "Güncelleme tamamlandı ancak bazı adımlar başarısız oldu. Aşağıdaki ayrıntılara bakın.", + "modal_done_with_errors_title": "Güncelleme hatalarla tamamlandı", + "console_will_restart": "Konsol işlemi şimdi yeniden başlatılacak…", + "restart_complete_msg": "Konsolun yeniden başlatılması tamamlandı. Yeni sürümü yüklemek için yeniden yükle'yi tıklayın. Sayfa 8 saniye içinde otomatik olarak yeniden yüklenecektir.", + "refresh_recommended": "Statik varlıklar değişti; yeni kullanıcı arayüzünü görmek için sayfayı yeniden yükleyin.", + "confirm_title": "Güncellemeyi uygula", + "confirm_with_backup": "Güncelleme öncesi yedekleme otomatik olarak oluşturulacaktır.", + "confirm_no_backup": "Hiçbir yedekleme oluşturulmayacak (risk size ait olmak üzere devam edin).", + "server_stale_title": "Sunucu ikili programı güncel değil", + "server_stale_desc": "Go server kaynağı güncellendi ancak çalışan ikili dosya yeniden oluşturulmadı. Güvenlik ve kitaplık güncellemelerini uygulamak için şimdi yeniden oluşturun.", + "rebuild_server": "Sunucu ikili dosyasını yeniden oluştur", + "rebuilding_server": "Yeniden inşa ediliyor…", + "rebuild_server_success": "Sunucu ikili programı yeniden oluşturuldu ve yeniden başlatıldı", + "rebuild_server_failed": "Sunucu ikili yeniden oluşturma işlemi başarısız oldu" + }, + "permissions": { + "title": "İzinler", + "subtitle": "Rol tabanlı izinleri ve özel geçersiz kılmaları yönetin", + "info_title": "İzinler nasıl çalışır?", + "info_desc": "Her rolün varsayılan izinleri vardır. Aşağıda geçiş yaparak rol başına ayrı ayrı izinler ekleyebilir veya kaldırabilirsiniz. Özel geçersiz kılmalar vurgulanır ve herhangi bir zamanda varsayılan ayarlara geri döndürülebilir.", + "select_role": "Rol seçin", + "select_role_placeholder": "Bir rol seçin...", + "reset_overrides": "Tüm geçersiz kılmaları sıfırla", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Sunucu düzeyinde", + "custom": "Custom", + "default": "Default", + "revert": "Varsayılana geri dön", + "saved": "İzin güncellendi", + "reverted": "Varsayılana geri döndürüldü", + "all_reverted": "Tüm geçersiz kılmalar geri alındı", + "confirm_reset": "Bu rol için tüm özel geçersiz kılmalar varsayılanlara sıfırlansın mı?", + "empty_title": "Bir rol seçin", + "empty_desc": "İzinlerini görüntülemek ve yönetmek için yukarıdaki açılır menüden bir rol seçin.", + "locked_title": "Super Admin", + "locked_desc": "Süper Yönetici varsayılan olarak tüm izinlere sahiptir ve özelleştirilemez.", + "cat_device": "Cihazlar", + "cat_user": "Users", + "cat_server": "Sunucu", + "cat_org": "Organizasyonlar", + "cat_audit": "Denetim ve İzleme", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Cihazları görüntüle", + "perm_device_connect": "Cihazlara bağlanın", + "perm_device_edit": "Cihazları düzenle", + "perm_device_delete": "Cihazları sil", + "perm_device_ban": "Cihazları yasakla / yasağı kaldır", + "perm_device_change_id": "Cihaz kimliğini değiştir", + "perm_user_view": "Kullanıcıları görüntüle", + "perm_user_create": "Kullanıcı oluştur", + "perm_user_edit": "Kullanıcıları düzenle", + "perm_user_delete": "Kullanıcıları sil", + "perm_server_config": "Sunucu yapılandırması", + "perm_server_keys": "API anahtarlarını yönetin", + "perm_org_create": "Organizasyonlar oluşturun", + "perm_org_edit": "Kuruluşları düzenle", + "perm_org_delete": "Kuruluşları sil", + "perm_org_manage_users": "Kuruluş kullanıcılarını yönetme", + "perm_org_manage_devices": "Organizasyon cihazlarını yönetin", + "perm_audit_view": "Denetim günlüklerini görüntüle", + "perm_metrics_view": "Metrikleri görüntüle", + "perm_blocklist_edit": "Engellenenler listesini düzenle", + "perm_cdap_view": "CDAP cihazlar��nı görüntüleyin", + "perm_cdap_command": "CDAP komutlarını gönder", + "perm_cdap_terminal": "CDAP terminal erişimi", + "perm_cdap_files": "CDAP dosya erişimi", + "perm_enrollment_manage": "Kaydı yönet", + "perm_enrollment_approve": "Kaydı onayla", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Markalamayı düzenle", + "perm_server_attestation": "Sunucu performans onayı" + }, + "notifications": { + "title": "Bildirimler", + "empty": "Yeni bildirim yok", + "mark_all_read": "Tümünü okundu olarak işaretle", + "see_all": "Tüm yardım isteklerini görün", + "help_request": "Yardım isteği", + "just_now": "just now" + }, + "accessibility": { + "title": "Erişilebilirlik", + "subtitle": "Konsolu görme, hareket ve okuma ihtiyaçlarınıza göre ayarlayın.", + "close": "Erişilebilirlik menüsünü kapat", + "profiles": "Hızlı profiller", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Daha büyük metin, güçlü kontrast ve odaklanma.", + "profile_dyslexia": "Okuma konforu", + "profile_dyslexia_hint": "Okunabilir yazı tipi ve daha geniş aralık.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Geçişleri azaltır ve animasyonu duraklatır.", + "profile_color_assist": "Renk desteği", + "profile_color_assist_hint": "Renk filtresi, etiketler ve vurgulanan bağlantılar.", + "reading": "Okuma", + "font_size": "Yazı boyutu", + "line_height": "Satır yüksekliği", + "letter_spacing": "Harf aralığı", + "word_spacing": "Kelime aralığı", + "readable_font": "Okunabilir yazı tipi", + "readable_font_hint": "Geniş, tanıdık harf şekilleri kullanır.", + "dyslexia_spacing": "Disleksi aralığı", + "dyslexia_spacing_hint": "Uzun metinler için ekstra boşluk ekler.", + "visual": "Görsel", + "contrast": "Kontrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Yüksek kontrastlı koyu", + "contrast_high_light": "Yüksek kontrastlı ışık", + "contrast_yellow_black": "Siyah üzerine sarı", + "color_filter": "Renk görme filtresi", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Renk doygunluğu", + "underline_links": "Bağlantıların altını çizin", + "underline_links_hint": "Bağlantıları renge bağlı kalmadan görünür hale getirir.", + "highlight_links": "Eylemleri vurgulayın", + "highlight_links_hint": "Bağlantıları ve düğmeleri ana hatlarıyla belirtir.", + "highlight_headings": "Başlıkları vurgulayın", + "highlight_headings_hint": "Bölüm başlıklarını bir renk çubuğuyla işaretler.", + "hide_media": "Dim media", + "hide_media_hint": "Görüntüleri, videoları ve tuvalleri karartır.", + "interaction": "Etkileşim", + "strong_focus": "Güçlü odaklanma", + "strong_focus_hint": "Büyük bir klavye odak halkasını gösterir.", + "large_cursor": "Büyük imleç", + "large_cursor_hint": "Daha büyük, yüksek kontrastlı bir işaretçi kullanır.", + "reduce_motion": "Hareketi azalt", + "reduce_motion_hint": "Geçişleri kısaltır ve kaydırmayı düzgünleştirir.", + "pause_animations": "Animasyonları duraklat", + "pause_animations_hint": "Döngüsel görsel hareketi durdurur.", + "reading_guide": "Okuma kılavuzu", + "reading_guide_hint": "İşaretçiyi parlak bir çizgiyle takip eder.", + "reading_mask": "Okuma maskesi", + "reading_mask_hint": "İşaretçinin üstündeki ve altındaki içeriği soluklaştırır.", + "preview": "Önizleme", + "preview_title": "Operatör çalışma alanı önizlemesi", + "preview_text": "Bu menüyü kapatmadan önce metnin, bağlantıların, kontrollerin ve durum etiketlerinin rahat okunup okunamayacağını kontrol edin.", + "preview_link": "Cihaz ayrıntıları bağlantısı", + "preview_status": "Online", + "preview_button": "Birincil eylem", + "preview_secondary": "Secondary", + "reset": "Sıfırla", + "done": "Bitti" + }, + "server_mgmt": { + "title": "Sunucu Yönetimi", + "subtitle": "BetterDesk konsol ana bilgisayarı (BETA) için kokpit benzeri kontrol düzlemi.", + "beta_tooltip": "Beta özelliği — aktif geliştirme aşamasındadır.", + "notice_title": "Beta özelliği", + "notice_body": "Bu araçlar, BetterDesk konsol işleminin yaşadığı ana bilgisayarda çalışır. Tüm işlemler denetlenmektedir. Özellik kapsamı gelecek sürümlerde genişletilecektir.", + "tab_overview": "Genel Bakış", + "tab_terminal": "Terminal", + "tab_files": "Dosyalar", + "tab_services": "Hizmetler", + "cpu": "CPU", + "memory": "Bellek", + "load": "Yük ortalaması", + "disks": "Diskler", + "history": "Geçmiş (son 60 örnek)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Çalışma süresi", + "no_disks": "Disk verisi yok", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY mevcut", + "term_connect": "Bağlan", + "term_disconnect": "Bağlantıyı kes", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Bağlantı hatası", + "term_warning": "Komutlar, konsol işleminin sahibi olan kullanıcı olarak çalışır. Yükseltmeyi etkinleştirmek için bir sudoers kuralı ekleyin.", + "term_hint": "İpucu: Sorunu iletmek için \"sudo -i\" yazın (sudoers yapılandırması gerektirir).", + "term_lib_failed": "Terminal kitaplığı yüklenemedi", + "files_up": "Bir seviye yukarı", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Boş dizin", + "files_error": "Dizin listelenemedi", + "read_failed": "Dosya okunamadı", + "save_failed": "Dosya kaydedilemedi", + "rename_failed": "Yeniden adlandırma başarısız oldu", + "delete_failed": "Silinemedi", + "delete_confirm": "Bu giriş silinsin mi?", + "mkdir_prompt": "Yeni klasör adı:", + "mkdir_failed": "Klasör oluşturulamadı", + "file_saved": "Dosya kaydedildi", + "binary_warn": "İkili dosya — yalnızca önizleme", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Hizmetleri arayın…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Hiçbir hizmet bulunamadı", + "svc_load_failed": "Hizmetler yüklenemedi", + "svc_action_failed": "İşlem başarısız oldu", + "svc_confirm": "Run", + "svc_start": "Başlat", + "svc_stop": "Durdur", + "svc_restart": "Yeniden başlat", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "BetterDesk Aracısını İndirin", + "choose_platform": "Platformunuzu seçin", + "choose_platform_hint": "İşletim sisteminize uygun yükleyiciyi seçin.", + "download": "İndir", + "building": "Bina…", + "failed": "Derleme başarısız oldu", + "need_help": "Yardıma mı ihtiyacınız var?", + "powered_by": "Tarafından desteklenmektedir" + }, + "server_attestation": { + "title": "Sunucu Performans Onayı", + "subtitle": "%80 CPU, RAM ve disk eşiğinde eşzamanlı uzak bağlantı kapasitesini belirleyen performans kıyaslaması.", + "warning_title": "Yük testi", + "warning_body": "Kıyaslama, sinyal ve röle sunucularına paralel WebSocket bağlantılarını simüle eder. Yoğun olmayan saatlerde çalıştırın — bu test üretim ortamını yükler.", + "run_benchmark": "Kıyaslamayı çalıştır", + "abort": "İptal", + "download_report": "JSON raporu indir", + "last_test": "Son test", + "no_test_yet": "Henüz kıyaslama çalıştırılmadı", + "max_connections": "Maksimum bağlantı", + "threshold_80": "%80 eşiği — nihai metrikler", + "disk": "Disk", + "ramp_chart": "Yük rampa grafiği", + "connections": "Bağlantılar", + "connections_short": "bağ.", + "tier_guide_title": "Her seviye ne anlama gelir?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 eşzamanlı bağlantı — küçük VPS (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 bağlantı — orta sınıf sunucu (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 bağlantı — yüksek performanslı sunucu (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 bağlantı — kurumsal altyapı (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ bağlantı — turbo sınıfı: özel donanım, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Not: Docker'da CPU/RAM metrikleri fiziksel ana bilgisayar yerine konteyner sınırlarını yansıtabilir.", + "badge_tooltip": "BetterDesk Server Attestation — sunucu performans sertifikasyonu", + "confirm_run": "Bu kıyaslama simüle edilmiş bağlantılarla sunucuya yük testi yapacak. Devam edilsin mi?", + "starting": "Başlatılıyor…", + "complete": "Kıyaslama tamamlandı", + "signal_peers": "Sinyal akranları", + "relay_sessions": "Röle oturumları", + "page_error": "Sunucu Onayı sayfası yüklenemedi", + "mode_estimated": "Tahmini (WebSocket ulaşılamıyor)", + "incomplete": "Kıyaslama geçerli bir seviye olmadan tamamlandı" + }, + "commercialization": { + "title": "Ticarileştirme", + "subtitle": "Destek paketleri, faturalandırılabilir oturumlar ve raporlar", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Erken özellik — faturalandırma ve paketler aktif geliştirmede.", + "tabs": { + "overview": "Genel bakış", + "packages": "Paketler ve sözleşmeler", + "sessions": "Oturumlar", + "reports": "Raporlar", + "settings": "Gelişmiş ayarlar" }, - "branding": { - "identity_title": "Marka Kimliği", - "identity_desc": "Konsolda gösterilen uygulama adını ve açıklamasını özelleştirin", - "app_name": "Uygulama Adı", - "app_description": "Uygulama Açıklaması", - "logo_title": "Logo", - "logo_desc": "Logonuzun kenar çubuğunda ve giriş sayfasında nasıl görüneceğini seçin", - "logo_type_icon": "Malzeme Simgesi", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "Bir Malzeme Simgesi adı girin (ör. dns, bulut, güvenlik). Fonts.google.com/icons'a bakın", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "SVG işaretlemenizi buraya yapıştırın. Yollar ve stillerle birlikte tam öğelerini destekler.", - "logo_image_upload": "Resim Yükle", - "logo_image_choose": "Resim dosyasını seç", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Geçersiz dosya türü. PNG, JPG, GIF, WebP veya SVG kullanın.", - "preview": "Preview", - "colors_title": "Renk Şeması", - "colors_desc": "Renk paletini özelleştirin. Varsayılanları kullanmak için boş bırakın.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "Vurgu Renkleri", - "colors_borders": "Borders", - "import_export_title": "İthalat / İhracat", - "import_export_desc": "Temanızı JSON dosyası olarak kaydedin veya başka bir örnekten içe aktarın", - "export_theme": "İhracat Teması", - "import_theme": "Temayı İçe Aktar", - "reset_defaults": "Varsayılanlara Sıfırla", - "save_branding": "Markalamayı Kaydet", - "saved": "Markalama başarıyla kaydedildi. Yeniden yükleniyor...", - "exported": "Tema dışa aktarıldı", - "imported": "Tema başarıyla içe aktarıldı. Yeniden yükleniyor...", - "import_error": "Tema içe aktarılamadı. Geçersiz dosya biçimi.", - "reset_confirm": "Markalamayı varsayılanlara sıfırlamak istediğinizden emin misiniz? Bu geri alınamaz.", - "reset_success": "Markalama varsayılanlara sıfırlandı. Yeniden yükleniyor...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Marka logonuz olarak görüntülenen birincil metin", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Logonun altındaki ikincil metin (ör. ürün adı veya kısa açıklama)", - "logo_upload_success": "Logo başarıyla yüklendi.", - "typography_title": "Typography", - "typography_desc": "Başlıklar ve gövde metni için yazı tiplerini seçin. Yazı tipleri, kendi kendine barındırma için sunucuya indirilir.", - "font_heading": "Başlık Yazı Tipi", - "font_heading_hint": "Başlıklar (H1–H6) ve metin logosu için kullanılır", - "font_body": "Body Font", - "font_body_hint": "Gövde metni ve kullanıcı arayüzü öğeleri için kullanılır", - "font_search_placeholder": "Yazı tiplerini ara...", - "font_system_default": "Sistem varsayılanı", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "sunucuya indirilen yazı tipleri", - "powered_by": "Tarafından destekleniyor", - "background_title": "Arka Plan ve Görünüm", - "background_desc": "Konsol duvar kağıdı, gradyan veya düz renk arka plan ayarlayın. Kartlar bunun üzerinde yüzer.", - "bg_type_none": "Yok", - "bg_type_color": "Düz Renk", - "bg_type_gradient": "Gradyan", - "bg_type_image": "Görüntü", - "bg_color": "Arka Plan Rengi", - "bg_gradient": "CSS Gradyanı", - "bg_gradient_hint": "Geçerli herhangi bir CSS gradyanı, örn. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Arka Plan Görüntüsü Yükle", - "bg_image_choose": "Görüntü dosyası seç", - "bg_image_hint": "PNG, JPG, WebP veya GIF. Maksimum 8 MB. Sunucuda depolanır.", - "bg_image_url": "Görüntü Yolu / URL", - "bg_size": "Görüntü Boyutlandırma", - "bg_size_cover": "Kapla (ekranı doldur)", - "bg_size_contain": "Sığdır", - "bg_size_auto": "Otomatik (orijinal)", - "bg_blur": "Arka Plan Bulanıklığı", - "bg_overlay": "Karanlık Örtü", - "bg_overlay_hint": "Metin okunabilirliğini artırmak için arka planı koyulaştırır.", - "bg_image_too_large": "Görüntü çok büyük. Maksimum boyut 8 MB'dir.", - "bg_image_invalid_type": "Geçersiz dosya türü. PNG, JPG, WebP veya GIF kullanın.", - "bg_upload_success": "Arka plan görüntüsü başarıyla yüklendi.", - "login_title": "Giriş Sayfası", - "login_desc": "Giriş ekranı başlığını, alt başlığını ve arka planını özelleştirin.", - "login_heading": "Giriş Başlığı", - "login_heading_placeholder": "Tekrar hoş geldiniz", - "login_subheading": "Giriş Alt Başlığı", - "login_subheading_placeholder": "Hesabınıza giriş yapın", - "login_bg_inherit": "Konsol ile aynı", - "agent_title": "Ajan İndirme Sayfası", - "agent_desc": "Son kullanıcılara gösterilen genel ajan indirme portalını özelleştirin.", - "agent_show_powered": "\"Powered by BetterDesk\" göster", - "agent_show_powered_hint": "İndirme portalı alt bilgisinde BetterDesk atıfını göster.", - "footer_title": "Alt Bilgi ve Telif Hakkı", - "footer_desc": "Giriş ekranında ve konsol yan çubuğunda gösterilen özel alt bilgi satırı ekleyin.", - "footer_text": "Alt Bilgi Metni", - "footer_text_hint": "örn. telif hakkı bildirimi veya şirket adı.", - "show_powered": "\"BetterDesk\" atfını göster", - "show_powered_hint": "Giriş alt bilgisinde ve yan çubukta BetterDesk adını ve sürümünü göster.", - "custom_css_title": "Özel CSS", - "custom_css_desc": "Gelişmiş: konsol ve giriş sayfasına uygulanan özel CSS ekle.", - "custom_css_hint": "Dikkatli kullanın. Geçersiz veya güvensiz kurallar temizlenir. Maksimum 20.000 karakter." + "clock": { + "title": "Sunucu saati (NTP)", + "check_now": "Şimdi kontrol et", + "unsynced": "Sunucu saati senkronize değil — faturalandırılabilir oturumlar engellenebilir" }, - "device_detail": { - "tab_overview": "Genel Bakış", - "tab_tags": "Etiketler ve Notlar", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Bağlantı", - "section_manage": "Yönetim", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Bu cihaz yasaklandı", - "no_reason": "Herhangi bir neden belirtilmedi", - "tags": "Tags", - "no_tags": "Bu cihaza etiket atanmamış", - "tag_placeholder": "Bir etiket adı girin...", - "add_tag": "Add", - "tag_exists": "Bu etiket zaten mevcut", - "notes": "Notes", - "notes_placeholder": "Bu cihazla ilgili not ekleyin...", - "danger_zone": "Danger Zone", - "action_connect_web": "Web Uzaktan Kumandası", - "action_connect_web_desc": "Tarayıcı uzak masaüstü aracılığıyla bağlanın", - "action_native_remote": "BetterDesk Uzaktan Kumanda", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Masaüstü İstemcisi", - "action_connect_desktop_desc": "Masaüstü istemci uygulamasında aç", - "action_change_id_desc": "Cihaz kayıt kimliğini değiştirme", - "action_ban_desc": "Bu cihazın bağlanmasını engelle", - "action_unban_desc": "Bu cihazın tekrar bağlanmasına izin ver", - "action_delete_desc": "Bu cihazı kalıcı olarak kaldır", - "tab_hardware": "Hardware", - "tab_metrics": "Metrikler", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Kodlama Yetenekleri", - "section_live_metrics": "Canlı Metrikler", - "section_current_usage": "Mevcut Kullanım", - "section_usage_history": "Kullanım Geçmişi", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "CPU Frekansı", - "total_memory": "Toplam Bellek", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Güncellendi", - "device_groups": "Gruplar", - "no_sysinfo": "Donanım bilgisi mevcut değil", - "no_sysinfo_hint": "Cihaz bir sistem bilgisi raporu gönderdikten sonra sistem bilgileri görünecektir", - "no_metrics": "Metrik verisi yok", - "no_metrics_hint": "Cihaz kalp atışı raporları gönderdikten sonra ölçümler görünecek", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Dosyalar", - "agent_lazy_hint": "Temsilciden canlı verileri yüklemek için bu sekmeyi tıklayın", - "agent_offline": "Temsilci çevrimdışı", - "agent_timeout": "Temsilci zamanında yanıt vermedi", - "agent_error": "Aracıdan veriler yüklenemedi", - "service_name": "Name", - "service_display": "Görünen ad", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Aktif faturalandırılabilir oturumlar" }, - "inventory": { - "title": "Inventory", - "subtitle": "Yönetilen cihazların donanım ve yazılım envanteri", - "device_id": "Cihaz Kimliği", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Toplam Bellek", - "memory_used": "Used Memory", - "memory_available": "Kullanılabilir Bellek", - "memory_usage": "Bellek Kullanımı", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Ağ Arayüzleri", - "software": "Software", - "software_count": "Yüklü Yazılım", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Fiziksel Çekirdekler", - "logical_cores": "Mantıksal Çekirdekler", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Mevcut", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP Adresleri", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Toplayıcı Çalışıyor", - "collector_stopped": "Toplayıcı Durduruldu", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Toplama tarihi", - "no_data": "Henüz envanter verisi mevcut değil. Sistem bilgilerini toplamak için \"Şimdi Topla\"ya tıklayın.", - "no_devices": "Envanter verilerine sahip cihaz bulunamadı", - "detail_title": "Cihaz Envanteri Detayı", - "telemetry": "Telemetry", - "view_detail": "Detayı Görüntüle", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Yeni paket", + "name": "Ad", + "included_minutes": "Dahil edilen dakikalar", + "overage_rate": "Aşım ücreti / s", + "currency": "Para birimi", + "heading": "Destek paketleri", + "prompt_name": "Paket adı", + "create_title": "Kuruluş için yeni paket", + "create_submit": "Paket oluştur", + "select_org": "Kuruluş", + "select_org_placeholder": "Kuruluş seçin…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Destek biletleri ve sorun takibi", - "create": "New Ticket", - "edit": "Bileti Düzenle", - "delete": "Bileti Sil", - "detail": "Bilet Detayı", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Atanan Kişi", - "created_by": "Oluşturan", - "device": "Cihaz", - "sla_due": "SLA Due", - "created_at": "Oluşturuldu", - "updated_at": "Güncellendi", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Açık", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Bir yorum yazın...", - "internal_note": "Dahili not (son kullanıcılar tarafından görülemez)", - "attachments": "Attachments", - "upload_attachment": "Eki Yükle", - "download": "Download", - "connect_device": "Cihaza Bağlan", - "no_tickets": "Bilet bulunamadı", - "no_comments": "Henüz yorum yok", - "no_attachments": "Ek yok", - "title_required": "Başlık gerekli", - "delete_confirm": "#{id} biletini silmek istediğinizden emin misiniz?", - "delete_success": "Bilet başarıyla silindi", - "created_success": "Bilet başarıyla oluşturuldu", - "updated_success": "Bilet başarıyla güncellendi", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Bilet ara...", - "assign_to_me": "Bana ata", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Açık", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Etkinlik İzleme", - "subtitle": "Uygulama kullanımı ve boşta izleme", - "device": "Cihaz", - "hostname": "Hostname", - "sessions": "Oturumlar", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "En İyi Uygulamalar", - "app_name": "Application", - "window_title": "Pencere Başlığı", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Oturum Sayısı", - "total_active": "Toplam Aktif", - "total_idle": "Total Idle", - "detail_count": "Detay Kayıtları", - "no_data": "Etkinlik verisi yok", - "no_sessions": "Oturum yok", - "filter_from": "Gönderen", - "filter_to": "Kime", - "filter_apply": "Filtreyi uygula", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Cihazları ara...", - "date_range": "Date Range", - "device_id": "Cihaz Kimliği", - "session_start": "Oturum Başlangıcı", - "session_end": "Oturum Sonu", - "user": "User", - "no_activity": "Etkinlik kaydedilmedi", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Başvuru yok" - }, - "automation": { - "title": "Otomasyon ve Uyarılar", - "subtitle": "Uyarı kuralları, uzak komutlar ve SMTP yapılandırması", - "rules": "Alert Rules", - "rules_subtitle": "Bildirimleri tetikleyen koşulları tanımlayın", - "alerts": "Uyarı Geçmişi", - "alerts_subtitle": "Tetiklenen uyarıları görüntüleyin ve onaylayın", - "commands": "Uzaktan Komutlar", - "commands_subtitle": "Uzak cihazlara komut gönderme", - "smtp": "SMTP Yapılandırması", - "smtp_subtitle": "E-posta bildirim ayarları", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Koşul Türü", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Hedef Cihaz", - "scope_all": "Tüm Cihazlar", - "cooldown": "Bekleme süresi (saniye)", - "notify_emails": "Bildirim E-postaları", - "enabled": "Etkin", - "disabled": "Devre dışı", - "create_rule": "Kural Oluştur", - "edit_rule": "Kuralı Düzenle", - "delete_rule": "Kuralı Sil", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Tetiklenme Tarihi", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Şundan büyük:", - "op_gte": "Büyük veya eşit", - "op_lt": "Less than", - "op_lte": "Daha az veya eşit", - "op_eq": "Eşittir", - "op_neq": "Eşit değil", - "type_cpu_usage": "CPU Kullanımı (%)", - "type_memory_usage": "Bellek Kullanımı (%)", - "type_disk_usage": "Disk Kullanımı (%)", - "type_offline_duration": "Çevrimdışı Süre (ler)", - "type_idle_duration": "Boşta Kalma Süresi (ler)", - "type_custom": "Custom", - "command_type": "Komut Türü", - "command_payload": "Komut / Komut Dosyası", - "command_result": "Result", - "command_status": "Status", - "send_command": "Komut Gönder", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Başarısız", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Kullanıcı adı", - "smtp_pass": "Şifre", - "smtp_from": "Adresten", - "smtp_test": "Bağlantıyı Test Et", - "smtp_save": "Yapılandırmayı Kaydet", - "smtp_test_success": "Bağlantı başarılı", - "smtp_test_failed": "Bağlantı başarısız oldu", - "no_rules": "Hiçbir uyarı kuralı yapılandırılmadı", - "no_alerts": "Hiçbir uyarı tetiklenmedi", - "no_commands": "Hiçbir komut gönderilmedi", - "id_payload_required": "Cihaz kimliği ve yük gerekli", - "no_commands_sent": "Henüz herhangi bir komut gönderilmedi" - }, - "file_transfer": { - "title": "Dosya Aktarımı", - "transfers": "Transfers", - "new_transfer": "Yeni Transfer", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Dosya Boyutu", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Cihaz", - "initiated_by": "Başlatan", - "created_at": "Oluşturulma Tarihi", - "cancel": "İptal", - "cancel_confirm": "Bu aktarımı iptal etmek istediğinizden emin misiniz?", - "download_file": "Dosyayı İndir", - "browse_files": "Dosyalara Göz Atın", - "select_file": "Dosya Seç", - "select_device": "Cihaz Seç", - "no_transfers": "Dosya aktarımı yok", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Başarısız", - "status_cancelled": "Cancelled", - "bytes_transferred": "Aktarılan Bayt Sayısı", - "chunks": "Chunks", - "transfer_started": "Aktarım başladı", - "transfer_completed": "Aktarım tamamlandı", - "transfer_failed": "Aktarım başarısız oldu", - "transfer_cancelled": "Aktarım iptal edildi", - "max_file_size": "Maksimum dosya boyutu: 4 GB", - "error_too_large": "Dosya çok büyük", - "error_no_device": "Hiçbir cihaz seçilmedi", - "error_no_file": "Hiçbir dosya seçilmedi" - }, - "network": { - "title": "Ağ İzleme", - "targets": "Hedeflerin İzlenmesi", - "add_target": "Add Target", - "edit_target": "Hedefi Düzenle", - "delete_target": "Hedefi Sil", - "delete_confirm": "Bu hedefi silmek istediğinizden emin misiniz?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Zaman aşımı (ms)", - "interval": "Aralık (ms)", - "enabled": "Etkin", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Geçmişi Kontrol Et", - "stats": "Statistics", - "total_targets": "Toplam Hedefler", - "targets_up": "Targets Up", - "targets_down": "Hedefler Aşağı", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Ağ Araçları", - "ping_tool": "Ping Test", - "tcp_tool": "TCP Bağlantı Noktası Kontrolü", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Monitörü Başlat", - "monitor_stop": "Monitörü Durdur", - "monitor_running": "Monitör çalışıyor", - "monitor_stopped": "Monitör durduruldu", - "no_targets": "Yapılandırılmış izleme hedefi yok", - "no_history": "Kontrol geçmişi yok", - "error_code": "Error", - "status_code": "HTTP Durum Kodu", - "search_targets": "Hedefleri ara...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Geçmişi Kontrol Et", - "name_host_required": "Ad ve barındırıcı gerekli", - "uptime": "Uptime", - "response_time": "Tepki Süresi", - "avg_response": "Ortalama Yanıt", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Tepki Süresi (ms)", - "uptime_percent": "Uptime %", - "last_24h": "Son 24 saat", - "last_7d": "Last 7 days", - "last_30d": "Son 30 gün" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "DLP Politikaları", - "add_policy": "Politika Ekle", - "edit_policy": "Politikayı Düzenle", - "delete_policy": "Politikayı Sil", - "delete_confirm": "Bu politikayı silmek istediğinizden emin misiniz?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Etkin", - "disabled": "Devre dışı", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "USB Cihazı", - "rule_type_file": "Dosya İşlemi", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Satıcı Kimliği (VID)", - "pid": "Ürün Kimliği (PID)", - "serial": "Seri Numarası", - "device_class": "Cihaz Sınıfı", - "drive_type": "Drive Type", - "file_extensions": "Dosya Uzantıları", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Dosya", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Hiçbir DLP politikası yapılandırılmadı", - "no_events": "Hiçbir DLP etkinliği kaydedilmedi", - "stats": "Statistics", - "total_events": "Toplam Olaylar", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Dosya Olayları", - "device_id": "Cihaz Kimliği", - "policy_matched": "Politika Eşleşti", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Toplam Politikalar", - "active_policies": "Aktif Politikalar", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Politikalar", - "tab_events": "Events", - "search_policies": "Arama politikaları...", - "create_policy": "Politika Oluştur", - "policy_type": "Politika Türü", - "scope": "Scope", - "events_count": "Events", - "search_events": "Etkinlikleri ara...", - "event_time": "Event Time", - "device": "Cihaz", - "policy": "Politika", - "detail": "Detail", - "scope_help": "Virgülle ayrılmış cihaz kimlikleri veya tümü için boş bırakın", - "scope_all": "Tüm Cihazlar", - "active": "Active", - "type_file_type": "Dosya Türü", - "type_clipboard": "Pano", - "type_screen_share": "Ekran Paylaşımı", - "type_file_transfer": "Dosya Aktarımı", - "policy_desc": "Politika Açıklaması", - "type_usb": "USB" + "sessions": { + "device": "Cihaz", + "operator": "Operatör", + "duration": "Süre", + "phase": "Aşama", + "amount": "Tutar" }, "reports": { - "title": "Reports", - "generate": "Rapor Oluştur", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Cihaz Özeti", - "type_activity": "Etkinlik Özeti", - "type_security": "Güvenlik Raporu", - "type_tickets": "Bilet Raporu", - "type_network": "Ağ Raporu", - "type_inventory": "Envanter Raporu", - "type_alerts": "Uyarı Raporu", - "saved": "Kaydedilen Raporlar", - "save_report": "Raporu Kaydet", - "delete_report": "Raporu Sil", - "delete_confirm": "Kaydedilen bu raporu silmek istediğinizden emin misiniz?", - "no_saved": "Kayıtlı rapor yok", - "report_title": "Title", - "created_by": "Oluşturan", - "created_at": "Oluşturulma Tarihi", - "filters": "Filters", - "date_from": "Gönderen", - "date_to": "Kime", - "device_filter": "Cihaz Kimliği", - "generated_at": "Oluşturulma Tarihi", - "section": "Veri Bölümü", - "total_devices": "Toplam Cihazlar", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Platform Dağıtımı", - "top_applications": "En İyi Uygulamalar", - "total_active": "Toplam Aktif Süre", - "total_idle": "Toplam Boşta Kalma Süresi", - "dlp_stats": "DLP İstatistikleri", - "banned_devices": "Yasaklı Cihazlar", - "audit_logs": "Audit Logs", - "ticket_stats": "Bilet İstatistikleri", - "category_distribution": "Kategori Dağılımı", - "priority_distribution": "Öncelik Dağılımı", - "targets_status": "Hedef Durumu", - "os_distribution": "İşletim Sistemi Dağıtımı", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Son Uyarılar", - "tab_generate": "Rapor Oluştur", - "tab_saved": "Kaydedilen Raporlar", - "type_devices_desc": "Tüm cihazlara, platformlara ve durumlara genel bakış", - "type_activity_desc": "Uygulama kullanımı ve boşta kalma süresi özeti", - "type_security_desc": "Eylemleri, DLP etkinliklerini ve denetim günlüklerini yasaklayın", - "type_tickets_desc": "Bilet istatistikleri ve SLA performansı", - "type_network_desc": "Ağ izleme hedefleri ve çalışma süresi verileri", - "type_inventory_desc": "Donanım ve yazılım envanter özeti", - "type_alerts_desc": "Uyarı kuralları ve tetiklenen uyarı geçmişi", - "report_name": "Report Name", - "format": "Format", - "save": "Raporu Kaydet", - "preview": "Preview", - "download": "Download", - "delete_saved": "Raporu Sil", - "raw_json": "Raw JSON" + "session": "Oturum", + "summary": "Özet", + "date": "Tarih" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Kiracıyı Düzenle", - "delete_tenant": "Kiracıyı Sil", - "delete_confirm": "Bu kiracıyı silmek istediğinizden emin misiniz? Tüm cihaz ve kullanıcı atamaları kaldırılacak.", - "name": "Name", - "slug": "Slug", - "contact_name": "Kişi Adı", - "contact_email": "İletişim E-postası", - "max_devices": "Maksimum Cihaz Sayısı", - "max_devices_hint": "0 = sınırsız", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Cihazlar", - "users": "Users", - "assign_device": "Cihaz Ata", - "assign_devices": "Cihazları Ata", - "remove_device": "Cihazı Kaldır", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Hiçbir kiracı yapılandırılmadı", - "no_devices": "Bu kiracıya atanan cihaz yok", - "no_users": "Bu kiracıya atanan kullanıcı yok", - "stats": "Kiracı İstatistikleri", - "total_devices": "Toplam Cihazlar", - "online_devices": "Çevrimiçi Cihazlar", - "total_users": "Total Users", - "created_at": "Oluşturulma Tarihi", - "updated_at": "Güncelleme Tarihi:", - "slug_exists": "Kiracı bildirimi zaten mevcut", - "total_tenants": "Toplam Kiracı", - "active_tenants": "Aktif Kiracılar", - "search": "Kiracıları arayın...", - "create_tenant": "Kiracı Oluştur", - "detail": "Kiracı Detayı", - "contact": "Contact", - "enabled": "Etkin", - "disabled": "Devre dışı", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Kuruluş sözleşmeleri", + "new": "Paket ata", + "org": "Kuruluş", + "package": "Paket", + "remaining": "Kalan dakika", + "status": "Durum", + "actions": "İşlemler", + "suspend": "Askıya al", + "activate": "Etkinleştir", + "select_org": "Kuruluş seçin", + "select_package": "Paket seçin", + "no_orgs": "Kuruluş bulunamadı", + "no_packages": "Önce bir paket oluşturun" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Cihaz kimliğine, ana bilgisayar adına veya IP'ye göre arayın...", - "no_registrations": "No registration requests", - "col_device_id": "Cihaz Kimliği", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "Bu cihazı onaylamak istediğinizden emin misiniz? Sunucu kimlik bilgilerini alacak ve otomatik olarak bağlanabilecektir.", - "approved_success": "Cihaz kaydı başarıyla onaylandı", - "reject_btn": "Reject", - "reject_title": "Kaydı Reddet", - "reject_confirm": "Bu kayıt isteğini reddetmek istediğinizden emin misiniz?", - "reject_reason": "Sebep (isteğe bağlı)", - "reject_reason_placeholder": "Reddedilme nedenini girin...", - "rejected_success": "Cihaz kaydı reddedildi", - "delete_confirm": "Bu kayıt kaydını silmek istediğinizden emin misiniz?", - "deleted_success": "Kayıt kaydı silindi", - "enrollment_title": "Cihaz Kaydı", - "enrollment_subtitle": "BetterDesk masaüstü istemcilerinden beklemedeki kayıt istekleri", - "enrollment_empty": "Bekleyen kayıt isteği yok", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Görünen Ad", - "enrollment_display_name_placeholder": "Bu cihaz için bir ad girin...", - "enrollment_sync_mode": "Senkronizasyon Modu", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Cihaz kaydı onaylandı", - "enrollment_rejected_success": "Cihaz kaydı reddedildi", - "approve_title": "Cihazı Onayla", - "field_name": "Cihaz adı", - "field_name_placeholder": "Bu cihaz için bir ad girin...", - "field_sync_mode": "Eşitleme modu", - "sync_standard": "Standart — dengeli eşitleme", - "sync_silent": "Sessiz — minimum telemetri", - "sync_turbo": "Turbo — agresif eşitleme", - "field_tags": "Etiketler", - "field_tags_placeholder": "Virgülle ayrılmış etiketler (örn. ofis, dizüstü)...", - "field_tags_existing": "Mevcut etiketler", - "field_tag_add_placeholder": "Yeni etiket ekle...", - "field_tag_add_btn": "Ekle", - "field_groups": "Cihaz grupları", - "field_folder": "Klasör", - "field_folder_none": "Klasör yok", - "reject_ban_option": "Bu cihazı yasakla", - "reject_ban_hint": "Cihaz engellenir ve yeni kayıt isteği gönderemez.", - "banner_open_mode": "Kayıt açık — yeni RustDesk istemcileri operatör onayı olmadan kaydoluyor. Bu kuyruğu kullanmak için Ayarlar'da Yönetilen mod'u ayarlayın.", - "banner_locked_mode": "Kayıt kilitli — yalnızca belirteçe bağlı cihazlar kaydolabilir. Bilinmeyen istemciler için operatör onayı amacıyla Yönetilen mod gereklidir.", - "enrollment_settings_link": "Kayıt ayarları" + "export": { + "csv": "CSV dışa aktar", + "pdf": "PDF dışa aktar", + "sessions_csv": "Oturumları CSV dışa aktar" }, - "backup": { - "title": "Backup", - "desc": "Konsol yapılandırmanızın, kullanıcılarınızın, gruplarınızın ve ayarlarınızın tam yedeğini indirin. Go server eş verileri, BetterDesk arka ucu etkin olduğunda dahil edilir.", - "restore_title": "Restore", - "restore_desc": "Konsol yapılandırmasını geri yüklemek için önceden indirilmiş bir yedekleme dosyasını yükleyin. Aşağıdan hangi bölümlerin geri yükleneceğini seçin.", - "stat_users": "Users", - "stat_settings": "Ayarlar", - "stat_folders": "Folders", - "stat_groups": "Gruplar", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "Yedeklemeyi İndir", - "creating": "Yedek oluşturuluyor...", - "download_success": "Yedekleme başarıyla indirildi", - "upload": "Yedeklemeyi Yükle", - "restore_confirm": "Bu yedeklemeden geri yüklemek istediğinizden emin misiniz? Seçilen bölümlerin üzerine yazılacaktır.", - "restore_success": "Yedekleme başarıyla geri yüklendi. Bazı değişiklikler sayfanın yeniden yüklenmesini gerektirebilir.", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "Konsol ayarları", - "opt_branding": "Markalama / Tema", - "opt_folders": "Cihaz klasörleri", - "opt_groups": "Kullanıcı ve cihaz grupları", - "opt_addressbooks": "Adres defterleri", - "opt_users": "Kullanıcı hesapları", - "opt_users_warning": "Yıkıcı: TÜM kullanıcı hesaplarını yedek verilerle değiştirir. Çıkış yapmış olabilirsiniz.", - "no_file": "Yedekleme dosyası seçilmedi", - "invalid_json": "Geçersiz yedekleme dosyası: geçerli değil JSON", - "invalid_format": "Geçersiz yedekleme dosyası: BetterDesk yedeği değil", - "stat_database": "Veritabanı motoru", - "stat_keys": "Sunucu anahtarları dahil", - "stat_env": "Ortam dosyası", - "stat_uploads": "Marka dosyaları", - "restart_required": "Bazı geri yüklenen bileşenler (anahtarlar / .env / Go veritabanı) geçerli olması için servis yeniden başlatması gerektirir.", - "security_warning": "Bu yedek gizli bilgiler içerir (sunucu anahtarları, ortam dosyası, şifre özetleri ve 2FA sırları). Güvenli saklayın ve asla paylaşmayın.", - "restore_warning": "Sırları, ortam dosyasını veya Go sunucu veritabanını geri yüklemek sunucu kimliğinin üzerine yazar ve ardından servis yeniden başlatması gerektirir.", - "opt_database": "Veritabanı (tüm tablolar)", - "opt_database_hint": "Tüm konsol verilerini yeniden içe aktarır. Canlı uygulanır, yeniden başlatma gerekmez.", - "opt_uploads": "Marka dosyaları", - "opt_uploads_hint": "Logo ve yüklenen görseller.", - "opt_secrets": "Sunucu anahtarları ve sırlar", - "opt_secrets_warning": "Ed25519 sunucu kimliğinin, API anahtarının ve oturum sırrının üzerine yazar. Servis yeniden başlatması gerektirir.", - "opt_env": "Ortam dosyası (.env)", - "opt_env_warning": "SESSION_SECRET, API anahtarı, veritabanı DSN, portlar ve TLS ayarlarının üzerine yazar. Servis yeniden başlatması gerektirir.", - "opt_godb": "Go sunucu veritabanı", - "opt_godb_warning": "Go sunucu SQLite veritabanının üzerine yazar (yalnızca SQLite arka uç). Servis yeniden başlatması gerektirir." + "report": { + "title": "İş raporu", + "subtitle": "Bu uzaktan oturum sırasında yapılan işi açıklayın.", + "category": "Kategori", + "ticket_ref": "Bilet referansı", + "summary": "Yapılan iş", + "skip": "Şimdilik atla", + "submit": "Rapor gönder", + "summary_required": "Özet gerekli", + "saved": "İş raporu kaydedildi" }, - "cdap": { - "device_detail": "CDAP Cihazı", - "loading": "Yükleniyor...", - "loading_widgets": "Cihaz widget'ları yükleniyor...", - "load_error": "Cihaz verileri yüklenemedi", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "Cihaz şu anda çevrimdışı. Widget değerleri eski olabilir.", - "no_widgets": "Kullanılabilir widget yok", - "no_widgets_desc": "Bu cihaz, widget tanımlarını içeren bir CDAP bildirimini kaydetmedi.", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "Komutu Onayla", - "select_option": "Seç", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "Komut Gönder", - "command_sent": "Komut başarıyla gönderildi", - "command_failed": "Komut gönderilemedi", - "devices_title": "CDAP Cihazlar", - "devices_subtitle": "Özel Cihaz Uygulama Protokolü aracılığıyla bağlı cihazlar", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "Cihazları ara...", - "no_devices": "Bağlı cihaz yok", - "no_devices_desc": "Şu anda hiçbir CDAP cihazı bağlı değil. Cihazlar ağ geçidine bağlandıklarında burada görünecekler.", - "gateway_disabled": "CDAP Ağ Geçidi Devre Dışı", - "gateway_disabled_desc": "Sunucu yapılandırmasında CDAP_ENABLED=true ayarını yaparak CDAP ağ geçidini etkinleştirin.", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "CDAP'yi devre dışı bırakın", - "enabled_restart": "CDAP etkinleştirildi. Değişikliklerin uygulanması için sunucunun yeniden başlatılması gerekiyor.", - "disabled_restart": "CDAP devre dışı. Değişikliklerin uygulanması için sunucunun yeniden başlatılması gerekiyor.", - "widgets": "widget'lar", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "Aktif Uyarılar", - "alert_fired": "Alert fired", - "alert_cleared": "Uyarı temizlendi", - "no_alerts": "Etkin uyarı yok", - "connect_terminal": "Terminali Bağla", - "table_search": "Ara...", - "just_now": "Just now", - "terminal_connecting": "Cihaza bağlanılıyor...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Terminal bağlantısı başarısız oldu", - "linked_devices": "Bağlı Cihazlar", - "link_device": "Cihazı Bağla", - "unlink_device": "Unlink", - "no_linked_devices": "Bağlı cihaz yok", - "unlink_confirm": "Bu cihazın bağlantısını kaldırmak istediğinizden emin misiniz?", - "link_prompt": "Bu cihaza bağlanmak için Eş Kimliğini girin:", - "connect_desktop": "Masaüstünü Bağla", - "connect_video": "Akışı Bağla", - "connect_files": "Dosyalara Göz Atın", - "connect_audio": "Sesi Bağla", - "upload_file": "Upload", - "desktop_connecting": "Bağlanıyor...", - "video_connecting": "Bağlanıyor...", - "files_connecting": "Bağlanıyor...", - "audio_connecting": "Bağlanıyor...", - "audio_streaming": "Streaming", - "clipboard_in": "Pano alındı", - "clipboard_out": "Pano gönderildi", - "monitor_select": "Monitörü Seçin", - "keyframe_request": "Ana Kare İste", - "quality_auto": "Otomatik Kalite" + "empty": { + "packages": "Henüz paket yok. Yukarıdaki düğmeyle oluşturun.", + "contracts": "Henüz kuruluş sözleşmesi yok. Bir kuruluşa paket atayın.", + "sessions": "Henüz faturalandırılabilir oturum kaydedilmedi.", + "reports": "Henüz iş raporu gönderilmedi." }, - "desktop": { - "switch_mode": "Masaüstü Modu", - "console_mode": "Konsol Modu", - "loading": "Yükleniyor...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Kapat", - "widgets_mode": "Widget'lar", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Widget Ekle", - "remove_widget": "Widget'ı Kaldır", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Yapılandır", - "search_widgets": "Widget'ları arayın...", - "cat_monitoring": "Monitoring", - "cat_devices": "Cihazlar", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Notlarınızı buraya yazın...", - "search_placeholder": "Cihazlarda, sayfalarda, ayarlarda arama yapın...", - "search_pages": "Pages", - "search_devices": "Cihazlar", - "search_no_results": "No results", - "exit_desktop": "Masaüstü Modundan Çık", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Cihaz Durumu", - "widget_server_health": "Sunucu Bilgileri", - "widget_system_stats": "Cihaz Göstergeleri", - "widget_device_list": "Cihaz Listesi", - "widget_quick_actions": "Hızlı Eylemler", - "widget_recent_activity": "Son Etkinlik", - "widget_notes": "Notes", - "widget_network_monitor": "Ağ Monitörü", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP Cihazlar", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Cihaz Izgarası", - "widget_multi_gauge": "Sunucu Göstergeleri", - "widget_weekly_chart": "Haftalık Etkinlik", - "widget_quick_controls": "Hızlı Kontroller", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Bağlantı İstatistikleri", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Kullanıcı Oturumları", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Cihaz yok", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Açık", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Yapılandırmada URL'yi ayarlayın", - "label_server_uptime": "Sunucu Çalışma Süresi", - "label_merged_info": "Sunucu Bilgileri widget'ıyla birleştirildi", - "label_with_notes": "Notlarla", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Toplam Cihazlar", - "label_throughput": "Throughput", - "label_active_relays": "Aktif Röleler", - "label_total_relayed": "Toplam Aktarılan", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Cihazları filtrele...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "CDAP cihazı yok", - "action_add_widget": "Widget Ekle", - "label_merged_server_info": "Sunucu Bilgileri widget'ıyla birleştirildi", - "wp_images": "Images", - "wp_colors": "Katı Renkler", - "wp_custom_color": "Özel renk", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Duvar kağıdı resimleri bu sunucuda yüklü değil.", - "wp_download_hint": "Duvar kağıdı seçimini etkinleştirmek için PNG resimlerini public/wallpapers/ dizinine yerleştirin.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Süreç Monitörü", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Veritabanı İstatistikleri", - "widget_docker_containers": "Docker Konteynerler", - "widget_shell_command": "Kabuk Komutanlığı", - "widget_device_map": "Cihaz Haritası", - "widget_remote_connect": "Uzaktan Bağlantı", - "label_no_online": "Çevrimiçi cihaz yok", - "label_no_events": "Bugün etkinlik yok", - "label_event_title": "Etkinlik başlığı:", - "label_no_data": "Veri yok", - "label_download_speed": "İndirme Hızı", - "label_latency": "Latency", - "label_server": "Sunucu", - "label_run_test": "Run Test", - "label_testing": "Test ediliyor...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Kapsayıcı yok", - "label_docker_unavailable": "Docker mevcut değil", - "label_no_command": "Hiçbir komut yapılandırılmadı", - "label_no_output": "Henüz çıktı yok", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Ön Ayarı Kaydet", - "label_load_preset": "Load Preset", - "label_preset_name": "Ön ayar adı:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Otomatik Düzenleme", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 Sütun (Eşit)", - "label_2col_wide": "2 Sütun (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Widget Grubu", - "ungroup_widgets": "Widget'ların Grubunu Çöz", - "group_widgets": "Seçilen Widget'ları Gruplandır", - "snap_layouts": "Yapış Düzenleri", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Sol Üste Yasla", - "snap_top_right": "Sağ Üste Yasla", - "snap_bottom_left": "Sol Alttan Yasla", - "snap_bottom_right": "Sağ Alttan Yapış", - "aero_shake": "Diğerlerini En Aza İndirmek İçin Sallayın", - "zone_resize": "Bölgeleri yeniden boyutlandırmak için kenarlığı sürükleyin", - "zone_borders": "Sürüklenebilir Bölge Sınırları", - "app_drawer": "Applications", - "search_apps": "Uygulamaları ara...", - "edit_shortcuts": "Kısayolları düzenle", - "widgets": "Widget'lar", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Mevcut paketi ata", + "submit": "Ata" }, - "desktop_login": { - "click_to_sign_in": "Oturum açmak için herhangi bir yeri tıklayın veya bir tuşa basın", - "username_placeholder": "Kullanıcı adı", - "password_placeholder": "Şifre", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "İki Faktörlü Kimlik Doğrulama", - "totp_subtitle": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", - "back_to_login": "Girişe geri dön", - "fill_all_fields": "Lütfen tüm alanları doldurun", - "invalid_credentials": "Geçersiz kullanıcı adı veya şifre", - "invalid_code": "Geçersiz doğrulama kodu", - "enter_6_digits": "6 rakamın tamamını girin", - "network_error": "Network error — check your connection", - "session_expired": "Oturumun süresi doldu. Lütfen tekrar oturum açın." - }, - "tokens": { - "title": "Cihaz Jetonları", - "subtitle": "Otomatik cihaz temel hazırlığı için kayıt jetonlarını yönetin", - "enrollment_mode": "Kayıt Modu", - "mode_open": "Açık", - "mode_open_desc": "Herhangi bir cihaz jeton olmadan kaydolabilir", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Toplam Jetonlar", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Jetonları ara...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Toplu Oluştur", - "create": "Jeton Oluştur", - "edit": "Jetonu Düzenle", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Oluşturuldu", - "actions": "Actions", - "name_placeholder": "örneğin Ofis bilgisayarı toplu", - "max_uses": "Max Uses", - "max_uses_hint": "0 = sınırsız", - "expires_in": "Expires In", - "no_expiration": "Son kullanma tarihi yok", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Bu belirteçle ilgili isteğe bağlı not...", - "count": "Count", - "count_range": "Oluşturulacak jeton sayısı (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Jeton Oluşturuldu", - "tokens_generated": "Oluşturulan Tokenlar", - "copy_warning": "Belirteci şimdi kopyalayın. Bir daha gösterilmeyecek.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Bu jetonu iptal etmek istediğinizden emin misiniz? Halihazırda kayıtlı olan cihazlar etkilenmeyecektir.", - "revoked_success": "Jeton başarıyla iptal edildi", - "no_tokens": "Jeton bulunamadı", - "expired": "Expired", - "never": "Never", - "save": "Kaydet", - "cancel": "İptal", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Sonraki", - "prev": "Previous", - "skip": "Skip", - "finish": "Bitiş", - "close": "Kapat", - "step_of": "{total}'nin {current}'si", - "console_sidebar_title": "Gezinme Kenar Çubuğu", - "console_sidebar_text": "Tüm modüllere buradan erişin. Bu bölüme gitmek için herhangi bir simgeye tıklayın. Kenar çubuğu ekran boyutunuza uyum sağlar.", - "console_expand_title": "Kenar Çubuğunu Genişlet", - "console_expand_text": "Kenar çubuğunu genişletmek ve tüm gezinme öğelerinin tam etiketlerini görmek için burayı tıklayın. Daraltmak için tekrar tıklayın.", - "console_search_title": "Hızlı Arama", - "console_search_text": "Cihazları, ayarları veya eylemleri hızlı bir şekilde arayın. Klavye kısayolu için Ctrl+K tuşlarına basın.", - "console_dashboard_title": "Kontrol Paneli", - "console_dashboard_text": "Sunucu durumunu, çevrimiçi cihazları ve hızlı eylemleri gösteren merkezi merkeziniz. Bir bakışta önemli metriklere göz atın.", - "console_devices_title": "Cihaz Yönetimi", - "console_devices_text": "Bağlı tüm cihazları görüntüleyin, arayın ve yönetin. Duruma göre filtreleyin, etiket atayın ve bireysel cihaz ayarlarını yapılandırın.", - "console_settings_title": "Ayarlar", - "console_settings_text": "Sunucu davranışını, güvenlik seçeneklerini, markalamayı ve kullanıcı yönetimini yapılandırın. İhtiyaçlarınıza uyacak şekilde BetterDesk'yi özelleştirin.", - "console_desktop_title": "Masaüstü Modu", - "console_desktop_text": "Widget'lar içeren pencereli bir çalışma alanı için masaüstü moduna geçin. Çoklu görev ve kontrol panellerini izlemek için mükemmeldir.", - "console_complete_title": "Hazırsın!", - "console_complete_text": "Tüm özellikleri keşfetmek için kenar çubuğu kategorilerini keşfedin. Bu kılavuzu yeniden başlatmak için istediğiniz zaman Yardım simgesini tıklayın.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Üstteki çubuk saati, hızlı kontrolleri ve uygulama çekmecesine erişimi gösterir. Tüm uygulamalara göz atmak için ızgara simgesini tıklayın.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Herhangi bir konsol işlevini kayan pencere olarak aramak ve başlatmak için uygulama çekmecesini açın. Uygulamalar kategoriye göre düzenlenir.", - "desktop_widgets_title": "Widget Kontrol Paneli", - "desktop_widgets_text": "Kişiselleştirilebilir çalışma alanınız. Widget'lar canlı bilgileri görüntüler ve özelliklere hızlı erişim sağlar. Yeniden düzenlemek için sürükleyin.", - "desktop_add_widget_title": "Widget Ekle", - "desktop_add_widget_text": "Mevcut widget'lara göz atmak için burayı tıklayın. İzleme ekranları, cihaz listeleri, notlar ve daha fazlası arasından seçim yapın.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Açık uygulamalar burada görünür. Pencereleri odaklamak veya simge durumuna küçültmek için tıklayın. Uygulama etiketlerini görmek için simgelerin üzerine gelin.", - "desktop_snap_title": "Yapış Düzenleri", - "desktop_snap_text": "Pencereleri konumlarına oturtmak için ekran kenarlarına sürükleyin veya düzen ön ayarları için ekranı kapla düğmesinin üzerine gelin. Aero Shake'ı deneyin!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Uygulamalar sürüklenebilir, yeniden boyutlandırılabilir pencerelerde açılır. Başlık çubuğundan simge durumuna küçültün, büyütün veya kapatın. Widget'ların üzerindeki Windows katmanı.", - "desktop_search_title": "Hızlı Arama", - "desktop_search_text": "Cihazlar, sayfalar ve ayarlar arasında arama yapın. Aramayı anında açmak için herhangi bir yerde Ctrl+K tuşlarına basın.", - "desktop_complete_title": "Masaüstü Modu Hazır!", - "desktop_complete_text": "Uygulamaları çekmeceden açmayı ve pencereleri yan yana yerleştirmeyi deneyin. Hızlı kontrol paneli düzenleri için widget ön ayarlarını kullanın.", - "devices_folders_title": "Cihaz Klasörleri", - "devices_folders_text": "Cihazları klasörler halinde düzenleyin. Listeyi filtrelemek için bir klasörü tıklayın. Yeniden adlandırmak veya silmek için sağ tıklayın.", - "devices_search_title": "Ara ve Filtrele", - "devices_search_text": "Kimliğe, ana makine adına veya platforma göre arama yapın. Yalnızca çevrimiçi, çevrimdışı veya tüm cihazları göstermek için durum kutularını kullanın.", - "devices_table_title": "Cihaz Listesi", - "devices_table_text": "Ayrıntılar için herhangi bir cihaz satırını tıklayın. Bağlanma, etiketleri düzenleme veya silme gibi hızlı işlemler için sağdaki kebap menüsünü kullanın.", - "devices_complete_title": "Cihaz Yönetimi Hazır!", - "devices_complete_text": "Cihazları düzenlemek için klasörler arasında sürükleyin. Ayrıntı panelini açmak için bir aygıta çift tıklayın.", - "settings_tabs_title": "Ayarlar Kategorileri", - "settings_tabs_text": "Genel, Güvenlik, Görünüm ve diğer yapılandırma bölümleri arasında gezinin.", - "settings_content_title": "Yapılandırma", - "settings_content_text": "Her bölüm belirli sunucu ve konsol ayarlarını içerir. Kaydet'e tıkladığınızda değişiklikler kaydedilir.", - "settings_complete_title": "Ayarlara Genel Bakış", - "settings_complete_text": "2FA, API anahtarları ve kullanıcı yönetimi için Güvenlik ayarlarını kontrol edin. Konsol görünümünü özelleştirmek için Görünüm'ü ziyaret edin.", - "help": "Yardım ve Öğreticiler", - "tour_console": "Konsol Turu", - "tour_desktop": "Masaüstü Modu Turu", - "tour_devices": "Cihaz Turu", - "tour_settings": "Ayarlar Turu", - "reset_all": "Tüm Eğiticileri Sıfırla", - "tour_remote": "Uzaktan Oturum Turu", - "tour_organization": "Organizasyon Kurulumu", - "tour_cdap": "CDAP Genel Bakış", - "tour_chat": "Sohbetin Temelleri", - "remote_toolbar_title": "Uzak Araç Çubuğu", - "remote_toolbar_text": "Araç çubuğundan ekran kontrollerine, pano senkronizasyonuna, özel tuşlara ve kalite ayarlarına erişin. F11 ile tam ekrana geçin.", - "remote_canvas_title": "Uzak Ekran", - "remote_canvas_text": "Bu uzak ekran. Uzak cihazı kontrol etmeye başlamak için içeriye tıklayın. Fare ve klavye girişi otomatik olarak iletilir.", - "remote_clipboard_title": "Pano Senkronizasyonu", - "remote_clipboard_text": "Bilgisayarınız ile uzaktaki aygıt arasında metni kopyalayıp yapıştırın. Uzak ekrana odaklanırken normal şekilde Ctrl+C / Ctrl+V tuşlarını kullanın.", - "remote_complete_title": "Uzaktan Oturuma Hazır!", - "remote_complete_text": "Özel tuşlar (Ctrl+Alt+Del, PrintScreen) ve monitör geçi��i için araç çubuğu düğmelerini kullanın. Oturumu sonlandırmak için Escape tuşuna basın veya Bağlantıyı Kes'e tıklayın.", - "org_overview_title": "Organizasyonlar", - "org_overview_text": "Kuruluşlar kullanıcıları, cihazları ve politikaları gruplandırmanıza olanak tanır. Her kuruluşun kendi yöneticisi, operatörleri ve ayarları vardır.", - "org_create_title": "Organizasyon Oluştur", - "org_create_text": "Yeni bir organizasyon oluşturmak için burayı tıklayın. Bir ad, bilgi ve isteğe bağlı bir açıklama girin. Yeni organizasyonun sahibi siz olacaksınız.", - "org_members_title": "Üyeleri Yönet", - "org_members_text": "Kullanıcıları e-postayla davet edin, roller atayın (yönetici, operatör, kullanıcı) ve erişimi yönetin. Üyeler, kuruluşlarına atanan cihazları görebilir.", - "org_devices_title": "Cihazları Ata", - "org_devices_text": "Kuruluşa cihazlar ekleyin. Buraya atanan cihazlar kuruluşun politikalarını devralacak ve üyeleri tarafından görülebilecektir.", - "org_policies_title": "Organizasyon Politikaları", - "org_policies_text": "Kuruluş için şifre gereksinimleri, oturum zaman aşımları, 2FA uygulaması ve cihaz kayıt kuralları gibi güvenlik politikalarını ayarlayın.", - "org_complete_title": "Organizasyon Kurulumu Tamamlandı!", - "org_complete_text": "Kuruluş kapsamlı yönetimi kullanmaya başlamak için ekibinizi davet edin ve cihazları atayın. Politikalar tüm üyelere otomatik olarak uygulanır.", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "Kişiler ve Gruplar", - "chat_contacts_text": "Kişilerinizi ve sohbet gruplarınızı görün. Bir görüşme açmak için herhangi bir kişiye tıklayın. Yeşil noktalar çevrimiçi kullanıcıları gösterir.", - "chat_send_title": "Mesaj Gönder", - "chat_send_text": "Mesajınızı yazın ve göndermek için Enter tuşuna basın. Her iki taraf da E2E'yi desteklediğinde mesajlar uçtan uca şifrelenir.", - "chat_file_title": "Dosyaları Paylaş", - "chat_file_text": "Dosyaları paylaşmak için ek simgesini tıklayın. Dosyalar şifrelidir ve boyutu 50 MB'a kadar olabilir.", - "chat_complete_title": "Sohbete Hazır!", - "chat_complete_text": "Operatörler ve son kullanıcılarla gerçek zamanlı sohbet edin. Ekip iletişimi için gruplar oluşturun. Tüm iletiler okundu bilgilerini destekler.", - "disable_tutorials": "Öğreticileri Devre Dışı Bırak", - "enable_tutorials": "Eğiticileri Etkinleştir" - }, - "help_request": { - "title": "Yardım İstekleri", - "subtitle": "Masaüstü istemcilerden gelen yardım isteklerini yönetin", - "new_request": "Yeni Yardım Talebi", - "device": "Cihaz", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Yardım talebi yok", - "notification": "Yardım isteği alındı", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Organizasyonlar", - "create": "Organizasyon Oluştur", - "edit": "Kuruluşu Düzenle", - "detail": "Organizasyon Detayları", - "name": "Name", - "slug": "Sümüklü böcek (URL-güvenli)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Cihazlar", - "invitations": "Invitations", - "settings": "Ayarlar", - "add_user": "Add User", - "assign_device": "Cihaz Ata", - "create_invitation": "Davetiye Oluştur", - "delete_confirm": "Bu kuruluş silinsin mi? Bu, ilişkili tüm kullanıcıları, cihazları ve ayarları kaldıracaktır.", - "no_orgs": "Henüz organizasyon yok", - "no_orgs_hint": "Cihazları ve kullanıcıları yönetmeye başlamak için ilk kuruluşunuzu oluşturun.", - "connection_policy": "Bağlantı Politikası", - "allow_file_transfer": "Dosya Aktarımına İzin Ver", - "allow_clipboard": "Panoya İzin Ver", - "max_session_duration": "Maksimum Oturum Süresi (dk)", - "role_owner": "Owner", - "role_admin": "Yönetici", - "role_operator": "Operator", - "role_user": "Üye", - "username": "Kullanıcı adı", - "password": "Şifre", - "display_name": "Görünen Ad", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "Cihaz Kimliği", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Atanan Kullanıcı", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Bu kuruluşta kullanıcı yok.", - "no_devices": "Bu kuruluşa atanan cihaz yok.", - "no_invitations": "Davetiye yok.", - "user_added": "User added", - "user_removed": "Kullanıcı kaldırıldı", - "user_updated": "Kullanıcı rolü güncellendi", - "device_assigned": "Cihaz atandı", - "device_unassigned": "Cihazın ataması kaldırıldı", - "invitation_created": "Davetiye oluşturuldu", - "settings_saved": "Ayarlar kaydedildi", - "org_deleted": "Kuruluş silindi", - "confirm_remove_user": "Bu kullanıcı kuruluştan kaldırılsın mı?", - "confirm_unassign_device": "Bu cihazın kuruluştaki ataması kaldırılsın mı?", - "confirm_delete_org": "Bu kuruluş ve ilişkili tüm veriler silinsin mi?", - "edit_role": "Rolü Düzenle", - "raw_settings": "Ham Ayarlar", - "key": "Key", - "value": "Value", - "save": "Ayarları Kaydet", - "policy_unattended": "Katılımsız (anlık)", - "policy_attended": "Katıldık (Onay ile)", - "policy_ask": "Always ask", - "expires_hours": "Son kullanma tarihi (saat)", - "loading_failed": "Kuruluş verileri yüklenemedi", - "name_slug_required": "İsim ve bilgi gerekli", - "org_created": "Kuruluş oluşturuldu", - "org_updated": "Kuruluş güncellendi", - "create_new_user": "Yeni Oluştur", - "add_existing_user": "Mevcut Ekle", - "none_available": "none", - "select_user": "Kullanıcı seç", - "org_role": "Organizasyon Rolü", - "link_user_hint": "Seçilen kullanıcı, sunucu hesabı kimlik bilgilerini kullanarak bu kuruluşa bağlanacak.", - "no_available_users": "Tüm sunucu kullanıcıları zaten bu kuruluşa bağlı.", - "user_linked": "Kullanıcı kuruluşa bağlı" - }, - "chat": { - "e2e_enabled": "Uçtan uca şifrelenmiş", - "e2e_establishing": "Güvenli kanal oluşturuluyor...", - "e2e_established": "Güvenli kanal kuruldu", - "e2e_unsupported": "E2E şifrelemesi bu tarayıcıda desteklenmiyor", - "typing_indicator": "yazarak...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Dosya", - "file_too_large": "Dosya çok büyük (maks. 50MB)", - "file_encrypted": "Şifreli dosya aktarımı", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Güvenlik anahtarları döndürüldü", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Gruplar", - "no_contacts": "Henüz kişi yok", - "no_groups": "Henüz grup yok", - "no_messages": "Henüz mesaj yok", - "no_results": "Sonuç bulunamadı", - "select_conversation": "Sohbete başlamak için bir sohbet seçin", - "type_message": "Bir mesaj yazın...", - "send": "Gönder", - "attach_file": "Dosya ekle", - "emoji": "Emoji", - "search_messages": "Mesajlarda ara", - "create_group": "Grup oluştur", - "group_name": "Grup adı", - "group_members": "Üyeler", - "cancel": "İptal", - "create": "Oluştur", - "members": "üyeler", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Kişileri ve mesajları arayın", - "select_conversation_hint": "Mesajları görüntülemek için bir görüşme seçin", - "info": "Info", - "group_name_placeholder": "Grup adını girin" - }, - "toast": { - "device_connected": "Cihaz bağlandı", - "device_disconnected": "Cihazın bağlantısı kesildi", - "session_started": "Uzak oturum başlatıldı", - "session_ended": "Uzak oturum sona erdi", - "file_upload_complete": "Dosya yükleme tamamlandı", - "settings_saved": "Ayarlar kaydedildi", - "error_generic": "Bir hata oluştu", - "connection_lost": "Bağlantı kesildi", - "reconnecting": "Yeniden bağlanılıyor..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Yönetici yardımcı programları ve tanılama araçları", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Gönder", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Metni girin...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Sunucuya Git", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Ana makinenin erişilebilirliğini ve gecikmesini kontrol edin", - "tcp_title": "TCP Bağlantı Noktası Kontrolü", - "tcp_desc": "TCP bağlantı noktası bağlantısını test edin", - "ssl_title": "SSL Denetleyicisi", - "ssl_desc": "SSL/TLS sertifika ayrıntılarını inceleyin", - "http_title": "HTTP Durum Kontrolü", - "http_desc": "HTTP uç nokta durumunu doğrulayın", - "dns_title": "DNS Lookup", - "dns_desc": "Ana bilgisayar adını IP adresine çözümle", - "whois_title": "DNS Records", - "whois_desc": "A, AAAA, MX, TXT, NS kayıtlarını sorgulayın", - "speed_title": "Speed Test", - "speed_desc": "İndirme bant genişliğini ölçün", - "run_speed_test": "Hız Testini Çalıştır", - "wol_title": "Wake-on-LAN", - "wol_desc": "Bir cihazı uyandırmak için sihirli paket gönder", - "wol_sent": "Sihirli paket gönderildi", - "hash_title": "Karma Oluşturucu", - "hash_desc": "Kriptografik karmalar oluştur", - "password_title": "Şifre Oluşturucu", - "password_desc": "Güvenli, rastgele bir şifre oluşturun", - "jwt_title": "JWT Decoder", - "jwt_desc": "JSON Web Tokenlarının kodunu çözün ve inceleyin", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Base64 verilerini kodlayın veya kodunu çözün", - "url_title": "URL Encoder", - "url_desc": "URL bileşenlerini kodlama veya kodunu çözme", - "processes_title": "Süreç Listesi", - "processes_desc": "Çalışan sistem işlemlerini görüntüleyin", - "disk_title": "Disk Usage", - "disk_desc": "Disk bölümü kullanımını görüntüle", - "db_title": "Veritabanı İstatistikleri", - "db_desc": "Veritabanı tablosu istatistiklerini görüntüle", - "docker_title": "Docker Konteynerler", - "docker_desc": "Çalışan Docker kapsayıcılarını görüntüleyin", - "logs_title": "Log Viewer", - "logs_desc": "Son günlük çıktısını görüntüle", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Geçerlilik Tarihi", - "valid_to": "Geçerlilik Tarihi", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Veri yok", - "no_docker": "Docker kapsayıcısı bulunamadı veya Docker mevcut değil", - "no_logs": "Günlük satırı yok" - }, - "policies": { - "title": "Organizasyon Politikaları", - "subtitle": "Kuruluşlarınız için güvenlik, bağlantı ve özellik politikalarını yönetin", - "select_org": "Organizasyon", - "select_org_placeholder": "Bir kuruluş seçin...", - "select_org_first": "Politika denetim günlüğünü görüntülemek için bir kuruluş seçin.", - "configured": "Configured", - "connection_title": "Bağlantı Politikası", - "connection_desc": "Uzak oturumların nasıl kurulduğunu kontrol edin", - "connection_mode": "Bağlantı Modu", - "mode_attended": "Katıldınız (kullanıcı onayı gerektirir)", - "mode_unattended": "Katılımsız (her zaman izin ver)", - "mode_ask": "Always Ask", - "max_session": "Maksimum Oturum Süresi (dakika)", - "idle_lock": "Boşta Kilitleme Zaman Aşımı (dakika)", - "wallpaper_policy": "Oturum Sırasında Duvar Kağıdı", - "wallpaper_show": "Show", - "wallpaper_hide_session": "Oturum sırasında gizle", - "wallpaper_hide_always": "Always hide", - "features_title": "Özellik Politikası", - "features_desc": "Cihazlar için belirli özellikleri etkinleştirme veya devre dışı bırakma", - "allow_file_transfer": "Dosya Aktarımına İzin Ver", - "allow_clipboard": "Pano Senkronizasyonuna İzin Ver", - "allow_audio": "Ses Akışına İzin Ver", - "allow_recording": "Oturum Kaydına İzin Ver", - "security_title": "Güvenlik Politikası", - "security_desc": "Kuruluş cihazları için güvenlik gereksinimlerini zorunlu kılın", - "require_2fa": "Katılımsız Erişim için 2FA'yı zorunlu kılın", - "password_min_length": "Minimum Şifre Uzunluğu", - "password_require_special": "Özel Karakterler Gerektirir", - "password_max_age": "Şifre Maksimum Süresi (gün, 0=hiçbir zaman)", - "allowed_operators": "İzin Verilen Operatör Rolleri (virgülle ayrılmış)", - "network_title": "Ağ Politikası", - "network_desc": "Aktarma sunucularını ve doğrudan bağlantıları kontrol edin", - "block_direct_p2p": "Doğrudan P2P'yi Engelle (kuvvet rölesi)", - "allowed_relays": "İzin Verilen Aktarma Sunucuları (satır başına bir tane)", - "ip_allowlist": "IP İzin Verilenler Listesi (CIDR, her satıra bir tane)", - "update_title": "Politikayı Güncelle", - "update_desc": "Otomatik güncellemeleri kontrol edin ve kanalları güncelleyin", - "auto_update": "Otomatik Güncellemeyi Etkinleştir", - "update_channel": "Kanalı Güncelle", - "audit_title": "Politika Değişiklikleri", - "audit_desc": "Son politika değişikliği geçmişi", - "no_audit": "Hiçbir politika değişikliği kaydedilmedi.", - "save_success": "Politika başarıyla kaydedildi", - "save_failed": "Politika kaydedilemedi", - "load_failed": "Politikalar yüklenemedi", - "block_direct_p2p_hint": "Bu kuruluştaki cihazlar için geçerlidir. Genel varsayılan Ayarlar → Bağlantı stratejisi altındadır." - }, - "attestation": { - "title": "Cihaz Onayı", - "subtitle": "Cihaz kimlik doğrulamasını ve donanım parmak izlerini izleyin", - "verified": "Verified", - "pending": "Pending", - "failed": "Başarısız", - "device_list": "Cihaz Onay Kayıtları", - "device_list_desc": "Donanım parmak izleri ve kimlik doğrulama durumu", - "col_device": "Cihaz Kimliği", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Onay kaydı bulunamadı.", - "verify_success": "Cihaz doğrulandı olarak işaretlendi", - "verify_failed": "Cihaz doğrulanamadı", - "revoke_success": "Cihaz onayı iptal edildi", - "revoke_failed": "Onay iptal edilemedi" - }, - "fleet": { - "title": "Filo Yönetimi", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "İş Akışı Oluşturucu", - "tab_compliance": "Compliance", - "res_title": "Kaynak Haritalama", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Ağ Sürücüsü", - "res_type_dns": "DNS Sunucusu", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Kaynak Ekle", - "res_name": "Kaynak Adı", - "res_type": "Type", - "res_address": "Adres / Yol", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Organizasyon", - "res_scope_group": "Grup", - "res_scope_device": "Cihaz", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Kaynak bulunamadı. Bir tane oluşturmak için 'Kaynak Ekle'yi tıklayın.", - "res_confirm_delete": "Bu kaynağı silmek istediğinizden emin misiniz?", - "task_title": "Görev Zamanlayıcı", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Başarısız", - "task_search": "Search tasks…", - "task_create": "Görev Oluştur", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "Güncelleme", - "task_type_restart": "Yeniden başlat", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Virgülle ayrılmış cihaz kimlikleri veya grup adları", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Zamanlama Değeri", - "task_script": "Komut Dosyası / Komut", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Hiçbir görev bulunamadı. Başlamak için 'Görev Oluştur'u tıklayın.", - "task_confirm_delete": "Bu görevi silmek istediğinizden emin misiniz?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Görsel İş Akışı Oluşturucu", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Kaydet", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Özelliklerini düzenlemek için bir düğüm seçin.", - "builder_node_trigger_manual": "Manuel Tetikleyici", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Olay Tetikleyici", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Svc'yi yeniden ba��latın", - "builder_node_action_file_deploy": "Dosyayı Dağıt", - "builder_node_action_message": "Mesaj Gönder", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Uyarı Gönder", - "builder_node_result_chain": "Zincir İş Akışı", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "İş akışı adı:", - "comp_title": "Yazılım Uyumluluğu", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Cihaz", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Bu cihazda otomatik düzeltme çalıştırılsın mı?", - "comp_no_data": "Uyumluluk verisi mevcut değil. Başlamak için bir tarama çalıştırın.", - "save": "Kaydet", - "cancel": "İptal", - "close": "Kapat", - "edit": "Düzenle", - "delete": "Sil", - "actions": "Actions", - "all_orgs": "Tüm Organizasyonlar", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Ağ Sürücüsü", - "type_dns": "DNS Sunucusu", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Kaynak Ekle", - "edit_resource": "Kaynağı Düzenle", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Adres / Yol", - "scope_org": "Organizasyon", - "scope_group": "Grup", - "scope_device": "Cihaz", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Bu öğeyi silmek istediğinizden emin misiniz?", - "all_statuses": "Tüm Durumlar", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Başarısız", - "search_tasks": "Search tasks�", - "create_task": "Görev Oluştur", - "edit_task": "Görevi Düzenle", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Dosya Dağıtımı", - "task_type_registry": "Registry", - "target_devices": "Hedef Cihazlar", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Komut Dosyası / Komut", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Yükleniyor", - "no_output": "Çıkış mevcut değil", - "error_loading": "Veriler yüklenirken hata oluştu", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Manuel Tetikleyici", - "node_schedule": "Schedule", - "node_event": "Olay Tetikleyici", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Svc'yi yeniden ba��latın", - "node_file_deploy": "Dosyayı Dağıt", - "node_send_message": "Mesaj Gönder", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Uyarı Gönder", - "node_chain": "Zincir İş Akışı", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Tüm Organizasyonlar", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Cihaz", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Bu cihazda otomatik düzeltme çalıştırılsın mı?" - }, - "scaling": { - "title": "Ölçeklendirme ve Aktarma Yönetimi", - "tab_overview": "Genel Bakış", - "tab_relays": "Relay Nodes", - "tab_rules": "Atama Kuralları", - "tab_capacity": "Kapasite Planlama", - "arch_title": "Ağ Mimarisi", - "arch_loading": "Mimari diyagramı yükleniyor...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Toplam Cihazlar", - "stat_active_sessions": "Aktif Oturumlar", - "stat_bandwidth": "Toplam Bant Genişliği", - "relay_health": "Röle Sağlığı", - "no_relays": "Hiçbir geçiş düğümü yapılandırılmadı. Yükü dağıtmak için ilk aktarma düğümünüzü ekleyin.", - "relay_search": "Röleleri ara...", - "relay_add": "Aktarma Düğümü Ekle", - "relay_edit": "Röle Düğümünü Düzenle", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Cihazlar", - "col_sessions": "Oturumlar", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Hedef Rölesi", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Etkin", - "status_disabled": "Devre dışı", - "confirm_delete_relay": "Bu geçiş düğümünü silmek istediğinizden emin misiniz?", - "confirm_delete_rule": "Bu atama kuralını silmek istediğinizden emin misiniz?", - "rules_hint": "Atama kuralları, belirli cihaz gruplarını hangi aktarma sunucusunun işleyeceğini belirler. Kurallar önceliğe göre değerlendirilir (önce en düşük).", - "rule_add": "Add Rule", - "rule_edit": "Kuralı Düzenle", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Cihaz Grubu", - "match_tag": "Cihaz Etiketi", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Ana Sunucu", - "fallback_nearest": "En Yakın Aktarma", - "relay_max_sessions": "Maksimum Oturum", - "relay_max_bandwidth": "Maksimum Bant Genişliği (Mbps)", - "cap_tiers": "Kapasite Katmanları", - "cap_loading": "Kapasite verileri yükleniyor...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Hiçbir öneri mevcut değil.", - "cap_planning": "Altyapı Planlama", - "cap_config": "Yapılandırma", - "cap_max_devices": "Maksimum Cihaz Sayısı", - "cap_max_sessions": "Maksimum Oturum", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Cihaz Kapasitesi", - "cap_tier_sessions": "Oturum Kapasitesi", - "cap_tier_bandwidth": "Bant Genişliği Kapasitesi", - "cap_single_sqlite": "Tek Sunucu (SQLite)", - "cap_single_pg": "Tek Sunucu (PostgreSQL)", - "cap_master_3": "Master + 3 Röle", - "cap_master_10": "Master + 10 Röle", - "rec_no_relays": "Hiçbir geçiş düğümü yapılandırılmadı. Daha iyi performans ve yedeklilik için geçiş düğümleri eklemeyi düşünün.", - "rec_devices_high": "Cihaz kullanımı yüksektir. Yükü dağıtmak için daha fazla aktarma düğümü eklemeyi düşünün.", - "rec_sessions_high": "Oturum kapasitesi sınırına yaklaşıyor. Aktarma altyapısını yükseltmeyi düşünün.", - "rec_cpu_high": "Bazı geçiş düğümleri yüksek CPU kullanımı bildiriyor. Yük dengelemeyi veya kapasite yükseltmelerini düşünün.", - "rec_all_good": "Tüm sistemler normal parametreler dahilinde çalışmaktadır. Herhangi bir işlem yapılmasına gerek yoktur.", - "save": "Kaydet", - "cancel": "İptal", - "edit": "Düzenle", - "delete": "Sil", - "close": "Kapat", - "no_rules": "Atama kuralı yok.", - "relays_info_banner": "Bu liste bilgilendirme amaçlıdır. İstemciler tarafından fiilen kullanılan aktarma sunucuları, BetterDesk sunucusundaki RELAY_SERVERS ortam değişkeni aracılığıyla yapılandırılır.", - "relay_name_address_required": "İsim ve adres gereklidir.", - "relay_save_failed": "Aktarma düğümü kaydedilemedi.", - "relay_delete_failed": "Aktarma düğümü silinemedi.", - "relay_saved": "Aktarma düğümü kaydedildi.", - "relay_deleted": "Röle düğümü silindi.", - "rule_name_value_required": "Kural adı ve eşleşme değeri gerekli.", - "rule_save_failed": "Kural kaydedilemedi.", - "rule_delete_failed": "Kural silinemedi.", - "rule_saved": "Kural kaydedildi.", - "rule_deleted": "Kural silindi." - }, - "cross_platform": { - "title": "Platformlar Arası Uyumluluk", - "tab_matrix": "Uyumluluk Matrisi", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "Desteklenen tüm platformlarda özellik destek matrisi. Yeşil = tam destek, sarı = kısmi, gri = mevcut değil, mavi = planlanmış.", - "col_feature": "Feature", - "legend_full": "Tam destek", - "legend_partial": "Kısmi destek", - "legend_none": "Mevcut değil", - "legend_planned": "Planned", - "platform_breakdown": "Platform Dağılımı", - "arch_breakdown": "Mimari Dağılımı", - "version_breakdown": "Sürüm Dağılımı", - "summary": "Summary", - "total_devices": "Toplam Cihazlar", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "İstemci Sürümleri", - "no_devices": "Henüz kayıtlı cihaz yok.", - "protocols_hint": "Protokol yeteneği anlaşması, her istemcinin yalnızca desteklediği özellikleri almasını sağlar. Sunucu, bildirilen yeteneklere göre davranışı uyarlar.", - "capability_negotiation": "Yetenek Müzakereleri", - "codec_support": "Codec Desteği (Çevrimiçi Cihazlar)", - "feature_support": "Özellik Desteği (Çevrimiçi Cihazlar)", - "no_codec_data": "Çevrimiçi cihazlarda codec verileri mevcut değil.", - "no_feature_data": "Çevrimiçi cihazlarda özellik verisi yok.", - "protobuf_schema": "İstemci Yetenekleri Protobuf Şeması", - "diagram_client": "Client", - "diagram_server": "BetterDesk Sunucusu", - "diagram_peer": "Uzak Eş", - "limitations_hint": "Her platformun mevcut özellikleri etkileyen belirli sınırlamaları vardır. Dağıtımları planlarken bu kısıtlamaları gözden geçirin.", - "feat_desktop_client": "Masaüstü İstemcisi", - "feat_background_agent": "Arka Plan Aracısı", - "feat_remote_target": "Uzak Hedef", - "feat_screen_capture": "Ekran Yakalama", - "feat_input_injection": "Giriş Enjeksiyonu", - "feat_file_transfer": "Dosya Aktarımı", - "feat_clipboard_sync": "Pano Senkronizasyonu", - "feat_audio_streaming": "Ses Akışı", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "Güvenli masaüstü bilgisayarlara hizmet kurulumu ve giriş enjeksiyonu için UAC yükseltmesi gerekir.", - "limit_win_service": "NSSM hizmeti olarak çalışır; kurulum için Yönetici ayrıcalıkları gerektirir.", - "limit_win_firewall": "Windows Güvenlik duvarı kuralları, geçiş bağlantıları için 21115-21119 bağlantı noktalarına izin vermelidir.", - "limit_linux_wayland": "Wayland dizgicileri programatik ekran yakalamayı kısıtlıyor; PipeWire portalı API gereklidir.", - "limit_linux_pipewire": "Ses yakalama PipeWire gerektirir; PulseAudio geri dönüşü mevcut ancak sınırlıdır.", - "limit_linux_arm": "ARM64 yapıları mevcut; bazı codec bileşenleri yazılım kod çözmeyi kullanabilir (daha yavaş).", - "limit_mac_screen": "Sistem Tercihleri > Gizlilik ve Güvenlik bölümünde Ekran Kaydı izni gereklidir.", - "limit_mac_signing": "Temsilcinin dağıtım için Apple Developer ID ile imzalanması gerekir.", - "limit_mac_notarize": "macOS Gatekeeper (App Store dışı dağıtım) için noter onayı gereklidir.", - "limit_android_projection": "MediaProjection API, her ekran yakalama oturumu için kullanıcının onayını gerektirir.", - "limit_android_accessibility": "Giriş ekleme, Erişilebilirlik Hizmeti gerektirir; Android 14+ sürümlerinde kısıtlanmıştır.", - "limit_android_battery": "Arka plan hizmeti Doze moduyla sınırlıdır; pil optimizasyonundan muafiyet gerektirebilir.", - "limit_ios_capture": "Apple, arka planda ekran yakalamayı yasaklar; yalnızca izleyici modu desteklenir.", - "limit_ios_input": "Giriş enjeksiyonuna izin verilmez; yalnızca uzaktan görüntüleme ve sohbet.", - "limit_ios_appstore": "Yalnızca App Store aracılığıyla dağıtım; Beta testi için TestFlight.", - "limit_web_https": "WebCodecs API ve WebRTC, HTTPS gerektirir; HTTP, JMuxer'a (sınırlı codec bileşenleri) geri döner.", - "limit_web_codec": "Codec desteği tarayıcıya bağlıdır; H.264 geniş çapta desteklenir, VP9/AV1 değişiklik gösterir.", - "limit_web_performance": "Performans, tarayıcı sanal alanıyla sınırlıdır; doğrudan donanım hızlandırması yok.", - "limit_chrome_crostini": "Yalnızca Crostini Linux kapsayıcısının içinde tam aracı desteği.", - "limit_chrome_pwa": "PWA modu yalnızca web özellikleri sağlar; yerel aracı özelliği yok.", - "limit_chrome_input": "Giriş enjeksiyonu Crostini kapsayıcısının dışında desteklenmez.", - "feat_session_recording": "Oturum Kaydı", - "feat_multi_monitor": "Çoklu Monitör", - "feat_unattended_access": "Gözetimsiz Erişim", - "limit_win_virtual_account": "Servisler LocalSystem yerine izole sanal hesaplar altında çalışır; özel günlük yolları ACL ayarlaması gerektirebilir.", - "limit_linux_unprivileged": "Servisler, systemd sertleştirmesi (NoNewPrivileges, ProtectSystem=strict) ile özel ayrıcalıksız 'betterdesk' hesabı olarak çalışır." - }, - "security_audit": { - "title": "Güvenlik Denetimi", - "tab_overview": "Genel Bakış", - "tab_events": "Denetim Etkinlikleri", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Güvenlik Puanı", - "failed_logins": "Başarısız Girişler (24 saat)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Eski Tuşlar (>90d)", - "security_checks": "Güvenlik Kontrolleri", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Güvenli", - "enabled": "Etkin", - "disabled": "Devre dışı", - "all_events": "All Events", - "event_login_failed": "Giriş Başarısız Oldu", - "event_login_success": "Giriş Başarılı", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Yapılandırma Değiştirildi", - "event_key_created": "Anahtar Oluşturuldu", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Hiçbir denetim etkinliği bulunamadı.", - "hardening_hint": "BetterDesk dağıtımınız için güvenliği güçlendirme öncelikleri. Öğeler önem derecesine göre sıralanır.", - "no_hardening": "Sertleştirici öğe mevcut değil.", - "vuln_hint": "Bağımlılık güvenlik açığı taraması sonuçları. Bağımlılıkları güvende tutmak için npm denetimini düzenli olarak çalıştırın.", - "no_vulns": "Hiçbir güvenlik açığı bulunamadı. Bağımlılıklarınız güvende." - }, - "languages": { - "title": "Dil Yönetimi", - "total_languages": "Toplam Diller", - "fully_translated": "Tamamen Çevrilmiş", - "needs_review": "İncelenmesi Gerekiyor", - "reference_keys": "Referans Anahtarları", - "no_languages": "Dil dosyası bulunamadı.", - "badge_reference": "Reference", - "badge_review": "İncelenmesi Gerekiyor", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Eksikleri Görüntüle", - "fix_missing": "Fix Missing", - "missing_keys_for": "için eksik anahtarlar", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "ve {n} daha fazlası...", - "all_keys_present": "Tüm anahtarlar mevcut!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code} içindeki eksik anahtarlar elle çevrilmelidir.", - "no_fix_needed": "Düzeltilecek eksik anahtar yok." - }, - "resource_control": { - "title": "Kaynak Kontrolü", - "tab_overview": "Genel Bakış", - "tab_usb": "USB Control", - "tab_optical": "Optik Sürücüler", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Kaynak Kotaları", - "compliance_by_category": "Kategoriye Göre Uyumluluk", - "device_compliance": "Cihaz Uyumluluğu", - "search_devices": "Cihazları ara...", - "col_device": "Cihaz", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Toplam Cihazlar", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Uyumluluk Oranı", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Yapılandır", - "no_devices": "Hiçbir cihaz bulunamadı", - "usb_title": "USB Bağlantı Noktası Kontrolü", - "usb_hint": "Seçilen cihaz veya kuruluş çapında varsayılan politika için USB depolama cihazı erişimini kontrol edin.", - "usb_storage_policy": "USB Depolama Politikası", - "usb_whitelist": "Beyaz Listeye Eklenen Cihazlar (satır başına bir tane)", - "usb_whitelist_hint": "VID:PID (ör. 0781:5583)", - "usb_audit_log": "USB cihaz bağlantılarını günlüğe kaydedin", - "optical_title": "Optik Sürücü Kontrolü", - "optical_hint": "Seçilen aygıt için CD/DVD/Blu-ray sürücü erişimini kontrol edin.", - "optical_policy": "Optik Sürücü Politikası", - "optical_audit_log": "Optik sürücü erişimini günlüğe kaydet", - "monitors_title": "Monitör Yönetimi", - "monitors_hint": "Maksimum sayım, çözünürlük uygulaması, parlaklık ve güç programları dahil olmak üzere monitör ayarlarını yapılandırın.", - "monitors_max_count": "Maksimum Monitör (0 = sınırsız)", - "monitors_max_hint": "0 limit yok demektir", - "monitors_resolution": "Maksimum Çözünürlük", - "monitors_brightness": "Parlaklık Sınırı", - "monitors_power_schedule": "Güç Programı", - "monitors_power_hint": "örneğin kapalı:22:00-06:00", - "disks_title": "Disk Erişim Kontrolü", - "disks_hint": "Salt okunur mod, şifreleme uygulaması ve bölüm görünürlüğü dahil olmak üzere disk erişim ilkelerini yapılandırın.", - "disks_readonly": "Salt okunur modu zorla", - "disks_encryption": "Şifreleme gerektir (BitLocker/LUKS)", - "disks_smart": "S.M.A.R.T.'yi etkinleştirin izleme", - "disks_hidden": "Gizli Bölümler", - "disks_hidden_hint": "Virgülle ayrılmış sürücü harfleri veya bağlama noktaları", - "quotas_title": "Kaynak Kotaları", - "quotas_hint": "Seçilen cihaz için kullanıcı başına CPU, RAM, bant genişliği ve disk kotalarını ayarlayın.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Bant Genişliği Sınırı (Mbps)", - "quotas_bandwidth_hint": "0 = sınırsız", - "quotas_disk_quota": "Disk Kotası (GB)", - "quotas_disk_hint": "0 = sınırsız", - "quotas_process_whitelist": "İşlem Beyaz Listesi (satır başına bir tane)", - "quotas_process_hint": "örneğin chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Yalnızca Beyaz Liste", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Yazılım Güncellemeleri", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Yüklü sürüm", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Güncellemeleri kontrol edin", - "checking": "Checking…", - "up_to_date": "güncel", - "update_available": "Güncelleme mevcut", - "changelog": "Release Notes", - "no_changelog": "Sürüm notu mevcut değil", - "files_changed": "Dosyalar değiştirildi", - "files": "dosyalar", - "changes_unavailable": "Dosya değişiklik listesi yüklenemedi. Güncellemeyi yine de yükleyebilirsiniz.", - "create_backup": "Güncellemeden önce yedekleme oluşturun", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Güncelleme yükleniyor…", - "creating_backup": "Yedek oluşturuluyor…", - "downloading": "Dosyalar indiriliyor…", - "install_success": "Güncelleme başarıyla yüklendi. Konsol yeniden başlatılıyor…", - "install_failed": "Güncelleme yüklemesi başarısız oldu", - "restarting": "Konsolun yeniden başlatılması bekleniyor…", - "restart_complete": "Konsol başarıyla yeniden başlatıldı", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Güncelleme sürümü seçilmedi. Önce güncellemeleri kontrol edin.", - "backups_title": "Yedeklemeleri Güncelle", - "backups_desc": "Her güncellemeden önce otomatik olarak oluşturulan güncelleme öncesi yedeklemeler", - "no_backups": "Güncelleme yedeği bulunamadı", - "restore": "Restore", - "restore_confirm": "Bu yedeklemeden geri yüklemek istediğinizden emin misiniz? Değiştirilen dosyaların üzerine yazılacaktır.", - "restore_success": "Yedekleme başarıyla geri yüklendi. Konsol yeniden başlatılıyor…", - "baseline_set": "Temel ayar", - "commits_behind": "arkasında taahhüt eder", - "total_files": "Toplam dosyalar", - "applied": "Applied", - "failed": "Başarısız", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Sunucuya Git", - "component_agent": "Agent", - "component_scripts": "Komut Dosyaları ve Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Git kontrol ediliyor…", - "go_not_found": "Yüklü değil git", - "go_check_failed": "Go'nun kullanılabilirliği kontrol edilemedi", - "server_building": "Go server derleniyor... Bu işlem birkaç dakika sürebilir.", - "server_built": "Sunucu ikili dosyası derlendi", - "server_build_failed": "Sunucu derlemesi başarısız oldu", - "server_deployed": "Sunucu ikili programı dağıtıldı", - "server_deploy_failed": "Sunucu dağıtımı başarısız oldu", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Sunucu kaynağı indiriliyor…", - "delete": "Sil", - "delete_confirm": "{name} yedeklemesi kalıcı olarak silinsin mi? Bu geri alınamaz.", - "delete_success": "Yedekleme silindi", - "delete_failed": "Yedekleme silinemedi", - "retention_label": "En yeni N yedeği sakla", - "retention_hint": "Her güncellemeden sonra eski yedeklemeler otomatik olarak silinir. Tüm yedeklemeleri saklamak için 0'ı kullanın.", - "retention_saved": "Saklama ayarı kaydedildi", - "retention_invalid": "Saklama 0 ile 1000 arasında bir tam sayı olmalıdır", - "retention_required_for_prune": "Önce 0'dan büyük bir saklama değeri ayarlayın", - "prune_now": "Apply now", - "prune_confirm": "Yalnızca {n}'nin en son yedeklemeleri tutulup geri kalanı silinsin mi?", - "prune_done": "{n} yedekleri budandı", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Güncelleme yöntemi", - "strategy_download": "Önceden oluşturulmuş ikili programı indirin", - "strategy_compile": "Kaynaktan derle", - "both_available": "İndir ve Derle", - "download_available": "İndirilebilir", - "no_method": "Güncelleme yöntemi yok", - "no_release": "No release", - "available": "Mevcut", - "server_downloading": "Sunucu ikili programı indiriliyor…", - "server_downloaded": "Sunucu ikili dosyası indirildi", - "server_download_failed": "Sunucu ikili indirme işlemi başarısız oldu", - "server_download_note": "GitHub Sürümlerinden önceden oluşturulmuş bir ikili dosya indirilecektir. Bu genellikle bir dakikadan az sürer.", - "install_go_hint": "Derlemeyi etkinleştirmek veya önceden oluşturulmuş ikili dosyalar içeren bir sürüm yayınlamak için https://go.dev/dl/'den Go'yu yükleyin", - "strategy_install_go": "Go'yu otomatik olarak yükle ve derle", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Otomatik yeniden oluşturmaya hazır", - "toolchain_ready": "Alet zinciri kuruldu", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Go toolchain indiriliyor…", - "toolchain_failed": "Go toolchain kurulumu başarısız oldu", - "modal_title": "Güncelleme yükleniyor", - "modal_done_title": "Güncelleme tamamlandı", - "modal_close": "Kapat", - "modal_reload_now": "Konsolu yeniden yükle", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Konsol dosyaları", - "phase_server": "Sunucu aşaması", - "phase_restart": "Yeniden başlat", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Yedekleme atlandı (kullanıcı seçimine göre)", - "server_skipped": "Go server atlandı", - "server_not_selected": "Go server not selected", - "server_processing": "Go server güncellemesi işleniyor…", - "no_restart_needed": "Yeniden başlatmaya gerek yok", - "complete": "Güncelleme uygulandı", - "complete_summary": "Güncelleme başarıyla uygulandı.", - "complete_with_errors": "Güncelleme tamamlandı ancak bazı adımlar başarısız oldu. Aşağıdaki ayrıntılara bakın.", - "modal_done_with_errors_title": "Güncelleme hatalarla tamamlandı", - "console_will_restart": "Konsol işlemi şimdi yeniden başlatılacak…", - "restart_complete_msg": "Konsolun yeniden başlatılması tamamlandı. Yeni sürümü yüklemek için yeniden yükle'yi tıklayın. Sayfa 8 saniye içinde otomatik olarak yeniden yüklenecektir.", - "refresh_recommended": "Statik varlıklar değişti; yeni kullanıcı arayüzünü görmek için sayfayı yeniden yükleyin.", - "confirm_title": "Güncellemeyi uygula", - "confirm_with_backup": "Güncelleme öncesi yedekleme otomatik olarak oluşturulacaktır.", - "confirm_no_backup": "Hiçbir yedekleme oluşturulmayacak (risk size ait olmak üzere devam edin).", - "server_stale_title": "Sunucu ikili programı güncel değil", - "server_stale_desc": "Go server kaynağı güncellendi ancak çalışan ikili dosya yeniden oluşturulmadı. Güvenlik ve kitaplık güncellemelerini uygulamak için şimdi yeniden oluşturun.", - "rebuild_server": "Sunucu ikili dosyasını yeniden oluştur", - "rebuilding_server": "Yeniden inşa ediliyor…", - "rebuild_server_success": "Sunucu ikili programı yeniden oluşturuldu ve yeniden başlatıldı", - "rebuild_server_failed": "Sunucu ikili yeniden oluşturma işlemi başarısız oldu" - }, - "permissions": { - "title": "İzinler", - "subtitle": "Rol tabanlı izinleri ve özel geçersiz kılmaları yönetin", - "info_title": "İzinler nasıl çalışır?", - "info_desc": "Her rolün varsayılan izinleri vardır. Aşağıda geçiş yaparak rol başına ayrı ayrı izinler ekleyebilir veya kaldırabilirsiniz. Özel geçersiz kılmalar vurgulanır ve herhangi bir zamanda varsayılan ayarlara geri döndürülebilir.", - "select_role": "Rol seçin", - "select_role_placeholder": "Bir rol seçin...", - "reset_overrides": "Tüm geçersiz kılmaları sıfırla", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Sunucu düzeyinde", - "custom": "Custom", - "default": "Default", - "revert": "Varsayılana geri dön", - "saved": "İzin güncellendi", - "reverted": "Varsayılana geri döndürüldü", - "all_reverted": "Tüm geçersiz kılmalar geri alındı", - "confirm_reset": "Bu rol için tüm özel geçersiz kılmalar varsayılanlara sıfırlansın mı?", - "empty_title": "Bir rol seçin", - "empty_desc": "İzinlerini görüntülemek ve yönetmek için yukarıdaki açılır menüden bir rol seçin.", - "locked_title": "Super Admin", - "locked_desc": "Süper Yönetici varsayılan olarak tüm izinlere sahiptir ve özelleştirilemez.", - "cat_device": "Cihazlar", - "cat_user": "Users", - "cat_server": "Sunucu", - "cat_org": "Organizasyonlar", - "cat_audit": "Denetim ve İzleme", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Cihazları görüntüle", - "perm_device_connect": "Cihazlara bağlanın", - "perm_device_edit": "Cihazları düzenle", - "perm_device_delete": "Cihazları sil", - "perm_device_ban": "Cihazları yasakla / yasağı kaldır", - "perm_device_change_id": "Cihaz kimliğini değiştir", - "perm_user_view": "Kullanıcıları görüntüle", - "perm_user_create": "Kullanıcı oluştur", - "perm_user_edit": "Kullanıcıları düzenle", - "perm_user_delete": "Kullanıcıları sil", - "perm_server_config": "Sunucu yapılandırması", - "perm_server_keys": "API anahtarlarını yönetin", - "perm_org_create": "Organizasyonlar oluşturun", - "perm_org_edit": "Kuruluşları düzenle", - "perm_org_delete": "Kuruluşları sil", - "perm_org_manage_users": "Kuruluş kullanıcılarını yönetme", - "perm_org_manage_devices": "Organizasyon cihazlarını yönetin", - "perm_audit_view": "Denetim günlüklerini görüntüle", - "perm_metrics_view": "Metrikleri görüntüle", - "perm_blocklist_edit": "Engellenenler listesini düzenle", - "perm_cdap_view": "CDAP cihazlar��nı görüntüleyin", - "perm_cdap_command": "CDAP komutlarını gönder", - "perm_cdap_terminal": "CDAP terminal erişimi", - "perm_cdap_files": "CDAP dosya erişimi", - "perm_enrollment_manage": "Kaydı yönet", - "perm_enrollment_approve": "Kaydı onayla", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Markalamayı düzenle", - "perm_server_attestation": "Sunucu performans onayı" - }, - "notifications": { - "title": "Bildirimler", - "empty": "Yeni bildirim yok", - "mark_all_read": "Tümünü okundu olarak işaretle", - "see_all": "Tüm yardım isteklerini görün", - "help_request": "Yardım isteği", - "just_now": "just now" - }, - "accessibility": { - "title": "Erişilebilirlik", - "subtitle": "Konsolu görme, hareket ve okuma ihtiyaçlarınıza göre ayarlayın.", - "close": "Erişilebilirlik menüsünü kapat", - "profiles": "Hızlı profiller", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Daha büyük metin, güçlü kontrast ve odaklanma.", - "profile_dyslexia": "Okuma konforu", - "profile_dyslexia_hint": "Okunabilir yazı tipi ve daha geniş aralık.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Geçişleri azaltır ve animasyonu duraklatır.", - "profile_color_assist": "Renk desteği", - "profile_color_assist_hint": "Renk filtresi, etiketler ve vurgulanan bağlantılar.", - "reading": "Okuma", - "font_size": "Yazı boyutu", - "line_height": "Satır yüksekliği", - "letter_spacing": "Harf aralığı", - "word_spacing": "Kelime aralığı", - "readable_font": "Okunabilir yazı tipi", - "readable_font_hint": "Geniş, tanıdık harf şekilleri kullanır.", - "dyslexia_spacing": "Disleksi aralığı", - "dyslexia_spacing_hint": "Uzun metinler için ekstra boşluk ekler.", - "visual": "Görsel", - "contrast": "Kontrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Yüksek kontrastlı koyu", - "contrast_high_light": "Yüksek kontrastlı ışık", - "contrast_yellow_black": "Siyah üzerine sarı", - "color_filter": "Renk görme filtresi", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Renk doygunluğu", - "underline_links": "Bağlantıların altını çizin", - "underline_links_hint": "Bağlantıları renge bağlı kalmadan görünür hale getirir.", - "highlight_links": "Eylemleri vurgulayın", - "highlight_links_hint": "Bağlantıları ve düğmeleri ana hatlarıyla belirtir.", - "highlight_headings": "Başlıkları vurgulayın", - "highlight_headings_hint": "Bölüm başlıklarını bir renk çubuğuyla işaretler.", - "hide_media": "Dim media", - "hide_media_hint": "Görüntüleri, videoları ve tuvalleri karartır.", - "interaction": "Etkileşim", - "strong_focus": "Güçlü odaklanma", - "strong_focus_hint": "Büyük bir klavye odak halkasını gösterir.", - "large_cursor": "Büyük imleç", - "large_cursor_hint": "Daha büyük, yüksek kontrastlı bir işaretçi kullanır.", - "reduce_motion": "Hareketi azalt", - "reduce_motion_hint": "Geçişleri kısaltır ve kaydırmayı düzgünleştirir.", - "pause_animations": "Animasyonları duraklat", - "pause_animations_hint": "Döngüsel görsel hareketi durdurur.", - "reading_guide": "Okuma kılavuzu", - "reading_guide_hint": "İşaretçiyi parlak bir çizgiyle takip eder.", - "reading_mask": "Okuma maskesi", - "reading_mask_hint": "İşaretçinin üstündeki ve altındaki içeriği soluklaştırır.", - "preview": "Önizleme", - "preview_title": "Operatör çalışma alanı önizlemesi", - "preview_text": "Bu menüyü kapatmadan önce metnin, bağlantıların, kontrollerin ve durum etiketlerinin rahat okunup okunamayacağını kontrol edin.", - "preview_link": "Cihaz ayrıntıları bağlantısı", - "preview_status": "Online", - "preview_button": "Birincil eylem", - "preview_secondary": "Secondary", - "reset": "Sıfırla", - "done": "Bitti" - }, - "server_mgmt": { - "title": "Sunucu Yönetimi", - "subtitle": "BetterDesk konsol ana bilgisayarı (BETA) için kokpit benzeri kontrol düzlemi.", - "beta_tooltip": "Beta özelliği — aktif geliştirme aşamasındadır.", - "notice_title": "Beta özelliği", - "notice_body": "Bu araçlar, BetterDesk konsol işleminin yaşadığı ana bilgisayarda çalışır. Tüm işlemler denetlenmektedir. Özellik kapsamı gelecek sürümlerde genişletilecektir.", - "tab_overview": "Genel Bakış", - "tab_terminal": "Terminal", - "tab_files": "Dosyalar", - "tab_services": "Hizmetler", - "cpu": "CPU", - "memory": "Bellek", - "load": "Yük ortalaması", - "disks": "Diskler", - "history": "Geçmiş (son 60 örnek)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Çalışma süresi", - "no_disks": "Disk verisi yok", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY mevcut", - "term_connect": "Bağlan", - "term_disconnect": "Bağlantıyı kes", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Bağlantı hatası", - "term_warning": "Komutlar, konsol işleminin sahibi olan kullanıcı olarak çalışır. Yükseltmeyi etkinleştirmek için bir sudoers kuralı ekleyin.", - "term_hint": "İpucu: Sorunu iletmek için \"sudo -i\" yazın (sudoers yapılandırması gerektirir).", - "term_lib_failed": "Terminal kitaplığı yüklenemedi", - "files_up": "Bir seviye yukarı", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Boş dizin", - "files_error": "Dizin listelenemedi", - "read_failed": "Dosya okunamadı", - "save_failed": "Dosya kaydedilemedi", - "rename_failed": "Yeniden adlandırma başarısız oldu", - "delete_failed": "Silinemedi", - "delete_confirm": "Bu giriş silinsin mi?", - "mkdir_prompt": "Yeni klasör adı:", - "mkdir_failed": "Klasör oluşturulamadı", - "file_saved": "Dosya kaydedildi", - "binary_warn": "İkili dosya — yalnızca önizleme", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Hizmetleri arayın…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Hiçbir hizmet bulunamadı", - "svc_load_failed": "Hizmetler yüklenemedi", - "svc_action_failed": "İşlem başarısız oldu", - "svc_confirm": "Run", - "svc_start": "Başlat", - "svc_stop": "Durdur", - "svc_restart": "Yeniden başlat", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "BetterDesk Aracısını İndirin", - "choose_platform": "Platformunuzu seçin", - "choose_platform_hint": "İşletim sisteminize uygun yükleyiciyi seçin.", - "download": "İndir", - "building": "Bina…", - "failed": "Derleme başarısız oldu", - "need_help": "Yardıma mı ihtiyacınız var?", - "powered_by": "Tarafından desteklenmektedir" - }, - "server_attestation": { - "title": "Sunucu Performans Onayı", - "subtitle": "%80 CPU, RAM ve disk eşiğinde eşzamanlı uzak bağlantı kapasitesini belirleyen performans kıyaslaması.", - "warning_title": "Yük testi", - "warning_body": "Kıyaslama, sinyal ve röle sunucularına paralel WebSocket bağlantılarını simüle eder. Yoğun olmayan saatlerde çalıştırın — bu test üretim ortamını yükler.", - "run_benchmark": "Kıyaslamayı çalıştır", - "abort": "İptal", - "download_report": "JSON raporu indir", - "last_test": "Son test", - "no_test_yet": "Henüz kıyaslama çalıştırılmadı", - "max_connections": "Maksimum bağlantı", - "threshold_80": "%80 eşiği — nihai metrikler", - "disk": "Disk", - "ramp_chart": "Yük rampa grafiği", - "connections": "Bağlantılar", - "connections_short": "bağ.", - "tier_guide_title": "Her seviye ne anlama gelir?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 eşzamanlı bağlantı — küçük VPS (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 bağlantı — orta sınıf sunucu (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 bağlantı — yüksek performanslı sunucu (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 bağlantı — kurumsal altyapı (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ bağlantı — turbo sınıfı: özel donanım, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Not: Docker'da CPU/RAM metrikleri fiziksel ana bilgisayar yerine konteyner sınırlarını yansıtabilir.", - "badge_tooltip": "BetterDesk Server Attestation — sunucu performans sertifikasyonu", - "confirm_run": "Bu kıyaslama simüle edilmiş bağlantılarla sunucuya yük testi yapacak. Devam edilsin mi?", - "starting": "Başlatılıyor…", - "complete": "Kıyaslama tamamlandı", - "signal_peers": "Sinyal akranları", - "relay_sessions": "Röle oturumları", - "page_error": "Sunucu Onayı sayfası yüklenemedi", - "mode_estimated": "Tahmini (WebSocket ulaşılamıyor)", - "incomplete": "Kıyaslama geçerli bir seviye olmadan tamamlandı" + "form": { + "cancel": "İptal" } + } } diff --git a/web-nodejs/lang/uk.json b/web-nodejs/lang/uk.json index ddb01821..65457dc0 100644 --- a/web-nodejs/lang/uk.json +++ b/web-nodejs/lang/uk.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Ukrainian", - "native_name": "Українська", - "flag": "🇺🇦", - "needs_review": true + "_meta": { + "name": "Ukrainian", + "native_name": "Українська", + "flag": "🇺🇦", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Завантаження...", + "confirm": "Підтверд��ти", + "alert": "Попередження", + "prompt": "Введіть значення", + "copied": "Скопійовано в буфер обміну", + "save": "зберегти", + "saved": "Збережено", + "error": "Помилка", + "success": "Успішно", + "warning": "Попередження", + "info": "Інформація", + "all": "Всі", + "cancel": "Скасувати", + "delete": "Видалити", + "actions": "Дії", + "close": "Закрити", + "required": "потрібно", + "name_required": "Необхідно вказати ім'я", + "active": "Активний", + "inactive": "Неактивний", + "invalid_json": "Недійсний JSON", + "field_required": "Необхідний {field}", + "back": "Назад", + "edit": "Редагувати", + "yes": "Так", + "no": "Ні" + }, + "nav": { + "main": "Головне", + "tools": "Інструменти", + "system": "Система", + "dashboard": "Приладова панель", + "devices": "Пристрої", + "keys": "Ключі", + "generator": "Генератор", + "settings": "Налаштування", + "users": "Користувачі", + "inventory": "Інвентар", + "tickets": "Тікети", + "help_requests": "Запити на допомогу", + "activity": "Активність", + "automation": "автоматизація", + "file_transfer": "Передача файлів", + "network": "Мережа", + "dataguard": "DataGuard", + "reports": "Звіти", + "tenants": "Орендарі", + "registrations": "Registrations", + "management": "управління", + "toggle_sidebar": "Перемкнути бічну панель", + "cdap": "Пристрої CDAP", + "fleet": "Флот", + "scaling": "Масштабування", + "cross_platform": "Кросплатформність", + "tokens": "Жетони пристроїв", + "organizations": "організації", + "policies": "політики", + "attestation": "Атестація", + "remote": "Віддалений робочий стіл", + "toolkit": "Інструментарій", + "security_audit": "Аудит безпеки", + "languages": "Мови", + "resource_control": "Контроль ресурсів", + "chat": "Чат", + "help": "Довідка", + "expand_sidebar": "Розгорнути бічну панель", + "toggle_theme": "Перемкнути тему", + "sdk_studio": "SDK Studio", + "login": "Вхід", + "permissions": "Дозволи", + "server_management": "Керування сервером", + "server_attestation": "Атестація сервера", + "commercialization": "Комерціалізація" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Увійдіть у консоль BetterDesk", + "username": "Ім'я користувача", + "username_placeholder": "Введіть ім'я користувача", + "password": "Пароль", + "password_placeholder": "Введіть пароль", + "remember_me": "Remember me", + "login_failed": "Помилка входу. Перевірте свої облікові дані.", + "invalid_credentials": "Недійсне ім'я користувача або пароль.", + "username_collision": "Локальний обліковий запис із цим ім'ям користувача вже існує. Увійдіть із локальним паролем або попросіть адміністратора перейменувати чи видалити конфліктний обліковий запис.", + "fill_all_fields": "Будь ласка, заповніть усі поля", + "logout_confirm": "Ви впевнені, що бажаєте вийти?", + "change_password": "Змінити пароль", + "password_required": "Необхідно ввести пароль", + "totp_title": "Двофакторна автентифікація", + "totp_subtitle": "Введіть 6-значний код із програми автентифікації", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Натомість використовуйте код відновлення", + "totp_use_code": "Натомість використовуйте код автентифікатора", + "totp_recovery_code": "Код відновлення", + "totp_back_to_login": "Назад до входу", + "totp_invalid_code": "Недійсний код підтвердження. Спробуйте ще раз.", + "totp_enter_code": "Будь ласка, введіть 6-значний код", + "totp_enter_recovery": "Будь ласка, введіть код відновлення", + "totp_session_expired": "Сеанс закінчився. Будь ласка, увійдіть знову.", + "totp_already_enabled": "Двофакторна аутентифікація вже включена", + "pro_only_account": "Цей обліковий запис призначений лише для настільного клієнта RustDesk. Щоб увійти, використовуйте додаток RustDesk.", + "passwords_mismatch": "Паролі не збігаються", + "or": "або", + "login_sso": "Увійдіть за допомогою SSO", + "login_sso_with": "Увійдіть за допомогою {{provider}}", + "oidc_denied": "Постачальник ідентифікаційної інформації заборонив доступ.", + "oidc_invalid": "Недійсний зворотний виклик OIDC. Спробуйте ще раз.", + "oidc_failed": "Помилка автентифікації OIDC. Спробуйте ще раз.", + "oidc_error": "Під час входу в систему SSO сталася помилка.", + "oidc_no_account": "Ваш обліковий запис не знайдено, і ав��оматична реєстрація вимкнена.", + "totp_rate_limited": "Забагато спроб. Спробуйте пізніше.", + "emergency_mode_banner": "Go server недоступний — працює в екстреному режимі (лише для адміністратора, обмежена функціональність)" + }, + "dashboard": { + "title": "Приладова панель", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Загальна кількість пристроїв", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Активні підключення", + "offline_devices": "Offline", + "server_status": "Статус сервера", + "quick_actions": "Швидкі дії", + "manage_devices": "Керуйте підключеними пристроями", + "view_keys": "Переглянути ключі серв��ра", + "generate_config": "Створіть конфігурацію клієнта", + "server_settings": "Налаштувати параметри", + "greeting_morning": "Доброго ранку, {name}", + "greeting_afternoon": "Доброго дня, {name}", + "greeting_evening": "Доброго вечора, {name}", + "greeting_night": "На добраніч, {name}", + "health_overview": "Огляд здоров'я", + "devices_online": "Пристрої онлайн", + "active_alerts": "Активні оповіщення", + "recent_connections": "Загальна кількість пристроїв", + "server_uptime": "Час роботи сервера", + "activity_feed": "Останні дії", + "no_recent_activity": "Немає останніх дій", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Спробуйте режим робочого столу для багатовіконного робочого простору з віджетами моніторингу.", + "tip_keyboard_shortcuts": "Натисніть Ctrl+K будь-де, щоб відкрити панель команд швидкого пошуку.", + "tip_address_book": "Синхронізуйте свою адресну книгу на різних пристроях, увійшовши в систему з клієнта RustDesk.", + "tip_2fa": "Увімкніть двофакторну автентифікацію в налаштуваннях для додаткової безпеки облікового запису.", + "tip_bulk_actions": "Виберіть кілька пристроїв і використовуйте групові дії, щоб керувати ними одночасно.", + "tip_theme": "Перемикайтеся між темною та світлою темами в налаштуваннях бічної панелі.", + "tip_cdap": "Підключайте пристрої IoT і промислові датчики через шлюз CDAP.", + "tip_tutorials": "Натисніть кнопку довідки в нижньому правому куті, щоб переглянути інтерактивні посібники." + }, + "devices": { + "title": "Пристрої", + "id": "ID", + "hostname": "Hostname", + "username": "Ім'я користувача", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Створено", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Пошук пристроїв...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Статус синхронізації", + "sync_success": "Статус успішно синхронізовано", + "empty_title": "Пристроїв не знайдено", + "empty_text": "Жоден пристрій не відповідає вашим поточним фільтрам", + "edit_title": "Деталі пристрою", + "delete_title": "Видалити пристрій", + "delete_confirm": "Ви впевнені, що хочете видалити пристрій {id}?", + "delete_warning": "Ви збираєтеся остаточно видалити цей пристрій:", + "delete_permanent": "Цю дію не можна скасувати. Усі дані, пов’язані з цим пристроєм, буде остаточно видалено з бази даних.", + "delete_success": "Пристрій успішно видалено", + "revoke_option": "Відкликати пристрій", + "revoke_hint": "Заблокувати ідентифікатор пристрою та відключити активні підключення", + "revoke_success": "Пристрій успішно скасовано", + "details": "Деталі пристрою", + "ban_title": "Заборонити пристрій", + "ban_confirm": "Ви впевнені, що бажаєте заборонити пристрій {id}?", + "ban_success": "Пристрій успішно заблоковано", + "unban_title": "Розблокувати пристрій", + "unban_confirm": "Ви впевнені, що хочете розблок��вати пристрій {id}?", + "unban_success": "Пристрій успішно розблоковано", + "change_id": "Change ID", + "change_id_title": "Змінити ідентифікатор пристрою", + "new_id": "New ID", + "change_id_hint": "6-16 символів, лише літери, цифри, тире та підкреслення", + "change_id_success": "Ідентифікатор пристрою успішно змінено", + "id_length_error": "ID має містити 6-16 символів", + "id_format_error": "ID може містити лише літери, цифри, тире та підкреслення", + "bulk_delete_title": "Видалити кілька пристроїв", + "bulk_delete_confirm": "Ви впевнені, що хочете видалити пристрої {count}?", + "bulk_delete_success": "Пристрої {count} успішно видалено", + "columns": "Columns", + "toggle_columns": "Перемкнути видимі стовп��і", + "not_found": "Пристрій не знайдено", + "delete_failed": "Не вдалося видалити пристрій", + "change_id_failed": "Не вдалося змінити ідентифікатор пристрою", + "invalid_id": "Недійсний ідентифікатор пристрою (потрібно 6-16 символів)", + "invalid_id_format": "Недійсний формат ідентифікатора (лише літери, цифри, тире, підкреслення)", + "id_exists": "Ідентифікатор пристрою вже існує", + "no_selection": "Пристрої не вибрано", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP підключено", + "revoke": "Відкликати", + "access_policy": "Політика доступу", + "unattended_access": "Автоматичний доступ", + "enable_unattended": "Увімкнути неконтрольований доступ", + "access_password": "Пароль доступу", + "password_configured": "Встановлено пароль", + "no_password": "Немає пароля", + "new_password": "Новий пароль (залиште порожнім, щоб зберегти поточний)", + "clear_password": "Очистити пароль", + "access_schedule": "Розклад доступу", + "enable_schedule": "Увімкнути доступ на основі часу", + "allowed_days": "Дозволені дні", + "start_time": "Час початку", + "end_time": "Час закінчення", + "timezone": "Часовий пояс", + "allowed_operators": "Дозволені оператори", + "all_operators": "Усі оператори (залишити порожнім)", + "operators_hint": "Імена користувачів, розділені комами. Залиште пустим, щоб дозволити всім операторам.", + "last_updated_by": "Востаннє оновлено", + "access_policy_saved": "Політику доступу збережено", + "tabs": { + "overview": "Огляд", + "hardware": "Hardware", + "metrics": "Метрики", + "connections": "Зв'язки", + "audit": "Audit", + "info": "Info", + "history": "історія" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Процесор", + "memory": "Памʼять", + "disk": "Диск", + "os": "Операційна система", + "hostname": "Hostname", + "uptime": "Час роботи", + "load_avg": "Середнє навантаження", + "network": "Мережеві адаптери", + "no_data": "Дані про обладнання відсутні", + "title": "Інформація про ��бладнання", + "gpu": "Відеокарта" }, - "common": { - "loading": "Завантаження...", - "confirm": "Підтверд��ти", - "alert": "Попередження", - "prompt": "Введіть значення", - "copied": "Скопійовано в буфер обміну", - "save": "зберегти", - "saved": "Збережено", - "error": "Помилка", - "success": "Успішно", - "warning": "Попередження", - "info": "Інформація", - "all": "Всі", - "cancel": "Скасувати", - "delete": "Видалити", - "actions": "Дії", - "close": "Закрити", - "required": "потрібно", - "name_required": "Необхідно вказати ім'я", - "active": "Активний", - "inactive": "Неактивний", - "invalid_json": "Недійсний JSON", - "field_required": "Необхідний {field}", - "back": "Назад", - "edit": "Редагувати", - "yes": "Так", - "no": "Ні" - }, - "nav": { - "main": "Головне", - "tools": "Інструменти", - "system": "Система", - "dashboard": "Приладова панель", - "devices": "Пристрої", - "keys": "Ключі", - "generator": "Генератор", - "settings": "Налаштування", - "users": "Користувачі", - "inventory": "Інвентар", - "tickets": "Тікети", - "help_requests": "Запити на допомогу", - "activity": "Активність", - "automation": "автоматизація", - "file_transfer": "Передача файлів", - "network": "Мережа", - "dataguard": "DataGuard", - "reports": "Звіти", - "tenants": "Орендарі", - "registrations": "Registrations", - "management": "управління", - "toggle_sidebar": "Перемкнути бічну панель", - "cdap": "Пристрої CDAP", - "fleet": "Флот", - "scaling": "Масштабування", - "cross_platform": "Кросплатформність", - "tokens": "Жетони пристроїв", - "organizations": "організації", - "policies": "політики", - "attestation": "Атестація", - "remote": "Віддалений робочий стіл", - "toolkit": "Інструментарій", - "security_audit": "Аудит безпеки", - "languages": "Мови", - "resource_control": "Контроль ресурсів", - "chat": "Чат", - "help": "Довідка", - "expand_sidebar": "Розгорнути бічну панель", - "toggle_theme": "Перемкнути тему", - "sdk_studio": "SDK Studio", - "login": "Вхід", - "permissions": "Дозволи", - "server_management": "Керування сервером", - "server_attestation": "Атестація сервера" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Увійдіть у консоль BetterDesk", - "username": "Ім'я користувача", - "username_placeholder": "Введіть ім'я користувача", - "password": "Пароль", - "password_placeholder": "Введіть пароль", - "remember_me": "Remember me", - "login_failed": "Помилка входу. Перевірте свої облікові дані.", - "invalid_credentials": "Недійсне ім'я користувача або пароль.", - "username_collision": "Локальний обліковий запис із цим ім'ям користувача вже існує. Увійдіть із локальним паролем або попросіть адміністратора перейменувати чи видалити конфліктний обліковий запис.", - "fill_all_fields": "Будь ласка, заповніть усі поля", - "logout_confirm": "Ви впевнені, що бажаєте вийти?", - "change_password": "Змінити пароль", - "password_required": "Необхідно ввести пароль", - "totp_title": "Двофакторна автентифікація", - "totp_subtitle": "Введіть 6-значний код із програми автентифікації", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Натомість використовуйте код відновлення", - "totp_use_code": "Натомість використовуйте код автентифікатора", - "totp_recovery_code": "Код відновлення", - "totp_back_to_login": "Назад до входу", - "totp_invalid_code": "Недійсний код підтвердження. Спробуйте ще раз.", - "totp_enter_code": "Будь ласка, введіть 6-значний код", - "totp_enter_recovery": "Будь ласка, введіть код відновлення", - "totp_session_expired": "Сеанс закінчився. Будь ласка, увійдіть знову.", - "totp_already_enabled": "Двофакторна аутентифікація вже включена", - "pro_only_account": "Цей обліковий запис призначений лише для настільного клієнта RustDesk. Щоб увійти, використовуйте додаток RustDesk.", - "passwords_mismatch": "Паролі не збігаються", - "or": "або", - "login_sso": "Увійдіть за допомогою SSO", - "login_sso_with": "Увійдіть за допомогою {{provider}}", - "oidc_denied": "Постачальник ідентифікаційної інформації заборонив доступ.", - "oidc_invalid": "Недійсний зворотний виклик OIDC. Спробуйте ще раз.", - "oidc_failed": "Помилка автентифікації OIDC. Спробуйте ще раз.", - "oidc_error": "Під час входу в систему SSO сталася помилка.", - "oidc_no_account": "Ваш обліковий запис не знайдено, і ав��оматична реєстрація вимкнена.", - "totp_rate_limited": "Забагато спроб. Спробуйте пізніше.", - "emergency_mode_banner": "Go server недоступний — працює в екстреному режимі (лише для адміністратора, обмежена функціональність)" - }, - "dashboard": { - "title": "Приладова панель", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Загальна кількість пристроїв", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Активні підключення", - "offline_devices": "Offline", - "server_status": "Статус сервера", - "quick_actions": "Швидкі дії", - "manage_devices": "Керуйте підключеними пристроями", - "view_keys": "Переглянути ключі серв��ра", - "generate_config": "Створіть конфігурацію клієнта", - "server_settings": "Налаштувати параметри", - "greeting_morning": "Доброго ранку, {name}", - "greeting_afternoon": "Доброго дня, {name}", - "greeting_evening": "Доброго вечора, {name}", - "greeting_night": "На добраніч, {name}", - "health_overview": "Огляд здоров'я", - "devices_online": "Пристрої онлайн", - "active_alerts": "Активні оповіщення", - "recent_connections": "Загальна кількість пристроїв", - "server_uptime": "Час роботи сервера", - "activity_feed": "Останні дії", - "no_recent_activity": "Немає останніх дій", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Спробуйте режим робочого столу для багатовіконного робочого простору з віджетами моніторингу.", - "tip_keyboard_shortcuts": "Натисніть Ctrl+K будь-де, щоб відкрити панель команд швидкого пошуку.", - "tip_address_book": "Синхронізуйте свою адресну книгу на різних пристроях, увійшовши в систему з клієнта RustDesk.", - "tip_2fa": "Увімкніть двофакторну автентифікацію в налаштуваннях для додаткової безпеки облікового запису.", - "tip_bulk_actions": "Виберіть кілька пристроїв і використовуйте групові дії, щоб керувати ними одночасно.", - "tip_theme": "Перемикайтеся між темною та світлою темами в налаштуваннях бічної панелі.", - "tip_cdap": "Підключайте пристрої IoT і промислові датчики через шлюз CDAP.", - "tip_tutorials": "Натисніть кнопку довідки в нижньому правому куті, щоб переглянути інтерактивні посібники." - }, - "devices": { - "title": "Пристрої", - "id": "ID", - "hostname": "Hostname", - "username": "Ім'я користувача", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Створено", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Пошук пристроїв...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Статус синхронізації", - "sync_success": "Статус успішно синхронізовано", - "empty_title": "Пристроїв не знайдено", - "empty_text": "Жоден пристрій не відповідає вашим поточним фільтрам", - "edit_title": "Деталі пристрою", - "delete_title": "Видалити пристрій", - "delete_confirm": "Ви впевнені, що хочете видалити пристрій {id}?", - "delete_warning": "Ви збираєтеся остаточно видалити цей пристрій:", - "delete_permanent": "Цю дію не можна скасувати. Усі дані, пов’язані з цим пристроєм, буде остаточно видалено з бази даних.", - "delete_success": "Пристрій успішно видалено", - "revoke_option": "Відкликати пристрій", - "revoke_hint": "Заблокувати ідентифікатор пристрою та відключити активні підключення", - "revoke_success": "Пристрій успішно скасовано", - "details": "Деталі пристрою", - "ban_title": "Заборонити пристрій", - "ban_confirm": "Ви впевнені, що бажаєте заборонити пристрій {id}?", - "ban_success": "Пристрій успішно заблоковано", - "unban_title": "Розблокувати пристрій", - "unban_confirm": "Ви впевнені, що хочете розблок��вати пристрій {id}?", - "unban_success": "Пристрій успішно розблоковано", - "change_id": "Change ID", - "change_id_title": "Змінити ідентифікатор пристрою", - "new_id": "New ID", - "change_id_hint": "6-16 символів, лише літери, цифри, тире та підкреслення", - "change_id_success": "Ідентифікатор пристрою успішно змінено", - "id_length_error": "ID має містити 6-16 символів", - "id_format_error": "ID може містити лише літери, цифри, тире та підкреслення", - "bulk_delete_title": "Видалити кілька пристроїв", - "bulk_delete_confirm": "Ви впевнені, що хочете видалити пристрої {count}?", - "bulk_delete_success": "Пристрої {count} успішно видалено", - "columns": "Columns", - "toggle_columns": "Перемкнути видимі стовп��і", - "not_found": "Пристрій не знайдено", - "delete_failed": "Не вдалося видалити пристрій", - "change_id_failed": "Не вдалося змінити ідентифікатор пристрою", - "invalid_id": "Недійсний ідентифікатор пристрою (потрібно 6-16 символів)", - "invalid_id_format": "Недійсний формат ідентифікатора (лише літери, цифри, тире, підкреслення)", - "id_exists": "Ідентифікатор пристрою вже існує", - "no_selection": "Пристрої не вибрано", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP підключено", - "revoke": "Відкликати", - "access_policy": "Політика доступу", - "unattended_access": "Автоматичний доступ", - "enable_unattended": "Увімкнути неконтрольований доступ", - "access_password": "Пароль доступу", - "password_configured": "Встановлено пароль", - "no_password": "Немає пароля", - "new_password": "Новий пароль (залиште порожнім, щоб зберегти поточний)", - "clear_password": "Очистити пароль", - "access_schedule": "Розклад доступу", - "enable_schedule": "Увімкнути доступ на основі часу", - "allowed_days": "Дозволені дні", - "start_time": "Час початку", - "end_time": "Час закінчення", - "timezone": "Часовий пояс", - "allowed_operators": "Дозволені оператори", - "all_operators": "Усі оператори (залишити порожнім)", - "operators_hint": "Імена користувачів, розділені комами. Залиште пустим, щоб дозволити всім операторам.", - "last_updated_by": "Востаннє оновлено", - "access_policy_saved": "Політику доступу збережено", - "tabs": { - "overview": "Огляд", - "hardware": "Hardware", - "metrics": "Метрики", - "connections": "Зв'язки", - "audit": "Audit", - "info": "Info", - "history": "історія" - }, - "hardware": { - "cpu": "Процесор", - "memory": "Памʼять", - "disk": "Диск", - "os": "Операційна система", - "hostname": "Hostname", - "uptime": "Час роботи", - "load_avg": "Середнє навантаження", - "network": "Мережеві адаптери", - "no_data": "Дані про обладнання відсутні", - "title": "Інформація про ��бладнання", - "gpu": "Відеокарта" - }, - "display_name": "Відображуване ім'я", - "display_name_placeholder": "Власне ім'я (замінює ім'я хоста)", - "note_placeholder": "Примітки щодо цього пристрою", - "tags": "Tags", - "filter_by_tags": "Фільтрувати за тегами", - "no_tags": "Немає тегів", - "all_groups": "Всі групи", - "create_group": "Створити групу", - "manage_groups": "Керування групами", - "group_name": "Назва групи", - "group_name_placeholder": "напр. Медіа ПК", - "dynamic_group": "Динамічна група з тегу", - "dynamic_group_hint": "Пристрої з цим тегом приєднуються автоматично.", - "tag_filter": "Фільтр тегів", - "group_allowed_users": "Дозволені користувачі", - "group_allowed_users_hint": "Залиште поле порожнім, щоб група була видимою для всіх із дозволами на пристрої.", - "group_tag_required": "Для динамічних груп потрібен фільтр тегів", - "group_invalid": "Недійсний ідентифікатор групи", - "group_not_found": "Групу не знайдено", - "group_saved": "Групу пристроїв збережено", - "groups_saved": "Групи пристроїв збережено", + "display_name": "Відображуване ім'я", + "display_name_placeholder": "Власне ім'я (замінює ім'я хоста)", + "note_placeholder": "Примітки щодо цього пристрою", + "tags": "Tags", + "filter_by_tags": "Фільтрувати за тегами", + "no_tags": "Немає тегів", + "all_groups": "Всі групи", + "create_group": "Створити групу", + "manage_groups": "Керування групами", + "group_name": "Назва групи", + "group_name_placeholder": "напр. Медіа ПК", + "dynamic_group": "Динамічна група з тегу", + "dynamic_group_hint": "Пристрої з цим тегом приєднуються автоматично.", + "tag_filter": "Фільтр тегів", + "group_allowed_users": "Дозволені користувачі", + "group_allowed_users_hint": "Залиште поле порожнім, щоб група була видимою для всіх із дозволами на пристрої.", + "group_tag_required": "Для динамічних груп потрібен фільтр тегів", + "group_invalid": "Недійсний ідентифікатор групи", + "group_not_found": "Групу не знайдено", + "group_saved": "Групу пристроїв збережено", + "groups_saved": "Групи пристроїв збережено", "group_membership_added": "Додано до групи", "group_membership_removed": "Вилучено з групи", - "no_groups": "Груп ще немає", - "manual_groups": "Ручні групи", - "dynamic_memberships": "Динамічне членство", - "group_allowed_user_groups": "Дозволені групи користувачів", - "group_allowed_user_groups_hint": "Користувачі з вибраних груп користувачів можуть отримати доступ до цієї групи пристроїв.", - "no_user_groups": "Немає груп користувачів", - "edit_group": "Редагувати групу", - "delete_group": "Видалити групу", - "delete_group_confirm": "Видалити групу пристроїв {name}?", - "group_deleted": "Групу пристроїв видалено", - "folder_group_readonly": "Групи з папками керуються з папок.", - "manage_user_groups": "Керуйте групами користувачів", - "restore_failed": "Пристрій konnte nicht wiederhergestellt werden", - "no_signal_tooltip": "Клієнт нещодавно звернувся до API, але не зареєстрований на сигнальному сервері (UDP :21116). Перезапустіть клієнт після міграції сервера.", - "per_page": "На сторінку" - }, - "keys": { - "title": "Ключі сервера", - "subtitle": "Відкритий ключ і конфігурація для клієнтів RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Інформація про сервер", - "download": "Завантажити ключ", - "show_qr": "Show QR", - "qr_hint": "Відскануйте цей QR-код за допомогою мобільного додатку RustDesk", - "no_key": "Відкритий ключ не знайдено", - "no_key_to_copy": "Немає ключа для копіювання", - "no_qr": "QR-код недоступний", - "download_success": "Ключовий файл завантажено", - "not_found": "Ключ не знайдено", - "api_not_found": "Ключ API не знайдено" - }, - "settings": { - "title": "Налаштування", - "subtitle": "Конфігурація консолі та налаштування облікового запису", - "tab_general": "General", - "tab_server": "Сервер", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Мова", - "change_password": "Змінити пароль", - "password_desc": "Оновіть пароль облікового запису", - "current_password": "Поточний пароль", - "new_password": "Новий пароль", - "confirm_password": "Підтвердьте пароль", - "save_password": "Оновити пароль", - "password_changed": "Пароль успішно змінено", - "fill_all_fields": "Будь ласка, заповніть усі поля", - "passwords_not_match": "Паролі не збігаються", - "password_requirements": "Вимоги до пароля", - "password_requirements_not_met": "Пароль не відповідає вимогам", - "req_length": "Мінімум 8 символів", - "req_uppercase": "Принаймні одна велика літера", - "req_lowercase": "Принаймні одна мала літера", - "req_number": "Хоча б одне число", - "server_info": "Інформація про сервер", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Останні дії на консолі", - "no_audit_logs": "Журнали аудиту не знайдено", - "backend_title": "Бекенд сервера", - "backend_desc": "Виберіть, який сервер використовувати для керування пристроєм і служб сигналу/ретрансляції.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Стандартні сервери сигналів і ретрансляції RustDesk (hbbs + hbbr). Базовий HTTP API з обмеженими кінцевими точками.", - "backend_betterdesk_desc": "Покращений сервер на базі Go з повною автентифікацією REST API, JWT, списком блокувань, тегами, подіями WebSocket у реальному часі та журналюванням аудиту.", - "backend_feature_signal": "Сервер сигналів (реєстрація ID)", - "backend_feature_relay": "Ретрансляційний сервер (ретранслятор підключення)", - "backend_feature_basic_api": "Базовий REST API", - "backend_feature_full_api": "Повний REST API (34+ кінцеві точки)", - "backend_feature_jwt": "JWT автентифікація та TOTP 2FA", - "backend_feature_blocklist": "Керування чорним списком IP/ID", - "backend_feature_tags": "Теги та групування пристроїв", - "backend_feature_audit": "Реєстрація подій аудиту", - "backend_feature_websocket": "Події WebSocket у реальному часі", - "backend_connection": "Підключення", - "backend_api_url": "API URL", - "backend_test": "Тестове підключення", - "backend_testing": "Тестування...", - "backend_save": "Застосувати Backend", - "backend_saved": "Серверну систему успішно змінено. Тепер даними пристрою керуватиме нова серверна частина.", - "backend_save_failed": "Помилка перемикання сервера", - "backend_test_success": "Підключення успішне! Сервер доступний.", - "backend_test_failed": "Помилка підключення. Сервер недоступний.", - "backend_confirm_switch": "Ви впевнені, що бажаєте змінити серверний сервер? Це змінить спосіб керування пристроями.", - "backend_unreachable": "Не вдається переключитися: цільовий сервер недоступний. Спочатку запустіть сервер.", - "invalid_backend": "Недійсний вибір серверної частини. Виберіть «rustdesk» або «betterdesk».", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Двофакторна автентифікація", - "totp_desc": "Додайте додатковий рівень безпеки за допомогою програм автентифікації TOTP (Google Authenticator, Microsoft Authenticator, Authy тощо)", - "totp_enabled": "2FA увімкнено", - "totp_enabled_desc": "Ваш обліковий запис захищено двофакторною автентифікацією.", - "totp_disabled": "2FA не ��вімкнено", - "totp_disabled_desc": "Увімкніть двофакторну автентифікацію для додаткового захисту облікового запису.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Встановіть програму автентифікації на свій телефон", - "totp_step2": "Відскануйте QR-код нижче", - "totp_step3": "Введіть 6-значний код для підтвердження", - "totp_manual_key": "Manual key", - "totp_enter_code": "Введіть код підтвердження", - "totp_verify_enable": "Перевірте та ввімкніть", - "totp_enabled_success": "Увімкнено двофакторну аутентифікацію!", - "totp_recovery_warning": "Збережіть ці коди відновлення в безпечному місці. Кожен код можна використати лише один раз. Якщо ви втратите доступ до програми автентифікації, ви можете використовувати ці коди для входу.", - "totp_done": "Done", - "totp_disable_warning": "Якщо вимкнути двофакторну автентифікацію, ваш обліковий запис стане менш безпечним. Введіть пароль для підтвердження.", - "totp_disabled_success": "Двофакторну автентифікацію вимкнено.", - "tutorials_title": "Підручники та посібники", - "tutorials_desc": "Керуйте екскурсіями та довідкою, що відображається на консолі", - "tutorials_enabled": "Увімкнути підручники", - "tutorials_enabled_hint": "Якщо вимкнено, навчальні посібники не запускатимуться автоматично, а кнопка довідки буде прихована", - "tutorials_reset_hint": "Позначте всі підручники як непереглянуті, щоб їх можна було показати знову", - "tutorials_enabled_toast": "Підручники ввімкнено", - "tutorials_disabled_toast": "Підручники вимкнено", - "tutorials_reset_toast": "Усі навчальні посібники скинуто", - "tab_auth": "Аутентифікація", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Налаштуйте зовнішню автентифікацію через LDAP або Active Directory. Користувачі зможуть входити за допомогою облікових даних свого домену.", - "ldap_enabled": "Увімкнути автентифікацію LDAP", - "ldap_enabled_hint": "Якщо ввімкнено, користувачі можуть входити за допомогою облікових даних LDAP/AD. Локальні облікові записи все ще працюють як запасні.", - "ldap_connection": "Підключення до сервера", - "ldap_host": "Хост", - "ldap_port": "Порт", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Пропустити перевірку TLS", - "ldap_timeout": "Час очікування підключення (с)", - "ldap_timeout_hint": "Секунди очікування відповіді сервера LDAP", - "ldap_bind_mode": "Режим прив'язки", - "ldap_direct_bind": "Пряме прив'язування", - "ldap_direct_bind_hint": "Прив’яжіть безпосередньо до шаблону DN замість використання облікового запису служби для пошуку.", - "ldap_bind_dn": "Прив’язати DN (с��ужбовий обліковий запис)", - "ldap_bind_dn_hint": "Відмінне ім’я облікового запису служби лише для читання, що використовується для пошуку користувачів.", - "ldap_bind_password": "Пароль прив'язки", - "ldap_base_dn": "Базовий DN", - "ldap_base_dn_hint": "База пошуку для пошуку користувачів, напр. dc=приклад,dc=com", - "ldap_user_filter": "Фільтр користувача", - "ldap_user_filter_hint": "Фільтр LDAP для пошуку користувачів. Використовуйте {{username}} як заповнювач. За замовчуванням: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Шаблон прямого зв’язку DN", - "ldap_direct_bind_dn_hint": "Шаблон DN для прямого зв’язування. Використовуйте {{username}} як заповнювач, наприклад. uid={{username}},ou=користувачі,dc=приклад,dc=com", - "ldap_user_attrs": "Атрибути користувача", - "ldap_attr_id": "Атрибут імені користувача", - "ldap_attr_email": "Атрибут електронної пошти", - "ldap_attr_name": "Атрибут відображуваного імені", - "ldap_group_mapping": "Група → Відображення ролей", - "ldap_group_base_dn": "Груповий базовий DN", - "ldap_group_base_dn_hint": "Залиште порожнім, щоб ви��ористовувати основний базовий DN", - "ldap_group_filter": "Груповий фільтр", - "ldap_group_attr_name": "Атрибут імені групи", - "ldap_default_role": "Роль за замовчуванням", - "ldap_default_role_hint": "Роль призначена користувачам, чиї групи LDAP не відповідають жодному відображенню", - "ldap_role_viewer": "Переглядач", - "ldap_role_operator": "Оператор", - "ldap_role_admin": "адмін", - "ldap_group_role_map": "Група → Карта ролей", - "ldap_group_role_map_hint": "Зіставте групи LDAP на ролі BetterDesk. Формат: GroupDN=роль, розділена | (труба). Приклад: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Тестове підключення", - "ldap_testing": "Тестування...", - "ldap_test_success": "Підключення успішне! Сервер LDAP доступний, а облікові дані прив’язки дійсні.", - "ldap_test_failed": "Помилка підключення", - "ldap_save": "Збережіть конфігурацію LDAP", - "ldap_saved": "Конфігурацію LDAP успішно збережено", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Налаштуйте єдиний вхід через постачальника OpenID Connect (Azure AD, Okta, Google, Keycloak тощо).", - "oidc_enabled": "Увімкнути автентифікацію OIDC", - "oidc_enabled_hint": "Дозволити користувачам входити за допомогою зовнішнього постачальника ідентифікаційної інформації", - "oidc_provider": "Постачальник ідентифікаційних даних", - "oidc_display_name": "Відображувана назва кнопки", - "oidc_display_name_hint": "Текст, який відображається на кнопці входу (наприклад, Azure AD, Okta)", - "oidc_issuer_url": "Емітент URL", - "oidc_issuer_url_hint": "Емітент OpenID Connect URL (виявлення буде автоматичним)", - "oidc_client_id": "ID клієнта", - "oidc_client_secret": "Секрет клієнта", - "oidc_redirect_url": "Перенаправлення URL (Зворотний дзвінок)", - "oidc_redirect_url_hint": "Має точно збігатися з тим, що налаштовано у вашому IdP. Зазвичай: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Області застосування", - "oidc_use_pkce": "Використовуйте PKCE (рекомендовано)", - "oidc_auto_discovery": "Автоматичне виявлення", - "oidc_allow_signup": "Автоматичне створення користувачів", - "oidc_manual_endpoints": "URL-адреси кінцевих точок вручну", - "oidc_authorization_url": "Кінцева точка авторизації", - "oidc_token_url": "Кінцева точка маркера", - "oidc_userinfo_url": "Кінцева точка інформації про користувача", - "oidc_claim_mapping": "Відображення претензій", - "oidc_claim_username": "Претензія на ім'я користувача", - "oidc_claim_email": "Претензія електронною поштою", - "oidc_claim_name": "Претензія на відображуване ім'я", - "oidc_claim_groups": "Претензія груп", - "oidc_role_mapping": "Відображення ролей", - "oidc_default_role": "Роль за замовчуванням", - "oidc_group_role_map": "Група → Відображення ролей", - "oidc_group_role_map_hint": "Одне зіставлення на рядок: назва_групи=роль (наприклад, admins=адміністратор, operators=оператор)", - "oidc_test_discovery": "Тестове відкриття", - "oidc_testing": "Тестування...", - "oidc_test_success": "Відкриття успішне! Кінцеві точки вирішено.", - "oidc_test_failed": "Відкриття не вдалося", - "oidc_issuer_required": "Емітент URL потрібен для перевірки відкриття", - "oidc_save": "Збережіть конфігурацію OIDC", - "oidc_saved": "Конфігурацію OIDC успішно збережено", - "connection_mode_title": "Стратегія підключення", - "connection_mode_desc": "Управляйте тим, як підключаються десктопні клієнти RustDesk.", - "connection_mode_label": "Стандартний режим підключення", - "connection_mode_p2p_first": "P2P першим (рекомендовано) — спробуйте пряме підключення, поверніться до ретрансляції", - "connection_mode_relay_only": "Тільки ретрансляція — всі сесії використовують сервер ретрансляції", - "connection_mode_advanced": "Розширені налаштування", - "connection_mode_fallback_ms": "Тайм-аут відмовостійкості P2P (мс)", - "connection_mode_same_nat_relay": "Примусово використовувати мою ретрансляцію, якщо обидва пири мають однаковий публічний IP (NAT hairpin)", - "connection_mode_network_hint": "P2P вимагає, щоб UDP-порт 21116 був доступний між клієнтами.", - "connection_mode_save": "Зберегти", - "connection_mode_save_restart": "Зберегти і перезапустити сервер", - "connection_mode_saved": "Режим підключення збережено", - "connection_mode_restart_started": "Перезапуск сервера розпочато", - "connection_mode_restart_failed": "Перезапуск сервера не вдався", - "connection_mode_not_configurable": "Режим підключення не можна змінити на цій інсталяції", - "connection_mode_source_saved": "Збережено до:", - "connection_mode_source_defaults": "Використовуються стандартні налаштування сервера (не можна записати з панелі)", - "connection_mode_runtime": "Активний сервер", - "advanced_title": "Конфігураційні файли", - "advanced_desc": "Безпосередньо редагуйте конфігураційні файли сервера. Зміни можуть потребувати перезапуску служб.", - "advanced_warning": "Ці файли містять секрети. Редагуйте лише якщо знаєте, що робите.", - "advanced_files_label": "Файли", - "advanced_select_file": "Виберіть файл із списку для перегляду або редагування вмісту.", - "advanced_reload": "Перезавантажити", - "advanced_save": "Зберегти файл", - "advanced_apply_restart": "Застосувати (перезапуск служби)", - "advanced_saved": "Конфігураційний файл збережено", - "advanced_restart_after_save": "Конфігурацію збережено. Перезапустити відповідну службу зараз?", - "advanced_restart_confirm": "Перезапустити повʼязані служби BetterDesk? Активні підключення можуть бути коротко перервані.", - "advanced_restart_console_confirm": "Перезапустити службу веб-консолі? Ваша сесія браузера буде коротко перервана.", - "advanced_restart_started": "Перезапуск служби розпочато", - "advanced_restart_done": "Консоль перезапущено — перезавантаження сторінки...", - "advanced_restart_polling": "Очікування повернення консолі...", - "advanced_restart_timeout": "Перезапуск відправлено, але консоль не відповіла вчасно. Перевірте журнали та перезавантажте вручну.", - "advanced_restart_failed": "Перезапуск служби не вдався", - "advanced_save_confirm": "Зберегти зміни до цього файлу? Буде створено резервну копію попередньої версії.", - "advanced_unsaved_confirm": "У вас є незбережені зміни. Відхилити їх?", - "advanced_no_files": "На цій системі не знайдено конфігураційних файлів.", - "advanced_readonly": "лише читання", - "advanced_missing": "відсутній", - "advanced_new_file": "Новий файл (не буде створено до збереження)", - "advanced_new_file_hint": "Новий файл — додайте вміст і збережіть", - "advanced_backup_created": "резервну копію створено", - "advanced_error_unknown": "Невідомий конфігураційний файл", - "advanced_error_not_found": "Файл не існує", - "advanced_error_too_large": "Файл перевищує максимальний розмір для редагування (512 КБ)", - "advanced_error_binary": "Бінарні файли не можна редагувати в панелі", - "advanced_error_invalid": "Невірний вміст файлу", - "advanced_error_not_writable": "Файл недоступний для запису процесом консолі", - "enrollment_title": "Реєстрація пристрою (RustDesk)", - "enrollment_desc": "Управляйте тим, як нові клієнти RustDesk реєструються.", - "enrollment_require_approval": "Потрібне затвердження оператора (контрольований режим)", - "enrollment_require_approval_hint": "Якщо увімкнено, невідомі клієнти ставляться в чергу, поки оператор їх не затвердить.", - "enrollment_rich_approve": "Повна форма затвердження (імʼя, папка, групи, теги)", - "enrollment_rich_approve_hint": "Показує детальний діалог при затвердженні запитів на реєстрацію.", - "enrollment_tag_picker": "Вибирайте з існуючих тегів пристроїв", - "enrollment_tag_picker_hint": "Дозволяє операторам вибирати зі списку, що використовується на сторінці Пристроїв.", - "enrollment_open_requests": "Відкриті запити на реєстрацію", - "enrollment_pending_count": "{count} запит(ів) на реєстрацію очікує", - "tab_advanced": "Розширені", - "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", - "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", - "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", - "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Den betroffenen Служба neu starten, damit die Änderungen wirksam werden.", - "advanced_error_not_file": "Pfad ist keine reguläre Файл", - "advanced_file_console-env": "Konsolenumgebung (.env)", - "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", - "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (одиниця служби)", - "advanced_file_systemd-server": "systemd: betterdesk-server (одиниця служби)", - "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", - "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", - "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (конфігурація supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (оркестрація)", - "advanced_restart_none": "Für diese Файл ist kein Службаneustart erforderlich." - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Помилка входу", - "action_logout": "Logout", - "action_password_change": "Пароль змінено", - "action_2fa_enable": "2FA увімкнено", - "action_2fa_disable": "2FA вимкнено", - "action_user_create": "Створено користувачем", - "action_user_update": "Користувач оновлено", - "action_user_delete": "Користувача видалено", - "action_settings_update": "Налаштування оновлено", - "action_device_ban": "Пристрій заборонено", - "action_device_unban": "Пристрій розблоковано", - "action_device_delete": "Пристр��й видалено" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Параметри конфігурації", - "server_address": "Адреса сервера", - "server_address_hint": "Домен або IP-адреса вашого сервера", - "custom_port": "Custom Port", - "port_hint": "За замовчуванням залишити пустим (21116)", - "relay_server": "Релейний сервер", - "relay_placeholder": "Те саме, що ідентифікатор сервера, якщо пустий", - "relay_hint": "Додатково: окрема адреса сервера ретрансляції", - "include_key": "Включіть відкритий ключ у конфігурацію", - "generate": "Створити конфігурацію", - "output": "Вихід конфігурації", - "usage_title": "Деталі підключення", - "generated": "Конфігурація створена", - "server_required": "Необхідна адреса сервера", - "nothing_to_copy": "Спочатку згенеруйте конфігурацію", - "bundles_title": "Пакети агентів", - "new_bundle": "Новий комплект", - "editor_title": "Редактор пакетів", - "empty_state": "Щоб почати, виберіть пакет ліворуч або створіть новий.", - "loading": "Завантаження…", - "no_bundles": "Пакетів ще немає. Створіть свій перший.", - "bundle_name": "Назва комплекту", - "bundle_name_hint": "Лише внутрішня мітка — не відображається кінцевим користувачам.", - "short_link": "Коротке посилання для завантаження", - "short_link_hint": "Використовується в публічній URL (/d/…). Лише малі літери, цифри та дефіси (2–32 символи). Автозаповнення з назви пакета — скоротіть для зручнішого поширення (напр. acme).", - "branding_section": "брендинг", - "company_name": "Назва компанії/торгової марки", - "short_text": "Короткий опис", - "contact_email": "Контактна електронна адреса", - "contact_phone": "Контактний телефон", - "contact_url": "Контактний сайт", - "logo": "логотип", - "logo_hint": "PNG, JPEG, SVG або WebP. Максимум 256 Кб.", - "logo_clear": "Видалити логотип", - "primary_color": "Ос��овний колір", - "accent_color": "Колір заголовка", - "default_lang": "Мова за замовчуванням", - "allow_unattended": "Дозволити доступ без нагляду", - "allow_unattended_hint": "Коли ввімкнено, агент показує постійний пароль для доступу оператора.", - "save": "Зберегти пакет", - "revoke": "Відкликати", - "unrevoke": "Увімкнути знову", - "revoked": "Відкликано", - "preview_title": "Попередній перегляд", - "preview_hint": "Приблизний вигляд вікна агента кінцевого користувача.", - "preview_default_name": "Підтр��мка BetterDesk", - "preview_status_ready": "Готовий", - "preview_id": "Ваше посвідчення особи", - "preview_password": "Пароль", - "preview_chat": "Спілкуйтеся зі службою підтримки", - "preview_settings": "Налаштування (лише адміністратор)", - "preview_quit": "Вийти (лише адміністратор)", - "download_link_title": "Посилання для завантаження", - "download_link_hint": "Поділіться цим посиланням з кінцевими користувачами. Вони побачать фірмову сторінку завантаження. Старі hex-посилання працюють і після зміни короткого посилання.", - "open_portal": "відкритий", - "created": "Набір створено", - "saved": "Пакет збережено", - "deleted": "Пакет видалено", - "revoked_ok": "Пакет відкликано", - "unrevoked_ok": "Пакет знову ввімкнено", - "link_copied": "Посилання скопійовано в буфер обміну", - "copy_failed": "Не вдалося скопіювати автоматично — скопіюйте вручну", - "unsaved_confirm": "Скасувати незбережені зміни?", - "confirm_revoke": "Відкликати цей пакет? Посилання для завантаження перестане працювати.", - "confirm_unrevoke": "Знову ввімкнути цей пакет?", - "confirm_delete": "Видалити цей пакет остаточно? Це неможливо скасувати.", - "errors": { - "validation_failed": "Помилка перевірки", - "name_required": "Потрібно вказати назву пакета", - "company_name_required": "Необхідно вказати назву компанії", - "logo_invalid": "Логотип має бути дійсним файлом зображення", - "logo_too_large": "Логотип має бути не менше 256 КБ", - "logo_read_failed": "Не вдалося прочитати файл логотипу", - "primary_color_invalid": "Основний колір має бути шістнадцятковим (наприклад, #2563eb)", - "accent_color_invalid": "Колір заголовка має бути шістнадцятковим значенням (наприклад, #1e293b)", - "contact_url_invalid": "Контактний веб-сайт має бути дійсним URL", - "server_host_required": "Публічна адреса сервера обовʼязкова", - "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", - "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", - "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", - "slug_invalid": "Коротке посилання може містити лише малі літери, цифри та дефіси", - "slug_too_short": "Коротке посилання має містити щонайменше 2 символи", - "slug_too_long": "Коротке посилання може містити щонайбільше 32 символи", - "slug_taken": "Це коротке посилання вже використовує інший пакет" - }, - "legacy_title": "Генератор конфігурації клієнта", - "connection_section": "Підключення до сервера", - "server_host": "Публічна адреса сервера", - "server_host_hint": "Доменне імʼя або публічний IP, де кінцеві користувачі досягають вашого сервера BetterDesk.", - "use_https": "Використовувати HTTPS / WSS (рекомендовано)", - "enrollment_per_device": "По пристрою — затвердіть у Реєстраціях", - "builds_title": "Збірки клієнтів", - "rebuild_all": "Перебудувати всі", - "rebuild_confirm": "Перебудувати всі інсталятори платформ для цього пакету?", - "build_status_ready": "Готово", - "build_status_pending": "Очікує", - "build_status_building": "Збірка", - "build_status_failed": "Помилка", - "server_host_placeholder": "support.example.com oder 203.0.113.10", - "enrollment_token": "Пристрійeregistrierung", - "enrollment_token_pending": "Pro Пристрій nach Genehmigung", - "enrollment_token_set": "Pro Пристрій — in Registrierungen genehmigen", - "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Пристрійe im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", - "background_color": "Fensterhintergrund", - "surface_color": "Kartenhintergrund", - "text_color": "Textfarbe", - "text_muted_color": "Gedämpfte Textfarbe", - "status_ready_color": "Farbe des Готово-Indikators", - "header_text_color": "Kopfzeilentextfarbe", - "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", - "builds_loading": "Build-Status wird geladen…", - "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", - "rebuilding_all": "Neubuilds werden eingereiht…", - "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", - "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} не вдалося", - "build_error_hint": "Помилка збірки", - "preview_help": "Запросити допомогу" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "Сервер ID", - "relay_server": "Релейний сервер", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Перевірка...", - "label": "Status", - "no_signal": "Немає сигналу" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Підключіться через настільний клієнт", - "remote_viewer": "Віддалений перегляд", - "web_remote": "Віддалений доступ через веб", - "details": "Details", - "edit": "Редагувати", - "delete": "Видалити", - "ban": "Ban", - "unban": "Unban", - "save": "зберегти", - "cancel": "Скасувати", - "confirm": "Підтверд��ти", - "close": "Закрити", - "clear": "Clear", - "ok": "OK", - "saved": "Успішно збережено", - "back": "Назад", - "create": "Створити", - "dismiss": "Dismiss", - "view_all": "Переглянути всі", - "cdap_viewer": "Переглядач знімків CDAP", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count}s тому", - "minutes_ago": "{count}m тому", - "hours_ago": "{count}h тому", - "days_ago": "{count}d тому", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Керування користувачами", - "subtitle": "Керуйте користувачами консолі та дозволами", - "add_user": "Add User", - "edit_user": "Редагувати користувача", - "username": "Ім'я користувача", - "username_placeholder": "Введіть ім'я користувача", - "username_hint": "3-32 символи, лише літери, цифри та підкреслення", - "password": "Пароль", - "password_placeholder": "Введіть пароль", - "password_hint": "Мінімум 8 символів зі змішаним регістром, цифрами та символами", - "password_leave_empty": "Залиште пустим, щоб зберегти актуальність", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Створено", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Створити користувача", - "edit": "Редагувати", - "reset_password": "Скинути пароль", - "new_password": "Новий пароль", - "delete_title": "Видалити користувача", - "delete_confirm": "Ви впевнені, що хочете видалити користувача {username}?", - "delete_success": "Користувача успішно видалено", - "user_created": "Користувача створено успішно", - "user_updated": "Користувача успішно оновлено", - "password_reset_success": "Пароль скинуто успішно", - "empty_title": "Користувачів не знайдено", - "empty_text": "Додайте користувачів для керування доступом до консолі", - "fill_required": "Будь ласка, заповніть усі необхідні поля", - "invalid_username": "Ім'я користувача має містити 3-32 символи, лише літери, цифри та підкреслення", - "username_exists": "Ім'я користувача вже існує", - "weak_password": "Пароль занадто слабкий", - "password_too_short": "Пароль має бути не менше 8 символів", - "invalid_role": "Недійсна роль", - "cannot_demote_self": "Ти не можеш понизити себе", - "cannot_delete_self": "Ви не можете видалити свій обліковий запис", - "last_admin": "Неможливо видалити останнього адміністратора", - "admin_only": "Ця функція доступна лише для адміністраторів", - "password_required": "Необхідно ввести пароль", - "not_found": "Користувача не знайдено", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Найкращі методи безпеки", - "tip_strong_passwords": "Використовуйте надійні унікальні паролі для кожного користувача", - "tip_unique_accounts": "Створіть індивідуальні облікові записи для кожної людини", - "tip_viewer_role": "Використовуйте роль переглядача для користувачів, яким потрібен лише доступ для читання", - "tip_operator_role": "Використовуйте роль оператора для користувачів, яким потрібно керувати пристроями, але не користувачами", - "tip_audit_logs": "Регулярно переглядайте журнали аудиту на наявність підозрілої активності", - "role_pro": "Pro (лише API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Адміністратор сервера", - "role_global_admin": "Глобальний адмін", - "organizations": "організації", - "user_organizations": "Організації для {username}", - "no_organizations": "Користувач не приписаний до жодної організації", - "org_removed": "Видалено організаційне призначення", - "server_role_label": "Роль сервера", - "server_role_hint": "Визначає, що користувач може робити на всій консолі (доступ до панелі, конфігурація сервера, аудит тощо).", - "org_membership_section": "Членство в організації", - "org_membership_hint": "Користувач може належати до кількох організацій. Роль організації контролює лише дозволи всередині цієї організації та не залежить від ролі сервера вище.", - "column_organizations": "організації", - "no_orgs_short": "—", - "org_count_one": "Організація {count}", - "org_count_many": "організації {count}", - "all_orgs_assigned": "Користувач уже є членом кожної організації.", - "user_groups": "Групи користувачів", - "user_groups_hint": "Групи користувачів можна використовувати для надання доступу вибраним групам пристроїв.", - "loading_user_groups": "Завантаження груп користувачів...", - "no_user_groups": "Немає доступних груп користувачів", - "create_user_group": "Створити групу", - "edit_user_group": "Редагувати групу користувачів", - "delete_user_group": "Видалити групу користувачів", - "delete_user_group_confirm": "Видалити групу користувачів {name}? Учасники втратять доступ, наданий через цю групу.", - "user_group_created": "Групу користувачів створено", - "user_group_updated": "Групу користувачів оновлено", - "user_group_deleted": "Групу користувачів видалено", - "user_group_not_found": "Групу користувачів не знайдено", - "group_name": "Назва групи", - "group_name_placeholder": "Оператори", - "group_note": "Note", - "group_note_placeholder": "Додаткова примітка", - "group_name_required": "Потрібно вказати назву групи", - "group_members_count": "Учасники {count}", - "provider": "Провайдер", - "provider_local": "Локальний", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Керується провайдером ідентичності", - "provider_managed_hint": "Цей обліковий запис керується зовнішнім провайдером ідентичності (LDAP/AD або SSO). Пароль і роль контролюються провайдером." - }, - "folders": { - "title": "Folders", - "create": "Створити папку", - "edit": "Редагувати папку", - "delete": "Видалити папку", - "name": "Folder Name", - "name_placeholder": "Введіть назву папки", - "name_required": "Потрібно вказати назву папки", - "name_too_long": "Назва папки задовга (максимум 50 символів)", - "color": "Color", - "icon": "Icon", - "not_found": "Папка не знайдена", - "delete_confirm": "Ви впевнені, що хочете видалити цю папку? Пристрої буде скасовано.", - "delete_success": "Папку успішно видалено", - "created": "Папку успішно створено", - "updated": "Папку успішно оновлено", - "no_devices_selected": "Пристрої не вибрано", - "devices_moved": "Пристрої успішно переміщено", - "device_assigned": "Пристрій, призначений папці", - "unassigned": "Unassigned", - "all_devices": "Усі пристрої", - "drag_hint": "Перетягніть пристрої в папки, щоб упорядкувати їх", - "move_to": "Перейти до", - "toggle_sidebar": "Перемкнути бічну панель" - }, + "no_groups": "Груп ще немає", + "manual_groups": "Ручні групи", + "dynamic_memberships": "Динамічне членство", + "group_allowed_user_groups": "Дозволені групи користувачів", + "group_allowed_user_groups_hint": "Користувачі з вибраних груп користувачів можуть отримати доступ до цієї групи пристроїв.", + "no_user_groups": "Немає груп користувачів", + "edit_group": "Редагувати групу", + "delete_group": "Видалити групу", + "delete_group_confirm": "Видалити групу пристроїв {name}?", + "group_deleted": "Групу пристроїв видалено", + "folder_group_readonly": "Групи з папками керуються з папок.", + "manage_user_groups": "Керуйте групами користувачів", + "restore_failed": "Пристрій konnte nicht wiederhergestellt werden", + "no_signal_tooltip": "Клієнт нещодавно звернувся до API, але не зареєстрований на сигнальному сервері (UDP :21116). Перезапустіть клієнт після міграції сервера.", + "per_page": "На сторінку" + }, + "keys": { + "title": "Ключі сервера", + "subtitle": "Відкритий ключ і конфігурація для клієнтів RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Інформація про сервер", + "download": "Завантажити ключ", + "show_qr": "Show QR", + "qr_hint": "Відскануйте цей QR-код за допомогою мобільного додатку RustDesk", + "no_key": "Відкритий ключ не знайдено", + "no_key_to_copy": "Немає ключа для копіювання", + "no_qr": "QR-код недоступний", + "download_success": "Ключовий файл завантажено", + "not_found": "Ключ не знайдено", + "api_not_found": "Ключ API не знайдено" + }, + "settings": { + "title": "Налаштування", + "subtitle": "Конфігурація консолі та налаштування облікового запису", + "tab_general": "General", + "tab_server": "Сервер", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Мова", + "change_password": "Змінити пароль", + "password_desc": "Оновіть пароль облікового запису", + "current_password": "Поточний пароль", + "new_password": "Новий пароль", + "confirm_password": "Підтвердьте пароль", + "save_password": "Оновити пароль", + "password_changed": "Пароль успішно змінено", + "fill_all_fields": "Будь ласка, заповніть усі поля", + "passwords_not_match": "Паролі не збігаються", + "password_requirements": "Вимоги до пароля", + "password_requirements_not_met": "Пароль не відповідає вимогам", + "req_length": "Мінімум 8 символів", + "req_uppercase": "Принаймні одна велика літера", + "req_lowercase": "Принаймні одна мала літера", + "req_number": "Хоча б одне число", + "server_info": "Інформація про сервер", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Останні дії на консолі", + "no_audit_logs": "Журнали аудиту не знайдено", + "backend_title": "Бекенд сервера", + "backend_desc": "Виберіть, який сервер використовувати для керування пристроєм і служб сигналу/ретрансляції.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Стандартні сервери сигналів і ретрансляції RustDesk (hbbs + hbbr). Базовий HTTP API з обмеженими кінцевими точками.", + "backend_betterdesk_desc": "Покращений сервер на базі Go з повною автентифікацією REST API, JWT, списком блокувань, тегами, подіями WebSocket у реальному часі та журналюванням аудиту.", + "backend_feature_signal": "Сервер сигналів (реєстрація ID)", + "backend_feature_relay": "Ретрансляційний сервер (ретранслятор підключення)", + "backend_feature_basic_api": "Базовий REST API", + "backend_feature_full_api": "Повний REST API (34+ кінцеві точки)", + "backend_feature_jwt": "JWT автентифікація та TOTP 2FA", + "backend_feature_blocklist": "Керування чорним списком IP/ID", + "backend_feature_tags": "Теги та групування пристроїв", + "backend_feature_audit": "Реєстрація подій аудиту", + "backend_feature_websocket": "Події WebSocket у реальному часі", + "backend_connection": "Підключення", + "backend_api_url": "API URL", + "backend_test": "Тестове підключення", + "backend_testing": "Тестування...", + "backend_save": "Застосувати Backend", + "backend_saved": "Серверну систему успішно змінено. Тепер даними пристрою керуватиме нова серверна частина.", + "backend_save_failed": "Помилка перемикання сервера", + "backend_test_success": "Підключення успішне! Сервер доступний.", + "backend_test_failed": "Помилка підключення. Сервер недоступний.", + "backend_confirm_switch": "Ви впевнені, що бажаєте змінити серверний сервер? Це змінить спосіб керування пристроями.", + "backend_unreachable": "Не вдається переключитися: цільовий сервер недоступний. Спочатку запустіть сервер.", + "invalid_backend": "Недійсний вибір серверної частини. Виберіть «rustdesk» або «betterdesk».", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Двофакторна автентифікація", + "totp_desc": "Додайте додатковий рівень безпеки за допомогою програм автентифікації TOTP (Google Authenticator, Microsoft Authenticator, Authy тощо)", + "totp_enabled": "2FA увімкнено", + "totp_enabled_desc": "Ваш обліковий запис захищено двофакторною автентифікацією.", + "totp_disabled": "2FA не ��вімкнено", + "totp_disabled_desc": "Увімкніть двофакторну автентифікацію для додаткового захисту облікового запису.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Встановіть програму автентифікації на свій телефон", + "totp_step2": "Відскануйте QR-код нижче", + "totp_step3": "Введіть 6-значний код для підтвердження", + "totp_manual_key": "Manual key", + "totp_enter_code": "Введіть код підтвердження", + "totp_verify_enable": "Перевірте та ввімкніть", + "totp_enabled_success": "Увімкнено двофакторну аутентифікацію!", + "totp_recovery_warning": "Збережіть ці коди відновлення в безпечному місці. Кожен код можна використати лише один раз. Якщо ви втратите доступ до програми автентифікації, ви можете використовувати ці коди для входу.", + "totp_done": "Done", + "totp_disable_warning": "Якщо вимкнути двофакторну автентифікацію, ваш обліковий запис стане менш безпечним. Введіть пароль для підтвердження.", + "totp_disabled_success": "Двофакторну автентифікацію вимкнено.", + "tutorials_title": "Підручники та посібники", + "tutorials_desc": "Керуйте екскурсіями та довідкою, що відображається на консолі", + "tutorials_enabled": "Увімкнути підручники", + "tutorials_enabled_hint": "Якщо вимкнено, навчальні посібники не запускатимуться автоматично, а кнопка довідки буде прихована", + "tutorials_reset_hint": "Позначте всі підручники як непереглянуті, щоб їх можна було показати знову", + "tutorials_enabled_toast": "Підручники ввімкнено", + "tutorials_disabled_toast": "Підручники вимкнено", + "tutorials_reset_toast": "Усі навчальні посібники скинуто", + "tab_auth": "Аутентифікація", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Налаштуйте зовнішню автентифікацію через LDAP або Active Directory. Користувачі зможуть входити за допомогою облікових даних свого домену.", + "ldap_enabled": "Увімкнути автентифікацію LDAP", + "ldap_enabled_hint": "Якщо ввімкнено, користувачі можуть входити за допомогою облікових даних LDAP/AD. Локальні облікові записи все ще працюють як запасні.", + "ldap_connection": "Підключення до сервера", + "ldap_host": "Хост", + "ldap_port": "Порт", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Пропустити перевірку TLS", + "ldap_timeout": "Час очікування підключення (с)", + "ldap_timeout_hint": "Секунди очікування відповіді сервера LDAP", + "ldap_bind_mode": "Режим прив'язки", + "ldap_direct_bind": "Пряме прив'язування", + "ldap_direct_bind_hint": "Прив’яжіть безпосередньо до шаблону DN замість використання облікового запису служби для пошуку.", + "ldap_bind_dn": "Прив’язати DN (с��ужбовий обліковий запис)", + "ldap_bind_dn_hint": "Відмінне ім’я облікового запису служби лише для читання, що використовується для пошуку користувачів.", + "ldap_bind_password": "Пароль прив'язки", + "ldap_base_dn": "Базовий DN", + "ldap_base_dn_hint": "База пошуку для пошуку користувачів, напр. dc=приклад,dc=com", + "ldap_user_filter": "Фільтр користувача", + "ldap_user_filter_hint": "Фільтр LDAP для пошуку користувачів. Використовуйте {{username}} як заповнювач. За замовчуванням: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Шаблон прямого зв’язку DN", + "ldap_direct_bind_dn_hint": "Шаблон DN для прямого зв’язування. Використовуйте {{username}} як заповнювач, наприклад. uid={{username}},ou=користувачі,dc=приклад,dc=com", + "ldap_user_attrs": "Атрибути користувача", + "ldap_attr_id": "Атрибут імені користувача", + "ldap_attr_email": "Атрибут електронної пошти", + "ldap_attr_name": "Атрибут відображуваного імені", + "ldap_group_mapping": "Група → Відображення ролей", + "ldap_group_base_dn": "Груповий базовий DN", + "ldap_group_base_dn_hint": "Залиште порожнім, щоб ви��ористовувати основний базовий DN", + "ldap_group_filter": "Груповий фільтр", + "ldap_group_attr_name": "Атрибут імені групи", + "ldap_default_role": "Роль за замовчуванням", + "ldap_default_role_hint": "Роль призначена користувачам, чиї групи LDAP не відповідають жодному відображенню", + "ldap_role_viewer": "Переглядач", + "ldap_role_operator": "Оператор", + "ldap_role_admin": "адмін", + "ldap_group_role_map": "Група → Карта ролей", + "ldap_group_role_map_hint": "Зіставте групи LDAP на ролі BetterDesk. Формат: GroupDN=роль, розділена | (труба). Приклад: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Тестове підключення", + "ldap_testing": "Тестування...", + "ldap_test_success": "Підключення успішне! Сервер LDAP доступний, а облікові дані прив’язки дійсні.", + "ldap_test_failed": "Помилка підключення", + "ldap_save": "Збережіть конфігурацію LDAP", + "ldap_saved": "Конфігурацію LDAP успішно збережено", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Налаштуйте єдиний вхід через постачальника OpenID Connect (Azure AD, Okta, Google, Keycloak тощо).", + "oidc_enabled": "Увімкнути автентифікацію OIDC", + "oidc_enabled_hint": "Дозволити користувачам входити за допомогою зовнішнього постачальника ідентифікаційної інформації", + "oidc_provider": "Постачальник ідентифікаційних даних", + "oidc_display_name": "Відображувана назва кнопки", + "oidc_display_name_hint": "Текст, який відображається на кнопці входу (наприклад, Azure AD, Okta)", + "oidc_issuer_url": "Емітент URL", + "oidc_issuer_url_hint": "Емітент OpenID Connect URL (виявлення буде автоматичним)", + "oidc_client_id": "ID клієнта", + "oidc_client_secret": "Секрет клієнта", + "oidc_redirect_url": "Перенаправлення URL (Зворотний дзвінок)", + "oidc_redirect_url_hint": "Має точно збігатися з тим, що налаштовано у вашому IdP. Зазвичай: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Області застосування", + "oidc_use_pkce": "Використовуйте PKCE (рекомендовано)", + "oidc_auto_discovery": "Автоматичне виявлення", + "oidc_allow_signup": "Автоматичне створення користувачів", + "oidc_manual_endpoints": "URL-адреси кінцевих точок вручну", + "oidc_authorization_url": "Кінцева точка авторизації", + "oidc_token_url": "Кінцева точка маркера", + "oidc_userinfo_url": "Кінцева точка інформації про користувача", + "oidc_claim_mapping": "Відображення претензій", + "oidc_claim_username": "Претензія на ім'я користувача", + "oidc_claim_email": "Претензія електронною поштою", + "oidc_claim_name": "Претензія на відображуване ім'я", + "oidc_claim_groups": "Претензія груп", + "oidc_role_mapping": "Відображення ролей", + "oidc_default_role": "Роль за замовчуванням", + "oidc_group_role_map": "Група → Відображення ролей", + "oidc_group_role_map_hint": "Одне зіставлення на рядок: назва_групи=роль (наприклад, admins=адміністратор, operators=оператор)", + "oidc_test_discovery": "Тестове відкриття", + "oidc_testing": "Тестування...", + "oidc_test_success": "Відкриття успішне! Кінцеві точки вирішено.", + "oidc_test_failed": "Відкриття не вдалося", + "oidc_issuer_required": "Емітент URL потрібен для перевірки відкриття", + "oidc_save": "Збережіть конфігурацію OIDC", + "oidc_saved": "Конфігурацію OIDC успішно збережено", + "connection_mode_title": "Стратегія підключення", + "connection_mode_desc": "Управляйте тим, як підключаються десктопні клієнти RustDesk.", + "connection_mode_label": "Стандартний режим підключення", + "connection_mode_p2p_first": "P2P першим (рекомендовано) — спробуйте пряме підключення, поверніться до ретрансляції", + "connection_mode_relay_only": "Тільки ретрансляція — всі сесії використовують сервер ретрансляції", + "connection_mode_advanced": "Розширені налаштування", + "connection_mode_fallback_ms": "Тайм-аут відмовостійкості P2P (мс)", + "connection_mode_same_nat_relay": "Примусово використовувати мою ретрансляцію, якщо обидва пири мають однаковий публічний IP (NAT hairpin)", + "connection_mode_network_hint": "P2P вимагає, щоб UDP-порт 21116 був доступний між клієнтами.", + "connection_mode_save": "Зберегти", + "connection_mode_save_restart": "Зберегти і перезапустити сервер", + "connection_mode_saved": "Режим підключення збережено", + "connection_mode_restart_started": "Перезапуск сервера розпочато", + "connection_mode_restart_failed": "Перезапуск сервера не вдався", + "connection_mode_not_configurable": "Режим підключення не можна змінити на цій інсталяції", + "connection_mode_source_saved": "Збережено до:", + "connection_mode_source_defaults": "Використовуються стандартні налаштування сервера (не можна записати з панелі)", + "connection_mode_runtime": "Активний сервер", + "advanced_title": "Конфігураційні файли", + "advanced_desc": "Безпосередньо редагуйте конфігураційні файли сервера. Зміни можуть потребувати перезапуску служб.", + "advanced_warning": "Ці файли містять секрети. Редагуйте лише якщо знаєте, що робите.", + "advanced_files_label": "Файли", + "advanced_select_file": "Виберіть файл із списку для перегляду або редагування вмісту.", + "advanced_reload": "Перезавантажити", + "advanced_save": "Зберегти файл", + "advanced_apply_restart": "Застосувати (перезапуск служби)", + "advanced_saved": "Конфігураційний файл збережено", + "advanced_restart_after_save": "Конфігурацію збережено. Перезапустити відповідну службу зараз?", + "advanced_restart_confirm": "Перезапустити повʼязані служби BetterDesk? Активні підключення можуть бути коротко перервані.", + "advanced_restart_console_confirm": "Перезапустити службу веб-консолі? Ваша сесія браузера буде коротко перервана.", + "advanced_restart_started": "Перезапуск служби розпочато", + "advanced_restart_done": "Консоль перезапущено — перезавантаження сторінки...", + "advanced_restart_polling": "Очікування повернення консолі...", + "advanced_restart_timeout": "Перезапуск відправлено, але консоль не відповіла вчасно. Перевірте журнали та перезавантажте вручну.", + "advanced_restart_failed": "Перезапуск служби не вдався", + "advanced_save_confirm": "Зберегти зміни до цього файлу? Буде створено резервну копію попередньої версії.", + "advanced_unsaved_confirm": "У вас є незбережені зміни. Відхилити їх?", + "advanced_no_files": "На цій системі не знайдено конфігураційних файлів.", + "advanced_readonly": "лише читання", + "advanced_missing": "відсутній", + "advanced_new_file": "Новий файл (не буде створено до збереження)", + "advanced_new_file_hint": "Новий файл — додайте вміст і збережіть", + "advanced_backup_created": "резервну копію створено", + "advanced_error_unknown": "Невідомий конфігураційний файл", + "advanced_error_not_found": "Файл не існує", + "advanced_error_too_large": "Файл перевищує максимальний розмір для редагування (512 КБ)", + "advanced_error_binary": "Бінарні файли не можна редагувати в панелі", + "advanced_error_invalid": "Невірний вміст файлу", + "advanced_error_not_writable": "Файл недоступний для запису процесом консолі", + "enrollment_title": "Реєстрація пристрою (RustDesk)", + "enrollment_desc": "Управляйте тим, як нові клієнти RustDesk реєструються.", + "enrollment_require_approval": "Потрібне затвердження оператора (контрольований режим)", + "enrollment_require_approval_hint": "Якщо увімкнено, невідомі клієнти ставляться в чергу, поки оператор їх не затвердить.", + "enrollment_rich_approve": "Повна форма затвердження (імʼя, папка, групи, теги)", + "enrollment_rich_approve_hint": "Показує детальний діалог при затвердженні запитів на реєстрацію.", + "enrollment_tag_picker": "Вибирайте з існуючих тегів пристроїв", + "enrollment_tag_picker_hint": "Дозволяє операторам вибирати зі списку, що використовується на сторінці Пристроїв.", + "enrollment_open_requests": "Відкриті запити на реєстрацію", + "enrollment_pending_count": "{count} запит(ів) на реєстрацію очікує", + "tab_advanced": "Розширені", + "connection_mode_compose_error": "Serverumgebungsabschnitt in docker-compose.yml nicht gefunden", + "advanced_restart_console": "Den Webkonsolendienst neu starten (z. B. systemctl restart betterdesk-console), damit .env-Änderungen wirksam werden.", + "advanced_restart_goserver": "Den BetterDesk Go-Server neu starten, damit Blocklist-Änderungen geladen werden.", + "advanced_restart_systemd": "Nach dem Bearbeiten von systemd-Units ausführen: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Den betroffenen Служба neu starten, damit die Änderungen wirksam werden.", + "advanced_error_not_file": "Pfad ist keine reguläre Файл", + "advanced_file_console-env": "Konsolenumgebung (.env)", + "advanced_file_console-env-local": "Konsolen-Überschreibungen (.env.local)", + "advanced_file_go-blocklist": "Go-Server-Blocklist (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (одиниця служби)", + "advanced_file_systemd-server": "systemd: betterdesk-server (одиниця служби)", + "advanced_file_console-session-secret": "Konsolensitzungsgeheimnis (.session_secret)", + "advanced_file_go-audit-log": "Go-Server-Auditprotokoll (audit.jsonl)", + "advanced_file_build-env": "Agent-Build-Umgebung (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (конфігурація supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (оркестрація)", + "advanced_restart_none": "Für diese Файл ist kein Службаneustart erforderlich." + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Помилка входу", + "action_logout": "Logout", + "action_password_change": "Пароль змінено", + "action_2fa_enable": "2FA увімкнено", + "action_2fa_disable": "2FA вимкнено", + "action_user_create": "Створено користувачем", + "action_user_update": "Користувач оновлено", + "action_user_delete": "Користувача видалено", + "action_settings_update": "Налаштування оновлено", + "action_device_ban": "Пристрій заборонено", + "action_device_unban": "Пристрій розблоковано", + "action_device_delete": "Пристр��й видалено" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Рання функція — генератор пакетів агента в активній розробці.", + "config_options": "Параметри конфігурації", + "server_address": "Адреса сервера", + "server_address_hint": "Домен або IP-адреса вашого сервера", + "custom_port": "Custom Port", + "port_hint": "За замовчуванням залишити пустим (21116)", + "relay_server": "Релейний сервер", + "relay_placeholder": "Те саме, що ідентифікатор сервера, якщо пустий", + "relay_hint": "Додатково: окрема адреса сервера ретрансляції", + "include_key": "Включіть відкритий ключ у конфігурацію", + "generate": "Створити конфігурацію", + "output": "Вихід конфігурації", + "usage_title": "Деталі підключення", + "generated": "Конфігурація створена", + "server_required": "Необхідна адреса сервера", + "nothing_to_copy": "Спочатку згенеруйте конфігурацію", + "bundles_title": "Пакети агентів", + "new_bundle": "Новий комплект", + "editor_title": "Редактор пакетів", + "empty_state": "Щоб почати, виберіть пакет ліворуч або створіть новий.", + "loading": "Завантаження…", + "no_bundles": "Пакетів ще немає. Створіть свій перший.", + "bundle_name": "Назва комплекту", + "bundle_name_hint": "Лише внутрішня мітка — не відображається кінцевим користувачам.", + "short_link": "Коротке посилання для завантаження", + "short_link_hint": "Використовується в публічній URL (/d/…). Лише малі літери, цифри та дефіси (2–32 символи). Автозаповнення з назви пакета — скоротіть для зручнішого поширення (напр. acme).", + "branding_section": "брендинг", + "company_name": "Назва компанії/торгової марки", + "short_text": "Короткий опис", + "contact_email": "Контактна електронна адреса", + "contact_phone": "Контактний телефон", + "contact_url": "Контактний сайт", + "logo": "логотип", + "logo_hint": "PNG, JPEG, SVG або WebP. Максимум 256 Кб.", + "logo_clear": "Видалити логотип", + "primary_color": "Ос��овний колір", + "accent_color": "Колір заголовка", + "default_lang": "Мова за замовчуванням", + "allow_unattended": "Дозволити доступ без нагляду", + "allow_unattended_hint": "Коли ввімкнено, агент показує постійний пароль для доступу оператора.", + "save": "Зберегти пакет", + "revoke": "Відкликати", + "unrevoke": "Увімкнути знову", + "revoked": "Відкликано", + "preview_title": "Попередній перегляд", + "preview_hint": "Приблизний вигляд вікна агента кінцевого користувача.", + "preview_default_name": "Підтр��мка BetterDesk", + "preview_status_ready": "Готовий", + "preview_id": "Ваше посвідчення особи", + "preview_password": "Пароль", + "preview_chat": "Спілкуйтеся зі службою підтримки", + "preview_settings": "Налаштування (лише адміністратор)", + "preview_quit": "Вийти (лише адміністратор)", + "download_link_title": "Посилання для завантаження", + "download_link_hint": "Поділіться цим посиланням з кінцевими користувачами. Вони побачать фірмову сторінку завантаження. Старі hex-посилання працюють і після зміни короткого посилання.", + "open_portal": "відкритий", + "created": "Набір створено", + "saved": "Пакет збережено", + "deleted": "Пакет видалено", + "revoked_ok": "Пакет відкликано", + "unrevoked_ok": "Пакет знову ввімкнено", + "link_copied": "Посилання скопійовано в буфер обміну", + "copy_failed": "Не вдалося скопіювати автоматично — скопіюйте вручну", + "unsaved_confirm": "Скасувати незбережені зміни?", + "confirm_revoke": "Відкликати цей пакет? Посилання для завантаження перестане працювати.", + "confirm_unrevoke": "Знову ввімкнути цей пакет?", + "confirm_delete": "Видалити цей пакет остаточно? Це неможливо скасувати.", "errors": { - "forbidden_title": "Доступ заборонено", - "forbidden_message": "Ви не маєте дозволу на доступ до цього ресурсу.", - "not_found_title": "Сторінка не знайдена", - "not_found_message": "Сторінка, яку ви шукаєте, не існує або була переміщена.", - "server_error_title": "Помилка сервера", - "server_error_message": "Щось пішло не так. Спробуйте пізніше.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Не вдалося завантажити пристрої", - "load_key_failed": "Не вдалося завантажити ключ", - "load_qr_failed": "Не вдалося завантажити QR", - "load_audit_failed": "Не вдалося завантажити журнал аудиту", - "load_users_failed": "Не вдалося завантажити користувачів", - "load_folders_failed": "Не вдалося завантажити папки", - "download_failed": "Помилка завантаження", - "logout_failed": "Помилка виходу", - "password_change_failed": "Не вдалося змінити пароль", - "language_change_failed": "Не вдалося змінити мову", - "ban_failed": "Не вдалося заблокувати пристрій", - "unban_failed": "Не вдалося розблокувати пристрій", - "delete_failed": "Не вдалося видалити пристрій", - "change_id_failed": "Не вдалося змінити ідентифікатор пристрою", - "bulk_delete_failed": "Не вдалося видалити пристрої", - "sync_failed": "Не вдалося синхронізувати статус", - "error": "Error", - "not_found": "Not found", - "server_error": "Помилка сервера", - "load_device_failed": "Не вдалося завантажити пристрій", - "load_orgs_failed": "Не вдалося завантажити організації" + "validation_failed": "Помилка перевірки", + "name_required": "Потрібно вказати назву пакета", + "company_name_required": "Необхідно вказати назву компанії", + "logo_invalid": "Логотип має бути дійсним файлом зображення", + "logo_too_large": "Логотип має бути не менше 256 КБ", + "logo_read_failed": "Не вдалося прочитати файл логотипу", + "primary_color_invalid": "Основний колір має бути шістнадцятковим (наприклад, #2563eb)", + "accent_color_invalid": "Колір заголовка має бути шістнадцятковим значенням (наприклад, #1e293b)", + "contact_url_invalid": "Контактний веб-сайт має бути дійсним URL", + "server_host_required": "Публічна адреса сервера обовʼязкова", + "server_host_invalid": "Gültigen Domainnamen oder IPv4-Adresse eingeben", + "token_failed": "Registrierungstoken konnte nicht generiert werden — Serverkonnektivität prüfen", + "rebuild_revoked": "Ein widerrufenes Paket kann nicht neu erstellt werden — zuerst wieder aktivieren", + "slug_invalid": "Коротке посилання може містити лише малі літери, цифри та дефіси", + "slug_too_short": "Коротке посилання має містити щонайменше 2 символи", + "slug_too_long": "Коротке посилання може містити щонайбільше 32 символи", + "slug_taken": "Це коротке посилання вже використовує інший пакет" }, - "remote": { - "title": "Віддалений робочий стіл", - "connecting": "Підключення...", - "waiting_password": "Очікування пароля", - "authenticating": "Автентифікація...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Потрібен пароль", - "enter_password_for": "Введіть пароль для пристрою", - "password_placeholder": "Пароль пристрою", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Назад до пристроїв", - "fullscreen": "Fullscreen", - "toggle_audio": "Перемкнути аудіо", - "send_keys": "Надіслати ключі", - "scale_mode": "Scale Mode", - "scale_fit": "Припасувати до вікна", - "scale_fill": "Fill Window", - "scale_original": "Оригінальний розмір (1:1)", - "scale_stretch": "Розтягнути до екрана", - "actions": "Actions", - "lock_screen": "Екран блокування", - "restart_remote": "Перезапустіть віддалений пристрій", - "refresh_screen": "Оновити екран", - "clipboard_paste": "Вставити з буфера обміну", - "block_input": "Block Input", - "display_settings": "Налаштування дисплея", - "image_quality": "Якість зображення", - "quality_best": "Найкраще (повна якість, 60 кадрів/с)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Показати віддалений курсор", - "lock_after_session": "Блокування після сеансу", - "privacy_mode": "Режим конфіденційності", - "disable_clipboard": "Вимкнути буфер обміну", - "chat": "Chat", - "chat_placeholder": "Введіть повідомлення...", - "record": "Запис екрана", - "view_only": "Лише перегляд", - "pin_toolbar": "Закріпити панель інструментів", - "monitors": "Monitors", - "select_monitor": "Виберіть Монітор", - "quality_speed": "Швидкість (низька якість, 60 кадрів/с)", - "quality_quality": "Якість (найкраща, 30 кадрів/с)", - "recording_started": "Запис розпочато", - "recording_stopped": "Запис зупинено", - "download_recording": "Завантажити запис", - "e2e_encrypted": "Наскрізне шифрування", - "e2e_key_exchange": "Встановлення безпечного каналу...", - "confirm_restart": "Ви впевнені, що бажаєте перезапустити віддалений пристрій?", - "webcodecs_not_supported": "Ваш браузер не підтримує WebCodecs API. Використовуйте Chrome 94+ або Edge 94+.", - "webcodecs_insecure_context": "WebCodecs недоступний через HTTP. Відео використовує резервне програмне забезпечення. Для найкращої продуктивності використовуйте HTTPS.", - "webcodecs_fallback_active": "Програмний відеодекодер активний (обмежена продуктивність)", - "click_to_start": "Натисніть, щоб почати", - "autoplay_blocked": "Браузер вимагає взаємодії з користувачем, щоб розпочати відтворення відео та аудіо.", - "start_playback": "Розпочати відтворення", - "new_connection": "Нове підключення", - "device_id_placeholder": "Введіть ідентифікатор пристрою", - "http_warning": "Режим HTTP: обмежено програмним декодуванням H.264 (~15 FPS). Використовуйте HTTPS для повної продуктивності (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Передача файлів", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Ця папка порожня", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Помилка передачі", - "file_show_hidden": "Показати приховані файли", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Введіть назву папки:", - "file_parent": "Батьківська папка", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Введіть нове ім'я:", - "file_delete_confirm": "Ви впевнені, що хочете видалити цей елемент?", - "file_cancelled": "Переказ скасовано", - "2fa_required": "Потрібна перевірка 2FA", - "2fa_hint": "Введіть 6-значний код із програми автентифікації", - "2fa_invalid": "Введіть дійсний 6-значний код", - "verify": "Verify", - "use_cdap_fallback": "Використовуйте програму перегляду CDAP", - "cdap_fallback_hint": "Відкрийте легкий переглядач JPEG-запитів, що використовує bd-signal/CDAP замість ретрансляції RustDesk. Корисно, якщо пир офлайн на ретрансляції, але доступний через канал управління агентом.", - "clipboard_empty": "Буфер обміну порожній", - "clipboard_denied": "Доступ до буфера обміну заборонено. Потрібен HTTPS або дозвіл не надано.", - "file_loading": "Завантаження...", - "file_timeout": "Віддалений пристрій не відповідає. Передача файлів може не підтримуватися або вимкнена на віддаленій машині.", - "codec": "Відеокодек", - "codec_auto": "Авто (рекомендовано)" + "legacy_title": "Генератор конфігурації клієнта", + "connection_section": "Підключення до сервера", + "server_host": "Публічна адреса сервера", + "server_host_hint": "Доменне імʼя або публічний IP, де кінцеві користувачі досягають вашого сервера BetterDesk.", + "use_https": "Використовувати HTTPS / WSS (рекомендовано)", + "enrollment_per_device": "По пристрою — затвердіть у Реєстраціях", + "builds_title": "Збірки клієнтів", + "rebuild_all": "Перебудувати всі", + "rebuild_confirm": "Перебудувати всі інсталятори платформ для цього пакету?", + "build_status_ready": "Готово", + "build_status_pending": "Очікує", + "build_status_building": "Збірка", + "build_status_failed": "Помилка", + "server_host_placeholder": "support.example.com oder 203.0.113.10", + "enrollment_token": "Пристрійeregistrierung", + "enrollment_token_pending": "Pro Пристрій nach Genehmigung", + "enrollment_token_set": "Pro Пристрій — in Registrierungen genehmigen", + "enrollment_token_hint": "Jede Installation registriert sich selbst. Neue Пристрійe im Registrierungsbereich genehmigen; der Server stellt dann einen eindeutigen Zugriffsschlüssel pro Computer aus.", + "background_color": "Fensterhintergrund", + "surface_color": "Kartenhintergrund", + "text_color": "Textfarbe", + "text_muted_color": "Gedämpfte Textfarbe", + "status_ready_color": "Farbe des Готово-Indikators", + "header_text_color": "Kopfzeilentextfarbe", + "builds_hint": "Auf diesem Server kompilierte Installationsprogramme für jede Plattform. Nach der Behebung von Toolchain-Fehlern oder der Aktualisierung der Agent-Quellen neu erstellen.", + "builds_loading": "Build-Status wird geladen…", + "builds_empty": "Noch keine Builds in der Warteschlange — Paket speichern oder 'Alle neu erstellen' klicken.", + "rebuilding_all": "Neubuilds werden eingereiht…", + "rebuild_queued": "Alle Plattform-Builds in der Warteschlange", + "builds_summary": "{{ready}} bereit · {{pending}} in Warteschlange · {{building}} wird erstellt · {{failed}} не вдалося", + "build_error_hint": "Помилка збірки", + "preview_help": "Запросити допомогу" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "Сервер ID", + "relay_server": "Релейний сервер", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Перевірка...", + "label": "Status", + "no_signal": "Немає сигналу" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Підключіться через настільний клієнт", + "remote_viewer": "Віддалений перегляд", + "web_remote": "Віддалений доступ через веб", + "details": "Details", + "edit": "Редагувати", + "delete": "Видалити", + "ban": "Ban", + "unban": "Unban", + "save": "зберегти", + "cancel": "Скасувати", + "confirm": "Підтверд��ти", + "close": "Закрити", + "clear": "Clear", + "ok": "OK", + "saved": "Успішно збережено", + "back": "Назад", + "create": "Створити", + "dismiss": "Dismiss", + "view_all": "Переглянути всі", + "cdap_viewer": "Переглядач знімків CDAP", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count}s тому", + "minutes_ago": "{count}m тому", + "hours_ago": "{count}h тому", + "days_ago": "{count}d тому", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Керування користувачами", + "subtitle": "Керуйте користувачами консолі та дозволами", + "add_user": "Add User", + "edit_user": "Редагувати користувача", + "username": "Ім'я користувача", + "username_placeholder": "Введіть ім'я користувача", + "username_hint": "3-32 символи, лише літери, цифри та підкреслення", + "password": "Пароль", + "password_placeholder": "Введіть пароль", + "password_hint": "Мінімум 8 символів зі змішаним регістром, цифрами та символами", + "password_leave_empty": "Залиште пустим, щоб зберегти актуальність", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Створено", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Створити користувача", + "edit": "Редагувати", + "reset_password": "Скинути пароль", + "new_password": "Новий пароль", + "delete_title": "Видалити користувача", + "delete_confirm": "Ви впевнені, що хочете видалити користувача {username}?", + "delete_success": "Користувача успішно видалено", + "user_created": "Користувача створено успішно", + "user_updated": "Користувача успішно оновлено", + "password_reset_success": "Пароль скинуто успішно", + "empty_title": "Користувачів не знайдено", + "empty_text": "Додайте користувачів для керування доступом до консолі", + "fill_required": "Будь ласка, заповніть усі необхідні поля", + "invalid_username": "Ім'я користувача має містити 3-32 символи, лише літери, цифри та підкреслення", + "username_exists": "Ім'я користувача вже існує", + "weak_password": "Пароль занадто слабкий", + "password_too_short": "Пароль має бути не менше 8 символів", + "invalid_role": "Недійсна роль", + "cannot_demote_self": "Ти не можеш понизити себе", + "cannot_delete_self": "Ви не можете видалити свій обліковий запис", + "last_admin": "Неможливо видалити останнього адміністратора", + "admin_only": "Ця функція доступна лише для адміністраторів", + "password_required": "Необхідно ввести пароль", + "not_found": "Користувача не знайдено", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Найкращі методи безпеки", + "tip_strong_passwords": "Використовуйте надійні унікальні паролі для кожного користувача", + "tip_unique_accounts": "Створіть індивідуальні облікові записи для кожної людини", + "tip_viewer_role": "Використовуйте роль переглядача для користувачів, яким потрібен лише доступ для читання", + "tip_operator_role": "Використовуйте роль оператора для користувачів, яким потрібно керувати пристроями, але не користувачами", + "tip_audit_logs": "Регулярно переглядайте журнали аудиту на наявність підозрілої активності", + "role_pro": "Pro (лише API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Адміністратор сервера", + "role_global_admin": "Глобальний адмін", + "organizations": "організації", + "user_organizations": "Організації для {username}", + "no_organizations": "Користувач не приписаний до жодної організації", + "org_removed": "Видалено організаційне призначення", + "server_role_label": "Роль сервера", + "server_role_hint": "Визначає, що користувач може робити на всій консолі (доступ до панелі, конфігурація сервера, аудит тощо).", + "org_membership_section": "Членство в організації", + "org_membership_hint": "Користувач може належати до кількох організацій. Роль організації контролює лише дозволи всередині цієї організації та не залежить від ролі сервера вище.", + "column_organizations": "організації", + "no_orgs_short": "—", + "org_count_one": "Організація {count}", + "org_count_many": "організації {count}", + "all_orgs_assigned": "Користувач уже є членом кожної організації.", + "user_groups": "Групи користувачів", + "user_groups_hint": "Групи користувачів можна використовувати для надання доступу вибраним групам пристроїв.", + "loading_user_groups": "Завантаження груп користувачів...", + "no_user_groups": "Немає доступних груп користувачів", + "create_user_group": "Створити групу", + "edit_user_group": "Редагувати групу користувачів", + "delete_user_group": "Видалити групу користувачів", + "delete_user_group_confirm": "Видалити групу користувачів {name}? Учасники втратять доступ, наданий через цю групу.", + "user_group_created": "Групу користувачів створено", + "user_group_updated": "Групу користувачів оновлено", + "user_group_deleted": "Групу користувачів видалено", + "user_group_not_found": "Групу користувачів не знайдено", + "group_name": "Назва групи", + "group_name_placeholder": "Оператори", + "group_note": "Note", + "group_note_placeholder": "Додаткова примітка", + "group_name_required": "Потрібно вказати назву групи", + "group_members_count": "Учасники {count}", + "provider": "Провайдер", + "provider_local": "Локальний", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Керується провайдером ідентичності", + "provider_managed_hint": "Цей обліковий запис керується зовнішнім провайдером ідентичності (LDAP/AD або SSO). Пароль і роль контролюються провайдером." + }, + "folders": { + "title": "Folders", + "create": "Створити папку", + "edit": "Редагувати папку", + "delete": "Видалити папку", + "name": "Folder Name", + "name_placeholder": "Введіть назву папки", + "name_required": "Потрібно вказати назву папки", + "name_too_long": "Назва папки задовга (максимум 50 символів)", + "color": "Color", + "icon": "Icon", + "not_found": "Папка не знайдена", + "delete_confirm": "Ви впевнені, що хочете видалити цю папку? Пристрої буде скасовано.", + "delete_success": "Папку успішно видалено", + "created": "Папку успішно створено", + "updated": "Папку успішно оновлено", + "no_devices_selected": "Пристрої не вибрано", + "devices_moved": "Пристрої успішно переміщено", + "device_assigned": "Пристрій, призначений папці", + "unassigned": "Unassigned", + "all_devices": "Усі пристрої", + "drag_hint": "Перетягніть пристрої в папки, щоб упорядкувати їх", + "move_to": "Перейти до", + "toggle_sidebar": "Перемкнути бічну панель" + }, + "errors": { + "forbidden_title": "Доступ заборонено", + "forbidden_message": "Ви не маєте дозволу на доступ до цього ресурсу.", + "not_found_title": "Сторінка не знайдена", + "not_found_message": "Сторінка, яку ви шукаєте, не існує або була переміщена.", + "server_error_title": "Помилка сервера", + "server_error_message": "Щось пішло не так. Спробуйте пізніше.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Не вдалося завантажити пристрої", + "load_key_failed": "Не вдалося завантажити ключ", + "load_qr_failed": "Не вдалося завантажити QR", + "load_audit_failed": "Не вдалося завантажити журнал аудиту", + "load_users_failed": "Не вдалося завантажити користувачів", + "load_folders_failed": "Не вдалося завантажити папки", + "download_failed": "Помилка завантаження", + "logout_failed": "Помилка виходу", + "password_change_failed": "Не вдалося змінити пароль", + "language_change_failed": "Не вдалося змінити мову", + "ban_failed": "Не вдалося заблокувати пристрій", + "unban_failed": "Не вдалося розблокувати пристрій", + "delete_failed": "Не вдалося видалити пристрій", + "change_id_failed": "Не вдалося змінити ідентифікатор пристрою", + "bulk_delete_failed": "Не вдалося видалити пристрої", + "sync_failed": "Не вдалося синхронізувати статус", + "error": "Error", + "not_found": "Not found", + "server_error": "Помилка сервера", + "load_device_failed": "Не вдалося завантажити пристрій", + "load_orgs_failed": "Не вдалося завантажити організації" + }, + "remote": { + "title": "Віддалений робочий стіл", + "connecting": "Підключення...", + "waiting_password": "Очікування пароля", + "authenticating": "Автентифікація...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Потрібен пароль", + "enter_password_for": "Введіть пароль для пристрою", + "password_placeholder": "Пароль пристрою", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Назад до пристроїв", + "fullscreen": "Fullscreen", + "toggle_audio": "Перемкнути аудіо", + "send_keys": "Надіслати ключі", + "scale_mode": "Scale Mode", + "scale_fit": "Припасувати до вікна", + "scale_fill": "Fill Window", + "scale_original": "Оригінальний розмір (1:1)", + "scale_stretch": "Розтягнути до екрана", + "actions": "Actions", + "lock_screen": "Екран блокування", + "restart_remote": "Перезапустіть віддалений пристрій", + "refresh_screen": "Оновити екран", + "clipboard_paste": "Вставити з буфера обміну", + "block_input": "Block Input", + "display_settings": "Налаштування дисплея", + "image_quality": "Якість зображення", + "quality_best": "Найкраще (повна якість, 60 кадрів/с)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Показати віддалений курсор", + "lock_after_session": "Блокування після сеансу", + "privacy_mode": "Режим конфіденційності", + "disable_clipboard": "Вимкнути буфер обміну", + "chat": "Chat", + "chat_placeholder": "Введіть повідомлення...", + "record": "Запис екрана", + "view_only": "Лише перегляд", + "pin_toolbar": "Закріпити панель інструментів", + "monitors": "Monitors", + "select_monitor": "Виберіть Монітор", + "quality_speed": "Швидкість (низька якість, 60 кадрів/с)", + "quality_quality": "Якість (найкраща, 30 кадрів/с)", + "recording_started": "Запис розпочато", + "recording_stopped": "Запис зупинено", + "download_recording": "Завантажити запис", + "e2e_encrypted": "Наскрізне шифрування", + "e2e_key_exchange": "Встановлення безпечного каналу...", + "confirm_restart": "Ви впевнені, що бажаєте перезапустити віддалений пристрій?", + "webcodecs_not_supported": "Ваш браузер не підтримує WebCodecs API. Використовуйте Chrome 94+ або Edge 94+.", + "webcodecs_insecure_context": "WebCodecs недоступний через HTTP. Відео використовує резервне програмне забезпечення. Для найкращої продуктивності використовуйте HTTPS.", + "webcodecs_fallback_active": "Програмний відеодекодер активний (обмежена продуктивність)", + "click_to_start": "Натисніть, щоб почати", + "autoplay_blocked": "Браузер вимагає взаємодії з користувачем, щоб розпочати відтворення відео та аудіо.", + "start_playback": "Розпочати відтворення", + "new_connection": "Нове підключення", + "device_id_placeholder": "Введіть ідентифікатор пристрою", + "http_warning": "Режим HTTP: обмежено програмним декодуванням H.264 (~15 FPS). Використовуйте HTTPS для повної продуктивності (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Передача файлів", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Ця папка порожня", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Помилка передачі", + "file_show_hidden": "Показати приховані файли", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Введіть назву папки:", + "file_parent": "Батьківська папка", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Введіть нове ім'я:", + "file_delete_confirm": "Ви впевнені, що хочете видалити цей елемент?", + "file_cancelled": "Переказ скасовано", + "2fa_required": "Потрібна перевірка 2FA", + "2fa_hint": "Введіть 6-значний код із програми автентифікації", + "2fa_invalid": "Введіть дійсний 6-значний код", + "verify": "Verify", + "use_cdap_fallback": "Використовуйте програму перегляду CDAP", + "cdap_fallback_hint": "Відкрийте легкий переглядач JPEG-запитів, що використовує bd-signal/CDAP замість ретрансляції RustDesk. Корисно, якщо пир офлайн на ретрансляції, але доступний через канал управління агентом.", + "clipboard_empty": "Буфер обміну порожній", + "clipboard_denied": "Доступ до буфера обміну заборонено. Потрібен HTTPS або дозвіл не надано.", + "file_loading": "Завантаження...", + "file_timeout": "Віддалений пристрій не відповідає. Передача файлів може не підтримуватися або вимкнена на віддаленій машині.", + "codec": "Відеокодек", + "codec_auto": "Авто (рекомендовано)" + }, + "branding": { + "identity_title": "Ідентичність бренду", + "identity_desc": "Налаштуйте назву та опис програми, що відображаються на консолі", + "app_name": "Назва програми", + "app_description": "Опис програми", + "logo_title": "Логотип", + "logo_desc": "Виберіть, як ваш логотип відображатиметься на бічній панелі та сторінці входу", + "logo_type_icon": "Значок матеріалу", + "logo_type_svg": "SVG-код", + "logo_type_image": "URL зображення", + "logo_icon_name": "Назва іконки", + "logo_icon_hint": "Введіть назву матеріальних значків (наприклад, DNS, хмара, безпека). Перегляньте fonts.google.com/icons", + "logo_svg_code": "SVG-код", + "logo_svg_hint": "Вставте сюди розмітку SVG. Підтримує повні елементи із шляхами та стилями.", + "logo_image_upload": "Завантажити зображення", + "logo_image_choose": "Виберіть файл зображення", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Недійсний тип файлу. Використовуйте PNG, JPG, GIF, WebP або SVG.", + "preview": "Попередній перегляд", + "colors_title": "Колірна схема", + "colors_desc": "Налаштуйте палітру кольорів. Залиште пустим, щоб використовувати значення за умовчанням.", + "colors_backgrounds": "Кольори фону", + "colors_text": "Текст", + "colors_accents": "Акцентні кольори", + "colors_borders": "Межі", + "import_export_title": "Імпорт / Експорт", + "import_export_desc": "Збережіть свою тему як файл JSON або імпортуйте її з іншого екземпляра", + "export_theme": "Експорт теми", + "import_theme": "Імпорт теми", + "reset_defaults": "Скинути до значень за замовчуванням", + "save_branding": "Зберегти брендинг", + "saved": "Фірмовий знак успішно збережено. Перезавантаження...", + "exported": "Тему експортовано", + "imported": "Тему успішно імпортовано. Перезавантаження...", + "import_error": "Не вдалося імпортувати тему. Недійсний формат файлу.", + "reset_confirm": "Ви впевнені, що бажаєте відновити брендинг до стандартних? Це неможливо скасувати.", + "reset_success": "Скидання брендингу до значень за замовчуванням. Перезавантаження...", + "logo_type_text": "Текстовий логотип", + "logo_text": "Текст логотипу", + "logo_text_hint": "Основний текст, який відображається як логотип вашого бренду", + "logo_text_accent": "Акцентний текст", + "logo_text_accent_hint": "Додатковий текст під логотипом (наприклад, назва продукту або слоган)", + "logo_upload_success": "Логотип успішно завантажено.", + "typography_title": "Типографіка", + "typography_desc": "Виберіть шрифти для заголовків і основного тексту. Шрифти завантажуються на сервер для самостійного розміщення.", + "font_heading": "Шрифт заголовка", + "font_heading_hint": "Використовується для заголовків (H1–H6) і текстового логотипу", + "font_body": "Шрифт тіла тексту", + "font_body_hint": "Використовується для основного тексту та елементів інтерфейсу", + "font_search_placeholder": "Пошук шрифтів...", + "font_system_default": "Система за умовчанням", + "font_clear": "Очистити", + "font_cat_all": "Всі", + "font_downloaded_count": "шрифти, завантажені на сервер", + "powered_by": "Працює на:", + "background_title": "Фон і зовнішній вигляд", + "background_desc": "Встановіть фон консолі, градієнт або суцільний колір.", + "bg_type_none": "Немає", + "bg_type_color": "Суцільний колір", + "bg_type_gradient": "Градієнт", + "bg_type_image": "Зображення", + "bg_color": "Колір фону", + "bg_gradient": "CSS-градієнт", + "bg_gradient_hint": "Будь-який дійсний CSS-градієнт, напр. linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Завантажити фонове зображення", + "bg_image_choose": "Вибрати файл зображення", + "bg_image_hint": "PNG, JPG, WebP або GIF. Макс. 8 МБ.", + "bg_image_url": "Шлях до зображення / URL", + "bg_size": "Масштабування зображення", + "bg_size_cover": "Покриття (заповнення екрана)", + "bg_size_contain": "Вміщення (fit)", + "bg_size_auto": "Автоматично (оригінал)", + "bg_blur": "Розмиття фону", + "bg_overlay": "Темне накладення", + "bg_overlay_hint": "Затемнює фон для кращої читабельності.", + "bg_image_too_large": "Зображення занадто велике. Максимальний розмір — 8 МБ.", + "bg_image_invalid_type": "Невірний тип файлу. Використовуйте PNG, JPG, WebP або GIF.", + "bg_upload_success": "Фонове зображення завантажено.", + "login_title": "Сторінка входу", + "login_desc": "Налаштуйте заголовок, підзаголовок і фон екрана входу.", + "login_heading": "Заголовок входу", + "login_heading_placeholder": "З поверненням", + "login_subheading": "Підзаголовок входу", + "login_subheading_placeholder": "Увійдіть до свого облікового запису", + "login_bg_inherit": "Те саме, що й консоль", + "agent_title": "Сторінка завантаження агента", + "agent_desc": "Налаштуйте публічний портал завантаження агента для кінцевих користувачів.", + "agent_show_powered": "Показувати \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Показати посилання BetterDesk у нижньому колонтитулі порталу завантаження.", + "footer_title": "Нижній колонтитул і авторські права", + "footer_desc": "Додайте власний рядок нижнього колонтитула на екрані входу та бічній панелі консолі.", + "footer_text": "Текст нижнього колонтитула", + "footer_text_hint": "напр. авторські права або назва компанії.", + "show_powered": "Показувати посилання \"BetterDesk\"", + "show_powered_hint": "Назва і версія BetterDesk відображаються у нижньому колонтитулі входу та бічній панелі.", + "custom_css_title": "Власний CSS", + "custom_css_desc": "Розширено: введіть власний CSS до консолі та сторінки входу.", + "custom_css_hint": "Використовуйте обережно. Макс. 20 000 символів." + }, + "device_detail": { + "tab_overview": "Огляд", + "tab_tags": "Теги та примітки", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Підключення", + "section_manage": "управління", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Цей пристрій заборонений", + "no_reason": "Причини не вказано", + "tags": "Tags", + "no_tags": "Для цього пристрою не призначено тегів", + "tag_placeholder": "Введіть назву тегу...", + "add_tag": "Add", + "tag_exists": "Цей тег вже існує", + "notes": "Notes", + "notes_placeholder": "Додати примітки про цей пристрій...", + "danger_zone": "Danger Zone", + "action_connect_web": "Підключитися через веб", + "action_connect_web_desc": "Підключіться через віддалений робочий стіл браузера", + "action_native_remote": "BetterDesk Пульт дистанційного керування", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Настільний клієнт", + "action_connect_desktop_desc": "Відкрити в клієнтській програмі для ПК", + "action_change_id_desc": "Змініть реєстраційний ідентифікатор пристрою", + "action_ban_desc": "Заблокувати підключення цього пристрою", + "action_unban_desc": "Дозвольте цьому пристрою знову підключитися", + "action_delete_desc": "Видалити цей пристрій назавжди", + "tab_hardware": "Hardware", + "tab_metrics": "Метрики", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Можливості кодування", + "section_live_metrics": "Живі показники", + "section_current_usage": "Поточне використання", + "section_usage_history": "Історія використання", + "os": "Операційна система", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "Частота ЦП", + "total_memory": "Загальна пам'ять", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Оновлено", + "device_groups": "Групи", + "no_sysinfo": "Інформація про апаратне забезпечення відсутня", + "no_sysinfo_hint": "Інформація про систему з’явиться після того, як пристрій надішле звіт sysinfo", + "no_metrics": "Дані показників відсутні", + "no_metrics_hint": "Показники з’являться після того, як пристрій надішле звіти про пульс", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Файли", + "agent_lazy_hint": "Клацніть цю вкладку, щоб завантажити поточні дані від агента", + "agent_offline": "Агент офлайн", + "agent_timeout": "Агент не відповів вчасно", + "agent_error": "Не вдалося завантажити дані з агента", + "service_name": "Name", + "service_display": "Відображуване ім'я", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Інвентаризація апаратного та програмного забезпечення керованих пристроїв", + "device_id": "ID пристрою", + "hostname": "Hostname", + "os": "Операційна система", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Загальна пам'ять", + "memory_used": "Used Memory", + "memory_available": "Доступна пам'ять", + "memory_usage": "Використання пам'яті", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Мережеві інтерфейси", + "software": "Software", + "software_count": "Встановлене програмне забезпечення", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Фізичні ядра", + "logical_cores": "Логічні ядра", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "в наявності", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "IP-адреси", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Біг колектора", + "collector_stopped": "Колектор зупинено", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Зібрано Ат", + "no_data": "Даних про інвентаризацію ще немає. Натисніть «Зібрати зараз», щоб зібрати інформацію про систему.", + "no_devices": "Пристроїв із даними інвентаризації не знайдено", + "detail_title": "Деталі інвентаризації пристрою", + "telemetry": "Telemetry", + "view_detail": "Переглянути деталі", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Підтримка заявок і відстеження проблем", + "create": "New Ticket", + "edit": "Редагувати квиток", + "delete": "Видалити квиток", + "detail": "Деталі квитка", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Кому призначено", + "created_by": "Створено", + "device": "пристрій", + "sla_due": "SLA Due", + "created_at": "Створено", + "updated_at": "Оновлено", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "відкритий", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Напишіть коментар...", + "internal_note": "Внутрішня примітка (невидима для кінцевих користувачів)", + "attachments": "Attachments", + "upload_attachment": "Завантажити вкладений файл", + "download": "Download", + "connect_device": "Підключитися до пристрою", + "no_tickets": "Квитків не знайдено", + "no_comments": "Поки немає коментарів", + "no_attachments": "Без вкладень", + "title_required": "Необхідно вказати назву", + "delete_confirm": "Ви впевнені, що хочете видалити квиток #{id}?", + "delete_success": "Квиток успішно видалено", + "created_success": "Квиток створено успішно", + "updated_success": "Квиток успішно оновлено", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Пошук квитків...", + "assign_to_me": "Призначте мені", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "відкритий", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Моніторинг діяльності", + "subtitle": "Відстеження викорис��ання програми та простою", + "device": "пристрій", + "hostname": "Hostname", + "sessions": "Сеанси", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Топ програм", + "app_name": "Application", + "window_title": "Заголовок вікна", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Підрахунок сеансів", + "total_active": "Всього активних", + "total_idle": "Total Idle", + "detail_count": "Детальні записи", + "no_data": "Немає даних про діяльність", + "no_sessions": "Немає сесій", + "filter_from": "Від", + "filter_to": "до", + "filter_apply": "Застосувати фільтр", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Пошук пристроїв...", + "date_range": "Date Range", + "device_id": "ID пристрою", + "session_start": "Початок сеансу", + "session_end": "Кінець сеансу", + "user": "User", + "no_activity": "Активність не зареєстрована", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Жодних додатків" + }, + "automation": { + "title": "Автоматизація та сповіщення", + "subtitle": "Правила сповіщень, віддалені команди та налаштування SMTP", + "rules": "Alert Rules", + "rules_subtitle": "Визначте умови, які запускають сповіщення", + "alerts": "Історія сповіщень", + "alerts_subtitle": "Перегляд і підтвердження активованих сповіщень", + "commands": "Віддалені команди", + "commands_subtitle": "Надсилайте команди на віддалені пристрої", + "smtp": "Конфігурація SMTP", + "smtp_subtitle": "Налаштування сповіщень електронною поштою", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Тип умови", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Цільовий пристрій", + "scope_all": "Усі пристрої", + "cooldown": "Час відновлення (секунди)", + "notify_emails": "Сповіщення електронною поштою", + "enabled": "Увімкнено", + "disabled": "В��мкнено", + "create_rule": "Створити правило", + "edit_rule": "Редагувати правило", + "delete_rule": "Видалити правило", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Спрацьовує At", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Більше ніж", + "op_gte": "Більший або рівний", + "op_lt": "Less than", + "op_lte": "Менше або рівно", + "op_eq": "Дорівнює", + "op_neq": "Не дорівнює", + "type_cpu_usage": "Використання ЦП (%)", + "type_memory_usage": "Використання пам'яті (%)", + "type_disk_usage": "Використання диска (%)", + "type_offline_duration": "Тривалість офлайн (с)", + "type_idle_duration": "Тривалість простою (с)", + "type_custom": "Custom", + "command_type": "Тип команди", + "command_payload": "Команда / Скрипт", + "command_result": "Result", + "command_status": "Status", + "send_command": "Надіслати команду", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "Не вдалося", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Ім'я користувача", + "smtp_pass": "Пароль", + "smtp_from": "З адреси", + "smtp_test": "Тестове підключення", + "smtp_save": "Зберегти конфігурацію", + "smtp_test_success": "Підключення успішне", + "smtp_test_failed": "Помилка підключення", + "no_rules": "Правила сповіщень не налаштовано", + "no_alerts": "Жодне сповіщення не активовано", + "no_commands": "Команди не надіслано", + "id_payload_required": "Необхідні ідентифікатор пристрою та корисне навантаження", + "no_commands_sent": "Команди ще не надіслано" + }, + "file_transfer": { + "title": "Передача файлів", + "transfers": "Transfers", + "new_transfer": "Нова передача", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Розмір файлу", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "пристрій", + "initiated_by": "Ініціатор", + "created_at": "Створено Ат", + "cancel": "Скасувати", + "cancel_confirm": "Ви впевнені, що бажаєте скасувати цю передачу?", + "download_file": "Завантажити файл", + "browse_files": "Огляд файлів", + "select_file": "Виберіть Файл", + "select_device": "Виберіть Пристрій", + "no_transfers": "Без передачі файлів", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "Не вдалося", + "status_cancelled": "Cancelled", + "bytes_transferred": "Передані байти", + "chunks": "Chunks", + "transfer_started": "Трансфер розпочато", + "transfer_completed": "Передачу завершено", + "transfer_failed": "Помилка передачі", + "transfer_cancelled": "Переказ скасовано", + "max_file_size": "Максимальний розмір файлу: 4 Гб", + "error_too_large": "Файл завеликий", + "error_no_device": "Пристрій не вибрано", + "error_no_file": "Файл не вибрано" + }, + "network": { + "title": "Моніторинг мереж��", + "targets": "Цілі моніторингу", + "add_target": "Add Target", + "edit_target": "Редагувати ціль", + "delete_target": "Видалити ціль", + "delete_confirm": "Ви впевнені, що бажаєте видалити цю ціль?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Час очікування (мс)", + "interval": "Інтервал (мс)", + "enabled": "Увімкнено", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Перевірте історію", + "stats": "Statistics", + "total_targets": "Загальні цілі", + "targets_up": "Targets Up", + "targets_down": "Цілі вниз", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Мережеві інструменти", + "ping_tool": "Ping Test", + "tcp_tool": "Перевірка порту TCP", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Запустіть Монітор", + "monitor_stop": "Зупинити монітор", + "monitor_running": "Моні��ор працює", + "monitor_stopped": "Монітор зупинено", + "no_targets": "Цілі моніторингу не налаштовано", + "no_history": "Історія перевірок недоступна", + "error_code": "Error", + "status_code": "HTTP Код статусу", + "search_targets": "Цілі пошуку...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Перевірте історію", + "name_host_required": "Потрібно вказати назву та хост", + "uptime": "Uptime", + "response_time": "Час відгуку", + "avg_response": "Середня відповідь", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Час відгуку (мс)", + "uptime_percent": "Uptime %", + "last_24h": "Останні 24 години", + "last_7d": "Last 7 days", + "last_30d": "Останні 30 днів" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "Політики DLP", + "add_policy": "Додати політику", + "edit_policy": "Редагувати політику", + "delete_policy": "Політика видалення", + "delete_confirm": "Ви впевнені, що бажаєте видалити цю політику?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Увімкнено", + "disabled": "В��мкнено", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "Пристрій USB", + "rule_type_file": "Операція з файлами", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "Ідентифікатор постачальника (VID)", + "pid": "Ідентифікатор продукту (PID)", + "serial": "Серійний номер", + "device_class": "Клас пристрою", + "drive_type": "Drive Type", + "file_extensions": "Розширення файлів", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "Файл", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Політики DLP не налаштовано", + "no_events": "Немає записаних подій DLP", + "stats": "Statistics", + "total_events": "Загальна кількість подій", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Файлові події", + "device_id": "ID пристрою", + "policy_matched": "Політика відповідає", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Загальна політика", + "active_policies": "Активні політики", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "політики", + "tab_events": "Events", + "search_policies": "Правила пошуку...", + "create_policy": "Створення політики", + "policy_type": "Тип політики", + "scope": "Scope", + "events_count": "Events", + "search_events": "Пошук подій...", + "event_time": "Event Time", + "device": "пристрій", + "policy": "політика", + "detail": "Detail", + "scope_help": "Ідентифікатори пристроїв, розділені комами, або залиште пустими для всіх", + "scope_all": "Усі пристрої", + "active": "Active", + "type_file_type": "Тип файлу", + "type_clipboard": "Буфер обміну", + "type_screen_share": "Поділитися екраном", + "type_file_transfer": "Передача файлів", + "policy_desc": "Опис політики", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Створити звіт", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Короткий опис пристрою", + "type_activity": "Підсумок діяльності", + "type_security": "Звіт про безпеку", + "type_tickets": "Звіт про квиток", + "type_network": "Звіт про мережу", + "type_inventory": "Звіт про інвентаризацію", + "type_alerts": "Звіт про сповіщення", + "saved": "Збережені звіти", + "save_report": "Зберегти звіт", + "delete_report": "Видалити звіт", + "delete_confirm": "Ви впевнені, що бажаєте видалити цей збережений звіт?", + "no_saved": "Немає збережених звітів", + "report_title": "Title", + "created_by": "Створено", + "created_at": "Створено Ат", + "filters": "Filters", + "date_from": "Від", + "date_to": "до", + "device_filter": "ID пристрою", + "generated_at": "Сформований At", + "section": "Розділ даних", + "total_devices": "Загальна кількість пристроїв", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Розповсюдження платформи", + "top_applications": "Топ програм", + "total_active": "Загальний час активності", + "total_idle": "Загальний час простою", + "dlp_stats": "Статистика DLP", + "banned_devices": "Заборонені пристрої", + "audit_logs": "Audit Logs", + "ticket_stats": "Статистика квитків", + "category_distribution": "Розподіл категорій", + "priority_distribution": "Пріоритетний розподіл", + "targets_status": "Стан цілей", + "os_distribution": "Розповсюдження ОС", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Останні сповіщення", + "tab_generate": "Створити звіт", + "tab_saved": "Збережені звіти", + "type_devices_desc": "Огляд усіх п��истроїв, платформ і статусів", + "type_activity_desc": "Підсумок використання програми та часу простою", + "type_security_desc": "Заборонити дії, події DLP і журнали аудиту", + "type_tickets_desc": "Статистика квитків і виконання SLA", + "type_network_desc": "Цілі моніторингу мережі та дані про безвідмовну роботу", + "type_inventory_desc": "Підсумок інвентаризації обладнання та програмного забезпечення", + "type_alerts_desc": "Правила сповіщень і історія активованих сповіщень", + "report_name": "Report Name", + "format": "Format", + "save": "Зберегти звіт", + "preview": "Preview", + "download": "Download", + "delete_saved": "Видалити звіт", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Редагувати орендаря", + "delete_tenant": "Видалити орендаря", + "delete_confirm": "Ви впевнені, що хочете видалити цього орендаря? Усі призначення пристроїв і користувачів буде видалено.", + "name": "Name", + "slug": "Slug", + "contact_name": "Контактне ім'я", + "contact_email": "Контактна адреса електронної пошти", + "max_devices": "Максимальна кількість пристроїв", + "max_devices_hint": "0 = ��еобмежений", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Пристрої", + "users": "Users", + "assign_device": "Призначити пристрій", + "assign_devices": "Призначити пристрої", + "remove_device": "Видалити пристрій", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Орендарі не налаштовані", + "no_devices": "Цьому орендарю не призначено пристроїв", + "no_users": "Немає користувачів, призначених для цього орендаря", + "stats": "Статистика орендарів", + "total_devices": "Загальна кількість пристроїв", + "online_devices": "Інтернет-пристрої", + "total_users": "Total Users", + "created_at": "Створено Ат", + "updated_at": "Оновлено At", + "slug_exists": "Служба орендаря вже існує", + "total_tenants": "Всього орендарів", + "active_tenants": "Активні орендарі", + "search": "Пошук орендарів...", + "create_tenant": "Створити орендаря", + "detail": "Інформація про орендаря", + "contact": "Contact", + "enabled": "Увімкнено", + "disabled": "В��мкнено", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Пошук за ідентифікатором пристрою, іменем хоста або IP...", + "no_registrations": "No registration requests", + "col_device_id": "ID пристрою", + "col_hostname": "Hostname", + "col_platform": "Платформа", + "col_ip": "IP-адреса", + "col_version": "Версія", + "col_status": "Статус", + "col_requested": "Запитано о", + "col_actions": "Дії", + "status_pending": "Очікує", + "status_approved": "Затверджено", + "status_rejected": "Відхилено", + "approve_btn": "Затвердити", + "approve_confirm": "Ви впевнені, що хочете схвалити цей пристрій? Він отримає облікові дані сервера та зможе підключитися автоматично.", + "approved_success": "Реєстрацію пристрою успішно підтверджено", + "reject_btn": "Відхилити", + "reject_title": "Відмовитися від реєстрації", + "reject_confirm": "Ви впевнені, що бажаєте відхилити цей запит на реєстрацію?", + "reject_reason": "Причина (необов'язково)", + "reject_reason_placeholder": "Введіть причину відмови...", + "rejected_success": "Реєстрацію пристрою відхилено", + "delete_confirm": "Ви впевнені, що бажаєте видалити цей реєстраційний запис?", + "deleted_success": "Реєстраційний запис видалено", + "enrollment_title": "Реєстрація пристрою", + "enrollment_subtitle": "Запити на реєстрацію, що очікують на розгляд, від клієнтів BetterDesk для ПК", + "enrollment_empty": "Немає незавершених запитів на реєстрацію", + "enrollment_approve": "Затвердити", + "enrollment_reject": "Відхилити", + "enrollment_display_name": "Відображуване ім'я", + "enrollment_display_name_placeholder": "Введіть назву цього пристрою...", + "enrollment_sync_mode": "Режим синхронізації", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Реєстрацію пристрою схвалено", + "enrollment_rejected_success": "Реєстрацію пристрою відхилено", + "approve_title": "Затвердження пристрою", + "field_name": "Назва пристрою", + "field_name_placeholder": "Введіть імʼя для цього пристрою...", + "field_sync_mode": "Режим синхронізації", + "sync_standard": "Стандартний — збалансована синхронізація", + "sync_silent": "Тихий — мінімальна телеметрія", + "sync_turbo": "Турбо — агресивна синхронізація", + "field_tags": "Теги", + "field_tags_placeholder": "Теги через кому (напр. офіс, ноутбук)...", + "field_tags_existing": "Існуючі теги", + "field_tag_add_placeholder": "Додати новий тег...", + "field_tag_add_btn": "Додати", + "field_groups": "Групи пристроїв", + "field_folder": "Папка", + "field_folder_none": "Без папки", + "reject_ban_option": "Заблокувати пристрій", + "reject_ban_hint": "Пристрій буде заблоковано і не зможе надсилати нові запити на реєстрацію.", + "banner_open_mode": "Реєстрація відкрита — нові клієнти RustDesk реєструються без затвердження оператора.", + "banner_locked_mode": "Реєстрація заблокована — тільки пристрої з привʼязаним токеном можуть реєструватися.", + "enrollment_settings_link": "Налаштування реєстрації" + }, + "backup": { + "title": "Резервна копія", + "desc": "Завантажте повну резервну копію конфігурації консолі, користувачів, груп і налаштувань. Однорангові дані Go server включені, коли сервер BetterDesk активний.", + "restore_title": "Відновлення", + "restore_desc": "Завантажте попередньо завантажений файл резервної копії, щоб відновити конфігурацію консолі. Нижче виберіть розділи для відновлення.", + "stat_users": "Користувачі", + "stat_settings": "Налаштування", + "stat_folders": "Папки", + "stat_groups": "Групи", + "stat_strategies": "Стратегії", + "stat_backend": "Бекенд", + "download": "Завантажте резервну копію", + "creating": "Створення резервної копії...", + "download_success": "Резервну копію успішно завантажено", + "upload": "Завантажити резервну копію", + "restore_confirm": "Ви впевнені, що бажаєте відновити з цієї резервної копії? Вибрані розділи буде перезаписано.", + "restore_success": "Резервну копію успішно відновлено. Для деяких змін може знадобитися перезавантаження сторінки.", + "restored": "Відновлено", + "skipped": "Пропущено", + "backup_date": "Дата резервної копії", + "opt_settings": "Налаштування консолі", + "opt_branding": "Брендінг / Тема", + "opt_folders": "Папки пристрою", + "opt_groups": "Групи користувачів і пристроїв", + "opt_addressbooks": "Адресні книги", + "opt_users": "Облікові записи користувачів", + "opt_users_warning": "Деструктивний: замінює ВСІ облікові записи користувачів резервними даними. Можливо, ви вийшли з системи.", + "no_file": "Файл резервної копії не вибрано", + "invalid_json": "Недійсний файл резервної копії: недійсний JSON", + "invalid_format": "Недійсний файл резервної копії: це не резервна копія BetterDesk", + "stat_database": "Двигун бази даних", + "stat_keys": "Серверні ключі включено", + "stat_env": "Файл середовища", + "stat_uploads": "Файли брендингу", + "restart_required": "Деякі відновлені компоненти (ключі / .env / база даних Go) потребують перезапуску служби.", + "security_warning": "Ця резервна копія містить секрети. Зберігайте її безпечно і ніколи не діліться нею.", + "restore_warning": "Відновлення секретів або бази даних сервера Go перезапише ідентичність сервера і потребує перезапуску служби.", + "opt_database": "База даних (всі таблиці)", + "opt_database_hint": "Повторно імпортує всі дані консолі. Перезапуск не потрібен.", + "opt_uploads": "Файли брендингу", + "opt_uploads_hint": "Логотипи та завантажені зображення.", + "opt_secrets": "Серверні ключі та секрети", + "opt_secrets_warning": "Перезапише ідентичність сервера Ed25519, API-ключ та секрет сесії. Потрібен перезапуск служби.", + "opt_env": "Файл середовища (.env)", + "opt_env_warning": "Перезапише SESSION_SECRET, API-ключ, DSN бази даних, порти та налаштування TLS. Потрібен перезапуск служби.", + "opt_godb": "База даних сервера Go", + "opt_godb_warning": "Перезапише базу даних SQLite сервера Go (тільки SQLite бекенд). Потрібен перезапуск служби." + }, + "cdap": { + "device_detail": "Пристрій CDAP", + "loading": "Завантаження...", + "loading_widgets": "Завантаження віджетів пристрою...", + "load_error": "Не вдалося завантажити дані пристрою", + "connected": "Підключено", + "disconnected": "Відключено", + "device_offline_msg": "Пристрій зараз офлайн. Значення віджета можуть бути застарілими.", + "no_widgets": "Немає доступних віджетів", + "no_widgets_desc": "Цей п��истрій не зареєстрував маніфест CDAP із визначеннями віджетів.", + "command_log": "Журнал команд", + "clear_log": "Очистити журнал", + "confirm_command": "Підтвердити команду", + "select_option": "Виберіть", + "cdap_status": "Статус CDAP", + "cdap_enabled": "CDAP увімкнено", + "cdap_disabled": "CDAP вимкнено", + "cdap_devices": "CDAP-пристрої", + "cdap_connections": "Активні підключення", + "send_command": "Надіслати команду", + "command_sent": "Команда успішно надіслана", + "command_failed": "Не вдалося надіслати команду", + "devices_title": "Пристрої CDAP", + "devices_subtitle": "Пристрої, підключені через Custom Device Application Protocol", + "stat_connected": "Підключено", + "stat_port": "Порт", + "search_devices": "Пошук пристроїв...", + "no_devices": "Немає підключених пристроїв", + "no_devices_desc": "Наразі не підключено пристрої CDAP. Пристрої з’являться тут, коли вони під’єднаються до шлюзу.", + "gateway_disabled": "CDAP Шлюз вимкнено", + "gateway_disabled_desc": "Увімкніть шлюз CDAP, встановивши CDAP_ENABLED=true у конфігурації сервера.", + "gateway_active": "Активний", + "toggle_enable": "Увімкнути CDAP", + "toggle_disable": "Вимкнути CDAP", + "enabled_restart": "CDAP увімкнено. Для застосування змін потрібен перезапуск сервера.", + "disabled_restart": "CDAP вимкнено. Для застосування змін потрібен перезапуск ��ервера.", + "widgets": "віджети", + "type_all": "Всі", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "ОС-агент", + "type_network": "Мережа", + "type_camera": "Камера", + "type_custom": "Власний", + "active_alerts": "Активні оповіщення", + "alert_fired": "Сповіщення активовано", + "alert_cleared": "Сповіщення видалено", + "no_alerts": "Немає активних сповіщень", + "connect_terminal": "Підключити термінал", + "table_search": "пошук...", + "just_now": "Щойно", + "terminal_connecting": "Підключення до пристрою...", + "terminal_disconnected": "Відключено", + "terminal_error": "Помилка підключення терміналу", + "linked_devices": "Підключені пристрої", + "link_device": "Підключити пристрій", + "unlink_device": "Від'єднати", + "no_linked_devices": "Немає підключених пристроїв", + "unlink_confirm": "Ви впевнені, що хочете від’єднати цей пристрій?", + "link_prompt": "Введіть ідентифікатор однорангового пристрою, щоб підключити його до цього пристрою:", + "connect_desktop": "Підключити робочий стіл", + "connect_video": "Підключити потік", + "connect_files": "Огляд файлів", + "connect_audio": "Підключити аудіо", + "upload_file": "Завантажити", + "desktop_connecting": "Підключення...", + "video_connecting": "Підключення...", + "files_connecting": "Підключення...", + "audio_connecting": "Підключення...", + "audio_streaming": "Стрімінг", + "clipboard_in": "Буфер обміну отримано", + "clipboard_out": "Буфер обміну надіслано", + "monitor_select": "Виберіть Монітор", + "keyframe_request": "Ключовий кадр запиту", + "quality_auto": "Якість авто" + }, + "desktop": { + "switch_mode": "Режим робочого столу", + "console_mode": "Консольний режим", + "loading": "Завантаження...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Закрити", + "widgets_mode": "Віджети", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Додати віджет", + "remove_widget": "Видалити віджет", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Нала��тувати", + "search_widgets": "Пошук віджетів...", + "cat_monitoring": "Monitoring", + "cat_devices": "Пристрої", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Пишіть тут нотатки...", + "search_placeholder": "Пошук пристроїв, сторінок, налаштувань...", + "search_pages": "Pages", + "search_devices": "Пристрої", + "search_no_results": "No results", + "exit_desktop": "Вийти з режиму робочого столу", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Стан пристрою", + "widget_server_health": "Інформація про сервер", + "widget_system_stats": "Датчики приладів", + "widget_device_list": "Список пристроїв", + "widget_quick_actions": "Швидкі дії", + "widget_recent_activity": "Останні дії", + "widget_notes": "Notes", + "widget_network_monitor": "Монітор мережі", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Пристрої CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Сітка пристрою", + "widget_multi_gauge": "Датчики сервера", + "widget_weekly_chart": "Щотижнева діяльність", + "widget_quick_controls": "Швидке керування", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Статистика підключення", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Сеанси користувача", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Немає пристроїв", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "відкритий", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Встановіть URL у конфігурації", + "label_server_uptime": "Час роботи сервера", + "label_merged_info": "Об’єднано у віджет «Інформація про сервер».", + "label_with_notes": "З примітками", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Загальна кількість пристроїв", + "label_throughput": "Throughput", + "label_active_relays": "Активні реле", + "label_total_relayed": "Всього передано", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Фільтруючі пристрої...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Немає пристроїв CDAP", + "action_add_widget": "Додати віджет", + "label_merged_server_info": "Об’єднано у віджет «Інформація про сервер».", + "wp_images": "Images", + "wp_colors": "Суцільні кольори", + "wp_custom_color": "Індивідуальний колір", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Шпалери не встановлені на цьому сервері.", + "wp_download_hint": "Розмістіть зображення PNG у каталозі public/wallpapers/, щоб увімкнути вибір шпалер.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Монітор процесу", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Статистика бази даних", + "widget_docker_containers": "Docker Контейнери", + "widget_shell_command": "Команда оболонки", + "widget_device_map": "Карта пристрою", + "widget_remote_connect": "Віддалене підключення", + "label_no_online": "Немає онлайн-пристроїв", + "label_no_events": "Сьогодні немає подій", + "label_event_title": "Назва події:", + "label_no_data": "Немає даних", + "label_download_speed": "Швидкість завантаження", + "label_latency": "Latency", + "label_server": "Сервер", + "label_run_test": "Run Test", + "label_testing": "Тестування...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Без контейнерів", + "label_docker_unavailable": "Docker недоступний", + "label_no_command": "Команда не налаштована", + "label_no_output": "Виходу ще немає", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Зберегти попередні налаштування", + "label_load_preset": "Load Preset", + "label_preset_name": "Попередня назва:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Автоматичне впорядкування", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 стовпці (рівні)", + "label_2col_wide": "2 колонки (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Група віджетів", + "ungroup_widgets": "Розгрупувати віджети", + "group_widgets": "Згрупуйте вибрані віджети", + "snap_layouts": "Макети прив’язки", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Прив’язка вгорі зліва", + "snap_top_right": "Прив’язка вгорі праворуч", + "snap_bottom_left": "Прив’язка знизу зліва", + "snap_bottom_right": "Прив’язка внизу справа", + "aero_shake": "Струсіть, щоб мінімізувати інші", + "zone_resize": "Перетягніть рамку, щоб змінити розмір зон", + "zone_borders": "Межі зон, які можна перетягувати", + "app_drawer": "Applications", + "search_apps": "Пошук програм...", + "edit_shortcuts": "Редагувати ярлики", + "widgets": "Віджети", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Натисніть будь-де або натисніть клавішу, щоб увійти", + "username_placeholder": "Ім'я користувача", + "password_placeholder": "Пароль", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Двофакторна автентифікація", + "totp_subtitle": "Введіть 6-значний код із програми автентифікації", + "back_to_login": "Назад до входу", + "fill_all_fields": "Будь ласка, заповніть усі поля", + "invalid_credentials": "Недійсне ім'я користувача або пароль", + "invalid_code": "Недійсний код підтвердження", + "enter_6_digits": "Введіть усі 6 цифр", + "network_error": "Network error — check your connection", + "session_expired": "Сеанс закінчився. Увійдіть знову." + }, + "tokens": { + "title": "Жетони пристроїв", + "subtitle": "Керуйте маркерами реєстрації для автоматичного надання пристрою", + "enrollment_mode": "Режим реєстрації", + "mode_open": "відкритий", + "mode_open_desc": "Будь-який пристрій може зареєструватися без токена", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Загальна кількість токенів", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Шукати маркери...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Масова генерація", + "create": "Створити маркер", + "edit": "Редагувати маркер", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Створено", + "actions": "Actions", + "name_placeholder": "напр. Пакет офісних ПК", + "max_uses": "Max Uses", + "max_uses_hint": "0 = ��еобмежений", + "expires_in": "Expires In", + "no_expiration": "Без терміну дії", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Додаткова примітка про цей маркер...", + "count": "Count", + "count_range": "Кількість токенів для генерації (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Маркер створено", + "tokens_generated": "Згенеровані токени", + "copy_warning": "Скопіюйте маркер зараз. Його більше не буде показано.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Ви впевнені, що бажаєте відкликати цей маркер? Це не вплине на вже зареєстровані пристрої.", + "revoked_success": "Маркер успішно відкликано", + "no_tokens": "Токенів не знайдено", + "expired": "Expired", + "never": "Never", + "save": "зберегти", + "cancel": "Скасувати", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Далі", + "prev": "Previous", + "skip": "Skip", + "finish": "Закінчити", + "close": "Закрити", + "step_of": "{current} з {total}", + "console_sidebar_title": "Бічна панель навігації", + "console_sidebar_text": "Доступ до всіх модулів звідси. Натисніть будь-який значок, щоб перейти до цього розділу. Бічна панель адаптується до розміру вашого екрана.", + "console_expand_title": "Розгорніть бічну панель", + "console_expand_text": "Натисніть тут, щоб розгорнути бічну панель і переглянути повні мітки для всіх елементів навігації. Натисніть ще раз, щоб згорнути.", + "console_search_title": "Швидкий пошук", + "console_search_text": "Швидкий пошук пристроїв, налаштувань або дій. Нат��сніть Ctrl+K для комбінації клавіш.", + "console_dashboard_title": "Приладова панель", + "console_dashboard_text": "Ваш центральний центр показує статус сервера, онлайн-пристрої та швидкі дії. Слідкуйте за важливими показниками з першого погляду.", + "console_devices_title": "Управління пристроєм", + "console_devices_text": "Переглядайте, шукайте та керуйте всіма підключеними пристроями. Фільтруйте за статусом, призначайте теги та налаштовуйте окремі параметри пристрою.", + "console_settings_title": "Налаштування", + "console_settings_text": "Налаштуйте поведінку сервера, параметри безпеки, брендинг і керування користувачами. Налаштуйте BetterDesk відповідно до своїх потреб.", + "console_desktop_title": "Режим робочого столу", + "console_desktop_text": "Перейдіть у режим робочого столу, щоб отримати віконну робочу область із віджетами. Ідеально підходить для багатозадачності та панелей моніторингу.", + "console_complete_title": "Ви готові!", + "console_complete_text": "Перегляньте категорії бічної панелі, щоб дізнатися про всі функції. Клацніть значок «Довідка» в будь-який час, щоб перезапустити цей посібник.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Верхня панель показує годинник, елементи швидкого керування та доступ до панелі програм. Натисніть значок сітки, щоб переглянути всі програми.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Відкрийте ящик програми, щоб шукати та запускати будь-яку функцію консолі як плаваюче вікно. Програми впорядковано за категоріями.", + "desktop_widgets_title": "Інформаційна панель віджетів", + "desktop_widgets_text": "Ваш настроюваний робочий простір. Віджети відображають інформацію в реальному часі та забезпечують швидкий доступ до функцій. Перетягніть, щоб змінити порядок.", + "desktop_add_widget_title": "Додайте віджети", + "desktop_add_widget_text": "Натисніть тут, щоб переглянути доступні віджети. Виберіть дисплеї моніторингу, списки пристроїв, нотатки тощо.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Тут відображаються відкриті програми. Натисніть, щоб сфокусувати або згорнути вікна. Наведіть курсор, щоб побачити мітки програм.", + "desktop_snap_title": "Макети прив’язки", + "desktop_snap_text": "Перетягніть вікна до країв екрана, щоб зафіксувати їх у потрібному місці, або наведіть курсор на кнопку розгортання, щоб отримати попередні налаштування макета. Спробуйте Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Програми відкриваються у вікнах, які можна перетягувати та змінювати розмір. Згорніть, розгорніть або закрийте в рядку заголовка. Шар Windows над віджетами.", + "desktop_search_title": "Швидкий пошук", + "desktop_search_text": "Шукайте на різних пристроях, сторінках і налаштуваннях. Натисніть Ctrl+K будь-де, щоб миттєво відкрити пошук.", + "desktop_complete_title": "Режим робочого столу готовий!", + "desktop_complete_text": "Спробуйте відкрити програми з ящика та розташувати вікна поруч. Використовуйте стилі віджетів для швидкого створення макетів інформаційної панелі.", + "devices_folders_title": "Папки пристрою", + "devices_folders_text": "Упорядковуйте пристрої в папки. Натисніть папку, щоб відфільтрувати список. Клацніть правою кнопкою миші, щоб перейменувати або видалити.", + "devices_search_title": "Пошук і фільтр", + "devices_search_text": "Пошук за ідентифікатором, іменем хоста або платформою. Використовуйте таблички стану, щоб показувати лише онлайн, офлайн або всі пристрої.", + "devices_table_title": "Список пристроїв", + "devices_table_text": "Натисніть будь-який рядок пристрою, щоб отримати докладнішу інформацію. Використовуйте меню kebab праворуч для швидких дій, як-от підключення, редагування тегів або видалення.", + "devices_complete_title": "Керування пристроєм готове!", + "devices_complete_text": "Перетягуйте пристрої між папками, щоб упорядкувати їх. Двічі клацніть пристрій, щоб відкрити його панель деталей.", + "settings_tabs_title": "Категорії налаштувань", + "settings_tabs_text": "Переходьте між розділами «Загальні», «Безпека», «Вигляд» та іншими розділами конфігурації.", + "settings_content_title": "Конфігурація", + "settings_content_text": "Кожен розділ містить певні налаштування сервера та консолі. Зміни зберігаються, коли ви натискаєте «Зберегти».", + "settings_complete_title": "Огляд налаштувань", + "settings_complete_text": "Перевірте налаштування безпеки для ключів 2FA, API і керування користувачами. Відвідайте Appearance, щоб налаштувати вигляд консолі.", + "help": "Допомога та навчальні посібники", + "tour_console": "Консольний тур", + "tour_desktop": "Екскурсія в режимі робочого столу", + "tour_devices": "Екскурсія по приладах", + "tour_settings": "Огляд налаштувань", + "reset_all": "Скинути всі підручники", + "tour_remote": "Огляд віддаленого сеансу", + "tour_organization": "Налаштування організації", + "tour_cdap": "Огляд CDAP", + "tour_chat": "Основи чату", + "remote_toolbar_title": "Віддалена панель інструментів", + "remote_toolbar_text": "Доступ до елементів керування дисплеєм, синхронізації буфера обміну, спеціальних клавіш і налаштувань якості з панелі інструментів. Перемкніть повноекранний режим за допомогою F11.", + "remote_canvas_title": "Віддалений дисплей", + "remote_canvas_text": "Це віддалений екран. Клацніть всередині, щоб почати керувати віддаленим пристроєм. Введення за допомогою миші та клавіатури пересилаються автоматично.", + "remote_clipboard_title": "Синхронізація буфера обміну", + "remote_clipboard_text": "Копіюйте та вставляйте текст між комп’ютером і віддаленим пристроєм. Використовуйте Ctrl+C / Ctrl+V як зазвичай, поки фокусується на віддаленому дисплеї.", + "remote_complete_title": "Віддалений сеанс готовий!", + "remote_complete_text": "Ви��ористовуйте кнопки панелі інструментів для спеціальних клавіш (Ctrl+Alt+Del, PrintScreen) і перемикання моніторів. Щоб завершити сеанс, натисніть Escape або клацніть «Відключити».", + "org_overview_title": "організації", + "org_overview_text": "Організації дозволяють групувати користувачів, пристрої та правила. Кожна організація має власного адміністратора, операторів і налаштування.", + "org_create_title": "Створити організацію", + "org_create_text": "Натисніть тут, щоб створити нову організацію. Введіть ім’я, слаг і необов’язковий опис. Ви будете власником нової організації.", + "org_members_title": "Керувати учасниками", + "org_members_text": "Запрошуйте користувачів електронною поштою, призначайте ролі (адміністратор, оператор, користувач) і керуйте доступом. Учасники можуть бачити пристрої, призначені їхній організації.", + "org_devices_title": "Призначити пристрої", + "org_devices_text": "Додайте пристрої до організації. Пристрої, призначені тут, успадковуватимуть політики організації та будуть видимі для її учасників.", + "org_policies_title": "Політика організації", + "org_policies_text": "Встановіть для організації правила безпеки, як-от вимоги до пароля, час очікування сеансу, застосування 2FA та правила реєстрації пристроїв.", + "org_complete_title": "Налаштування організації завершено!", + "org_complete_text": "Запросіть свою команду та призначте пристрої, щоб почати використовувати керування на рівні організації. Політика автоматично застосовується до всіх учасників.", + "cdap_devices_title": "CDAP-пристрої", + "cdap_devices_text": "Переглядайте всі підключені CDAP-пристрої — IoT-датчики, ПЛК, мости та власні агенти. Зелені індикатори показують активні підключення.", + "cdap_widgets_title": "Панель віджетів", + "cdap_widgets_text": "Віджети відображають дані пристроїв в реальному часі. Прилади, перемикачі, LED, графіки — кожен тип відображає різні дані.", + "cdap_commands_title": "Відправка команд", + "cdap_commands_text": "Взаємодійте з пристроями, відправляючи команди. Журнал команд зберігає історію.", + "cdap_terminal_title": "Термінал пристрою", + "cdap_terminal_text": "Відкрийте термінальну сесію до CDAP-агентів для розширеної діагностики або ручного налаштування.", + "cdap_complete_title": "Огляд CDAP завершено!", + "cdap_complete_text": "Досліджуйте віджети пристроїв, відправляйте команди та використовуйте термінал або файловий браузер для глибшого управління.", + "chat_contacts_title": "Контакти та групи", + "chat_contacts_text": "Перегляньте свої контакти та групи чату. Натисніть будь-який контакт, щоб відкрити розмову. Зелені точки позначають онлайн-користувачів.", + "chat_send_title": "Надсилати повідомлення", + "chat_send_text": "Введіть своє повідомлення та натисніть Enter, щоб надіслати. Повідомлення мають наскрізне шифрування, якщо обидві сторони підтримують E2E.", + "chat_file_title": "Поділитися файлами", + "chat_file_text": "Щоб поділитися файлами, натисніть значок вкладення. Файли зашифровані і можуть мати розмір до 50 Мб.", + "chat_complete_title": "Чат готовий!", + "chat_complete_text": "Спілкуйтеся з операторами та кінцевими користувачами в режимі реального часу. Створюйте групи для командного спілкування. Усі повідомлення підтримують сповіщення про прочитання.", + "disable_tutorials": "Вимкнути посібники", + "enable_tutorials": "Увімкнути посібники" + }, + "help_request": { + "title": "Запити на допомогу", + "subtitle": "Керуйте вхідними запитами на допомогу від настільних клієнтів", + "new_request": "Новий запит на допомогу", + "device": "пристрій", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Немає запитів на допомогу", + "notification": "Запит на допомогу отримано від", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "організації", + "create": "Створити організацію", + "edit": "Редагувати організацію", + "detail": "Деталі організації", + "name": "Name", + "slug": "Слимак (URL-безпечний)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Пристрої", + "invitations": "Invitations", + "settings": "Налаштування", + "add_user": "Add User", + "assign_device": "Призначити пристрій", + "create_invitation": "Створити запрошення", + "delete_confirm": "Видалити цю організацію? Це призведе до видалення всіх пов’язаних користувачі��, пристроїв і налаштувань.", + "no_orgs": "Організацій ще немає", + "no_orgs_hint": "Створіть свою першу організацію, щоб почати керувати пристроями та користувачами.", + "connection_policy": "Політика підключення", + "allow_file_transfer": "Дозволити передавання файлів", + "allow_clipboard": "Дозволити буфер обміну", + "max_session_duration": "Максимальна тривалість сеансу (хв.)", + "role_owner": "Owner", + "role_admin": "Адміністратор", + "role_operator": "Operator", + "role_user": "Учасник", + "username": "Ім'я користувача", + "password": "Пароль", + "display_name": "Відображуване ім'я", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID пристрою", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Призначений користувач", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "У цій організації немає користувачів.", + "no_devices": "Немає пристроїв, призначених цій організації.", + "no_invitations": "Без запрошень.", + "user_added": "User added", + "user_removed": "Користувач видалений", + "user_updated": "Роль користувача оновлено", + "device_assigned": "Пристрій призначено", + "device_unassigned": "Пристрій не призначено", + "invitation_created": "Запрошення створено", + "settings_saved": "Налаштування збережено", + "org_deleted": "Організацію видалено", + "confirm_remove_user": "Видалити цього користувача з організації?", + "confirm_unassign_device": "Скасувати призначення цього пристрою організації?", + "confirm_delete_org": "Видалити цю організацію та всі пов’язані з нею дані?", + "edit_role": "Редагувати роль", + "raw_settings": "Необроблені налаштування", + "key": "Key", + "value": "Value", + "save": "Зберегти налаштування", + "policy_unattended": "Без нагляду (миттєво)", + "policy_attended": "Відвідував (з підтвердженням)", + "policy_ask": "Always ask", + "expires_hours": "Термін дії (годин)", + "loading_failed": "Не вдалося завантажити дані організації", + "name_slug_required": "Потрібно вказати ім’я та слаг", + "org_created": "Організація створена", + "org_updated": "Організація оновлена", + "create_new_user": "Створити новий", + "add_existing_user": "Додати існуючий", + "none_available": "none", + "select_user": "Виберіть користувача", + "org_role": "Роль організації", + "link_user_hint": "Вибраного користувача буде пов’язано з цією організацією за допомогою облікових даних його сервера.", + "no_available_users": "Усі користувачі сервера вже пов’язані з цією організацією.", + "user_linked": "Користувач пов'язаний з організацією" + }, + "chat": { + "e2e_enabled": "Наскрізне шифрування", + "e2e_establishing": "Встановлення безпечного каналу...", + "e2e_established": "Захищений канал встановлено", + "e2e_unsupported": "Шифрування E2E не підтримується в цьому браузері", + "typing_indicator": "друкую...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "Файл", + "file_too_large": "Файл завеликий (макс. 50 МБ)", + "file_encrypted": "Зашифрована передача файлів", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Ключі безпеки повернуто", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Групи", + "no_contacts": "Контактів ще немає", + "no_groups": "Груп ще немає", + "no_messages": "Поки немає повідомлень", + "no_results": "Результатів не знайдено", + "select_conversation": "Виберіть розмову, щоб розпочати спілкування", + "type_message": "Введіть повідомлення...", + "send": "Надіслати", + "attach_file": "Прикріпити файл", + "emoji": "Emoji", + "search_messages": "Пошук повідомлень", + "create_group": "Створити групу", + "group_name": "Назва групи", + "group_members": "Члени", + "cancel": "Скасувати", + "create": "Створити", + "members": "членів", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Пошук контактів і повідомлень", + "select_conversation_hint": "Виберіть розмову, щоб переглянути повідомлення", + "info": "Info", + "group_name_placeholder": "Введіть назву групи" + }, + "toast": { + "device_connected": "Пристрій підключено", + "device_disconnected": "Пристрій відключено", + "session_started": "Віддалений сеанс розпочато", + "session_ended": "Віддалений сеанс завершено", + "file_upload_complete": "Завантаження файлу завершено", + "settings_saved": "Налаштування збережено", + "error_generic": "Сталася помилка", + "connection_lost": "З'єднання втрачено", + "reconnecting": "Повторне підключення..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Утиліти адміністратора та засоби діагностики", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Надіслати", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Введіть текст...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Журнал Go-сервера", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Перевірте доступність хоста та затримку", + "tcp_title": "Перевірка порту TCP", + "tcp_desc": "Перевірте підключення порту TCP", + "ssl_title": "Інспектор SSL", + "ssl_desc": "Перегляньте деталі сертифіката SSL/TLS", + "http_title": "HTTP Перевірка працездатності", + "http_desc": "Перевірте стан кінцевої точки HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Перетворення імені хоста на IP-адресу", + "whois_title": "DNS Records", + "whois_desc": "Записи запиту A, AAAA, MX, TXT, NS", + "speed_title": "Speed Test", + "speed_desc": "Виміряйте пропускну здатність завантаження", + "run_speed_test": "Запустіть тест швидкості", + "wol_title": "Wake-on-LAN", + "wol_desc": "Надішліть магічний пакет, щоб розбудити пристрій", + "wol_sent": "Чарівний пакет надіслано", + "hash_title": "Хеш-генератор", + "hash_desc": "Створення криптографічних хешів", + "password_title": "Генератор паролів", + "password_desc": "Згенеруйте безпечний випадковий пароль", + "jwt_title": "JWT Decoder", + "jwt_desc": "Розшифруйте та перевірте веб-токени JSON", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Кодувати або декодувати дані Base64", + "url_title": "URL Encoder", + "url_desc": "Кодувати або декодувати компоненти URL", + "processes_title": "Список процесів", + "processes_desc": "Перегляньте запущені системні процеси", + "disk_title": "Disk Usage", + "disk_desc": "Перегляньте використання розділу диска", + "db_title": "Статистика бази даних", + "db_desc": "Перегляд статистики таблиці бази даних", + "docker_title": "Docker Контейнери", + "docker_desc": "Перегляньте запущені контейнери Docker", + "logs_title": "Log Viewer", + "logs_desc": "Переглянути останні результати журналу", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Діє з", + "valid_to": "Діє до", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Немає даних", + "no_docker": "Контейнери Docker не знайдено або Docker недоступний", + "no_logs": "Немає рядків журналу" + }, + "policies": { + "title": "Політика організації", + "subtitle": "Керуйте правилами безпеки, підключення та функцій для своїх організацій", + "select_org": "організація", + "select_org_placeholder": "Виберіть організацію...", + "select_org_first": "Виберіть організацію, щоб переглянути журнал аудиту політики.", + "configured": "Налаштовано", + "connection_title": "Політика підключення", + "connection_desc": "Керуйте встановленням віддалених сеансів", + "connection_mode": "Режим підключення", + "mode_attended": "Відвідував (потрібне схвалення користувача)", + "mode_unattended": "Без нагляду (завжди дозволяти)", + "mode_ask": "Завжди питати", + "max_session": "Максимальна тривалість сеансу (хвилини)", + "idle_lock": "Час очікування блокування в режимі очікування (хвилини)", + "wallpaper_policy": "Шпалери під час сеансу", + "wallpaper_show": "Показувати", + "wallpaper_hide_session": "Сховати під час сеансу", + "wallpaper_hide_always": "Завжди приховувати", + "features_title": "Політика функцій", + "features_desc": "Увімкніть або вимкніть певні функції для пристроїв", + "allow_file_transfer": "Дозволити передавання файлів", + "allow_clipboard": "Дозволити синхронізацію буфера обміну", + "allow_audio": "Дозволити потокове аудіо", + "allow_recording": "Дозволити запис сеансу", + "security_title": "Політика безпеки", + "security_desc": "Дотримання вимог безпеки для пристроїв організації", + "require_2fa": "Вимагати 2FA для автоматичного доступу", + "password_min_length": "Мінімальна довжина пароля", + "password_require_special": "Вимагати спеціальних символів", + "password_max_age": "Максимальний вік пароля (дні, 0=ніколи)", + "allowed_operators": "Дозволені ролі оператора (розділені комами)", + "network_title": "Мережева політика", + "network_desc": "Керуйте серверами ретрансляції та прямими з’єднаннями", + "block_direct_p2p": "Block Direct P2P (примусове реле)", + "allowed_relays": "Дозволені сервери ретрансляції (по одному на рядок)", + "ip_allowlist": "Білий список IP-адрес (CIDR, по одному на рядок)", + "update_title": "Політика оновлення", + "update_desc": "Керуйте автоматичними оновленнями та оновлюйте канали", + "auto_update": "Увімкнути автоматичне оновлення", + "update_channel": "Оновити канал", + "audit_title": "Зміни політики", + "audit_desc": "Історія останніх змін політики", + "no_audit": "Змін політики не зареєстровано.", + "save_success": "Політику успішно збережено", + "save_failed": "Не вдалося зберегти політику", + "load_failed": "Не вдалося завантажити правила", + "block_direct_p2p_hint": "Застосовується до цієї організації." + }, + "attestation": { + "title": "Атестація пристрою", + "subtitle": "Відстежуйте перевірку ідентифікації пристрою та апаратних відбитків", + "verified": "Verified", + "pending": "Pending", + "failed": "Не вдалося", + "device_list": "Записи про атестацію пристрою", + "device_list_desc": "Апаратні відбитки пальців і статус підтвердження особи", + "col_device": "ID пристрою", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Атестаційних записів не знайдено.", + "verify_success": "Пристрій позначено як перевірений", + "verify_failed": "Не вдалося перевірити пристрій", + "revoke_success": "Атестацію пристрою скасовано", + "revoke_failed": "Не вдалося скасувати атестацію" + }, + "fleet": { + "title": "Управління автопарком", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Конструктор робочих процесів", + "tab_compliance": "Compliance", + "res_title": "Відображення ресурсів", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Мережевий диск", + "res_type_dns": "Сервер DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Додати ресурс", + "res_name": "Назва ресурсу", + "res_type": "Type", + "res_address": "Адреса / шлях", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "організація", + "res_scope_group": "Група", + "res_scope_device": "пристрій", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Ресурси не знайдено. Натисніть «Додати ресурс», щоб створити його.", + "res_confirm_delete": "Ви впевнені, що хочете видалити цей ресурс?", + "task_title": "Планувальник завдань", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "Не вдалося", + "task_search": "Search tasks…", + "task_create": "Створити завдання", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "оновлення", + "task_type_restart": "Перезапустіть", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "Ідентифікатори пристроїв або назви груп, розділені комами", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Значення розкладу", + "task_script": "Сценарій / Команда", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Завдань не знайдено. Щоб розпочати, натисніть «Створити завдання».", + "task_confirm_delete": "Ви впевнені, що хочете видалити це завдання?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Конструктор робочих процесів", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "зберегти", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Виберіть вузол, щоб змінити його властивості.", + "builder_node_trigger_manual": "Ручний тригер", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Тригер події", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Перезапустіть Svc", + "builder_node_action_file_deploy": "Розгорнути файл", + "builder_node_action_message": "Надіслати повідомлення", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Надіслати сповіщення", + "builder_node_result_chain": "Ланцюговий робочий процес", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Назва робочого процесу:", + "comp_title": "Відповідність програмного забезпечення", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "пристрій", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Запустити автоматичне виправлення на цьому пристрої?", + "comp_no_data": "Немає даних про відповідність. Запустіть сканування, щоб почати.", + "save": "зберегти", + "cancel": "Скасувати", + "close": "Закрити", + "edit": "Редагувати", + "delete": "Видалити", + "actions": "Actions", + "all_orgs": "Усі організації", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Мережевий диск", + "type_dns": "Сервер DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Додати ресурс", + "edit_resource": "Редагувати ресурс", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Адреса / шлях", + "scope_org": "організація", + "scope_group": "Група", + "scope_device": "пристрій", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Ви впевнені, що хочете видалити цей елемент?", + "all_statuses": "Всі статуси", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "Не вдалося", + "search_tasks": "Search tasks�", + "create_task": "Створити завдання", + "edit_task": "Редагувати завдання", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Розгортання файлів", + "task_type_registry": "Registry", + "target_devices": "Цільові пристрої", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Сценарій / Команда", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Завантаження", + "no_output": "Немає вихідних даних", + "error_loading": "Помилка завантаження даних", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Ручний тригер", + "node_schedule": "Schedule", + "node_event": "Тригер події", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Перезапустіть Svc", + "node_file_deploy": "Розгорнути файл", + "node_send_message": "Надіслати повідомлення", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Надіслати сповіщення", + "node_chain": "Ланцюговий робочий процес", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Усі організації", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "пристрій", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Запустити автоматичне виправлення на цьому пристрої?" + }, + "scaling": { + "title": "Масштабування та керування ретрансляцією", + "tab_overview": "Огляд", + "tab_relays": "Relay Nodes", + "tab_rules": "Правила призначення", + "tab_capacity": "Планування потужностей", + "arch_title": "Архітектура мережі", + "arch_loading": "Завантаження діаграми архітектури...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Загальна кількість пристроїв", + "stat_active_sessions": "Активні сесії", + "stat_bandwidth": "Загальна пропускна здатність", + "relay_health": "Естафета здоров'я", + "no_relays": "Вузли ретрансляції не налаштовані. Додайте свій перший вузол ретрансляції, щоб розподілити навантаження.", + "relay_search": "Пошук реле...", + "relay_add": "Додати вузол ретрансляції", + "relay_edit": "Редагувати вузол ретрансляції", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Пристрої", + "col_sessions": "Сеанси", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Цільова естафета", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Увімкнено", + "status_disabled": "В��мкнено", + "confirm_delete_relay": "Ви впевнені, що хочете видалити цей вузол ретрансляції?", + "confirm_delete_rule": "Ви впевнені, що бажаєте видалити це правило призначення?", + "rules_hint": "Правила призначення визначають, який сервер ретрансляції обробляє певні групи пристроїв. Правила оцінюються за пріоритетом (спочатку найнижчі).", + "rule_add": "Add Rule", + "rule_edit": "Редагувати правило", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Група пристроїв", + "match_tag": "Тег пристрою", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Головний сервер", + "fallback_nearest": "Найближчий реле", + "relay_max_sessions": "Максимальна кількість сеансів", + "relay_max_bandwidth": "Максимальна пропускна здатність (Мбіт/с)", + "cap_tiers": "Рівні потужності", + "cap_loading": "Завантаження даних про ємність...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Немає рекомендацій.", + "cap_planning": "Планування інфраструктури", + "cap_config": "Конфігурація", + "cap_max_devices": "Максимальна кількість пристроїв", + "cap_max_sessions": "Максимальна кількість сеансів", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Ємність пристрою", + "cap_tier_sessions": "Ємність сесії", + "cap_tier_bandwidth": "Пропускна здатність", + "cap_single_sqlite": "Один сервер (SQLite)", + "cap_single_pg": "Один сервер (PostgreSQL)", + "cap_master_3": "Майстер + 3 реле", + "cap_master_10": "Майстер + 10 реле", + "rec_no_relays": "Вузли ретрансляції не налаштовані. Розгляньте можливість додавання вузлів ретрансляції для кращої продуктивності та резервування.", + "rec_devices_high": "Коефіцієнт використання пристрою високий. Розгляньте можливість додавання додаткових вузлів ретрансляції для розподілу навантаження.", + "rec_sessions_high": "Ємність сеансу наближається до межі. Розгляньте можливість модернізації інфраструктури ретрансляції.", + "rec_cpu_high": "Деякі вузли ретрансляції повідомляють про високе використання ЦП. Розгляньте можливість балансування навантаження або підвищення ємності.", + "rec_all_good": "Всі системи працюють в межах нормальн��х параметрів. Ніяких дій не потрібно.", + "save": "зберегти", + "cancel": "Скасувати", + "edit": "Редагувати", + "delete": "Видалити", + "close": "Закрити", + "no_rules": "Немає правил призначення.", + "relays_info_banner": "Цей список є інформаційним. Сервери ретрансляц��ї, які фактично використовуються клієнтами, налаштовуються за допомогою змінної середовища RELAY_SERVERS на сервері BetterDesk.", + "relay_name_address_required": "Ім'я та адреса обов'язкові.", + "relay_save_failed": "Не вдалося зберегти вузол ретрансляції.", + "relay_delete_failed": "Не вдалося видалити вузол ретрансляції.", + "relay_saved": "Вузол ретрансляції збережено.", + "relay_deleted": "Вузол ретрансляції видалено.", + "rule_name_value_required": "Потрібно вказати назву правила та значення відповідності.", + "rule_save_failed": "Не вдалося зберегти правило.", + "rule_delete_failed": "Не вдалося видалити правило.", + "rule_saved": "Правило збережено.", + "rule_deleted": "Правило видалено." + }, + "cross_platform": { + "title": "Кросплатформна сумісність", + "tab_matrix": "Матриця сумісності", + "tab_distribution": "Розподіл", + "tab_protocols": "Протоколи", + "tab_limitations": "Обмеження", + "matrix_hint": "Матриця підтримки функцій на всіх підтримуваних платформах. Зелений = повна підтримка, жовтий = часткова, сірий = недоступний, синій = планується.", + "col_feature": "Функція", + "legend_full": "Повна підтримка", + "legend_partial": "Часткова підтримка", + "legend_none": "Не доступний", + "legend_planned": "Заплановано", + "platform_breakdown": "Поломка платформи", + "arch_breakdown": "Розбивка архітектури", + "version_breakdown": "Розбивка версій", + "summary": "Підсумок", + "total_devices": "Загальна кількість пристроїв", + "unique_platforms": "Платформи", + "unique_archs": "Архітектури", + "unique_versions": "Клієнтські версії", + "no_devices": "Ще немає зареєстрованих пристроїв.", + "protocols_hint": "Узгодження можливостей протоколу гарантує, що кожен клієнт отримує лише ті функції, які він підтримує. Сервер адаптує поведінку на основі повідомлених можливостей.", + "capability_negotiation": "Обговорення можливостей", + "codec_support": "Підтримка кодеків (онлайн-пристрої)", + "feature_support": "Підтримка функцій (онлайн-пристрої)", + "no_codec_data": "Немає доступних кодеків із онлайн-пристроїв.", + "no_feature_data": "Немає даних про функції з онлайн-пристроїв.", + "protobuf_schema": "Схема Protobuf ClientCapabilities", + "diagram_client": "Клієнт", + "diagram_server": "Сервер BetterDesk", + "diagram_peer": "Клієнтський вузол", + "limitations_hint": "Кожна платформа має певні обмеження, які впливають на доступні функції. Перегляньте ці обмеження під час планування розгортання.", + "feat_desktop_client": "Настільний клієнт", + "feat_background_agent": "Фоновий агент", + "feat_remote_target": "Віддалена ціль", + "feat_screen_capture": "Захоплення екрана", + "feat_input_injection": "Вхідна ін'єкція", + "feat_file_transfer": "Передача файлів", + "feat_clipboard_sync": "Синхронізація буфера обміну", + "feat_audio_streaming": "Потокове аудіо", + "feat_chat": "Чат", + "feat_h264": "Кодек H.264", + "feat_vp9": "Кодек VP9", + "feat_av1": "Кодек AV1", + "feat_cdap_agent": "CDAP-агент", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Веб-браузер", + "platform_chromeos": "ChromeOS", + "status_production": "Виробництво", + "status_testing": "Тестування", + "status_planned": "Заплановано", + "status_limited": "Обмежено", + "status_experimental": "Експериментально", + "limit_win_uac": "Підвищення UAC потрібне для інсталяції служби та введення даних на захищених настільних комп’ютерах.", + "limit_win_service": "Працює як служба NSSM; для встановлення потрібні права адміністратора.", + "limit_win_firewall": "Windows Правила брандмауера мають дозволяти порти 21115-21119 для релейних з’єднань.", + "limit_linux_wayland": "Композитори Wayland обмежують програмне захоплення екрана; Потрібен портал PipeWire API.", + "limit_linux_pipewire": "Для захоплення звуку потрібен PipeWire; Резервний варіант PulseAudio доступний, але обмежений.", + "limit_linux_arm": "доступні збірки ARM64; деякі кодеки можуть використовувати програмне декодування (повільніше).", + "limit_mac_screen": "Потрібен дозвіл на записування екрана в системних налаштуваннях > Конфіденційність і безпека.", + "limit_mac_signing": "Для розповсюдження агент повинен бути підписаний ідентифікатором розробника Apple.", + "limit_mac_notarize": "Нотаріальне засвідчення необхідно для macOS Gatekeeper (розповсюдження не в App Store).", + "limit_android_projection": "MediaProjection API вимагає згоди користувача для кожного сеансу захоплення екрана.", + "limit_android_accessibility": "Для ін’єкції введення потрібен AccessibilityService; обмежено в Android 14+.", + "limit_android_battery": "Фоновий сервіс обмежений режимом Doze; може знадобитися звільнення від оптимізації акумулятора.", + "limit_ios_capture": "Apple забороняє фонове захоплення екрана; підтримується режим лише для перегляду.", + "limit_ios_input": "Не допускається введення; лише віддалений перегляд і чат.", + "limit_ios_appstore": "Розповсюдження лише через App Store; TestFlight для бета-тестування.", + "limit_web_https": "WebCodecs API і WebRTC вимагають HTTPS; HTTP повертається до JMuxer (обмежена кількість кодеків).", + "limit_web_codec": "Підтримка кодеків залежить від браузера; H.264 широко підтримується, VP9/AV1 різниться.", + "limit_web_performance": "Продуктивність обмежена пісочницею браузера; відсутність прямого апаратного прискорення.", + "limit_chrome_crostini": "Повна підтримка агентів лише в контейнері Crostini Linux.", + "limit_chrome_pwa": "Режим PWA надає лише веб-функції; відсутн��сть нативних можливостей агента.", + "limit_chrome_input": "Введення не підтримується поза контейнером Crostini.", + "feat_session_recording": "Запис сесії", + "feat_multi_monitor": "Кілька моніторів", + "feat_unattended_access": "Автономний доступ", + "limit_win_virtual_account": "Службаe laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", + "limit_linux_unprivileged": "Службаe laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Аудит безпеки", + "tab_overview": "Огляд", + "tab_events": "Події аудиту", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Оцінка безпеки", + "failed_logins": "Невдалі входи (24 години)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Старі ключі (>90d)", + "security_checks": "Перевірки безпеки", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket Безпечний", + "enabled": "Увімкнено", + "disabled": "В��мкнено", + "all_events": "All Events", + "event_login_failed": "Помилка входу", + "event_login_success": "Успішний вхід", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Конфігурацію змінено", + "event_key_created": "Ключ створено", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Подій аудиту не знайдено.", + "hardening_hint": "Пріоритети посилення безпеки для вашого розгортання BetterDesk. Елементи впорядковані за ступенем тяжкості.", + "no_hardening": "Немає предметів для зміцнення.", + "vuln_hint": "Результати сканування вразливості залежностей. Регулярно запускайте перевірку npm, щоб захистити залежності.", + "no_vulns": "Вразливості не знайдено. Ваші залежності в безпеці." + }, + "languages": { + "title": "Управління мовою", + "total_languages": "Всього мов", + "fully_translated": "Повністю перекладено", + "needs_review": "Потребує перегляду", + "reference_keys": "Довідкові ключі", + "no_languages": "Мовні файли не знайдено.", + "badge_reference": "Reference", + "badge_review": "Потребує перегляду", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Перегляд відсутній", + "fix_missing": "Fix Missing", + "missing_keys_for": "Відсутні ключі для", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "і ще {n}...", + "all_keys_present": "Всі ключі в наявності!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Відсутні ключі в {code} потрібно перекласти вручну.", + "no_fix_needed": "Немає пропущених ключів, які потрібно виправити." + }, + "resource_control": { + "title": "Контроль ресурсів", + "tab_overview": "Огляд", + "tab_usb": "USB Control", + "tab_optical": "Оптичні приводи", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Квоти ресурсів", + "compliance_by_category": "Відповідність за категоріями", + "device_compliance": "Відповідність пристрою", + "search_devices": "Пошук пристроїв...", + "col_device": "пристрій", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Загальна кількість пристроїв", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Рівень відповідності", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Нала��тувати", + "no_devices": "Пристроїв не знайдено", + "usb_title": "USB Керування портом", + "usb_hint": "Контролюйте доступ до пристрою зберігання USB для вибраного пристрою або політику за замовчуванням для всієї організації.", + "usb_storage_policy": "USB Політика зберігання", + "usb_whitelist": "Пристрої в білому списку (по одному на рядок)", + "usb_whitelist_hint": "VID:PID (наприклад, 0781:5583)", + "usb_audit_log": "Журнал підключень пристрою USB", + "optical_title": "Керування оптичним приводом", + "optical_hint": "Контролюйте доступ до приводу CD/DVD/Blu-ray для вибраного пристрою.", + "optical_policy": "Політика оптичного приводу", + "optical_audit_log": "Журнал доступу до оптичного приводу", + "monitors_title": "Керування монітором", + "monitors_hint": "Налаштуйте параметри монітора, включаючи максимальну кількість, контроль роздільної здатності, графіки яскравості та живлення.", + "monitors_max_count": "Максимальна кількість моніторів (0 = необмежена кількість)", + "monitors_max_hint": "0 означає відсутність обмежень", + "monitors_resolution": "Максимальна роздільна здатність", + "monitors_brightness": "Обмеження яскравості", + "monitors_power_schedule": "Графік живлення", + "monitors_power_hint": "напр. вихідний: 22:00-06:00", + "disks_title": "Контроль доступу до диска", + "disks_hint": "Налаштуйте політики доступу до диска, включаючи режим лише для читання, застосування шифрування та видимість розділів.", + "disks_readonly": "Примусовий режим лише для ч��тання", + "disks_encryption": "Вимагати шифрування (BitLocker/LUKS)", + "disks_smart": "Увімкнути S.M.A.R.T. моніторинг", + "disks_hidden": "Приховані розділи", + "disks_hidden_hint": "Літери дисків або точки монтування, розділені комами", + "quotas_title": "Квоти ресурсів", + "quotas_hint": "Установіть для кожного користувача процесор, оперативну пам’ять, пропускну здатність і дискові квоти для вибраного пристрою.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Обмеження пропускної здатності (Мбіт/с)", + "quotas_bandwidth_hint": "0 = ��еобмежений", + "quotas_disk_quota": "Дискова квота (ГБ)", + "quotas_disk_hint": "0 = ��еобмежений", + "quotas_process_whitelist": "Білий список процесів (по одному на рядок)", + "quotas_process_hint": "напр. chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Лише білий список", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Оновлення програмного забезпечення", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Встановлена версія", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Перевірте наявність оновлень", + "checking": "Checking…", + "up_to_date": "В актуальному стані", + "update_available": "Доступне оновлення", + "changelog": "Release Notes", + "no_changelog": "Немає приміток до випуску", + "files_changed": "Файли змінені", + "files": "файли", + "changes_unavailable": "Не вдалося завантажити список змін файлів. Ви все ще можете встановити оновлення.", + "create_backup": "Створіть резервну копію перед оновленням", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Встановлення оновлення…", + "creating_backup": "Створення резервної копії…", + "downloading": "Завантаження файлів…", + "install_success": "Оновлення успішно встановлено. Консоль перезапускається…", + "install_failed": "Помилка встановлення оновлення", + "restarting": "Очікування перезапуску консолі…", + "restart_complete": "Консоль успішно перезавантажено", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Версію оновлення не вибрано. Спочатку перевірте наявність оновлень.", + "backups_title": "Оновити резервні копії", + "backups_desc": "Резервні копії перед оновленням створюються автоматично перед кожним оновленням", + "no_backups": "Резервні копії оновлень не знайдено", + "restore": "Restore", + "restore_confirm": "Ви впевнені, що бажаєте відновити з цієї резервної копії? Змінені файли будуть перезаписані.", + "restore_success": "Резервну копію успішно відновлено. Консоль перезапускається…", + "baseline_set": "Базовий набір", + "commits_behind": "фіксує позаду", + "total_files": "Всього файлів", + "applied": "Applied", + "failed": "Не вдалося", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Серверний компонент", + "component_agent": "Agent", + "component_scripts": "Сценарії та Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Перевірка Go…", + "go_not_found": "Go не встановлено", + "go_check_failed": "Не вдалося перевірити наявність Go", + "server_building": "Компіляція Go server… Це може зайняти кілька хвилин.", + "server_built": "Двійковий файл сервера скомпільований", + "server_build_failed": "Помилка компіляції сервера", + "server_deployed": "Двійковий файл сервера розгорнуто", + "server_deploy_failed": "Помилка розгортання сервера", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Завантаження джерела сервера…", + "delete": "Видалити", + "delete_confirm": "Видалити резервну копію {name} назавжди? Це неможливо скасувати.", + "delete_success": "Резервну копію видалено", + "delete_failed": "Не вдалося видалити резервну копію", + "retention_label": "Зберігайте N останніх резервних копій", + "retention_hint": "Старіші резервні копії видаляються автоматично після кожного оновлення. Використовуйте 0, щоб зберегти всі резервні копії.", + "retention_saved": "Налаштування збереження збережено", + "retention_invalid": "Зберігання має бути цілим числом від 0 до 1000", + "retention_required_for_prune": "Спочатку встановіть значення збереження більше 0", + "prune_now": "Apply now", + "prune_confirm": "Зберегти лише останні резервні копії {n} і видалити решту?", + "prune_done": "Видалені резервні копії {n}", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Спосіб оновлення", + "strategy_download": "Завантажте попередньо зібраний двійковий файл", + "strategy_compile": "Скомпілювати з джерела", + "both_available": "Завантажити та скомпілювати", + "download_available": "Доступне завантаження", + "no_method": "Немає методу оновлення", + "no_release": "No release", + "available": "в наявності", + "server_downloading": "Завантаження двійкового файлу сервера…", + "server_downloaded": "Двійковий файл сервера завантажено", + "server_download_failed": "Не вдалося завантажити бінарний файл сервера", + "server_download_note": "Попередньо зібраний двійковий файл буде завантажено з GitHub Releases. Зазвичай це займає менше хвилини.", + "install_go_hint": "Установіть Go з https://go.dev/dl/, щоб увімкнути компіляцію, або опублікуйте випуск із попередньо зібраними двійковими файлами", + "strategy_install_go": "Автоматичне встановлення Go та компіляція", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Готовий до автоматичного відновлення", + "toolchain_ready": "Інструмент встановлений", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Завантаження Go Toolchain…", + "toolchain_failed": "Помилка встановлення Go toolchain", + "modal_title": "Встановлення оновлення", + "modal_done_title": "Оновлення завершено", + "modal_close": "Закрити", + "modal_reload_now": "Перезавантажити консоль", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Файли консолі", + "phase_server": "Серверний етап", + "phase_restart": "Перезапустіть", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Резервне копіювання пропущено (на вибір користувача)", + "server_skipped": "Go server пропущено", + "server_not_selected": "Go server not selected", + "server_processing": "Обробка оновлення Go server…", + "no_restart_needed": "Перезавантаження не потрібно", + "complete": "Оновлення застосовано", + "complete_summary": "Оновлення успішно застосовано.", + "complete_with_errors": "Оновлення завершено, але деякі кроки не вдалося. Подробиці дивіться нижче.", + "modal_done_with_errors_title": "Оновлення завершено з помилками", + "console_will_restart": "Процес консолі зараз перезапуститься…", + "restart_complete_msg": "Консоль перезавантажилася. Натисніть «Перезавантажити», щоб завантажити нову версію. Сторінка автоматично перезавантажиться через 8 секунд.", + "refresh_recommended": "Статичні ресурси змінено — перезавантажте сторінку, щоб побачити новий інтерфейс.", + "confirm_title": "Застосувати оновлення", + "confirm_with_backup": "Резервна копія перед оновленням буде створена автоматично.", + "confirm_no_backup": "Резервна копія створюватися не буде (продовжуйте на свій страх і ризик).", + "server_stale_title": "Двійковий файл сервера застарів", + "server_stale_desc": "Джерело Go server було оновлено, але поточний двійковий файл не було перебудовано. Перебудуйте його зараз, щоб застосувати оновлення безпеки та бібліотеки.", + "rebuild_server": "Перебудувати двійковий файл сервера", + "rebuilding_server": "Перебудова…", + "rebuild_server_success": "Двійковий файл сервера перебудовано та перезапущено", + "rebuild_server_failed": "Помилка двійкового відновлення сервера" + }, + "permissions": { + "title": "Дозволи", + "subtitle": "Керуйте дозволами на основі ролей і спеціальними замінами", + "info_title": "Як працюють дозволи", + "info_desc": "Кожна роль має дозволи за замовчуванням. Ви можете додати або видалити окремі дозволи для кожної ролі, перемикаючи їх нижче. Користувацькі заміни виділено, і їх можна будь-коли повернути до значень за замовчуванням.", + "select_role": "Виберіть роль", + "select_role_placeholder": "Виберіть роль...", + "reset_overrides": "Скинути всі перевизначення", + "granted": "Надано", + "overrides": "Перевизначення", + "level": "Рівень", + "super_admin_tag": "Повний доступ", + "server_level_tag": "Серверний рівень", + "custom": "Власний", + "default": "Стандартний", + "revert": "Повернутися до замовчування", + "saved": "Дозвіл оновлено", + "reverted": "Повернуто до замовчування", + "all_reverted": "Усі перевизначення скасовано", + "confirm_reset": "Скинути всі настроювані зміни для цієї ролі до значень за умовчанням?", + "empty_title": "Виберіть роль", + "empty_desc": "Виберіть роль зі спадного списку вище, щоб переглянути та керувати її дозволами.", + "locked_title": "Суперадміністратор", + "locked_desc": "Суперадміністратор має всі дозволи за замовчуванням і не може бути налаштований.", + "cat_device": "Пристрої", + "cat_user": "Користувачі", + "cat_server": "Сервер", + "cat_org": "організації", + "cat_audit": "Аудит і моніторинг", + "cat_cdap": "CDAP", + "cat_enrollment": "Реєстрація", + "cat_chat": "Чат", + "cat_branding": "Брендинг", + "perm_device_view": "Перегляд пристроїв", + "perm_device_connect": "Підключіться до пристроїв", + "perm_device_edit": "Редагувати пристрої", + "perm_device_delete": "Видалити пристрої", + "perm_device_ban": "Заборонити / розблокувати пристрої", + "perm_device_change_id": "Змінити ID пристрою", + "perm_user_view": "Переглянути користувачів", + "perm_user_create": "Створення користувачів", + "perm_user_edit": "Редагувати користувачів", + "perm_user_delete": "Видалити користувачів", + "perm_server_config": "Конфігурація сервера", + "perm_server_keys": "Керуйте ключами API", + "perm_org_create": "Створюйте організації", + "perm_org_edit": "Редагувати організації", + "perm_org_delete": "Видалити організації", + "perm_org_manage_users": "Керуйте користувачами організації", + "perm_org_manage_devices": "Керуйте пристроями організації", + "perm_audit_view": "Перегляд журналів аудиту", + "perm_metrics_view": "Перегляд показників", + "perm_blocklist_edit": "Редагувати список блокувань", + "perm_cdap_view": "Переглянути пристрої CDAP", + "perm_cdap_command": "Надсилайте команди CDAP", + "perm_cdap_terminal": "CDAP термінальний доступ", + "perm_cdap_files": "Доступ до файлу CDAP", + "perm_enrollment_manage": "Керувати реєстра��ією", + "perm_enrollment_approve": "Підтвердити реєстрацію", + "perm_chat_access": "Доступ до чату", + "perm_branding_edit": "Редагувати брендинг", + "perm_server_attestation": "Атестація продуктивності сервера" + }, + "notifications": { + "title": "Сповіщення", + "empty": "Немає нових сповіщень", + "mark_all_read": "Позначити все прочитане", + "see_all": "Переглянути всі запити на допомогу", + "help_request": "Прохання про допомогу", + "just_now": "just now" + }, + "accessibility": { + "title": "Доступність", + "subtitle": "Налаштуйте консоль для зору, руху та читання.", + "close": "Закрити меню доступності", + "profiles": "Швидкі профілі", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Більший текст, сильний контраст і фокус.", + "profile_dyslexia": "Комфорт читання", + "profile_dyslexia_hint": "Читабельний шрифт і більші інтервали.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Зменшує переходи та призупиняє анімацію.", + "profile_color_assist": "Підтримка кольорів", + "profile_color_assist_hint": "Кольоровий фільтр, мітки та виділені посилання.", + "reading": "Читання", + "font_size": "Розмір тексту", + "line_height": "Висота рядка", + "letter_spacing": "Інтервал між літерами", + "word_spacing": "Інтервал між словами", + "readable_font": "Читабельний шрифт", + "readable_font_hint": "Використовує широкі, знайомі форми букв.", + "dyslexia_spacing": "Дислексія інтервал", + "dyslexia_spacing_hint": "Додає додатковий пробіл для довгого тексту.", + "visual": "Візуальне", + "contrast": "Контраст", + "contrast_normal": "Normal", + "contrast_high_dark": "Темний високий контраст", + "contrast_high_light": "Висококонтрастне світло", + "contrast_yellow_black": "Жовте на чорному", + "color_filter": "Фільтр кольорового зору", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Насиченість кольору", + "underline_links": "Підкресліть посилання", + "underline_links_hint": "Робить посилання видимими, не покладаючись на колір.", + "highlight_links": "Виділіть дії", + "highlight_links_hint": "Контури посилань і кнопок.", + "highlight_headings": "Виділіть заголовки", + "highlight_headings_hint": "Позначає заголовки розділів кольоровою смугою.", + "hide_media": "Dim media", + "hide_media_hint": "Затемнює зображення, відео та полотна.", + "interaction": "Взаємодія", + "strong_focus": "Сильний фокус", + "strong_focus_hint": "Показує велике кільце фокусування клавіатури.", + "large_cursor": "Великий курсор", + "large_cursor_hint": "Використовує більший висококонтрастний покажчик.", + "reduce_motion": "Зменшити рух", + "reduce_motion_hint": "Скорочує переходи та плавне прокручування.", + "pause_animations": "Призупинити анімації", + "pause_animations_hint": "Зупиняє циклічний візуальний рух.", + "reading_guide": "Посібник з читання", + "reading_guide_hint": "За вказівником йде яскрава лінія.", + "reading_mask": "Маска для читання", + "reading_mask_hint": "Зменшує вміст над і під вказівником.", + "preview": "Попередній перегляд", + "preview_title": "Попередній перегляд робочої області оператора", + "preview_text": "Перш ніж закривати це меню, перевірте, чи зручно читати текст, посилання, елементи керування та мітки стану.", + "preview_link": "Посилання на деталі пристрою", + "preview_status": "Online", + "preview_button": "Первинна дія", + "preview_secondary": "Secondary", + "reset": "Скинути", + "done": "Готово" + }, + "server_mgmt": { + "title": "Керування сервером", + "subtitle": "Панель типу Cockpit для хоста консолі BetterDesk (БЕТА).", + "beta_tooltip": "Бета-функція — в активній розробці.", + "notice_title": "Бета-функція", + "notice_body": "Ці інструменти працюють на хості, де знаходиться процес консолі BetterDesk. Усі операції перевіряються. Обсяг функцій буде розширено в наступних випусках.", + "tab_overview": "Огляд", + "tab_terminal": "Термінал", + "tab_files": "Файли", + "tab_services": "Служби", + "cpu": "CPU", + "memory": "Памʼять", + "load": "Навантаження середнє", + "disks": "Диски", + "history": "Історія (останні 60 зразків)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Час роботи", + "no_disks": "Дані диска відсутні", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY доступний", + "term_connect": "Зʼєднати", + "term_disconnect": "Розʼєднати", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Помилка підключення", + "term_warning": "Команди запускаються від імені користувача, який володіє процесом консолі. Додайте правило sudoers, щоб увімкнути підвищення.", + "term_hint": "Порада: введіть `sudo -i` для ескалації (потрібна конфігурація sudoers).", + "term_lib_failed": "Не вдалося завантажити бібліотеку терміналу", + "files_up": "На один рівень вище", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Назва", + "files_size": "Розмір", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Порожній каталог", + "files_error": "Не вдалося створити каталог", + "read_failed": "Не вдалося прочитати файл", + "save_failed": "Не вдалося зберегти файл", + "rename_failed": "Не вдалося перейменувати", + "delete_failed": "Не вдалося видалити", + "delete_confirm": "Видалити цей запис?", + "mkdir_prompt": "Нова назва папки:", + "mkdir_failed": "Не вдалося створити папку", + "file_saved": "Файл збережено", + "binary_warn": "Двійковий файл — лише попередній перегляд", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Послуги пошуку…", + "svc_name": "Служба", + "svc_state": "Стан", + "svc_description": "Description", + "svc_empty": "Послуг не знайдено", + "svc_load_failed": "Не вдалося завантажити служби", + "svc_action_failed": "Не вдалося виконати дію", + "svc_confirm": "Run", + "svc_start": "Запустити", + "svc_stop": "Зупинити", + "svc_restart": "Перезапустити", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Завантажте BetterDesk Agent", + "choose_platform": "Виберіть свою платформу", + "choose_platform_hint": "Виберіть інсталятор, який відповідає вашій операційній системі.", + "download": "Завантажити", + "building": "Будівля…", + "failed": "Не вдалося створити", + "need_help": "Потрібна допомога?", + "powered_by": "На основі" + }, + "server_attestation": { + "title": "Атестація сервера", + "subtitle": "Бенчмарк продуктивності, який визначає місткість одночасних віддалених підключень при 80% порозі CPU, RAM і диска.", + "warning_title": "Навантажувальне тестування", + "warning_body": "Бенчмарк симулює паралельні WebSocket-підключення до сигнальних серверів і серверів ретрансляції. Запускайте у непіковий час — цей тест навантажує виробництво.", + "run_benchmark": "Запустити бенчмарк", + "abort": "Перервати", + "download_report": "Завантажити JSON-звіт", + "last_test": "Останній тест", + "no_test_yet": "Ще не запускалися бенчмарки", + "max_connections": "Максимальні підключення", + "threshold_80": "80% поріг — фінальні виміри", + "disk": "Диск", + "ramp_chart": "Графік рампи навантаження", + "connections": "Підключення", + "connections_short": "підкл.", + "tier_guide_title": "Що означає кожен рівень?", + "tier_bronze": "БРОНЗА", + "tier_iron": "ЗАЛІЗО", + "tier_titanium": "ТИТАН", + "tier_platinum": "ПЛАТИНА", + "tier_obsidian": "ОБСИДІАН", + "tier_none": "НЕСЕРТИФІКОВАНО", + "tier_bronze_desc": "1–25 одночасних підключень — малий VPS (1–2 vCPU, 2–4 ГБ RAM).", + "tier_iron_desc": "26–75 підключень — середній сервер (2–4 vCPU, 4–8 ГБ RAM).", + "tier_platinum_desc": "76–200 підключень — сервер з високою продуктивністю (4–8 vCPU, 8–16 ГБ RAM).", + "tier_titanium_desc": "201–400 підключень — корпоративна інфраструктура (8+ vCPU, 16–32 ГБ RAM).", + "tier_obsidian_desc": "401+ підключень — турбо-клас: виділене обладнання, 16+ vCPU, 32+ ГБ RAM, NVMe.", + "docker_note": "Примітка: У Docker виміри CPU/RAM можуть відображати обмеження контейнера, а не фізичного хоста.", + "badge_tooltip": "Атестація сервера BetterDesk — сертифікат продуктивності сервера", + "confirm_run": "Цей бенчмарк навантажить сервер симульованими підключеннями. Продовжити?", + "starting": "Запуск...", + "complete": "Бенчмарк завершено", + "signal_peers": "Сигнальні пири", + "relay_sessions": "Сесії ретрансляції", + "page_error": "Не вдалося завантажити сторінку Атестації сервера", + "mode_estimated": "Оцінено (WebSocket недоступний)", + "incomplete": "Бенчмарк завершився без дійсного рівня" + }, + "commercialization": { + "title": "Комерціалізація", + "subtitle": "Пакети підтримки, оплачувані сесії та звіти", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Рання функція — модуль розрахунків і пакетів у активній розробці.", + "tabs": { + "overview": "Огляд", + "packages": "Пакети та контракти", + "sessions": "Сесії", + "reports": "Звіти", + "settings": "Розширені налаштування" }, - "branding": { - "identity_title": "Ідентичність бренду", - "identity_desc": "Налаштуйте назву та опис програми, що відображаються на консолі", - "app_name": "Назва програми", - "app_description": "Опис програми", - "logo_title": "Логотип", - "logo_desc": "Виберіть, як ваш логотип відображатиметься на бічній панелі та сторінці входу", - "logo_type_icon": "Значок матеріалу", - "logo_type_svg": "SVG-код", - "logo_type_image": "URL зображення", - "logo_icon_name": "Назва іконки", - "logo_icon_hint": "Введіть назву матеріальних значків (наприклад, DNS, хмара, безпека). Перегляньте fonts.google.com/icons", - "logo_svg_code": "SVG-код", - "logo_svg_hint": "Вставте сюди розмітку SVG. Підтримує повні елементи із шляхами та стилями.", - "logo_image_upload": "Завантажити зображення", - "logo_image_choose": "Виберіть файл зображення", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Недійсний тип файлу. Використовуйте PNG, JPG, GIF, WebP або SVG.", - "preview": "Попередній перегляд", - "colors_title": "Колірна схема", - "colors_desc": "Налаштуйте палітру кольорів. Залиште пустим, щоб використовувати значення за умовчанням.", - "colors_backgrounds": "Кольори фону", - "colors_text": "Текст", - "colors_accents": "Акцентні кольори", - "colors_borders": "Межі", - "import_export_title": "Імпорт / Експорт", - "import_export_desc": "Збережіть свою тему як файл JSON або імпортуйте її з іншого екземпляра", - "export_theme": "Експорт теми", - "import_theme": "Імпорт теми", - "reset_defaults": "Скинути до значень за замовчуванням", - "save_branding": "Зберегти брендинг", - "saved": "Фірмовий знак успішно збережено. Перезавантаження...", - "exported": "Тему експортовано", - "imported": "Тему успішно імпортовано. Перезавантаження...", - "import_error": "Не вдалося імпортувати тему. Недійсний формат файлу.", - "reset_confirm": "Ви впевнені, що бажаєте відновити брендинг до стандартних? Це неможливо скасувати.", - "reset_success": "Скидання брендингу до значень за замовчуванням. Перезавантаження...", - "logo_type_text": "Текстовий логотип", - "logo_text": "Текст логотипу", - "logo_text_hint": "Основний текст, який відображається як логотип вашого бренду", - "logo_text_accent": "Акцентний текст", - "logo_text_accent_hint": "Додатковий текст під логотипом (наприклад, назва продукту або слоган)", - "logo_upload_success": "Логотип успішно завантажено.", - "typography_title": "Типографіка", - "typography_desc": "Виберіть шрифти для заголовків і основного тексту. Шрифти завантажуються на сервер для самостійного розміщення.", - "font_heading": "Шрифт заголовка", - "font_heading_hint": "Використовується для заголовків (H1–H6) і текстового логотипу", - "font_body": "Шрифт тіла тексту", - "font_body_hint": "Використовується для основного тексту та елементів інтерфейсу", - "font_search_placeholder": "Пошук шрифтів...", - "font_system_default": "Система за умовчанням", - "font_clear": "Очистити", - "font_cat_all": "Всі", - "font_downloaded_count": "шрифти, завантажені на сервер", - "powered_by": "Працює на:", - "background_title": "Фон і зовнішній вигляд", - "background_desc": "Встановіть фон консолі, градієнт або суцільний колір.", - "bg_type_none": "Немає", - "bg_type_color": "Суцільний колір", - "bg_type_gradient": "Градієнт", - "bg_type_image": "Зображення", - "bg_color": "Колір фону", - "bg_gradient": "CSS-градієнт", - "bg_gradient_hint": "Будь-який дійсний CSS-градієнт, напр. linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Завантажити фонове зображення", - "bg_image_choose": "Вибрати файл зображення", - "bg_image_hint": "PNG, JPG, WebP або GIF. Макс. 8 МБ.", - "bg_image_url": "Шлях до зображення / URL", - "bg_size": "Масштабування зображення", - "bg_size_cover": "Покриття (заповнення екрана)", - "bg_size_contain": "Вміщення (fit)", - "bg_size_auto": "Автоматично (оригінал)", - "bg_blur": "Розмиття фону", - "bg_overlay": "Темне накладення", - "bg_overlay_hint": "Затемнює фон для кращої читабельності.", - "bg_image_too_large": "Зображення занадто велике. Максимальний розмір — 8 МБ.", - "bg_image_invalid_type": "Невірний тип файлу. Використовуйте PNG, JPG, WebP або GIF.", - "bg_upload_success": "Фонове зображення завантажено.", - "login_title": "Сторінка входу", - "login_desc": "Налаштуйте заголовок, підзаголовок і фон екрана входу.", - "login_heading": "Заголовок входу", - "login_heading_placeholder": "З поверненням", - "login_subheading": "Підзаголовок входу", - "login_subheading_placeholder": "Увійдіть до свого облікового запису", - "login_bg_inherit": "Те саме, що й консоль", - "agent_title": "Сторінка завантаження агента", - "agent_desc": "Налаштуйте публічний портал завантаження агента для кінцевих користувачів.", - "agent_show_powered": "Показувати \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Показати посилання BetterDesk у нижньому колонтитулі порталу завантаження.", - "footer_title": "Нижній колонтитул і авторські права", - "footer_desc": "Додайте власний рядок нижнього колонтитула на екрані входу та бічній панелі консолі.", - "footer_text": "Текст нижнього колонтитула", - "footer_text_hint": "напр. авторські права або назва компанії.", - "show_powered": "Показувати посилання \"BetterDesk\"", - "show_powered_hint": "Назва і версія BetterDesk відображаються у нижньому колонтитулі входу та бічній панелі.", - "custom_css_title": "Власний CSS", - "custom_css_desc": "Розширено: введіть власний CSS до консолі та сторінки входу.", - "custom_css_hint": "Використовуйте обережно. Макс. 20 000 символів." + "clock": { + "title": "Час сервера (NTP)", + "check_now": "Перевірити зараз", + "unsynced": "Годинник сервера не синхронізовано — платні сесії можуть бути заблоковані" }, - "device_detail": { - "tab_overview": "Огляд", - "tab_tags": "Теги та примітки", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Підключення", - "section_manage": "управління", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Цей пристрій заборонений", - "no_reason": "Причини не вказано", - "tags": "Tags", - "no_tags": "Для цього пристрою не призначено тегів", - "tag_placeholder": "Введіть назву тегу...", - "add_tag": "Add", - "tag_exists": "Цей тег вже існує", - "notes": "Notes", - "notes_placeholder": "Додати примітки про цей пристрій...", - "danger_zone": "Danger Zone", - "action_connect_web": "Підключитися через веб", - "action_connect_web_desc": "Підключіться через віддалений робочий стіл браузера", - "action_native_remote": "BetterDesk Пульт дистанційного керування", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Настільний клієнт", - "action_connect_desktop_desc": "Відкрити в клієнтській програмі для ПК", - "action_change_id_desc": "Змініть реєстраційний ідентифікатор пристрою", - "action_ban_desc": "Заблокувати підключення цього пристрою", - "action_unban_desc": "Дозвольте цьому пристрою знову підключитися", - "action_delete_desc": "Видалити цей пристрій назавжди", - "tab_hardware": "Hardware", - "tab_metrics": "Метрики", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Можливості кодування", - "section_live_metrics": "Живі показники", - "section_current_usage": "Поточне використання", - "section_usage_history": "Історія використання", - "os": "Операційна система", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "Частота ЦП", - "total_memory": "Загальна пам'ять", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Оновлено", - "device_groups": "Групи", - "no_sysinfo": "Інформація про апаратне забезпечення відсутня", - "no_sysinfo_hint": "Інформація про систему з’явиться після того, як пристрій надішле звіт sysinfo", - "no_metrics": "Дані показників відсутні", - "no_metrics_hint": "Показники з’являться після того, як пристрій надішле звіти про пульс", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Файли", - "agent_lazy_hint": "Клацніть цю вкладку, щоб завантажити поточні дані від агента", - "agent_offline": "Агент офлайн", - "agent_timeout": "Агент не відповів вчасно", - "agent_error": "Не вдалося завантажити дані з агента", - "service_name": "Name", - "service_display": "Відображуване ім'я", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Активні платні сесії" }, - "inventory": { - "title": "Inventory", - "subtitle": "Інвентаризація апаратного та програмного забезпечення керованих пристроїв", - "device_id": "ID пристрою", - "hostname": "Hostname", - "os": "Операційна система", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Загальна пам'ять", - "memory_used": "Used Memory", - "memory_available": "Доступна пам'ять", - "memory_usage": "Використання пам'яті", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Мережеві інтерфейси", - "software": "Software", - "software_count": "Встановлене програмне забезпечення", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Фізичні ядра", - "logical_cores": "Логічні ядра", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "в наявності", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "IP-адреси", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Біг колектора", - "collector_stopped": "Колектор зупинено", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Зібрано Ат", - "no_data": "Даних про інвентаризацію ще немає. Натисніть «Зібрати зараз», щоб зібрати інформацію про систему.", - "no_devices": "Пристроїв із даними інвентаризації не знайдено", - "detail_title": "Деталі інвентаризації пристрою", - "telemetry": "Telemetry", - "view_detail": "Переглянути деталі", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Новий пакет", + "name": "Назва", + "included_minutes": "Включені хвилини", + "overage_rate": "Ставка понад ліміт / год", + "currency": "Валюта", + "heading": "Пакети підтримки", + "prompt_name": "Назва пакета", + "create_title": "Новий пакет для організації", + "create_submit": "Створити пакет", + "select_org": "Організація", + "select_org_placeholder": "Оберіть організацію…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Підтримка заявок і відстеження проблем", - "create": "New Ticket", - "edit": "Редагувати квиток", - "delete": "Видалити квиток", - "detail": "Деталі квитка", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Кому призначено", - "created_by": "Створено", - "device": "пристрій", - "sla_due": "SLA Due", - "created_at": "Створено", - "updated_at": "Оновлено", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "відкритий", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Напишіть коментар...", - "internal_note": "Внутрішня примітка (невидима для кінцевих користувачів)", - "attachments": "Attachments", - "upload_attachment": "Завантажити вкладений файл", - "download": "Download", - "connect_device": "Підключитися до пристрою", - "no_tickets": "Квитків не знайдено", - "no_comments": "Поки немає коментарів", - "no_attachments": "Без вкладень", - "title_required": "Необхідно вказати назву", - "delete_confirm": "Ви впевнені, що хочете видалити квиток #{id}?", - "delete_success": "Квиток успішно видалено", - "created_success": "Квиток створено успішно", - "updated_success": "Квиток успішно оновлено", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Пошук квитків...", - "assign_to_me": "Призначте мені", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "відкритий", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Моніторинг діяльності", - "subtitle": "Відстеження викорис��ання програми та простою", - "device": "пристрій", - "hostname": "Hostname", - "sessions": "Сеанси", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Топ програм", - "app_name": "Application", - "window_title": "Заголовок вікна", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Підрахунок сеансів", - "total_active": "Всього активних", - "total_idle": "Total Idle", - "detail_count": "Детальні записи", - "no_data": "Немає даних про діяльність", - "no_sessions": "Немає сесій", - "filter_from": "Від", - "filter_to": "до", - "filter_apply": "Застосувати фільтр", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Пошук пристроїв...", - "date_range": "Date Range", - "device_id": "ID пристрою", - "session_start": "Початок сеансу", - "session_end": "Кінець сеансу", - "user": "User", - "no_activity": "Активність не зареєстрована", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Жодних додатків" - }, - "automation": { - "title": "Автоматизація та сповіщення", - "subtitle": "Правила сповіщень, віддалені команди та налаштування SMTP", - "rules": "Alert Rules", - "rules_subtitle": "Визначте умови, які запускають сповіщення", - "alerts": "Історія сповіщень", - "alerts_subtitle": "Перегляд і підтвердження активованих сповіщень", - "commands": "Віддалені команди", - "commands_subtitle": "Надсилайте команди на віддалені пристрої", - "smtp": "Конфігурація SMTP", - "smtp_subtitle": "Налаштування сповіщень електронною поштою", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Тип умови", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Цільовий пристрій", - "scope_all": "Усі пристрої", - "cooldown": "Час відновлення (секунди)", - "notify_emails": "Сповіщення електронною поштою", - "enabled": "Увімкнено", - "disabled": "В��мкнено", - "create_rule": "Створити правило", - "edit_rule": "Редагувати правило", - "delete_rule": "Видалити правило", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Спрацьовує At", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Більше ніж", - "op_gte": "Більший або рівний", - "op_lt": "Less than", - "op_lte": "Менше або рівно", - "op_eq": "Дорівнює", - "op_neq": "Не дорівнює", - "type_cpu_usage": "Використання ЦП (%)", - "type_memory_usage": "Використання пам'яті (%)", - "type_disk_usage": "Використання диска (%)", - "type_offline_duration": "Тривалість офлайн (с)", - "type_idle_duration": "Тривалість простою (с)", - "type_custom": "Custom", - "command_type": "Тип команди", - "command_payload": "Команда / Скрипт", - "command_result": "Result", - "command_status": "Status", - "send_command": "Надіслати команду", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "Не вдалося", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Ім'я користувача", - "smtp_pass": "Пароль", - "smtp_from": "З адреси", - "smtp_test": "Тестове підключення", - "smtp_save": "Зберегти конфігурацію", - "smtp_test_success": "Підключення успішне", - "smtp_test_failed": "Помилка підключення", - "no_rules": "Правила сповіщень не налаштовано", - "no_alerts": "Жодне сповіщення не активовано", - "no_commands": "Команди не надіслано", - "id_payload_required": "Необхідні ідентифікатор пристрою та корисне навантаження", - "no_commands_sent": "Команди ще не надіслано" - }, - "file_transfer": { - "title": "Передача файлів", - "transfers": "Transfers", - "new_transfer": "Нова передача", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Розмір файлу", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "пристрій", - "initiated_by": "Ініціатор", - "created_at": "Створено Ат", - "cancel": "Скасувати", - "cancel_confirm": "Ви впевнені, що бажаєте скасувати цю передачу?", - "download_file": "Завантажити файл", - "browse_files": "Огляд файлів", - "select_file": "Виберіть Файл", - "select_device": "Виберіть Пристрій", - "no_transfers": "Без передачі файлів", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "Не вдалося", - "status_cancelled": "Cancelled", - "bytes_transferred": "Передані байти", - "chunks": "Chunks", - "transfer_started": "Трансфер розпочато", - "transfer_completed": "Передачу завершено", - "transfer_failed": "Помилка передачі", - "transfer_cancelled": "Переказ скасовано", - "max_file_size": "Максимальний розмір файлу: 4 Гб", - "error_too_large": "Файл завеликий", - "error_no_device": "Пристрій не вибрано", - "error_no_file": "Файл не вибрано" - }, - "network": { - "title": "Моніторинг мереж��", - "targets": "Цілі моніторингу", - "add_target": "Add Target", - "edit_target": "Редагувати ціль", - "delete_target": "Видалити ціль", - "delete_confirm": "Ви впевнені, що бажаєте видалити цю ціль?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Час очікування (мс)", - "interval": "Інтервал (мс)", - "enabled": "Увімкнено", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Перевірте історію", - "stats": "Statistics", - "total_targets": "Загальні цілі", - "targets_up": "Targets Up", - "targets_down": "Цілі вниз", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Мережеві інструменти", - "ping_tool": "Ping Test", - "tcp_tool": "Перевірка порту TCP", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Запустіть Монітор", - "monitor_stop": "Зупинити монітор", - "monitor_running": "Моні��ор працює", - "monitor_stopped": "Монітор зупинено", - "no_targets": "Цілі моніторингу не налаштовано", - "no_history": "Історія перевірок недоступна", - "error_code": "Error", - "status_code": "HTTP Код статусу", - "search_targets": "Цілі пошуку...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Перевірте історію", - "name_host_required": "Потрібно вказати назву та хост", - "uptime": "Uptime", - "response_time": "Час відгуку", - "avg_response": "Середня відповідь", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Час відгуку (мс)", - "uptime_percent": "Uptime %", - "last_24h": "Останні 24 години", - "last_7d": "Last 7 days", - "last_30d": "Останні 30 днів" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "Політики DLP", - "add_policy": "Додати політику", - "edit_policy": "Редагувати політику", - "delete_policy": "Політика видалення", - "delete_confirm": "Ви впевнені, що бажаєте видалити цю політику?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Увімкнено", - "disabled": "В��мкнено", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "Пристрій USB", - "rule_type_file": "Операція з файлами", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "Ідентифікатор постачальника (VID)", - "pid": "Ідентифікатор продукту (PID)", - "serial": "Серійний номер", - "device_class": "Клас пристрою", - "drive_type": "Drive Type", - "file_extensions": "Розширення файлів", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "Файл", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Політики DLP не налаштовано", - "no_events": "Немає записаних подій DLP", - "stats": "Statistics", - "total_events": "Загальна кількість подій", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Файлові події", - "device_id": "ID пристрою", - "policy_matched": "Політика відповідає", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Загальна політика", - "active_policies": "Активні політики", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "політики", - "tab_events": "Events", - "search_policies": "Правила пошуку...", - "create_policy": "Створення політики", - "policy_type": "Тип політики", - "scope": "Scope", - "events_count": "Events", - "search_events": "Пошук подій...", - "event_time": "Event Time", - "device": "пристрій", - "policy": "політика", - "detail": "Detail", - "scope_help": "Ідентифікатори пристроїв, розділені комами, або залиште пустими для всіх", - "scope_all": "Усі пристрої", - "active": "Active", - "type_file_type": "Тип файлу", - "type_clipboard": "Буфер обміну", - "type_screen_share": "Поділитися екраном", - "type_file_transfer": "Передача файлів", - "policy_desc": "Опис політики", - "type_usb": "USB" + "sessions": { + "device": "Пристрій", + "operator": "Оператор", + "duration": "Тривалість", + "phase": "Фаза", + "amount": "Сума" }, "reports": { - "title": "Reports", - "generate": "Створити звіт", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Короткий опис пристрою", - "type_activity": "Підсумок діяльності", - "type_security": "Звіт про безпеку", - "type_tickets": "Звіт про квиток", - "type_network": "Звіт про мережу", - "type_inventory": "Звіт про інвентаризацію", - "type_alerts": "Звіт про сповіщення", - "saved": "Збережені звіти", - "save_report": "Зберегти звіт", - "delete_report": "Видалити звіт", - "delete_confirm": "Ви впевнені, що бажаєте видалити цей збережений звіт?", - "no_saved": "Немає збережених звітів", - "report_title": "Title", - "created_by": "Створено", - "created_at": "Створено Ат", - "filters": "Filters", - "date_from": "Від", - "date_to": "до", - "device_filter": "ID пристрою", - "generated_at": "Сформований At", - "section": "Розділ даних", - "total_devices": "Загальна кількість пристроїв", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Розповсюдження платформи", - "top_applications": "Топ програм", - "total_active": "Загальний час активності", - "total_idle": "Загальний час простою", - "dlp_stats": "Статистика DLP", - "banned_devices": "Заборонені пристрої", - "audit_logs": "Audit Logs", - "ticket_stats": "Статистика квитків", - "category_distribution": "Розподіл категорій", - "priority_distribution": "Пріоритетний розподіл", - "targets_status": "Стан цілей", - "os_distribution": "Розповсюдження ОС", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Останні сповіщення", - "tab_generate": "Створити звіт", - "tab_saved": "Збережені звіти", - "type_devices_desc": "Огляд усіх п��истроїв, платформ і статусів", - "type_activity_desc": "Підсумок використання програми та часу простою", - "type_security_desc": "Заборонити дії, події DLP і журнали аудиту", - "type_tickets_desc": "Статистика квитків і виконання SLA", - "type_network_desc": "Цілі моніторингу мережі та дані про безвідмовну роботу", - "type_inventory_desc": "Підсумок інвентаризації обладнання та програмного забезпечення", - "type_alerts_desc": "Правила сповіщень і історія активованих сповіщень", - "report_name": "Report Name", - "format": "Format", - "save": "Зберегти звіт", - "preview": "Preview", - "download": "Download", - "delete_saved": "Видалити звіт", - "raw_json": "Raw JSON" + "session": "Сесія", + "summary": "Підсумок", + "date": "Дата" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Редагувати орендаря", - "delete_tenant": "Видалити орендаря", - "delete_confirm": "Ви впевнені, що хочете видалити цього орендаря? Усі призначення пристроїв і користувачів буде видалено.", - "name": "Name", - "slug": "Slug", - "contact_name": "Контактне ім'я", - "contact_email": "Контактна адреса електронної пошти", - "max_devices": "Максимальна кількість пристроїв", - "max_devices_hint": "0 = ��еобмежений", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Пристрої", - "users": "Users", - "assign_device": "Призначити пристрій", - "assign_devices": "Призначити пристрої", - "remove_device": "Видалити пристрій", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Орендарі не налаштовані", - "no_devices": "Цьому орендарю не призначено пристроїв", - "no_users": "Немає користувачів, призначених для цього орендаря", - "stats": "Статистика орендарів", - "total_devices": "Загальна кількість пристроїв", - "online_devices": "Інтернет-пристрої", - "total_users": "Total Users", - "created_at": "Створено Ат", - "updated_at": "Оновлено At", - "slug_exists": "Служба орендаря вже існує", - "total_tenants": "Всього орендарів", - "active_tenants": "Активні орендарі", - "search": "Пошук орендарів...", - "create_tenant": "Створити орендаря", - "detail": "Інформація про орендаря", - "contact": "Contact", - "enabled": "Увімкнено", - "disabled": "В��мкнено", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Контракти організацій", + "new": "Призначити пакет", + "org": "Організація", + "package": "Пакет", + "remaining": "Залишок хвилин", + "status": "Статус", + "actions": "Дії", + "suspend": "Призупинити", + "activate": "Активувати", + "select_org": "Оберіть організацію", + "select_package": "Оберіть пакет", + "no_orgs": "Організації не знайдено", + "no_packages": "Спочатку створіть пакет" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Пошук за ідентифікатором пристрою, іменем хоста або IP...", - "no_registrations": "No registration requests", - "col_device_id": "ID пристрою", - "col_hostname": "Hostname", - "col_platform": "Платформа", - "col_ip": "IP-адреса", - "col_version": "Версія", - "col_status": "Статус", - "col_requested": "Запитано о", - "col_actions": "Дії", - "status_pending": "Очікує", - "status_approved": "Затверджено", - "status_rejected": "Відхилено", - "approve_btn": "Затвердити", - "approve_confirm": "Ви впевнені, що хочете схвалити цей пристрій? Він отримає облікові дані сервера та зможе підключитися автоматично.", - "approved_success": "Реєстрацію пристрою успішно підтверджено", - "reject_btn": "Відхилити", - "reject_title": "Відмовитися від реєстрації", - "reject_confirm": "Ви впевнені, що бажаєте відхилити цей запит на реєстрацію?", - "reject_reason": "Причина (необов'язково)", - "reject_reason_placeholder": "Введіть причину відмови...", - "rejected_success": "Реєстрацію пристрою відхилено", - "delete_confirm": "Ви впевнені, що бажаєте видалити цей реєстраційний запис?", - "deleted_success": "Реєстраційний запис видалено", - "enrollment_title": "Реєстрація пристрою", - "enrollment_subtitle": "Запити на реєстрацію, що очікують на розгляд, від клієнтів BetterDesk для ПК", - "enrollment_empty": "Немає незавершених запитів на реєстрацію", - "enrollment_approve": "Затвердити", - "enrollment_reject": "Відхилити", - "enrollment_display_name": "Відображуване ім'я", - "enrollment_display_name_placeholder": "Введіть назву цього пристрою...", - "enrollment_sync_mode": "Режим синхронізації", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Реєстрацію пристрою схвалено", - "enrollment_rejected_success": "Реєстрацію пристрою відхилено", - "approve_title": "Затвердження пристрою", - "field_name": "Назва пристрою", - "field_name_placeholder": "Введіть імʼя для цього пристрою...", - "field_sync_mode": "Режим синхронізації", - "sync_standard": "Стандартний — збалансована синхронізація", - "sync_silent": "Тихий — мінімальна телеметрія", - "sync_turbo": "Турбо — агресивна синхронізація", - "field_tags": "Теги", - "field_tags_placeholder": "Теги через кому (напр. офіс, ноутбук)...", - "field_tags_existing": "Існуючі теги", - "field_tag_add_placeholder": "Додати новий тег...", - "field_tag_add_btn": "Додати", - "field_groups": "Групи пристроїв", - "field_folder": "Папка", - "field_folder_none": "Без папки", - "reject_ban_option": "Заблокувати пристрій", - "reject_ban_hint": "Пристрій буде заблоковано і не зможе надсилати нові запити на реєстрацію.", - "banner_open_mode": "Реєстрація відкрита — нові клієнти RustDesk реєструються без затвердження оператора.", - "banner_locked_mode": "Реєстрація заблокована — тільки пристрої з привʼязаним токеном можуть реєструватися.", - "enrollment_settings_link": "Налаштування реєстрації" + "export": { + "csv": "Експорт CSV", + "pdf": "Експорт PDF", + "sessions_csv": "Експорт сесій CSV" }, - "backup": { - "title": "Резервна копія", - "desc": "Завантажте повну резервну копію конфігурації консолі, користувачів, груп і налаштувань. Однорангові дані Go server включені, коли сервер BetterDesk активний.", - "restore_title": "Відновлення", - "restore_desc": "Завантажте попередньо завантажений файл резервної копії, щоб відновити конфігурацію консолі. Нижче виберіть розділи для відновлення.", - "stat_users": "Користувачі", - "stat_settings": "Налаштування", - "stat_folders": "Папки", - "stat_groups": "Групи", - "stat_strategies": "Стратегії", - "stat_backend": "Бекенд", - "download": "Завантажте резервну копію", - "creating": "Створення резервної копії...", - "download_success": "Резервну копію успішно завантажено", - "upload": "Завантажити резервну копію", - "restore_confirm": "Ви впевнені, що бажаєте відновити з цієї резервної копії? Вибрані розділи буде перезаписано.", - "restore_success": "Резервну копію успішно відновлено. Для деяких змін може знадобитися перезавантаження сторінки.", - "restored": "Відновлено", - "skipped": "Пропущено", - "backup_date": "Дата резервної копії", - "opt_settings": "Налаштування консолі", - "opt_branding": "Брендінг / Тема", - "opt_folders": "Папки пристрою", - "opt_groups": "Групи користувачів і пристроїв", - "opt_addressbooks": "Адресні книги", - "opt_users": "Облікові записи користувачів", - "opt_users_warning": "Деструктивний: замінює ВСІ облікові записи користувачів резервними даними. Можливо, ви вийшли з системи.", - "no_file": "Файл резервної копії не вибрано", - "invalid_json": "Недійсний файл резервної копії: недійсний JSON", - "invalid_format": "Недійсний файл резервної копії: це не резервна копія BetterDesk", - "stat_database": "Двигун бази даних", - "stat_keys": "Серверні ключі включено", - "stat_env": "Файл середовища", - "stat_uploads": "Файли брендингу", - "restart_required": "Деякі відновлені компоненти (ключі / .env / база даних Go) потребують перезапуску служби.", - "security_warning": "Ця резервна копія містить секрети. Зберігайте її безпечно і ніколи не діліться нею.", - "restore_warning": "Відновлення секретів або бази даних сервера Go перезапише ідентичність сервера і потребує перезапуску служби.", - "opt_database": "База даних (всі таблиці)", - "opt_database_hint": "Повторно імпортує всі дані консолі. Перезапуск не потрібен.", - "opt_uploads": "Файли брендингу", - "opt_uploads_hint": "Логотипи та завантажені зображення.", - "opt_secrets": "Серверні ключі та секрети", - "opt_secrets_warning": "Перезапише ідентичність сервера Ed25519, API-ключ та секрет сесії. Потрібен перезапуск служби.", - "opt_env": "Файл середовища (.env)", - "opt_env_warning": "Перезапише SESSION_SECRET, API-ключ, DSN бази даних, порти та налаштування TLS. Потрібен перезапуск служби.", - "opt_godb": "База даних сервера Go", - "opt_godb_warning": "Перезапише базу даних SQLite сервера Go (тільки SQLite бекенд). Потрібен перезапуск служби." + "report": { + "title": "Звіт про роботу", + "subtitle": "Опишіть роботу, виконану під час цієї віддаленої сесії.", + "category": "Категорія", + "ticket_ref": "Посилання на заявку", + "summary": "Виконана робота", + "skip": "Пропустити зараз", + "submit": "Надіслати звіт", + "summary_required": "Підсумок обов'язковий", + "saved": "Звіт про роботу збережено" }, - "cdap": { - "device_detail": "Пристрій CDAP", - "loading": "Завантаження...", - "loading_widgets": "Завантаження віджетів пристрою...", - "load_error": "Не вдалося завантажити дані пристрою", - "connected": "Підключено", - "disconnected": "Відключено", - "device_offline_msg": "Пристрій зараз офлайн. Значення віджета можуть бути застарілими.", - "no_widgets": "Немає доступних віджетів", - "no_widgets_desc": "Цей п��истрій не зареєстрував маніфест CDAP із визначеннями віджетів.", - "command_log": "Журнал команд", - "clear_log": "Очистити журнал", - "confirm_command": "Підтвердити команду", - "select_option": "Виберіть", - "cdap_status": "Статус CDAP", - "cdap_enabled": "CDAP увімкнено", - "cdap_disabled": "CDAP вимкнено", - "cdap_devices": "CDAP-пристрої", - "cdap_connections": "Активні підключення", - "send_command": "Надіслати команду", - "command_sent": "Команда успішно надіслана", - "command_failed": "Не вдалося надіслати команду", - "devices_title": "Пристрої CDAP", - "devices_subtitle": "Пристрої, підключені через Custom Device Application Protocol", - "stat_connected": "Підключено", - "stat_port": "Порт", - "search_devices": "Пошук пристроїв...", - "no_devices": "Немає підключених пристроїв", - "no_devices_desc": "Наразі не підключено пристрої CDAP. Пристрої з’являться тут, коли вони під’єднаються до шлюзу.", - "gateway_disabled": "CDAP Шлюз вимкнено", - "gateway_disabled_desc": "Увімкніть шлюз CDAP, встановивши CDAP_ENABLED=true у конфігурації сервера.", - "gateway_active": "Активний", - "toggle_enable": "Увімкнути CDAP", - "toggle_disable": "Вимкнути CDAP", - "enabled_restart": "CDAP увімкнено. Для застосування змін потрібен перезапуск сервера.", - "disabled_restart": "CDAP вимкнено. Для застосування змін потрібен перезапуск ��ервера.", - "widgets": "віджети", - "type_all": "Всі", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "ОС-агент", - "type_network": "Мережа", - "type_camera": "Камера", - "type_custom": "Власний", - "active_alerts": "Активні оповіщення", - "alert_fired": "Сповіщення активовано", - "alert_cleared": "Сповіщення видалено", - "no_alerts": "Немає активних сповіщень", - "connect_terminal": "Підключити термінал", - "table_search": "пошук...", - "just_now": "Щойно", - "terminal_connecting": "Підключення до пристрою...", - "terminal_disconnected": "Відключено", - "terminal_error": "Помилка підключення терміналу", - "linked_devices": "Підключені пристрої", - "link_device": "Підключити пристрій", - "unlink_device": "Від'єднати", - "no_linked_devices": "Немає підключених пристроїв", - "unlink_confirm": "Ви впевнені, що хочете від’єднати цей пристрій?", - "link_prompt": "Введіть ідентифікатор однорангового пристрою, щоб підключити його до цього пристрою:", - "connect_desktop": "Підключити робочий стіл", - "connect_video": "Підключити потік", - "connect_files": "Огляд файлів", - "connect_audio": "Підключити аудіо", - "upload_file": "Завантажити", - "desktop_connecting": "Підключення...", - "video_connecting": "Підключення...", - "files_connecting": "Підключення...", - "audio_connecting": "Підключення...", - "audio_streaming": "Стрімінг", - "clipboard_in": "Буфер обміну отримано", - "clipboard_out": "Буфер обміну надіслано", - "monitor_select": "Виберіть Монітор", - "keyframe_request": "Ключовий кадр запиту", - "quality_auto": "Якість авто" + "empty": { + "packages": "Пакетів ще немає. Створіть перший кнопкою вище.", + "contracts": "Контрактів організацій ще немає. Призначте пакет організації.", + "sessions": "Платних сесій ще не зареєстровано.", + "reports": "Звітів про роботу ще не надіслано." }, - "desktop": { - "switch_mode": "Режим робочого столу", - "console_mode": "Консольний режим", - "loading": "Завантаження...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Закрити", - "widgets_mode": "Віджети", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Додати віджет", - "remove_widget": "Видалити віджет", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Нала��тувати", - "search_widgets": "Пошук віджетів...", - "cat_monitoring": "Monitoring", - "cat_devices": "Пристрої", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Пишіть тут нотатки...", - "search_placeholder": "Пошук пристроїв, сторінок, налаштувань...", - "search_pages": "Pages", - "search_devices": "Пристрої", - "search_no_results": "No results", - "exit_desktop": "Вийти з режиму робочого столу", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Стан пристрою", - "widget_server_health": "Інформація про сервер", - "widget_system_stats": "Датчики приладів", - "widget_device_list": "Список пристроїв", - "widget_quick_actions": "Швидкі дії", - "widget_recent_activity": "Останні дії", - "widget_notes": "Notes", - "widget_network_monitor": "Монітор мережі", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Пристрої CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Сітка пристрою", - "widget_multi_gauge": "Датчики сервера", - "widget_weekly_chart": "Щотижнева діяльність", - "widget_quick_controls": "Швидке керування", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Статистика підключення", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Сеанси користувача", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Немає пристроїв", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "відкритий", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Встановіть URL у конфігурації", - "label_server_uptime": "Час роботи сервера", - "label_merged_info": "Об’єднано у віджет «Інформація про сервер».", - "label_with_notes": "З примітками", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Загальна кількість пристроїв", - "label_throughput": "Throughput", - "label_active_relays": "Активні реле", - "label_total_relayed": "Всього передано", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Фільтруючі пристрої...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Немає пристроїв CDAP", - "action_add_widget": "Додати віджет", - "label_merged_server_info": "Об’єднано у віджет «Інформація про сервер».", - "wp_images": "Images", - "wp_colors": "Суцільні кольори", - "wp_custom_color": "Індивідуальний колір", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Шпалери не встановлені на цьому сервері.", - "wp_download_hint": "Розмістіть зображення PNG у каталозі public/wallpapers/, щоб увімкнути вибір шпалер.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Монітор процесу", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Статистика бази даних", - "widget_docker_containers": "Docker Контейнери", - "widget_shell_command": "Команда оболонки", - "widget_device_map": "Карта пристрою", - "widget_remote_connect": "Віддалене підключення", - "label_no_online": "Немає онлайн-пристроїв", - "label_no_events": "Сьогодні немає подій", - "label_event_title": "Назва події:", - "label_no_data": "Немає даних", - "label_download_speed": "Швидкість завантаження", - "label_latency": "Latency", - "label_server": "Сервер", - "label_run_test": "Run Test", - "label_testing": "Тестування...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Без контейнерів", - "label_docker_unavailable": "Docker недоступний", - "label_no_command": "Команда не налаштована", - "label_no_output": "Виходу ще немає", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Зберегти попередні налаштування", - "label_load_preset": "Load Preset", - "label_preset_name": "Попередня назва:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Автоматичне впорядкування", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 стовпці (рівні)", - "label_2col_wide": "2 колонки (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Група віджетів", - "ungroup_widgets": "Розгрупувати віджети", - "group_widgets": "Згрупуйте вибрані віджети", - "snap_layouts": "Макети прив’язки", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Прив’язка вгорі зліва", - "snap_top_right": "Прив’язка вгорі праворуч", - "snap_bottom_left": "Прив’язка знизу зліва", - "snap_bottom_right": "Прив’язка внизу справа", - "aero_shake": "Струсіть, щоб мінімізувати інші", - "zone_resize": "Перетягніть рамку, щоб змінити розмір зон", - "zone_borders": "Межі зон, які можна перетягувати", - "app_drawer": "Applications", - "search_apps": "Пошук програм...", - "edit_shortcuts": "Редагувати ярлики", - "widgets": "Віджети", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Призначити існуючий пакет", + "submit": "Призначити" }, - "desktop_login": { - "click_to_sign_in": "Натисніть будь-де або натисніть клавішу, щоб увійти", - "username_placeholder": "Ім'я користувача", - "password_placeholder": "Пароль", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Двофакторна автентифікація", - "totp_subtitle": "Введіть 6-значний код із програми автентифікації", - "back_to_login": "Назад до входу", - "fill_all_fields": "Будь ласка, заповніть усі поля", - "invalid_credentials": "Недійсне ім'я користувача або пароль", - "invalid_code": "Недійсний код підтвердження", - "enter_6_digits": "Введіть усі 6 цифр", - "network_error": "Network error — check your connection", - "session_expired": "Сеанс закінчився. Увійдіть знову." - }, - "tokens": { - "title": "Жетони пристроїв", - "subtitle": "Керуйте маркерами реєстрації для автоматичного надання пристрою", - "enrollment_mode": "Режим реєстрації", - "mode_open": "відкритий", - "mode_open_desc": "Будь-який пристрій може зареєструватися без токена", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Загальна кількість токенів", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Шукати маркери...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Масова генерація", - "create": "Створити маркер", - "edit": "Редагувати маркер", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Створено", - "actions": "Actions", - "name_placeholder": "напр. Пакет офісних ПК", - "max_uses": "Max Uses", - "max_uses_hint": "0 = ��еобмежений", - "expires_in": "Expires In", - "no_expiration": "Без терміну дії", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Додаткова примітка про цей маркер...", - "count": "Count", - "count_range": "Кількість токенів для генерації (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Маркер створено", - "tokens_generated": "Згенеровані токени", - "copy_warning": "Скопіюйте маркер зараз. Його більше не буде показано.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Ви впевнені, що бажаєте відкликати цей маркер? Це не вплине на вже зареєстровані пристрої.", - "revoked_success": "Маркер успішно відкликано", - "no_tokens": "Токенів не знайдено", - "expired": "Expired", - "never": "Never", - "save": "зберегти", - "cancel": "Скасувати", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Далі", - "prev": "Previous", - "skip": "Skip", - "finish": "Закінчити", - "close": "Закрити", - "step_of": "{current} з {total}", - "console_sidebar_title": "Бічна панель навігації", - "console_sidebar_text": "Доступ до всіх модулів звідси. Натисніть будь-який значок, щоб перейти до цього розділу. Бічна панель адаптується до розміру вашого екрана.", - "console_expand_title": "Розгорніть бічну панель", - "console_expand_text": "Натисніть тут, щоб розгорнути бічну панель і переглянути повні мітки для всіх елементів навігації. Натисніть ще раз, щоб згорнути.", - "console_search_title": "Швидкий пошук", - "console_search_text": "Швидкий пошук пристроїв, налаштувань або дій. Нат��сніть Ctrl+K для комбінації клавіш.", - "console_dashboard_title": "Приладова панель", - "console_dashboard_text": "Ваш центральний центр показує статус сервера, онлайн-пристрої та швидкі дії. Слідкуйте за важливими показниками з першого погляду.", - "console_devices_title": "Управління пристроєм", - "console_devices_text": "Переглядайте, шукайте та керуйте всіма підключеними пристроями. Фільтруйте за статусом, призначайте теги та налаштовуйте окремі параметри пристрою.", - "console_settings_title": "Налаштування", - "console_settings_text": "Налаштуйте поведінку сервера, параметри безпеки, брендинг і керування користувачами. Налаштуйте BetterDesk відповідно до своїх потреб.", - "console_desktop_title": "Режим робочого столу", - "console_desktop_text": "Перейдіть у режим робочого столу, щоб отримати віконну робочу область із віджетами. Ідеально підходить для багатозадачності та панелей моніторингу.", - "console_complete_title": "Ви готові!", - "console_complete_text": "Перегляньте категорії бічної панелі, щоб дізнатися про всі функції. Клацніть значок «Довідка» в будь-який час, щоб перезапустити цей посібник.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Верхня панель показує годинник, елементи швидкого керування та доступ до панелі програм. Натисніть значок сітки, щоб переглянути всі програми.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Відкрийте ящик програми, щоб шукати та запускати будь-яку функцію консолі як плаваюче вікно. Програми впорядковано за категоріями.", - "desktop_widgets_title": "Інформаційна панель віджетів", - "desktop_widgets_text": "Ваш настроюваний робочий простір. Віджети відображають інформацію в реальному часі та забезпечують швидкий доступ до функцій. Перетягніть, щоб змінити порядок.", - "desktop_add_widget_title": "Додайте віджети", - "desktop_add_widget_text": "Натисніть тут, щоб переглянути доступні віджети. Виберіть дисплеї моніторингу, списки пристроїв, нотатки тощо.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Тут відображаються відкриті програми. Натисніть, щоб сфокусувати або згорнути вікна. Наведіть курсор, щоб побачити мітки програм.", - "desktop_snap_title": "Макети прив’язки", - "desktop_snap_text": "Перетягніть вікна до країв екрана, щоб зафіксувати їх у потрібному місці, або наведіть курсор на кнопку розгортання, щоб отримати попередні налаштування макета. Спробуйте Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Програми відкриваються у вікнах, які можна перетягувати та змінювати розмір. Згорніть, розгорніть або закрийте в рядку заголовка. Шар Windows над віджетами.", - "desktop_search_title": "Швидкий пошук", - "desktop_search_text": "Шукайте на різних пристроях, сторінках і налаштуваннях. Натисніть Ctrl+K будь-де, щоб миттєво відкрити пошук.", - "desktop_complete_title": "Режим робочого столу готовий!", - "desktop_complete_text": "Спробуйте відкрити програми з ящика та розташувати вікна поруч. Використовуйте стилі віджетів для швидкого створення макетів інформаційної панелі.", - "devices_folders_title": "Папки пристрою", - "devices_folders_text": "Упорядковуйте пристрої в папки. Натисніть папку, щоб відфільтрувати список. Клацніть правою кнопкою миші, щоб перейменувати або видалити.", - "devices_search_title": "Пошук і фільтр", - "devices_search_text": "Пошук за ідентифікатором, іменем хоста або платформою. Використовуйте таблички стану, щоб показувати лише онлайн, офлайн або всі пристрої.", - "devices_table_title": "Список пристроїв", - "devices_table_text": "Натисніть будь-який рядок пристрою, щоб отримати докладнішу інформацію. Використовуйте меню kebab праворуч для швидких дій, як-от підключення, редагування тегів або видалення.", - "devices_complete_title": "Керування пристроєм готове!", - "devices_complete_text": "Перетягуйте пристрої між папками, щоб упорядкувати їх. Двічі клацніть пристрій, щоб відкрити його панель деталей.", - "settings_tabs_title": "Категорії налаштувань", - "settings_tabs_text": "Переходьте між розділами «Загальні», «Безпека», «Вигляд» та іншими розділами конфігурації.", - "settings_content_title": "Конфігурація", - "settings_content_text": "Кожен розділ містить певні налаштування сервера та консолі. Зміни зберігаються, коли ви натискаєте «Зберегти».", - "settings_complete_title": "Огляд налаштувань", - "settings_complete_text": "Перевірте налаштування безпеки для ключів 2FA, API і керування користувачами. Відвідайте Appearance, щоб налаштувати вигляд консолі.", - "help": "Допомога та навчальні посібники", - "tour_console": "Консольний тур", - "tour_desktop": "Екскурсія в режимі робочого столу", - "tour_devices": "Екскурсія по приладах", - "tour_settings": "Огляд налаштувань", - "reset_all": "Скинути всі підручники", - "tour_remote": "Огляд віддаленого сеансу", - "tour_organization": "Налаштування організації", - "tour_cdap": "Огляд CDAP", - "tour_chat": "Основи чату", - "remote_toolbar_title": "Віддалена панель інструментів", - "remote_toolbar_text": "Доступ до елементів керування дисплеєм, синхронізації буфера обміну, спеціальних клавіш і налаштувань якості з панелі інструментів. Перемкніть повноекранний режим за допомогою F11.", - "remote_canvas_title": "Віддалений дисплей", - "remote_canvas_text": "Це віддалений екран. Клацніть всередині, щоб почати керувати віддаленим пристроєм. Введення за допомогою миші та клавіатури пересилаються автоматично.", - "remote_clipboard_title": "Синхронізація буфера обміну", - "remote_clipboard_text": "Копіюйте та вставляйте текст між комп’ютером і віддаленим пристроєм. Використовуйте Ctrl+C / Ctrl+V як зазвичай, поки фокусується на віддаленому дисплеї.", - "remote_complete_title": "Віддалений сеанс готовий!", - "remote_complete_text": "Ви��ористовуйте кнопки панелі інструментів для спеціальних клавіш (Ctrl+Alt+Del, PrintScreen) і перемикання моніторів. Щоб завершити сеанс, натисніть Escape або клацніть «Відключити».", - "org_overview_title": "організації", - "org_overview_text": "Організації дозволяють групувати користувачів, пристрої та правила. Кожна організація має власного адміністратора, операторів і налаштування.", - "org_create_title": "Створити організацію", - "org_create_text": "Натисніть тут, щоб створити нову організацію. Введіть ім’я, слаг і необов’язковий опис. Ви будете власником нової організації.", - "org_members_title": "Керувати учасниками", - "org_members_text": "Запрошуйте користувачів електронною поштою, призначайте ролі (адміністратор, оператор, користувач) і керуйте доступом. Учасники можуть бачити пристрої, призначені їхній організації.", - "org_devices_title": "Призначити пристрої", - "org_devices_text": "Додайте пристрої до організації. Пристрої, призначені тут, успадковуватимуть політики організації та будуть видимі для її учасників.", - "org_policies_title": "Політика організації", - "org_policies_text": "Встановіть для організації правила безпеки, як-от вимоги до пароля, час очікування сеансу, застосування 2FA та правила реєстрації пристроїв.", - "org_complete_title": "Налаштування організації завершено!", - "org_complete_text": "Запросіть свою команду та призначте пристрої, щоб почати використовувати керування на рівні організації. Політика автоматично застосовується до всіх учасників.", - "cdap_devices_title": "CDAP-пристрої", - "cdap_devices_text": "Переглядайте всі підключені CDAP-пристрої — IoT-датчики, ПЛК, мости та власні агенти. Зелені індикатори показують активні підключення.", - "cdap_widgets_title": "Панель віджетів", - "cdap_widgets_text": "Віджети відображають дані пристроїв в реальному часі. Прилади, перемикачі, LED, графіки — кожен тип відображає різні дані.", - "cdap_commands_title": "Відправка команд", - "cdap_commands_text": "Взаємодійте з пристроями, відправляючи команди. Журнал команд зберігає історію.", - "cdap_terminal_title": "Термінал пристрою", - "cdap_terminal_text": "Відкрийте термінальну сесію до CDAP-агентів для розширеної діагностики або ручного налаштування.", - "cdap_complete_title": "Огляд CDAP завершено!", - "cdap_complete_text": "Досліджуйте віджети пристроїв, відправляйте команди та використовуйте термінал або файловий браузер для глибшого управління.", - "chat_contacts_title": "Контакти та групи", - "chat_contacts_text": "Перегляньте свої контакти та групи чату. Натисніть будь-який контакт, щоб відкрити розмову. Зелені точки позначають онлайн-користувачів.", - "chat_send_title": "Надсилати повідомлення", - "chat_send_text": "Введіть своє повідомлення та натисніть Enter, щоб надіслати. Повідомлення мають наскрізне шифрування, якщо обидві сторони підтримують E2E.", - "chat_file_title": "Поділитися файлами", - "chat_file_text": "Щоб поділитися файлами, натисніть значок вкладення. Файли зашифровані і можуть мати розмір до 50 Мб.", - "chat_complete_title": "Чат готовий!", - "chat_complete_text": "Спілкуйтеся з операторами та кінцевими користувачами в режимі реального часу. Створюйте групи для командного спілкування. Усі повідомлення підтримують сповіщення про прочитання.", - "disable_tutorials": "Вимкнути посібники", - "enable_tutorials": "Увімкнути посібники" - }, - "help_request": { - "title": "Запити на допомогу", - "subtitle": "Керуйте вхідними запитами на допомогу від настільних клієнтів", - "new_request": "Новий запит на допомогу", - "device": "пристрій", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Немає запитів на допомогу", - "notification": "Запит на допомогу отримано від", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "організації", - "create": "Створити організацію", - "edit": "Редагувати організацію", - "detail": "Деталі організації", - "name": "Name", - "slug": "Слимак (URL-безпечний)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Пристрої", - "invitations": "Invitations", - "settings": "Налаштування", - "add_user": "Add User", - "assign_device": "Призначити пристрій", - "create_invitation": "Створити запрошення", - "delete_confirm": "Видалити цю організацію? Це призведе до видалення всіх пов’язаних користувачі��, пристроїв і налаштувань.", - "no_orgs": "Організацій ще немає", - "no_orgs_hint": "Створіть свою першу організацію, щоб почати керувати пристроями та користувачами.", - "connection_policy": "Політика підключення", - "allow_file_transfer": "Дозволити передавання файлів", - "allow_clipboard": "Дозволити буфер обміну", - "max_session_duration": "Максимальна тривалість сеансу (хв.)", - "role_owner": "Owner", - "role_admin": "Адміністратор", - "role_operator": "Operator", - "role_user": "Учасник", - "username": "Ім'я користувача", - "password": "Пароль", - "display_name": "Відображуване ім'я", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID пристрою", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Призначений користувач", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "У цій організації немає користувачів.", - "no_devices": "Немає пристроїв, призначених цій організації.", - "no_invitations": "Без запрошень.", - "user_added": "User added", - "user_removed": "Користувач видалений", - "user_updated": "Роль користувача оновлено", - "device_assigned": "Пристрій призначено", - "device_unassigned": "Пристрій не призначено", - "invitation_created": "Запрошення створено", - "settings_saved": "Налаштування збережено", - "org_deleted": "Організацію видалено", - "confirm_remove_user": "Видалити цього користувача з організації?", - "confirm_unassign_device": "Скасувати призначення цього пристрою організації?", - "confirm_delete_org": "Видалити цю організацію та всі пов’язані з нею дані?", - "edit_role": "Редагувати роль", - "raw_settings": "Необроблені налаштування", - "key": "Key", - "value": "Value", - "save": "Зберегти налаштування", - "policy_unattended": "Без нагляду (миттєво)", - "policy_attended": "Відвідував (з підтвердженням)", - "policy_ask": "Always ask", - "expires_hours": "Термін дії (годин)", - "loading_failed": "Не вдалося завантажити дані організації", - "name_slug_required": "Потрібно вказати ім’я та слаг", - "org_created": "Організація створена", - "org_updated": "Організація оновлена", - "create_new_user": "Створити новий", - "add_existing_user": "Додати існуючий", - "none_available": "none", - "select_user": "Виберіть користувача", - "org_role": "Роль організації", - "link_user_hint": "Вибраного користувача буде пов’язано з цією організацією за допомогою облікових даних його сервера.", - "no_available_users": "Усі користувачі сервера вже пов’язані з цією організацією.", - "user_linked": "Користувач пов'язаний з організацією" - }, - "chat": { - "e2e_enabled": "Наскрізне шифрування", - "e2e_establishing": "Встановлення безпечного каналу...", - "e2e_established": "Захищений канал встановлено", - "e2e_unsupported": "Шифрування E2E не підтримується в цьому браузері", - "typing_indicator": "друкую...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "Файл", - "file_too_large": "Файл завеликий (макс. 50 МБ)", - "file_encrypted": "Зашифрована передача файлів", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Ключі безпеки повернуто", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Групи", - "no_contacts": "Контактів ще немає", - "no_groups": "Груп ще немає", - "no_messages": "Поки немає повідомлень", - "no_results": "Результатів не знайдено", - "select_conversation": "Виберіть розмову, щоб розпочати спілкування", - "type_message": "Введіть повідомлення...", - "send": "Надіслати", - "attach_file": "Прикріпити файл", - "emoji": "Emoji", - "search_messages": "Пошук повідомлень", - "create_group": "Створити групу", - "group_name": "Назва групи", - "group_members": "Члени", - "cancel": "Скасувати", - "create": "Створити", - "members": "членів", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Пошук контактів і повідомлень", - "select_conversation_hint": "Виберіть розмову, щоб переглянути повідомлення", - "info": "Info", - "group_name_placeholder": "Введіть назву групи" - }, - "toast": { - "device_connected": "Пристрій підключено", - "device_disconnected": "Пристрій відключено", - "session_started": "Віддалений сеанс розпочато", - "session_ended": "Віддалений сеанс завершено", - "file_upload_complete": "Завантаження файлу завершено", - "settings_saved": "Налаштування збережено", - "error_generic": "Сталася помилка", - "connection_lost": "З'єднання втрачено", - "reconnecting": "Повторне підключення..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Утиліти адміністратора та засоби діагностики", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Надіслати", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Введіть текст...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Журнал Go-сервера", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Перевірте доступність хоста та затримку", - "tcp_title": "Перевірка порту TCP", - "tcp_desc": "Перевірте підключення порту TCP", - "ssl_title": "Інспектор SSL", - "ssl_desc": "Перегляньте деталі сертифіката SSL/TLS", - "http_title": "HTTP Перевірка працездатності", - "http_desc": "Перевірте стан кінцевої точки HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Перетворення імені хоста на IP-адресу", - "whois_title": "DNS Records", - "whois_desc": "Записи запиту A, AAAA, MX, TXT, NS", - "speed_title": "Speed Test", - "speed_desc": "Виміряйте пропускну здатність завантаження", - "run_speed_test": "Запустіть тест швидкості", - "wol_title": "Wake-on-LAN", - "wol_desc": "Надішліть магічний пакет, щоб розбудити пристрій", - "wol_sent": "Чарівний пакет надіслано", - "hash_title": "Хеш-генератор", - "hash_desc": "Створення криптографічних хешів", - "password_title": "Генератор паролів", - "password_desc": "Згенеруйте безпечний випадковий пароль", - "jwt_title": "JWT Decoder", - "jwt_desc": "Розшифруйте та перевірте веб-токени JSON", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Кодувати або декодувати дані Base64", - "url_title": "URL Encoder", - "url_desc": "Кодувати або декодувати компоненти URL", - "processes_title": "Список процесів", - "processes_desc": "Перегляньте запущені системні процеси", - "disk_title": "Disk Usage", - "disk_desc": "Перегляньте використання розділу диска", - "db_title": "Статистика бази даних", - "db_desc": "Перегляд статистики таблиці бази даних", - "docker_title": "Docker Контейнери", - "docker_desc": "Перегляньте запущені контейнери Docker", - "logs_title": "Log Viewer", - "logs_desc": "Переглянути останні результати журналу", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Діє з", - "valid_to": "Діє до", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Немає даних", - "no_docker": "Контейнери Docker не знайдено або Docker недоступний", - "no_logs": "Немає рядків журналу" - }, - "policies": { - "title": "Політика організації", - "subtitle": "Керуйте правилами безпеки, підключення та функцій для своїх організацій", - "select_org": "організація", - "select_org_placeholder": "Виберіть організацію...", - "select_org_first": "Виберіть організацію, щоб переглянути журнал аудиту політики.", - "configured": "Налаштовано", - "connection_title": "Політика підключення", - "connection_desc": "Керуйте встановленням віддалених сеансів", - "connection_mode": "Режим підключення", - "mode_attended": "Відвідував (потрібне схвалення користувача)", - "mode_unattended": "Без нагляду (завжди дозволяти)", - "mode_ask": "Завжди питати", - "max_session": "Максимальна тривалість сеансу (хвилини)", - "idle_lock": "Час очікування блокування в режимі очікування (хвилини)", - "wallpaper_policy": "Шпалери під час сеансу", - "wallpaper_show": "Показувати", - "wallpaper_hide_session": "Сховати під час сеансу", - "wallpaper_hide_always": "Завжди приховувати", - "features_title": "Політика функцій", - "features_desc": "Увімкніть або вимкніть певні функції для пристроїв", - "allow_file_transfer": "Дозволити передавання файлів", - "allow_clipboard": "Дозволити синхронізацію буфера обміну", - "allow_audio": "Дозволити потокове аудіо", - "allow_recording": "Дозволити запис сеансу", - "security_title": "Політика безпеки", - "security_desc": "Дотримання вимог безпеки для пристроїв організації", - "require_2fa": "Вимагати 2FA для автоматичного доступу", - "password_min_length": "Мінімальна довжина пароля", - "password_require_special": "Вимагати спеціальних символів", - "password_max_age": "Максимальний вік пароля (дні, 0=ніколи)", - "allowed_operators": "Дозволені ролі оператора (розділені комами)", - "network_title": "Мережева політика", - "network_desc": "Керуйте серверами ретрансляції та прямими з’єднаннями", - "block_direct_p2p": "Block Direct P2P (примусове реле)", - "allowed_relays": "Дозволені сервери ретрансляції (по одному на рядок)", - "ip_allowlist": "Білий список IP-адрес (CIDR, по одному на рядок)", - "update_title": "Політика оновлення", - "update_desc": "Керуйте автоматичними оновленнями та оновлюйте канали", - "auto_update": "Увімкнути автоматичне оновлення", - "update_channel": "Оновити канал", - "audit_title": "Зміни політики", - "audit_desc": "Історія останніх змін політики", - "no_audit": "Змін політики не зареєстровано.", - "save_success": "Політику успішно збережено", - "save_failed": "Не вдалося зберегти політику", - "load_failed": "Не вдалося завантажити правила", - "block_direct_p2p_hint": "Застосовується до цієї організації." - }, - "attestation": { - "title": "Атестація пристрою", - "subtitle": "Відстежуйте перевірку ідентифікації пристрою та апаратних відбитків", - "verified": "Verified", - "pending": "Pending", - "failed": "Не вдалося", - "device_list": "Записи про атестацію пристрою", - "device_list_desc": "Апаратні відбитки пальців і статус підтвердження особи", - "col_device": "ID пристрою", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Атестаційних записів не знайдено.", - "verify_success": "Пристрій позначено як перевірений", - "verify_failed": "Не вдалося перевірити пристрій", - "revoke_success": "Атестацію пристрою скасовано", - "revoke_failed": "Не вдалося скасувати атестацію" - }, - "fleet": { - "title": "Управління автопарком", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Конструктор робочих процесів", - "tab_compliance": "Compliance", - "res_title": "Відображення ресурсів", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Мережевий диск", - "res_type_dns": "Сервер DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Додати ресурс", - "res_name": "Назва ресурсу", - "res_type": "Type", - "res_address": "Адреса / шлях", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "організація", - "res_scope_group": "Група", - "res_scope_device": "пристрій", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Ресурси не знайдено. Натисніть «Додати ресурс», щоб створити його.", - "res_confirm_delete": "Ви впевнені, що хочете видалити цей ресурс?", - "task_title": "Планувальник завдань", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "Не вдалося", - "task_search": "Search tasks…", - "task_create": "Створити завдання", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "оновлення", - "task_type_restart": "Перезапустіть", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "Ідентифікатори пристроїв або назви груп, розділені комами", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Значення розкладу", - "task_script": "Сценарій / Команда", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Завдань не знайдено. Щоб розпочати, натисніть «Створити завдання».", - "task_confirm_delete": "Ви впевнені, що хочете видалити це завдання?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Конструктор робочих процесів", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "зберегти", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Виберіть вузол, щоб змінити його властивості.", - "builder_node_trigger_manual": "Ручний тригер", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Тригер події", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Перезапустіть Svc", - "builder_node_action_file_deploy": "Розгорнути файл", - "builder_node_action_message": "Надіслати повідомлення", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Надіслати сповіщення", - "builder_node_result_chain": "Ланцюговий робочий процес", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Назва робочого процесу:", - "comp_title": "Відповідність програмного забезпечення", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "пристрій", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Запустити автоматичне виправлення на цьому пристрої?", - "comp_no_data": "Немає даних про відповідність. Запустіть сканування, щоб почати.", - "save": "зберегти", - "cancel": "Скасувати", - "close": "Закрити", - "edit": "Редагувати", - "delete": "Видалити", - "actions": "Actions", - "all_orgs": "Усі організації", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Мережевий диск", - "type_dns": "Сервер DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Додати ресурс", - "edit_resource": "Редагувати ресурс", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Адреса / шлях", - "scope_org": "організація", - "scope_group": "Група", - "scope_device": "пристрій", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Ви впевнені, що хочете видалити цей елемент?", - "all_statuses": "Всі статуси", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "Не вдалося", - "search_tasks": "Search tasks�", - "create_task": "Створити завдання", - "edit_task": "Редагувати завдання", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Розгортання файлів", - "task_type_registry": "Registry", - "target_devices": "Цільові пристрої", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Сценарій / Команда", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Завантаження", - "no_output": "Немає вихідних даних", - "error_loading": "Помилка завантаження даних", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Ручний тригер", - "node_schedule": "Schedule", - "node_event": "Тригер події", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Перезапустіть Svc", - "node_file_deploy": "Розгорнути файл", - "node_send_message": "Надіслати повідомлення", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Надіслати сповіщення", - "node_chain": "Ланцюговий робочий процес", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Усі організації", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "пристрій", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Запустити автоматичне виправлення на цьому пристрої?" - }, - "scaling": { - "title": "Масштабування та керування ретрансляцією", - "tab_overview": "Огляд", - "tab_relays": "Relay Nodes", - "tab_rules": "Правила призначення", - "tab_capacity": "Планування потужностей", - "arch_title": "Архітектура мережі", - "arch_loading": "Завантаження діаграми архітектури...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Загальна кількість пристроїв", - "stat_active_sessions": "Активні сесії", - "stat_bandwidth": "Загальна пропускна здатність", - "relay_health": "Естафета здоров'я", - "no_relays": "Вузли ретрансляції не налаштовані. Додайте свій перший вузол ретрансляції, щоб розподілити навантаження.", - "relay_search": "Пошук реле...", - "relay_add": "Додати вузол ретрансляції", - "relay_edit": "Редагувати вузол ретрансляції", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Пристрої", - "col_sessions": "Сеанси", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Цільова естафета", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Увімкнено", - "status_disabled": "В��мкнено", - "confirm_delete_relay": "Ви впевнені, що хочете видалити цей вузол ретрансляції?", - "confirm_delete_rule": "Ви впевнені, що бажаєте видалити це правило призначення?", - "rules_hint": "Правила призначення визначають, який сервер ретрансляції обробляє певні групи пристроїв. Правила оцінюються за пріоритетом (спочатку найнижчі).", - "rule_add": "Add Rule", - "rule_edit": "Редагувати правило", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Група пристроїв", - "match_tag": "Тег пристрою", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Головний сервер", - "fallback_nearest": "Найближчий реле", - "relay_max_sessions": "Максимальна кількість сеансів", - "relay_max_bandwidth": "Максимальна пропускна здатність (Мбіт/с)", - "cap_tiers": "Рівні потужності", - "cap_loading": "Завантаження даних про ємність...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Немає рекомендацій.", - "cap_planning": "Планування інфраструктури", - "cap_config": "Конфігурація", - "cap_max_devices": "Максимальна кількість пристроїв", - "cap_max_sessions": "Максимальна кількість сеансів", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Ємність пристрою", - "cap_tier_sessions": "Ємність сесії", - "cap_tier_bandwidth": "Пропускна здатність", - "cap_single_sqlite": "Один сервер (SQLite)", - "cap_single_pg": "Один сервер (PostgreSQL)", - "cap_master_3": "Майстер + 3 реле", - "cap_master_10": "Майстер + 10 реле", - "rec_no_relays": "Вузли ретрансляції не налаштовані. Розгляньте можливість додавання вузлів ретрансляції для кращої продуктивності та резервування.", - "rec_devices_high": "Коефіцієнт використання пристрою високий. Розгляньте можливість додавання додаткових вузлів ретрансляції для розподілу навантаження.", - "rec_sessions_high": "Ємність сеансу наближається до межі. Розгляньте можливість модернізації інфраструктури ретрансляції.", - "rec_cpu_high": "Деякі вузли ретрансляції повідомляють про високе використання ЦП. Розгляньте можливість балансування навантаження або підвищення ємності.", - "rec_all_good": "Всі системи працюють в межах нормальн��х параметрів. Ніяких дій не потрібно.", - "save": "зберегти", - "cancel": "Скасувати", - "edit": "Редагувати", - "delete": "Видалити", - "close": "Закрити", - "no_rules": "Немає правил призначення.", - "relays_info_banner": "Цей список є інформаційним. Сервери ретрансляц��ї, які фактично використовуються клієнтами, налаштовуються за допомогою змінної середовища RELAY_SERVERS на сервері BetterDesk.", - "relay_name_address_required": "Ім'я та адреса обов'язкові.", - "relay_save_failed": "Не вдалося зберегти вузол ретрансляції.", - "relay_delete_failed": "Не вдалося видалити вузол ретрансляції.", - "relay_saved": "Вузол ретрансляції збережено.", - "relay_deleted": "Вузол ретрансляції видалено.", - "rule_name_value_required": "Потрібно вказати назву правила та значення відповідності.", - "rule_save_failed": "Не вдалося зберегти правило.", - "rule_delete_failed": "Не вдалося видалити правило.", - "rule_saved": "Правило збережено.", - "rule_deleted": "Правило видалено." - }, - "cross_platform": { - "title": "Кросплатформна сумісність", - "tab_matrix": "Матриця сумісності", - "tab_distribution": "Розподіл", - "tab_protocols": "Протоколи", - "tab_limitations": "Обмеження", - "matrix_hint": "Матриця підтримки функцій на всіх підтримуваних платформах. Зелений = повна підтримка, жовтий = часткова, сірий = недоступний, синій = планується.", - "col_feature": "Функція", - "legend_full": "Повна підтримка", - "legend_partial": "Часткова підтримка", - "legend_none": "Не доступний", - "legend_planned": "Заплановано", - "platform_breakdown": "Поломка платформи", - "arch_breakdown": "Розбивка архітектури", - "version_breakdown": "Розбивка версій", - "summary": "Підсумок", - "total_devices": "Загальна кількість пристроїв", - "unique_platforms": "Платформи", - "unique_archs": "Архітектури", - "unique_versions": "Клієнтські версії", - "no_devices": "Ще немає зареєстрованих пристроїв.", - "protocols_hint": "Узгодження можливостей протоколу гарантує, що кожен клієнт отримує лише ті функції, які він підтримує. Сервер адаптує поведінку на основі повідомлених можливостей.", - "capability_negotiation": "Обговорення можливостей", - "codec_support": "Підтримка кодеків (онлайн-пристрої)", - "feature_support": "Підтримка функцій (онлайн-пристрої)", - "no_codec_data": "Немає доступних кодеків із онлайн-пристроїв.", - "no_feature_data": "Немає даних про функції з онлайн-пристроїв.", - "protobuf_schema": "Схема Protobuf ClientCapabilities", - "diagram_client": "Клієнт", - "diagram_server": "Сервер BetterDesk", - "diagram_peer": "Клієнтський вузол", - "limitations_hint": "Кожна платформа має певні обмеження, які впливають на доступні функції. Перегляньте ці обмеження під час планування розгортання.", - "feat_desktop_client": "Настільний клієнт", - "feat_background_agent": "Фоновий агент", - "feat_remote_target": "Віддалена ціль", - "feat_screen_capture": "Захоплення екрана", - "feat_input_injection": "Вхідна ін'єкція", - "feat_file_transfer": "Передача файлів", - "feat_clipboard_sync": "Синхронізація буфера обміну", - "feat_audio_streaming": "Потокове аудіо", - "feat_chat": "Чат", - "feat_h264": "Кодек H.264", - "feat_vp9": "Кодек VP9", - "feat_av1": "Кодек AV1", - "feat_cdap_agent": "CDAP-агент", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Веб-браузер", - "platform_chromeos": "ChromeOS", - "status_production": "Виробництво", - "status_testing": "Тестування", - "status_planned": "Заплановано", - "status_limited": "Обмежено", - "status_experimental": "Експериментально", - "limit_win_uac": "Підвищення UAC потрібне для інсталяції служби та введення даних на захищених настільних комп’ютерах.", - "limit_win_service": "Працює як служба NSSM; для встановлення потрібні права адміністратора.", - "limit_win_firewall": "Windows Правила брандмауера мають дозволяти порти 21115-21119 для релейних з’єднань.", - "limit_linux_wayland": "Композитори Wayland обмежують програмне захоплення екрана; Потрібен портал PipeWire API.", - "limit_linux_pipewire": "Для захоплення звуку потрібен PipeWire; Резервний варіант PulseAudio доступний, але обмежений.", - "limit_linux_arm": "доступні збірки ARM64; деякі кодеки можуть використовувати програмне декодування (повільніше).", - "limit_mac_screen": "Потрібен дозвіл на записування екрана в системних налаштуваннях > Конфіденційність і безпека.", - "limit_mac_signing": "Для розповсюдження агент повинен бути підписаний ідентифікатором розробника Apple.", - "limit_mac_notarize": "Нотаріальне засвідчення необхідно для macOS Gatekeeper (розповсюдження не в App Store).", - "limit_android_projection": "MediaProjection API вимагає згоди користувача для кожного сеансу захоплення екрана.", - "limit_android_accessibility": "Для ін’єкції введення потрібен AccessibilityService; обмежено в Android 14+.", - "limit_android_battery": "Фоновий сервіс обмежений режимом Doze; може знадобитися звільнення від оптимізації акумулятора.", - "limit_ios_capture": "Apple забороняє фонове захоплення екрана; підтримується режим лише для перегляду.", - "limit_ios_input": "Не допускається введення; лише віддалений перегляд і чат.", - "limit_ios_appstore": "Розповсюдження лише через App Store; TestFlight для бета-тестування.", - "limit_web_https": "WebCodecs API і WebRTC вимагають HTTPS; HTTP повертається до JMuxer (обмежена кількість кодеків).", - "limit_web_codec": "Підтримка кодеків залежить від браузера; H.264 широко підтримується, VP9/AV1 різниться.", - "limit_web_performance": "Продуктивність обмежена пісочницею браузера; відсутність прямого апаратного прискорення.", - "limit_chrome_crostini": "Повна підтримка агентів лише в контейнері Crostini Linux.", - "limit_chrome_pwa": "Режим PWA надає лише веб-функції; відсутн��сть нативних можливостей агента.", - "limit_chrome_input": "Введення не підтримується поза контейнером Crostini.", - "feat_session_recording": "Запис сесії", - "feat_multi_monitor": "Кілька моніторів", - "feat_unattended_access": "Автономний доступ", - "limit_win_virtual_account": "Службаe laufen unter isolierten virtuellen Konten anstelle von LocalSystem; benutzerdefinierte Protokollpfade müssen möglicherweise ACL-Anpassungen vorgenommen werden.", - "limit_linux_unprivileged": "Службаe laufen unter dem dedizierten unprivilegierten Konto 'betterdesk' mit systemd-Härtung (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Аудит безпеки", - "tab_overview": "Огляд", - "tab_events": "Події аудиту", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Оцінка безпеки", - "failed_logins": "Невдалі входи (24 години)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Старі ключі (>90d)", - "security_checks": "Перевірки безпеки", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket Безпечний", - "enabled": "Увімкнено", - "disabled": "В��мкнено", - "all_events": "All Events", - "event_login_failed": "Помилка входу", - "event_login_success": "Успішний вхід", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Конфігурацію змінено", - "event_key_created": "Ключ створено", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Подій аудиту не знайдено.", - "hardening_hint": "Пріоритети посилення безпеки для вашого розгортання BetterDesk. Елементи впорядковані за ступенем тяжкості.", - "no_hardening": "Немає предметів для зміцнення.", - "vuln_hint": "Результати сканування вразливості залежностей. Регулярно запускайте перевірку npm, щоб захистити залежності.", - "no_vulns": "Вразливості не знайдено. Ваші залежності в безпеці." - }, - "languages": { - "title": "Управління мовою", - "total_languages": "Всього мов", - "fully_translated": "Повністю перекладено", - "needs_review": "Потребує перегляду", - "reference_keys": "Довідкові ключі", - "no_languages": "Мовні файли не знайдено.", - "badge_reference": "Reference", - "badge_review": "Потребує перегляду", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Перегляд відсутній", - "fix_missing": "Fix Missing", - "missing_keys_for": "Відсутні ключі для", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "і ще {n}...", - "all_keys_present": "Всі ключі в наявності!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Відсутні ключі в {code} потрібно перекласти вручну.", - "no_fix_needed": "Немає пропущених ключів, які потрібно виправити." - }, - "resource_control": { - "title": "Контроль ресурсів", - "tab_overview": "Огляд", - "tab_usb": "USB Control", - "tab_optical": "Оптичні приводи", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Квоти ресурсів", - "compliance_by_category": "Відповідність за категоріями", - "device_compliance": "Відповідність пристрою", - "search_devices": "Пошук пристроїв...", - "col_device": "пристрій", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Загальна кількість пристроїв", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Рівень відповідності", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Нала��тувати", - "no_devices": "Пристроїв не знайдено", - "usb_title": "USB Керування портом", - "usb_hint": "Контролюйте доступ до пристрою зберігання USB для вибраного пристрою або політику за замовчуванням для всієї організації.", - "usb_storage_policy": "USB Політика зберігання", - "usb_whitelist": "Пристрої в білому списку (по одному на рядок)", - "usb_whitelist_hint": "VID:PID (наприклад, 0781:5583)", - "usb_audit_log": "Журнал підключень пристрою USB", - "optical_title": "Керування оптичним приводом", - "optical_hint": "Контролюйте доступ до приводу CD/DVD/Blu-ray для вибраного пристрою.", - "optical_policy": "Політика оптичного приводу", - "optical_audit_log": "Журнал доступу до оптичного приводу", - "monitors_title": "Керування монітором", - "monitors_hint": "Налаштуйте параметри монітора, включаючи максимальну кількість, контроль роздільної здатності, графіки яскравості та живлення.", - "monitors_max_count": "Максимальна кількість моніторів (0 = необмежена кількість)", - "monitors_max_hint": "0 означає відсутність обмежень", - "monitors_resolution": "Максимальна роздільна здатність", - "monitors_brightness": "Обмеження яскравості", - "monitors_power_schedule": "Графік живлення", - "monitors_power_hint": "напр. вихідний: 22:00-06:00", - "disks_title": "Контроль доступу до диска", - "disks_hint": "Налаштуйте політики доступу до диска, включаючи режим лише для читання, застосування шифрування та видимість розділів.", - "disks_readonly": "Примусовий режим лише для ч��тання", - "disks_encryption": "Вимагати шифрування (BitLocker/LUKS)", - "disks_smart": "Увімкнути S.M.A.R.T. моніторинг", - "disks_hidden": "Приховані розділи", - "disks_hidden_hint": "Літери дисків або точки монтування, розділені комами", - "quotas_title": "Квоти ресурсів", - "quotas_hint": "Установіть для кожного користувача процесор, оперативну пам’ять, пропускну здатність і дискові квоти для вибраного пристрою.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Обмеження пропускної здатності (Мбіт/с)", - "quotas_bandwidth_hint": "0 = ��еобмежений", - "quotas_disk_quota": "Дискова квота (ГБ)", - "quotas_disk_hint": "0 = ��еобмежений", - "quotas_process_whitelist": "Білий список процесів (по одному на рядок)", - "quotas_process_hint": "напр. chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Лише білий список", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Оновлення програмного забезпечення", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Встановлена версія", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Перевірте наявність оновлень", - "checking": "Checking…", - "up_to_date": "В актуальному стані", - "update_available": "Доступне оновлення", - "changelog": "Release Notes", - "no_changelog": "Немає приміток до випуску", - "files_changed": "Файли змінені", - "files": "файли", - "changes_unavailable": "Не вдалося завантажити список змін файлів. Ви все ще можете встановити оновлення.", - "create_backup": "Створіть резервну копію перед оновленням", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Встановлення оновлення…", - "creating_backup": "Створення резервної копії…", - "downloading": "Завантаження файлів…", - "install_success": "Оновлення успішно встановлено. Консоль перезапускається…", - "install_failed": "Помилка встановлення оновлення", - "restarting": "Очікування перезапуску консолі…", - "restart_complete": "Консоль успішно перезавантажено", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Версію оновлення не вибрано. Спочатку перевірте наявність оновлень.", - "backups_title": "Оновити резервні копії", - "backups_desc": "Резервні копії перед оновленням створюються автоматично перед кожним оновленням", - "no_backups": "Резервні копії оновлень не знайдено", - "restore": "Restore", - "restore_confirm": "Ви впевнені, що бажаєте відновити з цієї резервної копії? Змінені файли будуть перезаписані.", - "restore_success": "Резервну копію успішно відновлено. Консоль перезапускається…", - "baseline_set": "Базовий набір", - "commits_behind": "фіксує позаду", - "total_files": "Всього файлів", - "applied": "Applied", - "failed": "Не вдалося", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Серверний компонент", - "component_agent": "Agent", - "component_scripts": "Сценарії та Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Перевірка Go…", - "go_not_found": "Go не встановлено", - "go_check_failed": "Не вдалося перевірити наявність Go", - "server_building": "Компіляція Go server… Це може зайняти кілька хвилин.", - "server_built": "Двійковий файл сервера скомпільований", - "server_build_failed": "Помилка компіляції сервера", - "server_deployed": "Двійковий файл сервера розгорнуто", - "server_deploy_failed": "Помилка розгортання сервера", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Завантаження джерела сервера…", - "delete": "Видалити", - "delete_confirm": "Видалити резервну копію {name} назавжди? Це неможливо скасувати.", - "delete_success": "Резервну копію видалено", - "delete_failed": "Не вдалося видалити резервну копію", - "retention_label": "Зберігайте N останніх резервних копій", - "retention_hint": "Старіші резервні копії видаляються автоматично після кожного оновлення. Використовуйте 0, щоб зберегти всі резервні копії.", - "retention_saved": "Налаштування збереження збережено", - "retention_invalid": "Зберігання має бути цілим числом від 0 до 1000", - "retention_required_for_prune": "Спочатку встановіть значення збереження більше 0", - "prune_now": "Apply now", - "prune_confirm": "Зберегти лише останні резервні копії {n} і видалити решту?", - "prune_done": "Видалені резервні копії {n}", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Спосіб оновлення", - "strategy_download": "Завантажте попередньо зібраний двійковий файл", - "strategy_compile": "Скомпілювати з джерела", - "both_available": "Завантажити та скомпілювати", - "download_available": "Доступне завантаження", - "no_method": "Немає методу оновлення", - "no_release": "No release", - "available": "в наявності", - "server_downloading": "Завантаження двійкового файлу сервера…", - "server_downloaded": "Двійковий файл сервера завантажено", - "server_download_failed": "Не вдалося завантажити бінарний файл сервера", - "server_download_note": "Попередньо зібраний двійковий файл буде завантажено з GitHub Releases. Зазвичай це займає менше хвилини.", - "install_go_hint": "Установіть Go з https://go.dev/dl/, щоб увімкнути компіляцію, або опублікуйте випуск із попередньо зібраними двійковими файлами", - "strategy_install_go": "Автоматичне встановлення Go та компіляція", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Готовий до автоматичного відновлення", - "toolchain_ready": "Інструмент встановлений", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Завантаження Go Toolchain…", - "toolchain_failed": "Помилка встановлення Go toolchain", - "modal_title": "Встановлення оновлення", - "modal_done_title": "Оновлення завершено", - "modal_close": "Закрити", - "modal_reload_now": "Перезавантажити консоль", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Файли консолі", - "phase_server": "Серверний етап", - "phase_restart": "Перезапустіть", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Резервне копіювання пропущено (на вибір користувача)", - "server_skipped": "Go server пропущено", - "server_not_selected": "Go server not selected", - "server_processing": "Обробка оновлення Go server…", - "no_restart_needed": "Перезавантаження не потрібно", - "complete": "Оновлення застосовано", - "complete_summary": "Оновлення успішно застосовано.", - "complete_with_errors": "Оновлення завершено, але деякі кроки не вдалося. Подробиці дивіться нижче.", - "modal_done_with_errors_title": "Оновлення завершено з помилками", - "console_will_restart": "Процес консолі зараз перезапуститься…", - "restart_complete_msg": "Консоль перезавантажилася. Натисніть «Перезавантажити», щоб завантажити нову версію. Сторінка автоматично перезавантажиться через 8 секунд.", - "refresh_recommended": "Статичні ресурси змінено — перезавантажте сторінку, щоб побачити новий інтерфейс.", - "confirm_title": "Застосувати оновлення", - "confirm_with_backup": "Резервна копія перед оновленням буде створена автоматично.", - "confirm_no_backup": "Резервна копія створюватися не буде (продовжуйте на свій страх і ризик).", - "server_stale_title": "Двійковий файл сервера застарів", - "server_stale_desc": "Джерело Go server було оновлено, але поточний двійковий файл не було перебудовано. Перебудуйте його зараз, щоб застосувати оновлення безпеки та бібліотеки.", - "rebuild_server": "Перебудувати двійковий файл сервера", - "rebuilding_server": "Перебудова…", - "rebuild_server_success": "Двійковий файл сервера перебудовано та перезапущено", - "rebuild_server_failed": "Помилка двійкового відновлення сервера" - }, - "permissions": { - "title": "Дозволи", - "subtitle": "Керуйте дозволами на основі ролей і спеціальними замінами", - "info_title": "Як працюють дозволи", - "info_desc": "Кожна роль має дозволи за замовчуванням. Ви можете додати або видалити окремі дозволи для кожної ролі, перемикаючи їх нижче. Користувацькі заміни виділено, і їх можна будь-коли повернути до значень за замовчуванням.", - "select_role": "Виберіть роль", - "select_role_placeholder": "Виберіть роль...", - "reset_overrides": "Скинути всі перевизначення", - "granted": "Надано", - "overrides": "Перевизначення", - "level": "Рівень", - "super_admin_tag": "Повний доступ", - "server_level_tag": "Серверний рівень", - "custom": "Власний", - "default": "Стандартний", - "revert": "Повернутися до замовчування", - "saved": "Дозвіл оновлено", - "reverted": "Повернуто до замовчування", - "all_reverted": "Усі перевизначення скасовано", - "confirm_reset": "Скинути всі настроювані зміни для цієї ролі до значень за умовчанням?", - "empty_title": "Виберіть роль", - "empty_desc": "Виберіть роль зі спадного списку вище, щоб переглянути та керувати її дозволами.", - "locked_title": "Суперадміністратор", - "locked_desc": "Суперадміністратор має всі дозволи за замовчуванням і не може бути налаштований.", - "cat_device": "Пристрої", - "cat_user": "Користувачі", - "cat_server": "Сервер", - "cat_org": "організації", - "cat_audit": "Аудит і моніторинг", - "cat_cdap": "CDAP", - "cat_enrollment": "Реєстрація", - "cat_chat": "Чат", - "cat_branding": "Брендинг", - "perm_device_view": "Перегляд пристроїв", - "perm_device_connect": "Підключіться до пристроїв", - "perm_device_edit": "Редагувати пристрої", - "perm_device_delete": "Видалити пристрої", - "perm_device_ban": "Заборонити / розблокувати пристрої", - "perm_device_change_id": "Змінити ID пристрою", - "perm_user_view": "Переглянути користувачів", - "perm_user_create": "Створення користувачів", - "perm_user_edit": "Редагувати користувачів", - "perm_user_delete": "Видалити користувачів", - "perm_server_config": "Конфігурація сервера", - "perm_server_keys": "Керуйте ключами API", - "perm_org_create": "Створюйте організації", - "perm_org_edit": "Редагувати організації", - "perm_org_delete": "Видалити організації", - "perm_org_manage_users": "Керуйте користувачами організації", - "perm_org_manage_devices": "Керуйте пристроями організації", - "perm_audit_view": "Перегляд журналів аудиту", - "perm_metrics_view": "Перегляд показників", - "perm_blocklist_edit": "Редагувати список блокувань", - "perm_cdap_view": "Переглянути пристрої CDAP", - "perm_cdap_command": "Надсилайте команди CDAP", - "perm_cdap_terminal": "CDAP термінальний доступ", - "perm_cdap_files": "Доступ до файлу CDAP", - "perm_enrollment_manage": "Керувати реєстра��ією", - "perm_enrollment_approve": "Підтвердити реєстрацію", - "perm_chat_access": "Доступ до чату", - "perm_branding_edit": "Редагувати брендинг", - "perm_server_attestation": "Атестація продуктивності сервера" - }, - "notifications": { - "title": "Сповіщення", - "empty": "Немає нових сповіщень", - "mark_all_read": "Позначити все прочитане", - "see_all": "Переглянути всі запити на допомогу", - "help_request": "Прохання про допомогу", - "just_now": "just now" - }, - "accessibility": { - "title": "Доступність", - "subtitle": "Налаштуйте консоль для зору, руху та читання.", - "close": "Закрити меню доступності", - "profiles": "Швидкі профілі", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Більший текст, сильний контраст і фокус.", - "profile_dyslexia": "Комфорт читання", - "profile_dyslexia_hint": "Читабельний шрифт і більші інтервали.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Зменшує переходи та призупиняє анімацію.", - "profile_color_assist": "Підтримка кольорів", - "profile_color_assist_hint": "Кольоровий фільтр, мітки та виділені посилання.", - "reading": "Читання", - "font_size": "Розмір тексту", - "line_height": "Висота рядка", - "letter_spacing": "Інтервал між літерами", - "word_spacing": "Інтервал між словами", - "readable_font": "Читабельний шрифт", - "readable_font_hint": "Використовує широкі, знайомі форми букв.", - "dyslexia_spacing": "Дислексія інтервал", - "dyslexia_spacing_hint": "Додає додатковий пробіл для довгого тексту.", - "visual": "Візуальне", - "contrast": "Контраст", - "contrast_normal": "Normal", - "contrast_high_dark": "Темний високий контраст", - "contrast_high_light": "Висококонтрастне світло", - "contrast_yellow_black": "Жовте на чорному", - "color_filter": "Фільтр кольорового зору", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Насиченість кольору", - "underline_links": "Підкресліть посилання", - "underline_links_hint": "Робить посилання видимими, не покладаючись на колір.", - "highlight_links": "Виділіть дії", - "highlight_links_hint": "Контури посилань і кнопок.", - "highlight_headings": "Виділіть заголовки", - "highlight_headings_hint": "Позначає заголовки розділів кольоровою смугою.", - "hide_media": "Dim media", - "hide_media_hint": "Затемнює зображення, відео та полотна.", - "interaction": "Взаємодія", - "strong_focus": "Сильний фокус", - "strong_focus_hint": "Показує велике кільце фокусування клавіатури.", - "large_cursor": "Великий курсор", - "large_cursor_hint": "Використовує більший висококонтрастний покажчик.", - "reduce_motion": "Зменшити рух", - "reduce_motion_hint": "Скорочує переходи та плавне прокручування.", - "pause_animations": "Призупинити анімації", - "pause_animations_hint": "Зупиняє циклічний візуальний рух.", - "reading_guide": "Посібник з читання", - "reading_guide_hint": "За вказівником йде яскрава лінія.", - "reading_mask": "Маска для читання", - "reading_mask_hint": "Зменшує вміст над і під вказівником.", - "preview": "Попередній перегляд", - "preview_title": "Попередній перегляд робочої області оператора", - "preview_text": "Перш ніж закривати це меню, перевірте, чи зручно читати текст, посилання, елементи керування та мітки стану.", - "preview_link": "Посилання на деталі пристрою", - "preview_status": "Online", - "preview_button": "Первинна дія", - "preview_secondary": "Secondary", - "reset": "Скинути", - "done": "Готово" - }, - "server_mgmt": { - "title": "Керування сервером", - "subtitle": "Панель типу Cockpit для хоста консолі BetterDesk (БЕТА).", - "beta_tooltip": "Бета-функція — в активній розробці.", - "notice_title": "Бета-функція", - "notice_body": "Ці інструменти працюють на хості, де знаходиться процес консолі BetterDesk. Усі операції перевіряються. Обсяг функцій буде розширено в наступних випусках.", - "tab_overview": "Огляд", - "tab_terminal": "Термінал", - "tab_files": "Файли", - "tab_services": "Служби", - "cpu": "CPU", - "memory": "Памʼять", - "load": "Навантаження середнє", - "disks": "Диски", - "history": "Історія (останні 60 зразків)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Час роботи", - "no_disks": "Дані диска відсутні", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY доступний", - "term_connect": "Зʼєднати", - "term_disconnect": "Розʼєднати", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Помилка підключення", - "term_warning": "Команди запускаються від імені користувача, який володіє процесом консолі. Додайте правило sudoers, щоб увімкнути підвищення.", - "term_hint": "Порада: введіть `sudo -i` для ескалації (потрібна конфігурація sudoers).", - "term_lib_failed": "Не вдалося завантажити бібліотеку терміналу", - "files_up": "На один рівень вище", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Назва", - "files_size": "Розмір", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Порожній каталог", - "files_error": "Не вдалося створити каталог", - "read_failed": "Не вдалося прочитати файл", - "save_failed": "Не вдалося зберегти файл", - "rename_failed": "Не вдалося перейменувати", - "delete_failed": "Не вдалося видалити", - "delete_confirm": "Видалити цей запис?", - "mkdir_prompt": "Нова назва папки:", - "mkdir_failed": "Не вдалося створити папку", - "file_saved": "Файл збережено", - "binary_warn": "Двійковий файл — лише попередній перегляд", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Послуги пошуку…", - "svc_name": "Служба", - "svc_state": "Стан", - "svc_description": "Description", - "svc_empty": "Послуг не знайдено", - "svc_load_failed": "Не вдалося завантажити служби", - "svc_action_failed": "Не вдалося виконати дію", - "svc_confirm": "Run", - "svc_start": "Запустити", - "svc_stop": "Зупинити", - "svc_restart": "Перезапустити", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Завантажте BetterDesk Agent", - "choose_platform": "Виберіть свою платформу", - "choose_platform_hint": "Виберіть інсталятор, який відповідає вашій операційній системі.", - "download": "Завантажити", - "building": "Будівля…", - "failed": "Не вдалося створити", - "need_help": "Потрібна допомога?", - "powered_by": "На основі" - }, - "server_attestation": { - "title": "Атестація сервера", - "subtitle": "Бенчмарк продуктивності, який визначає місткість одночасних віддалених підключень при 80% порозі CPU, RAM і диска.", - "warning_title": "Навантажувальне тестування", - "warning_body": "Бенчмарк симулює паралельні WebSocket-підключення до сигнальних серверів і серверів ретрансляції. Запускайте у непіковий час — цей тест навантажує виробництво.", - "run_benchmark": "Запустити бенчмарк", - "abort": "Перервати", - "download_report": "Завантажити JSON-звіт", - "last_test": "Останній тест", - "no_test_yet": "Ще не запускалися бенчмарки", - "max_connections": "Максимальні підключення", - "threshold_80": "80% поріг — фінальні виміри", - "disk": "Диск", - "ramp_chart": "Графік рампи навантаження", - "connections": "Підключення", - "connections_short": "підкл.", - "tier_guide_title": "Що означає кожен рівень?", - "tier_bronze": "БРОНЗА", - "tier_iron": "ЗАЛІЗО", - "tier_titanium": "ТИТАН", - "tier_platinum": "ПЛАТИНА", - "tier_obsidian": "ОБСИДІАН", - "tier_none": "НЕСЕРТИФІКОВАНО", - "tier_bronze_desc": "1–25 одночасних підключень — малий VPS (1–2 vCPU, 2–4 ГБ RAM).", - "tier_iron_desc": "26–75 підключень — середній сервер (2–4 vCPU, 4–8 ГБ RAM).", - "tier_platinum_desc": "76–200 підключень — сервер з високою продуктивністю (4–8 vCPU, 8–16 ГБ RAM).", - "tier_titanium_desc": "201–400 підключень — корпоративна інфраструктура (8+ vCPU, 16–32 ГБ RAM).", - "tier_obsidian_desc": "401+ підключень — турбо-клас: виділене обладнання, 16+ vCPU, 32+ ГБ RAM, NVMe.", - "docker_note": "Примітка: У Docker виміри CPU/RAM можуть відображати обмеження контейнера, а не фізичного хоста.", - "badge_tooltip": "Атестація сервера BetterDesk — сертифікат продуктивності сервера", - "confirm_run": "Цей бенчмарк навантажить сервер симульованими підключеннями. Продовжити?", - "starting": "Запуск...", - "complete": "Бенчмарк завершено", - "signal_peers": "Сигнальні пири", - "relay_sessions": "Сесії ретрансляції", - "page_error": "Не вдалося завантажити сторінку Атестації сервера", - "mode_estimated": "Оцінено (WebSocket недоступний)", - "incomplete": "Бенчмарк завершився без дійсного рівня" + "form": { + "cancel": "Скасувати" } + } } diff --git a/web-nodejs/lang/vi.json b/web-nodejs/lang/vi.json index 05f5bc07..b38e90a2 100644 --- a/web-nodejs/lang/vi.json +++ b/web-nodejs/lang/vi.json @@ -1,3577 +1,3670 @@ { - "_meta": { - "name": "Vietnamese", - "native_name": "Tiếng Việt", - "flag": "🇻🇳", - "needs_review": true + "_meta": { + "name": "Vietnamese", + "native_name": "Tiếng Việt", + "flag": "🇻🇳", + "needs_review": true + }, + "meta": { + "lang": "en", + "name": "English", + "native_name": "English", + "direction": "ltr" + }, + "common": { + "loading": "Đang tải...", + "confirm": "Xác nhận", + "alert": "Alert", + "prompt": "Nhập giá trị", + "copied": "Đã sao chép vào bảng nhớ tạm", + "save": "Lưu", + "saved": "Đã lưu", + "error": "Error", + "success": "Success", + "warning": "Warning", + "info": "Information", + "all": "All", + "cancel": "Hủy bỏ", + "delete": "Xóa", + "actions": "Actions", + "close": "Đóng", + "required": "bắt buộc", + "name_required": "Tên là bắt buộc", + "active": "Active", + "inactive": "Inactive", + "invalid_json": "JSON không hợp lệ", + "field_required": "{field} là bắt buộc", + "back": "Quay lại", + "edit": "Chỉnh sửa", + "yes": "Có", + "no": "Không" + }, + "nav": { + "main": "Main", + "tools": "Tools", + "system": "System", + "dashboard": "Trang tổng quan", + "devices": "Thiết bị", + "keys": "Keys", + "generator": "Generator", + "settings": "Cài đặt", + "users": "Users", + "inventory": "Inventory", + "tickets": "Tickets", + "help_requests": "Yêu cầu trợ giúp", + "activity": "Activity", + "automation": "Tự động hóa", + "file_transfer": "Truyền tệp", + "network": "Network", + "dataguard": "DataGuard", + "reports": "Reports", + "tenants": "Tenants", + "registrations": "Registrations", + "management": "Quản lý", + "toggle_sidebar": "Chuyển đổi thanh bên", + "cdap": "Thiết bị CDAP", + "fleet": "Fleet", + "scaling": "Scaling", + "cross_platform": "Cross-Platform", + "tokens": "Mã thông báo thiết bị", + "organizations": "Tổ chức", + "policies": "Chính sách", + "attestation": "Attestation", + "remote": "Máy tính để bàn từ xa", + "toolkit": "Toolkit", + "security_audit": "Kiểm tra an ninh", + "languages": "Languages", + "resource_control": "Kiểm soát tài nguyên", + "chat": "Chat", + "help": "Help", + "expand_sidebar": "Mở rộng thanh bên", + "toggle_theme": "Chuyển đổi chủ đề", + "sdk_studio": "SDK Studio", + "login": "Login", + "permissions": "Quyền", + "server_management": "Quản lý máy chủ", + "server_attestation": "Chứng nhận máy chủ", + "commercialization": "Thương mại hóa" + }, + "auth": { + "login": "Login", + "logout": "Logout", + "login_title": "Sign In", + "login_subtitle": "Đăng nhập vào Bảng điều khiển BetterDesk", + "username": "Tên người dùng", + "username_placeholder": "Nhập tên người dùng", + "password": "Mật khẩu", + "password_placeholder": "Nhập mật khẩu", + "remember_me": "Remember me", + "login_failed": "Đăng nhập không thành công. Vui lòng kiểm tra thông tin đăng nhập của bạn.", + "invalid_credentials": "Tên người dùng hoặc mật khẩu không hợp lệ.", + "username_collision": "Đã tồn tại tài khoản cục bộ với tên người dùng này. Đăng nhập bằng mật khẩu cục bộ hoặc yêu cầu quản trị viên đổi tên hoặc xóa tài khoản xung đột.", + "fill_all_fields": "Vui lòng điền vào tất cả các trường", + "logout_confirm": "Bạn có chắc chắn muốn đăng xuất không?", + "change_password": "Thay đổi mật khẩu", + "password_required": "Cần có mật khẩu", + "totp_title": "Xác thực hai yếu tố", + "totp_subtitle": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", + "totp_code": "Verification Code", + "totp_verify": "Verify", + "totp_use_recovery": "Thay vào đó hãy sử dụng mã khôi phục", + "totp_use_code": "Thay vào đó hãy sử dụng mã xác thực", + "totp_recovery_code": "Mã khôi phục", + "totp_back_to_login": "Quay lại để đăng nhập", + "totp_invalid_code": "Mã xác minh không hợp lệ. Vui lòng thử lại.", + "totp_enter_code": "Vui lòng nhập mã gồm 6 chữ số", + "totp_enter_recovery": "Vui lòng nhập mã khôi phục", + "totp_session_expired": "Phiên đã hết hạn. Vui lòng đăng nhập lại.", + "totp_already_enabled": "Xác thực hai yếu tố đã được bật", + "pro_only_account": "Tài khoản này chỉ dành cho máy khách để bàn RustDesk. Vui lòng sử dụng ứng dụng RustDesk để đăng nhập.", + "passwords_mismatch": "Mật khẩu không khớp", + "or": "hoặc", + "login_sso": "Đăng nhập bằng SSO", + "login_sso_with": "Đăng nhập bằng {{provider}}", + "oidc_denied": "Quyền truy cập đã bị nhà cung cấp danh tính từ chối.", + "oidc_invalid": "Lệnh gọi lại OIDC không hợp lệ. Vui lòng thử lại.", + "oidc_failed": "Xác thực OIDC không thành công. Vui lòng thử lại.", + "oidc_error": "Đã xảy ra lỗi trong quá trình đăng nhập SSO.", + "oidc_no_account": "Không tìm thấy tài khoản của bạn và tính năng đăng ký tự động bị tắt.", + "totp_rate_limited": "Quá nhiều nỗ lực. Vui lòng thử l���i sau.", + "emergency_mode_banner": "Go server không thể truy cập được - đang chạy ở chế độ khẩn cấp (chỉ dành cho quản trị viên, chức năng hạn chế)" + }, + "dashboard": { + "title": "Trang tổng quan", + "subtitle": "Overview of your RustDesk server", + "total_devices": "Tổng số thiết bị", + "online_now": "Online Now", + "banned": "Banned", + "active_connections": "Kết nối đang hoạt động", + "offline_devices": "Offline", + "server_status": "Trạng thái máy chủ", + "quick_actions": "Thao tác nhanh", + "manage_devices": "Quản lý các thiết bị được kết nối", + "view_keys": "Xem khóa máy chủ", + "generate_config": "Tạo cấu hình máy khách", + "server_settings": "Định cấu hình cài đặt", + "greeting_morning": "Chào buổi sáng, {name}", + "greeting_afternoon": "Chào buổi chiều, {name}", + "greeting_evening": "Chào buổi tối, {name}", + "greeting_night": "Chúc ngủ ngon, {name}", + "health_overview": "Tổng quan về sức khỏe", + "devices_online": "Thiết bị trực tuyến", + "active_alerts": "Cảnh báo hoạt động", + "recent_connections": "Tổng số thiết bị", + "server_uptime": "Thời gian hoạt động của máy chủ", + "activity_feed": "Hoạt động gần đây", + "no_recent_activity": "Không có hoạt động gần đây", + "just_now": "just now", + "ago": "ago", + "tip_desktop_mode": "Hãy thử Chế độ máy tính để bàn để có không gian làm việc nhiều cửa sổ với các tiện ích giám sát.", + "tip_keyboard_shortcuts": "Nhấn Ctrl+K ở bất cứ đâu để mở bảng lệnh tìm kiếm nhanh.", + "tip_address_book": "Đồng bộ hóa sổ địa chỉ của bạn trên các thiết bị bằng cách đăng nhập từ ứng dụng khách RustDesk.", + "tip_2fa": "Bật Xác thực hai yếu tố trong Cài đặt để bảo mật tài khoản hơn.", + "tip_bulk_actions": "Chọn nhiều thiết bị và sử dụng các hành động hàng loạt để quản lý chúng cùng một lúc.", + "tip_theme": "Chuyển đổi giữa các chủ đề Tối và Sáng trong cài đặt thanh bên.", + "tip_cdap": "Kết nối các thiết bị IoT và cảm biến công nghiệp thông qua cổng CDAP.", + "tip_tutorials": "Nhấp vào nút trợ giúp ở góc dưới bên phải để xem hướng dẫn tương tác." + }, + "devices": { + "title": "Thiết bị", + "id": "ID", + "hostname": "Hostname", + "username": "Tên người dùng", + "platform": "Platform", + "version": "Version", + "ip_address": "IP Address", + "note": "Note", + "last_seen": "Last Seen", + "last_online": "Last Online", + "first_seen": "First Seen", + "created": "Đã tạo", + "status": "Status", + "ban_reason": "Ban Reason", + "actions": "Actions", + "search_placeholder": "Tìm kiếm thiết bị...", + "filter_all": "All", + "filter_online": "Online", + "filter_offline": "Offline", + "filter_banned": "Banned", + "selected": "selected", + "showing": "Showing", + "of": "of", + "sync_status": "Trạng thái đồng bộ hóa", + "sync_success": "Đã đồng bộ hóa trạng thái thành công", + "empty_title": "Không tìm thấy thiết bị nào", + "empty_text": "Không có thiết bị nào phù hợp với bộ lọc hiện tại của bạn", + "edit_title": "Chi tiết thiết bị", + "delete_title": "Xóa thiết bị", + "delete_confirm": "Bạn có chắc chắn muốn xóa thiết bị {id} không?", + "delete_warning": "Bạn sắp xóa vĩnh viễn thiết bị này:", + "delete_permanent": "Không thể hoàn tác hành động này. Tất cả dữ liệu liên quan đến thiết bị này sẽ bị xóa vĩnh viễn khỏi cơ sở dữ liệu.", + "delete_success": "Đã xóa thiết bị thành công", + "revoke_option": "Thu hồi thiết bị", + "revoke_hint": "Chặn ID thiết bị và ngắt kết nối đang hoạt động", + "revoke_success": "Đã thu hồi thiết bị thành công", + "details": "Chi tiết thiết bị", + "ban_title": "Cấm thiết bị", + "ban_confirm": "Bạn có chắc chắn muốn cấm thiết bị {id} không?", + "ban_success": "Thiết bị đã bị cấm thành công", + "unban_title": "Bỏ cấm thiết bị", + "unban_confirm": "Bạn có chắc chắn muốn bỏ cấm thiết bị {id} không?", + "unban_success": "Đã mở khóa thiết bị thành công", + "change_id": "Change ID", + "change_id_title": "Thay đổi ID thiết bị", + "new_id": "New ID", + "change_id_hint": "Chỉ 6-16 ký tự, chữ cái, số, dấu gạch ngang và dấu gạch dưới", + "change_id_success": "ID thiết bị đã được thay đổi thành công", + "id_length_error": "ID phải dài 6-16 ký tự", + "id_format_error": "ID chỉ có thể chứa chữ cái, số, dấu gạch ngang và dấu gạch dưới", + "bulk_delete_title": "Xóa nhiều thiết bị", + "bulk_delete_confirm": "Bạn có chắc chắn muốn xóa thiết bị {count} không?", + "bulk_delete_success": "Thiết bị {count} đã được xóa thành công", + "columns": "Columns", + "toggle_columns": "Chuyển đổi các cột hiển thị", + "not_found": "Không tìm thấy thiết bị", + "delete_failed": "Không xóa được thiết bị", + "change_id_failed": "Không thể thay đổi ID thiết bị", + "invalid_id": "ID thiết bị không hợp lệ (yêu cầu 6-16 ký tự)", + "invalid_id_format": "Định dạng ID không hợp lệ (chỉ chữ cái, số, dấu gạch ngang, dấu gạch dưới)", + "id_exists": "ID thiết bị đã tồn tại", + "no_selection": "Không có thiết bị nào được chọn", + "device_type": "Type", + "filter_type_all": "All Types", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "Desktop", + "filter_type_scada": "SCADA", + "filter_type_iot": "IoT", + "filter_type_agent": "Agent", + "cdap_connected": "CDAP Connected", + "revoke": "Revoke", + "access_policy": "Chính sách truy cập", + "unattended_access": "Truy cập không cần giám sát", + "enable_unattended": "Cho phép truy cập không giám sát", + "access_password": "Mật khẩu truy cập", + "password_configured": "Đã đặt mật khẩu", + "no_password": "Không có mật khẩu", + "new_password": "Mật khẩu mới (để trống để giữ mật khẩu hiện tại)", + "clear_password": "Xóa mật khẩu", + "access_schedule": "Lịch truy cập", + "enable_schedule": "Cho phép truy cập dựa trên thời gian", + "allowed_days": "Ngày được phép", + "start_time": "Start time", + "end_time": "End time", + "timezone": "Timezone", + "allowed_operators": "Người vận hành được phép", + "all_operators": "Tất cả các toán tử (để trống)", + "operators_hint": "Tên người dùng được phân tách bằng dấu phẩy. Để trống để cho phép tất cả các toán tử.", + "last_updated_by": "Cập nhật lần cuối bởi", + "access_policy_saved": "Đã lưu chính sách truy cập", + "tabs": { + "overview": "Tổng quan", + "hardware": "Hardware", + "metrics": "Số liệu", + "connections": "Kết nối", + "audit": "Audit", + "info": "Info", + "history": "Lịch sử" }, - "meta": { - "lang": "en", - "name": "English", - "native_name": "English", - "direction": "ltr" + "hardware": { + "cpu": "Processor", + "memory": "Memory", + "disk": "Disk", + "os": "Operating System", + "hostname": "Hostname", + "uptime": "Uptime", + "load_avg": "Tải trung bình", + "network": "Bộ điều hợp mạng", + "no_data": "Không có dữ liệu phần cứng", + "title": "Thông tin phần cứng", + "gpu": "Graphics Card" }, - "common": { - "loading": "Đang tải...", - "confirm": "Xác nhận", - "alert": "Alert", - "prompt": "Nhập giá trị", - "copied": "Đã sao chép vào bảng nhớ tạm", - "save": "Lưu", - "saved": "Đã lưu", - "error": "Error", - "success": "Success", - "warning": "Warning", - "info": "Information", - "all": "All", - "cancel": "Hủy bỏ", - "delete": "Xóa", - "actions": "Actions", - "close": "Đóng", - "required": "bắt buộc", - "name_required": "Tên là bắt buộc", - "active": "Active", - "inactive": "Inactive", - "invalid_json": "JSON không hợp lệ", - "field_required": "{field} là bắt buộc", - "back": "Quay lại", - "edit": "Chỉnh sửa", - "yes": "Có", - "no": "Không" - }, - "nav": { - "main": "Main", - "tools": "Tools", - "system": "System", - "dashboard": "Trang tổng quan", - "devices": "Thiết bị", - "keys": "Keys", - "generator": "Generator", - "settings": "Cài đặt", - "users": "Users", - "inventory": "Inventory", - "tickets": "Tickets", - "help_requests": "Yêu cầu trợ giúp", - "activity": "Activity", - "automation": "Tự động hóa", - "file_transfer": "Truyền tệp", - "network": "Network", - "dataguard": "DataGuard", - "reports": "Reports", - "tenants": "Tenants", - "registrations": "Registrations", - "management": "Quản lý", - "toggle_sidebar": "Chuyển đổi thanh bên", - "cdap": "Thiết bị CDAP", - "fleet": "Fleet", - "scaling": "Scaling", - "cross_platform": "Cross-Platform", - "tokens": "Mã thông báo thiết bị", - "organizations": "Tổ chức", - "policies": "Chính sách", - "attestation": "Attestation", - "remote": "Máy tính để bàn từ xa", - "toolkit": "Toolkit", - "security_audit": "Kiểm tra an ninh", - "languages": "Languages", - "resource_control": "Kiểm soát tài nguyên", - "chat": "Chat", - "help": "Help", - "expand_sidebar": "Mở rộng thanh bên", - "toggle_theme": "Chuyển đổi chủ đề", - "sdk_studio": "SDK Studio", - "login": "Login", - "permissions": "Quyền", - "server_management": "Quản lý máy chủ", - "server_attestation": "Chứng nhận máy chủ" - }, - "auth": { - "login": "Login", - "logout": "Logout", - "login_title": "Sign In", - "login_subtitle": "Đăng nhập vào Bảng điều khiển BetterDesk", - "username": "Tên người dùng", - "username_placeholder": "Nhập tên người dùng", - "password": "Mật khẩu", - "password_placeholder": "Nhập mật khẩu", - "remember_me": "Remember me", - "login_failed": "Đăng nhập không thành công. Vui lòng kiểm tra thông tin đăng nhập của bạn.", - "invalid_credentials": "Tên người dùng hoặc mật khẩu không hợp lệ.", - "username_collision": "Đã tồn tại tài khoản cục bộ với tên người dùng này. Đăng nhập bằng mật khẩu cục bộ hoặc yêu cầu quản trị viên đổi tên hoặc xóa tài khoản xung đột.", - "fill_all_fields": "Vui lòng điền vào tất cả các trường", - "logout_confirm": "Bạn có chắc chắn muốn đăng xuất không?", - "change_password": "Thay đổi mật khẩu", - "password_required": "Cần có mật khẩu", - "totp_title": "Xác thực hai yếu tố", - "totp_subtitle": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", - "totp_code": "Verification Code", - "totp_verify": "Verify", - "totp_use_recovery": "Thay vào đó hãy sử dụng mã khôi phục", - "totp_use_code": "Thay vào đó hãy sử dụng mã xác thực", - "totp_recovery_code": "Mã khôi phục", - "totp_back_to_login": "Quay lại để đăng nhập", - "totp_invalid_code": "Mã xác minh không hợp lệ. Vui lòng thử lại.", - "totp_enter_code": "Vui lòng nhập mã gồm 6 chữ số", - "totp_enter_recovery": "Vui lòng nhập mã khôi phục", - "totp_session_expired": "Phiên đã hết hạn. Vui lòng đăng nhập lại.", - "totp_already_enabled": "Xác thực hai yếu tố đã được bật", - "pro_only_account": "Tài khoản này chỉ dành cho máy khách để bàn RustDesk. Vui lòng sử dụng ứng dụng RustDesk để đăng nhập.", - "passwords_mismatch": "Mật khẩu không khớp", - "or": "hoặc", - "login_sso": "Đăng nhập bằng SSO", - "login_sso_with": "Đăng nhập bằng {{provider}}", - "oidc_denied": "Quyền truy cập đã bị nhà cung cấp danh tính từ chối.", - "oidc_invalid": "Lệnh gọi lại OIDC không hợp lệ. Vui lòng thử lại.", - "oidc_failed": "Xác thực OIDC không thành công. Vui lòng thử lại.", - "oidc_error": "Đã xảy ra lỗi trong quá trình đăng nhập SSO.", - "oidc_no_account": "Không tìm thấy tài khoản của bạn và tính năng đăng ký tự động bị tắt.", - "totp_rate_limited": "Quá nhiều nỗ lực. Vui lòng thử l���i sau.", - "emergency_mode_banner": "Go server không thể truy cập được - đang chạy ở chế độ khẩn cấp (chỉ dành cho quản trị viên, chức năng hạn chế)" - }, - "dashboard": { - "title": "Trang tổng quan", - "subtitle": "Overview of your RustDesk server", - "total_devices": "Tổng số thiết bị", - "online_now": "Online Now", - "banned": "Banned", - "active_connections": "Kết nối đang hoạt động", - "offline_devices": "Offline", - "server_status": "Trạng thái máy chủ", - "quick_actions": "Thao tác nhanh", - "manage_devices": "Quản lý các thiết bị được kết nối", - "view_keys": "Xem khóa máy chủ", - "generate_config": "Tạo cấu hình máy khách", - "server_settings": "Định cấu hình cài đặt", - "greeting_morning": "Chào buổi sáng, {name}", - "greeting_afternoon": "Chào buổi chiều, {name}", - "greeting_evening": "Chào buổi tối, {name}", - "greeting_night": "Chúc ngủ ngon, {name}", - "health_overview": "Tổng quan về sức khỏe", - "devices_online": "Thiết bị trực tuyến", - "active_alerts": "Cảnh báo hoạt động", - "recent_connections": "Tổng số thiết bị", - "server_uptime": "Thời gian hoạt động của máy chủ", - "activity_feed": "Hoạt động gần đây", - "no_recent_activity": "Không có hoạt động gần đây", - "just_now": "just now", - "ago": "ago", - "tip_desktop_mode": "Hãy thử Chế độ máy tính để bàn để có không gian làm việc nhiều cửa sổ với các tiện ích giám sát.", - "tip_keyboard_shortcuts": "Nhấn Ctrl+K ở bất cứ đâu để mở bảng lệnh tìm kiếm nhanh.", - "tip_address_book": "Đồng bộ hóa sổ địa chỉ của bạn trên các thiết bị bằng cách đăng nhập từ ứng dụng khách RustDesk.", - "tip_2fa": "Bật Xác thực hai yếu tố trong Cài đặt để bảo mật tài khoản hơn.", - "tip_bulk_actions": "Chọn nhiều thiết bị và sử dụng các hành động hàng loạt để quản lý chúng cùng một lúc.", - "tip_theme": "Chuyển đổi giữa các chủ đề Tối và Sáng trong cài đặt thanh bên.", - "tip_cdap": "Kết nối các thiết bị IoT và cảm biến công nghiệp thông qua cổng CDAP.", - "tip_tutorials": "Nhấp vào nút trợ giúp ở góc dưới bên phải để xem hướng dẫn tương tác." - }, - "devices": { - "title": "Thiết bị", - "id": "ID", - "hostname": "Hostname", - "username": "Tên người dùng", - "platform": "Platform", - "version": "Version", - "ip_address": "IP Address", - "note": "Note", - "last_seen": "Last Seen", - "last_online": "Last Online", - "first_seen": "First Seen", - "created": "Đã tạo", - "status": "Status", - "ban_reason": "Ban Reason", - "actions": "Actions", - "search_placeholder": "Tìm kiếm thiết bị...", - "filter_all": "All", - "filter_online": "Online", - "filter_offline": "Offline", - "filter_banned": "Banned", - "selected": "selected", - "showing": "Showing", - "of": "of", - "sync_status": "Trạng thái đồng bộ hóa", - "sync_success": "Đã đồng bộ hóa trạng thái thành công", - "empty_title": "Không tìm thấy thiết bị nào", - "empty_text": "Không có thiết bị nào phù hợp với bộ lọc hiện tại của bạn", - "edit_title": "Chi tiết thiết bị", - "delete_title": "Xóa thiết bị", - "delete_confirm": "Bạn có chắc chắn muốn xóa thiết bị {id} không?", - "delete_warning": "Bạn sắp xóa vĩnh viễn thiết bị này:", - "delete_permanent": "Không thể hoàn tác hành động này. Tất cả dữ liệu liên quan đến thiết bị này sẽ bị xóa vĩnh viễn khỏi cơ sở dữ liệu.", - "delete_success": "Đã xóa thiết bị thành công", - "revoke_option": "Thu hồi thiết bị", - "revoke_hint": "Chặn ID thiết bị và ngắt kết nối đang hoạt động", - "revoke_success": "Đã thu hồi thiết bị thành công", - "details": "Chi tiết thiết bị", - "ban_title": "Cấm thiết bị", - "ban_confirm": "Bạn có chắc chắn muốn cấm thiết bị {id} không?", - "ban_success": "Thiết bị đã bị cấm thành công", - "unban_title": "Bỏ cấm thiết bị", - "unban_confirm": "Bạn có chắc chắn muốn bỏ cấm thiết bị {id} không?", - "unban_success": "Đã mở khóa thiết bị thành công", - "change_id": "Change ID", - "change_id_title": "Thay đổi ID thiết bị", - "new_id": "New ID", - "change_id_hint": "Chỉ 6-16 ký tự, chữ cái, số, dấu gạch ngang và dấu gạch dưới", - "change_id_success": "ID thiết bị đã được thay đổi thành công", - "id_length_error": "ID phải dài 6-16 ký tự", - "id_format_error": "ID chỉ có thể chứa chữ cái, số, dấu gạch ngang và dấu gạch dưới", - "bulk_delete_title": "Xóa nhiều thiết bị", - "bulk_delete_confirm": "Bạn có chắc chắn muốn xóa thiết bị {count} không?", - "bulk_delete_success": "Thiết bị {count} đã được xóa thành công", - "columns": "Columns", - "toggle_columns": "Chuyển đổi các cột hiển thị", - "not_found": "Không tìm thấy thiết bị", - "delete_failed": "Không xóa được thiết bị", - "change_id_failed": "Không thể thay đổi ID thiết bị", - "invalid_id": "ID thiết bị không hợp lệ (yêu cầu 6-16 ký tự)", - "invalid_id_format": "Định dạng ID không hợp lệ (chỉ chữ cái, số, dấu gạch ngang, dấu gạch dưới)", - "id_exists": "ID thiết bị đã tồn tại", - "no_selection": "Không có thiết bị nào được chọn", - "device_type": "Type", - "filter_type_all": "All Types", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "Desktop", - "filter_type_scada": "SCADA", - "filter_type_iot": "IoT", - "filter_type_agent": "Agent", - "cdap_connected": "CDAP Connected", - "revoke": "Revoke", - "access_policy": "Chính sách truy cập", - "unattended_access": "Truy cập không cần giám sát", - "enable_unattended": "Cho phép truy cập không giám sát", - "access_password": "Mật khẩu truy cập", - "password_configured": "Đã đặt mật khẩu", - "no_password": "Không có mật khẩu", - "new_password": "Mật khẩu mới (để trống để giữ mật khẩu hiện tại)", - "clear_password": "Xóa mật khẩu", - "access_schedule": "Lịch truy cập", - "enable_schedule": "Cho phép truy cập dựa trên thời gian", - "allowed_days": "Ngày được phép", - "start_time": "Start time", - "end_time": "End time", - "timezone": "Timezone", - "allowed_operators": "Người vận hành được phép", - "all_operators": "Tất cả các toán tử (để trống)", - "operators_hint": "Tên người dùng được phân tách bằng dấu phẩy. Để trống để cho phép tất cả các toán tử.", - "last_updated_by": "Cập nhật lần cuối bởi", - "access_policy_saved": "Đã lưu chính sách truy cập", - "tabs": { - "overview": "Tổng quan", - "hardware": "Hardware", - "metrics": "Số liệu", - "connections": "Kết nối", - "audit": "Audit", - "info": "Info", - "history": "Lịch sử" - }, - "hardware": { - "cpu": "Processor", - "memory": "Memory", - "disk": "Disk", - "os": "Operating System", - "hostname": "Hostname", - "uptime": "Uptime", - "load_avg": "Tải trung bình", - "network": "Bộ điều hợp mạng", - "no_data": "Không có dữ liệu phần cứng", - "title": "Thông tin phần cứng", - "gpu": "Graphics Card" - }, - "display_name": "Tên hiển thị", - "display_name_placeholder": "Tên tùy chỉnh (ghi đè tên máy chủ)", - "note_placeholder": "Lưu ý về thiết bị này", - "tags": "Tags", - "filter_by_tags": "Lọc theo thẻ", - "no_tags": "No tags", - "all_groups": "Tất cả các nhóm", - "create_group": "Tạo nhóm", - "manage_groups": "Quản lý nhóm", - "group_name": "Tên nhóm", - "group_name_placeholder": "ví dụ: PC đa phương tiện", - "dynamic_group": "Nhóm động từ thẻ", - "dynamic_group_hint": "Các thiết bị có thẻ này sẽ tự động tham gia.", - "tag_filter": "Tag filter", - "group_allowed_users": "Người dùng được phép", - "group_allowed_users_hint": "Để trống để mọi người có quyền truy cập vào nhóm đều có thể nhìn thấy nhóm.", - "group_tag_required": "Bộ lọc thẻ là bắt buộc cho các nhóm động", - "group_invalid": "Mã định danh nhóm không hợp lệ", - "group_not_found": "Không tìm thấy nhóm", - "group_saved": "Đã lưu nhóm thiết bị", - "groups_saved": "Đã lưu nhóm thiết bị", + "display_name": "Tên hiển thị", + "display_name_placeholder": "Tên tùy chỉnh (ghi đè tên máy chủ)", + "note_placeholder": "Lưu ý về thiết bị này", + "tags": "Tags", + "filter_by_tags": "Lọc theo thẻ", + "no_tags": "No tags", + "all_groups": "Tất cả các nhóm", + "create_group": "Tạo nhóm", + "manage_groups": "Quản lý nhóm", + "group_name": "Tên nhóm", + "group_name_placeholder": "ví dụ: PC đa phương tiện", + "dynamic_group": "Nhóm động từ thẻ", + "dynamic_group_hint": "Các thiết bị có thẻ này sẽ tự động tham gia.", + "tag_filter": "Tag filter", + "group_allowed_users": "Người dùng được phép", + "group_allowed_users_hint": "Để trống để mọi người có quyền truy cập vào nhóm đều có thể nhìn thấy nhóm.", + "group_tag_required": "Bộ lọc thẻ là bắt buộc cho các nhóm động", + "group_invalid": "Mã định danh nhóm không hợp lệ", + "group_not_found": "Không tìm thấy nhóm", + "group_saved": "Đã lưu nhóm thiết bị", + "groups_saved": "Đã lưu nhóm thiết bị", "group_membership_added": "Đã thêm vào nhóm", "group_membership_removed": "Đã xóa khỏi nhóm", - "no_groups": "Chưa có nhóm nào", - "manual_groups": "Nhóm thủ công", - "dynamic_memberships": "Tư cách thành viên năng động", - "group_allowed_user_groups": "Nhóm người dùng được phép", - "group_allowed_user_groups_hint": "Người dùng trong nhóm người dùng đã chọn có thể truy cập vào nhóm thiết bị này.", - "no_user_groups": "Không có nhóm người dùng", - "edit_group": "Chỉnh sửa nhóm", - "delete_group": "Xóa nhóm", - "delete_group_confirm": "Xóa nhóm thiết bị {name}?", - "group_deleted": "Đã xóa nhóm thiết bị", - "folder_group_readonly": "Các nhóm được hỗ trợ bởi thư mục được quản lý từ các thư mục.", - "manage_user_groups": "Quản lý nhóm người dùng", - "restore_failed": "Không thể khôi phục thiết bị", - "no_signal_tooltip": "Máy khách vừa liên hệ API nhưng chưa đăng ký trên máy chủ tín hiệu (UDP :21116). Khởi động lại máy khách sau khi di chuyển máy chủ.", - "per_page": "Mỗi trang" - }, - "keys": { - "title": "Khóa máy chủ", - "subtitle": "Khóa công khai và cấu hình cho máy khách RustDesk", - "public_key": "Public Key", - "qr_code": "QR Code", - "server_info": "Thông tin máy chủ", - "download": "Tải xuống khóa", - "show_qr": "Show QR", - "qr_hint": "Quét mã QR này bằng ứng dụng di động RustDesk", - "no_key": "Không tìm thấy khóa công khai", - "no_key_to_copy": "Không có chìa khóa để sao chép", - "no_qr": "Mã QR không có sẵn", - "download_success": "Đã tải xuống tệp khóa", - "not_found": "Không tìm thấy chìa khóa", - "api_not_found": "Không tìm thấy khóa API" - }, - "settings": { - "title": "Cài đặt", - "subtitle": "Cấu hình bảng điều khiển và cài đặt tài khoản", - "tab_general": "General", - "tab_server": "Máy chủ", - "tab_branding": "Branding", - "tab_backup": "Backup", - "language": "Ngôn ngữ", - "change_password": "Thay đổi mật khẩu", - "password_desc": "Cập nhật mật khẩu tài khoản của bạn", - "current_password": "Mật khẩu hiện tại", - "new_password": "Mật khẩu mới", - "confirm_password": "Xác nhận mật khẩu", - "save_password": "Cập nhật mật khẩu", - "password_changed": "Đã thay đổi mật khẩu thành công", - "fill_all_fields": "Vui lòng điền vào tất cả các trường", - "passwords_not_match": "Mật khẩu không khớp", - "password_requirements": "Yêu cầu về mật khẩu", - "password_requirements_not_met": "Mật khẩu không đáp ứng yêu cầu", - "req_length": "Ít nhất 8 ký tự", - "req_uppercase": "Ít nhất một chữ cái viết hoa", - "req_lowercase": "Ít nhất một chữ cái viết thường", - "req_number": "Ít nhất một số", - "server_info": "Thông tin máy chủ", - "version": "Version", - "database": "Database", - "uptime": "Uptime", - "audit_log": "Audit Log", - "audit_desc": "Hoạt động gần đây của bảng điều khiển", - "no_audit_logs": "Không tìm thấy nhật ký kiểm tra", - "backend_title": "Phần cuối của máy chủ", - "backend_desc": "Chọn chương trình phụ trợ máy chủ nào sẽ sử dụng cho dịch vụ quản lý thiết bị và tín hiệu/chuyển tiếp.", - "backend_original": "Original", - "backend_enhanced": "Enhanced", - "backend_rustdesk_desc": "Máy chủ chuyển tiếp và tín hiệu RustDesk tiêu chuẩn (hbbs + hbbr). HTTP cơ bản API với các điểm cuối hạn chế.", - "backend_betterdesk_desc": "Máy chủ dựa trên Go nâng cao với đầy đủ REST API, xác thực JWT, danh sách chặn, thẻ, sự kiện WebSocket thời gian thực và ghi nhật ký kiểm tra.", - "backend_feature_signal": "Máy chủ tín hiệu (đăng ký ID)", - "backend_feature_relay": "Máy chủ chuyển tiếp (rơle kết nối)", - "backend_feature_basic_api": "REST cơ bản API", - "backend_feature_full_api": "Full REST API (hơn 34 điểm cuối)", - "backend_feature_jwt": "Xác thực JWT & TOTP 2FA", - "backend_feature_blocklist": "Quản lý danh sách chặn IP/ID", - "backend_feature_tags": "Thẻ và nhóm thiết bị", - "backend_feature_audit": "Ghi nhật ký sự kiện kiểm tra", - "backend_feature_websocket": "Sự kiện WebSocket thời gian thực", - "backend_connection": "Kết nối", - "backend_api_url": "API URL", - "backend_test": "Kiểm tra kết nối", - "backend_testing": "Đang thử nghiệm...", - "backend_save": "Áp dụng phụ trợ", - "backend_saved": "Phần phụ trợ máy chủ đã thay đổi thành công. Dữ liệu thiết bị bây giờ sẽ được quản lý bởi chương trình phụ trợ mới.", - "backend_save_failed": "Không thể chuyển đổi chương trình phụ trợ máy chủ", - "backend_test_success": "Kết nối thành công! Máy chủ có thể truy cập được.", - "backend_test_failed": "Kết nối không thành công. Máy chủ không thể truy cập được.", - "backend_confirm_switch": "Bạn có chắc chắn muốn chuyển đổi phần phụ trợ của máy chủ không? Điều này sẽ thay đổi cách quản lý thiết bị.", - "backend_unreachable": "Không thể chuyển đổi: máy chủ mục tiêu không thể truy cập được. Khởi động máy chủ trước.", - "invalid_backend": "Lựa chọn phụ trợ không hợp lệ. Chọn 'rustdesk' hoặc 'betterdesk'.", - "backend_status_running": "Connected", - "backend_status_unreachable": "Unreachable", - "backend_status_error": "Error", - "backend_status_unknown": "Unknown", - "totp_title": "Xác thực hai yếu tố", - "totp_desc": "Thêm một lớp bảo mật bổ sung với các ứng dụng xác thực TOTP (Google Authenticator, Microsoft Authenticator, Authy, v.v.)", - "totp_enabled": "Đã bật 2FA", - "totp_enabled_desc": "Tài khoản của bạn được bảo vệ bằng xác thực hai yếu tố.", - "totp_disabled": "2FA không được kích hoạt", - "totp_disabled_desc": "Kích hoạt xác thực hai yếu tố để bảo mật tài khoản bổ sung.", - "totp_setup": "Enable 2FA", - "totp_disable": "Disable 2FA", - "totp_step1": "Cài đặt ứng dụng xác thực trên điện thoại của bạn", - "totp_step2": "Quét mã QR bên dưới", - "totp_step3": "Nhập mã gồm 6 chữ số để xác minh", - "totp_manual_key": "Manual key", - "totp_enter_code": "Nhập mã xác minh", - "totp_verify_enable": "Xác minh & Kích hoạt", - "totp_enabled_success": "Đã bật xác thực hai yếu tố!", - "totp_recovery_warning": "Lưu các mã khôi phục này ở nơi an toàn. Mỗi mã chỉ có thể được sử dụng một lần. Nếu mất quyền truy cập vào ứng dụng xác thực, bạn có thể sử dụng các mã này để đăng nhập.", - "totp_done": "Done", - "totp_disable_warning": "Vô hiệu hóa xác thực hai yếu tố sẽ khiến tài khoản của bạn kém an toàn hơn. Nhập mật khẩu của bạn để xác nhận.", - "totp_disabled_success": "Xác thực hai yếu tố đã bị vô hiệu hóa.", - "tutorials_title": "Hướng dẫn & Hướng dẫn", - "tutorials_desc": "Kiểm soát các chuyến tham quan có hướng dẫn và lớp phủ trợ giúp được hiển thị trên toàn bộ bảng điều khiển", - "tutorials_enabled": "Bật hướng dẫn", - "tutorials_enabled_hint": "Khi bị tắt, hướng dẫn sẽ không tự động bắt đầu và nút trợ giúp sẽ bị ẩn", - "tutorials_reset_hint": "Đánh dấu tất cả các hướng dẫn là chưa xem để có thể hiển thị lại", - "tutorials_enabled_toast": "Đã bật hướng dẫn", - "tutorials_disabled_toast": "Đã tắt hướng dẫn", - "tutorials_reset_toast": "Tất cả các hướng dẫn đã được thiết lập lại", - "tab_auth": "Xác thực", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "Định cấu hình xác th��c bên ngoài thông qua LDAP hoặc Active Directory. Người dùng sẽ có thể đăng nhập bằng thông tin xác thực tên miền của họ.", - "ldap_enabled": "Kích hoạt xác thực LDAP", - "ldap_enabled_hint": "Khi được bật, người dùng có thể đăng nhập bằng thông tin đăng nhập LDAP/AD. Tài khoản cục bộ vẫn hoạt động như dự phòng.", - "ldap_connection": "Kết nối máy chủ", - "ldap_host": "Máy chủ", - "ldap_port": "Cảng", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "Bỏ qua xác minh TLS", - "ldap_timeout": "Hết thời gian kết nối", - "ldap_timeout_hint": "Giây chờ phản hồi của máy chủ LDAP", - "ldap_bind_mode": "Chế độ liên kết", - "ldap_direct_bind": "Ràng buộc trực tiếp", - "ldap_direct_bind_hint": "Liên kết trực tiếp với mẫu DN thay vì sử dụng tài khoản dịch vụ để tìm kiếm.", - "ldap_bind_dn": "Bind DN (tài khoản dịch vụ)", - "ldap_bind_dn_hint": "Tên phân biệt của tài khoản dịch vụ chỉ đọc được sử dụng để tìm kiếm người dùng.", - "ldap_bind_password": "Ràng buộc mật khẩu", - "ldap_base_dn": "DN cơ sở", - "ldap_base_dn_hint": "Cơ sở tìm kiếm để tìm người dùng, ví dụ: dc=ví dụ,dc=com", - "ldap_user_filter": "Bộ lọc người dùng", - "ldap_user_filter_hint": "Bộ lọc LDAP để tìm người dùng. Sử dụng {{username}} làm trình giữ chỗ. Mặc định: (sAMAccountName={{username}})", - "ldap_direct_bind_dn": "Mẫu DN liên kết trực tiếp", - "ldap_direct_bind_dn_hint": "Mẫu DN để liên kết trực tiếp. Sử dụng {{username}} làm trình giữ chỗ, ví dụ: uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "Thuộc tính người dùng", - "ldap_attr_id": "Thuộc tính tên người dùng", - "ldap_attr_email": "Thuộc tính email", - "ldap_attr_name": "Thuộc tính tên hiển thị", - "ldap_group_mapping": "Nhóm → Sơ đồ vai trò", - "ldap_group_base_dn": "Nhóm cơ sở DN", - "ldap_group_base_dn_hint": "Để trống để sử dụng Base DN chính", - "ldap_group_filter": "Bộ lọc nhóm", - "ldap_group_attr_name": "Thuộc tính tên nhóm", - "ldap_default_role": "Vai trò mặc định", - "ldap_default_role_hint": "Vai trò được chỉ định cho người dùng có nhóm LDAP không khớp với bất kỳ ánh xạ nào", - "ldap_role_viewer": "Người xem", - "ldap_role_operator": "Toán tử", - "ldap_role_admin": "Quản trị viên", - "ldap_group_role_map": "Nhóm → Bản đồ vai trò", - "ldap_group_role_map_hint": "Ánh xạ các nhóm LDAP tới các vai trò BetterDesk. Định dạng: GroupDN=vai trò được phân tách bằng | (đường ống). Ví dụ: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "Kiểm tra kết nối", - "ldap_testing": "Đang thử nghiệm...", - "ldap_test_success": "Kết nối thành công! Máy chủ LDAP có thể truy cập được và thông tin xác thực liên kết là hợp lệ.", - "ldap_test_failed": "Kết nối không thành công", - "ldap_save": "Lưu cấu hình LDAP", - "ldap_saved": "Đã lưu thành công cấu hình LDAP", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "Định cấu hình Đăng nhập một lần thông qua nhà cung cấp OpenID Connect (Azure AD, Okta, Google, Keycloak, v.v.).", - "oidc_enabled": "Kích hoạt xác thực OIDC", - "oidc_enabled_hint": "Cho phép người dùng đăng nhập bằng nhà cung cấp danh tính bên ngoài", - "oidc_provider": "Nhà cung cấp danh tính", - "oidc_display_name": "Tên hiển thị nút", - "oidc_display_name_hint": "Văn bản hiển thị trên nút đăng nhập (ví dụ: Azure AD, Okta)", - "oidc_issuer_url": "Nhà phát hành URL", - "oidc_issuer_url_hint": "Nhà phát hành OpenID Connect URL (việc khám phá sẽ tự động)", - "oidc_client_id": "ID khách hàng", - "oidc_client_secret": "Bí mật khách hàng", - "oidc_redirect_url": "Chuyển hướng URL (Gọi lại)", - "oidc_redirect_url_hint": "Phải khớp chính xác với những gì được định cấu hình trong IdP của bạn. Thông thường: http(s)://your-server:21114/api/auth/oidc/callback", - "oidc_scopes": "Phạm vi", - "oidc_use_pkce": "Sử dụng PKCE (được khuyến nghị)", - "oidc_auto_discovery": "Tự động phát hiện", - "oidc_allow_signup": "Tự động tạo người dùng", - "oidc_manual_endpoints": "URL điểm cuối thủ công", - "oidc_authorization_url": "Điểm cuối ủy quyền", - "oidc_token_url": "Điểm cuối mã thông báo", - "oidc_userinfo_url": "Điểm cuối thông tin người dùng", - "oidc_claim_mapping": "Ánh xạ xác nhận quyền sở hữu", - "oidc_claim_username": "Yêu cầu tên người dùng", - "oidc_claim_email": "Yêu cầu qua email", - "oidc_claim_name": "Xác nhận quyền sở hữu tên hiển thị", - "oidc_claim_groups": "Yêu cầu nhóm", - "oidc_role_mapping": "Ánh xạ vai trò", - "oidc_default_role": "Vai trò mặc định", - "oidc_group_role_map": "Nhóm → Sơ đồ vai trò", - "oidc_group_role_map_hint": "Một ánh xạ trên mỗi dòng: group_name=role (ví dụ: admins=admin, operator=operator)", - "oidc_test_discovery": "Khám phá thử nghiệm", - "oidc_testing": "Đang thử nghiệm...", - "oidc_test_success": "Khám phá thành công! Điểm cuối đã được giải quyết.", - "oidc_test_failed": "Khám phá không thành công", - "oidc_issuer_required": "Nhà phát hành URL được yêu cầu để kiểm tra khả năng khám phá", - "oidc_save": "Lưu cấu hình OIDC", - "oidc_saved": "Đã lưu thành công cấu hình OIDC", - "tab_advanced": "Nâng cao", - "connection_mode_title": "Chiến lược kết nối", - "connection_mode_desc": "Kiểm soát cách RustDesk client kết nối: P2P trực tiếp (hole punch) khi có thể, hoặc luôn qua relay.", - "connection_mode_label": "Chế độ kết nối mặc định", - "connection_mode_p2p_first": "P2P trước (khuyến nghị) — thử kết nối trực tiếp, dùng relay nếu thất bại", - "connection_mode_relay_only": "Chỉ relay — tất cả phiên đều dùng máy chủ relay", - "connection_mode_advanced": "Tùy chọn nâng cao", - "connection_mode_fallback_ms": "Thời gian chờ P2P fallback (ms)", - "connection_mode_same_nat_relay": "Bắt buộc relay khi cả hai bên dùng cùng IP công cộng (NAT hairpin)", - "connection_mode_network_hint": "P2P yêu cầu cổng UDP 21116 có thể truy cập giữa các client. Máy chủ cần mở Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115. Trình duyệt web luôn dùng relay.", - "connection_mode_save": "Lưu", - "connection_mode_save_restart": "Lưu & khởi động lại máy chủ", - "connection_mode_saved": "Đã lưu chế độ kết nối", - "connection_mode_restart_started": "Đã bắt đầu khởi động lại máy chủ", - "connection_mode_restart_failed": "Khởi động lại máy chủ thất bại", - "connection_mode_not_configurable": "Không thể thay đổi chế độ kết nối trên triển khai này (không tìm thấy systemd unit hoặc docker-compose)", - "connection_mode_compose_error": "Không tìm thấy phần server environment trong docker-compose.yml", - "connection_mode_source_saved": "Đã lưu trong", - "connection_mode_source_defaults": "Đang dùng giá trị mặc định máy chủ (không thể ghi từ bảng điều khiển)", - "connection_mode_runtime": "Máy chủ đang hoạt động", - "advanced_title": "Tệp cấu hình", - "advanced_desc": "Chỉnh sửa trực tiếp các tệp cấu hình máy chủ. Các thay đổi có thể cần khởi động lại dịch vụ. Bản sao lưu được tạo trước mỗi lần lưu.", - "advanced_warning": "Các tệp này chứa thông tin bí mật (API key, mật khẩu cơ sở dữ liệu, session secret). Chỉ chỉnh sửa khi bạn hiểu rõ tác động. Cú pháp sai có thể khiến máy chủ không khởi động được.", - "advanced_files_label": "Tệp", - "advanced_select_file": "Chọn tệp từ danh sách để xem hoặc chỉnh sửa nội dung.", - "advanced_reload": "Tải lại", - "advanced_save": "Lưu tệp", - "advanced_apply_restart": "Áp dụng (khởi động lại dịch vụ)", - "advanced_saved": "Đã lưu tệp cấu hình", - "advanced_restart_after_save": "Đã lưu cấu hình. Khởi động lại dịch vụ bị ảnh hưởng ngay bây giờ để áp dụng thay đổi?", - "advanced_restart_confirm": "Khởi động lại dịch vụ BetterDesk liên quan? Các kết nối đang hoạt động có thể bị gián đoạn ngắn.", - "advanced_restart_console_confirm": "Khởi động lại dịch vụ web console? Phiên trình duyệt sẽ ngắt kết nối ngắn và trang sẽ tải lại khi console trở lại.", - "advanced_restart_started": "Đã bắt đầu khởi động lại dịch vụ", - "advanced_restart_done": "Console đã khởi động lại — đang tải lại trang…", - "advanced_restart_polling": "Đang chờ console trở lại trực tuyến…", - "advanced_restart_timeout": "Đã gửi lệnh khởi động lại nhưng console không phản hồi kịp thời. Kiểm tra nhật ký systemd/NSSM và tải lại thủ công.", - "advanced_restart_failed": "Khởi động lại dịch vụ thất bại (không đủ quyền hoặc dịch vụ chưa được cài đặt)", - "advanced_save_confirm": "Lưu các thay đổi vào tệp này? Bản sao lưu của phiên bản trước sẽ được tạo.", - "advanced_unsaved_confirm": "Bạn có thay đổi chưa lưu. Hủy bỏ?", - "advanced_no_files": "Không có tệp cấu hình nào trên hệ thống này.", - "advanced_readonly": "chỉ đọc", - "advanced_missing": "thiếu", - "advanced_new_file": "Tệp mới (chưa tạo cho đến khi bạn lưu)", - "advanced_new_file_hint": "Tệp mới — thêm nội dung và lưu", - "advanced_backup_created": "đã tạo bản sao lưu", - "advanced_restart_console": "Khởi động lại dịch vụ web console (vd: systemctl restart betterdesk-console) để các thay đổi .env có hiệu lực.", - "advanced_restart_goserver": "Khởi động lại BetterDesk Go server để tải các thay đổi blocklist.", - "advanced_restart_systemd": "Sau khi chỉnh sửa systemd units, chạy: systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "Khởi động lại dịch vụ bị ảnh hưởng để các thay đổi có hiệu lực.", - "advanced_error_unknown": "Tệp cấu hình không xác định", - "advanced_error_not_found": "Tệp không tồn tại", - "advanced_error_not_file": "Đường dẫn không phải là tệp thông thường", - "advanced_error_too_large": "Tệp vượt quá kích thước chỉnh sửa tối đa (512 KB)", - "advanced_error_binary": "Không thể chỉnh sửa tệp nhị phân trong bảng điều khiển", - "advanced_error_invalid": "Nội dung tệp không hợp lệ", - "advanced_error_not_writable": "Tiến trình console không thể ghi vào tệp này", - "advanced_file_console-env": "Môi trường console (.env)", - "advanced_file_console-env-local": "Ghi đè console (.env.local)", - "advanced_file_go-blocklist": "Danh sách chặn máy chủ Go (blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console (đơn vị dịch vụ)", - "advanced_file_systemd-server": "systemd: betterdesk-server (đơn vị dịch vụ)", - "advanced_file_console-session-secret": "Bí mật phiên bảng điều khiển (.session_secret)", - "advanced_file_go-audit-log": "Nhật ký kiểm tra máy chủ Go (audit.jsonl)", - "advanced_file_build-env": "Môi trường build của tác nhân (/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf (cấu hình supervisord)", - "advanced_file_docker-compose": "Docker: docker-compose.yml (điều phối)", - "advanced_restart_none": "Tệp này không cần khởi động lại dịch vụ.", - "enrollment_title": "Đăng ký thiết bị (RustDesk)", - "enrollment_desc": "Kiểm soát cách các RustDesk client mới đăng ký và cách người vận hành phê duyệt chúng trên trang yêu cầu đăng ký.", - "enrollment_require_approval": "Yêu cầu phê duyệt người vận hành (Chế độ quản lý)", - "enrollment_require_approval_hint": "Khi bật, các client chưa biết sẽ được xếp hàng chờ đến khi người vận hành phê duyệt trong \"Yêu cầu đăng ký\".", - "enrollment_rich_approve": "Biểu mẫu phê duyệt đầy đủ (tên, thư mục, nhóm, thẻ)", - "enrollment_rich_approve_hint": "Hiển thị hộp thoại chi tiết khi phê duyệt yêu cầu đăng ký hoặc đăng ký LAN.", - "enrollment_tag_picker": "Chọn thẻ từ thẻ thiết bị hiện có", - "enrollment_tag_picker_hint": "Cho phép người vận hành chọn thẻ từ danh sách trên trang Thiết bị thay vì chỉ gõ tay.", - "enrollment_open_requests": "Mở yêu cầu đăng ký", - "enrollment_pending_count": "{count} yêu cầu đăng ký đang chờ" - }, - "audit": { - "time": "Time", - "user": "User", - "action": "Action", - "details": "Details", - "action_login": "Login", - "action_login_failed": "Đăng nhập không thành công", - "action_logout": "Logout", - "action_password_change": "Đã thay đổi mật khẩu", - "action_2fa_enable": "Đã bật 2FA", - "action_2fa_disable": "2FA bị vô hiệu hóa", - "action_user_create": "Người dùng đã tạo", - "action_user_update": "Đã cập nhật người dùng", - "action_user_delete": "Người dùng đã bị xóa", - "action_settings_update": "Đã cập nhật cài đặt", - "action_device_ban": "Thiết bị bị cấm", - "action_device_unban": "Đã bỏ cấm thiết bị", - "action_device_delete": "Đã xóa thiết bị" - }, - "generator": { - "title": "Client Configuration Generator", - "subtitle": "Generate configuration for RustDesk clients", - "config_options": "Tùy chọn cấu hình", - "server_address": "Địa chỉ máy chủ", - "server_address_hint": "Tên miền hoặc địa chỉ IP của máy chủ của bạn", - "custom_port": "Custom Port", - "port_hint": "Để trống theo mặc định (21116)", - "relay_server": "Máy chủ chuyển tiếp", - "relay_placeholder": "Tương tự như máy chủ ID nếu trống", - "relay_hint": "Tùy chọn: địa chỉ máy chủ chuyển tiếp riêng", - "include_key": "Bao gồm khóa chung trong cấu hình", - "generate": "Tạo cấu hình", - "output": "Đầu ra cấu hình", - "usage_title": "Chi tiết kết nối", - "generated": "Đã tạo cấu hình", - "server_required": "Địa chỉ máy chủ là bắt buộc", - "nothing_to_copy": "Tạo cấu hình trước", - "bundles_title": "Gói đại lý", - "new_bundle": "Gói mới", - "editor_title": "Trình chỉnh sửa gói", - "empty_state": "Chọn một gói ở bên trái hoặc tạo một gói mới để bắt đầu.", - "loading": "Đang tải…", - "no_bundles": "Chưa có gói nào. Tạo cái đầu tiên của bạn.", - "bundle_name": "Tên gói", - "bundle_name_hint": "Chỉ nhãn nội bộ - không hiển thị cho người dùng cuối.", - "short_link": "Liên kết tải xuống ngắn", - "short_link_hint": "Dùng trong URL công khai (/d/…). Chỉ chữ thường, số và dấu gạch ngang (2–32 ký tự). Tự điền từ tên gói — rút ngắn để chia sẻ dễ hơn (vd. acme).", - "branding_section": "Xây dựng thương hiệu", - "company_name": "Tên công ty/thương hiệu", - "short_text": "Mô tả ngắn", - "contact_email": "Email liên hệ", - "contact_phone": "Điện thoại liên lạc", - "contact_url": "Liên hệ trang web", - "logo": "biểu tượng", - "logo_hint": "PNG, JPEG, SVG hoặc WebP. Tối đa 256 KB.", - "logo_clear": "Xóa biểu tượng", - "primary_color": "Màu cơ bản", - "accent_color": "Màu tiêu đề", - "default_lang": "Ngôn ngữ mặc định", - "allow_unattended": "Cho phép truy cập không giám sát", - "allow_unattended_hint": "Khi được bật, tác nhân sẽ hiển thị mật khẩu cố định để người vận hành truy cập.", - "save": "Lưu gói", - "revoke": "Thu hồi", - "unrevoke": "Kích hoạt lại", - "revoked": "Đã thu hồi", - "preview_title": "Xem trước trực tiếp", - "preview_hint": "Giao diện gần đúng của cửa sổ tác nhân người dùng cuối.", - "preview_default_name": "Hỗ trợ BetterDesk", - "preview_status_ready": "Sẵn sàng", - "preview_id": "ID của bạn", - "preview_password": "Mật khẩu", - "preview_chat": "Trò chuyện với sự hỗ trợ", - "preview_settings": "Cài đặt (chỉ dành cho quản trị viên)", - "preview_quit": "Thoát (chỉ dành cho quản trị viên)", - "download_link_title": "Liên k���t tải xuống", - "download_link_hint": "Chia sẻ liên kết này với người dùng cuối. Họ sẽ thấy một trang tải xuống có thương hiệu. Liên kết hex cũ vẫn hoạt động sau khi bạn đổi liên kết ngắn.", - "open_portal": "Mở", - "created": "Đã tạo gói", - "saved": "Đã lưu gói", - "deleted": "Đã xóa gói", - "revoked_ok": "Đã thu hồi gói", - "unrevoked_ok": "Đã kích hoạt lại gói", - "link_copied": "Đã sao chép liên kết vào bảng nhớ tạm", - "copy_failed": "Không thể sao chép tự động - vui lòng sao chép thủ công", - "unsaved_confirm": "Hủy các thay đổi chưa được lưu?", - "confirm_revoke": "Thu hồi gói này? Liên kết tải xuống sẽ ngừng hoạt động.", - "confirm_unrevoke": "Kích hoạt lại gói này?", - "confirm_delete": "Xóa gói này vĩnh viễn? Điều này không thể hoàn tác được.", - "errors": { - "validation_failed": "Xác thực không thành công", - "name_required": "Tên gói là bắt buộc", - "company_name_required": "Tên công ty là bắt buộc", - "logo_invalid": "Logo phải là tệp hình ảnh hợp lệ", - "logo_too_large": "Logo phải có kích thước 256 KB hoặc nhỏ hơn", - "logo_read_failed": "Không đọc được tập tin logo", - "primary_color_invalid": "Màu chính phải là giá trị hex (ví dụ: #2563eb)", - "accent_color_invalid": "Màu tiêu đề phải là giá trị hex (ví dụ: #1e293b)", - "contact_url_invalid": "Trang web liên hệ phải là URL hợp lệ", - "server_host_required": "Địa chỉ máy chủ công khai là bắt buộc", - "server_host_invalid": "Nhập tên miền hợp lệ hoặc địa chỉ IPv4", - "token_failed": "Không thể tạo enrollment token — kiểm tra kết nối máy chủ", - "rebuild_revoked": "Không thể rebuild bundle đã bị thu hồi — hãy kích hoạt lại trước", - "slug_invalid": "Liên kết ngắn chỉ được chứa chữ thường, số và dấu gạch ngang", - "slug_too_short": "Liên kết ngắn phải có ít nhất 2 ký tự", - "slug_too_long": "Liên kết ngắn tối đa 32 ký tự", - "slug_taken": "Liên kết ngắn này đã được gói khác sử dụng" - }, - "legacy_title": "Trình tạo cấu hình máy khách", - "connection_section": "Kết nối máy chủ", - "server_host": "Địa chỉ máy chủ công khai", - "server_host_placeholder": "support.example.com hoặc 203.0.113.10", - "server_host_hint": "Tên miền hoặc IP công khai mà người dùng cuối truy cập máy chủ BetterDesk của bạn. Cổng lấy từ cấu hình console.", - "use_https": "Dùng HTTPS / WSS (khuyến nghị)", - "enrollment_token": "Đăng ký thiết bị", - "enrollment_token_pending": "Từng thiết bị sau phê duyệt", - "enrollment_token_set": "Từng thiết bị — phê duyệt trong Registrations", - "enrollment_token_hint": "Mỗi lần cài đặt đăng ký riêng. Phê duyệt thiết bị mới trong bảng Registrations; máy chủ sẽ cấp khóa truy cập duy nhất cho mỗi máy tính.", - "enrollment_per_device": "Từng thiết bị — phê duyệt trong Registrations", - "background_color": "Màu nền cửa sổ", - "surface_color": "Màu nền thẻ", - "text_color": "Màu văn bản", - "text_muted_color": "Màu văn bản phụ", - "status_ready_color": "Màu chỉ báo sẵn sàng", - "header_text_color": "Màu văn bản tiêu đề", - "builds_title": "Bản build client", - "builds_hint": "Các trình cài đặt được biên dịch trên máy chủ này cho từng nền tảng. Rebuild sau khi sửa lỗi toolchain hoặc cập nhật mã nguồn agent.", - "builds_loading": "Đang tải trạng thái build…", - "builds_empty": "Chưa có build nào trong hàng chờ — lưu bundle hoặc nhấp Rebuild tất cả.", - "rebuild_all": "Rebuild tất cả", - "rebuilding_all": "Đang xếp hàng rebuild…", - "rebuild_queued": "Tất cả build theo nền tảng đã được xếp hàng", - "rebuild_confirm": "Rebuild tất cả trình cài đặt theo nền tảng cho bundle này? Các artifact đã sẵn sàng sẽ bị thay thế.", - "build_status_ready": "Sẵn sàng", - "build_status_pending": "Đang chờ", - "build_status_building": "Đang build", - "build_status_failed": "Thất bại", - "builds_summary": "{{ready}} sẵn sàng · {{pending}} đang chờ · {{building}} đang build · {{failed}} thất bại", - "build_error_hint": "Lỗi build", - "preview_help": "Yêu cầu trợ giúp" - }, - "server": { - "port": "Port", - "api_port": "API Port", - "id_server": "Máy chủ ID", - "relay_server": "Máy chủ chuyển tiếp", - "api_key": "API Key" - }, - "status": { - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "running": "Running", - "stopped": "Stopped", - "unknown": "Unknown", - "checking": "Đang kiểm tra...", - "label": "Status", - "no_signal": "Không có tín hiệu" - }, - "actions": { - "refresh": "Refresh", - "copy": "Copy", - "connect": "Connect", - "connect_desktop": "Kết nối qua Máy khách để bàn", - "remote_viewer": "Trình xem từ xa", - "web_remote": "Web từ xa", - "details": "Details", - "edit": "Chỉnh sửa", - "delete": "Xóa", - "ban": "Ban", - "unban": "Unban", - "save": "Lưu", - "cancel": "Hủy bỏ", - "confirm": "Xác nhận", - "close": "Đóng", - "clear": "Clear", - "ok": "OK", - "saved": "Đã lưu thành công", - "back": "Quay lại", - "create": "Tạo", - "dismiss": "Dismiss", - "view_all": "Xem tất cả", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "Add", - "remove": "Remove" - }, - "time": { - "just_now": "Just now", - "seconds_ago": "{count} trước đây", - "minutes_ago": "{count}m trước đây", - "hours_ago": "{count}h trước", - "days_ago": "{count}d trước", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "Quản lý người dùng", - "subtitle": "Quản lý người dùng và quyền của bảng điều khiển", - "add_user": "Add User", - "edit_user": "Chỉnh sửa người dùng", - "username": "Tên người dùng", - "username_placeholder": "Nhập tên người dùng", - "username_hint": "Chỉ 3-32 ký tự, chữ cái, số và dấu gạch dưới", - "password": "Mật khẩu", - "password_placeholder": "Nhập mật khẩu", - "password_hint": "Tối thiểu 8 ký tự bao gồm cả chữ, số và ký hiệu", - "password_leave_empty": "Để trống để giữ hiện tại", - "role": "Role", - "role_admin": "Administrator", - "role_operator": "Operator", - "role_viewer": "Viewer", - "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", - "created": "Đã tạo", - "last_login": "Last Login", - "never": "Never", - "actions": "Actions", - "create": "Tạo người dùng", - "edit": "Chỉnh sửa", - "reset_password": "Đặt lại mật khẩu", - "new_password": "Mật khẩu mới", - "delete_title": "Xóa người dùng", - "delete_confirm": "Bạn có chắc chắn muốn xóa người dùng {username} không?", - "delete_success": "Người dùng đã xóa thành công", - "user_created": "Người dùng được tạo thành công", - "user_updated": "Người dùng đã cập nhật thành công", - "password_reset_success": "Đặt lại mật khẩu thành công", - "empty_title": "Không tìm thấy người dùng nào", - "empty_text": "Thêm người dùng để quản lý quyền truy cập bảng điều khiển", - "fill_required": "Vui lòng điền vào tất cả các trường bắt buộc", - "invalid_username": "Tên người dùng chỉ được từ 3-32 ký tự, chữ cái, số và dấu gạch dưới", - "username_exists": "Tên người dùng đã tồn tại", - "weak_password": "Mật khẩu quá yếu", - "password_too_short": "Mật khẩu phải có ít nhất 8 ký tự", - "invalid_role": "Vai trò không hợp lệ", - "cannot_demote_self": "Bạn không thể hạ bệ chính mình", - "cannot_delete_self": "Bạn không thể xóa tài khoản của chính mình", - "last_admin": "Không thể xóa quản trị viên cuối cùng", - "admin_only": "Tính năng này chỉ có sẵn cho quản trị viên", - "password_required": "Cần có mật khẩu", - "not_found": "Không tìm thấy người dùng", - "strength_weak": "Weak", - "strength_medium": "Medium", - "strength_strong": "Strong", - "security_tips_title": "Thực tiễn tốt nhất về bảo mật", - "tip_strong_passwords": "Sử dụng mật khẩu mạnh, duy nhất cho mỗi người dùng", - "tip_unique_accounts": "Tạo tài khoản cá nhân cho mỗi người", - "tip_viewer_role": "Sử dụng vai trò người xem cho người dùng chỉ c��n quyền truy cập đọc", - "tip_operator_role": "Sử dụng vai trò nhà điều hành cho người dùng cần quản lý thiết bị chứ không phải người dùng", - "tip_audit_logs": "Xem lại nhật ký kiểm tra thường xuyên để phát hiện hoạt động đáng ngờ", - "role_pro": "Chuyên nghiệp (chỉ API)", - "role_super_admin": "Super Admin", - "role_server_admin": "Quản trị viên máy chủ", - "role_global_admin": "Quản trị viên toàn cầu", - "organizations": "Tổ chức", - "user_organizations": "Các tổ chức cho {username}", - "no_organizations": "Người dùng không được chỉ định cho bất kỳ tổ chức nào", - "org_removed": "Đã xóa nhiệm vụ của tổ chức", - "server_role_label": "Vai trò máy chủ", - "server_role_hint": "Xác định những gì người dùng có thể làm trên toàn bộ bảng điều khiển (truy cập bảng điều khiển, cấu hình máy chủ, kiểm tra, v.v.).", - "org_membership_section": "Tư cách thành viên tổ chức", - "org_membership_hint": "Một người dùng có thể thuộc về nhiều tổ chức. Vai trò tổ chức chỉ kiểm soát các quy��n bên trong tổ chức đó và độc lập với vai trò máy chủ ở trên.", - "column_organizations": "Tổ chức", - "no_orgs_short": "—", - "org_count_one": "Tổ chức {count}", - "org_count_many": "Tổ chức {count}", - "all_orgs_assigned": "Người dùng đã là thành viên của mọi tổ chức.", - "user_groups": "Nhóm người dùng", - "user_groups_hint": "Nhóm người dùng có thể được sử dụng để cấp quyền truy cập cho các nhóm thiết bị đã chọn.", - "loading_user_groups": "Đang tải nhóm người dùng...", - "no_user_groups": "Không có nhóm người dùng nào", - "create_user_group": "Tạo nhóm", - "edit_user_group": "Chỉnh sửa nhóm người dùng", - "delete_user_group": "Xóa nhóm người dùng", - "delete_user_group_confirm": "Xóa nhóm người dùng {name}? Các thành viên sẽ mất quyền truy cập được cấp thông qua nhóm này.", - "user_group_created": "Đã tạo nhóm người dùng", - "user_group_updated": "Đã cập nhật nhóm người dùng", - "user_group_deleted": "Nhóm người dùng đã bị xóa", - "user_group_not_found": "Không tìm thấy nhóm người dùng", - "group_name": "Tên nhóm", - "group_name_placeholder": "Toán tử", - "group_note": "Note", - "group_note_placeholder": "Ghi chú tùy chọn", - "group_name_required": "Tên nhóm là bắt buộc", - "group_members_count": "Thành viên {count}", - "provider": "Nhà cung cấp", - "provider_local": "Cục bộ", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "Do nhà cung cấp danh tính quản lý", - "provider_managed_hint": "Tài khoản này được quản lý bởi nhà cung cấp danh tính bên ngoài (LDAP/AD hoặc SSO). Mật khẩu và vai trò được kiểm soát bởi nhà cung cấp và không thể thay đổi ở đây." - }, - "folders": { - "title": "Folders", - "create": "Tạo thư mục", - "edit": "Chỉnh sửa thư mục", - "delete": "Xóa thư mục", - "name": "Folder Name", - "name_placeholder": "Nhập tên thư mục", - "name_required": "Tên thư mục là bắt buộc", - "name_too_long": "Tên thư mục quá dài (tối đa 50 ký tự)", - "color": "Color", - "icon": "Icon", - "not_found": "Không tìm thấy thư mục", - "delete_confirm": "Bạn có chắc chắn muốn xóa thư mục này? Các thiết bị sẽ được bỏ chỉ định.", - "delete_success": "Đã xóa thư mục thành công", - "created": "Thư mục được tạo thành công", - "updated": "Đã cập nhật thư mục thành công", - "no_devices_selected": "Không có thiết bị nào được chọn", - "devices_moved": "Đã di chuyển thiết bị thành công", - "device_assigned": "Thiết bị được gán vào thư mục", - "unassigned": "Unassigned", - "all_devices": "Tất cả thiết bị", - "drag_hint": "Kéo thiết bị vào thư mục để sắp xếp chúng", - "move_to": "Di chuyển đến", - "toggle_sidebar": "Chuyển đổi thanh bên" - }, + "no_groups": "Chưa có nhóm nào", + "manual_groups": "Nhóm thủ công", + "dynamic_memberships": "Tư cách thành viên năng động", + "group_allowed_user_groups": "Nhóm người dùng được phép", + "group_allowed_user_groups_hint": "Người dùng trong nhóm người dùng đã chọn có thể truy cập vào nhóm thiết bị này.", + "no_user_groups": "Không có nhóm người dùng", + "edit_group": "Chỉnh sửa nhóm", + "delete_group": "Xóa nhóm", + "delete_group_confirm": "Xóa nhóm thiết bị {name}?", + "group_deleted": "Đã xóa nhóm thiết bị", + "folder_group_readonly": "Các nhóm được hỗ trợ bởi thư mục được quản lý từ các thư mục.", + "manage_user_groups": "Quản lý nhóm người dùng", + "restore_failed": "Không thể khôi phục thiết bị", + "no_signal_tooltip": "Máy khách vừa liên hệ API nhưng chưa đăng ký trên máy chủ tín hiệu (UDP :21116). Khởi động lại máy khách sau khi di chuyển máy chủ.", + "per_page": "Mỗi trang" + }, + "keys": { + "title": "Khóa máy chủ", + "subtitle": "Khóa công khai và cấu hình cho máy khách RustDesk", + "public_key": "Public Key", + "qr_code": "QR Code", + "server_info": "Thông tin máy chủ", + "download": "Tải xuống khóa", + "show_qr": "Show QR", + "qr_hint": "Quét mã QR này bằng ứng dụng di động RustDesk", + "no_key": "Không tìm thấy khóa công khai", + "no_key_to_copy": "Không có chìa khóa để sao chép", + "no_qr": "Mã QR không có sẵn", + "download_success": "Đã tải xuống tệp khóa", + "not_found": "Không tìm thấy chìa khóa", + "api_not_found": "Không tìm thấy khóa API" + }, + "settings": { + "title": "Cài đặt", + "subtitle": "Cấu hình bảng điều khiển và cài đặt tài khoản", + "tab_general": "General", + "tab_server": "Máy chủ", + "tab_branding": "Branding", + "tab_backup": "Backup", + "language": "Ngôn ngữ", + "change_password": "Thay đổi mật khẩu", + "password_desc": "Cập nhật mật khẩu tài khoản của bạn", + "current_password": "Mật khẩu hiện tại", + "new_password": "Mật khẩu mới", + "confirm_password": "Xác nhận mật khẩu", + "save_password": "Cập nhật mật khẩu", + "password_changed": "Đã thay đổi mật khẩu thành công", + "fill_all_fields": "Vui lòng điền vào tất cả các trường", + "passwords_not_match": "Mật khẩu không khớp", + "password_requirements": "Yêu cầu về mật khẩu", + "password_requirements_not_met": "Mật khẩu không đáp ứng yêu cầu", + "req_length": "Ít nhất 8 ký tự", + "req_uppercase": "Ít nhất một chữ cái viết hoa", + "req_lowercase": "Ít nhất một chữ cái viết thường", + "req_number": "Ít nhất một số", + "server_info": "Thông tin máy chủ", + "version": "Version", + "database": "Database", + "uptime": "Uptime", + "audit_log": "Audit Log", + "audit_desc": "Hoạt động gần đây của bảng điều khiển", + "no_audit_logs": "Không tìm thấy nhật ký kiểm tra", + "backend_title": "Phần cuối của máy chủ", + "backend_desc": "Chọn chương trình phụ trợ máy chủ nào sẽ sử dụng cho dịch vụ quản lý thiết bị và tín hiệu/chuyển tiếp.", + "backend_original": "Original", + "backend_enhanced": "Enhanced", + "backend_rustdesk_desc": "Máy chủ chuyển tiếp và tín hiệu RustDesk tiêu chuẩn (hbbs + hbbr). HTTP cơ bản API với các điểm cuối hạn chế.", + "backend_betterdesk_desc": "Máy chủ dựa trên Go nâng cao với đầy đủ REST API, xác thực JWT, danh sách chặn, thẻ, sự kiện WebSocket thời gian thực và ghi nhật ký kiểm tra.", + "backend_feature_signal": "Máy chủ tín hiệu (đăng ký ID)", + "backend_feature_relay": "Máy chủ chuyển tiếp (rơle kết nối)", + "backend_feature_basic_api": "REST cơ bản API", + "backend_feature_full_api": "Full REST API (hơn 34 điểm cuối)", + "backend_feature_jwt": "Xác thực JWT & TOTP 2FA", + "backend_feature_blocklist": "Quản lý danh sách chặn IP/ID", + "backend_feature_tags": "Thẻ và nhóm thiết bị", + "backend_feature_audit": "Ghi nhật ký sự kiện kiểm tra", + "backend_feature_websocket": "Sự kiện WebSocket thời gian thực", + "backend_connection": "Kết nối", + "backend_api_url": "API URL", + "backend_test": "Kiểm tra kết nối", + "backend_testing": "Đang thử nghiệm...", + "backend_save": "Áp dụng phụ trợ", + "backend_saved": "Phần phụ trợ máy chủ đã thay đổi thành công. Dữ liệu thiết bị bây giờ sẽ được quản lý bởi chương trình phụ trợ mới.", + "backend_save_failed": "Không thể chuyển đổi chương trình phụ trợ máy chủ", + "backend_test_success": "Kết nối thành công! Máy chủ có thể truy cập được.", + "backend_test_failed": "Kết nối không thành công. Máy chủ không thể truy cập được.", + "backend_confirm_switch": "Bạn có chắc chắn muốn chuyển đổi phần phụ trợ của máy chủ không? Điều này sẽ thay đổi cách quản lý thiết bị.", + "backend_unreachable": "Không thể chuyển đổi: máy chủ mục tiêu không thể truy cập được. Khởi động máy chủ trước.", + "invalid_backend": "Lựa chọn phụ trợ không hợp lệ. Chọn 'rustdesk' hoặc 'betterdesk'.", + "backend_status_running": "Connected", + "backend_status_unreachable": "Unreachable", + "backend_status_error": "Error", + "backend_status_unknown": "Unknown", + "totp_title": "Xác thực hai yếu tố", + "totp_desc": "Thêm một lớp bảo mật bổ sung với các ứng dụng xác thực TOTP (Google Authenticator, Microsoft Authenticator, Authy, v.v.)", + "totp_enabled": "Đã bật 2FA", + "totp_enabled_desc": "Tài khoản của bạn được bảo vệ bằng xác thực hai yếu tố.", + "totp_disabled": "2FA không được kích hoạt", + "totp_disabled_desc": "Kích hoạt xác thực hai yếu tố để bảo mật tài khoản bổ sung.", + "totp_setup": "Enable 2FA", + "totp_disable": "Disable 2FA", + "totp_step1": "Cài đặt ứng dụng xác thực trên điện thoại của bạn", + "totp_step2": "Quét mã QR bên dưới", + "totp_step3": "Nhập mã gồm 6 chữ số để xác minh", + "totp_manual_key": "Manual key", + "totp_enter_code": "Nhập mã xác minh", + "totp_verify_enable": "Xác minh & Kích hoạt", + "totp_enabled_success": "Đã bật xác thực hai yếu tố!", + "totp_recovery_warning": "Lưu các mã khôi phục này ở nơi an toàn. Mỗi mã chỉ có thể được sử dụng một lần. Nếu mất quyền truy cập vào ứng dụng xác thực, bạn có thể sử dụng các mã này để đăng nhập.", + "totp_done": "Done", + "totp_disable_warning": "Vô hiệu hóa xác thực hai yếu tố sẽ khiến tài khoản của bạn kém an toàn hơn. Nhập mật khẩu của bạn để xác nhận.", + "totp_disabled_success": "Xác thực hai yếu tố đã bị vô hiệu hóa.", + "tutorials_title": "Hướng dẫn & Hướng dẫn", + "tutorials_desc": "Kiểm soát các chuyến tham quan có hướng dẫn và lớp phủ trợ giúp được hiển thị trên toàn bộ bảng điều khiển", + "tutorials_enabled": "Bật hướng dẫn", + "tutorials_enabled_hint": "Khi bị tắt, hướng dẫn sẽ không tự động bắt đầu và nút trợ giúp sẽ bị ẩn", + "tutorials_reset_hint": "Đánh dấu tất cả các hướng dẫn là chưa xem để có thể hiển thị lại", + "tutorials_enabled_toast": "Đã bật hướng dẫn", + "tutorials_disabled_toast": "Đã tắt hướng dẫn", + "tutorials_reset_toast": "Tất cả các hướng dẫn đã được thiết lập lại", + "tab_auth": "Xác thực", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "Định cấu hình xác th��c bên ngoài thông qua LDAP hoặc Active Directory. Người dùng sẽ có thể đăng nhập bằng thông tin xác thực tên miền của họ.", + "ldap_enabled": "Kích hoạt xác thực LDAP", + "ldap_enabled_hint": "Khi được bật, người dùng có thể đăng nhập bằng thông tin đăng nhập LDAP/AD. Tài khoản cục bộ vẫn hoạt động như dự phòng.", + "ldap_connection": "Kết nối máy chủ", + "ldap_host": "Máy chủ", + "ldap_port": "Cảng", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "Bỏ qua xác minh TLS", + "ldap_timeout": "Hết thời gian kết nối", + "ldap_timeout_hint": "Giây chờ phản hồi của máy chủ LDAP", + "ldap_bind_mode": "Chế độ liên kết", + "ldap_direct_bind": "Ràng buộc trực tiếp", + "ldap_direct_bind_hint": "Liên kết trực tiếp với mẫu DN thay vì sử dụng tài khoản dịch vụ để tìm kiếm.", + "ldap_bind_dn": "Bind DN (tài khoản dịch vụ)", + "ldap_bind_dn_hint": "Tên phân biệt của tài khoản dịch vụ chỉ đọc được sử dụng để tìm kiếm người dùng.", + "ldap_bind_password": "Ràng buộc mật khẩu", + "ldap_base_dn": "DN cơ sở", + "ldap_base_dn_hint": "Cơ sở tìm kiếm để tìm người dùng, ví dụ: dc=ví dụ,dc=com", + "ldap_user_filter": "Bộ lọc người dùng", + "ldap_user_filter_hint": "Bộ lọc LDAP để tìm người dùng. Sử dụng {{username}} làm trình giữ chỗ. Mặc định: (sAMAccountName={{username}})", + "ldap_direct_bind_dn": "Mẫu DN liên kết trực tiếp", + "ldap_direct_bind_dn_hint": "Mẫu DN để liên kết trực tiếp. Sử dụng {{username}} làm trình giữ chỗ, ví dụ: uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "Thuộc tính người dùng", + "ldap_attr_id": "Thuộc tính tên người dùng", + "ldap_attr_email": "Thuộc tính email", + "ldap_attr_name": "Thuộc tính tên hiển thị", + "ldap_group_mapping": "Nhóm → Sơ đồ vai trò", + "ldap_group_base_dn": "Nhóm cơ sở DN", + "ldap_group_base_dn_hint": "Để trống để sử dụng Base DN chính", + "ldap_group_filter": "Bộ lọc nhóm", + "ldap_group_attr_name": "Thuộc tính tên nhóm", + "ldap_default_role": "Vai trò mặc định", + "ldap_default_role_hint": "Vai trò được chỉ định cho người dùng có nhóm LDAP không khớp với bất kỳ ánh xạ nào", + "ldap_role_viewer": "Người xem", + "ldap_role_operator": "Toán tử", + "ldap_role_admin": "Quản trị viên", + "ldap_group_role_map": "Nhóm → Bản đồ vai trò", + "ldap_group_role_map_hint": "Ánh xạ các nhóm LDAP tới các vai trò BetterDesk. Định dạng: GroupDN=vai trò được phân tách bằng | (đường ống). Ví dụ: CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "Kiểm tra kết nối", + "ldap_testing": "Đang thử nghiệm...", + "ldap_test_success": "Kết nối thành công! Máy chủ LDAP có thể truy cập được và thông tin xác thực liên kết là hợp lệ.", + "ldap_test_failed": "Kết nối không thành công", + "ldap_save": "Lưu cấu hình LDAP", + "ldap_saved": "Đã lưu thành công cấu hình LDAP", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "Định cấu hình Đăng nhập một lần thông qua nhà cung cấp OpenID Connect (Azure AD, Okta, Google, Keycloak, v.v.).", + "oidc_enabled": "Kích hoạt xác thực OIDC", + "oidc_enabled_hint": "Cho phép người dùng đăng nhập bằng nhà cung cấp danh tính bên ngoài", + "oidc_provider": "Nhà cung cấp danh tính", + "oidc_display_name": "Tên hiển thị nút", + "oidc_display_name_hint": "Văn bản hiển thị trên nút đăng nhập (ví dụ: Azure AD, Okta)", + "oidc_issuer_url": "Nhà phát hành URL", + "oidc_issuer_url_hint": "Nhà phát hành OpenID Connect URL (việc khám phá sẽ tự động)", + "oidc_client_id": "ID khách hàng", + "oidc_client_secret": "Bí mật khách hàng", + "oidc_redirect_url": "Chuyển hướng URL (Gọi lại)", + "oidc_redirect_url_hint": "Phải khớp chính xác với những gì được định cấu hình trong IdP của bạn. Thông thường: http(s)://your-server:21114/api/auth/oidc/callback", + "oidc_scopes": "Phạm vi", + "oidc_use_pkce": "Sử dụng PKCE (được khuyến nghị)", + "oidc_auto_discovery": "Tự động phát hiện", + "oidc_allow_signup": "Tự động tạo người dùng", + "oidc_manual_endpoints": "URL điểm cuối thủ công", + "oidc_authorization_url": "Điểm cuối ủy quyền", + "oidc_token_url": "Điểm cuối mã thông báo", + "oidc_userinfo_url": "Điểm cuối thông tin người dùng", + "oidc_claim_mapping": "Ánh xạ xác nhận quyền sở hữu", + "oidc_claim_username": "Yêu cầu tên người dùng", + "oidc_claim_email": "Yêu cầu qua email", + "oidc_claim_name": "Xác nhận quyền sở hữu tên hiển thị", + "oidc_claim_groups": "Yêu cầu nhóm", + "oidc_role_mapping": "Ánh xạ vai trò", + "oidc_default_role": "Vai trò mặc định", + "oidc_group_role_map": "Nhóm → Sơ đồ vai trò", + "oidc_group_role_map_hint": "Một ánh xạ trên mỗi dòng: group_name=role (ví dụ: admins=admin, operator=operator)", + "oidc_test_discovery": "Khám phá thử nghiệm", + "oidc_testing": "Đang thử nghiệm...", + "oidc_test_success": "Khám phá thành công! Điểm cuối đã được giải quyết.", + "oidc_test_failed": "Khám phá không thành công", + "oidc_issuer_required": "Nhà phát hành URL được yêu cầu để kiểm tra khả năng khám phá", + "oidc_save": "Lưu cấu hình OIDC", + "oidc_saved": "Đã lưu thành công cấu hình OIDC", + "tab_advanced": "Nâng cao", + "connection_mode_title": "Chiến lược kết nối", + "connection_mode_desc": "Kiểm soát cách RustDesk client kết nối: P2P trực tiếp (hole punch) khi có thể, hoặc luôn qua relay.", + "connection_mode_label": "Chế độ kết nối mặc định", + "connection_mode_p2p_first": "P2P trước (khuyến nghị) — thử kết nối trực tiếp, dùng relay nếu thất bại", + "connection_mode_relay_only": "Chỉ relay — tất cả phiên đều dùng máy chủ relay", + "connection_mode_advanced": "Tùy chọn nâng cao", + "connection_mode_fallback_ms": "Thời gian chờ P2P fallback (ms)", + "connection_mode_same_nat_relay": "Bắt buộc relay khi cả hai bên dùng cùng IP công cộng (NAT hairpin)", + "connection_mode_network_hint": "P2P yêu cầu cổng UDP 21116 có thể truy cập giữa các client. Máy chủ cần mở Signal TCP 21116, Relay TCP 21117, NAT test TCP 21115. Trình duyệt web luôn dùng relay.", + "connection_mode_save": "Lưu", + "connection_mode_save_restart": "Lưu & khởi động lại máy chủ", + "connection_mode_saved": "Đã lưu chế độ kết nối", + "connection_mode_restart_started": "Đã bắt đầu khởi động lại máy chủ", + "connection_mode_restart_failed": "Khởi động lại máy chủ thất bại", + "connection_mode_not_configurable": "Không thể thay đổi chế độ kết nối trên triển khai này (không tìm thấy systemd unit hoặc docker-compose)", + "connection_mode_compose_error": "Không tìm thấy phần server environment trong docker-compose.yml", + "connection_mode_source_saved": "Đã lưu trong", + "connection_mode_source_defaults": "Đang dùng giá trị mặc định máy chủ (không thể ghi từ bảng điều khiển)", + "connection_mode_runtime": "Máy chủ đang hoạt động", + "advanced_title": "Tệp cấu hình", + "advanced_desc": "Chỉnh sửa trực tiếp các tệp cấu hình máy chủ. Các thay đổi có thể cần khởi động lại dịch vụ. Bản sao lưu được tạo trước mỗi lần lưu.", + "advanced_warning": "Các tệp này chứa thông tin bí mật (API key, mật khẩu cơ sở dữ liệu, session secret). Chỉ chỉnh sửa khi bạn hiểu rõ tác động. Cú pháp sai có thể khiến máy chủ không khởi động được.", + "advanced_files_label": "Tệp", + "advanced_select_file": "Chọn tệp từ danh sách để xem hoặc chỉnh sửa nội dung.", + "advanced_reload": "Tải lại", + "advanced_save": "Lưu tệp", + "advanced_apply_restart": "Áp dụng (khởi động lại dịch vụ)", + "advanced_saved": "Đã lưu tệp cấu hình", + "advanced_restart_after_save": "Đã lưu cấu hình. Khởi động lại dịch vụ bị ảnh hưởng ngay bây giờ để áp dụng thay đổi?", + "advanced_restart_confirm": "Khởi động lại dịch vụ BetterDesk liên quan? Các kết nối đang hoạt động có thể bị gián đoạn ngắn.", + "advanced_restart_console_confirm": "Khởi động lại dịch vụ web console? Phiên trình duyệt sẽ ngắt kết nối ngắn và trang sẽ tải lại khi console trở lại.", + "advanced_restart_started": "Đã bắt đầu khởi động lại dịch vụ", + "advanced_restart_done": "Console đã khởi động lại — đang tải lại trang…", + "advanced_restart_polling": "Đang chờ console trở lại trực tuyến…", + "advanced_restart_timeout": "Đã gửi lệnh khởi động lại nhưng console không phản hồi kịp thời. Kiểm tra nhật ký systemd/NSSM và tải lại thủ công.", + "advanced_restart_failed": "Khởi động lại dịch vụ thất bại (không đủ quyền hoặc dịch vụ chưa được cài đặt)", + "advanced_save_confirm": "Lưu các thay đổi vào tệp này? Bản sao lưu của phiên bản trước sẽ được tạo.", + "advanced_unsaved_confirm": "Bạn có thay đổi chưa lưu. Hủy bỏ?", + "advanced_no_files": "Không có tệp cấu hình nào trên hệ thống này.", + "advanced_readonly": "chỉ đọc", + "advanced_missing": "thiếu", + "advanced_new_file": "Tệp mới (chưa tạo cho đến khi bạn lưu)", + "advanced_new_file_hint": "Tệp mới — thêm nội dung và lưu", + "advanced_backup_created": "đã tạo bản sao lưu", + "advanced_restart_console": "Khởi động lại dịch vụ web console (vd: systemctl restart betterdesk-console) để các thay đổi .env có hiệu lực.", + "advanced_restart_goserver": "Khởi động lại BetterDesk Go server để tải các thay đổi blocklist.", + "advanced_restart_systemd": "Sau khi chỉnh sửa systemd units, chạy: systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "Khởi động lại dịch vụ bị ảnh hưởng để các thay đổi có hiệu lực.", + "advanced_error_unknown": "Tệp cấu hình không xác định", + "advanced_error_not_found": "Tệp không tồn tại", + "advanced_error_not_file": "Đường dẫn không phải là tệp thông thường", + "advanced_error_too_large": "Tệp vượt quá kích thước chỉnh sửa tối đa (512 KB)", + "advanced_error_binary": "Không thể chỉnh sửa tệp nhị phân trong bảng điều khiển", + "advanced_error_invalid": "Nội dung tệp không hợp lệ", + "advanced_error_not_writable": "Tiến trình console không thể ghi vào tệp này", + "advanced_file_console-env": "Môi trường console (.env)", + "advanced_file_console-env-local": "Ghi đè console (.env.local)", + "advanced_file_go-blocklist": "Danh sách chặn máy chủ Go (blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console (đơn vị dịch vụ)", + "advanced_file_systemd-server": "systemd: betterdesk-server (đơn vị dịch vụ)", + "advanced_file_console-session-secret": "Bí mật phiên bảng điều khiển (.session_secret)", + "advanced_file_go-audit-log": "Nhật ký kiểm tra máy chủ Go (audit.jsonl)", + "advanced_file_build-env": "Môi trường build của tác nhân (/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf (cấu hình supervisord)", + "advanced_file_docker-compose": "Docker: docker-compose.yml (điều phối)", + "advanced_restart_none": "Tệp này không cần khởi động lại dịch vụ.", + "enrollment_title": "Đăng ký thiết bị (RustDesk)", + "enrollment_desc": "Kiểm soát cách các RustDesk client mới đăng ký và cách người vận hành phê duyệt chúng trên trang yêu cầu đăng ký.", + "enrollment_require_approval": "Yêu cầu phê duyệt người vận hành (Chế độ quản lý)", + "enrollment_require_approval_hint": "Khi bật, các client chưa biết sẽ được xếp hàng chờ đến khi người vận hành phê duyệt trong \"Yêu cầu đăng ký\".", + "enrollment_rich_approve": "Biểu mẫu phê duyệt đầy đủ (tên, thư mục, nhóm, thẻ)", + "enrollment_rich_approve_hint": "Hiển thị hộp thoại chi tiết khi phê duyệt yêu cầu đăng ký hoặc đăng ký LAN.", + "enrollment_tag_picker": "Chọn thẻ từ thẻ thiết bị hiện có", + "enrollment_tag_picker_hint": "Cho phép người vận hành chọn thẻ từ danh sách trên trang Thiết bị thay vì chỉ gõ tay.", + "enrollment_open_requests": "Mở yêu cầu đăng ký", + "enrollment_pending_count": "{count} yêu cầu đăng ký đang chờ" + }, + "audit": { + "time": "Time", + "user": "User", + "action": "Action", + "details": "Details", + "action_login": "Login", + "action_login_failed": "Đăng nhập không thành công", + "action_logout": "Logout", + "action_password_change": "Đã thay đổi mật khẩu", + "action_2fa_enable": "Đã bật 2FA", + "action_2fa_disable": "2FA bị vô hiệu hóa", + "action_user_create": "Người dùng đã tạo", + "action_user_update": "Đã cập nhật người dùng", + "action_user_delete": "Người dùng đã bị xóa", + "action_settings_update": "Đã cập nhật cài đặt", + "action_device_ban": "Thiết bị bị cấm", + "action_device_unban": "Đã bỏ cấm thiết bị", + "action_device_delete": "Đã xóa thiết bị" + }, + "generator": { + "title": "Client Configuration Generator", + "subtitle": "Generate configuration for RustDesk clients", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tính năng sớm — trình tạo gói agent đang được phát triển tích cực.", + "config_options": "Tùy chọn cấu hình", + "server_address": "Địa chỉ máy chủ", + "server_address_hint": "Tên miền hoặc địa chỉ IP của máy chủ của bạn", + "custom_port": "Custom Port", + "port_hint": "Để trống theo mặc định (21116)", + "relay_server": "Máy chủ chuyển tiếp", + "relay_placeholder": "Tương tự như máy chủ ID nếu trống", + "relay_hint": "Tùy chọn: địa chỉ máy chủ chuyển tiếp riêng", + "include_key": "Bao gồm khóa chung trong cấu hình", + "generate": "Tạo cấu hình", + "output": "Đầu ra cấu hình", + "usage_title": "Chi tiết kết nối", + "generated": "Đã tạo cấu hình", + "server_required": "Địa chỉ máy chủ là bắt buộc", + "nothing_to_copy": "Tạo cấu hình trước", + "bundles_title": "Gói đại lý", + "new_bundle": "Gói mới", + "editor_title": "Trình chỉnh sửa gói", + "empty_state": "Chọn một gói ở bên trái hoặc tạo một gói mới để bắt đầu.", + "loading": "Đang tải…", + "no_bundles": "Chưa có gói nào. Tạo cái đầu tiên của bạn.", + "bundle_name": "Tên gói", + "bundle_name_hint": "Chỉ nhãn nội bộ - không hiển thị cho người dùng cuối.", + "short_link": "Liên kết tải xuống ngắn", + "short_link_hint": "Dùng trong URL công khai (/d/…). Chỉ chữ thường, số và dấu gạch ngang (2–32 ký tự). Tự điền từ tên gói — rút ngắn để chia sẻ dễ hơn (vd. acme).", + "branding_section": "Xây dựng thương hiệu", + "company_name": "Tên công ty/thương hiệu", + "short_text": "Mô tả ngắn", + "contact_email": "Email liên hệ", + "contact_phone": "Điện thoại liên lạc", + "contact_url": "Liên hệ trang web", + "logo": "biểu tượng", + "logo_hint": "PNG, JPEG, SVG hoặc WebP. Tối đa 256 KB.", + "logo_clear": "Xóa biểu tượng", + "primary_color": "Màu cơ bản", + "accent_color": "Màu tiêu đề", + "default_lang": "Ngôn ngữ mặc định", + "allow_unattended": "Cho phép truy cập không giám sát", + "allow_unattended_hint": "Khi được bật, tác nhân sẽ hiển thị mật khẩu cố định để người vận hành truy cập.", + "save": "Lưu gói", + "revoke": "Thu hồi", + "unrevoke": "Kích hoạt lại", + "revoked": "Đã thu hồi", + "preview_title": "Xem trước trực tiếp", + "preview_hint": "Giao diện gần đúng của cửa sổ tác nhân người dùng cuối.", + "preview_default_name": "Hỗ trợ BetterDesk", + "preview_status_ready": "Sẵn sàng", + "preview_id": "ID của bạn", + "preview_password": "Mật khẩu", + "preview_chat": "Trò chuyện với sự hỗ trợ", + "preview_settings": "Cài đặt (chỉ dành cho quản trị viên)", + "preview_quit": "Thoát (chỉ dành cho quản trị viên)", + "download_link_title": "Liên k���t tải xuống", + "download_link_hint": "Chia sẻ liên kết này với người dùng cuối. Họ sẽ thấy một trang tải xuống có thương hiệu. Liên kết hex cũ vẫn hoạt động sau khi bạn đổi liên kết ngắn.", + "open_portal": "Mở", + "created": "Đã tạo gói", + "saved": "Đã lưu gói", + "deleted": "Đã xóa gói", + "revoked_ok": "Đã thu hồi gói", + "unrevoked_ok": "Đã kích hoạt lại gói", + "link_copied": "Đã sao chép liên kết vào bảng nhớ tạm", + "copy_failed": "Không thể sao chép tự động - vui lòng sao chép thủ công", + "unsaved_confirm": "Hủy các thay đổi chưa được lưu?", + "confirm_revoke": "Thu hồi gói này? Liên kết tải xuống sẽ ngừng hoạt động.", + "confirm_unrevoke": "Kích hoạt lại gói này?", + "confirm_delete": "Xóa gói này vĩnh viễn? Điều này không thể hoàn tác được.", "errors": { - "forbidden_title": "Truy cập bị từ chối", - "forbidden_message": "Bạn không có quyền truy cập tài nguyên này.", - "not_found_title": "Không tìm thấy trang", - "not_found_message": "Trang bạn đang tìm kiếm không tồn tại hoặc đã bị di chuyển.", - "server_error_title": "Lỗi máy chủ", - "server_error_message": "Đã xảy ra lỗi. Vui lòng thử lại sau.", - "go_home": "Go Home", - "try_again": "Try Again", - "load_devices_failed": "Không tải được thiết bị", - "load_key_failed": "Không thể tải khóa", - "load_qr_failed": "Không tải được QR", - "load_audit_failed": "Không tải được nhật ký kiểm tra", - "load_users_failed": "Không tải được người dùng", - "load_folders_failed": "Không tải được thư mục", - "download_failed": "Tải xuống không thành công", - "logout_failed": "Đăng xuất không thành công", - "password_change_failed": "Không thể thay đổi mật khẩu", - "language_change_failed": "Không thể thay đổi ng��n ngữ", - "ban_failed": "Không cấm được thiết bị", - "unban_failed": "Không thể bỏ cấm thiết bị", - "delete_failed": "Không xóa được thiết bị", - "change_id_failed": "Không thể thay đổi ID thiết bị", - "bulk_delete_failed": "Không thể xóa thiết bị", - "sync_failed": "Không thể đồng bộ hóa trạng thái", - "error": "Error", - "not_found": "Not found", - "server_error": "Lỗi máy chủ", - "load_device_failed": "Không tải được thiết bị", - "load_orgs_failed": "Không tải được tổ chức" + "validation_failed": "Xác thực không thành công", + "name_required": "Tên gói là bắt buộc", + "company_name_required": "Tên công ty là bắt buộc", + "logo_invalid": "Logo phải là tệp hình ảnh hợp lệ", + "logo_too_large": "Logo phải có kích thước 256 KB hoặc nhỏ hơn", + "logo_read_failed": "Không đọc được tập tin logo", + "primary_color_invalid": "Màu chính phải là giá trị hex (ví dụ: #2563eb)", + "accent_color_invalid": "Màu tiêu đề phải là giá trị hex (ví dụ: #1e293b)", + "contact_url_invalid": "Trang web liên hệ phải là URL hợp lệ", + "server_host_required": "Địa chỉ máy chủ công khai là bắt buộc", + "server_host_invalid": "Nhập tên miền hợp lệ hoặc địa chỉ IPv4", + "token_failed": "Không thể tạo enrollment token — kiểm tra kết nối máy chủ", + "rebuild_revoked": "Không thể rebuild bundle đã bị thu hồi — hãy kích hoạt lại trước", + "slug_invalid": "Liên kết ngắn chỉ được chứa chữ thường, số và dấu gạch ngang", + "slug_too_short": "Liên kết ngắn phải có ít nhất 2 ký tự", + "slug_too_long": "Liên kết ngắn tối đa 32 ký tự", + "slug_taken": "Liên kết ngắn này đã được gói khác sử dụng" }, - "remote": { - "title": "Máy tính để bàn từ xa", - "connecting": "Đang kết nối...", - "waiting_password": "Đang chờ mật khẩu", - "authenticating": "Đang xác thực...", - "streaming": "Connected", - "disconnected": "Disconnected", - "error": "Error", - "status_idle": "Idle", - "password_required": "Yêu cầu mật khẩu", - "enter_password_for": "Nhập mật khẩu cho thiết bị", - "password_placeholder": "Mật khẩu thiết bị", - "connect": "Connect", - "reconnect": "Reconnect", - "disconnect": "Disconnect", - "back_to_devices": "Quay lại Thiết bị", - "fullscreen": "Fullscreen", - "toggle_audio": "Chuyển đổi âm thanh", - "send_keys": "Gửi chìa khóa", - "scale_mode": "Scale Mode", - "scale_fit": "Phù hợp với cửa sổ", - "scale_fill": "Fill Window", - "scale_original": "Kích thước gốc (1:1)", - "scale_stretch": "Kéo dài để lấp đầy", - "actions": "Actions", - "lock_screen": "Màn hình khóa", - "restart_remote": "Khởi động lại thiết bị từ xa", - "refresh_screen": "Làm mới màn hình", - "clipboard_paste": "Dán từ Clipboard", - "block_input": "Block Input", - "display_settings": "Cài đặt hiển thị", - "image_quality": "Chất lượng hình ảnh", - "quality_best": "Tốt nhất (Chất lượng đầy đủ, 60 khung hình / giây)", - "quality_balanced": "Balanced", - "quality_low": "Performance", - "show_cursor": "Hiển thị con trỏ từ xa", - "lock_after_session": "Khóa sau phiên", - "privacy_mode": "Chế độ riêng tư", - "disable_clipboard": "Tắt bảng nhớ tạm", - "chat": "Chat", - "chat_placeholder": "Nhập tin nhắn...", - "record": "Ghi lại màn hình", - "view_only": "Chỉ xem", - "pin_toolbar": "Ghim thanh công cụ", - "monitors": "Monitors", - "select_monitor": "Chọn màn hình", - "quality_speed": "Tốc độ (Chất lượng thấp, 60 khung hình/giây)", - "quality_quality": "Chất lượng (Tốt nhất, 30 khung hình/giây)", - "recording_started": "Đã bắt đầu ghi", - "recording_stopped": "Đã dừng ghi", - "download_recording": "Tải xuống bản ghi", - "e2e_encrypted": "Mã hóa đầu cuối", - "e2e_key_exchange": "Thiết lập kênh an toàn...", - "confirm_restart": "Bạn có chắc chắn muốn khởi động lại thiết bị từ xa không?", - "webcodecs_not_supported": "Trình duyệt của bạn không hỗ trợ WebCodecs API. Vui lòng sử dụng Chrome 94+ hoặc Edge 94+.", - "webcodecs_insecure_context": "WebCodecs không khả dụng trên HTTP. Video sử dụng dự phòng phần mềm. Để có hiệu suất tốt nhất, hãy sử dụng HTTPS.", - "webcodecs_fallback_active": "Phần mềm giải mã video đang hoạt động (hiệu suất hạn chế)", - "click_to_start": "Bấm để bắt đầu", - "autoplay_blocked": "Trình duyệt yêu cầu sự tương tác của người dùng để bắt đầu phát lại video và âm thanh.", - "start_playback": "Bắt đầu phát lại", - "new_connection": "Kết nối mới", - "device_id_placeholder": "Nhập ID thiết bị", - "http_warning": "Chế độ HTTP: giới hạn ở giải mã phần mềm H.264 (~15 FPS). Sử dụng HTTPS để có hiệu suất tối đa (WebCodecs, VP9, 60 FPS).", - "file_transfer": "Truyền tệp", - "file_upload": "Upload", - "file_download": "Download", - "file_empty": "Thư mục này trống", - "file_transfers": "Transfers", - "file_complete": "Complete", - "file_error": "Chuyển không thành công", - "file_show_hidden": "Hiển thị các tập tin ẩn", - "file_new_folder": "New Folder", - "file_new_folder_prompt": "Nhập tên thư mục:", - "file_parent": "Thư mục mẹ", - "file_root": "Root", - "file_rename": "Rename", - "file_rename_prompt": "Nhập tên mới:", - "file_delete_confirm": "Bạn có chắc chắn muốn xóa mục này?", - "file_cancelled": "Đã hủy chuyển khoản", - "2fa_required": "Yêu cầu xác minh 2FA", - "2fa_hint": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", - "2fa_invalid": "Nhập mã gồm 6 chữ số hợp lệ", - "verify": "Verify", - "use_cdap_fallback": "Sử dụng trình xem CDAP", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "Bảng tạm trống", - "clipboard_denied": "Truy cập vào bảng nhớ tạm bị từ chối. HTTPS được yêu cầu hoặc quyền không được cấp.", - "file_loading": "Đang tải...", - "file_timeout": "Thiết bị từ xa không phản hồi. Truyền tệp có thể không được hỗ trợ hoặc bị tắt trên máy từ xa.", - "codec": "Bộ giải mã video", - "codec_auto": "Tự động (được khuyến nghị)" + "legacy_title": "Trình tạo cấu hình máy khách", + "connection_section": "Kết nối máy chủ", + "server_host": "Địa chỉ máy chủ công khai", + "server_host_placeholder": "support.example.com hoặc 203.0.113.10", + "server_host_hint": "Tên miền hoặc IP công khai mà người dùng cuối truy cập máy chủ BetterDesk của bạn. Cổng lấy từ cấu hình console.", + "use_https": "Dùng HTTPS / WSS (khuyến nghị)", + "enrollment_token": "Đăng ký thiết bị", + "enrollment_token_pending": "Từng thiết bị sau phê duyệt", + "enrollment_token_set": "Từng thiết bị — phê duyệt trong Registrations", + "enrollment_token_hint": "Mỗi lần cài đặt đăng ký riêng. Phê duyệt thiết bị mới trong bảng Registrations; máy chủ sẽ cấp khóa truy cập duy nhất cho mỗi máy tính.", + "enrollment_per_device": "Từng thiết bị — phê duyệt trong Registrations", + "background_color": "Màu nền cửa sổ", + "surface_color": "Màu nền thẻ", + "text_color": "Màu văn bản", + "text_muted_color": "Màu văn bản phụ", + "status_ready_color": "Màu chỉ báo sẵn sàng", + "header_text_color": "Màu văn bản tiêu đề", + "builds_title": "Bản build client", + "builds_hint": "Các trình cài đặt được biên dịch trên máy chủ này cho từng nền tảng. Rebuild sau khi sửa lỗi toolchain hoặc cập nhật mã nguồn agent.", + "builds_loading": "Đang tải trạng thái build…", + "builds_empty": "Chưa có build nào trong hàng chờ — lưu bundle hoặc nhấp Rebuild tất cả.", + "rebuild_all": "Rebuild tất cả", + "rebuilding_all": "Đang xếp hàng rebuild…", + "rebuild_queued": "Tất cả build theo nền tảng đã được xếp hàng", + "rebuild_confirm": "Rebuild tất cả trình cài đặt theo nền tảng cho bundle này? Các artifact đã sẵn sàng sẽ bị thay thế.", + "build_status_ready": "Sẵn sàng", + "build_status_pending": "Đang chờ", + "build_status_building": "Đang build", + "build_status_failed": "Thất bại", + "builds_summary": "{{ready}} sẵn sàng · {{pending}} đang chờ · {{building}} đang build · {{failed}} thất bại", + "build_error_hint": "Lỗi build", + "preview_help": "Yêu cầu trợ giúp" + }, + "server": { + "port": "Port", + "api_port": "API Port", + "id_server": "Máy chủ ID", + "relay_server": "Máy chủ chuyển tiếp", + "api_key": "API Key" + }, + "status": { + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "running": "Running", + "stopped": "Stopped", + "unknown": "Unknown", + "checking": "Đang kiểm tra...", + "label": "Status", + "no_signal": "Không có tín hiệu" + }, + "actions": { + "refresh": "Refresh", + "copy": "Copy", + "connect": "Connect", + "connect_desktop": "Kết nối qua Máy khách để bàn", + "remote_viewer": "Trình xem từ xa", + "web_remote": "Web từ xa", + "details": "Details", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "ban": "Ban", + "unban": "Unban", + "save": "Lưu", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "close": "Đóng", + "clear": "Clear", + "ok": "OK", + "saved": "Đã lưu thành công", + "back": "Quay lại", + "create": "Tạo", + "dismiss": "Dismiss", + "view_all": "Xem tất cả", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "Add", + "remove": "Remove" + }, + "time": { + "just_now": "Just now", + "seconds_ago": "{count} trước đây", + "minutes_ago": "{count}m trước đây", + "hours_ago": "{count}h trước", + "days_ago": "{count}d trước", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "Quản lý người dùng", + "subtitle": "Quản lý người dùng và quyền của bảng điều khiển", + "add_user": "Add User", + "edit_user": "Chỉnh sửa người dùng", + "username": "Tên người dùng", + "username_placeholder": "Nhập tên người dùng", + "username_hint": "Chỉ 3-32 ký tự, chữ cái, số và dấu gạch dưới", + "password": "Mật khẩu", + "password_placeholder": "Nhập mật khẩu", + "password_hint": "Tối thiểu 8 ký tự bao gồm cả chữ, số và ký hiệu", + "password_leave_empty": "Để trống để giữ hiện tại", + "role": "Role", + "role_admin": "Administrator", + "role_operator": "Operator", + "role_viewer": "Viewer", + "role_hint": "Viewers can only view data, operators can manage devices, admins have full access", + "created": "Đã tạo", + "last_login": "Last Login", + "never": "Never", + "actions": "Actions", + "create": "Tạo người dùng", + "edit": "Chỉnh sửa", + "reset_password": "Đặt lại mật khẩu", + "new_password": "Mật khẩu mới", + "delete_title": "Xóa người dùng", + "delete_confirm": "Bạn có chắc chắn muốn xóa người dùng {username} không?", + "delete_success": "Người dùng đã xóa thành công", + "user_created": "Người dùng được tạo thành công", + "user_updated": "Người dùng đã cập nhật thành công", + "password_reset_success": "Đặt lại mật khẩu thành công", + "empty_title": "Không tìm thấy người dùng nào", + "empty_text": "Thêm người dùng để quản lý quyền truy cập bảng điều khiển", + "fill_required": "Vui lòng điền vào tất cả các trường bắt buộc", + "invalid_username": "Tên người dùng chỉ được từ 3-32 ký tự, chữ cái, số và dấu gạch dưới", + "username_exists": "Tên người dùng đã tồn tại", + "weak_password": "Mật khẩu quá yếu", + "password_too_short": "Mật khẩu phải có ít nhất 8 ký tự", + "invalid_role": "Vai trò không hợp lệ", + "cannot_demote_self": "Bạn không thể hạ bệ chính mình", + "cannot_delete_self": "Bạn không thể xóa tài khoản của chính mình", + "last_admin": "Không thể xóa quản trị viên cuối cùng", + "admin_only": "Tính năng này chỉ có sẵn cho quản trị viên", + "password_required": "Cần có mật khẩu", + "not_found": "Không tìm thấy người dùng", + "strength_weak": "Weak", + "strength_medium": "Medium", + "strength_strong": "Strong", + "security_tips_title": "Thực tiễn tốt nhất về bảo mật", + "tip_strong_passwords": "Sử dụng mật khẩu mạnh, duy nhất cho mỗi người dùng", + "tip_unique_accounts": "Tạo tài khoản cá nhân cho mỗi người", + "tip_viewer_role": "Sử dụng vai trò người xem cho người dùng chỉ c��n quyền truy cập đọc", + "tip_operator_role": "Sử dụng vai trò nhà điều hành cho người dùng cần quản lý thiết bị chứ không phải người dùng", + "tip_audit_logs": "Xem lại nhật ký kiểm tra thường xuyên để phát hiện hoạt động đáng ngờ", + "role_pro": "Chuyên nghiệp (chỉ API)", + "role_super_admin": "Super Admin", + "role_server_admin": "Quản trị viên máy chủ", + "role_global_admin": "Quản trị viên toàn cầu", + "organizations": "Tổ chức", + "user_organizations": "Các tổ chức cho {username}", + "no_organizations": "Người dùng không được chỉ định cho bất kỳ tổ chức nào", + "org_removed": "Đã xóa nhiệm vụ của tổ chức", + "server_role_label": "Vai trò máy chủ", + "server_role_hint": "Xác định những gì người dùng có thể làm trên toàn bộ bảng điều khiển (truy cập bảng điều khiển, cấu hình máy chủ, kiểm tra, v.v.).", + "org_membership_section": "Tư cách thành viên tổ chức", + "org_membership_hint": "Một người dùng có thể thuộc về nhiều tổ chức. Vai trò tổ chức chỉ kiểm soát các quy��n bên trong tổ chức đó và độc lập với vai trò máy chủ ở trên.", + "column_organizations": "Tổ chức", + "no_orgs_short": "—", + "org_count_one": "Tổ chức {count}", + "org_count_many": "Tổ chức {count}", + "all_orgs_assigned": "Người dùng đã là thành viên của mọi tổ chức.", + "user_groups": "Nhóm người dùng", + "user_groups_hint": "Nhóm người dùng có thể được sử dụng để cấp quyền truy cập cho các nhóm thiết bị đã chọn.", + "loading_user_groups": "Đang tải nhóm người dùng...", + "no_user_groups": "Không có nhóm người dùng nào", + "create_user_group": "Tạo nhóm", + "edit_user_group": "Chỉnh sửa nhóm người dùng", + "delete_user_group": "Xóa nhóm người dùng", + "delete_user_group_confirm": "Xóa nhóm người dùng {name}? Các thành viên sẽ mất quyền truy cập được cấp thông qua nhóm này.", + "user_group_created": "Đã tạo nhóm người dùng", + "user_group_updated": "Đã cập nhật nhóm người dùng", + "user_group_deleted": "Nhóm người dùng đã bị xóa", + "user_group_not_found": "Không tìm thấy nhóm người dùng", + "group_name": "Tên nhóm", + "group_name_placeholder": "Toán tử", + "group_note": "Note", + "group_note_placeholder": "Ghi chú tùy chọn", + "group_name_required": "Tên nhóm là bắt buộc", + "group_members_count": "Thành viên {count}", + "provider": "Nhà cung cấp", + "provider_local": "Cục bộ", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "Do nhà cung cấp danh tính quản lý", + "provider_managed_hint": "Tài khoản này được quản lý bởi nhà cung cấp danh tính bên ngoài (LDAP/AD hoặc SSO). Mật khẩu và vai trò được kiểm soát bởi nhà cung cấp và không thể thay đổi ở đây." + }, + "folders": { + "title": "Folders", + "create": "Tạo thư mục", + "edit": "Chỉnh sửa thư mục", + "delete": "Xóa thư mục", + "name": "Folder Name", + "name_placeholder": "Nhập tên thư mục", + "name_required": "Tên thư mục là bắt buộc", + "name_too_long": "Tên thư mục quá dài (tối đa 50 ký tự)", + "color": "Color", + "icon": "Icon", + "not_found": "Không tìm thấy thư mục", + "delete_confirm": "Bạn có chắc chắn muốn xóa thư mục này? Các thiết bị sẽ được bỏ chỉ định.", + "delete_success": "Đã xóa thư mục thành công", + "created": "Thư mục được tạo thành công", + "updated": "Đã cập nhật thư mục thành công", + "no_devices_selected": "Không có thiết bị nào được chọn", + "devices_moved": "Đã di chuyển thiết bị thành công", + "device_assigned": "Thiết bị được gán vào thư mục", + "unassigned": "Unassigned", + "all_devices": "Tất cả thiết bị", + "drag_hint": "Kéo thiết bị vào thư mục để sắp xếp chúng", + "move_to": "Di chuyển đến", + "toggle_sidebar": "Chuyển đổi thanh bên" + }, + "errors": { + "forbidden_title": "Truy cập bị từ chối", + "forbidden_message": "Bạn không có quyền truy cập tài nguyên này.", + "not_found_title": "Không tìm thấy trang", + "not_found_message": "Trang bạn đang tìm kiếm không tồn tại hoặc đã bị di chuyển.", + "server_error_title": "Lỗi máy chủ", + "server_error_message": "Đã xảy ra lỗi. Vui lòng thử lại sau.", + "go_home": "Go Home", + "try_again": "Try Again", + "load_devices_failed": "Không tải được thiết bị", + "load_key_failed": "Không thể tải khóa", + "load_qr_failed": "Không tải được QR", + "load_audit_failed": "Không tải được nhật ký kiểm tra", + "load_users_failed": "Không tải được người dùng", + "load_folders_failed": "Không tải được thư mục", + "download_failed": "Tải xuống không thành công", + "logout_failed": "Đăng xuất không thành công", + "password_change_failed": "Không thể thay đổi mật khẩu", + "language_change_failed": "Không thể thay đổi ng��n ngữ", + "ban_failed": "Không cấm được thiết bị", + "unban_failed": "Không thể bỏ cấm thiết bị", + "delete_failed": "Không xóa được thiết bị", + "change_id_failed": "Không thể thay đổi ID thiết bị", + "bulk_delete_failed": "Không thể xóa thiết bị", + "sync_failed": "Không thể đồng bộ hóa trạng thái", + "error": "Error", + "not_found": "Not found", + "server_error": "Lỗi máy chủ", + "load_device_failed": "Không tải được thiết bị", + "load_orgs_failed": "Không tải được tổ chức" + }, + "remote": { + "title": "Máy tính để bàn từ xa", + "connecting": "Đang kết nối...", + "waiting_password": "Đang chờ mật khẩu", + "authenticating": "Đang xác thực...", + "streaming": "Connected", + "disconnected": "Disconnected", + "error": "Error", + "status_idle": "Idle", + "password_required": "Yêu cầu mật khẩu", + "enter_password_for": "Nhập mật khẩu cho thiết bị", + "password_placeholder": "Mật khẩu thiết bị", + "connect": "Connect", + "reconnect": "Reconnect", + "disconnect": "Disconnect", + "back_to_devices": "Quay lại Thiết bị", + "fullscreen": "Fullscreen", + "toggle_audio": "Chuyển đổi âm thanh", + "send_keys": "Gửi chìa khóa", + "scale_mode": "Scale Mode", + "scale_fit": "Phù hợp với cửa sổ", + "scale_fill": "Fill Window", + "scale_original": "Kích thước gốc (1:1)", + "scale_stretch": "Kéo dài để lấp đầy", + "actions": "Actions", + "lock_screen": "Màn hình khóa", + "restart_remote": "Khởi động lại thiết bị từ xa", + "refresh_screen": "Làm mới màn hình", + "clipboard_paste": "Dán từ Clipboard", + "block_input": "Block Input", + "display_settings": "Cài đặt hiển thị", + "image_quality": "Chất lượng hình ảnh", + "quality_best": "Tốt nhất (Chất lượng đầy đủ, 60 khung hình / giây)", + "quality_balanced": "Balanced", + "quality_low": "Performance", + "show_cursor": "Hiển thị con trỏ từ xa", + "lock_after_session": "Khóa sau phiên", + "privacy_mode": "Chế độ riêng tư", + "disable_clipboard": "Tắt bảng nhớ tạm", + "chat": "Chat", + "chat_placeholder": "Nhập tin nhắn...", + "record": "Ghi lại màn hình", + "view_only": "Chỉ xem", + "pin_toolbar": "Ghim thanh công cụ", + "monitors": "Monitors", + "select_monitor": "Chọn màn hình", + "quality_speed": "Tốc độ (Chất lượng thấp, 60 khung hình/giây)", + "quality_quality": "Chất lượng (Tốt nhất, 30 khung hình/giây)", + "recording_started": "Đã bắt đầu ghi", + "recording_stopped": "Đã dừng ghi", + "download_recording": "Tải xuống bản ghi", + "e2e_encrypted": "Mã hóa đầu cuối", + "e2e_key_exchange": "Thiết lập kênh an toàn...", + "confirm_restart": "Bạn có chắc chắn muốn khởi động lại thiết bị từ xa không?", + "webcodecs_not_supported": "Trình duyệt của bạn không hỗ trợ WebCodecs API. Vui lòng sử dụng Chrome 94+ hoặc Edge 94+.", + "webcodecs_insecure_context": "WebCodecs không khả dụng trên HTTP. Video sử dụng dự phòng phần mềm. Để có hiệu suất tốt nhất, hãy sử dụng HTTPS.", + "webcodecs_fallback_active": "Phần mềm giải mã video đang hoạt động (hiệu suất hạn chế)", + "click_to_start": "Bấm để bắt đầu", + "autoplay_blocked": "Trình duyệt yêu cầu sự tương tác của người dùng để bắt đầu phát lại video và âm thanh.", + "start_playback": "Bắt đầu phát lại", + "new_connection": "Kết nối mới", + "device_id_placeholder": "Nhập ID thiết bị", + "http_warning": "Chế độ HTTP: giới hạn ở giải mã phần mềm H.264 (~15 FPS). Sử dụng HTTPS để có hiệu suất tối đa (WebCodecs, VP9, 60 FPS).", + "file_transfer": "Truyền tệp", + "file_upload": "Upload", + "file_download": "Download", + "file_empty": "Thư mục này trống", + "file_transfers": "Transfers", + "file_complete": "Complete", + "file_error": "Chuyển không thành công", + "file_show_hidden": "Hiển thị các tập tin ẩn", + "file_new_folder": "New Folder", + "file_new_folder_prompt": "Nhập tên thư mục:", + "file_parent": "Thư mục mẹ", + "file_root": "Root", + "file_rename": "Rename", + "file_rename_prompt": "Nhập tên mới:", + "file_delete_confirm": "Bạn có chắc chắn muốn xóa mục này?", + "file_cancelled": "Đã hủy chuyển khoản", + "2fa_required": "Yêu cầu xác minh 2FA", + "2fa_hint": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", + "2fa_invalid": "Nhập mã gồm 6 chữ số hợp lệ", + "verify": "Verify", + "use_cdap_fallback": "Sử dụng trình xem CDAP", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "Bảng tạm trống", + "clipboard_denied": "Truy cập vào bảng nhớ tạm bị từ chối. HTTPS được yêu cầu hoặc quyền không được cấp.", + "file_loading": "Đang tải...", + "file_timeout": "Thiết bị từ xa không phản hồi. Truyền tệp có thể không được hỗ trợ hoặc bị tắt trên máy từ xa.", + "codec": "Bộ giải mã video", + "codec_auto": "Tự động (được khuyến nghị)" + }, + "branding": { + "identity_title": "Nhận diện thương hiệu", + "identity_desc": "Tùy chỉnh tên ứng dụng và mô tả hiển thị trên bảng điều khiển", + "app_name": "Tên ứng dụng", + "app_description": "Mô tả ứng dụng", + "logo_title": "Logo", + "logo_desc": "Chọn cách logo của bạn xuất hiện trong thanh bên và trang đăng nhập", + "logo_type_icon": "Biểu tượng vật liệu", + "logo_type_svg": "SVG Code", + "logo_type_image": "Image URL", + "logo_icon_name": "Icon Name", + "logo_icon_hint": "Nhập tên Biểu tượng Vật liệu (ví dụ: dns, đám mây, bảo mật). Xem phông chữ.google.com/icons", + "logo_svg_code": "SVG Code", + "logo_svg_hint": "Dán đánh dấu SVG của bạn vào đây. Hỗ trợ các phần tử đầy đủ với đường dẫn và kiểu.", + "logo_image_upload": "Tải hình ảnh lên", + "logo_image_choose": "Chọn tập tin hình ảnh", + "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", + "logo_image_url": "Image Data / URL", + "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", + "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", + "logo_image_invalid_type": "Lo��i tệp không hợp lệ. Sử dụng PNG, JPG, GIF, WebP hoặc SVG.", + "preview": "Preview", + "colors_title": "Phối màu", + "colors_desc": "Tùy chỉnh bảng màu. Để trống để sử dụng mặc định.", + "colors_backgrounds": "Backgrounds", + "colors_text": "Text", + "colors_accents": "Màu nhấn", + "colors_borders": "Borders", + "import_export_title": "Nhập / Xuất", + "import_export_desc": "Lưu chủ đề của bạn dưới dạng tệp JSON hoặc nhập chủ đề từ một phiên bản khác", + "export_theme": "Xuất chủ đề", + "import_theme": "Nhập chủ đề", + "reset_defaults": "Đặt lại về mặc định", + "save_branding": "Lưu thương hiệu", + "saved": "Đã lưu thương hiệu thành công. Đang tải lại...", + "exported": "Đã xuất chủ đề", + "imported": "Chủ đề đã được nhập thành công. Đang tải lại...", + "import_error": "Không thể nhập chủ đề. Định dạng tập tin không hợp lệ.", + "reset_confirm": "Bạn có chắc chắn muốn đặt lại nhãn hiệu về mặc định không? Điều này không thể hoàn tác được.", + "reset_success": "Đặt lại thương hiệu về mặc định. Đang tải lại...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "Văn bản chính được hiển thị dưới dạng logo thương hiệu của bạn", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "Văn bản phụ bên dưới logo (ví dụ: tên sản phẩm hoặc dòng giới thiệu)", + "logo_upload_success": "Logo đã được tải lên thành công.", + "typography_title": "Typography", + "typography_desc": "Chọn phông chữ cho tiêu đề và nội dung văn bản. Phông chữ được tải xuống máy chủ để tự lưu trữ.", + "font_heading": "Phông chữ tiêu đề", + "font_heading_hint": "Được sử dụng cho tiêu đề (H1–H6) và logo văn bản", + "font_body": "Body Font", + "font_body_hint": "Được sử dụng cho văn bản nội dung và các thành phần giao diện người dùng", + "font_search_placeholder": "Tìm kiếm phông chữ...", + "font_system_default": "Mặc định hệ thống", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "phông chữ được tải xuống trên máy chủ", + "powered_by": "Được hỗ trợ bởi", + "background_title": "Nền & Giao diện", + "background_desc": "Đặt hình nền console, gradient hoặc nền màu đơn. Các thẻ sẽ nổi lên trên.", + "bg_type_none": "Không có", + "bg_type_color": "Màu đơn", + "bg_type_gradient": "Gradient", + "bg_type_image": "Hình ảnh", + "bg_color": "Màu nền", + "bg_gradient": "Gradient CSS", + "bg_gradient_hint": "Bất kỳ CSS gradient hợp lệ nào, vd: linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "Tải lên ảnh nền", + "bg_image_choose": "Chọn tệp ảnh", + "bg_image_hint": "PNG, JPG, WebP hoặc GIF. Tối đa 8 MB. Lưu trên máy chủ.", + "bg_image_url": "Đường dẫn / URL ảnh", + "bg_size": "Kích thước ảnh", + "bg_size_cover": "Phủ kín (lấp đầy màn hình)", + "bg_size_contain": "Vừa khít", + "bg_size_auto": "Tự động (gốc)", + "bg_blur": "Làm mờ nền", + "bg_overlay": "Lớp phủ tối", + "bg_overlay_hint": "Làm tối nền để văn bản dễ đọc hơn.", + "bg_image_too_large": "Ảnh quá lớn. Kích thước tối đa là 8 MB.", + "bg_image_invalid_type": "Loại tệp không hợp lệ. Sử dụng PNG, JPG, WebP hoặc GIF.", + "bg_upload_success": "Đã tải lên ảnh nền thành công.", + "login_title": "Trang đăng nhập", + "login_desc": "Tùy chỉnh tiêu đề, phụ đề và nền trang đăng nhập.", + "login_heading": "Tiêu đề đăng nhập", + "login_heading_placeholder": "Chào mừng trở lại", + "login_subheading": "Phụ đề đăng nhập", + "login_subheading_placeholder": "Đăng nhập vào tài khoản của bạn", + "login_bg_inherit": "Giống như console", + "agent_title": "Trang tải xuống Agent", + "agent_desc": "Tùy chỉnh cổng tải xuống agent công khai hiển thị cho người dùng cuối.", + "agent_show_powered": "Hiển thị \"Powered by BetterDesk\"", + "agent_show_powered_hint": "Hiển thị ghi nhận BetterDesk trong footer của cổng tải xuống.", + "footer_title": "Footer & Bản quyền", + "footer_desc": "Thêm dòng footer tùy chỉnh hiển thị trên trang đăng nhập và thanh bên console.", + "footer_text": "Văn bản footer", + "footer_text_hint": "vd: thông báo bản quyền hoặc tên công ty.", + "show_powered": "Hiển thị ghi nhận \"BetterDesk\"", + "show_powered_hint": "Hiển thị tên và phiên bản BetterDesk trong footer đăng nhập và thanh bên.", + "custom_css_title": "CSS tùy chỉnh", + "custom_css_desc": "Nâng cao: chèn CSS tùy chỉnh áp dụng trên toàn console và trang đăng nhập.", + "custom_css_hint": "Sử dụng cẩn thận. Các quy tắc không hợp lệ hoặc không an toàn sẽ bị làm sạch. Tối đa 20.000 ký tự." + }, + "device_detail": { + "tab_overview": "Tổng quan", + "tab_tags": "Thẻ & Ghi chú", + "tab_actions": "Actions", + "section_identity": "Identity", + "section_network": "Network", + "section_timestamps": "Timestamps", + "section_connect": "Kết nối", + "section_manage": "Quản lý", + "folder": "Folder", + "status_tier": "Status Tier", + "device_banned": "Thiết bị này bị cấm", + "no_reason": "Không có lý do nào được cung cấp", + "tags": "Tags", + "no_tags": "Không có thẻ nào được gán cho thiết bị này", + "tag_placeholder": "Nhập tên thẻ...", + "add_tag": "Add", + "tag_exists": "Thẻ này đã tồn tại", + "notes": "Notes", + "notes_placeholder": "Thêm ghi chú về thiết bị này...", + "danger_zone": "Danger Zone", + "action_connect_web": "Web từ xa", + "action_connect_web_desc": "Kết nối qua trình duyệt máy tính từ xa", + "action_native_remote": "Điều khiển từ xa BetterDesk", + "action_native_remote_desc": "Native JPEG stream — no plugins required", + "action_connect_desktop": "Máy khách để bàn", + "action_connect_desktop_desc": "Mở trong ứng dụng khách trên máy tính để bàn", + "action_change_id_desc": "Thay đổi ID đăng ký thiết bị", + "action_ban_desc": "Chặn kết nối thiết bị này", + "action_unban_desc": "Cho phép thiết bị này kết nối lại", + "action_delete_desc": "Xóa vĩnh viễn thiết bị này", + "tab_hardware": "Hardware", + "tab_metrics": "Số liệu", + "section_system": "System", + "section_cpu": "Processor", + "section_memory": "Memory", + "section_displays": "Displays", + "section_encoding": "Khả năng mã hóa", + "section_live_metrics": "Số liệu trực tiếp", + "section_current_usage": "Cách sử dụng hiện tại", + "section_usage_history": "Lịch sử sử dụng", + "os": "Operating System", + "version": "Client Version", + "cpu_model": "CPU Model", + "cpu_cores": "CPU Cores", + "cpu_freq": "Tần số CPU", + "total_memory": "Tổng bộ nhớ", + "metric_memory": "Memory", + "metric_disk": "Disk", + "metrics_updated": "Đã cập nhật", + "device_groups": "Nhóm", + "no_sysinfo": "Không có thông tin phần cứng", + "no_sysinfo_hint": "Thông tin hệ thống sẽ xuất hiện sau khi thiết bị gửi báo cáo sysinfo", + "no_metrics": "Không có sẵn dữ liệu số liệu", + "no_metrics_hint": "Số liệu sẽ xuất hiện sau khi thiết bị gửi báo cáo nhịp tim", + "chart_oldest": "← Oldest", + "chart_newest": "Newest →", + "tab_services": "Services", + "tab_processes": "Processes", + "tab_events": "Events", + "tab_activity": "Activity", + "tab_files": "Tập tin", + "agent_lazy_hint": "Nhấp vào tab này để tải dữ liệu trực tiếp từ đại lý", + "agent_offline": "Đại lý đang ngoại tuyến", + "agent_timeout": "Đại lý không phản hồi kịp thời", + "agent_error": "Không thể tải dữ liệu từ đại lý", + "service_name": "Name", + "service_display": "Tên hiển thị", + "service_status": "Status", + "service_start": "Start mode", + "process_name": "Name", + "process_user": "User", + "process_memory": "Memory" + }, + "inventory": { + "title": "Inventory", + "subtitle": "Kiểm kê phần cứng và phần mềm của các thiết bị được quản lý", + "device_id": "ID thiết bị", + "hostname": "Hostname", + "os": "Operating System", + "cpu": "CPU", + "cpu_cores": "CPU Cores", + "cpu_usage": "CPU Usage", + "memory": "Memory", + "memory_total": "Tổng bộ nhớ", + "memory_used": "Used Memory", + "memory_available": "Bộ nhớ khả dụng", + "memory_usage": "Sử dụng bộ nhớ", + "swap": "Swap", + "disks": "Disks", + "disk_count": "Disk Count", + "network": "Network", + "network_interfaces": "Giao diện mạng", + "software": "Software", + "software_count": "Phần mềm đã cài đặt", + "system": "System", + "kernel": "Kernel", + "architecture": "Architecture", + "uptime": "Uptime", + "frequency": "Frequency", + "physical_cores": "Lõi vật lý", + "logical_cores": "Lõi logic", + "model": "Model", + "usage": "Usage", + "total": "Total", + "used": "Used", + "available": "Có sẵn", + "mount_point": "Mount Point", + "removable": "removable", + "mac_address": "MAC Address", + "ip_addresses": "Địa chỉ IP", + "traffic": "Traffic", + "collect_now": "Collect Now", + "collector_running": "Bộ sưu tập đang chạy", + "collector_stopped": "Người sưu tầm đã dừng", + "last_upload": "Last upload", + "total_uploads": "total", + "last_seen": "Last Seen", + "collected_at": "Thu thập tại", + "no_data": "Chưa có dữ liệu hàng tồn kho. Nhấp vào \"Thu thập ngay\" để thu thập thông tin hệ thống.", + "no_devices": "Không tìm thấy thiết bị nào có dữ liệu hàng tồn kho", + "detail_title": "Chi tiết kiểm kê thiết bị", + "telemetry": "Telemetry", + "view_detail": "Xem chi tiết", + "export": "Export", + "refresh": "Refresh" + }, + "tickets": { + "title": "Tickets", + "subtitle": "Phiếu hỗ trợ và theo dõi vấn đề", + "create": "New Ticket", + "edit": "Chỉnh sửa vé", + "delete": "Xóa vé", + "detail": "Chi tiết vé", + "ticket_id": "Ticket ID", + "ticket_title": "Title", + "description": "Description", + "status": "Status", + "priority": "Priority", + "category": "Category", + "assigned_to": "Được giao cho", + "created_by": "Được tạo bởi", + "device": "Thiết bị", + "sla_due": "SLA Due", + "created_at": "Đã tạo", + "updated_at": "Đã cập nhật", + "resolved_at": "Resolved", + "closed_at": "Closed", + "status_open": "Mở", + "status_in_progress": "In Progress", + "status_resolved": "Resolved", + "status_closed": "Closed", + "priority_low": "Low", + "priority_medium": "Medium", + "priority_high": "High", + "priority_critical": "Critical", + "category_general": "General", + "category_hardware": "Hardware", + "category_software": "Software", + "category_network": "Network", + "category_access": "Access", + "category_other": "Other", + "comments": "Comments", + "add_comment": "Add Comment", + "comment_placeholder": "Viết bình luận...", + "internal_note": "Ghi chú nội bộ (không hiển thị cho người dùng cuối)", + "attachments": "Attachments", + "upload_attachment": "Tải lên tệp đính kèm", + "download": "Download", + "connect_device": "Kết nối với thiết bị", + "no_tickets": "Không tìm thấy vé", + "no_comments": "Chưa có bình luận nào", + "no_attachments": "Không có tệp đính kèm", + "title_required": "Tiêu đề là bắt buộc", + "delete_confirm": "Bạn có chắc chắn muốn xóa vé #{id} không?", + "delete_success": "Đã xóa vé thành công", + "created_success": "Đã tạo vé thành công", + "updated_success": "Đã cập nhật vé thành công", + "sla_overdue": "SLA Overdue", + "filter_all": "All", + "search_placeholder": "Tìm kiếm vé...", + "assign_to_me": "Giao cho tôi", + "unassign": "Unassign", + "stats_total": "Total", + "stats_open": "Mở", + "stats_in_progress": "In Progress", + "stats_resolved": "Resolved", + "stats_closed": "Closed" + }, + "activity": { + "title": "Giám sát hoạt động", + "subtitle": "Việc sử dụng ứng dụng và theo dõi khi không hoạt động", + "device": "Thiết bị", + "hostname": "Hostname", + "sessions": "Phiên", + "idle_time": "Idle Time", + "active_time": "Active Time", + "last_report": "Last Report", + "top_apps": "Ứng dụng hàng đầu", + "app_name": "Application", + "window_title": "Tiêu đề cửa sổ", + "category": "Category", + "duration": "Duration", + "started_at": "Started", + "ended_at": "Ended", + "session_count": "Số phiên", + "total_active": "Tổng số hoạt động", + "total_idle": "Total Idle", + "detail_count": "Bản ghi chi tiết", + "no_data": "Không có dữ liệu hoạt động", + "no_sessions": "Không có phiên nào", + "filter_from": "Từ", + "filter_to": "Đến", + "filter_apply": "Áp dụng bộ lọc", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "category_browser": "Browser", + "category_productivity": "Productivity", + "category_communication": "Communication", + "category_development": "Development", + "category_media": "Media", + "category_gaming": "Gaming", + "category_system": "System", + "category_other": "Other", + "summary": "Summary", + "details": "Details", + "refresh": "Refresh", + "search": "Tìm kiếm thiết bị...", + "date_range": "Date Range", + "device_id": "ID thiết bị", + "session_start": "Bắt đầu phiên", + "session_end": "Kết thúc phiên", + "user": "User", + "no_activity": "Không có hoạt động nào được ghi lại", + "reported_at": "Reported At", + "detail": "Detail", + "no_apps": "Không có ứng dụng" + }, + "automation": { + "title": "Tự động hóa & Cảnh báo", + "subtitle": "Quy tắc cảnh báo, lệnh từ xa và cấu hình SMTP", + "rules": "Alert Rules", + "rules_subtitle": "Xác định các điều kiện kích hoạt thông báo", + "alerts": "Lịch sử cảnh báo", + "alerts_subtitle": "Xem và xác nhận cảnh báo được kích hoạt", + "commands": "Lệnh từ xa", + "commands_subtitle": "Gửi lệnh đến các thiết bị từ xa", + "smtp": "Cấu hình SMTP", + "smtp_subtitle": "Cài đặt thông báo qua email", + "rule_name": "Rule Name", + "description": "Description", + "condition_type": "Loại tình trạng", + "condition_op": "Operator", + "condition_value": "Threshold", + "severity": "Severity", + "scope_device": "Thiết bị mục tiêu", + "scope_all": "Tất cả thiết bị", + "cooldown": "Thời gian hồi chiêu (giây)", + "notify_emails": "Email thông báo", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "create_rule": "Tạo quy tắc", + "edit_rule": "Chỉnh sửa quy tắc", + "delete_rule": "Xóa quy tắc", + "acknowledge": "Acknowledge", + "acknowledged": "Acknowledged", + "unacknowledged": "Unacknowledged", + "triggered_at": "Kích hoạt vào lúc", + "severity_info": "Info", + "severity_warning": "Warning", + "severity_critical": "Critical", + "op_gt": "Lớn hơn", + "op_gte": "Lớn hơn hoặc bằng", + "op_lt": "Less than", + "op_lte": "Ít hơn hoặc bằng", + "op_eq": "bằng với", + "op_neq": "Không bằng", + "type_cpu_usage": "Mức sử dụng CPU (%)", + "type_memory_usage": "Mức sử dụng bộ nhớ (%)", + "type_disk_usage": "Sử dụng đĩa (%)", + "type_offline_duration": "(Các) thời lượng ngoại tuyến", + "type_idle_duration": "Thời lượng nhàn rỗi (s)", + "type_custom": "Custom", + "command_type": "Loại lệnh", + "command_payload": "Lệnh / Tập lệnh", + "command_result": "Result", + "command_status": "Status", + "send_command": "Gửi lệnh", + "status_pending": "Pending", + "status_running": "Running", + "status_completed": "Completed", + "status_failed": "thất bại", + "smtp_host": "SMTP Host", + "smtp_port": "Port", + "smtp_secure": "Use TLS", + "smtp_user": "Tên người dùng", + "smtp_pass": "Mật khẩu", + "smtp_from": "Từ địa chỉ", + "smtp_test": "Kiểm tra kết nối", + "smtp_save": "Lưu cấu hình", + "smtp_test_success": "Kết nối thành công", + "smtp_test_failed": "Kết nối không thành công", + "no_rules": "Không có quy tắc cảnh báo nào được định cấu hình", + "no_alerts": "Không có cảnh báo nào được kích hoạt", + "no_commands": "Không có lệnh nào được gửi", + "id_payload_required": "Cần có ID thiết bị và tải trọng", + "no_commands_sent": "Chưa có lệnh nào được gửi" + }, + "file_transfer": { + "title": "Truyền tệp", + "transfers": "Transfers", + "new_transfer": "Chuyển nhượng mới", + "upload": "Upload", + "download": "Download", + "direction": "Direction", + "filename": "Filename", + "file_size": "Kích thước tệp", + "mime_type": "MIME Type", + "progress": "Progress", + "status": "Status", + "device": "Thiết bị", + "initiated_by": "Khởi xướng bởi", + "created_at": "Được tạo tại", + "cancel": "Hủy bỏ", + "cancel_confirm": "Bạn có chắc chắn muốn hủy quá trình chuyển này không?", + "download_file": "Tải tập tin xuống", + "browse_files": "Duyệt tập tin", + "select_file": "Chọn tệp", + "select_device": "Chọn thiết bị", + "no_transfers": "Không chuyển tập tin", + "status_pending": "Pending", + "status_active": "Active", + "status_completed": "Completed", + "status_failed": "thất bại", + "status_cancelled": "Cancelled", + "bytes_transferred": "Byte được chuyển", + "chunks": "Chunks", + "transfer_started": "Đã bắt đầu chuyển", + "transfer_completed": "Chuyển hoàn tất", + "transfer_failed": "Chuyển không thành công", + "transfer_cancelled": "Đã hủy chuyển khoản", + "max_file_size": "Kích thước tệp tối đa: 4 GB", + "error_too_large": "Tệp quá lớn", + "error_no_device": "Không có thiết bị nào được chọn", + "error_no_file": "Không có tập tin nào được chọn" + }, + "network": { + "title": "Giám sát mạng", + "targets": "Mục tiêu giám sát", + "add_target": "Add Target", + "edit_target": "Chỉnh sửa mục tiêu", + "delete_target": "Xóa mục tiêu", + "delete_confirm": "Bạn có chắc chắn muốn xóa mục tiêu này?", + "target_name": "Name", + "host": "Host", + "port": "Port", + "url": "URL", + "check_type": "Check Type", + "timeout": "Thời gian chờ (ms)", + "interval": "Khoảng thời gian (ms)", + "enabled": "Đã bật", + "status": "Status", + "last_check": "Last Check", + "last_rtt": "Last RTT", + "rtt_ms": "RTT (ms)", + "status_up": "Up", + "status_down": "Down", + "status_unknown": "Unknown", + "check_now": "Check Now", + "history": "Kiểm tra lịch sử", + "stats": "Statistics", + "total_targets": "Tổng số mục tiêu", + "targets_up": "Targets Up", + "targets_down": "Mục tiêu xuống", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP Port", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "Công cụ mạng", + "ping_tool": "Ping Test", + "tcp_tool": "Kiểm tra cổng TCP", + "http_tool": "HTTP Check", + "dns_tool": "DNS Resolve", + "monitor_start": "Bắt đầu màn hình", + "monitor_stop": "Dừng màn hình", + "monitor_running": "Màn hình đang chạy", + "monitor_stopped": "Màn hình bị dừng", + "no_targets": "Không có mục tiêu giám sát nào đư��c cấu hình", + "no_history": "Không có lịch sử kiểm tra", + "error_code": "Error", + "status_code": "Mã trạng thái HTTP", + "search_targets": "Tìm kiếm mục tiêu...", + "name": "Name", + "tab_targets": "Targets", + "tab_tools": "Tools", + "avg_latency": "Avg Latency", + "type": "Type", + "latency": "Latency", + "check_history": "Kiểm tra lịch sử", + "name_host_required": "Tên và máy chủ là bắt buộc", + "uptime": "Uptime", + "response_time": "Thời gian đáp ứng", + "avg_response": "Phản hồi trung bình", + "charts": "Charts", + "realtime": "Realtime", + "response_time_ms": "Thời gian đáp ứng (ms)", + "uptime_percent": "Uptime %", + "last_24h": "24 giờ qua", + "last_7d": "Last 7 days", + "last_30d": "30 ngày qua" + }, + "dataguard": { + "title": "DataGuard — DLP", + "policies": "Chính sách DLP", + "add_policy": "Thêm chính sách", + "edit_policy": "Chỉnh sửa chính sách", + "delete_policy": "Xóa chính sách", + "delete_confirm": "Bạn có chắc chắn muốn xóa chính sách này?", + "policy_name": "Name", + "policy_description": "Description", + "status": "Status", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "rules": "Rules", + "add_rule": "Add Rule", + "rule_type": "Rule Type", + "rule_type_usb": "Thiết bị USB", + "rule_type_file": "Thao tác với tệp", + "action": "Action", + "action_allow": "Allow", + "action_block": "Block", + "action_log": "Log Only", + "filter": "Filter", + "vid": "ID nhà cung cấp (VID)", + "pid": "ID sản phẩm (PID)", + "serial": "Số sê-ri", + "device_class": "Lớp thiết bị", + "drive_type": "Drive Type", + "file_extensions": "Phần mở rộng tệp", + "events": "DLP Events", + "event_source": "Source", + "event_source_usb": "USB", + "event_source_file": "tập tin", + "event_type": "Event Type", + "event_details": "Details", + "no_policies": "Không có chính sách DLP nào được định cấu hình", + "no_events": "Không có sự kiện DLP nào được ghi lại", + "stats": "Statistics", + "total_events": "Tổng số sự kiện", + "blocked_events": "Blocked", + "logged_events": "Logged", + "usb_events": "USB Events", + "file_events": "Sự kiện tệp", + "device_id": "ID thiết bị", + "policy_matched": "Chính sách phù hợp", + "timestamp": "Timestamp", + "drive_removable": "Removable", + "drive_fixed": "Fixed", + "drive_network": "Network", + "drive_cdrom": "CD-ROM", + "drive_unknown": "Unknown", + "total_policies": "Chính sách tổng thể", + "active_policies": "Chính sách hoạt động", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "Chính sách", + "tab_events": "Events", + "search_policies": "Chính sách tìm kiếm...", + "create_policy": "Tạo chính sách", + "policy_type": "Loại chính sách", + "scope": "Scope", + "events_count": "Events", + "search_events": "Tìm kiếm sự kiện...", + "event_time": "Event Time", + "device": "Thiết bị", + "policy": "Chính sách", + "detail": "Detail", + "scope_help": "ID thiết bị được phân tách bằng dấu phẩy hoặc để trống tất cả", + "scope_all": "Tất cả thiết bị", + "active": "Active", + "type_file_type": "Loại tệp", + "type_clipboard": "Bảng nhớ tạm", + "type_screen_share": "Chia sẻ màn hình", + "type_file_transfer": "Truyền tệp", + "policy_desc": "Mô tả chính sách", + "type_usb": "USB" + }, + "reports": { + "title": "Reports", + "generate": "Tạo báo cáo", + "generate_csv": "Export CSV", + "report_type": "Report Type", + "type_devices": "Tóm tắt thiết bị", + "type_activity": "Tóm tắt hoạt động", + "type_security": "Báo cáo bảo mật", + "type_tickets": "Báo cáo vé", + "type_network": "Báo cáo mạng", + "type_inventory": "Báo cáo tồn kho", + "type_alerts": "Báo cáo cảnh báo", + "saved": "Báo cáo đã lưu", + "save_report": "Lưu báo cáo", + "delete_report": "Xóa báo cáo", + "delete_confirm": "Bạn có chắc chắn muốn xóa báo cáo đã lưu này không?", + "no_saved": "Không có báo cáo nào được lưu", + "report_title": "Title", + "created_by": "Được tạo bởi", + "created_at": "Được tạo tại", + "filters": "Filters", + "date_from": "Từ", + "date_to": "Đến", + "device_filter": "ID thiết bị", + "generated_at": "Được tạo vào lúc", + "section": "Phần dữ liệu", + "total_devices": "Tổng số thiết bị", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "platform_distribution": "Phân phối nền tảng", + "top_applications": "Ứng dụng hàng đầu", + "total_active": "Tổng thời gian hoạt động", + "total_idle": "Tổng thời gian nhàn rỗi", + "dlp_stats": "Thống kê DLP", + "banned_devices": "Thiết bị bị cấm", + "audit_logs": "Audit Logs", + "ticket_stats": "Thống kê vé", + "category_distribution": "Phân phối danh mục", + "priority_distribution": "Phân phối ưu tiên", + "targets_status": "Trạng thái mục tiêu", + "os_distribution": "Phân phối hệ điều hành", + "avg_ram": "Average RAM", + "alert_rules": "Alert Rules", + "recent_alerts": "Cảnh báo gần đây", + "tab_generate": "Tạo báo cáo", + "tab_saved": "Báo cáo đã lưu", + "type_devices_desc": "Tổng quan về tất cả các thiết bị, nền tảng và trạng thái", + "type_activity_desc": "Tóm tắt mức sử dụng ứng dụng và thời gian nhàn rỗi", + "type_security_desc": "Cấm hành động, sự kiện DLP và nhật ký kiểm tra", + "type_tickets_desc": "Thống kê vé và hiệu suất SLA", + "type_network_desc": "Mục tiêu giám sát mạng và dữ liệu thời gian hoạt động", + "type_inventory_desc": "Tóm tắt kiểm kê phần cứng và phần mềm", + "type_alerts_desc": "Quy tắc cảnh báo và lịch sử cảnh báo được kích hoạt", + "report_name": "Report Name", + "format": "Format", + "save": "Lưu báo cáo", + "preview": "Preview", + "download": "Download", + "delete_saved": "Xóa báo cáo", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "Tenants", + "list": "Tenants", + "add_tenant": "Add Tenant", + "edit_tenant": "Chỉnh sửa người thuê nhà", + "delete_tenant": "Xóa người thuê", + "delete_confirm": "Bạn có chắc chắn muốn xóa người thuê nhà này không? Tất cả các nhiệm vụ của thiết bị và người dùng sẽ bị xóa.", + "name": "Name", + "slug": "Slug", + "contact_name": "Tên liên hệ", + "contact_email": "Email liên hệ", + "max_devices": "Thiết bị tối đa", + "max_devices_hint": "0 = không giới hạn", + "notes": "Notes", + "active": "Active", + "inactive": "Inactive", + "devices": "Thiết bị", + "users": "Users", + "assign_device": "Chỉ định thiết bị", + "assign_devices": "Chỉ định thiết bị", + "remove_device": "Xóa thiết bị", + "assign_user": "Assign User", + "remove_user": "Remove User", + "no_tenants": "Không có đối tượng thuê nào được định cấu hình", + "no_devices": "Không có thiết bị nào được chỉ định cho đối tượng thuê này", + "no_users": "Không có người dùng nào được chỉ định cho đối tượng thuê này", + "stats": "Thống kê người thuê nhà", + "total_devices": "Tổng số thiết bị", + "online_devices": "Thiết bị trực tuyến", + "total_users": "Total Users", + "created_at": "Được tạo tại", + "updated_at": "Cập nhật lúc", + "slug_exists": "Slug của người thuê đã tồn tại", + "total_tenants": "Tổng số người thuê nhà", + "active_tenants": "Người thuê đang hoạt động", + "search": "Tìm kiếm người thuê nhà...", + "create_tenant": "Tạo người thuê", + "detail": "Chi tiết người thuê nhà", + "contact": "Contact", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "max": "max", + "info": "Tenant Info", + "status": "Status" + }, + "registrations": { + "title": "Device Registrations", + "subtitle": "Manage registration requests from devices discovered via LAN", + "search_placeholder": "Tìm kiếm theo ID thiết bị, tên máy chủ hoặc IP...", + "no_registrations": "No registration requests", + "col_device_id": "ID thiết bị", + "col_hostname": "Hostname", + "col_platform": "Platform", + "col_ip": "IP Address", + "col_version": "Version", + "col_status": "Status", + "col_requested": "Requested", + "col_actions": "Actions", + "status_pending": "Pending", + "status_approved": "Approved", + "status_rejected": "Rejected", + "approve_btn": "Approve", + "approve_confirm": "Bạn có chắc chắn muốn phê duyệt thiết bị này không? Nó sẽ nhận được thông tin xác thực của máy chủ và có thể kết nối tự động.", + "approved_success": "Đăng ký thiết bị đã được phê duyệt thành công", + "reject_btn": "Reject", + "reject_title": "Từ chối đăng ký", + "reject_confirm": "Bạn có chắc chắn muốn từ chối yêu cầu đăng ký này không?", + "reject_reason": "Lý do (tùy chọn)", + "reject_reason_placeholder": "Nhập lý do từ chối...", + "rejected_success": "Đăng ký thiết bị bị từ chối", + "delete_confirm": "Bạn có chắc chắn muốn xóa hồ sơ đăng ký này?", + "deleted_success": "Hồ sơ đăng ký đã bị xóa", + "enrollment_title": "Đăng ký thiết bị", + "enrollment_subtitle": "Yêu cầu đăng ký đang chờ xử lý từ máy khách để bàn BetterDesk", + "enrollment_empty": "Không có yêu cầu đăng ký đang chờ xử lý", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "Tên hiển thị", + "enrollment_display_name_placeholder": "Nhập tên cho thiết bị này...", + "enrollment_sync_mode": "Chế độ đồng bộ", + "enrollment_sync_silent": "Silent — minimal telemetry", + "enrollment_sync_standard": "Standard — balanced sync", + "enrollment_sync_turbo": "Turbo — aggressive sync", + "enrollment_approved_success": "Đã phê duyệt đăng ký thiết bị", + "enrollment_rejected_success": "Đăng ký thiết bị bị từ chối", + "approve_title": "Phê duyệt thiết bị", + "field_name": "Tên thiết bị", + "field_name_placeholder": "Nhập tên cho thiết bị này...", + "field_sync_mode": "Chế độ đồng bộ", + "sync_standard": "Tiêu chuẩn — đồng bộ cân bằng", + "sync_silent": "Im lặng — telemetry tối thiểu", + "sync_turbo": "Turbo — đồng bộ tích cực", + "field_tags": "Thẻ", + "field_tags_placeholder": "Thẻ phân cách bằng dấu phẩy (vd: văn phòng, laptop)...", + "field_tags_existing": "Thẻ hiện có", + "field_tag_add_placeholder": "Thêm thẻ mới...", + "field_tag_add_btn": "Thêm", + "field_groups": "Nhóm thiết bị", + "field_folder": "Thư mục", + "field_folder_none": "Không có thư mục", + "reject_ban_option": "Cấm thiết bị này", + "reject_ban_hint": "Thiết bị sẽ bị chặn và không thể gửi yêu cầu đăng ký mới.", + "banner_open_mode": "Đăng ký đang mở — các RustDesk client mới đăng ký mà không cần phê duyệt của người vận hành. Đặt chế độ Managed trong Cài đặt để dùng hàng chờ này.", + "banner_locked_mode": "Đăng ký bị khóa — chỉ thiết bị liên kết token mới có thể đăng ký. Cần chế độ Managed để người vận hành phê duyệt client chưa biết.", + "enrollment_settings_link": "Cài đặt đăng ký" + }, + "backup": { + "title": "Backup", + "desc": "Tải xuống bản sao lưu đầy đủ cấu hình bảng điều khiển, người dùng, nhóm và cài đặt của bạn. Dữ liệu ngang hàng Go server được bao gồm khi chương trình phụ trợ BetterDesk hoạt động.", + "restore_title": "Restore", + "restore_desc": "Tải lên tệp sao lưu đã tải xuống trước đó để khôi phục cấu hình bảng điều khiển. Chọn phần cần khôi phục bên dưới.", + "stat_users": "Users", + "stat_settings": "Cài đặt", + "stat_folders": "Folders", + "stat_groups": "Nhóm", + "stat_strategies": "Strategies", + "stat_backend": "Backend", + "download": "Tải xuống bản sao lưu", + "creating": "Đang tạo bản sao lưu...", + "download_success": "Đã tải xuống bản sao lưu thành công", + "upload": "Tải lên bản sao lưu", + "restore_confirm": "Bạn có chắc chắn muốn khôi phục từ bản sao lưu này không? Các phần được chọn sẽ bị ghi đè.", + "restore_success": "Sao lưu được khôi phục thành công. Một số thay đổi có thể yêu cầu tải lại trang.", + "restored": "Restored", + "skipped": "Skipped", + "backup_date": "Backup date", + "opt_settings": "Cài đặt bảng điều khiển", + "opt_branding": "Xây dựng thương hiệu/Chủ đề", + "opt_folders": "Thư mục thiết bị", + "opt_groups": "Nhóm người dùng và thiết bị", + "opt_addressbooks": "Sổ địa chỉ", + "opt_users": "Tài khoản người dùng", + "opt_users_warning": "Phá hủy: thay thế TẤT CẢ tài khoản người dùng bằng dữ liệu sao lưu. Bạn có thể đã đăng xuất.", + "no_file": "Không có tập tin sao lưu nào được chọn", + "invalid_json": "Tệp sao lưu không hợp lệ: JSON không hợp lệ", + "invalid_format": "Tệp sao lưu không hợp lệ: không phải là bản sao lưu BetterDesk", + "stat_database": "Engine cơ sở dữ liệu", + "stat_keys": "Đã bao gồm server keys", + "stat_env": "Tệp environment", + "stat_uploads": "Tệp branding", + "restart_required": "Một số thành phần được khôi phục (keys / .env / Go database) cần khởi động lại dịch vụ để có hiệu lực.", + "security_warning": "Bản sao lưu này chứa thông tin bí mật (server keys, environment file, password hashes và 2FA secrets). Lưu trữ an toàn và không chia sẻ.", + "restore_warning": "Khôi phục secrets, environment file hoặc Go server database sẽ ghi đè server identity và cần khởi động lại dịch vụ sau đó.", + "opt_database": "Cơ sở dữ liệu (tất cả bảng)", + "opt_database_hint": "Nhập lại tất cả dữ liệu console. Áp dụng trực tiếp, không cần khởi động lại.", + "opt_uploads": "Tệp branding", + "opt_uploads_hint": "Logo và ảnh đã tải lên.", + "opt_secrets": "Khóa & bí mật máy chủ", + "opt_secrets_warning": "Ghi đè Ed25519 server identity, API key và session secret. Cần khởi động lại dịch vụ.", + "opt_env": "Tệp môi trường (.env)", + "opt_env_warning": "Ghi đè SESSION_SECRET, API key, database DSN, ports và TLS settings. Cần khởi động lại dịch vụ.", + "opt_godb": "Cơ sở dữ liệu máy chủ Go", + "opt_godb_warning": "Ghi đè Go server SQLite database (chỉ SQLite backend). Cần khởi động lại dịch vụ." + }, + "cdap": { + "device_detail": "Thiết bị CDAP", + "loading": "Đang tải...", + "loading_widgets": "Đang tải tiện ích thiết bị...", + "load_error": "Không tải được dữ liệu thiết bị", + "connected": "Connected", + "disconnected": "Disconnected", + "device_offline_msg": "Thiết bị hiện đang ngoại tuyến. Giá trị widget có thể cũ.", + "no_widgets": "Không có tiện ích nào", + "no_widgets_desc": "Thiết bị này chưa đăng ký bảng kê khai CDAP với các định nghĩa tiện ích.", + "command_log": "Command Log", + "clear_log": "Clear log", + "confirm_command": "Xác nhận lệnh", + "select_option": "chọn", + "cdap_status": "CDAP Status", + "cdap_enabled": "CDAP Enabled", + "cdap_disabled": "CDAP Disabled", + "cdap_devices": "CDAP Devices", + "cdap_connections": "Active Connections", + "send_command": "Gửi lệnh", + "command_sent": "Lệnh đã được gửi thành công", + "command_failed": "Không gửi được lệnh", + "devices_title": "Thiết bị CDAP", + "devices_subtitle": "Các thiết bị được kết nối thông qua Giao thức ứng dụng thiết bị tùy chỉnh", + "stat_connected": "Connected", + "stat_port": "Port", + "search_devices": "Tìm kiếm thiết bị...", + "no_devices": "Không có thiết bị nào được kết nối", + "no_devices_desc": "Hiện không có thiết bị CDAP nào được kết nối. Các thiết bị sẽ xuất hiện ở đây sau khi chúng kết nối với cổng.", + "gateway_disabled": "Cổng CDAP bị vô hiệu hóa", + "gateway_disabled_desc": "Kích hoạt cổng CDAP bằng cách đặt CDAP_ENABLED=true trong cấu hình máy chủ.", + "gateway_active": "Active", + "toggle_enable": "Enable CDAP", + "toggle_disable": "Vô hiệu hóa CDAP", + "enabled_restart": "Đã bật CDAP. Cần phải khởi động lại máy chủ để áp dụng các thay đổi.", + "disabled_restart": "CDAP bị vô hiệu hóa. Cần phải khởi động lại máy chủ để áp dụng các thay đổi.", + "widgets": "vật dụng", + "type_all": "All", + "type_iot": "IoT", + "type_scada": "SCADA", + "type_os_agent": "OS Agent", + "type_network": "Network", + "type_camera": "Camera", + "type_custom": "Custom", + "active_alerts": "Cảnh báo hoạt động", + "alert_fired": "Alert fired", + "alert_cleared": "Đã xóa thông báo", + "no_alerts": "Không có cảnh báo hoạt động", + "connect_terminal": "Kết nối thiết bị đầu cuối", + "table_search": "Tìm kiếm...", + "just_now": "Just now", + "terminal_connecting": "Đang kết nối với thiết bị...", + "terminal_disconnected": "Disconnected", + "terminal_error": "Kết nối thiết bị đầu cuối không thành công", + "linked_devices": "Thiết bị được liên kết", + "link_device": "Liên kết thiết bị", + "unlink_device": "Unlink", + "no_linked_devices": "Không có thiết bị được liên kết", + "unlink_confirm": "Bạn có chắc chắn muốn hủy liên kết thiết bị này không?", + "link_prompt": "Nhập ID ngang hàng để liên kết với thiết bị này:", + "connect_desktop": "Kết nối máy tính để bàn", + "connect_video": "Kết nối luồng", + "connect_files": "Duyệt tập tin", + "connect_audio": "Kết nối âm thanh", + "upload_file": "Upload", + "desktop_connecting": "Đang kết nối...", + "video_connecting": "Đang kết nối...", + "files_connecting": "Đang kết nối...", + "audio_connecting": "Đang kết nối...", + "audio_streaming": "Streaming", + "clipboard_in": "Đã nhận được bảng nhớ tạm", + "clipboard_out": "Đã gửi bảng nhớ tạm", + "monitor_select": "Chọn màn hình", + "keyframe_request": "Yêu cầu khung hình chính", + "quality_auto": "Chất lượng ô tô" + }, + "desktop": { + "switch_mode": "Chế độ máy tính để bàn", + "console_mode": "Chế độ bảng điều khiển", + "loading": "Đang tải...", + "minimize": "Minimize", + "maximize": "Maximize", + "restore": "Restore", + "close": "Đóng", + "widgets_mode": "Widget", + "windows_mode": "Windows", + "wallpaper": "Wallpaper", + "add_widget": "Thêm tiện ích", + "remove_widget": "Xóa tiện ích", + "pop_out_widget": "Pop Out", + "pop_in_widget": "Pop In", + "configure": "Cấu hình", + "search_widgets": "Tìm kiếm các tiện ích...", + "cat_monitoring": "Monitoring", + "cat_devices": "Thiết bị", + "cat_tools": "Tools", + "cat_general": "General", + "notes_placeholder": "Viết ghi chú ở đây...", + "search_placeholder": "Tìm kiếm thi��t bị, trang, cài đặt...", + "search_pages": "Pages", + "search_devices": "Thiết bị", + "search_no_results": "No results", + "exit_desktop": "Thoát khỏi chế độ máy tính để bàn", + "refresh": "Refresh", + "widget_clock": "Clock", + "widget_device_status": "Trạng thái thiết bị", + "widget_server_health": "Thông tin máy chủ", + "widget_system_stats": "Đồng hồ đo thiết bị", + "widget_device_list": "Danh sách thiết bị", + "widget_quick_actions": "Thao tác nhanh", + "widget_recent_activity": "Hoạt động gần đây", + "widget_notes": "Notes", + "widget_network_monitor": "Giám sát mạng", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "Thiết bị CDAP", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "Lưới thiết bị", + "widget_multi_gauge": "Đồng hồ đo máy chủ", + "widget_weekly_chart": "Hoạt động hàng tuần", + "widget_quick_controls": "Điều khiển nhanh", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "Thống kê kết nối", + "widget_weather": "Weather", + "widget_world_clock": "World Clock", + "widget_bookmarks": "Bookmarks", + "widget_user_sessions": "Phiên người dùng", + "widget_alert_feed": "Alert Feed", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "Uptime", + "label_no_devices": "Không có thiết bị", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "Unavailable", + "label_open": "Mở", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "Đặt URL trong cấu hình", + "label_server_uptime": "Thời gian hoạt động của máy chủ", + "label_merged_info": "Đã hợp nhất vào tiện ích Thông tin máy chủ", + "label_with_notes": "Có ghi chú", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "Tổng số thiết bị", + "label_throughput": "Throughput", + "label_active_relays": "Rơle hoạt động", + "label_total_relayed": "Tổng chuyển tiếp", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "Thiết bị lọc...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "Không có thiết bị CDAP", + "action_add_widget": "Thêm tiện ích", + "label_merged_server_info": "Đã hợp nhất vào tiện ích Thông tin máy chủ", + "wp_images": "Images", + "wp_colors": "Màu sắc đồng nhất", + "wp_custom_color": "Màu tùy chỉnh", + "wp_fit_style": "Style", + "wp_fill": "Fill", + "wp_fit": "Fit", + "wp_stretch": "Stretch", + "wp_center": "Center", + "wp_unavailable": "Hình nền không được cài đặt trên máy chủ này.", + "wp_download_hint": "Đặt hình ảnh PNG vào thư mục public/wallpapers/ để cho phép chọn hình nền.", + "widget_calendar": "Calendar", + "widget_process_monitor": "Giám sát quá trình", + "widget_disk_usage": "Disk Usage", + "widget_log_viewer": "Log Viewer", + "widget_speed_test": "Speed Test", + "widget_database_stats": "Thống kê cơ sở dữ liệu", + "widget_docker_containers": "Thùng chứa Docker", + "widget_shell_command": "Lệnh Shell", + "widget_device_map": "Bản đồ thiết bị", + "widget_remote_connect": "Kết nối từ xa", + "label_no_online": "Không có thiết bị trực tuyến", + "label_no_events": "Không có sự kiện nào hôm nay", + "label_event_title": "Tiêu đề sự kiện:", + "label_no_data": "Không có sẵn dữ liệu", + "label_download_speed": "Tốc độ tải xuống", + "label_latency": "Latency", + "label_server": "Máy chủ", + "label_run_test": "Run Test", + "label_testing": "Đang thử nghiệm...", + "label_table": "Table", + "label_rows": "Rows", + "label_last_backup": "Last Backup", + "label_no_containers": "Không có thùng chứa", + "label_docker_unavailable": "Docker không có sẵn", + "label_no_command": "Không có lệnh nào được cấu hình", + "label_no_output": "Chưa có đầu ra", + "label_run": "Run", + "label_presets": "Presets", + "label_save_preset": "Lưu cài đặt trước", + "label_load_preset": "Load Preset", + "label_preset_name": "Tên đặt trước:", + "label_preset_monitoring": "Monitoring", + "label_preset_helpdesk": "Helpdesk", + "label_preset_minimal": "Minimal", + "label_preset_developer": "Developer", + "label_snap_layout": "Snap Layout", + "label_auto_arrange": "Tự động sắp xếp", + "label_zone_layout": "Zone Layout", + "label_2col_equal": "2 Cột (Bằng)", + "label_2col_wide": "2 Cột (60/40)", + "label_3col": "3 Columns", + "label_2x2_grid": "2Ă—2 Grid", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "Nhóm tiện ích", + "ungroup_widgets": "Tách nhóm các widget", + "group_widgets": "Nhóm các Widget đã chọn", + "snap_layouts": "Bố cục chụp nhanh", + "snap_left": "Snap Left", + "snap_right": "Snap Right", + "snap_top_left": "Chụp trên cùng bên trái", + "snap_top_right": "Chụp trên cùng bên phải", + "snap_bottom_left": "Chụp dưới cùng bên trái", + "snap_bottom_right": "Chụp dưới cùng bên phải", + "aero_shake": "Lắc để giảm thiểu người khác", + "zone_resize": "Kéo đường viền để thay đổi kích thước vùng", + "zone_borders": "Đường viền vùng có thể kéo được", + "app_drawer": "Applications", + "search_apps": "Tìm kiếm ứng dụng...", + "edit_shortcuts": "Chỉnh sửa phím tắt", + "widgets": "Widget", + "theme": "Theme", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "Nhấp vào bất kỳ đâu hoặc nhấn một phím để đăng nhập", + "username_placeholder": "Tên người dùng", + "password_placeholder": "Mật khẩu", + "sign_in": "Sign in", + "verify": "Verify", + "totp_title": "Xác thực hai yếu tố", + "totp_subtitle": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", + "back_to_login": "Quay lại để đăng nhập", + "fill_all_fields": "Vui lòng điền vào tất cả các trường", + "invalid_credentials": "Tên người dùng hoặc mật khẩu không hợp lệ", + "invalid_code": "Mã xác minh không h��p lệ", + "enter_6_digits": "Nhập đầy đủ 6 chữ số", + "network_error": "Network error — check your connection", + "session_expired": "Phiên đã hết hạn. Vui lòng đăng nhập lại." + }, + "tokens": { + "title": "Mã thông báo thiết bị", + "subtitle": "Quản lý mã thông báo đăng ký để cung cấp thiết bị tự động", + "enrollment_mode": "Chế độ đăng ký", + "mode_open": "Mở", + "mode_open_desc": "Bất kỳ thiết bị nào cũng có thể đăng ký mà không cần mã thông báo", + "mode_managed": "Managed", + "mode_managed_desc": "Devices need a valid token to register", + "mode_locked": "Locked", + "mode_locked_desc": "No new device registrations allowed", + "total": "Tổng số token", + "active": "Active", + "used": "Used", + "revoked": "Revoked", + "search_placeholder": "Tìm kiếm mã thông báo...", + "status_pending": "Pending", + "status_active": "Active", + "status_used": "Used", + "status_revoked": "Revoked", + "status_expired": "Expired", + "bulk_generate": "Tạo hàng loạt", + "create": "Tạo mã thông báo", + "edit": "Chỉnh sửa mã thông báo", + "token": "Token", + "name": "Name", + "status": "Status", + "uses": "Uses", + "bound_peer": "Bound Peer", + "expires": "Expires", + "created": "Đã tạo", + "actions": "Actions", + "name_placeholder": "ví dụ: Lô PC văn phòng", + "max_uses": "Max Uses", + "max_uses_hint": "0 = không giới hạn", + "expires_in": "Expires In", + "no_expiration": "Không hết hạn", + "expires_1h": "1 hour", + "expires_24h": "24 hours", + "expires_7d": "7 days", + "expires_30d": "30 days", + "note": "Note", + "note_placeholder": "Ghi chú tùy chọn về mã thông báo này...", + "count": "Count", + "count_range": "Số lượng mã thông báo cần tạo (1-100)", + "name_prefix": "Name Prefix", + "generate": "Generate", + "token_created": "Đã tạo mã thông báo", + "tokens_generated": "Mã thông báo được tạo", + "copy_warning": "Sao chép mã thông báo ngay bây giờ. Nó sẽ không được hiển thị lại.", + "copy_token": "Copy Token", + "copied": "Copied!", + "revoke": "Revoke", + "revoke_confirm": "Bạn có chắc chắn muốn thu hồi mã thông báo này không? Các thiết bị đã đăng ký với nó sẽ không bị ảnh hưởng.", + "revoked_success": "Đã thu hồi mã thông báo thành công", + "no_tokens": "Không tìm thấy mã thông báo nào", + "expired": "Expired", + "never": "Never", + "save": "Lưu", + "cancel": "Hủy bỏ", + "unlimited": "Unlimited" + }, + "tutorial": { + "next": "Tiếp theo", + "prev": "Previous", + "skip": "Skip", + "finish": "Kết thúc", + "close": "Đóng", + "step_of": "{current} của {total}", + "console_sidebar_title": "Thanh bên điều hướng", + "console_sidebar_text": "Truy cập tất cả các mô-đun từ đây. Nhấp vào bất kỳ biểu tượng nào để điều hướng đến phần đó. Thanh bên thích ứng với kích thước màn hình của bạn.", + "console_expand_title": "Mở rộng thanh bên", + "console_expand_text": "Nhấp vào đây để mở rộng thanh bên và xem nhãn đầy đủ cho tất cả các mục điều hướng. Nhấn lần nữa để thu gọn.", + "console_search_title": "Tìm kiếm nhanh", + "console_search_text": "Tìm kiếm thiết bị, cài đặt hoặc hành động một cách nhanh chóng. Nhấn Ctrl+K để làm phím tắt.", + "console_dashboard_title": "Trang tổng quan", + "console_dashboard_text": "Trung tâm trung tâm của bạn hiển thị trạng thái máy chủ, thiết bị trực tuyến và hành động nhanh. Theo dõi nhanh các số liệu quan trọng.", + "console_devices_title": "Quản lý thiết bị", + "console_devices_text": "Xem, tìm kiếm và quản lý tất cả các thiết bị được kết nối. Lọc theo trạng thái, gán thẻ và định cấu hình cài đặt thiết bị riêng lẻ.", + "console_settings_title": "Cài đặt", + "console_settings_text": "Định cấu hình hành vi của máy chủ, tùy chọn bảo mật, nhãn hiệu và quản lý người dùng. Tùy chỉnh BetterDesk để phù hợp với nhu cầu của bạn.", + "console_desktop_title": "Chế độ máy tính để bàn", + "console_desktop_text": "Chuyển sang chế độ máy tính để bàn để có không gian làm việc có cửa sổ với các tiện ích. Hoàn hảo cho bảng điều khiển đa tác vụ và giám sát.", + "console_complete_title": "Bạn đã sẵn sàng!", + "console_complete_text": "Khám phá các danh mục thanh bên để khám phá tất cả các tính năng. Nhấp vào biểu tượng Trợ giúp bất cứ lúc nào để khởi động lại hướng dẫn này.", + "desktop_topbar_title": "Top Bar", + "desktop_topbar_text": "Thanh trên cùng hiển thị đồng hồ, điều khiển nhanh và quyền truy cập vào ngăn kéo ứng dụng. Nhấp vào biểu tượng lưới để duyệt tất cả các ứng dụng.", + "desktop_drawer_title": "App Drawer", + "desktop_drawer_text": "Mở ngăn kéo ứng dụng để tìm kiếm và khởi chạy bất kỳ chức năng nào của bảng điều khiển dưới dạng cửa sổ nổi. Ứng dụng được sắp xếp theo danh mục.", + "desktop_widgets_title": "Trang tổng quan tiện ích", + "desktop_widgets_text": "Không gian làm việc có thể tùy chỉnh của bạn. Các widget hiển thị thông tin trực tiếp và cung cấp khả năng truy cập nhanh vào các tính năng. Kéo để sắp xếp lại.", + "desktop_add_widget_title": "Thêm tiện ích", + "desktop_add_widget_text": "Bấm vào đây để duyệt các vật dụng có sẵn. Chọn từ màn hình giám sát, danh sách thiết bị, ghi chú, v.v.", + "desktop_taskbar_title": "Taskbar", + "desktop_taskbar_text": "Các ứng dụng đang mở sẽ xuất hiện ở đây. Bấm để tập trung hoặc thu nhỏ cửa sổ. Di chuột vào biểu tượng để xem nhãn ứng dụng.", + "desktop_snap_title": "Bố cục chụp nhanh", + "desktop_snap_text": "Kéo các cửa sổ đến các cạnh của màn hình để đưa chúng vào vị trí hoặc di chuột vào nút phóng to để đặt trước bố cục. Hãy thử Aero Shake!", + "desktop_windows_title": "App Windows", + "desktop_windows_text": "Ứng dụng mở trong cửa sổ có thể kéo và thay đổi kích thước. Thu nhỏ, phóng to hoặc đóng từ thanh tiêu đề. Lớp Windows bên trên các vật dụng.", + "desktop_search_title": "Tìm kiếm nhanh", + "desktop_search_text": "Tìm kiếm trên các thiết bị, trang và cài đặt. Nhấn Ctrl+K ở bất cứ đâu để mở tìm kiếm ngay lập tức.", + "desktop_complete_title": "Chế độ máy tính để bàn đã sẵn sàng!", + "desktop_complete_text": "Hãy thử mở các ứng dụng từ ngăn kéo và sắp xếp các cửa sổ cạnh nhau. Sử dụng các cài đặt trước của tiện ích để bố trí bảng điều khiển nhanh chóng.", + "devices_folders_title": "Thư mục thiết bị", + "devices_folders_text": "Sắp xếp các thiết bị vào các thư mục. Bấm vào một thư mục để lọc danh sách. Nhấp chuột phải để đổi tên hoặc xóa.", + "devices_search_title": "Tìm kiếm & Lọc", + "devices_search_text": "Tìm kiếm theo ID, tên máy chủ hoặc nền tảng. Sử dụng các thanh trạng thái để chỉ hiển thị trực tuyến, ngoại tuyến hoặc tất cả các thiết bị.", + "devices_table_title": "Danh sách thiết bị", + "devices_table_text": "Nhấp vào bất kỳ hàng thiết bị nào để biết chi tiết. Sử dụng menu kebab ở bên phải để thực hiện các thao tác nhanh như kết nối, chỉnh sửa thẻ hoặc xóa.", + "devices_complete_title": "Quản lý thiết bị đã sẵn sàng!", + "devices_complete_text": "Kéo thiết bị giữa các thư mục để sắp xếp chúng. Bấm đúp vào một thiết bị để mở bảng chi tiết của nó.", + "settings_tabs_title": "Danh mục cài đặt", + "settings_tabs_text": "Điều hướng giữa các phần Chung, Bảo mật, Giao diện và các phần cấu hình khác.", + "settings_content_title": "Cấu hình", + "settings_content_text": "Mỗi phần chứa các cài đặt máy chủ và bảng điều khiển cụ thể. Những thay đổi được lưu khi bạn nhấp vào Lưu.", + "settings_complete_title": "Tổng quan về cài đặt", + "settings_complete_text": "Kiểm tra cài đặt Bảo mật cho khóa 2FA, API và quản lý người dùng. Truy cập Giao diện để tùy chỉnh giao diện bảng điều khiển.", + "help": "Trợ giúp & Hướng dẫn", + "tour_console": "Tham quan bảng điều khiển", + "tour_desktop": "Tham quan chế độ máy tính để bàn", + "tour_devices": "Tham quan thiết bị", + "tour_settings": "Tham quan cài đặt", + "reset_all": "Đặt lại tất cả hướng dẫn", + "tour_remote": "Tham quan phiên từ xa", + "tour_organization": "Thiết lập tổ chức", + "tour_cdap": "Tổng quan về CDAP", + "tour_chat": "Thông tin cơ bản về trò chuyện", + "remote_toolbar_title": "Thanh công cụ từ xa", + "remote_toolbar_text": "Truy cập các điều khiển hiển thị, đồng bộ hóa clipboard, các phím đặc biệt và cài đặt chất lượng từ thanh công cụ. Chuyển đổi toàn màn hình bằng F11.", + "remote_canvas_title": "Hiển thị từ xa", + "remote_canvas_text": "Đây là màn hình từ xa. Nhấp vào bên trong để bắt đầu điều khiển thiết bị từ xa. Đầu vào chuột và bàn phím được chuyển tiếp tự động.", + "remote_clipboard_title": "Đồng bộ hóa bảng nhớ tạm", + "remote_clipboard_text": "Sao chép và dán văn bản giữa máy tính của bạn và thiết bị từ xa. Sử dụng Ctrl+C / Ctrl+V như bình thường khi lấy nét trên màn hình từ xa.", + "remote_complete_title": "Phiên từ xa đã sẵn sàng!", + "remote_complete_text": "Sử dụng các nút trên thanh công cụ cho các phím đặc biệt (Ctrl+Alt+Del, PrintScreen) và chuyển đổi màn hình. Nhấn Escape hoặc nhấp vào Ngắt kết nối để kết thúc phiên.", + "org_overview_title": "Tổ chức", + "org_overview_text": "Các tổ chức cho phép bạn nhóm người dùng, thiết bị và chính sách. Mỗi tổ chức có quản trị viên, người điều hành và cài đặt riêng.", + "org_create_title": "Tạo tổ chức", + "org_create_text": "Nhấn vào đây để tạo một tổ chức mới. Cung cấp tên, sên và mô tả tùy chọn. Bạn sẽ là chủ sở hữu của tổ chức mới.", + "org_members_title": "Quản lý thành viên", + "org_members_text": "Mời người dùng qua email, chỉ định vai trò (quản trị viên, nhà điều hành, người dùng) và quản lý quyền truy cập. Thành viên có thể thấy các thiết bị được chỉ định cho tổ chức của họ.", + "org_devices_title": "Chỉ định thiết bị", + "org_devices_text": "Thêm thiết bị vào tổ chức. Các thiết bị được chỉ định ở đây sẽ kế thừa các chính sách của tổ chức và hiển thị với các thành viên của tổ chức.", + "org_policies_title": "Chính sách tổ chức", + "org_policies_text": "Đặt các chính sách bảo mật như yêu cầu mật khẩu, thời gian chờ phiên, thực thi 2FA và quy tắc đăng ký thiết bị cho tổ chức.", + "org_complete_title": "Thiết lập tổ chức đã hoàn tất!", + "org_complete_text": "Mời nhóm của bạn và chỉ định thiết bị để bắt đầu sử dụng tính năng quản lý ở phạm vi tổ chức. Chính sách được áp dụng tự động cho tất cả thành viên.", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "Danh bạ & Nhóm", + "chat_contacts_text": "Xem danh bạ và nhóm trò chuyện của bạn. Nhấp vào bất kỳ liên hệ nào để mở cuộc trò chuyện. Các chấm màu xanh biểu thị người dùng trực tuyến.", + "chat_send_title": "Gửi tin nhắn", + "chat_send_text": "Nhập tin nhắn của bạn và nhấn Enter để gửi. Tin nhắn được mã hóa nối đầu khi cả hai bên đều hỗ trợ E2E.", + "chat_file_title": "Chia sẻ tập tin", + "chat_file_text": "Bấm vào biểu tượng đính kèm để chia sẻ tập tin. Các tập tin được mã hóa và có thể lên tới 50 MB.", + "chat_complete_title": "Trò chuyện đã sẵn sàng!", + "chat_complete_text": "Trò chuyện với các nhà khai thác và người dùng cuối trong thời gian thực. Tạo nhóm để liên lạc nhóm. Tất cả các tin nhắn đều hỗ trợ biên nhận đã đọc.", + "disable_tutorials": "Tắt hướng dẫn", + "enable_tutorials": "Bật hướng dẫn" + }, + "help_request": { + "title": "Yêu cầu trợ giúp", + "subtitle": "Quản lý các yêu cầu trợ giúp đến từ máy khách để bàn", + "new_request": "Yêu cầu trợ giúp mới", + "device": "Thiết bị", + "hostname": "Hostname", + "message": "Message", + "status": "Status", + "pending": "Pending", + "accepted": "Accepted", + "resolved": "Resolved", + "accept": "Accept", + "resolve": "Resolve", + "no_requests": "Không có yêu cầu trợ giúp", + "notification": "Đã nhận được yêu cầu trợ giúp từ", + "stats_total": "Total", + "filter_all": "All" + }, + "organizations": { + "title": "Tổ chức", + "create": "Tạo tổ chức", + "edit": "Chỉnh sửa tổ chức", + "detail": "Chi tiết tổ chức", + "name": "Name", + "slug": "Sên (URL-an toàn)", + "logo_url": "Logo URL", + "users": "Users", + "devices": "Thiết bị", + "invitations": "Invitations", + "settings": "Cài đặt", + "add_user": "Add User", + "assign_device": "Chỉ định thiết bị", + "create_invitation": "Tạo lời mời", + "delete_confirm": "Xóa tổ chức này? Thao tác này sẽ xóa tất cả người dùng, thiết bị và cài đặt được liên kết.", + "no_orgs": "Chưa có tổ chức nào", + "no_orgs_hint": "Tạo tổ chức đầu tiên của bạn để bắt đầu quản lý thiết bị và người dùng.", + "connection_policy": "Chính sách kết nối", + "allow_file_transfer": "Cho phép truyền tệp", + "allow_clipboard": "Cho phép bảng nhớ tạm", + "max_session_duration": "Thời lượng phiên tối đa (phút)", + "role_owner": "Owner", + "role_admin": "Quản trị viên", + "role_operator": "Operator", + "role_user": "Thành viên", + "username": "Tên người dùng", + "password": "Mật khẩu", + "display_name": "Tên hiển thị", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "ID thiết bị", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "Người dùng được chỉ định", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "Không có người dùng trong tổ chức này.", + "no_devices": "Không có thiết bị nào được chỉ định cho tổ chức này.", + "no_invitations": "Không có lời mời.", + "user_added": "User added", + "user_removed": "Người dùng đã bị xóa", + "user_updated": "Đã cập nhật vai trò của người dùng", + "device_assigned": "Thiết bị được chỉ định", + "device_unassigned": "Đã hủy cấp phát thiết bị", + "invitation_created": "Đã tạo lời mời", + "settings_saved": "Đã lưu cài đặt", + "org_deleted": "Đã xóa tổ chức", + "confirm_remove_user": "Xóa người dùng này khỏi tổ chức?", + "confirm_unassign_device": "Hủy cấp phát thiết bị này khỏi tổ chức?", + "confirm_delete_org": "Xóa tổ chức này và tất cả dữ liệu liên quan?", + "edit_role": "Chỉnh sửa vai trò", + "raw_settings": "Cài đặt thô", + "key": "Key", + "value": "Value", + "save": "Lưu cài đặt", + "policy_unattended": "Không cần giám sát (tức thì)", + "policy_attended": "Đ�� tham dự (có xác nhận)", + "policy_ask": "Always ask", + "expires_hours": "Hết hạn (giờ)", + "loading_failed": "Không tải được dữ liệu tổ chức", + "name_slug_required": "Tên và sên là bắt buộc", + "org_created": "Đã tạo tổ chức", + "org_updated": "Đã cập nhật tổ chức", + "create_new_user": "Tạo mới", + "add_existing_user": "Thêm hiện có", + "none_available": "none", + "select_user": "Chọn người dùng", + "org_role": "Vai trò của tổ chức", + "link_user_hint": "Người dùng được chọn sẽ được liên kết với tổ chức này bằng thông tin xác thực tài khoản máy chủ của họ.", + "no_available_users": "Tất cả người dùng máy chủ đã được liên kết với tổ chức này.", + "user_linked": "Người dùng được liên kết với tổ chức" + }, + "chat": { + "e2e_enabled": "Mã hóa đầu cuối", + "e2e_establishing": "Thiết lập kênh an toàn...", + "e2e_established": "Kênh an toàn được thiết lập", + "e2e_unsupported": "Mã hóa E2E không được hỗ trợ trong trình duyệt này", + "typing_indicator": "đang gõ...", + "read_receipt": "Read", + "delivered": "Delivered", + "file_share": "tập tin", + "file_too_large": "Tệp quá lớn (tối đa 50MB)", + "file_encrypted": "Truyền tập tin được mã hóa", + "presence_online": "Online", + "presence_away": "Away", + "presence_busy": "Busy", + "presence_offline": "Offline", + "key_rotation": "Đã xoay khóa bảo mật", + "new_message": "New message", + "title": "Chat", + "contacts": "Contacts", + "groups": "Nhóm", + "no_contacts": "Chưa có địa chỉ liên hệ nào", + "no_groups": "Chưa có nhóm nào", + "no_messages": "Chưa có tin nhắn nào", + "no_results": "Không tìm thấy kết quả nào", + "select_conversation": "Chọn một cuộc trò chuyện để bắt đầu trò chuyện", + "type_message": "Nhập tin nhắn...", + "send": "Gửi", + "attach_file": "Đính kèm tập tin", + "emoji": "Emoji", + "search_messages": "Tìm kiếm tin nhắn", + "create_group": "Tạo nhóm", + "group_name": "Tên nhóm", + "group_members": "Thành viên", + "cancel": "Hủy bỏ", + "create": "Tạo", + "members": "thành viên", + "today": "Today", + "yesterday": "Yesterday", + "react": "React", + "my_presence": "My status", + "search_placeholder": "Tìm kiếm danh bạ và tin nhắn", + "select_conversation_hint": "Chọn cuộc trò chuyện để xem tin nhắn", + "info": "Info", + "group_name_placeholder": "Nhập tên nhóm" + }, + "toast": { + "device_connected": "Đã kết nối thiết bị", + "device_disconnected": "Đã ngắt kết nối thiết bị", + "session_started": "Phiên từ xa đã bắt đầu", + "session_ended": "Phiên từ xa đã kết thúc", + "file_upload_complete": "Tải lên tệp hoàn tất", + "settings_saved": "Đã lưu cài đặt", + "error_generic": "Đã xảy ra lỗi", + "connection_lost": "Mất kết nối", + "reconnecting": "Đang kết nối lại..." + }, + "theme": { + "dark": "Dark", + "light": "Light", + "auto": "System", + "title": "Theme" + }, + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "toolkit": { + "title": "Toolkit", + "subtitle": "Tiện ích quản trị và công cụ chẩn đoán", + "cat_network": "Network", + "cat_crypto": "Crypto", + "cat_encoding": "Encoding", + "cat_system": "System", + "host": "Host", + "port": "Port", + "domain": "Domain", + "run": "Run", + "generate": "Generate", + "encode": "Encode", + "decode": "Decode", + "send": "Gửi", + "refresh": "Refresh", + "algorithm": "Algorithm", + "input_text": "Input Text", + "enter_text": "Nhập văn bản...", + "length": "Length", + "options": "Options", + "source": "Source", + "lines": "Lines", + "log_console": "Console", + "log_go": "Đi máy chủ", + "mac_address": "MAC Address", + "broadcast": "Broadcast", + "ping_title": "Ping", + "ping_desc": "Kiểm tra khả năng tiếp cận và độ trễ của máy chủ", + "tcp_title": "Kiểm tra cổng TCP", + "tcp_desc": "Kiểm tra kết nối cổng TCP", + "ssl_title": "Thanh tra SSL", + "ssl_desc": "Kiểm tra chi tiết chứng chỉ SSL/TLS", + "http_title": "HTTP Kiểm tra sức khỏe", + "http_desc": "Xác minh trạng thái điểm cuối HTTP", + "dns_title": "DNS Lookup", + "dns_desc": "Phân giải tên máy chủ thành địa chỉ IP", + "whois_title": "DNS Records", + "whois_desc": "Truy vấn bản ghi A, AAAA, MX, TXT, NS", + "speed_title": "Speed Test", + "speed_desc": "Đo băng thông tải xuống", + "run_speed_test": "Chạy kiểm tra tốc độ", + "wol_title": "Wake-on-LAN", + "wol_desc": "Gửi gói ma thuật để đánh thức thiết bị", + "wol_sent": "Gói ma thuật đã được gửi", + "hash_title": "Trình tạo hàm băm", + "hash_desc": "Tạo băm mật mã", + "password_title": "Trình tạo mật khẩu", + "password_desc": "Tạo mật khẩu ngẫu nhiên an toàn", + "jwt_title": "JWT Decoder", + "jwt_desc": "Giải mã và kiểm tra Mã thông báo web JSON", + "jwt_token": "JWT Token", + "base64_title": "Base64", + "base64_desc": "Mã hóa hoặc giải mã dữ liệu Base64", + "url_title": "URL Encoder", + "url_desc": "Mã hóa hoặc giải mã các thành phần URL", + "processes_title": "Danh sách quy trình", + "processes_desc": "Xem các tiến trình hệ thống đang chạy", + "disk_title": "Disk Usage", + "disk_desc": "Xem mức sử dụng phân vùng đĩa", + "db_title": "Thống kê cơ sở dữ liệu", + "db_desc": "Xem thống kê bảng cơ sở dữ liệu", + "docker_title": "Thùng chứa Docker", + "docker_desc": "Xem các container Docker đang chạy", + "logs_title": "Log Viewer", + "logs_desc": "Xem đầu ra nhật ký gần đây", + "ip_address": "IP", + "latency": "Latency", + "ttl": "TTL", + "status": "Status", + "resolved": "Resolved", + "subject": "Subject", + "issuer": "Issuer", + "valid_from": "Hợp lệ từ", + "valid_to": "Hợp lệ với", + "days_left": "Days Left", + "days": "days", + "protocol": "Protocol", + "cipher": "Cipher", + "alt_names": "SANs", + "chain": "Chain", + "record_type": "Type", + "record_value": "Value", + "hash_value": "Hash", + "entropy": "Entropy", + "very_strong": "Very Strong", + "strong": "Strong", + "weak": "Weak", + "expiry": "Expiry", + "expired": "Expired", + "valid": "Valid", + "process_name": "Name", + "db_type": "Type", + "db_size": "Size", + "table_name": "Table", + "row_count": "Rows", + "no_data": "Không có sẵn dữ liệu", + "no_docker": "Không tìm thấy vùng chứa Docker hoặc không có Docker", + "no_logs": "Không có dòng nhật ký nào" + }, + "policies": { + "title": "Chính sách tổ chức", + "subtitle": "Quản lý các chính sách bảo mật, kết nối và tính năng cho tổ chức của bạn", + "select_org": "Tổ chức", + "select_org_placeholder": "Chọn tổ chức...", + "select_org_first": "Chọn một tổ chức để xem nhật ký kiểm tra chính sách.", + "configured": "Configured", + "connection_title": "Chính sách kết nối", + "connection_desc": "Kiểm soát cách thiết lập phiên từ xa", + "connection_mode": "Chế độ kết nối", + "mode_attended": "Đã tham dự (yêu cầu sự chấp thuận của người dùng)", + "mode_unattended": "Không cần giám sát (luôn cho phép)", + "mode_ask": "Always Ask", + "max_session": "Thời lượng phiên tối đa (phút)", + "idle_lock": "Thời gian chờ khóa nhàn rỗi (phút)", + "wallpaper_policy": "Hình nền trong phiên", + "wallpaper_show": "Show", + "wallpaper_hide_session": "Ẩn trong phiên", + "wallpaper_hide_always": "Always hide", + "features_title": "Chính sách tính năng", + "features_desc": "Bật hoặc tắt các tính năng cụ thể cho thiết bị", + "allow_file_transfer": "Cho phép truyền tệp", + "allow_clipboard": "Cho phép đồng bộ hóa bảng nhớ tạm", + "allow_audio": "Cho phép truyền phát âm thanh", + "allow_recording": "Cho phép ghi phiên", + "security_title": "Chính sách bảo mật", + "security_desc": "Thực thi các yêu cầu bảo mật cho các thiết bị của tổ chức", + "require_2fa": "Yêu cầu 2FA cho quyền truy cập không giám sát", + "password_min_length": "Độ dài mật khẩu tối thiểu", + "password_require_special": "Yêu cầu ký tự đặc biệt", + "password_max_age": "Tuổi tối đa của mật khẩu (ngày, 0=không bao giờ)", + "allowed_operators": "Vai trò của người vận hành được phép (được phân tách bằng dấu phẩy)", + "network_title": "Chính sách mạng", + "network_desc": "Kiểm soát máy chủ chuyển tiếp và kết nối trực tiếp", + "block_direct_p2p": "Chặn P2P trực tiếp (rơle lực)", + "allowed_relays": "Máy chủ chuyển tiếp được phép (một trên mỗi dòng)", + "ip_allowlist": "Danh sách IP cho phép (CIDR, một danh sách trên mỗi dòng)", + "update_title": "Chính sách cập nhật", + "update_desc": "Kiểm soát cập nhật tự động và các kênh cập nhật", + "auto_update": "Bật tự động cập nhật", + "update_channel": "Cập nhật kênh", + "audit_title": "Thay đổi chính sách", + "audit_desc": "Lịch sử thay đổi chính sách gần đây", + "no_audit": "Không có thay đổi chính sách nào được ghi lại.", + "save_success": "Chính sách đã được lưu thành công", + "save_failed": "Không lưu được chính sách", + "load_failed": "Không tải được chính sách", + "block_direct_p2p_hint": "Áp dụng cho các thiết bị trong tổ chức này. Mặc định toàn cục nằm trong Cài đặt → Chiến lược kết nối." + }, + "attestation": { + "title": "Chứng thực thiết bị", + "subtitle": "Giám sát xác minh danh tính thiết bị và dấu vân tay phần cứng", + "verified": "Verified", + "pending": "Pending", + "failed": "thất bại", + "device_list": "Hồ sơ chứng thực thiết bị", + "device_list_desc": "Dấu vân tay phần cứng và trạng thái xác minh danh tính", + "col_device": "ID thiết bị", + "col_hostname": "Hostname", + "col_fingerprint": "Fingerprint", + "col_status": "Status", + "col_last_check": "Last Check", + "col_actions": "Actions", + "no_records": "Không tìm thấy hồ sơ chứng thực.", + "verify_success": "Thiết bị được đánh dấu là đã xác minh", + "verify_failed": "Không thể xác minh thiết bị", + "revoke_success": "Chứng thực thiết bị đã bị thu hồi", + "revoke_failed": "Không thể thu hồi chứng thực" + }, + "fleet": { + "title": "Quản lý đội tàu", + "tab_resources": "Resources", + "tab_tasks": "Tasks", + "tab_builder": "Trình tạo quy trình làm việc", + "tab_compliance": "Compliance", + "res_title": "Bản đồ tài nguyên", + "res_all_types": "All Types", + "res_type_printer": "Printer", + "res_type_network_drive": "Ổ đĩa mạng", + "res_type_dns": "Máy chủ DNS", + "res_type_proxy": "Proxy", + "res_type_vpn": "VPN", + "res_add": "Thêm tài nguyên", + "res_name": "Tên tài nguyên", + "res_type": "Type", + "res_address": "Địa chỉ/Đường dẫn", + "res_target": "Target", + "res_scope": "Scope", + "res_scope_org": "Tổ chức", + "res_scope_group": "Nhóm", + "res_scope_device": "Thiết bị", + "res_scope_value": "Scope Value", + "res_status": "Status", + "res_active": "Active", + "res_inactive": "Inactive", + "res_no_data": "Không tìm thấy tài nguyên nào. Nhấp vào 'Thêm tài nguyên' để tạo một tài nguyên.", + "res_confirm_delete": "Bạn có chắc chắn muốn xóa tài nguyên này?", + "task_title": "Lập lịch tác vụ", + "task_all_status": "All Status", + "task_status_pending": "Pending", + "task_status_running": "Running", + "task_status_success": "Success", + "task_status_failed": "thất bại", + "task_search": "Search tasks…", + "task_create": "Tạo nhiệm vụ", + "task_name": "Task Name", + "task_type": "Type", + "task_type_script": "Script", + "task_type_install": "Install", + "task_type_update": "cập nhật", + "task_type_restart": "Khởi động lại", + "task_type_deploy": "Deploy", + "task_type_scan": "Scan", + "task_targets": "Targets", + "task_targets_help": "ID thiết bị hoặc tên nhóm, được phân tách bằng dấu phẩy", + "task_schedule": "Schedule", + "task_schedule_once": "Once", + "task_schedule_cron": "Cron", + "task_schedule_interval": "Interval", + "task_schedule_value": "Giá trị lịch trình", + "task_script": "Tập lệnh/Lệnh", + "task_retries": "Retries", + "task_timeout": "Timeout (s)", + "task_last_run": "Last Run", + "task_no_data": "Không tìm thấy nhiệm vụ nào. Nhấp vào 'Tạo tác vụ' để bắt đầu.", + "task_confirm_delete": "Bạn có chắc chắn muốn xóa tác vụ này không?", + "task_output": "Task Output", + "task_retry": "Retry", + "builder_title": "Trình tạo quy trình làm việc trực quan", + "builder_select_workflow": "Select workflow…", + "builder_new": "New", + "builder_save": "Lưu", + "builder_export": "Export", + "builder_execute": "Execute", + "builder_dry_run": "Dry Run", + "builder_triggers": "Triggers", + "builder_conditions": "Conditions", + "builder_actions": "Actions", + "builder_results": "Results", + "builder_transforms": "Transforms", + "builder_properties": "Properties", + "builder_no_selection": "Chọn một nút để chỉnh sửa thuộc tính của nó.", + "builder_node_trigger_manual": "Kích hoạt thủ công", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "Trình kích hoạt sự kiện", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "Khởi động lại Svc", + "builder_node_action_file_deploy": "Triển khai tệp", + "builder_node_action_message": "Gửi tin nhắn", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "Gửi thông báo", + "builder_node_result_chain": "Quy trình làm việc của chuỗi", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "workflow_name": "Tên quy trình làm việc:", + "comp_title": "Tuân thủ phần mềm", + "comp_compliant": "Compliant", + "comp_warning": "Warning", + "comp_critical": "Critical", + "comp_score": "Avg. Score", + "comp_device": "Thiết bị", + "comp_hostname": "Hostname", + "comp_os": "OS", + "comp_score_col": "Score", + "comp_issues": "Issues", + "comp_last_scan": "Last Scan", + "comp_scan": "Scan", + "comp_scan_all": "Scan All", + "comp_remediate": "Remediate", + "comp_remediate_confirm": "Chạy tính năng tự động khắc phục trên thiết bị này?", + "comp_no_data": "Không có sẵn dữ liệu tuân thủ. Chạy quét để bắt đầu.", + "save": "Lưu", + "cancel": "Hủy bỏ", + "close": "Đóng", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "actions": "Actions", + "all_orgs": "Tất cả các tổ chức", + "select_org_placeholder": "Select organization�", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "Ổ đĩa mạng", + "type_dns": "Máy chủ DNS", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "Thêm tài nguyên", + "edit_resource": "Chỉnh sửa tài nguyên", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "Địa chỉ/Đường dẫn", + "scope_org": "Tổ chức", + "scope_group": "Nhóm", + "scope_device": "Thiết bị", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "Bạn có chắc chắn muốn xóa mục này?", + "all_statuses": "Tất cả trạng thái", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "thất bại", + "search_tasks": "Search tasks�", + "create_task": "Tạo nhiệm vụ", + "edit_task": "Chỉnh sửa tác vụ", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "Triển khai tệp", + "task_type_registry": "Registry", + "target_devices": "Thiết bị mục tiêu", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "Tập lệnh/Lệnh", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "Đang tải", + "no_output": "Không có đầu ra", + "error_loading": "Lỗi tải dữ liệu", + "select_workflow": "Select workflow�", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "Kích hoạt thủ công", + "node_schedule": "Schedule", + "node_event": "Trình kích hoạt sự kiện", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "Khởi động lại Svc", + "node_file_deploy": "Triển khai tệp", + "node_send_message": "Gửi tin nhắn", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "Gửi thông báo", + "node_chain": "Quy trình làm việc của chuỗi", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "Tất cả các tổ chức", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "Thiết bị", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "Chạy tính năng tự động khắc phục trên thiết bị này?" + }, + "scaling": { + "title": "Quản lý mở rộng quy mô và chuyển tiếp", + "tab_overview": "Tổng quan", + "tab_relays": "Relay Nodes", + "tab_rules": "Quy tắc bài tập", + "tab_capacity": "Lập kế hoạch năng lực", + "arch_title": "Kiến trúc mạng", + "arch_loading": "Đang tải sơ đồ kiến trúc...", + "stat_relay_nodes": "Relay Nodes", + "stat_total_devices": "Tổng số thiết bị", + "stat_active_sessions": "Phiên hoạt động", + "stat_bandwidth": "Tổng băng thông", + "relay_health": "Sức khỏe chuyển tiếp", + "no_relays": "Không có nút chuyển tiếp nào được cấu hình. Thêm nút chuyển tiếp đầu tiên của bạn để phân phối tải.", + "relay_search": "Rơle tìm kiếm...", + "relay_add": "Thêm nút chuyển tiếp", + "relay_edit": "Chỉnh sửa nút chuyển tiếp", + "col_name": "Name", + "col_address": "Address", + "col_location": "Location", + "col_devices": "Thiết bị", + "col_sessions": "Phiên", + "col_bandwidth": "Bandwidth", + "col_status": "Status", + "col_actions": "Actions", + "col_priority": "Priority", + "col_rule_name": "Rule Name", + "col_match": "Match", + "col_target_relay": "Rơle mục tiêu", + "col_fallback": "Fallback", + "status_online": "Online", + "status_degraded": "Degraded", + "status_offline": "Offline", + "status_enabled": "Đã bật", + "status_disabled": "Đã tắt", + "confirm_delete_relay": "Bạn có chắc chắn muốn xóa nút chuyển tiếp này không?", + "confirm_delete_rule": "Bạn có chắc chắn muốn xóa quy tắc chuyển nhượng này không?", + "rules_hint": "Quy tắc phân công xác định máy chủ chuyển tiếp nào xử lý các nhóm thiết bị cụ thể. Các quy tắc được đánh giá theo mức độ ưu tiên (thấp nhất trước).", + "rule_add": "Add Rule", + "rule_edit": "Chỉnh sửa quy tắc", + "rule_match_type": "Match Type", + "match_subnet": "Subnet", + "match_group": "Nhóm thiết bị", + "match_tag": "Thẻ thiết bị", + "match_location": "Location", + "rule_match_value": "Match Value", + "fallback_master": "Máy chủ chính", + "fallback_nearest": "Rơle gần nhất", + "relay_max_sessions": "Số phiên tối đa", + "relay_max_bandwidth": "Băng thông tối đa (Mbps)", + "cap_tiers": "Cấp công suất", + "cap_loading": "Đang tải dữ liệu dung lượng...", + "cap_recommendations": "Recommendations", + "cap_no_recs": "Không có khuyến nghị có sẵn.", + "cap_planning": "Quy hoạch cơ sở hạ tầng", + "cap_config": "Cấu hình", + "cap_max_devices": "Thiết bị tối đa", + "cap_max_sessions": "Số phiên tối đa", + "cap_current": "Current", + "cap_utilization": "Utilization", + "cap_tier_devices": "Dung lượng thiết bị", + "cap_tier_sessions": "Dung lượng phiên", + "cap_tier_bandwidth": "Dung lượng băng thông", + "cap_single_sqlite": "Máy chủ đơn (SQLite)", + "cap_single_pg": "Máy chủ đơn (PostgreSQL)", + "cap_master_3": "Thạc sĩ + 3 Rơle", + "cap_master_10": "Thạc sĩ + 10 Rơle", + "rec_no_relays": "Không có nút chuyển tiếp nào được cấu hình. Hãy cân nhắc việc thêm các nút chuyển tiếp để có hiệu suất và khả năng dự phòng tốt hơn.", + "rec_devices_high": "Mức độ sử dụng thiết bị cao. Xem xét thêm nhiều nút chuyển tiếp để phân phối tải.", + "rec_sessions_high": "Dung lượng phiên sắp đạt đến giới hạn. Xem xét nâng cấp cơ sở hạ tầng chuyển tiếp.", + "rec_cpu_high": "Một số nút chuyển tiếp báo cáo mức sử dụng CPU cao. Xem xét cân bằng tải hoặc nâng cấp công suất.", + "rec_all_good": "Tất cả các hệ thống hoạt động trong các thông số bình thường. Không cần hành động.", + "save": "Lưu", + "cancel": "Hủy bỏ", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "close": "Đóng", + "no_rules": "Không có quy tắc phân công.", + "relays_info_banner": "Danh sách này là thông tin. Các máy chủ chuyển tiếp thực sự được khách hàng sử dụng được định cấu hình thông qua biến môi trường RELAY_SERVERS trên máy chủ BetterDesk.", + "relay_name_address_required": "Tên và địa chỉ là bắt buộc.", + "relay_save_failed": "Không lưu được nút chuyển tiếp.", + "relay_delete_failed": "Không thể xóa nút chuyển tiếp.", + "relay_saved": "Đã lưu nút chuyển tiếp.", + "relay_deleted": "Nút chuyển tiếp đã bị xóa.", + "rule_name_value_required": "Tên quy tắc và giá trị khớp là bắt buộc.", + "rule_save_failed": "Không lưu được quy tắc.", + "rule_delete_failed": "Không xóa được quy tắc.", + "rule_saved": "Đã lưu quy tắc.", + "rule_deleted": "Đã xóa quy tắc." + }, + "cross_platform": { + "title": "Khả năng tương thích đa nền tảng", + "tab_matrix": "Ma trận tương thích", + "tab_distribution": "Distribution", + "tab_protocols": "Protocols", + "tab_limitations": "Limitations", + "matrix_hint": "Ma trận hỗ trợ tính năng trên tất cả các nền tảng được hỗ trợ. Xanh = hỗ trợ đầy đủ, vàng = một phần, xám = không có, xanh = đã lên kế hoạch.", + "col_feature": "Feature", + "legend_full": "Hỗ trợ đầy đủ", + "legend_partial": "Hỗ trợ một phần", + "legend_none": "Không có sẵn", + "legend_planned": "Planned", + "platform_breakdown": "Phân tích nền tảng", + "arch_breakdown": "Phân tích kiến trúc", + "version_breakdown": "Phân tích phiên bản", + "summary": "Summary", + "total_devices": "Tổng số thiết bị", + "unique_platforms": "Platforms", + "unique_archs": "Architectures", + "unique_versions": "Phiên bản máy khách", + "no_devices": "Chưa có thiết bị nào được đăng ký.", + "protocols_hint": "Đàm phán khả năng giao thức đảm bảo mỗi khách hàng chỉ nhận được các tính năng mà nó hỗ trợ. Máy chủ điều chỉnh hành vi dựa trên khả năng được báo cáo.", + "capability_negotiation": "Năng lực đàm phán", + "codec_support": "Hỗ trợ Codec (Thiết bị trực tuyến)", + "feature_support": "Hỗ trợ tính năng (Thiết bị trực tuyến)", + "no_codec_data": "Không có dữ liệu codec có sẵn từ các thiết bị trực tuyến.", + "no_feature_data": "Không có dữ liệu tính năng có sẵn từ các thiết bị trực tuyến.", + "protobuf_schema": "Lược đồ Protobuf của ClientCapabilities", + "diagram_client": "Client", + "diagram_server": "Máy chủ BetterDesk", + "diagram_peer": "Ngang hàng từ xa", + "limitations_hint": "Mỗi nền tảng đều có những hạn chế cụ thể ảnh hưởng đến các tính năng có sẵn. Xem lại những hạn chế này khi lập kế hoạch triển khai.", + "feat_desktop_client": "Máy khách để bàn", + "feat_background_agent": "Tác nhân nền", + "feat_remote_target": "Mục tiêu từ xa", + "feat_screen_capture": "Chụp màn hình", + "feat_input_injection": "Tiêm đầu vào", + "feat_file_transfer": "Truyền tệp", + "feat_clipboard_sync": "Đồng bộ hóa bảng nhớ tạm", + "feat_audio_streaming": "Truyền phát âm thanh", + "feat_chat": "Chat", + "feat_h264": "H.264 Codec", + "feat_vp9": "VP9 Codec", + "feat_av1": "AV1 Codec", + "feat_cdap_agent": "CDAP Agent", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "Web Browser", + "platform_chromeos": "ChromeOS", + "status_production": "Production", + "status_testing": "Testing", + "status_planned": "Planned", + "status_limited": "Limited", + "status_experimental": "Experimental", + "limit_win_uac": "Cần có độ cao UAC để cài đặt dịch vụ và đưa dữ liệu đầu vào vào máy tính để bàn an toàn.", + "limit_win_service": "Chạy dưới dạng dịch vụ NSSM; yêu cầu đặc quyền của Quản trị viên để cài đặt.", + "limit_win_firewall": "Windows Quy tắc tường lửa phải cho phép các cổng 21115-21119 cho các kết nối chuyển tiếp.", + "limit_linux_wayland": "Bộ tổng hợp Wayland hạn chế chụp màn hình theo chương trình; Cần có cổng PipeWire API.", + "limit_linux_pipewire": "Việc thu âm cần có PipeWire; Dự phòng PulseAudio có sẵn nhưng bị hạn chế.", + "limit_linux_arm": "Bản dựng ARM64 có sẵn; một số codec có thể sử dụng giải mã phần mềm (chậm hơn).", + "limit_mac_screen": "Cần có quyền Ghi màn hình trong Tùy chọn hệ thống > Quyền riêng tư & bảo mật.", + "limit_mac_signing": "Đại lý phải được ký bằng ID nhà phát triển của Apple để phân phối.", + "limit_mac_notarize": "Yêu cầu công chứng đối với macOS Gatekeeper (phân phối không phải trên App Store).", + "limit_android_projection": "MediaProjection API cần có sự đồng ý của người dùng cho mỗi phiên chụp màn hình.", + "limit_android_accessibility": "Việc chèn đầu vào yêu cầu AccessibilityService; bị hạn chế trong Android 14+.", + "limit_android_battery": "Dịch vụ nền bị giới hạn bởi chế độ Doze; có thể yêu cầu miễn trừ tối ưu hóa pin.", + "limit_ios_capture": "Apple cấm chụp màn hình nền; chế độ chỉ dành cho người xem được hỗ trợ.", + "limit_ios_input": "Không được phép tiêm đầu vào; chỉ xem và trò chuyện từ xa.", + "limit_ios_appstore": "Chỉ phân phối qua App Store; TestFlight để thử nghiệm beta.", + "limit_web_https": "WebCodecs API và WebRTC yêu cầu HTTPS; HTTP quay trở lại JMuxer (codec giới hạn).", + "limit_web_codec": "Hỗ trợ Codec tùy thuộc vào trình duyệt; H.264 được hỗ trợ rộng rãi, VP9/AV1 có nhiều loại khác nhau.", + "limit_web_performance": "Hiệu suất bị giới hạn bởi hộp cát trình duyệt; không có khả năng tăng tốc phần cứng trực tiếp.", + "limit_chrome_crostini": "Chỉ hỗ trợ đại lý đầy đủ trong vùng chứa Crostini Linux.", + "limit_chrome_pwa": "Chế độ PWA cung cấp các tính năng chỉ dành cho web; không có khả năng đại lý bản địa.", + "limit_chrome_input": "Việc tiêm đầu vào không được hỗ trợ bên ngoài vùng chứa Crostini.", + "feat_session_recording": "Ghi phiên", + "feat_multi_monitor": "Đa màn hình", + "feat_unattended_access": "Truy cập không có người giám sát", + "limit_win_virtual_account": "Dịch vụ chạy dưới tài khoản ảo cách ly thay vì LocalSystem; đường dẫn log tùy chỉnh có thể cần điều chỉnh ACL.", + "limit_linux_unprivileged": "Dịch vụ chạy dưới tài khoản 'betterdesk' không có đặc quyền chuyên dụng với systemd hardening (NoNewPrivileges, ProtectSystem=strict)." + }, + "security_audit": { + "title": "Kiểm tra an ninh", + "tab_overview": "Tổng quan", + "tab_events": "Sự kiện kiểm toán", + "tab_hardening": "Hardening", + "tab_vulnerabilities": "Vulnerabilities", + "security_score": "Điểm bảo mật", + "failed_logins": "Đăng nhập thất bại (24h)", + "active_bans": "Active Bans", + "api_keys": "API Keys", + "old_keys": "Chìa khóa cũ (>90d)", + "security_checks": "Kiểm tra bảo mật", + "tls_status": "TLS Status", + "pass": "Pass", + "warning": "Warning", + "fail": "Fail", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "WebSocket An toàn", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "all_events": "All Events", + "event_login_failed": "Đăng nhập không thành công", + "event_login_success": "Đăng nhập thành công", + "event_peer_banned": "Peer Banned", + "event_ip_banned": "IP Banned", + "event_config_changed": "Cấu hình đã thay đổi", + "event_key_created": "Đã tạo khóa", + "refresh": "Refresh", + "col_time": "Time", + "col_action": "Action", + "col_actor": "Actor", + "col_target": "Target", + "col_ip": "IP Address", + "col_details": "Details", + "no_events": "Không tìm thấy sự kiện kiểm tra nào.", + "hardening_hint": "Ưu tiên tăng cường bảo mật cho việc triển khai BetterDesk của bạn. Các mục được sắp xếp theo mức độ nghiêm trọng.", + "no_hardening": "Không có vật phẩm làm cứng có sẵn.", + "vuln_hint": "Kết quả quét lỗ hổng phụ thuộc. Chạy kiểm tra npm thường xuyên để giữ an toàn cho các phần phụ thuộc.", + "no_vulns": "Không tìm thấy lỗ hổng nào. Sự phụ thuộc của bạn được an toàn." + }, + "languages": { + "title": "Quản lý ngôn ngữ", + "total_languages": "Tổng số ngôn ngữ", + "fully_translated": "Đã dịch hoàn toàn", + "needs_review": "Cần xem xét", + "reference_keys": "Khóa tham khảo", + "no_languages": "Không tìm thấy tập tin ngôn ngữ.", + "badge_reference": "Reference", + "badge_review": "Cần xem xét", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "Xem thiếu", + "fix_missing": "Fix Missing", + "missing_keys_for": "Thiếu chìa khóa cho", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "và {n} thêm...", + "all_keys_present": "Tất cả các phím đều có mặt!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "Các khóa còn thiếu trong {code} phải được dịch thủ công.", + "no_fix_needed": "Không thiếu phím nào để sửa." + }, + "resource_control": { + "title": "Kiểm soát tài nguyên", + "tab_overview": "Tổng quan", + "tab_usb": "USB Control", + "tab_optical": "Ổ đĩa quang", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "Hạn ngạch tài nguyên", + "compliance_by_category": "Tuân thủ theo danh mục", + "device_compliance": "Tuân thủ thiết bị", + "search_devices": "Tìm kiếm thiết bị...", + "col_device": "Thiết bị", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "Tổng số thiết bị", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "Tỷ lệ tuân thủ", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "Cấu hình", + "no_devices": "Không tìm thấy thiết bị nào", + "usb_title": "Kiểm soát cổng USB", + "usb_hint": "Kiểm soát quyền truy cập thiết bị lưu trữ USB cho thiết bị đã chọn hoặc chính sách mặc định trên toàn tổ chức.", + "usb_storage_policy": "Chính sách lưu trữ USB", + "usb_whitelist": "Thiết bị được đưa vào danh sách trắng (một thiết bị trên mỗi dòng)", + "usb_whitelist_hint": "VID:PID (ví dụ: 0781:5583)", + "usb_audit_log": "Ghi nhật ký kết nối thiết bị USB", + "optical_title": "Điều khiển ổ đĩa quang", + "optical_hint": "Kiểm soát quyền truy cập ổ đĩa CD/DVD/Blu-ray cho thiết bị đã chọn.", + "optical_policy": "Chính sách ổ đĩa quang", + "optical_audit_log": "Đăng nhập truy cập ổ đĩa quang", + "monitors_title": "Quản lý giám sát", + "monitors_hint": "Định cấu hình cài đặt màn hình bao gồm số lượng tối đa, thực thi độ phân giải, độ sáng và lịch trình nguồn.", + "monitors_max_count": "Màn hình tối đa (0 = không giới hạn)", + "monitors_max_hint": "0 có nghĩa là không có giới hạn", + "monitors_resolution": "Độ phân giải tối đa", + "monitors_brightness": "Giới hạn độ sáng", + "monitors_power_schedule": "Lịch trình điện", + "monitors_power_hint": "ví dụ: tắt:22:00-06:00", + "disks_title": "Kiểm soát truy cập đĩa", + "disks_hint": "Định cấu hình các chính sách truy cập đĩa bao gồm chế độ chỉ đọc, thực thi mã hóa và khả năng hiển thị phân vùng.", + "disks_readonly": "Buộc chế độ chỉ đọc", + "disks_encryption": "Yêu cầu mã hóa (BitLocker/LUKS)", + "disks_smart": "Kích hoạt S.M.A.R.T. giám sát", + "disks_hidden": "Phân vùng ẩn", + "disks_hidden_hint": "Các ký tự ổ đĩa hoặc điểm gắn kết được phân tách bằng dấu phẩy", + "quotas_title": "Hạn ngạch tài nguyên", + "quotas_hint": "Đặt hạn ngạch CPU, RAM, băng thông và ổ đĩa cho mỗi người dùng cho thiết bị đã chọn.", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "Giới hạn băng thông (Mbps)", + "quotas_bandwidth_hint": "0 = không giới hạn", + "quotas_disk_quota": "Hạn ngạch đĩa (GB)", + "quotas_disk_hint": "0 = không giới hạn", + "quotas_process_whitelist": "Xử lý danh sách trắng (mỗi dòng một dòng)", + "quotas_process_hint": "ví dụ: chrome.exe, code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "Chỉ danh sách trắng", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "Cập nhật phần mềm", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "Phiên bản đã cài đặt", + "latest_version": "Latest version", + "status": "Status", + "check_now": "Kiểm tra các bản cập nhật", + "checking": "Checking…", + "up_to_date": "Cập nhật", + "update_available": "Đã có bản cập nhật", + "changelog": "Release Notes", + "no_changelog": "Không có ghi chú phát hành nào", + "files_changed": "Tập tin đã thay đổi", + "files": "tập tin", + "changes_unavailable": "Không thể tải danh sách thay đổi tập tin. Bạn vẫn có thể cài đặt bản cập nhật.", + "create_backup": "Tạo bản sao lưu trước khi cập nhật", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "Đang cài đặt bản cập nhật…", + "creating_backup": "Đang tạo bản sao lưu…", + "downloading": "Đang tải xuống tệp…", + "install_success": "Cập nhật được cài đặt thành công. Bảng điều khiển đang khởi động lại…", + "install_failed": "Cài đặt cập nhật không thành công", + "restarting": "Đang chờ bảng điều khiển khởi động lại…", + "restart_complete": "Bảng điều khiển đã khởi động lại thành công", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "Không có phiên bản cập nhật nào được chọn. Kiểm tra cập nhật đầu tiên.", + "backups_title": "Cập nhật bản sao lưu", + "backups_desc": "Bản sao lưu trước khi cập nhật được tạo tự động trước mỗi lần cập nhật", + "no_backups": "Không tìm thấy bản sao lưu cập nhật", + "restore": "Restore", + "restore_confirm": "Bạn có chắc chắn muốn khôi phục từ bản sao lưu này không? Các tập tin đã thay đổi sẽ bị ghi đè.", + "restore_success": "Sao lưu được khôi phục thành công. Bảng điều khiển đang khởi động lại…", + "baseline_set": "Bộ đường cơ sở", + "commits_behind": "cam kết đằng sau", + "total_files": "Tổng số tập tin", + "applied": "Applied", + "failed": "thất bại", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Đi máy chủ", + "component_agent": "Agent", + "component_scripts": "Tập lệnh & Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "Đang kiểm tra Đi…", + "go_not_found": "Chưa cài đặt", + "go_check_failed": "Không thể kiểm tra tính khả dụng của Go", + "server_building": "Đang biên dịch Go server… Quá trình này có thể mất vài phút.", + "server_built": "Máy chủ nhị phân được biên dịch", + "server_build_failed": "Biên dịch máy chủ không thành công", + "server_stale_title": "Máy chủ nhị phân lỗi thời", + "server_stale_desc": "Nguồn Go server đã được cập nhật nhưng tệp nhị phân đang chạy không được xây dựng lại. Xây dựng lại nó ngay bây giờ để áp dụng các bản cập nhật bảo mật và thư viện.", + "rebuild_server": "Xây dựng lại máy chủ nhị phân", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "Máy chủ nhị phân được xây dựng lại và khởi động lại", + "rebuild_server_failed": "Xây dựng lại máy ch�� nhị phân không thành công", + "server_deployed": "Máy chủ nhị phân được triển khai", + "server_deploy_failed": "Triển khai máy chủ không thành công", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "Đang tải xuống nguồn máy chủ…", + "delete": "Xóa", + "delete_confirm": "Xóa vĩnh viễn bản sao lưu {name}? Điều này không thể hoàn tác được.", + "delete_success": "Đã xóa bản sao lưu", + "delete_failed": "Không xóa được bản sao lưu", + "retention_label": "Giữ N bản sao lưu gần đây nhất", + "retention_hint": "Các bản sao lưu cũ hơn sẽ tự động bị xóa sau mỗi lần cập nhật. Sử dụng 0 để giữ tất cả các bản sao lưu.", + "retention_saved": "Đã lưu cài đặt lưu giữ", + "retention_invalid": "Giá trị lưu giữ phải là số nguyên trong khoảng từ 0 đến 1000", + "retention_required_for_prune": "Đặt giá trị lưu giữ lớn hơn 0 trước", + "prune_now": "Apply now", + "prune_confirm": "Chỉ giữ lại các bản sao lưu gần đây nhất của {n} và xóa phần còn lại?", + "prune_done": "Đã cắt bớt (các) bản sao lưu {n}", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "Phương pháp cập nhật", + "strategy_download": "Tải xuống tệp nhị phân dựng sẵn", + "strategy_compile": "Biên dịch từ nguồn", + "both_available": "Tải xuống và biên dịch", + "download_available": "Tải xuống có sẵn", + "no_method": "Không có phương pháp cập nhật", + "no_release": "No release", + "available": "Có sẵn", + "server_downloading": "Đang tải xuống tệp nhị phân của máy chủ…", + "server_downloaded": "Máy chủ đã tải xuống nhị phân", + "server_download_failed": "Tải xuống nhị phân máy chủ không thành công", + "server_download_note": "Tệp nh��� phân dựng sẵn sẽ được tải xuống từ Bản phát hành GitHub. Việc này thường mất ít hơn một phút.", + "install_go_hint": "Cài đặt Go từ https://go.dev/dl/ để cho phép biên dịch hoặc xuất bản bản phát hành với các tệp nhị phân dựng sẵn", + "strategy_install_go": "Tự động cài đặt Đi và biên dịch", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "Tự động xây dựng l���i đã sẵn sàng", + "toolchain_ready": "Đã cài đặt chuỗi công cụ", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "Đang tải xuống chuỗi công cụ Go…", + "toolchain_failed": "Cài đặt chuỗi công cụ không thành công", + "modal_title": "Đang cài đặt bản cập nhật", + "modal_done_title": "Cập nhật hoàn tất", + "modal_close": "Đóng", + "modal_reload_now": "Tải lại bảng điều khiển", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "Tệp bảng điều khiển", + "phase_server": "Giai đoạn máy chủ", + "phase_restart": "Khởi động lại", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "Sao lưu bị bỏ qua (theo lựa chọn của người dùng)", + "server_skipped": "Go server bị bỏ qua", + "server_not_selected": "Go server not selected", + "server_processing": "Đang xử lý bản cập nhật Go server…", + "no_restart_needed": "Không cần khởi động lại", + "complete": "Đã áp dụng cập nhật", + "complete_summary": "Bản cập nhật đã được áp dụng thành công.", + "complete_with_errors": "Quá trình cập nhật đã hoàn tất nhưng một số bước không thành công. Xem chi tiết bên dưới.", + "modal_done_with_errors_title": "Cập nhật xong có lỗi", + "console_will_restart": "Quá trình điều khiển sẽ khởi động lại ngay bây giờ…", + "restart_complete_msg": "Bàn điều khiển đã khởi động lại xong. Nhấn vào tải lại để tải phiên bản mới. Trang sẽ tự động tải lại sau 8 giây.", + "refresh_recommended": "Nội dung tĩnh đã thay đổi — hãy tải lại trang để xem giao diện người dùng mới.", + "confirm_title": "Áp dụng cập nhật", + "confirm_with_backup": "Một bản sao lưu cập nhật trước sẽ được tạo tự động.", + "confirm_no_backup": "Sẽ không có bản sao lưu nào được tạo (bạn tự chịu rủi ro khi tiếp tục)." + }, + "permissions": { + "title": "Quyền", + "subtitle": "Quản lý quyền dựa trên vai trò và ghi đè tùy chỉnh", + "info_title": "Cách thức hoạt động của quyền", + "info_desc": "Mỗi vai trò có quyền mặc định. Bạn có thể thêm hoặc xóa các quyền riêng lẻ cho mỗi vai trò bằng cách chuyển đổi chúng bên dưới. Phần ghi đè tùy chỉnh được đánh dấu và có thể được hoàn nguyên về mặc định bất kỳ lúc nào.", + "select_role": "Chọn vai trò", + "select_role_placeholder": "Chọn một vai trò...", + "reset_overrides": "Đặt lại tất cả các phần ghi đè", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "Cấp máy chủ", + "custom": "Custom", + "default": "Default", + "revert": "Hoàn nguyên về mặc định", + "saved": "Đã cập nhật quyền", + "reverted": "Đã hoàn nguyên về mặc định", + "all_reverted": "Tất cả các ghi đè được hoàn nguyên", + "confirm_reset": "Đặt lại tất cả các thông tin ghi đè tùy chỉnh cho vai trò này về mặc định?", + "empty_title": "Chọn một vai trò", + "empty_desc": "Chọn một vai trò từ danh sách thả xuống ở trên để xem và quản lý các quyền của vai trò đó.", + "locked_title": "Super Admin", + "locked_desc": "Quản trị viên cấp cao có tất cả các quyền theo mặc định và không thể tùy chỉnh.", + "cat_device": "Thiết bị", + "cat_user": "Users", + "cat_server": "Máy chủ", + "cat_org": "Tổ chức", + "cat_audit": "Kiểm toán & Giám sát", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "Xem thiết bị", + "perm_device_connect": "Kết nối với các thiết bị", + "perm_device_edit": "Chỉnh sửa thiết bị", + "perm_device_delete": "Xóa thiết bị", + "perm_device_ban": "Cấm/bỏ cấm thiết bị", + "perm_device_change_id": "Thay đổi ID thiết bị", + "perm_user_view": "Xem người dùng", + "perm_user_create": "Tạo người dùng", + "perm_user_edit": "Chỉnh sửa người dùng", + "perm_user_delete": "Xóa người dùng", + "perm_server_config": "Cấu hình máy chủ", + "perm_server_keys": "Quản lý khóa API", + "perm_org_create": "Tạo tổ chức", + "perm_org_edit": "Chỉnh sửa tổ chức", + "perm_org_delete": "Xóa tổ chức", + "perm_org_manage_users": "Quản lý người dùng tổ chức", + "perm_org_manage_devices": "Quản lý thiết bị của tổ chức", + "perm_audit_view": "Xem nhật ký kiểm tra", + "perm_metrics_view": "Xem số liệu", + "perm_blocklist_edit": "Chỉnh sửa danh sách chặn", + "perm_cdap_view": "Xem thiết bị CDAP", + "perm_cdap_command": "Gửi lệnh CDAP", + "perm_cdap_terminal": "Truy cập thiết bị đầu cuối CDAP", + "perm_cdap_files": "Truy cập tệp CDAP", + "perm_enrollment_manage": "Quản lý tuyển sinh", + "perm_enrollment_approve": "Phê duyệt đăng ký", + "perm_chat_access": "Chat access", + "perm_branding_edit": "Chỉnh sửa thương hiệu", + "perm_server_attestation": "Chứng nhận hiệu suất máy chủ" + }, + "notifications": { + "title": "Thông báo", + "empty": "Không có thông báo mới", + "mark_all_read": "Đánh dấu tất cả đã đọc", + "see_all": "Xem tất cả yêu cầu trợ giúp", + "help_request": "Yêu cầu trợ giúp", + "just_now": "just now" + }, + "accessibility": { + "title": "Accessibility", + "subtitle": "Điều chỉnh bảng điều khiển theo nhu cầu thị giác, chuyển động và đọc của bạn.", + "close": "Đóng menu trợ năng", + "profiles": "Hồ sơ nhanh", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "Văn bản lớn hơn, độ tương phản và tiêu điểm mạnh mẽ.", + "profile_dyslexia": "Đọc sách thoải mái", + "profile_dyslexia_hint": "Phông chữ dễ đọc và khoảng cách rộng hơn.", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "Giảm chuyển tiếp và tạm dừng hoạt ảnh.", + "profile_color_assist": "Hỗ trợ màu sắc", + "profile_color_assist_hint": "Bộ lọc màu, nhãn và liên kết được đánh dấu.", + "reading": "Reading", + "font_size": "Font size", + "line_height": "Line height", + "letter_spacing": "Khoảng cách chữ", + "word_spacing": "Khoảng cách từ", + "readable_font": "Phông chữ có thể đọc được", + "readable_font_hint": "Sử dụng các hình dạng chữ rộng và quen thuộc.", + "dyslexia_spacing": "Khoảng cách chứng khó đọc", + "dyslexia_spacing_hint": "Thêm khoảng cách bổ sung cho văn bản dài.", + "visual": "Visual", + "contrast": "Contrast", + "contrast_normal": "Normal", + "contrast_high_dark": "Độ tương phản cao tối", + "contrast_high_light": "Ánh sáng có độ tương phản cao", + "contrast_yellow_black": "Màu vàng trên nền đen", + "color_filter": "Bộ lọc tầm nhìn màu", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "Độ bão hòa màu", + "underline_links": "Gạch chân các liên kết", + "underline_links_hint": "Làm cho các liên kết hiển thị mà không cần dựa vào màu sắc.", + "highlight_links": "Đánh dấu hành động", + "highlight_links_hint": "Phác thảo các liên kết và các nút.", + "highlight_headings": "Đ��nh dấu các tiêu đề", + "highlight_headings_hint": "Đánh dấu tiêu đề phần bằng thanh màu.", + "hide_media": "Dim media", + "hide_media_hint": "Làm mờ hình ảnh, video và canvas.", + "interaction": "Interaction", + "strong_focus": "Tập trung mạnh mẽ", + "strong_focus_hint": "Hiển thị vòng lấy nét bàn phím lớn.", + "large_cursor": "Con trỏ lớn", + "large_cursor_hint": "Sử dụng con trỏ có độ tương phản cao lớn hơn.", + "reduce_motion": "Giảm chuyển động", + "reduce_motion_hint": "Rút ngắn chuyển tiếp và cuộn mượt mà.", + "pause_animations": "Tạm dừng hoạt ảnh", + "pause_animations_hint": "Dừng lặp lại chuyển động thị giác.", + "reading_guide": "Hướng dẫn đọc", + "reading_guide_hint": "Theo sau con trỏ bằng một đường sáng.", + "reading_mask": "Mặt nạ đọc sách", + "reading_mask_hint": "Làm mờ nội dung bên trên và bên dưới con trỏ.", + "preview": "Preview", + "preview_title": "Xem trước không gian làm việc của người vận hành", + "preview_text": "Kiểm tra xem văn bản, liên kết, điều khiển và nhãn trạng thái có dễ đọc hay không trước khi đóng menu này.", + "preview_link": "Liên kết chi tiết thiết bị", + "preview_status": "Online", + "preview_button": "Hành động chính", + "preview_secondary": "Secondary", + "reset": "Reset", + "done": "Done" + }, + "server_mgmt": { + "title": "Quản lý máy chủ", + "subtitle": "Mặt phẳng điều khiển giống buồng lái dành cho máy chủ bảng điều khiển BetterDesk (BETA).", + "beta_tooltip": "Tính năng Beta - đang được phát triển tích cực.", + "notice_title": "Tính năng thử nghiệm", + "notice_body": "Các công cụ này chạy trên máy chủ nơi xử lý bảng điều khiển BetterDesk hoạt động. Tất cả các hoạt động đều được kiểm toán. Phạm vi tính năng sẽ mở rộng trong các phiên bản tương lai.", + "tab_overview": "Tổng quan", + "tab_terminal": "Cửa sổ dòng lệnh", + "tab_files": "Tệp", + "tab_services": "Dịch vụ", + "cpu": "CPU", + "memory": "Bộ nhớ", + "load": "Tải trung bình", + "disks": "Ổ đĩa", + "history": "Lịch sử (60 mẫu cuối cùng)", + "host_info": "Host info", + "cores": "cores", + "uptime": "Thời gian hoạt động", + "no_disks": "Không có sẵn dữ liệu đĩa", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY có sẵn", + "term_connect": "Kết nối", + "term_disconnect": "Ngắt kết nối", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "Lỗi kết nối", + "term_warning": "Các lệnh chạy với tư cách là người dùng sở hữu tiến trình giao diện điều khiển. Thêm quy tắc sudoers để bật độ cao.", + "term_hint": "Mẹo: gõ `sudo -i` để chuyển cấp (yêu cầu cấu hình sudoers).", + "term_lib_failed": "Không thể tải thư viện thiết bị đầu cuối", + "files_up": "Lên một cấp", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "Name", + "files_size": "Size", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "Thư mục trống", + "files_error": "Không liệt kê được thư mục", + "read_failed": "Không đọc được tập tin", + "save_failed": "Không lưu được tập tin", + "rename_failed": "Đổi tên không thành công", + "delete_failed": "Xóa không thành công", + "delete_confirm": "Xóa mục này?", + "mkdir_prompt": "Tên thư mục mới:", + "mkdir_failed": "Không tạo được thư mục", + "file_saved": "Đã lưu tệp", + "binary_warn": "Tệp nhị phân - chỉ xem trước", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "Dịch vụ tìm kiếm…", + "svc_name": "Service", + "svc_state": "State", + "svc_description": "Description", + "svc_empty": "Không tìm thấy dịch vụ nào", + "svc_load_failed": "Không thể tải dịch vụ", + "svc_action_failed": "Hành động không thành công", + "svc_confirm": "Run", + "svc_start": "Start", + "svc_stop": "Stop", + "svc_restart": "Khởi động lại", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "download": { + "title": "Tải xuống Đại lý BetterDesk", + "choose_platform": "Chọn nền tảng của bạn", + "choose_platform_hint": "Chọn trình cài đặt phù hợp với hệ điều hành của bạn.", + "download": "Tải xuống", + "building": "Tòa nhà…", + "failed": "Xây dựng không thành công", + "need_help": "Cần giúp đỡ?", + "powered_by": "Được cung cấp bởi" + }, + "server_attestation": { + "title": "Chứng nhận hiệu suất máy chủ", + "subtitle": "Benchmark hiệu suất xác định công suất kết nối từ xa đồng thời ở ngưỡng CPU, RAM và đĩa 80%.", + "warning_title": "Kiểm tra tải", + "warning_body": "Benchmark mô phỏng các kết nối WebSocket song song đến máy chủ signal và relay. Chạy trong giờ thấp điểm — bài kiểm tra này tạo tải cho môi trường production.", + "run_benchmark": "Chạy Benchmark", + "abort": "Hủy bỏ", + "download_report": "Tải báo cáo JSON", + "last_test": "Lần kiểm tra cuối", + "no_test_yet": "Chưa có benchmark nào được chạy", + "max_connections": "Kết nối tối đa", + "threshold_80": "Ngưỡng 80% — số liệu cuối cùng", + "disk": "Đĩa", + "ramp_chart": "Biểu đồ tăng tải", + "connections": "Kết nối", + "connections_short": "kết nối", + "tier_guide_title": "Mỗi cấp có nghĩa là gì?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 kết nối đồng thời — VPS nhỏ (1–2 vCPU, 2–4 GB RAM).", + "tier_iron_desc": "26–75 kết nối — máy chủ tầm trung (2–4 vCPU, 4–8 GB RAM).", + "tier_platinum_desc": "76–200 kết nối — máy chủ hiệu suất cao (4–8 vCPU, 8–16 GB RAM).", + "tier_titanium_desc": "201–400 kết nối — cơ sở hạ tầng doanh nghiệp (8+ vCPU, 16–32 GB RAM).", + "tier_obsidian_desc": "401+ kết nối — hạng Turbo: phần cứng chuyên dụng, 16+ vCPU, 32+ GB RAM, NVMe.", + "docker_note": "Lưu ý: trong Docker, số liệu CPU/RAM có thể phản ánh giới hạn container thay vì máy chủ vật lý.", + "badge_tooltip": "BetterDesk Server Attestation — chứng nhận hiệu suất máy chủ", + "confirm_run": "Benchmark này sẽ kiểm tra tải máy chủ với các kết nối mô phỏng. Tiếp tục?", + "starting": "Đang bắt đầu…", + "complete": "Benchmark hoàn tất", + "signal_peers": "Peer tín hiệu", + "relay_sessions": "Phiên chuyển tiếp", + "page_error": "Không thể tải trang Server Attestation", + "mode_estimated": "Ước tính (WebSocket không thể truy cập)", + "incomplete": "Benchmark kết thúc mà không có cấp hợp lệ" + }, + "commercialization": { + "title": "Thương mại hóa", + "subtitle": "Gói hỗ trợ, phiên tính phí và báo cáo công việc", + "alpha_badge": "ALPHA", + "alpha_tooltip": "Tính năng sớm — hóa đơn và gói đang được phát triển tích cực.", + "tabs": { + "overview": "Tổng quan", + "packages": "Gói & hợp đồng", + "sessions": "Phiên", + "reports": "Báo cáo", + "settings": "Cài đặt nâng cao" }, - "branding": { - "identity_title": "Nhận diện thương hiệu", - "identity_desc": "Tùy chỉnh tên ứng dụng và mô tả hiển thị trên bảng điều khiển", - "app_name": "Tên ứng dụng", - "app_description": "Mô tả ứng dụng", - "logo_title": "Logo", - "logo_desc": "Chọn cách logo của bạn xuất hiện trong thanh bên và trang đăng nhập", - "logo_type_icon": "Biểu tượng vật liệu", - "logo_type_svg": "SVG Code", - "logo_type_image": "Image URL", - "logo_icon_name": "Icon Name", - "logo_icon_hint": "Nhập tên Biểu tượng Vật liệu (ví dụ: dns, đám mây, bảo mật). Xem phông chữ.google.com/icons", - "logo_svg_code": "SVG Code", - "logo_svg_hint": "Dán đánh dấu SVG của bạn vào đây. Hỗ trợ các phần tử đầy đủ với đường dẫn và kiểu.", - "logo_image_upload": "Tải hình ảnh lên", - "logo_image_choose": "Chọn tập tin hình ảnh", - "logo_image_hint": "PNG, JPG, GIF, WebP or SVG. Max 1.5 MB. The image is stored as base64 data.", - "logo_image_url": "Image Data / URL", - "logo_image_url_hint": "Auto-filled when you upload a file, or paste a URL manually.", - "logo_image_too_large": "Image is too large. Maximum size is 1.5 MB.", - "logo_image_invalid_type": "Lo��i tệp không hợp lệ. Sử dụng PNG, JPG, GIF, WebP hoặc SVG.", - "preview": "Preview", - "colors_title": "Phối màu", - "colors_desc": "Tùy chỉnh bảng màu. Để trống để sử dụng mặc định.", - "colors_backgrounds": "Backgrounds", - "colors_text": "Text", - "colors_accents": "Màu nhấn", - "colors_borders": "Borders", - "import_export_title": "Nhập / Xuất", - "import_export_desc": "Lưu chủ đề của bạn dưới dạng tệp JSON hoặc nhập chủ đề từ một phiên bản khác", - "export_theme": "Xuất chủ đề", - "import_theme": "Nhập chủ đề", - "reset_defaults": "Đặt lại về mặc định", - "save_branding": "Lưu thương hiệu", - "saved": "Đã lưu thương hiệu thành công. Đang tải lại...", - "exported": "Đã xuất chủ đề", - "imported": "Chủ đề đã được nhập thành công. Đang tải lại...", - "import_error": "Không thể nhập chủ đề. Định dạng tập tin không hợp lệ.", - "reset_confirm": "Bạn có chắc chắn muốn đặt lại nhãn hiệu về mặc định không? Điều này không thể hoàn tác được.", - "reset_success": "Đặt lại thương hiệu về mặc định. Đang tải lại...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "Văn bản chính được hiển thị dưới dạng logo thương hiệu của bạn", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "Văn bản phụ bên dưới logo (ví dụ: tên sản phẩm hoặc dòng giới thiệu)", - "logo_upload_success": "Logo đã được tải lên thành công.", - "typography_title": "Typography", - "typography_desc": "Chọn phông chữ cho tiêu đề và nội dung văn bản. Phông chữ được tải xuống máy chủ để tự lưu trữ.", - "font_heading": "Phông chữ tiêu đề", - "font_heading_hint": "Được sử dụng cho tiêu đề (H1–H6) và logo văn bản", - "font_body": "Body Font", - "font_body_hint": "Được sử dụng cho văn bản nội dung và các thành phần giao diện người dùng", - "font_search_placeholder": "Tìm kiếm phông chữ...", - "font_system_default": "Mặc định hệ thống", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "phông chữ được tải xuống trên máy chủ", - "powered_by": "Được hỗ trợ bởi", - "background_title": "Nền & Giao diện", - "background_desc": "Đặt hình nền console, gradient hoặc nền màu đơn. Các thẻ sẽ nổi lên trên.", - "bg_type_none": "Không có", - "bg_type_color": "Màu đơn", - "bg_type_gradient": "Gradient", - "bg_type_image": "Hình ảnh", - "bg_color": "Màu nền", - "bg_gradient": "Gradient CSS", - "bg_gradient_hint": "Bất kỳ CSS gradient hợp lệ nào, vd: linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "Tải lên ảnh nền", - "bg_image_choose": "Chọn tệp ảnh", - "bg_image_hint": "PNG, JPG, WebP hoặc GIF. Tối đa 8 MB. Lưu trên máy chủ.", - "bg_image_url": "Đường dẫn / URL ảnh", - "bg_size": "Kích thước ảnh", - "bg_size_cover": "Phủ kín (lấp đầy màn hình)", - "bg_size_contain": "Vừa khít", - "bg_size_auto": "Tự động (gốc)", - "bg_blur": "Làm mờ nền", - "bg_overlay": "Lớp phủ tối", - "bg_overlay_hint": "Làm tối nền để văn bản dễ đọc hơn.", - "bg_image_too_large": "Ảnh quá lớn. Kích thước tối đa là 8 MB.", - "bg_image_invalid_type": "Loại tệp không hợp lệ. Sử dụng PNG, JPG, WebP hoặc GIF.", - "bg_upload_success": "Đã tải lên ảnh nền thành công.", - "login_title": "Trang đăng nhập", - "login_desc": "Tùy chỉnh tiêu đề, phụ đề và nền trang đăng nhập.", - "login_heading": "Tiêu đề đăng nhập", - "login_heading_placeholder": "Chào mừng trở lại", - "login_subheading": "Phụ đề đăng nhập", - "login_subheading_placeholder": "Đăng nhập vào tài khoản của bạn", - "login_bg_inherit": "Giống như console", - "agent_title": "Trang tải xuống Agent", - "agent_desc": "Tùy chỉnh cổng tải xuống agent công khai hiển thị cho người dùng cuối.", - "agent_show_powered": "Hiển thị \"Powered by BetterDesk\"", - "agent_show_powered_hint": "Hiển thị ghi nhận BetterDesk trong footer của cổng tải xuống.", - "footer_title": "Footer & Bản quyền", - "footer_desc": "Thêm dòng footer tùy chỉnh hiển thị trên trang đăng nhập và thanh bên console.", - "footer_text": "Văn bản footer", - "footer_text_hint": "vd: thông báo bản quyền hoặc tên công ty.", - "show_powered": "Hiển thị ghi nhận \"BetterDesk\"", - "show_powered_hint": "Hiển thị tên và phiên bản BetterDesk trong footer đăng nhập và thanh bên.", - "custom_css_title": "CSS tùy chỉnh", - "custom_css_desc": "Nâng cao: chèn CSS tùy chỉnh áp dụng trên toàn console và trang đăng nhập.", - "custom_css_hint": "Sử dụng cẩn thận. Các quy tắc không hợp lệ hoặc không an toàn sẽ bị làm sạch. Tối đa 20.000 ký tự." + "clock": { + "title": "Giờ máy chủ (NTP)", + "check_now": "Kiểm tra ngay", + "unsynced": "Đồng hồ máy chủ chưa đồng bộ — phiên tính phí có thể bị chặn" }, - "device_detail": { - "tab_overview": "Tổng quan", - "tab_tags": "Thẻ & Ghi chú", - "tab_actions": "Actions", - "section_identity": "Identity", - "section_network": "Network", - "section_timestamps": "Timestamps", - "section_connect": "Kết nối", - "section_manage": "Quản lý", - "folder": "Folder", - "status_tier": "Status Tier", - "device_banned": "Thiết bị này bị cấm", - "no_reason": "Không có lý do nào được cung cấp", - "tags": "Tags", - "no_tags": "Không có thẻ nào được gán cho thiết bị này", - "tag_placeholder": "Nhập tên thẻ...", - "add_tag": "Add", - "tag_exists": "Thẻ này đã tồn tại", - "notes": "Notes", - "notes_placeholder": "Thêm ghi chú về thiết bị này...", - "danger_zone": "Danger Zone", - "action_connect_web": "Web từ xa", - "action_connect_web_desc": "Kết nối qua trình duyệt máy tính từ xa", - "action_native_remote": "Điều khiển từ xa BetterDesk", - "action_native_remote_desc": "Native JPEG stream — no plugins required", - "action_connect_desktop": "Máy khách để bàn", - "action_connect_desktop_desc": "Mở trong ứng dụng khách trên máy tính để bàn", - "action_change_id_desc": "Thay đổi ID đăng ký thiết bị", - "action_ban_desc": "Chặn kết nối thiết bị này", - "action_unban_desc": "Cho phép thiết bị này kết nối lại", - "action_delete_desc": "Xóa vĩnh viễn thiết bị này", - "tab_hardware": "Hardware", - "tab_metrics": "Số liệu", - "section_system": "System", - "section_cpu": "Processor", - "section_memory": "Memory", - "section_displays": "Displays", - "section_encoding": "Khả năng mã hóa", - "section_live_metrics": "Số liệu trực tiếp", - "section_current_usage": "Cách sử dụng hiện tại", - "section_usage_history": "Lịch sử sử dụng", - "os": "Operating System", - "version": "Client Version", - "cpu_model": "CPU Model", - "cpu_cores": "CPU Cores", - "cpu_freq": "Tần số CPU", - "total_memory": "Tổng bộ nhớ", - "metric_memory": "Memory", - "metric_disk": "Disk", - "metrics_updated": "Đã cập nhật", - "device_groups": "Nhóm", - "no_sysinfo": "Không có thông tin phần cứng", - "no_sysinfo_hint": "Thông tin hệ thống sẽ xuất hiện sau khi thiết bị gửi báo cáo sysinfo", - "no_metrics": "Không có sẵn dữ liệu số liệu", - "no_metrics_hint": "Số liệu sẽ xuất hiện sau khi thiết bị gửi báo cáo nhịp tim", - "chart_oldest": "← Oldest", - "chart_newest": "Newest →", - "tab_services": "Services", - "tab_processes": "Processes", - "tab_events": "Events", - "tab_activity": "Activity", - "tab_files": "Tập tin", - "agent_lazy_hint": "Nhấp vào tab này để tải dữ liệu trực tiếp từ đại lý", - "agent_offline": "Đại lý đang ngoại tuyến", - "agent_timeout": "Đại lý không phản hồi kịp thời", - "agent_error": "Không thể tải dữ liệu từ đại lý", - "service_name": "Name", - "service_display": "Tên hiển thị", - "service_status": "Status", - "service_start": "Start mode", - "process_name": "Name", - "process_user": "User", - "process_memory": "Memory" + "stats": { + "active_sessions": "Phiên tính phí đang hoạt động" }, - "inventory": { - "title": "Inventory", - "subtitle": "Kiểm kê phần cứng và phần mềm của các thiết bị được quản lý", - "device_id": "ID thiết bị", - "hostname": "Hostname", - "os": "Operating System", - "cpu": "CPU", - "cpu_cores": "CPU Cores", - "cpu_usage": "CPU Usage", - "memory": "Memory", - "memory_total": "Tổng bộ nhớ", - "memory_used": "Used Memory", - "memory_available": "Bộ nhớ khả dụng", - "memory_usage": "Sử dụng bộ nhớ", - "swap": "Swap", - "disks": "Disks", - "disk_count": "Disk Count", - "network": "Network", - "network_interfaces": "Giao diện mạng", - "software": "Software", - "software_count": "Phần mềm đã cài đặt", - "system": "System", - "kernel": "Kernel", - "architecture": "Architecture", - "uptime": "Uptime", - "frequency": "Frequency", - "physical_cores": "Lõi vật lý", - "logical_cores": "Lõi logic", - "model": "Model", - "usage": "Usage", - "total": "Total", - "used": "Used", - "available": "Có sẵn", - "mount_point": "Mount Point", - "removable": "removable", - "mac_address": "MAC Address", - "ip_addresses": "Địa chỉ IP", - "traffic": "Traffic", - "collect_now": "Collect Now", - "collector_running": "Bộ sưu tập đang chạy", - "collector_stopped": "Người sưu tầm đã dừng", - "last_upload": "Last upload", - "total_uploads": "total", - "last_seen": "Last Seen", - "collected_at": "Thu thập tại", - "no_data": "Chưa có dữ liệu hàng tồn kho. Nhấp vào \"Thu thập ngay\" để thu thập thông tin hệ thống.", - "no_devices": "Không tìm thấy thiết bị nào có dữ liệu hàng tồn kho", - "detail_title": "Chi tiết kiểm kê thiết bị", - "telemetry": "Telemetry", - "view_detail": "Xem chi tiết", - "export": "Export", - "refresh": "Refresh" + "packages": { + "new": "Gói mới", + "name": "Tên", + "included_minutes": "Phút bao gồm", + "overage_rate": "Giá vượt / giờ", + "currency": "Tiền tệ", + "heading": "Gói hỗ trợ", + "prompt_name": "Tên gói", + "create_title": "Gói mới cho tổ chức", + "create_submit": "Tạo gói", + "select_org": "Tổ chức", + "select_org_placeholder": "Chọn tổ chức…" }, - "tickets": { - "title": "Tickets", - "subtitle": "Phiếu hỗ trợ và theo dõi vấn đề", - "create": "New Ticket", - "edit": "Chỉnh sửa vé", - "delete": "Xóa vé", - "detail": "Chi tiết vé", - "ticket_id": "Ticket ID", - "ticket_title": "Title", - "description": "Description", - "status": "Status", - "priority": "Priority", - "category": "Category", - "assigned_to": "Được giao cho", - "created_by": "Được tạo bởi", - "device": "Thiết bị", - "sla_due": "SLA Due", - "created_at": "Đã tạo", - "updated_at": "Đã cập nhật", - "resolved_at": "Resolved", - "closed_at": "Closed", - "status_open": "Mở", - "status_in_progress": "In Progress", - "status_resolved": "Resolved", - "status_closed": "Closed", - "priority_low": "Low", - "priority_medium": "Medium", - "priority_high": "High", - "priority_critical": "Critical", - "category_general": "General", - "category_hardware": "Hardware", - "category_software": "Software", - "category_network": "Network", - "category_access": "Access", - "category_other": "Other", - "comments": "Comments", - "add_comment": "Add Comment", - "comment_placeholder": "Viết bình luận...", - "internal_note": "Ghi chú nội bộ (không hiển thị cho người dùng cuối)", - "attachments": "Attachments", - "upload_attachment": "Tải lên tệp đính kèm", - "download": "Download", - "connect_device": "Kết nối với thiết bị", - "no_tickets": "Không tìm thấy vé", - "no_comments": "Chưa có bình luận nào", - "no_attachments": "Không có tệp đính kèm", - "title_required": "Tiêu đề là bắt buộc", - "delete_confirm": "Bạn có chắc chắn muốn xóa vé #{id} không?", - "delete_success": "Đã xóa vé thành công", - "created_success": "Đã tạo vé thành công", - "updated_success": "Đã cập nhật vé thành công", - "sla_overdue": "SLA Overdue", - "filter_all": "All", - "search_placeholder": "Tìm kiếm vé...", - "assign_to_me": "Giao cho tôi", - "unassign": "Unassign", - "stats_total": "Total", - "stats_open": "Mở", - "stats_in_progress": "In Progress", - "stats_resolved": "Resolved", - "stats_closed": "Closed" - }, - "activity": { - "title": "Giám sát hoạt động", - "subtitle": "Việc sử dụng ứng dụng và theo dõi khi không hoạt động", - "device": "Thiết bị", - "hostname": "Hostname", - "sessions": "Phiên", - "idle_time": "Idle Time", - "active_time": "Active Time", - "last_report": "Last Report", - "top_apps": "Ứng dụng hàng đầu", - "app_name": "Application", - "window_title": "Tiêu đề cửa sổ", - "category": "Category", - "duration": "Duration", - "started_at": "Started", - "ended_at": "Ended", - "session_count": "Số phiên", - "total_active": "Tổng số hoạt động", - "total_idle": "Total Idle", - "detail_count": "Bản ghi chi tiết", - "no_data": "Không có dữ liệu hoạt động", - "no_sessions": "Không có phiên nào", - "filter_from": "Từ", - "filter_to": "Đến", - "filter_apply": "Áp dụng bộ lọc", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "category_browser": "Browser", - "category_productivity": "Productivity", - "category_communication": "Communication", - "category_development": "Development", - "category_media": "Media", - "category_gaming": "Gaming", - "category_system": "System", - "category_other": "Other", - "summary": "Summary", - "details": "Details", - "refresh": "Refresh", - "search": "Tìm kiếm thiết bị...", - "date_range": "Date Range", - "device_id": "ID thiết bị", - "session_start": "Bắt đầu phiên", - "session_end": "Kết thúc phiên", - "user": "User", - "no_activity": "Không có hoạt động nào được ghi lại", - "reported_at": "Reported At", - "detail": "Detail", - "no_apps": "Không có ứng dụng" - }, - "automation": { - "title": "Tự động hóa & Cảnh báo", - "subtitle": "Quy tắc cảnh báo, lệnh từ xa và cấu hình SMTP", - "rules": "Alert Rules", - "rules_subtitle": "Xác định các điều kiện kích hoạt thông báo", - "alerts": "Lịch sử cảnh báo", - "alerts_subtitle": "Xem và xác nhận cảnh báo được kích hoạt", - "commands": "Lệnh từ xa", - "commands_subtitle": "Gửi lệnh đến các thiết bị từ xa", - "smtp": "Cấu hình SMTP", - "smtp_subtitle": "Cài đặt thông báo qua email", - "rule_name": "Rule Name", - "description": "Description", - "condition_type": "Loại tình trạng", - "condition_op": "Operator", - "condition_value": "Threshold", - "severity": "Severity", - "scope_device": "Thiết bị mục tiêu", - "scope_all": "Tất cả thiết bị", - "cooldown": "Thời gian hồi chiêu (giây)", - "notify_emails": "Email thông báo", - "enabled": "Đã bật", - "disabled": "Đã tắt", - "create_rule": "Tạo quy tắc", - "edit_rule": "Chỉnh sửa quy tắc", - "delete_rule": "Xóa quy tắc", - "acknowledge": "Acknowledge", - "acknowledged": "Acknowledged", - "unacknowledged": "Unacknowledged", - "triggered_at": "Kích hoạt vào lúc", - "severity_info": "Info", - "severity_warning": "Warning", - "severity_critical": "Critical", - "op_gt": "Lớn hơn", - "op_gte": "Lớn hơn hoặc bằng", - "op_lt": "Less than", - "op_lte": "Ít hơn hoặc bằng", - "op_eq": "bằng với", - "op_neq": "Không bằng", - "type_cpu_usage": "Mức sử dụng CPU (%)", - "type_memory_usage": "Mức sử dụng bộ nhớ (%)", - "type_disk_usage": "Sử dụng đĩa (%)", - "type_offline_duration": "(Các) thời lượng ngoại tuyến", - "type_idle_duration": "Thời lượng nhàn rỗi (s)", - "type_custom": "Custom", - "command_type": "Loại lệnh", - "command_payload": "Lệnh / Tập lệnh", - "command_result": "Result", - "command_status": "Status", - "send_command": "Gửi lệnh", - "status_pending": "Pending", - "status_running": "Running", - "status_completed": "Completed", - "status_failed": "thất bại", - "smtp_host": "SMTP Host", - "smtp_port": "Port", - "smtp_secure": "Use TLS", - "smtp_user": "Tên người dùng", - "smtp_pass": "Mật khẩu", - "smtp_from": "Từ địa chỉ", - "smtp_test": "Kiểm tra kết nối", - "smtp_save": "Lưu cấu hình", - "smtp_test_success": "Kết nối thành công", - "smtp_test_failed": "Kết nối không thành công", - "no_rules": "Không có quy tắc cảnh báo nào được định cấu hình", - "no_alerts": "Không có cảnh báo nào được kích hoạt", - "no_commands": "Không có lệnh nào được gửi", - "id_payload_required": "Cần có ID thiết bị và tải trọng", - "no_commands_sent": "Chưa có lệnh nào được gửi" - }, - "file_transfer": { - "title": "Truyền tệp", - "transfers": "Transfers", - "new_transfer": "Chuyển nhượng mới", - "upload": "Upload", - "download": "Download", - "direction": "Direction", - "filename": "Filename", - "file_size": "Kích thước tệp", - "mime_type": "MIME Type", - "progress": "Progress", - "status": "Status", - "device": "Thiết bị", - "initiated_by": "Khởi xướng bởi", - "created_at": "Được tạo tại", - "cancel": "Hủy bỏ", - "cancel_confirm": "Bạn có chắc chắn muốn hủy quá trình chuyển này không?", - "download_file": "Tải tập tin xuống", - "browse_files": "Duyệt tập tin", - "select_file": "Chọn tệp", - "select_device": "Chọn thiết bị", - "no_transfers": "Không chuyển tập tin", - "status_pending": "Pending", - "status_active": "Active", - "status_completed": "Completed", - "status_failed": "thất bại", - "status_cancelled": "Cancelled", - "bytes_transferred": "Byte được chuyển", - "chunks": "Chunks", - "transfer_started": "Đã bắt đầu chuyển", - "transfer_completed": "Chuyển hoàn tất", - "transfer_failed": "Chuyển không thành công", - "transfer_cancelled": "Đã hủy chuyển khoản", - "max_file_size": "Kích thước tệp tối đa: 4 GB", - "error_too_large": "Tệp quá lớn", - "error_no_device": "Không có thiết bị nào được chọn", - "error_no_file": "Không có tập tin nào được chọn" - }, - "network": { - "title": "Giám sát mạng", - "targets": "Mục tiêu giám sát", - "add_target": "Add Target", - "edit_target": "Chỉnh sửa mục tiêu", - "delete_target": "Xóa mục tiêu", - "delete_confirm": "Bạn có chắc chắn muốn xóa mục tiêu này?", - "target_name": "Name", - "host": "Host", - "port": "Port", - "url": "URL", - "check_type": "Check Type", - "timeout": "Thời gian chờ (ms)", - "interval": "Khoảng thời gian (ms)", - "enabled": "Đã bật", - "status": "Status", - "last_check": "Last Check", - "last_rtt": "Last RTT", - "rtt_ms": "RTT (ms)", - "status_up": "Up", - "status_down": "Down", - "status_unknown": "Unknown", - "check_now": "Check Now", - "history": "Kiểm tra lịch sử", - "stats": "Statistics", - "total_targets": "Tổng số mục tiêu", - "targets_up": "Targets Up", - "targets_down": "Mục tiêu xuống", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP Port", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "Công cụ mạng", - "ping_tool": "Ping Test", - "tcp_tool": "Kiểm tra cổng TCP", - "http_tool": "HTTP Check", - "dns_tool": "DNS Resolve", - "monitor_start": "Bắt đầu màn hình", - "monitor_stop": "Dừng màn hình", - "monitor_running": "Màn hình đang chạy", - "monitor_stopped": "Màn hình bị dừng", - "no_targets": "Không có mục tiêu giám sát nào đư��c cấu hình", - "no_history": "Không có lịch sử kiểm tra", - "error_code": "Error", - "status_code": "Mã trạng thái HTTP", - "search_targets": "Tìm kiếm mục tiêu...", - "name": "Name", - "tab_targets": "Targets", - "tab_tools": "Tools", - "avg_latency": "Avg Latency", - "type": "Type", - "latency": "Latency", - "check_history": "Kiểm tra lịch sử", - "name_host_required": "Tên và máy chủ là bắt buộc", - "uptime": "Uptime", - "response_time": "Thời gian đáp ứng", - "avg_response": "Phản hồi trung bình", - "charts": "Charts", - "realtime": "Realtime", - "response_time_ms": "Thời gian đáp ứng (ms)", - "uptime_percent": "Uptime %", - "last_24h": "24 giờ qua", - "last_7d": "Last 7 days", - "last_30d": "30 ngày qua" - }, - "dataguard": { - "title": "DataGuard — DLP", - "policies": "Chính sách DLP", - "add_policy": "Thêm chính sách", - "edit_policy": "Chỉnh sửa chính sách", - "delete_policy": "Xóa chính sách", - "delete_confirm": "Bạn có chắc chắn muốn xóa chính sách này?", - "policy_name": "Name", - "policy_description": "Description", - "status": "Status", - "enabled": "Đã bật", - "disabled": "Đã tắt", - "rules": "Rules", - "add_rule": "Add Rule", - "rule_type": "Rule Type", - "rule_type_usb": "Thiết bị USB", - "rule_type_file": "Thao tác với tệp", - "action": "Action", - "action_allow": "Allow", - "action_block": "Block", - "action_log": "Log Only", - "filter": "Filter", - "vid": "ID nhà cung cấp (VID)", - "pid": "ID sản phẩm (PID)", - "serial": "Số sê-ri", - "device_class": "Lớp thiết bị", - "drive_type": "Drive Type", - "file_extensions": "Phần mở rộng tệp", - "events": "DLP Events", - "event_source": "Source", - "event_source_usb": "USB", - "event_source_file": "tập tin", - "event_type": "Event Type", - "event_details": "Details", - "no_policies": "Không có chính sách DLP nào được định cấu hình", - "no_events": "Không có sự kiện DLP nào được ghi lại", - "stats": "Statistics", - "total_events": "Tổng số sự kiện", - "blocked_events": "Blocked", - "logged_events": "Logged", - "usb_events": "USB Events", - "file_events": "Sự kiện tệp", - "device_id": "ID thiết bị", - "policy_matched": "Chính sách phù hợp", - "timestamp": "Timestamp", - "drive_removable": "Removable", - "drive_fixed": "Fixed", - "drive_network": "Network", - "drive_cdrom": "CD-ROM", - "drive_unknown": "Unknown", - "total_policies": "Chính sách tổng thể", - "active_policies": "Chính sách hoạt động", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "Chính sách", - "tab_events": "Events", - "search_policies": "Chính sách tìm kiếm...", - "create_policy": "Tạo chính sách", - "policy_type": "Loại chính sách", - "scope": "Scope", - "events_count": "Events", - "search_events": "Tìm kiếm sự kiện...", - "event_time": "Event Time", - "device": "Thiết bị", - "policy": "Chính sách", - "detail": "Detail", - "scope_help": "ID thiết bị được phân tách bằng dấu phẩy hoặc để trống tất cả", - "scope_all": "Tất cả thiết bị", - "active": "Active", - "type_file_type": "Loại tệp", - "type_clipboard": "Bảng nhớ tạm", - "type_screen_share": "Chia sẻ màn hình", - "type_file_transfer": "Truyền tệp", - "policy_desc": "Mô tả chính sách", - "type_usb": "USB" + "sessions": { + "device": "Thiết bị", + "operator": "Người vận hành", + "duration": "Thời lượng", + "phase": "Giai đoạn", + "amount": "Số tiền" }, "reports": { - "title": "Reports", - "generate": "Tạo báo cáo", - "generate_csv": "Export CSV", - "report_type": "Report Type", - "type_devices": "Tóm tắt thiết bị", - "type_activity": "Tóm tắt hoạt động", - "type_security": "Báo cáo bảo mật", - "type_tickets": "Báo cáo vé", - "type_network": "Báo cáo mạng", - "type_inventory": "Báo cáo tồn kho", - "type_alerts": "Báo cáo cảnh báo", - "saved": "Báo cáo đã lưu", - "save_report": "Lưu báo cáo", - "delete_report": "Xóa báo cáo", - "delete_confirm": "Bạn có chắc chắn muốn xóa báo cáo đã lưu này không?", - "no_saved": "Không có báo cáo nào được lưu", - "report_title": "Title", - "created_by": "Được tạo bởi", - "created_at": "Được tạo tại", - "filters": "Filters", - "date_from": "Từ", - "date_to": "Đến", - "device_filter": "ID thiết bị", - "generated_at": "Được tạo vào lúc", - "section": "Phần dữ liệu", - "total_devices": "Tổng số thiết bị", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "platform_distribution": "Phân phối nền tảng", - "top_applications": "Ứng dụng hàng đầu", - "total_active": "Tổng thời gian hoạt động", - "total_idle": "Tổng thời gian nhàn rỗi", - "dlp_stats": "Thống kê DLP", - "banned_devices": "Thiết bị bị cấm", - "audit_logs": "Audit Logs", - "ticket_stats": "Thống kê vé", - "category_distribution": "Phân phối danh mục", - "priority_distribution": "Phân phối ưu tiên", - "targets_status": "Trạng thái mục tiêu", - "os_distribution": "Phân phối hệ điều hành", - "avg_ram": "Average RAM", - "alert_rules": "Alert Rules", - "recent_alerts": "Cảnh báo gần đây", - "tab_generate": "Tạo báo cáo", - "tab_saved": "Báo cáo đã lưu", - "type_devices_desc": "Tổng quan về tất cả các thiết bị, nền tảng và trạng thái", - "type_activity_desc": "Tóm tắt mức sử dụng ứng dụng và thời gian nhàn rỗi", - "type_security_desc": "Cấm hành động, sự kiện DLP và nhật ký kiểm tra", - "type_tickets_desc": "Thống kê vé và hiệu suất SLA", - "type_network_desc": "Mục tiêu giám sát mạng và dữ liệu thời gian hoạt động", - "type_inventory_desc": "Tóm tắt kiểm kê phần cứng và phần mềm", - "type_alerts_desc": "Quy tắc cảnh báo và lịch sử cảnh báo được kích hoạt", - "report_name": "Report Name", - "format": "Format", - "save": "Lưu báo cáo", - "preview": "Preview", - "download": "Download", - "delete_saved": "Xóa báo cáo", - "raw_json": "Raw JSON" + "session": "Phiên", + "summary": "Tóm tắt", + "date": "Ngày" }, - "tenants": { - "title": "Tenants", - "list": "Tenants", - "add_tenant": "Add Tenant", - "edit_tenant": "Chỉnh sửa người thuê nhà", - "delete_tenant": "Xóa người thuê", - "delete_confirm": "Bạn có chắc chắn muốn xóa người thuê nhà này không? Tất cả các nhiệm vụ của thiết bị và người dùng sẽ bị xóa.", - "name": "Name", - "slug": "Slug", - "contact_name": "Tên liên hệ", - "contact_email": "Email liên hệ", - "max_devices": "Thiết bị tối đa", - "max_devices_hint": "0 = không giới hạn", - "notes": "Notes", - "active": "Active", - "inactive": "Inactive", - "devices": "Thiết bị", - "users": "Users", - "assign_device": "Chỉ định thiết bị", - "assign_devices": "Chỉ định thiết bị", - "remove_device": "Xóa thiết bị", - "assign_user": "Assign User", - "remove_user": "Remove User", - "no_tenants": "Không có đối tượng thuê nào được định cấu hình", - "no_devices": "Không có thiết bị nào được chỉ định cho đối tượng thuê này", - "no_users": "Không có người dùng nào được chỉ định cho đối tượng thuê này", - "stats": "Thống kê người thuê nhà", - "total_devices": "Tổng số thiết bị", - "online_devices": "Thiết bị trực tuyến", - "total_users": "Total Users", - "created_at": "Được tạo tại", - "updated_at": "Cập nhật lúc", - "slug_exists": "Slug của người thuê đã tồn tại", - "total_tenants": "Tổng số người thuê nhà", - "active_tenants": "Người thuê đang hoạt động", - "search": "Tìm kiếm người thuê nhà...", - "create_tenant": "Tạo người thuê", - "detail": "Chi tiết người thuê nhà", - "contact": "Contact", - "enabled": "Đã bật", - "disabled": "Đã tắt", - "max": "max", - "info": "Tenant Info", - "status": "Status" + "contracts": { + "title": "Hợp đồng tổ chức", + "new": "Gán gói", + "org": "Tổ chức", + "package": "Gói", + "remaining": "Phút còn lại", + "status": "Trạng thái", + "actions": "Thao tác", + "suspend": "Tạm ngưng", + "activate": "Kích hoạt", + "select_org": "Chọn tổ chức", + "select_package": "Chọn gói", + "no_orgs": "Không tìm thấy tổ chức", + "no_packages": "Hãy tạo gói trước" }, - "registrations": { - "title": "Device Registrations", - "subtitle": "Manage registration requests from devices discovered via LAN", - "search_placeholder": "Tìm kiếm theo ID thiết bị, tên máy chủ hoặc IP...", - "no_registrations": "No registration requests", - "col_device_id": "ID thiết bị", - "col_hostname": "Hostname", - "col_platform": "Platform", - "col_ip": "IP Address", - "col_version": "Version", - "col_status": "Status", - "col_requested": "Requested", - "col_actions": "Actions", - "status_pending": "Pending", - "status_approved": "Approved", - "status_rejected": "Rejected", - "approve_btn": "Approve", - "approve_confirm": "Bạn có chắc chắn muốn phê duyệt thiết bị này không? Nó sẽ nhận được thông tin xác thực của máy chủ và có thể kết nối tự động.", - "approved_success": "Đăng ký thiết bị đã được phê duyệt thành công", - "reject_btn": "Reject", - "reject_title": "Từ chối đăng ký", - "reject_confirm": "Bạn có chắc chắn muốn từ chối yêu cầu đăng ký này không?", - "reject_reason": "Lý do (tùy chọn)", - "reject_reason_placeholder": "Nhập lý do từ chối...", - "rejected_success": "Đăng ký thiết bị bị từ chối", - "delete_confirm": "Bạn có chắc chắn muốn xóa hồ sơ đăng ký này?", - "deleted_success": "Hồ sơ đăng ký đã bị xóa", - "enrollment_title": "Đăng ký thiết bị", - "enrollment_subtitle": "Yêu cầu đăng ký đang chờ xử lý từ máy khách để bàn BetterDesk", - "enrollment_empty": "Không có yêu cầu đăng ký đang chờ xử lý", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "Tên hiển thị", - "enrollment_display_name_placeholder": "Nhập tên cho thiết bị này...", - "enrollment_sync_mode": "Chế độ đồng bộ", - "enrollment_sync_silent": "Silent — minimal telemetry", - "enrollment_sync_standard": "Standard — balanced sync", - "enrollment_sync_turbo": "Turbo — aggressive sync", - "enrollment_approved_success": "Đã phê duyệt đăng ký thiết bị", - "enrollment_rejected_success": "Đăng ký thiết bị bị từ chối", - "approve_title": "Phê duyệt thiết bị", - "field_name": "Tên thiết bị", - "field_name_placeholder": "Nhập tên cho thiết bị này...", - "field_sync_mode": "Chế độ đồng bộ", - "sync_standard": "Tiêu chuẩn — đồng bộ cân bằng", - "sync_silent": "Im lặng — telemetry tối thiểu", - "sync_turbo": "Turbo — đồng bộ tích cực", - "field_tags": "Thẻ", - "field_tags_placeholder": "Thẻ phân cách bằng dấu phẩy (vd: văn phòng, laptop)...", - "field_tags_existing": "Thẻ hiện có", - "field_tag_add_placeholder": "Thêm thẻ mới...", - "field_tag_add_btn": "Thêm", - "field_groups": "Nhóm thiết bị", - "field_folder": "Thư mục", - "field_folder_none": "Không có thư mục", - "reject_ban_option": "Cấm thiết bị này", - "reject_ban_hint": "Thiết bị sẽ bị chặn và không thể gửi yêu cầu đăng ký mới.", - "banner_open_mode": "Đăng ký đang mở — các RustDesk client mới đăng ký mà không cần phê duyệt của người vận hành. Đặt chế độ Managed trong Cài đặt để dùng hàng chờ này.", - "banner_locked_mode": "Đăng ký bị khóa — chỉ thiết bị liên kết token mới có thể đăng ký. Cần chế độ Managed để người vận hành phê duyệt client chưa biết.", - "enrollment_settings_link": "Cài đặt đăng ký" + "export": { + "csv": "Xuất CSV", + "pdf": "Xuất PDF", + "sessions_csv": "Xuất phiên CSV" }, - "backup": { - "title": "Backup", - "desc": "Tải xuống bản sao lưu đầy đủ cấu hình bảng điều khiển, người dùng, nhóm và cài đặt của bạn. Dữ liệu ngang hàng Go server được bao gồm khi chương trình phụ trợ BetterDesk hoạt động.", - "restore_title": "Restore", - "restore_desc": "Tải lên tệp sao lưu đã tải xuống trước đó để khôi phục cấu hình bảng điều khiển. Chọn phần cần khôi phục bên dưới.", - "stat_users": "Users", - "stat_settings": "Cài đặt", - "stat_folders": "Folders", - "stat_groups": "Nhóm", - "stat_strategies": "Strategies", - "stat_backend": "Backend", - "download": "Tải xuống bản sao lưu", - "creating": "Đang tạo bản sao lưu...", - "download_success": "Đã tải xuống bản sao lưu thành công", - "upload": "Tải lên bản sao lưu", - "restore_confirm": "Bạn có chắc chắn muốn khôi phục từ bản sao lưu này không? Các phần được chọn sẽ bị ghi đè.", - "restore_success": "Sao lưu được khôi phục thành công. Một số thay đổi có thể yêu cầu tải lại trang.", - "restored": "Restored", - "skipped": "Skipped", - "backup_date": "Backup date", - "opt_settings": "Cài đặt bảng điều khiển", - "opt_branding": "Xây dựng thương hiệu/Chủ đề", - "opt_folders": "Thư mục thiết bị", - "opt_groups": "Nhóm người dùng và thiết bị", - "opt_addressbooks": "Sổ địa chỉ", - "opt_users": "Tài khoản người dùng", - "opt_users_warning": "Phá hủy: thay thế TẤT CẢ tài khoản người dùng bằng dữ liệu sao lưu. Bạn có thể đã đăng xuất.", - "no_file": "Không có tập tin sao lưu nào được chọn", - "invalid_json": "Tệp sao lưu không hợp lệ: JSON không hợp lệ", - "invalid_format": "Tệp sao lưu không hợp lệ: không phải là bản sao lưu BetterDesk", - "stat_database": "Engine cơ sở dữ liệu", - "stat_keys": "Đã bao gồm server keys", - "stat_env": "Tệp environment", - "stat_uploads": "Tệp branding", - "restart_required": "Một số thành phần được khôi phục (keys / .env / Go database) cần khởi động lại dịch vụ để có hiệu lực.", - "security_warning": "Bản sao lưu này chứa thông tin bí mật (server keys, environment file, password hashes và 2FA secrets). Lưu trữ an toàn và không chia sẻ.", - "restore_warning": "Khôi phục secrets, environment file hoặc Go server database sẽ ghi đè server identity và cần khởi động lại dịch vụ sau đó.", - "opt_database": "Cơ sở dữ liệu (tất cả bảng)", - "opt_database_hint": "Nhập lại tất cả dữ liệu console. Áp dụng trực tiếp, không cần khởi động lại.", - "opt_uploads": "Tệp branding", - "opt_uploads_hint": "Logo và ảnh đã tải lên.", - "opt_secrets": "Khóa & bí mật máy chủ", - "opt_secrets_warning": "Ghi đè Ed25519 server identity, API key và session secret. Cần khởi động lại dịch vụ.", - "opt_env": "Tệp môi trường (.env)", - "opt_env_warning": "Ghi đè SESSION_SECRET, API key, database DSN, ports và TLS settings. Cần khởi động lại dịch vụ.", - "opt_godb": "Cơ sở dữ liệu máy chủ Go", - "opt_godb_warning": "Ghi đè Go server SQLite database (chỉ SQLite backend). Cần khởi động lại dịch vụ." + "report": { + "title": "Báo cáo công việc", + "subtitle": "Mô tả công việc đã thực hiện trong phiên điều khiển từ xa này.", + "category": "Danh mục", + "ticket_ref": "Tham chiếu ticket", + "summary": "Công việc đã thực hiện", + "skip": "Bỏ qua bây giờ", + "submit": "Gửi báo cáo", + "summary_required": "Tóm tắt là bắt buộc", + "saved": "Đã lưu báo cáo công việc" }, - "cdap": { - "device_detail": "Thiết bị CDAP", - "loading": "Đang tải...", - "loading_widgets": "Đang tải tiện ích thiết bị...", - "load_error": "Không tải được dữ liệu thiết bị", - "connected": "Connected", - "disconnected": "Disconnected", - "device_offline_msg": "Thiết bị hiện đang ngoại tuyến. Giá trị widget có thể cũ.", - "no_widgets": "Không có tiện ích nào", - "no_widgets_desc": "Thiết bị này chưa đăng ký bảng kê khai CDAP với các định nghĩa tiện ích.", - "command_log": "Command Log", - "clear_log": "Clear log", - "confirm_command": "Xác nhận lệnh", - "select_option": "chọn", - "cdap_status": "CDAP Status", - "cdap_enabled": "CDAP Enabled", - "cdap_disabled": "CDAP Disabled", - "cdap_devices": "CDAP Devices", - "cdap_connections": "Active Connections", - "send_command": "Gửi lệnh", - "command_sent": "Lệnh đã được gửi thành công", - "command_failed": "Không gửi được lệnh", - "devices_title": "Thiết bị CDAP", - "devices_subtitle": "Các thiết bị được kết nối thông qua Giao thức ứng dụng thiết bị tùy chỉnh", - "stat_connected": "Connected", - "stat_port": "Port", - "search_devices": "Tìm kiếm thiết bị...", - "no_devices": "Không có thiết bị nào được kết nối", - "no_devices_desc": "Hiện không có thiết bị CDAP nào được kết nối. Các thiết bị sẽ xuất hiện ở đây sau khi chúng kết nối với cổng.", - "gateway_disabled": "Cổng CDAP bị vô hiệu hóa", - "gateway_disabled_desc": "Kích hoạt cổng CDAP bằng cách đặt CDAP_ENABLED=true trong cấu hình máy chủ.", - "gateway_active": "Active", - "toggle_enable": "Enable CDAP", - "toggle_disable": "Vô hiệu hóa CDAP", - "enabled_restart": "Đã bật CDAP. Cần phải khởi động lại máy chủ để áp dụng các thay đổi.", - "disabled_restart": "CDAP bị vô hiệu hóa. Cần phải khởi động lại máy chủ để áp dụng các thay đổi.", - "widgets": "vật dụng", - "type_all": "All", - "type_iot": "IoT", - "type_scada": "SCADA", - "type_os_agent": "OS Agent", - "type_network": "Network", - "type_camera": "Camera", - "type_custom": "Custom", - "active_alerts": "Cảnh báo hoạt động", - "alert_fired": "Alert fired", - "alert_cleared": "Đã xóa thông báo", - "no_alerts": "Không có cảnh báo hoạt động", - "connect_terminal": "Kết nối thiết bị đầu cuối", - "table_search": "Tìm kiếm...", - "just_now": "Just now", - "terminal_connecting": "Đang kết nối với thiết bị...", - "terminal_disconnected": "Disconnected", - "terminal_error": "Kết nối thiết bị đầu cuối không thành công", - "linked_devices": "Thiết bị được liên kết", - "link_device": "Liên kết thiết bị", - "unlink_device": "Unlink", - "no_linked_devices": "Không có thiết bị được liên kết", - "unlink_confirm": "Bạn có chắc chắn muốn hủy liên kết thiết bị này không?", - "link_prompt": "Nhập ID ngang hàng để liên kết với thiết bị này:", - "connect_desktop": "Kết nối máy tính để bàn", - "connect_video": "Kết nối luồng", - "connect_files": "Duyệt tập tin", - "connect_audio": "Kết nối âm thanh", - "upload_file": "Upload", - "desktop_connecting": "Đang kết nối...", - "video_connecting": "Đang kết nối...", - "files_connecting": "Đang kết nối...", - "audio_connecting": "Đang kết nối...", - "audio_streaming": "Streaming", - "clipboard_in": "Đã nhận được bảng nhớ tạm", - "clipboard_out": "Đã gửi bảng nhớ tạm", - "monitor_select": "Chọn màn hình", - "keyframe_request": "Yêu cầu khung hình chính", - "quality_auto": "Chất lượng ô tô" + "empty": { + "packages": "Chưa có gói nào. Tạo gói bằng nút phía trên.", + "contracts": "Chưa có hợp đồng tổ chức. Gán gói cho tổ chức.", + "sessions": "Chưa có phiên tính phí nào.", + "reports": "Chưa có báo cáo công việc." }, - "desktop": { - "switch_mode": "Chế độ máy tính để bàn", - "console_mode": "Chế độ bảng điều khiển", - "loading": "Đang tải...", - "minimize": "Minimize", - "maximize": "Maximize", - "restore": "Restore", - "close": "Đóng", - "widgets_mode": "Widget", - "windows_mode": "Windows", - "wallpaper": "Wallpaper", - "add_widget": "Thêm tiện ích", - "remove_widget": "Xóa tiện ích", - "pop_out_widget": "Pop Out", - "pop_in_widget": "Pop In", - "configure": "Cấu hình", - "search_widgets": "Tìm kiếm các tiện ích...", - "cat_monitoring": "Monitoring", - "cat_devices": "Thiết bị", - "cat_tools": "Tools", - "cat_general": "General", - "notes_placeholder": "Viết ghi chú ở đây...", - "search_placeholder": "Tìm kiếm thi��t bị, trang, cài đặt...", - "search_pages": "Pages", - "search_devices": "Thiết bị", - "search_no_results": "No results", - "exit_desktop": "Thoát khỏi chế độ máy tính để bàn", - "refresh": "Refresh", - "widget_clock": "Clock", - "widget_device_status": "Trạng thái thiết bị", - "widget_server_health": "Thông tin máy chủ", - "widget_system_stats": "Đồng hồ đo thiết bị", - "widget_device_list": "Danh sách thiết bị", - "widget_quick_actions": "Thao tác nhanh", - "widget_recent_activity": "Hoạt động gần đây", - "widget_notes": "Notes", - "widget_network_monitor": "Giám sát mạng", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "Thiết bị CDAP", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "Lưới thiết bị", - "widget_multi_gauge": "Đồng hồ đo máy chủ", - "widget_weekly_chart": "Hoạt động hàng tuần", - "widget_quick_controls": "Điều khiển nhanh", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "Thống kê kết nối", - "widget_weather": "Weather", - "widget_world_clock": "World Clock", - "widget_bookmarks": "Bookmarks", - "widget_user_sessions": "Phiên người dùng", - "widget_alert_feed": "Alert Feed", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "Uptime", - "label_no_devices": "Không có thiết bị", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "Unavailable", - "label_open": "Mở", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "Đặt URL trong cấu hình", - "label_server_uptime": "Thời gian hoạt động của máy chủ", - "label_merged_info": "Đã hợp nhất vào tiện ích Thông tin máy chủ", - "label_with_notes": "Có ghi chú", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "Tổng số thiết bị", - "label_throughput": "Throughput", - "label_active_relays": "Rơle hoạt động", - "label_total_relayed": "Tổng chuyển tiếp", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "Thiết bị lọc...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "Không có thiết bị CDAP", - "action_add_widget": "Thêm tiện ích", - "label_merged_server_info": "Đã hợp nhất vào tiện ích Thông tin máy chủ", - "wp_images": "Images", - "wp_colors": "Màu sắc đồng nhất", - "wp_custom_color": "Màu tùy chỉnh", - "wp_fit_style": "Style", - "wp_fill": "Fill", - "wp_fit": "Fit", - "wp_stretch": "Stretch", - "wp_center": "Center", - "wp_unavailable": "Hình nền không được cài đặt trên máy chủ này.", - "wp_download_hint": "Đặt hình ảnh PNG vào thư mục public/wallpapers/ để cho phép chọn hình nền.", - "widget_calendar": "Calendar", - "widget_process_monitor": "Giám sát quá trình", - "widget_disk_usage": "Disk Usage", - "widget_log_viewer": "Log Viewer", - "widget_speed_test": "Speed Test", - "widget_database_stats": "Thống kê cơ sở dữ liệu", - "widget_docker_containers": "Thùng chứa Docker", - "widget_shell_command": "Lệnh Shell", - "widget_device_map": "Bản đồ thiết bị", - "widget_remote_connect": "Kết nối từ xa", - "label_no_online": "Không có thiết bị trực tuyến", - "label_no_events": "Không có sự kiện nào hôm nay", - "label_event_title": "Tiêu đề sự kiện:", - "label_no_data": "Không có sẵn dữ liệu", - "label_download_speed": "Tốc độ tải xuống", - "label_latency": "Latency", - "label_server": "Máy chủ", - "label_run_test": "Run Test", - "label_testing": "Đang thử nghiệm...", - "label_table": "Table", - "label_rows": "Rows", - "label_last_backup": "Last Backup", - "label_no_containers": "Không có thùng chứa", - "label_docker_unavailable": "Docker không có sẵn", - "label_no_command": "Không có lệnh nào được cấu hình", - "label_no_output": "Chưa có đầu ra", - "label_run": "Run", - "label_presets": "Presets", - "label_save_preset": "Lưu cài đặt trước", - "label_load_preset": "Load Preset", - "label_preset_name": "Tên đặt trước:", - "label_preset_monitoring": "Monitoring", - "label_preset_helpdesk": "Helpdesk", - "label_preset_minimal": "Minimal", - "label_preset_developer": "Developer", - "label_snap_layout": "Snap Layout", - "label_auto_arrange": "Tự động sắp xếp", - "label_zone_layout": "Zone Layout", - "label_2col_equal": "2 Cột (Bằng)", - "label_2col_wide": "2 Cột (60/40)", - "label_3col": "3 Columns", - "label_2x2_grid": "2Ă—2 Grid", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "Nhóm tiện ích", - "ungroup_widgets": "Tách nhóm các widget", - "group_widgets": "Nhóm các Widget đã chọn", - "snap_layouts": "Bố cục chụp nhanh", - "snap_left": "Snap Left", - "snap_right": "Snap Right", - "snap_top_left": "Chụp trên cùng bên trái", - "snap_top_right": "Chụp trên cùng bên phải", - "snap_bottom_left": "Chụp dưới cùng bên trái", - "snap_bottom_right": "Chụp dưới cùng bên phải", - "aero_shake": "Lắc để giảm thiểu người khác", - "zone_resize": "Kéo đường viền để thay đổi kích thước vùng", - "zone_borders": "Đường viền vùng có thể kéo được", - "app_drawer": "Applications", - "search_apps": "Tìm kiếm ứng dụng...", - "edit_shortcuts": "Chỉnh sửa phím tắt", - "widgets": "Widget", - "theme": "Theme", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "Gán gói hiện có", + "submit": "Gán" }, - "desktop_login": { - "click_to_sign_in": "Nhấp vào bất kỳ đâu hoặc nhấn một phím để đăng nhập", - "username_placeholder": "Tên người dùng", - "password_placeholder": "Mật khẩu", - "sign_in": "Sign in", - "verify": "Verify", - "totp_title": "Xác thực hai yếu tố", - "totp_subtitle": "Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn", - "back_to_login": "Quay lại để đăng nhập", - "fill_all_fields": "Vui lòng điền vào tất cả các trường", - "invalid_credentials": "Tên người dùng hoặc mật khẩu không hợp lệ", - "invalid_code": "Mã xác minh không h��p lệ", - "enter_6_digits": "Nhập đầy đủ 6 chữ số", - "network_error": "Network error — check your connection", - "session_expired": "Phiên đã hết hạn. Vui lòng đăng nhập lại." - }, - "tokens": { - "title": "Mã thông báo thiết bị", - "subtitle": "Quản lý mã thông báo đăng ký để cung cấp thiết bị tự động", - "enrollment_mode": "Chế độ đăng ký", - "mode_open": "Mở", - "mode_open_desc": "Bất kỳ thiết bị nào cũng có thể đăng ký mà không cần mã thông báo", - "mode_managed": "Managed", - "mode_managed_desc": "Devices need a valid token to register", - "mode_locked": "Locked", - "mode_locked_desc": "No new device registrations allowed", - "total": "Tổng số token", - "active": "Active", - "used": "Used", - "revoked": "Revoked", - "search_placeholder": "Tìm kiếm mã thông báo...", - "status_pending": "Pending", - "status_active": "Active", - "status_used": "Used", - "status_revoked": "Revoked", - "status_expired": "Expired", - "bulk_generate": "Tạo hàng loạt", - "create": "Tạo mã thông báo", - "edit": "Chỉnh sửa mã thông báo", - "token": "Token", - "name": "Name", - "status": "Status", - "uses": "Uses", - "bound_peer": "Bound Peer", - "expires": "Expires", - "created": "Đã tạo", - "actions": "Actions", - "name_placeholder": "ví dụ: Lô PC văn phòng", - "max_uses": "Max Uses", - "max_uses_hint": "0 = không giới hạn", - "expires_in": "Expires In", - "no_expiration": "Không hết hạn", - "expires_1h": "1 hour", - "expires_24h": "24 hours", - "expires_7d": "7 days", - "expires_30d": "30 days", - "note": "Note", - "note_placeholder": "Ghi chú tùy chọn về mã thông báo này...", - "count": "Count", - "count_range": "Số lượng mã thông báo cần tạo (1-100)", - "name_prefix": "Name Prefix", - "generate": "Generate", - "token_created": "Đã tạo mã thông báo", - "tokens_generated": "Mã thông báo được tạo", - "copy_warning": "Sao chép mã thông báo ngay bây giờ. Nó sẽ không được hiển thị lại.", - "copy_token": "Copy Token", - "copied": "Copied!", - "revoke": "Revoke", - "revoke_confirm": "Bạn có chắc chắn muốn thu hồi mã thông báo này không? Các thiết bị đã đăng ký với nó sẽ không bị ảnh hưởng.", - "revoked_success": "Đã thu hồi mã thông báo thành công", - "no_tokens": "Không tìm thấy mã thông báo nào", - "expired": "Expired", - "never": "Never", - "save": "Lưu", - "cancel": "Hủy bỏ", - "unlimited": "Unlimited" - }, - "tutorial": { - "next": "Tiếp theo", - "prev": "Previous", - "skip": "Skip", - "finish": "Kết thúc", - "close": "Đóng", - "step_of": "{current} của {total}", - "console_sidebar_title": "Thanh bên điều hướng", - "console_sidebar_text": "Truy cập tất cả các mô-đun từ đây. Nhấp vào bất kỳ biểu tượng nào để điều hướng đến phần đó. Thanh bên thích ứng với kích thước màn hình của bạn.", - "console_expand_title": "Mở rộng thanh bên", - "console_expand_text": "Nhấp vào đây để mở rộng thanh bên và xem nhãn đầy đủ cho tất cả các mục điều hướng. Nhấn lần nữa để thu gọn.", - "console_search_title": "Tìm kiếm nhanh", - "console_search_text": "Tìm kiếm thiết bị, cài đặt hoặc hành động một cách nhanh chóng. Nhấn Ctrl+K để làm phím tắt.", - "console_dashboard_title": "Trang tổng quan", - "console_dashboard_text": "Trung tâm trung tâm của bạn hiển thị trạng thái máy chủ, thiết bị trực tuyến và hành động nhanh. Theo dõi nhanh các số liệu quan trọng.", - "console_devices_title": "Quản lý thiết bị", - "console_devices_text": "Xem, tìm kiếm và quản lý tất cả các thiết bị được kết nối. Lọc theo trạng thái, gán thẻ và định cấu hình cài đặt thiết bị riêng lẻ.", - "console_settings_title": "Cài đặt", - "console_settings_text": "Định cấu hình hành vi của máy chủ, tùy chọn bảo mật, nhãn hiệu và quản lý người dùng. Tùy chỉnh BetterDesk để phù hợp với nhu cầu của bạn.", - "console_desktop_title": "Chế độ máy tính để bàn", - "console_desktop_text": "Chuyển sang chế độ máy tính để bàn để có không gian làm việc có cửa sổ với các tiện ích. Hoàn hảo cho bảng điều khiển đa tác vụ và giám sát.", - "console_complete_title": "Bạn đã sẵn sàng!", - "console_complete_text": "Khám phá các danh mục thanh bên để khám phá tất cả các tính năng. Nhấp vào biểu tượng Trợ giúp bất cứ lúc nào để khởi động lại hướng dẫn này.", - "desktop_topbar_title": "Top Bar", - "desktop_topbar_text": "Thanh trên cùng hiển thị đồng hồ, điều khiển nhanh và quyền truy cập vào ngăn kéo ứng dụng. Nhấp vào biểu tượng lưới để duyệt tất cả các ứng dụng.", - "desktop_drawer_title": "App Drawer", - "desktop_drawer_text": "Mở ngăn kéo ứng dụng để tìm kiếm và khởi chạy bất kỳ chức năng nào của bảng điều khiển dưới dạng cửa sổ nổi. Ứng dụng được sắp xếp theo danh mục.", - "desktop_widgets_title": "Trang tổng quan tiện ích", - "desktop_widgets_text": "Không gian làm việc có thể tùy chỉnh của bạn. Các widget hiển thị thông tin trực tiếp và cung cấp khả năng truy cập nhanh vào các tính năng. Kéo để sắp xếp lại.", - "desktop_add_widget_title": "Thêm tiện ích", - "desktop_add_widget_text": "Bấm vào đây để duyệt các vật dụng có sẵn. Chọn từ màn hình giám sát, danh sách thiết bị, ghi chú, v.v.", - "desktop_taskbar_title": "Taskbar", - "desktop_taskbar_text": "Các ứng dụng đang mở sẽ xuất hiện ở đây. Bấm để tập trung hoặc thu nhỏ cửa sổ. Di chuột vào biểu tượng để xem nhãn ứng dụng.", - "desktop_snap_title": "Bố cục chụp nhanh", - "desktop_snap_text": "Kéo các cửa sổ đến các cạnh của màn hình để đưa chúng vào vị trí hoặc di chuột vào nút phóng to để đặt trước bố cục. Hãy thử Aero Shake!", - "desktop_windows_title": "App Windows", - "desktop_windows_text": "Ứng dụng mở trong cửa sổ có thể kéo và thay đổi kích thước. Thu nhỏ, phóng to hoặc đóng từ thanh tiêu đề. Lớp Windows bên trên các vật dụng.", - "desktop_search_title": "Tìm kiếm nhanh", - "desktop_search_text": "Tìm kiếm trên các thiết bị, trang và cài đặt. Nhấn Ctrl+K ở bất cứ đâu để mở tìm kiếm ngay lập tức.", - "desktop_complete_title": "Chế độ máy tính để bàn đã sẵn sàng!", - "desktop_complete_text": "Hãy thử mở các ứng dụng từ ngăn kéo và sắp xếp các cửa sổ cạnh nhau. Sử dụng các cài đặt trước của tiện ích để bố trí bảng điều khiển nhanh chóng.", - "devices_folders_title": "Thư mục thiết bị", - "devices_folders_text": "Sắp xếp các thiết bị vào các thư mục. Bấm vào một thư mục để lọc danh sách. Nhấp chuột phải để đổi tên hoặc xóa.", - "devices_search_title": "Tìm kiếm & Lọc", - "devices_search_text": "Tìm kiếm theo ID, tên máy chủ hoặc nền tảng. Sử dụng các thanh trạng thái để chỉ hiển thị trực tuyến, ngoại tuyến hoặc tất cả các thiết bị.", - "devices_table_title": "Danh sách thiết bị", - "devices_table_text": "Nhấp vào bất kỳ hàng thiết bị nào để biết chi tiết. Sử dụng menu kebab ở bên phải để thực hiện các thao tác nhanh như kết nối, chỉnh sửa thẻ hoặc xóa.", - "devices_complete_title": "Quản lý thiết bị đã sẵn sàng!", - "devices_complete_text": "Kéo thiết bị giữa các thư mục để sắp xếp chúng. Bấm đúp vào một thiết bị để mở bảng chi tiết của nó.", - "settings_tabs_title": "Danh mục cài đặt", - "settings_tabs_text": "Điều hướng giữa các phần Chung, Bảo mật, Giao diện và các phần cấu hình khác.", - "settings_content_title": "Cấu hình", - "settings_content_text": "Mỗi phần chứa các cài đặt máy chủ và bảng điều khiển cụ thể. Những thay đổi được lưu khi bạn nhấp vào Lưu.", - "settings_complete_title": "Tổng quan về cài đặt", - "settings_complete_text": "Kiểm tra cài đặt Bảo mật cho khóa 2FA, API và quản lý người dùng. Truy cập Giao diện để tùy chỉnh giao diện bảng điều khiển.", - "help": "Trợ giúp & Hướng dẫn", - "tour_console": "Tham quan bảng điều khiển", - "tour_desktop": "Tham quan chế độ máy tính để bàn", - "tour_devices": "Tham quan thiết bị", - "tour_settings": "Tham quan cài đặt", - "reset_all": "Đặt lại tất cả hướng dẫn", - "tour_remote": "Tham quan phiên từ xa", - "tour_organization": "Thiết lập tổ chức", - "tour_cdap": "Tổng quan về CDAP", - "tour_chat": "Thông tin cơ bản về trò chuyện", - "remote_toolbar_title": "Thanh công cụ từ xa", - "remote_toolbar_text": "Truy cập các điều khiển hiển thị, đồng bộ hóa clipboard, các phím đặc biệt và cài đặt chất lượng từ thanh công cụ. Chuyển đổi toàn màn hình bằng F11.", - "remote_canvas_title": "Hiển thị từ xa", - "remote_canvas_text": "Đây là màn hình từ xa. Nhấp vào bên trong để bắt đầu điều khiển thiết bị từ xa. Đầu vào chuột và bàn phím được chuyển tiếp tự động.", - "remote_clipboard_title": "Đồng bộ hóa bảng nhớ tạm", - "remote_clipboard_text": "Sao chép và dán văn bản giữa máy tính của bạn và thiết bị từ xa. Sử dụng Ctrl+C / Ctrl+V như bình thường khi lấy nét trên màn hình từ xa.", - "remote_complete_title": "Phiên từ xa đã sẵn sàng!", - "remote_complete_text": "Sử dụng các nút trên thanh công cụ cho các phím đặc biệt (Ctrl+Alt+Del, PrintScreen) và chuyển đổi màn hình. Nhấn Escape hoặc nhấp vào Ngắt kết nối để kết thúc phiên.", - "org_overview_title": "Tổ chức", - "org_overview_text": "Các tổ chức cho phép bạn nhóm người dùng, thiết bị và chính sách. Mỗi tổ chức có quản trị viên, người điều hành và cài đặt riêng.", - "org_create_title": "Tạo tổ chức", - "org_create_text": "Nhấn vào đây để tạo một tổ chức mới. Cung cấp tên, sên và mô tả tùy chọn. Bạn sẽ là chủ sở hữu của tổ chức mới.", - "org_members_title": "Quản lý thành viên", - "org_members_text": "Mời người dùng qua email, chỉ định vai trò (quản trị viên, nhà điều hành, người dùng) và quản lý quyền truy cập. Thành viên có thể thấy các thiết bị được chỉ định cho tổ chức của họ.", - "org_devices_title": "Chỉ định thiết bị", - "org_devices_text": "Thêm thiết bị vào tổ chức. Các thiết bị được chỉ định ở đây sẽ kế thừa các chính sách của tổ chức và hiển thị với các thành viên của tổ chức.", - "org_policies_title": "Chính sách tổ chức", - "org_policies_text": "Đặt các chính sách bảo mật như yêu cầu mật khẩu, thời gian chờ phiên, thực thi 2FA và quy tắc đăng ký thiết bị cho tổ chức.", - "org_complete_title": "Thiết lập tổ chức đã hoàn tất!", - "org_complete_text": "Mời nhóm của bạn và chỉ định thiết bị để bắt đầu sử dụng tính năng quản lý ở phạm vi tổ chức. Chính sách được áp dụng tự động cho tất cả thành viên.", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "Danh bạ & Nhóm", - "chat_contacts_text": "Xem danh bạ và nhóm trò chuyện của bạn. Nhấp vào bất kỳ liên hệ nào để mở cuộc trò chuyện. Các chấm màu xanh biểu thị người dùng trực tuyến.", - "chat_send_title": "Gửi tin nhắn", - "chat_send_text": "Nhập tin nhắn của bạn và nhấn Enter để gửi. Tin nhắn được mã hóa nối đầu khi cả hai bên đều hỗ trợ E2E.", - "chat_file_title": "Chia sẻ tập tin", - "chat_file_text": "Bấm vào biểu tượng đính kèm để chia sẻ tập tin. Các tập tin được mã hóa và có thể lên tới 50 MB.", - "chat_complete_title": "Trò chuyện đã sẵn sàng!", - "chat_complete_text": "Trò chuyện với các nhà khai thác và người dùng cuối trong thời gian thực. Tạo nhóm để liên lạc nhóm. Tất cả các tin nhắn đều hỗ trợ biên nhận đã đọc.", - "disable_tutorials": "Tắt hướng dẫn", - "enable_tutorials": "Bật hướng dẫn" - }, - "help_request": { - "title": "Yêu cầu trợ giúp", - "subtitle": "Quản lý các yêu cầu trợ giúp đến từ máy khách để bàn", - "new_request": "Yêu cầu trợ giúp mới", - "device": "Thiết bị", - "hostname": "Hostname", - "message": "Message", - "status": "Status", - "pending": "Pending", - "accepted": "Accepted", - "resolved": "Resolved", - "accept": "Accept", - "resolve": "Resolve", - "no_requests": "Không có yêu cầu trợ giúp", - "notification": "Đã nhận được yêu cầu trợ giúp từ", - "stats_total": "Total", - "filter_all": "All" - }, - "organizations": { - "title": "Tổ chức", - "create": "Tạo tổ chức", - "edit": "Chỉnh sửa tổ chức", - "detail": "Chi tiết tổ chức", - "name": "Name", - "slug": "Sên (URL-an toàn)", - "logo_url": "Logo URL", - "users": "Users", - "devices": "Thiết bị", - "invitations": "Invitations", - "settings": "Cài đặt", - "add_user": "Add User", - "assign_device": "Chỉ định thiết bị", - "create_invitation": "Tạo lời mời", - "delete_confirm": "Xóa tổ chức này? Thao tác này sẽ xóa tất cả người dùng, thiết bị và cài đặt được liên kết.", - "no_orgs": "Chưa có tổ chức nào", - "no_orgs_hint": "Tạo tổ chức đầu tiên của bạn để bắt đầu quản lý thiết bị và người dùng.", - "connection_policy": "Chính sách kết nối", - "allow_file_transfer": "Cho phép truyền tệp", - "allow_clipboard": "Cho phép bảng nhớ tạm", - "max_session_duration": "Thời lượng phiên tối đa (phút)", - "role_owner": "Owner", - "role_admin": "Quản trị viên", - "role_operator": "Operator", - "role_user": "Thành viên", - "username": "Tên người dùng", - "password": "Mật khẩu", - "display_name": "Tên hiển thị", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "ID thiết bị", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "Người dùng được chỉ định", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "Không có người dùng trong tổ chức này.", - "no_devices": "Không có thiết bị nào được chỉ định cho tổ chức này.", - "no_invitations": "Không có lời mời.", - "user_added": "User added", - "user_removed": "Người dùng đã bị xóa", - "user_updated": "Đã cập nhật vai trò của người dùng", - "device_assigned": "Thiết bị được chỉ định", - "device_unassigned": "Đã hủy cấp phát thiết bị", - "invitation_created": "Đã tạo lời mời", - "settings_saved": "Đã lưu cài đặt", - "org_deleted": "Đã xóa tổ chức", - "confirm_remove_user": "Xóa người dùng này khỏi tổ chức?", - "confirm_unassign_device": "Hủy cấp phát thiết bị này khỏi tổ chức?", - "confirm_delete_org": "Xóa tổ chức này và tất cả dữ liệu liên quan?", - "edit_role": "Chỉnh sửa vai trò", - "raw_settings": "Cài đặt thô", - "key": "Key", - "value": "Value", - "save": "Lưu cài đặt", - "policy_unattended": "Không cần giám sát (tức thì)", - "policy_attended": "Đ�� tham dự (có xác nhận)", - "policy_ask": "Always ask", - "expires_hours": "Hết hạn (giờ)", - "loading_failed": "Không tải được dữ liệu tổ chức", - "name_slug_required": "Tên và sên là bắt buộc", - "org_created": "Đã tạo tổ chức", - "org_updated": "Đã cập nhật tổ chức", - "create_new_user": "Tạo mới", - "add_existing_user": "Thêm hiện có", - "none_available": "none", - "select_user": "Chọn người dùng", - "org_role": "Vai trò của tổ chức", - "link_user_hint": "Người dùng được chọn sẽ được liên kết với tổ chức này bằng thông tin xác thực tài khoản máy chủ của họ.", - "no_available_users": "Tất cả người dùng máy chủ đã được liên kết với tổ chức này.", - "user_linked": "Người dùng được liên kết với tổ chức" - }, - "chat": { - "e2e_enabled": "Mã hóa đầu cuối", - "e2e_establishing": "Thiết lập kênh an toàn...", - "e2e_established": "Kênh an toàn được thiết lập", - "e2e_unsupported": "Mã hóa E2E không được hỗ trợ trong trình duyệt này", - "typing_indicator": "đang gõ...", - "read_receipt": "Read", - "delivered": "Delivered", - "file_share": "tập tin", - "file_too_large": "Tệp quá lớn (tối đa 50MB)", - "file_encrypted": "Truyền tập tin được mã hóa", - "presence_online": "Online", - "presence_away": "Away", - "presence_busy": "Busy", - "presence_offline": "Offline", - "key_rotation": "Đã xoay khóa bảo mật", - "new_message": "New message", - "title": "Chat", - "contacts": "Contacts", - "groups": "Nhóm", - "no_contacts": "Chưa có địa chỉ liên hệ nào", - "no_groups": "Chưa có nhóm nào", - "no_messages": "Chưa có tin nhắn nào", - "no_results": "Không tìm thấy kết quả nào", - "select_conversation": "Chọn một cuộc trò chuyện để bắt đầu trò chuyện", - "type_message": "Nhập tin nhắn...", - "send": "Gửi", - "attach_file": "Đính kèm tập tin", - "emoji": "Emoji", - "search_messages": "Tìm kiếm tin nhắn", - "create_group": "Tạo nhóm", - "group_name": "Tên nhóm", - "group_members": "Thành viên", - "cancel": "Hủy bỏ", - "create": "Tạo", - "members": "thành viên", - "today": "Today", - "yesterday": "Yesterday", - "react": "React", - "my_presence": "My status", - "search_placeholder": "Tìm kiếm danh bạ và tin nhắn", - "select_conversation_hint": "Chọn cuộc trò chuyện để xem tin nhắn", - "info": "Info", - "group_name_placeholder": "Nhập tên nhóm" - }, - "toast": { - "device_connected": "Đã kết nối thiết bị", - "device_disconnected": "Đã ngắt kết nối thiết bị", - "session_started": "Phiên từ xa đã bắt đầu", - "session_ended": "Phiên từ xa đã kết thúc", - "file_upload_complete": "Tải lên tệp hoàn tất", - "settings_saved": "Đã lưu cài đặt", - "error_generic": "Đã xảy ra lỗi", - "connection_lost": "Mất kết nối", - "reconnecting": "Đang kết nối lại..." - }, - "theme": { - "dark": "Dark", - "light": "Light", - "auto": "System", - "title": "Theme" - }, - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "toolkit": { - "title": "Toolkit", - "subtitle": "Tiện ích quản trị và công cụ chẩn đoán", - "cat_network": "Network", - "cat_crypto": "Crypto", - "cat_encoding": "Encoding", - "cat_system": "System", - "host": "Host", - "port": "Port", - "domain": "Domain", - "run": "Run", - "generate": "Generate", - "encode": "Encode", - "decode": "Decode", - "send": "Gửi", - "refresh": "Refresh", - "algorithm": "Algorithm", - "input_text": "Input Text", - "enter_text": "Nhập văn bản...", - "length": "Length", - "options": "Options", - "source": "Source", - "lines": "Lines", - "log_console": "Console", - "log_go": "Đi máy chủ", - "mac_address": "MAC Address", - "broadcast": "Broadcast", - "ping_title": "Ping", - "ping_desc": "Kiểm tra khả năng tiếp cận và độ trễ của máy chủ", - "tcp_title": "Kiểm tra cổng TCP", - "tcp_desc": "Kiểm tra kết nối cổng TCP", - "ssl_title": "Thanh tra SSL", - "ssl_desc": "Kiểm tra chi tiết chứng chỉ SSL/TLS", - "http_title": "HTTP Kiểm tra sức khỏe", - "http_desc": "Xác minh trạng thái điểm cuối HTTP", - "dns_title": "DNS Lookup", - "dns_desc": "Phân giải tên máy chủ thành địa chỉ IP", - "whois_title": "DNS Records", - "whois_desc": "Truy vấn bản ghi A, AAAA, MX, TXT, NS", - "speed_title": "Speed Test", - "speed_desc": "Đo băng thông tải xuống", - "run_speed_test": "Chạy kiểm tra tốc độ", - "wol_title": "Wake-on-LAN", - "wol_desc": "Gửi gói ma thuật để đánh thức thiết bị", - "wol_sent": "Gói ma thuật đã được gửi", - "hash_title": "Trình tạo hàm băm", - "hash_desc": "Tạo băm mật mã", - "password_title": "Trình tạo mật khẩu", - "password_desc": "Tạo mật khẩu ngẫu nhiên an toàn", - "jwt_title": "JWT Decoder", - "jwt_desc": "Giải mã và kiểm tra Mã thông báo web JSON", - "jwt_token": "JWT Token", - "base64_title": "Base64", - "base64_desc": "Mã hóa hoặc giải mã dữ liệu Base64", - "url_title": "URL Encoder", - "url_desc": "Mã hóa hoặc giải mã các thành phần URL", - "processes_title": "Danh sách quy trình", - "processes_desc": "Xem các tiến trình hệ thống đang chạy", - "disk_title": "Disk Usage", - "disk_desc": "Xem mức sử dụng phân vùng đĩa", - "db_title": "Thống kê cơ sở dữ liệu", - "db_desc": "Xem thống kê bảng cơ sở dữ liệu", - "docker_title": "Thùng chứa Docker", - "docker_desc": "Xem các container Docker đang chạy", - "logs_title": "Log Viewer", - "logs_desc": "Xem đầu ra nhật ký gần đây", - "ip_address": "IP", - "latency": "Latency", - "ttl": "TTL", - "status": "Status", - "resolved": "Resolved", - "subject": "Subject", - "issuer": "Issuer", - "valid_from": "Hợp lệ từ", - "valid_to": "Hợp lệ với", - "days_left": "Days Left", - "days": "days", - "protocol": "Protocol", - "cipher": "Cipher", - "alt_names": "SANs", - "chain": "Chain", - "record_type": "Type", - "record_value": "Value", - "hash_value": "Hash", - "entropy": "Entropy", - "very_strong": "Very Strong", - "strong": "Strong", - "weak": "Weak", - "expiry": "Expiry", - "expired": "Expired", - "valid": "Valid", - "process_name": "Name", - "db_type": "Type", - "db_size": "Size", - "table_name": "Table", - "row_count": "Rows", - "no_data": "Không có sẵn dữ liệu", - "no_docker": "Không tìm thấy vùng chứa Docker hoặc không có Docker", - "no_logs": "Không có dòng nhật ký nào" - }, - "policies": { - "title": "Chính sách tổ chức", - "subtitle": "Quản lý các chính sách bảo mật, kết nối và tính năng cho tổ chức của bạn", - "select_org": "Tổ chức", - "select_org_placeholder": "Chọn tổ chức...", - "select_org_first": "Chọn một tổ chức để xem nhật ký kiểm tra chính sách.", - "configured": "Configured", - "connection_title": "Chính sách kết nối", - "connection_desc": "Kiểm soát cách thiết lập phiên từ xa", - "connection_mode": "Chế độ kết nối", - "mode_attended": "Đã tham dự (yêu cầu sự chấp thuận của người dùng)", - "mode_unattended": "Không cần giám sát (luôn cho phép)", - "mode_ask": "Always Ask", - "max_session": "Thời lượng phiên tối đa (phút)", - "idle_lock": "Thời gian chờ khóa nhàn rỗi (phút)", - "wallpaper_policy": "Hình nền trong phiên", - "wallpaper_show": "Show", - "wallpaper_hide_session": "Ẩn trong phiên", - "wallpaper_hide_always": "Always hide", - "features_title": "Chính sách tính năng", - "features_desc": "Bật hoặc tắt các tính năng cụ thể cho thiết bị", - "allow_file_transfer": "Cho phép truyền tệp", - "allow_clipboard": "Cho phép đồng bộ hóa bảng nhớ tạm", - "allow_audio": "Cho phép truyền phát âm thanh", - "allow_recording": "Cho phép ghi phiên", - "security_title": "Chính sách bảo mật", - "security_desc": "Thực thi các yêu cầu bảo mật cho các thiết bị của tổ chức", - "require_2fa": "Yêu cầu 2FA cho quyền truy cập không giám sát", - "password_min_length": "Độ dài mật khẩu tối thiểu", - "password_require_special": "Yêu cầu ký tự đặc biệt", - "password_max_age": "Tuổi tối đa của mật khẩu (ngày, 0=không bao giờ)", - "allowed_operators": "Vai trò của người vận hành được phép (được phân tách bằng dấu phẩy)", - "network_title": "Chính sách mạng", - "network_desc": "Kiểm soát máy chủ chuyển tiếp và kết nối trực tiếp", - "block_direct_p2p": "Chặn P2P trực tiếp (rơle lực)", - "allowed_relays": "Máy chủ chuyển tiếp được phép (một trên mỗi dòng)", - "ip_allowlist": "Danh sách IP cho phép (CIDR, một danh sách trên mỗi dòng)", - "update_title": "Chính sách cập nhật", - "update_desc": "Kiểm soát cập nhật tự động và các kênh cập nhật", - "auto_update": "Bật tự động cập nhật", - "update_channel": "Cập nhật kênh", - "audit_title": "Thay đổi chính sách", - "audit_desc": "Lịch sử thay đổi chính sách gần đây", - "no_audit": "Không có thay đổi chính sách nào được ghi lại.", - "save_success": "Chính sách đã được lưu thành công", - "save_failed": "Không lưu được chính sách", - "load_failed": "Không tải được chính sách", - "block_direct_p2p_hint": "Áp dụng cho các thiết bị trong tổ chức này. Mặc định toàn cục nằm trong Cài đặt → Chiến lược kết nối." - }, - "attestation": { - "title": "Chứng thực thiết bị", - "subtitle": "Giám sát xác minh danh tính thiết bị và dấu vân tay phần cứng", - "verified": "Verified", - "pending": "Pending", - "failed": "thất bại", - "device_list": "Hồ sơ chứng thực thiết bị", - "device_list_desc": "Dấu vân tay phần cứng và trạng thái xác minh danh tính", - "col_device": "ID thiết bị", - "col_hostname": "Hostname", - "col_fingerprint": "Fingerprint", - "col_status": "Status", - "col_last_check": "Last Check", - "col_actions": "Actions", - "no_records": "Không tìm thấy hồ sơ chứng thực.", - "verify_success": "Thiết bị được đánh dấu là đã xác minh", - "verify_failed": "Không thể xác minh thiết bị", - "revoke_success": "Chứng thực thiết bị đã bị thu hồi", - "revoke_failed": "Không thể thu hồi chứng thực" - }, - "fleet": { - "title": "Quản lý đội tàu", - "tab_resources": "Resources", - "tab_tasks": "Tasks", - "tab_builder": "Trình tạo quy trình làm việc", - "tab_compliance": "Compliance", - "res_title": "Bản đồ tài nguyên", - "res_all_types": "All Types", - "res_type_printer": "Printer", - "res_type_network_drive": "Ổ đĩa mạng", - "res_type_dns": "Máy chủ DNS", - "res_type_proxy": "Proxy", - "res_type_vpn": "VPN", - "res_add": "Thêm tài nguyên", - "res_name": "Tên tài nguyên", - "res_type": "Type", - "res_address": "Địa chỉ/Đường dẫn", - "res_target": "Target", - "res_scope": "Scope", - "res_scope_org": "Tổ chức", - "res_scope_group": "Nhóm", - "res_scope_device": "Thiết bị", - "res_scope_value": "Scope Value", - "res_status": "Status", - "res_active": "Active", - "res_inactive": "Inactive", - "res_no_data": "Không tìm thấy tài nguyên nào. Nhấp vào 'Thêm tài nguyên' để tạo một tài nguyên.", - "res_confirm_delete": "Bạn có chắc chắn muốn xóa tài nguyên này?", - "task_title": "Lập lịch tác vụ", - "task_all_status": "All Status", - "task_status_pending": "Pending", - "task_status_running": "Running", - "task_status_success": "Success", - "task_status_failed": "thất bại", - "task_search": "Search tasks…", - "task_create": "Tạo nhiệm vụ", - "task_name": "Task Name", - "task_type": "Type", - "task_type_script": "Script", - "task_type_install": "Install", - "task_type_update": "cập nhật", - "task_type_restart": "Khởi động lại", - "task_type_deploy": "Deploy", - "task_type_scan": "Scan", - "task_targets": "Targets", - "task_targets_help": "ID thiết bị hoặc tên nhóm, được phân tách bằng dấu phẩy", - "task_schedule": "Schedule", - "task_schedule_once": "Once", - "task_schedule_cron": "Cron", - "task_schedule_interval": "Interval", - "task_schedule_value": "Giá trị lịch trình", - "task_script": "Tập lệnh/Lệnh", - "task_retries": "Retries", - "task_timeout": "Timeout (s)", - "task_last_run": "Last Run", - "task_no_data": "Không tìm thấy nhiệm vụ nào. Nhấp vào 'Tạo tác vụ' để bắt đầu.", - "task_confirm_delete": "Bạn có chắc chắn muốn xóa tác vụ này không?", - "task_output": "Task Output", - "task_retry": "Retry", - "builder_title": "Trình tạo quy trình làm việc trực quan", - "builder_select_workflow": "Select workflow…", - "builder_new": "New", - "builder_save": "Lưu", - "builder_export": "Export", - "builder_execute": "Execute", - "builder_dry_run": "Dry Run", - "builder_triggers": "Triggers", - "builder_conditions": "Conditions", - "builder_actions": "Actions", - "builder_results": "Results", - "builder_transforms": "Transforms", - "builder_properties": "Properties", - "builder_no_selection": "Chọn một nút để chỉnh sửa thuộc tính của nó.", - "builder_node_trigger_manual": "Kích hoạt thủ công", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "Trình kích hoạt sự kiện", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "Khởi động lại Svc", - "builder_node_action_file_deploy": "Triển khai tệp", - "builder_node_action_message": "Gửi tin nhắn", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "Gửi thông báo", - "builder_node_result_chain": "Quy trình làm việc của chuỗi", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "workflow_name": "Tên quy trình làm việc:", - "comp_title": "Tuân thủ phần mềm", - "comp_compliant": "Compliant", - "comp_warning": "Warning", - "comp_critical": "Critical", - "comp_score": "Avg. Score", - "comp_device": "Thiết bị", - "comp_hostname": "Hostname", - "comp_os": "OS", - "comp_score_col": "Score", - "comp_issues": "Issues", - "comp_last_scan": "Last Scan", - "comp_scan": "Scan", - "comp_scan_all": "Scan All", - "comp_remediate": "Remediate", - "comp_remediate_confirm": "Chạy tính năng tự động khắc phục trên thiết bị này?", - "comp_no_data": "Không có sẵn dữ liệu tuân thủ. Chạy quét để bắt đầu.", - "save": "Lưu", - "cancel": "Hủy bỏ", - "close": "Đóng", - "edit": "Chỉnh sửa", - "delete": "Xóa", - "actions": "Actions", - "all_orgs": "Tất cả các tổ chức", - "select_org_placeholder": "Select organization�", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "Ổ đĩa mạng", - "type_dns": "Máy chủ DNS", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "Thêm tài nguyên", - "edit_resource": "Chỉnh sửa tài nguyên", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "Địa chỉ/Đường dẫn", - "scope_org": "Tổ chức", - "scope_group": "Nhóm", - "scope_device": "Thiết bị", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "Bạn có chắc chắn muốn xóa mục này?", - "all_statuses": "Tất cả trạng thái", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "thất bại", - "search_tasks": "Search tasks�", - "create_task": "Tạo nhiệm vụ", - "edit_task": "Chỉnh sửa tác vụ", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "Triển khai tệp", - "task_type_registry": "Registry", - "target_devices": "Thiết bị mục tiêu", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "Tập lệnh/Lệnh", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "Đang tải", - "no_output": "Không có đầu ra", - "error_loading": "Lỗi tải dữ liệu", - "select_workflow": "Select workflow�", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "Kích hoạt thủ công", - "node_schedule": "Schedule", - "node_event": "Trình kích hoạt sự kiện", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "Khởi động lại Svc", - "node_file_deploy": "Triển khai tệp", - "node_send_message": "Gửi tin nhắn", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "Gửi thông báo", - "node_chain": "Quy trình làm việc của chuỗi", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "Tất cả các tổ chức", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "Thiết bị", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "Chạy tính năng tự động khắc phục trên thiết bị này?" - }, - "scaling": { - "title": "Quản lý mở rộng quy mô và chuyển tiếp", - "tab_overview": "Tổng quan", - "tab_relays": "Relay Nodes", - "tab_rules": "Quy tắc bài tập", - "tab_capacity": "Lập kế hoạch năng lực", - "arch_title": "Kiến trúc mạng", - "arch_loading": "Đang tải sơ đồ kiến trúc...", - "stat_relay_nodes": "Relay Nodes", - "stat_total_devices": "Tổng số thiết bị", - "stat_active_sessions": "Phiên hoạt động", - "stat_bandwidth": "Tổng băng thông", - "relay_health": "Sức khỏe chuyển tiếp", - "no_relays": "Không có nút chuyển tiếp nào được cấu hình. Thêm nút chuyển tiếp đầu tiên của bạn để phân phối tải.", - "relay_search": "Rơle tìm kiếm...", - "relay_add": "Thêm nút chuyển tiếp", - "relay_edit": "Chỉnh sửa nút chuyển tiếp", - "col_name": "Name", - "col_address": "Address", - "col_location": "Location", - "col_devices": "Thiết bị", - "col_sessions": "Phiên", - "col_bandwidth": "Bandwidth", - "col_status": "Status", - "col_actions": "Actions", - "col_priority": "Priority", - "col_rule_name": "Rule Name", - "col_match": "Match", - "col_target_relay": "Rơle mục tiêu", - "col_fallback": "Fallback", - "status_online": "Online", - "status_degraded": "Degraded", - "status_offline": "Offline", - "status_enabled": "Đã bật", - "status_disabled": "Đã tắt", - "confirm_delete_relay": "Bạn có chắc chắn muốn xóa nút chuyển tiếp này không?", - "confirm_delete_rule": "Bạn có chắc chắn muốn xóa quy tắc chuyển nhượng này không?", - "rules_hint": "Quy tắc phân công xác định máy chủ chuyển tiếp nào xử lý các nhóm thiết bị cụ thể. Các quy tắc được đánh giá theo mức độ ưu tiên (thấp nhất trước).", - "rule_add": "Add Rule", - "rule_edit": "Chỉnh sửa quy tắc", - "rule_match_type": "Match Type", - "match_subnet": "Subnet", - "match_group": "Nhóm thiết bị", - "match_tag": "Thẻ thiết bị", - "match_location": "Location", - "rule_match_value": "Match Value", - "fallback_master": "Máy chủ chính", - "fallback_nearest": "Rơle gần nhất", - "relay_max_sessions": "Số phiên tối đa", - "relay_max_bandwidth": "Băng thông tối đa (Mbps)", - "cap_tiers": "Cấp công suất", - "cap_loading": "Đang tải dữ liệu dung lượng...", - "cap_recommendations": "Recommendations", - "cap_no_recs": "Không có khuyến nghị có sẵn.", - "cap_planning": "Quy hoạch cơ sở hạ tầng", - "cap_config": "Cấu hình", - "cap_max_devices": "Thiết bị tối đa", - "cap_max_sessions": "Số phiên tối đa", - "cap_current": "Current", - "cap_utilization": "Utilization", - "cap_tier_devices": "Dung lượng thiết bị", - "cap_tier_sessions": "Dung lượng phiên", - "cap_tier_bandwidth": "Dung lượng băng thông", - "cap_single_sqlite": "Máy chủ đơn (SQLite)", - "cap_single_pg": "Máy chủ đơn (PostgreSQL)", - "cap_master_3": "Thạc sĩ + 3 Rơle", - "cap_master_10": "Thạc sĩ + 10 Rơle", - "rec_no_relays": "Không có nút chuyển tiếp nào được cấu hình. Hãy cân nhắc việc thêm các nút chuyển tiếp để có hiệu suất và khả năng dự phòng tốt hơn.", - "rec_devices_high": "Mức độ sử dụng thiết bị cao. Xem xét thêm nhiều nút chuyển tiếp để phân phối tải.", - "rec_sessions_high": "Dung lượng phiên sắp đạt đến giới hạn. Xem xét nâng cấp cơ sở hạ tầng chuyển tiếp.", - "rec_cpu_high": "Một số nút chuyển tiếp báo cáo mức sử dụng CPU cao. Xem xét cân bằng tải hoặc nâng cấp công suất.", - "rec_all_good": "Tất cả các hệ thống hoạt động trong các thông số bình thường. Không cần hành động.", - "save": "Lưu", - "cancel": "Hủy bỏ", - "edit": "Chỉnh sửa", - "delete": "Xóa", - "close": "Đóng", - "no_rules": "Không có quy tắc phân công.", - "relays_info_banner": "Danh sách này là thông tin. Các máy chủ chuyển tiếp thực sự được khách hàng sử dụng được định cấu hình thông qua biến môi trường RELAY_SERVERS trên máy chủ BetterDesk.", - "relay_name_address_required": "Tên và địa chỉ là bắt buộc.", - "relay_save_failed": "Không lưu được nút chuyển tiếp.", - "relay_delete_failed": "Không thể xóa nút chuyển tiếp.", - "relay_saved": "Đã lưu nút chuyển tiếp.", - "relay_deleted": "Nút chuyển tiếp đã bị xóa.", - "rule_name_value_required": "Tên quy tắc và giá trị khớp là bắt buộc.", - "rule_save_failed": "Không lưu được quy tắc.", - "rule_delete_failed": "Không xóa được quy tắc.", - "rule_saved": "Đã lưu quy tắc.", - "rule_deleted": "Đã xóa quy tắc." - }, - "cross_platform": { - "title": "Khả năng tương thích đa nền tảng", - "tab_matrix": "Ma trận tương thích", - "tab_distribution": "Distribution", - "tab_protocols": "Protocols", - "tab_limitations": "Limitations", - "matrix_hint": "Ma trận hỗ trợ tính năng trên tất cả các nền tảng được hỗ trợ. Xanh = hỗ trợ đầy đủ, vàng = một phần, xám = không có, xanh = đã lên kế hoạch.", - "col_feature": "Feature", - "legend_full": "Hỗ trợ đầy đủ", - "legend_partial": "Hỗ trợ một phần", - "legend_none": "Không có sẵn", - "legend_planned": "Planned", - "platform_breakdown": "Phân tích nền tảng", - "arch_breakdown": "Phân tích kiến trúc", - "version_breakdown": "Phân tích phiên bản", - "summary": "Summary", - "total_devices": "Tổng số thiết bị", - "unique_platforms": "Platforms", - "unique_archs": "Architectures", - "unique_versions": "Phiên bản máy khách", - "no_devices": "Chưa có thiết bị nào được đăng ký.", - "protocols_hint": "Đàm phán khả năng giao thức đảm bảo mỗi khách hàng chỉ nhận được các tính năng mà nó hỗ trợ. Máy chủ điều chỉnh hành vi dựa trên khả năng được báo cáo.", - "capability_negotiation": "Năng lực đàm phán", - "codec_support": "Hỗ trợ Codec (Thiết bị trực tuyến)", - "feature_support": "Hỗ trợ tính năng (Thiết bị trực tuyến)", - "no_codec_data": "Không có dữ liệu codec có sẵn từ các thiết bị trực tuyến.", - "no_feature_data": "Không có dữ liệu tính năng có sẵn từ các thiết bị trực tuyến.", - "protobuf_schema": "Lược đồ Protobuf của ClientCapabilities", - "diagram_client": "Client", - "diagram_server": "Máy chủ BetterDesk", - "diagram_peer": "Ngang hàng từ xa", - "limitations_hint": "Mỗi nền tảng đều có những hạn chế cụ thể ảnh hưởng đến các tính năng có sẵn. Xem lại những hạn chế này khi lập kế hoạch triển khai.", - "feat_desktop_client": "Máy khách để bàn", - "feat_background_agent": "Tác nhân nền", - "feat_remote_target": "Mục tiêu từ xa", - "feat_screen_capture": "Chụp màn hình", - "feat_input_injection": "Tiêm đầu vào", - "feat_file_transfer": "Truyền tệp", - "feat_clipboard_sync": "Đồng bộ hóa bảng nhớ tạm", - "feat_audio_streaming": "Truyền phát âm thanh", - "feat_chat": "Chat", - "feat_h264": "H.264 Codec", - "feat_vp9": "VP9 Codec", - "feat_av1": "AV1 Codec", - "feat_cdap_agent": "CDAP Agent", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "Web Browser", - "platform_chromeos": "ChromeOS", - "status_production": "Production", - "status_testing": "Testing", - "status_planned": "Planned", - "status_limited": "Limited", - "status_experimental": "Experimental", - "limit_win_uac": "Cần có độ cao UAC để cài đặt dịch vụ và đưa dữ liệu đầu vào vào máy tính để bàn an toàn.", - "limit_win_service": "Chạy dưới dạng dịch vụ NSSM; yêu cầu đặc quyền của Quản trị viên để cài đặt.", - "limit_win_firewall": "Windows Quy tắc tường lửa phải cho phép các cổng 21115-21119 cho các kết nối chuyển tiếp.", - "limit_linux_wayland": "Bộ tổng hợp Wayland hạn chế chụp màn hình theo chương trình; Cần có cổng PipeWire API.", - "limit_linux_pipewire": "Việc thu âm cần có PipeWire; Dự phòng PulseAudio có sẵn nhưng bị hạn chế.", - "limit_linux_arm": "Bản dựng ARM64 có sẵn; một số codec có thể sử dụng giải mã phần mềm (chậm hơn).", - "limit_mac_screen": "Cần có quyền Ghi màn hình trong Tùy chọn hệ thống > Quyền riêng tư & bảo mật.", - "limit_mac_signing": "Đại lý phải được ký bằng ID nhà phát triển của Apple để phân phối.", - "limit_mac_notarize": "Yêu cầu công chứng đối với macOS Gatekeeper (phân phối không phải trên App Store).", - "limit_android_projection": "MediaProjection API cần có sự đồng ý của người dùng cho mỗi phiên chụp màn hình.", - "limit_android_accessibility": "Việc chèn đầu vào yêu cầu AccessibilityService; bị hạn chế trong Android 14+.", - "limit_android_battery": "Dịch vụ nền bị giới hạn bởi chế độ Doze; có thể yêu cầu miễn trừ tối ưu hóa pin.", - "limit_ios_capture": "Apple cấm chụp màn hình nền; chế độ chỉ dành cho người xem được hỗ trợ.", - "limit_ios_input": "Không được phép tiêm đầu vào; chỉ xem và trò chuyện từ xa.", - "limit_ios_appstore": "Chỉ phân phối qua App Store; TestFlight để thử nghiệm beta.", - "limit_web_https": "WebCodecs API và WebRTC yêu cầu HTTPS; HTTP quay trở lại JMuxer (codec giới hạn).", - "limit_web_codec": "Hỗ trợ Codec tùy thuộc vào trình duyệt; H.264 được hỗ trợ rộng rãi, VP9/AV1 có nhiều loại khác nhau.", - "limit_web_performance": "Hiệu suất bị giới hạn bởi hộp cát trình duyệt; không có khả năng tăng tốc phần cứng trực tiếp.", - "limit_chrome_crostini": "Chỉ hỗ trợ đại lý đầy đủ trong vùng chứa Crostini Linux.", - "limit_chrome_pwa": "Chế độ PWA cung cấp các tính năng chỉ dành cho web; không có khả năng đại lý bản địa.", - "limit_chrome_input": "Việc tiêm đầu vào không được hỗ trợ bên ngoài vùng chứa Crostini.", - "feat_session_recording": "Ghi phiên", - "feat_multi_monitor": "Đa màn hình", - "feat_unattended_access": "Truy cập không có người giám sát", - "limit_win_virtual_account": "Dịch vụ chạy dưới tài khoản ảo cách ly thay vì LocalSystem; đường dẫn log tùy chỉnh có thể cần điều chỉnh ACL.", - "limit_linux_unprivileged": "Dịch vụ chạy dưới tài khoản 'betterdesk' không có đặc quyền chuyên dụng với systemd hardening (NoNewPrivileges, ProtectSystem=strict)." - }, - "security_audit": { - "title": "Kiểm tra an ninh", - "tab_overview": "Tổng quan", - "tab_events": "Sự kiện kiểm toán", - "tab_hardening": "Hardening", - "tab_vulnerabilities": "Vulnerabilities", - "security_score": "Điểm bảo mật", - "failed_logins": "Đăng nhập thất bại (24h)", - "active_bans": "Active Bans", - "api_keys": "API Keys", - "old_keys": "Chìa khóa cũ (>90d)", - "security_checks": "Kiểm tra bảo mật", - "tls_status": "TLS Status", - "pass": "Pass", - "warning": "Warning", - "fail": "Fail", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "WebSocket An toàn", - "enabled": "Đã bật", - "disabled": "Đã tắt", - "all_events": "All Events", - "event_login_failed": "Đăng nhập không thành công", - "event_login_success": "Đăng nhập thành công", - "event_peer_banned": "Peer Banned", - "event_ip_banned": "IP Banned", - "event_config_changed": "Cấu hình đã thay đổi", - "event_key_created": "Đã tạo khóa", - "refresh": "Refresh", - "col_time": "Time", - "col_action": "Action", - "col_actor": "Actor", - "col_target": "Target", - "col_ip": "IP Address", - "col_details": "Details", - "no_events": "Không tìm thấy sự kiện kiểm tra nào.", - "hardening_hint": "Ưu tiên tăng cường bảo mật cho việc triển khai BetterDesk của bạn. Các mục được sắp xếp theo mức độ nghiêm trọng.", - "no_hardening": "Không có vật phẩm làm cứng có sẵn.", - "vuln_hint": "Kết quả quét lỗ hổng phụ thuộc. Chạy kiểm tra npm thường xuyên để giữ an toàn cho các phần phụ thuộc.", - "no_vulns": "Không tìm thấy lỗ hổng nào. Sự phụ thuộc của bạn được an toàn." - }, - "languages": { - "title": "Quản lý ngôn ngữ", - "total_languages": "Tổng số ngôn ngữ", - "fully_translated": "Đã dịch hoàn toàn", - "needs_review": "Cần xem xét", - "reference_keys": "Khóa tham khảo", - "no_languages": "Không tìm thấy tập tin ngôn ngữ.", - "badge_reference": "Reference", - "badge_review": "Cần xem xét", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "Xem thiếu", - "fix_missing": "Fix Missing", - "missing_keys_for": "Thiếu chìa khóa cho", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "và {n} thêm...", - "all_keys_present": "Tất cả các phím đều có mặt!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "Các khóa còn thiếu trong {code} phải được dịch thủ công.", - "no_fix_needed": "Không thiếu phím nào để sửa." - }, - "resource_control": { - "title": "Kiểm soát tài nguyên", - "tab_overview": "Tổng quan", - "tab_usb": "USB Control", - "tab_optical": "Ổ đĩa quang", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "Hạn ngạch tài nguyên", - "compliance_by_category": "Tuân thủ theo danh mục", - "device_compliance": "Tuân thủ thiết bị", - "search_devices": "Tìm kiếm thiết bị...", - "col_device": "Thiết bị", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "Tổng số thiết bị", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "Tỷ lệ tuân thủ", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "Cấu hình", - "no_devices": "Không tìm thấy thiết bị nào", - "usb_title": "Kiểm soát cổng USB", - "usb_hint": "Kiểm soát quyền truy cập thiết bị lưu trữ USB cho thiết bị đã chọn hoặc chính sách mặc định trên toàn tổ chức.", - "usb_storage_policy": "Chính sách lưu trữ USB", - "usb_whitelist": "Thiết bị được đưa vào danh sách trắng (một thiết bị trên mỗi dòng)", - "usb_whitelist_hint": "VID:PID (ví dụ: 0781:5583)", - "usb_audit_log": "Ghi nhật ký kết nối thiết bị USB", - "optical_title": "Điều khiển ổ đĩa quang", - "optical_hint": "Kiểm soát quyền truy cập ổ đĩa CD/DVD/Blu-ray cho thiết bị đã chọn.", - "optical_policy": "Chính sách ổ đĩa quang", - "optical_audit_log": "Đăng nhập truy cập ổ đĩa quang", - "monitors_title": "Quản lý giám sát", - "monitors_hint": "Định cấu hình cài đặt màn hình bao gồm số lượng tối đa, thực thi độ phân giải, độ sáng và lịch trình nguồn.", - "monitors_max_count": "Màn hình tối đa (0 = không giới hạn)", - "monitors_max_hint": "0 có nghĩa là không có giới hạn", - "monitors_resolution": "Độ phân giải tối đa", - "monitors_brightness": "Giới hạn độ sáng", - "monitors_power_schedule": "Lịch trình điện", - "monitors_power_hint": "ví dụ: tắt:22:00-06:00", - "disks_title": "Kiểm soát truy cập đĩa", - "disks_hint": "Định cấu hình các chính sách truy cập đĩa bao gồm chế độ chỉ đọc, thực thi mã hóa và khả năng hiển thị phân vùng.", - "disks_readonly": "Buộc chế độ chỉ đọc", - "disks_encryption": "Yêu cầu mã hóa (BitLocker/LUKS)", - "disks_smart": "Kích hoạt S.M.A.R.T. giám sát", - "disks_hidden": "Phân vùng ẩn", - "disks_hidden_hint": "Các ký tự ổ đĩa hoặc điểm gắn kết được phân tách bằng dấu phẩy", - "quotas_title": "Hạn ngạch tài nguyên", - "quotas_hint": "Đặt hạn ngạch CPU, RAM, băng thông và ổ đĩa cho mỗi người dùng cho thiết bị đã chọn.", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "Giới hạn băng thông (Mbps)", - "quotas_bandwidth_hint": "0 = không giới hạn", - "quotas_disk_quota": "Hạn ngạch đĩa (GB)", - "quotas_disk_hint": "0 = không giới hạn", - "quotas_process_whitelist": "Xử lý danh sách trắng (mỗi dòng một dòng)", - "quotas_process_hint": "ví dụ: chrome.exe, code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "Chỉ danh sách trắng", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "Cập nhật phần mềm", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "Phiên bản đã cài đặt", - "latest_version": "Latest version", - "status": "Status", - "check_now": "Kiểm tra các bản cập nhật", - "checking": "Checking…", - "up_to_date": "Cập nhật", - "update_available": "Đã có bản cập nhật", - "changelog": "Release Notes", - "no_changelog": "Không có ghi chú phát hành nào", - "files_changed": "Tập tin đã thay đổi", - "files": "tập tin", - "changes_unavailable": "Không thể tải danh sách thay đổi tập tin. Bạn vẫn có thể cài đặt bản cập nhật.", - "create_backup": "Tạo bản sao lưu trước khi cập nhật", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "Đang cài đặt bản cập nhật…", - "creating_backup": "Đang tạo bản sao lưu…", - "downloading": "Đang tải xuống tệp…", - "install_success": "Cập nhật được cài đặt thành công. Bảng điều khiển đang khởi động lại…", - "install_failed": "Cài đặt cập nhật không thành công", - "restarting": "Đang chờ bảng điều khiển khởi động lại…", - "restart_complete": "Bảng điều khiển đã khởi động lại thành công", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "Không có phiên bản cập nhật nào được chọn. Kiểm tra cập nhật đầu tiên.", - "backups_title": "Cập nhật bản sao lưu", - "backups_desc": "Bản sao lưu trước khi cập nhật được tạo tự động trước mỗi lần cập nhật", - "no_backups": "Không tìm thấy bản sao lưu cập nhật", - "restore": "Restore", - "restore_confirm": "Bạn có chắc chắn muốn khôi phục từ bản sao lưu này không? Các tập tin đã thay đổi sẽ bị ghi đè.", - "restore_success": "Sao lưu được khôi phục thành công. Bảng điều khiển đang khởi động lại…", - "baseline_set": "Bộ đường cơ sở", - "commits_behind": "cam kết đằng sau", - "total_files": "Tổng số tập tin", - "applied": "Applied", - "failed": "thất bại", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Đi máy chủ", - "component_agent": "Agent", - "component_scripts": "Tập lệnh & Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "Đang kiểm tra Đi…", - "go_not_found": "Chưa cài đặt", - "go_check_failed": "Không thể kiểm tra tính khả dụng của Go", - "server_building": "Đang biên dịch Go server… Quá trình này có thể mất vài phút.", - "server_built": "Máy chủ nhị phân được biên dịch", - "server_build_failed": "Biên dịch máy chủ không thành công", - "server_stale_title": "Máy chủ nhị phân lỗi thời", - "server_stale_desc": "Nguồn Go server đã được cập nhật nhưng tệp nhị phân đang chạy không được xây dựng lại. Xây dựng lại nó ngay bây giờ để áp dụng các bản cập nhật bảo mật và thư viện.", - "rebuild_server": "Xây dựng lại máy chủ nhị phân", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "Máy chủ nhị phân được xây dựng lại và khởi động lại", - "rebuild_server_failed": "Xây dựng lại máy ch�� nhị phân không thành công", - "server_deployed": "Máy chủ nhị phân được triển khai", - "server_deploy_failed": "Triển khai máy chủ không thành công", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "Đang tải xuống nguồn máy chủ…", - "delete": "Xóa", - "delete_confirm": "Xóa vĩnh viễn bản sao lưu {name}? Điều này không thể hoàn tác được.", - "delete_success": "Đã xóa bản sao lưu", - "delete_failed": "Không xóa được bản sao lưu", - "retention_label": "Giữ N bản sao lưu gần đây nhất", - "retention_hint": "Các bản sao lưu cũ hơn sẽ tự động bị xóa sau mỗi lần cập nhật. Sử dụng 0 để giữ tất cả các bản sao lưu.", - "retention_saved": "Đã lưu cài đặt lưu giữ", - "retention_invalid": "Giá trị lưu giữ phải là số nguyên trong khoảng từ 0 đến 1000", - "retention_required_for_prune": "Đặt giá trị lưu giữ lớn hơn 0 trước", - "prune_now": "Apply now", - "prune_confirm": "Chỉ giữ lại các bản sao lưu gần đây nhất của {n} và xóa phần còn lại?", - "prune_done": "Đã cắt bớt (các) bản sao lưu {n}", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "Phương pháp cập nhật", - "strategy_download": "Tải xuống tệp nhị phân dựng sẵn", - "strategy_compile": "Biên dịch từ nguồn", - "both_available": "Tải xuống và biên dịch", - "download_available": "Tải xuống có sẵn", - "no_method": "Không có phương pháp cập nhật", - "no_release": "No release", - "available": "Có sẵn", - "server_downloading": "Đang tải xuống tệp nhị phân của máy chủ…", - "server_downloaded": "Máy chủ đã tải xuống nhị phân", - "server_download_failed": "Tải xuống nhị phân máy chủ không thành công", - "server_download_note": "Tệp nh��� phân dựng sẵn sẽ được tải xuống từ Bản phát hành GitHub. Việc này thường mất ít hơn một phút.", - "install_go_hint": "Cài đặt Go từ https://go.dev/dl/ để cho phép biên dịch hoặc xuất bản bản phát hành với các tệp nhị phân dựng sẵn", - "strategy_install_go": "Tự động cài đặt Đi và biên dịch", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "Tự động xây dựng l���i đã sẵn sàng", - "toolchain_ready": "Đã cài đặt chuỗi công cụ", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "Đang tải xuống chuỗi công cụ Go…", - "toolchain_failed": "Cài đặt chuỗi công cụ không thành công", - "modal_title": "Đang cài đặt bản cập nhật", - "modal_done_title": "Cập nhật hoàn tất", - "modal_close": "Đóng", - "modal_reload_now": "Tải lại bảng điều khiển", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "Tệp bảng điều khiển", - "phase_server": "Giai đoạn máy chủ", - "phase_restart": "Khởi động lại", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "Sao lưu bị bỏ qua (theo lựa chọn của người dùng)", - "server_skipped": "Go server bị bỏ qua", - "server_not_selected": "Go server not selected", - "server_processing": "Đang xử lý bản cập nhật Go server…", - "no_restart_needed": "Không cần khởi động lại", - "complete": "Đã áp dụng cập nhật", - "complete_summary": "Bản cập nhật đã được áp dụng thành công.", - "complete_with_errors": "Quá trình cập nhật đã hoàn tất nhưng một số bước không thành công. Xem chi tiết bên dưới.", - "modal_done_with_errors_title": "Cập nhật xong có lỗi", - "console_will_restart": "Quá trình điều khiển sẽ khởi động lại ngay bây giờ…", - "restart_complete_msg": "Bàn điều khiển đã khởi động lại xong. Nhấn vào tải lại để tải phiên bản mới. Trang sẽ tự động tải lại sau 8 giây.", - "refresh_recommended": "Nội dung tĩnh đã thay đổi — hãy tải lại trang để xem giao diện người dùng mới.", - "confirm_title": "Áp dụng cập nhật", - "confirm_with_backup": "Một bản sao lưu cập nhật trước sẽ được tạo tự động.", - "confirm_no_backup": "Sẽ không có bản sao lưu nào được tạo (bạn tự chịu rủi ro khi tiếp tục)." - }, - "permissions": { - "title": "Quyền", - "subtitle": "Quản lý quyền dựa trên vai trò và ghi đè tùy chỉnh", - "info_title": "Cách thức hoạt động của quyền", - "info_desc": "Mỗi vai trò có quyền mặc định. Bạn có thể thêm hoặc xóa các quyền riêng lẻ cho mỗi vai trò bằng cách chuyển đổi chúng bên dưới. Phần ghi đè tùy chỉnh được đánh dấu và có thể được hoàn nguyên về mặc định bất kỳ lúc nào.", - "select_role": "Chọn vai trò", - "select_role_placeholder": "Chọn một vai trò...", - "reset_overrides": "Đặt lại tất cả các phần ghi đè", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "Cấp máy chủ", - "custom": "Custom", - "default": "Default", - "revert": "Hoàn nguyên về mặc định", - "saved": "Đã cập nhật quyền", - "reverted": "Đã hoàn nguyên về mặc định", - "all_reverted": "Tất cả các ghi đè được hoàn nguyên", - "confirm_reset": "Đặt lại tất cả các thông tin ghi đè tùy chỉnh cho vai trò này về mặc định?", - "empty_title": "Chọn một vai trò", - "empty_desc": "Chọn một vai trò từ danh sách thả xuống ở trên để xem và quản lý các quyền của vai trò đó.", - "locked_title": "Super Admin", - "locked_desc": "Quản trị viên cấp cao có tất cả các quyền theo mặc định và không thể tùy chỉnh.", - "cat_device": "Thiết bị", - "cat_user": "Users", - "cat_server": "Máy chủ", - "cat_org": "Tổ chức", - "cat_audit": "Kiểm toán & Giám sát", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "Xem thiết bị", - "perm_device_connect": "Kết nối với các thiết bị", - "perm_device_edit": "Chỉnh sửa thiết bị", - "perm_device_delete": "Xóa thiết bị", - "perm_device_ban": "Cấm/bỏ cấm thiết bị", - "perm_device_change_id": "Thay đổi ID thiết bị", - "perm_user_view": "Xem người dùng", - "perm_user_create": "Tạo người dùng", - "perm_user_edit": "Chỉnh sửa người dùng", - "perm_user_delete": "Xóa người dùng", - "perm_server_config": "Cấu hình máy chủ", - "perm_server_keys": "Quản lý khóa API", - "perm_org_create": "Tạo tổ chức", - "perm_org_edit": "Chỉnh sửa tổ chức", - "perm_org_delete": "Xóa tổ chức", - "perm_org_manage_users": "Quản lý người dùng tổ chức", - "perm_org_manage_devices": "Quản lý thiết bị của tổ chức", - "perm_audit_view": "Xem nhật ký kiểm tra", - "perm_metrics_view": "Xem số liệu", - "perm_blocklist_edit": "Chỉnh sửa danh sách chặn", - "perm_cdap_view": "Xem thiết bị CDAP", - "perm_cdap_command": "Gửi lệnh CDAP", - "perm_cdap_terminal": "Truy cập thiết bị đầu cuối CDAP", - "perm_cdap_files": "Truy cập tệp CDAP", - "perm_enrollment_manage": "Quản lý tuyển sinh", - "perm_enrollment_approve": "Phê duyệt đăng ký", - "perm_chat_access": "Chat access", - "perm_branding_edit": "Chỉnh sửa thương hiệu", - "perm_server_attestation": "Chứng nhận hiệu suất máy chủ" - }, - "notifications": { - "title": "Thông báo", - "empty": "Không có thông báo mới", - "mark_all_read": "Đánh dấu tất cả đã đọc", - "see_all": "Xem tất cả yêu cầu trợ giúp", - "help_request": "Yêu cầu trợ giúp", - "just_now": "just now" - }, - "accessibility": { - "title": "Accessibility", - "subtitle": "Điều chỉnh bảng điều khiển theo nhu cầu thị giác, chuyển động và đọc của bạn.", - "close": "Đóng menu trợ năng", - "profiles": "Hồ sơ nhanh", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "Văn bản lớn hơn, độ tương phản và tiêu điểm mạnh mẽ.", - "profile_dyslexia": "Đọc sách thoải mái", - "profile_dyslexia_hint": "Phông chữ dễ đọc và khoảng cách rộng hơn.", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "Giảm chuyển tiếp và tạm dừng hoạt ảnh.", - "profile_color_assist": "Hỗ trợ màu sắc", - "profile_color_assist_hint": "Bộ lọc màu, nhãn và liên kết được đánh dấu.", - "reading": "Reading", - "font_size": "Font size", - "line_height": "Line height", - "letter_spacing": "Khoảng cách chữ", - "word_spacing": "Khoảng cách từ", - "readable_font": "Phông chữ có thể đọc được", - "readable_font_hint": "Sử dụng các hình dạng chữ rộng và quen thuộc.", - "dyslexia_spacing": "Khoảng cách chứng khó đọc", - "dyslexia_spacing_hint": "Thêm khoảng cách bổ sung cho văn bản dài.", - "visual": "Visual", - "contrast": "Contrast", - "contrast_normal": "Normal", - "contrast_high_dark": "Độ tương phản cao tối", - "contrast_high_light": "Ánh sáng có độ tương phản cao", - "contrast_yellow_black": "Màu vàng trên nền đen", - "color_filter": "Bộ lọc tầm nhìn màu", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "Độ bão hòa màu", - "underline_links": "Gạch chân các liên kết", - "underline_links_hint": "Làm cho các liên kết hiển thị mà không cần dựa vào màu sắc.", - "highlight_links": "Đánh dấu hành động", - "highlight_links_hint": "Phác thảo các liên kết và các nút.", - "highlight_headings": "Đ��nh dấu các tiêu đề", - "highlight_headings_hint": "Đánh dấu tiêu đề phần bằng thanh màu.", - "hide_media": "Dim media", - "hide_media_hint": "Làm mờ hình ảnh, video và canvas.", - "interaction": "Interaction", - "strong_focus": "Tập trung mạnh mẽ", - "strong_focus_hint": "Hiển thị vòng lấy nét bàn phím lớn.", - "large_cursor": "Con trỏ lớn", - "large_cursor_hint": "Sử dụng con trỏ có độ tương phản cao lớn hơn.", - "reduce_motion": "Giảm chuyển động", - "reduce_motion_hint": "Rút ngắn chuyển tiếp và cuộn mượt mà.", - "pause_animations": "Tạm dừng hoạt ảnh", - "pause_animations_hint": "Dừng lặp lại chuyển động thị giác.", - "reading_guide": "Hướng dẫn đọc", - "reading_guide_hint": "Theo sau con trỏ bằng một đường sáng.", - "reading_mask": "Mặt nạ đọc sách", - "reading_mask_hint": "Làm mờ nội dung bên trên và bên dưới con trỏ.", - "preview": "Preview", - "preview_title": "Xem trước không gian làm việc của người vận hành", - "preview_text": "Kiểm tra xem văn bản, liên kết, điều khiển và nhãn trạng thái có dễ đọc hay không trước khi đóng menu này.", - "preview_link": "Liên kết chi tiết thiết bị", - "preview_status": "Online", - "preview_button": "Hành động chính", - "preview_secondary": "Secondary", - "reset": "Reset", - "done": "Done" - }, - "server_mgmt": { - "title": "Quản lý máy chủ", - "subtitle": "Mặt phẳng điều khiển giống buồng lái dành cho máy chủ bảng điều khiển BetterDesk (BETA).", - "beta_tooltip": "Tính năng Beta - đang được phát triển tích cực.", - "notice_title": "Tính năng thử nghiệm", - "notice_body": "Các công cụ này chạy trên máy chủ nơi xử lý bảng điều khiển BetterDesk hoạt động. Tất cả các hoạt động đều được kiểm toán. Phạm vi tính năng sẽ mở rộng trong các phiên bản tương lai.", - "tab_overview": "Tổng quan", - "tab_terminal": "Cửa sổ dòng lệnh", - "tab_files": "Tệp", - "tab_services": "Dịch vụ", - "cpu": "CPU", - "memory": "Bộ nhớ", - "load": "Tải trung bình", - "disks": "Ổ đĩa", - "history": "Lịch sử (60 mẫu cuối cùng)", - "host_info": "Host info", - "cores": "cores", - "uptime": "Thời gian hoạt động", - "no_disks": "Không có sẵn dữ liệu đĩa", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY có sẵn", - "term_connect": "Kết nối", - "term_disconnect": "Ngắt kết nối", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "Lỗi kết nối", - "term_warning": "Các lệnh chạy với tư cách là người dùng sở hữu tiến trình giao diện điều khiển. Thêm quy tắc sudoers để bật độ cao.", - "term_hint": "Mẹo: gõ `sudo -i` để chuyển cấp (yêu cầu cấu hình sudoers).", - "term_lib_failed": "Không thể tải thư viện thiết bị đầu cuối", - "files_up": "Lên một cấp", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "Name", - "files_size": "Size", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "Thư mục trống", - "files_error": "Không liệt kê được thư mục", - "read_failed": "Không đọc được tập tin", - "save_failed": "Không lưu được tập tin", - "rename_failed": "Đổi tên không thành công", - "delete_failed": "Xóa không thành công", - "delete_confirm": "Xóa mục này?", - "mkdir_prompt": "Tên thư mục mới:", - "mkdir_failed": "Không tạo được thư mục", - "file_saved": "Đã lưu tệp", - "binary_warn": "Tệp nhị phân - chỉ xem trước", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "Dịch vụ tìm kiếm…", - "svc_name": "Service", - "svc_state": "State", - "svc_description": "Description", - "svc_empty": "Không tìm thấy dịch vụ nào", - "svc_load_failed": "Không thể tải dịch vụ", - "svc_action_failed": "Hành động không thành công", - "svc_confirm": "Run", - "svc_start": "Start", - "svc_stop": "Stop", - "svc_restart": "Khởi động lại", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "download": { - "title": "Tải xuống Đại lý BetterDesk", - "choose_platform": "Chọn nền tảng của bạn", - "choose_platform_hint": "Chọn trình cài đặt phù hợp với hệ điều hành của bạn.", - "download": "Tải xuống", - "building": "Tòa nhà…", - "failed": "Xây dựng không thành công", - "need_help": "Cần giúp đỡ?", - "powered_by": "Được cung cấp bởi" - }, - "server_attestation": { - "title": "Chứng nhận hiệu suất máy chủ", - "subtitle": "Benchmark hiệu suất xác định công suất kết nối từ xa đồng thời ở ngưỡng CPU, RAM và đĩa 80%.", - "warning_title": "Kiểm tra tải", - "warning_body": "Benchmark mô phỏng các kết nối WebSocket song song đến máy chủ signal và relay. Chạy trong giờ thấp điểm — bài kiểm tra này tạo tải cho môi trường production.", - "run_benchmark": "Chạy Benchmark", - "abort": "Hủy bỏ", - "download_report": "Tải báo cáo JSON", - "last_test": "Lần kiểm tra cuối", - "no_test_yet": "Chưa có benchmark nào được chạy", - "max_connections": "Kết nối tối đa", - "threshold_80": "Ngưỡng 80% — số liệu cuối cùng", - "disk": "Đĩa", - "ramp_chart": "Biểu đồ tăng tải", - "connections": "Kết nối", - "connections_short": "kết nối", - "tier_guide_title": "Mỗi cấp có nghĩa là gì?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 kết nối đồng thời — VPS nhỏ (1–2 vCPU, 2–4 GB RAM).", - "tier_iron_desc": "26–75 kết nối — máy chủ tầm trung (2–4 vCPU, 4–8 GB RAM).", - "tier_platinum_desc": "76–200 kết nối — máy chủ hiệu suất cao (4–8 vCPU, 8–16 GB RAM).", - "tier_titanium_desc": "201–400 kết nối — cơ sở hạ tầng doanh nghiệp (8+ vCPU, 16–32 GB RAM).", - "tier_obsidian_desc": "401+ kết nối — hạng Turbo: phần cứng chuyên dụng, 16+ vCPU, 32+ GB RAM, NVMe.", - "docker_note": "Lưu ý: trong Docker, số liệu CPU/RAM có thể phản ánh giới hạn container thay vì máy chủ vật lý.", - "badge_tooltip": "BetterDesk Server Attestation — chứng nhận hiệu suất máy chủ", - "confirm_run": "Benchmark này sẽ kiểm tra tải máy chủ với các kết nối mô phỏng. Tiếp tục?", - "starting": "Đang bắt đầu…", - "complete": "Benchmark hoàn tất", - "signal_peers": "Peer tín hiệu", - "relay_sessions": "Phiên chuyển tiếp", - "page_error": "Không thể tải trang Server Attestation", - "mode_estimated": "Ước tính (WebSocket không thể truy cập)", - "incomplete": "Benchmark kết thúc mà không có cấp hợp lệ" + "form": { + "cancel": "Hủy" } + } } diff --git a/web-nodejs/lang/zh-TW.json b/web-nodejs/lang/zh-TW.json index 7fbb4aa2..ed3a15ae 100644 --- a/web-nodejs/lang/zh-TW.json +++ b/web-nodejs/lang/zh-TW.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "zh-TW", - "name": "Chinese (Traditional)", - "native_name": "繁體中文", - "direction": "ltr" + "meta": { + "lang": "zh-TW", + "name": "Chinese (Traditional)", + "native_name": "繁體中文", + "direction": "ltr" + }, + "common": { + "loading": "載入中...", + "confirm": "確認", + "alert": "提示", + "prompt": "請輸入", + "copied": "已複製到剪貼簿", + "save": "儲存", + "saved": "已儲存", + "error": "錯誤", + "success": "成功", + "warning": "警告", + "info": "資訊", + "all": "全部", + "cancel": "取消", + "delete": "刪除", + "actions": "操作", + "close": "關閉", + "required": "必填", + "name_required": "名稱為必填欄位", + "active": "活動", + "inactive": "非活動", + "invalid_json": "無效的 JSON", + "field_required": "{field} 為必填欄位", + "back": "返回", + "edit": "編輯", + "yes": "是", + "no": "否" + }, + "nav": { + "main": "主要", + "tools": "工具", + "system": "系統", + "dashboard": "儀表板", + "devices": "裝置", + "keys": "金鑰", + "generator": "產生器", + "settings": "設定", + "users": "使用者", + "inventory": "資產清單", + "tickets": "工單", + "help_requests": "協助請求", + "activity": "活動", + "automation": "自動化", + "file_transfer": "檔案傳輸", + "network": "網路", + "dataguard": "資料防護", + "reports": "報表", + "tenants": "租戶", + "registrations": "註冊", + "management": "管理", + "toggle_sidebar": "切換側邊欄", + "cdap": "CDAP 裝置", + "fleet": "車隊", + "scaling": "擴展", + "cross_platform": "跨平台", + "tokens": "裝置權杖", + "organizations": "組織", + "policies": "策略", + "attestation": "裝置認證", + "remote": "遠端桌面", + "toolkit": "工具箱", + "security_audit": "安全稽核", + "languages": "語言", + "resource_control": "資源控制", + "chat": "聊天", + "help": "說明", + "expand_sidebar": "展開側邊欄", + "toggle_theme": "切換主題", + "sdk_studio": "SDK Studio", + "login": "登入", + "permissions": "權限管理", + "server_management": "伺服器管理", + "server_attestation": "伺服器效能認證", + "commercialization": "商業化" + }, + "auth": { + "login": "登入", + "logout": "登出", + "login_title": "登入", + "login_subtitle": "登入到 BetterDesk 控制台", + "username": "使用者名稱", + "username_placeholder": "請輸入使用者名稱", + "password": "密碼", + "password_placeholder": "請輸入密碼", + "remember_me": "記住我", + "login_failed": "登入失敗,請檢查您的認證資訊。", + "invalid_credentials": "使用者名稱或密碼無效。", + "username_collision": "已存在使用此使用者名稱的本機帳戶。請使用本機密碼登入,或請管理員重新命名或移除衝突的帳戶。", + "fill_all_fields": "請填寫所有欄位", + "logout_confirm": "確定要登出嗎?", + "change_password": "修改密碼", + "password_required": "密碼為必填欄位", + "totp_title": "雙因素認證", + "totp_subtitle": "請輸入驗證器應用中的 6 位驗證碼", + "totp_code": "驗證碼", + "totp_verify": "驗證", + "totp_use_recovery": "使用復原碼", + "totp_use_code": "使用驗證器程式碼", + "totp_recovery_code": "復原碼", + "totp_back_to_login": "返回登入", + "totp_invalid_code": "驗證碼無效,請重試。", + "totp_enter_code": "請輸入 6 位驗證碼", + "totp_enter_recovery": "請輸入復原碼", + "totp_session_expired": "工作階段已過期,請重新登入。", + "totp_already_enabled": "雙因素認證已啟用", + "pro_only_account": "此帳戶僅適用於 RustDesk 桌面用戶端。請使用 RustDesk 應用登入。", + "passwords_mismatch": "兩次輸入的密碼不一致", + "or": "或", + "login_sso": "通過 SSO 登入", + "login_sso_with": "通過 {{provider}} 登入", + "oidc_denied": "身分提供者拒绝了存取。", + "oidc_invalid": "無效的 OIDC 回呼。請重試。", + "oidc_failed": "OIDC 身分驗證失敗。請重試。", + "oidc_error": "SSO 登入時發生錯誤。", + "oidc_no_account": "未找到您的帐戶,且自動註冊已停用。", + "totp_rate_limited": "尝試次數過多,請稍後再試。", + "emergency_mode_banner": "Go 伺服器不可达 — 紧急模式執行中(仅管理員,功能受限)" + }, + "dashboard": { + "title": "儀表板", + "subtitle": "RustDesk 伺服器概覽", + "total_devices": "裝置總數", + "online_now": "目前在線", + "banned": "已封鎖", + "active_connections": "使用中連線", + "offline_devices": "離線", + "server_status": "伺服器狀態", + "quick_actions": "快速操作", + "manage_devices": "管理已連線的裝置", + "view_keys": "檢視伺服器金鑰", + "generate_config": "產生用戶端設定", + "server_settings": "組態設定", + "greeting_morning": "早安,{name}", + "greeting_afternoon": "午安,{name}", + "greeting_evening": "晚安,{name}", + "greeting_night": "晚安,{name}", + "health_overview": "健康概覽", + "devices_online": "線上裝置", + "active_alerts": "活動警示", + "recent_connections": "裝置總數", + "server_uptime": "伺服器運行時間", + "activity_feed": "最近活動", + "no_recent_activity": "尚無最近活動", + "just_now": "剛剛", + "ago": "前", + "tip_desktop_mode": "嘗試桌面模式,獲得帶監控小工具的多視窗工作區。", + "tip_keyboard_shortcuts": "在任意位置按 Ctrl+K 可開啟快速搜尋指令面板。", + "tip_address_book": "透過 RustDesk 用戶端登入即可在裝置間同步地址簿。", + "tip_2fa": "在設定中啟用雙因素認證,以提升帳戶安全性。", + "tip_bulk_actions": "選擇多個裝置並使用批次操作一次性管理它們。", + "tip_theme": "在側邊欄設定中切換深色和淺色主題。", + "tip_cdap": "透過 CDAP 閘道連線物聯網裝置和工業感測器。", + "tip_tutorials": "點選右下角的說明按鈕檢視互動式教學。" + }, + "devices": { + "title": "裝置", + "id": "ID", + "hostname": "主機名稱", + "username": "使用者名稱", + "platform": "平台", + "version": "版本", + "ip_address": "IP 位址", + "note": "備註", + "last_seen": "最後線上", + "last_online": "最後線上", + "first_seen": "首次發現", + "created": "建立時間", + "status": "狀態", + "ban_reason": "封鎖原因", + "actions": "操作", + "search_placeholder": "搜尋裝置...", + "filter_all": "全部", + "filter_online": "線上", + "filter_offline": "離線", + "filter_banned": "已封鎖", + "selected": "已選擇", + "showing": "顯示", + "of": "/", + "sync_status": "同步狀態", + "sync_success": "狀態同步成功", + "empty_title": "找不到裝置", + "empty_text": "沒有符合目前篩選條件的裝置", + "edit_title": "裝置詳情", + "delete_title": "刪除裝置", + "delete_confirm": "確定要刪除裝置 {id} 嗎?", + "delete_warning": "您即將永久刪除此裝置:", + "delete_permanent": "此操作無法撤銷。與該裝置關聯的所有資料將從資料庫中永久刪除。", + "delete_success": "裝置刪除成功", + "revoke_option": "撤銷裝置", + "revoke_hint": "阻止裝置 ID 並斷開活動連線", + "revoke_success": "裝置已成功撤銷", + "details": "裝置詳情", + "ban_title": "封鎖裝置", + "ban_confirm": "確定要封鎖裝置 {id} 嗎?", + "ban_success": "裝置封鎖成功", + "unban_title": "解除封鎖", + "unban_confirm": "確定要解除裝置 {id} 的封鎖嗎?", + "unban_success": "裝置解除封鎖成功", + "change_id": "更改 ID", + "change_id_title": "更改裝置 ID", + "new_id": "新 ID", + "change_id_hint": "6-16 個字元,僅限字母、數字、短橫線和底線", + "change_id_success": "裝置 ID 更改成功", + "id_length_error": "ID 必須為 6-16 個字元", + "id_format_error": "ID 只能包含字母、數字、短橫線和底線", + "bulk_delete_title": "批次刪除裝置", + "bulk_delete_confirm": "確定要刪除 {count} 個裝置嗎?", + "bulk_delete_success": "已成功刪除 {count} 個裝置", + "columns": "列", + "toggle_columns": "切換可見列", + "not_found": "找不到裝置", + "delete_failed": "刪除裝置失敗", + "change_id_failed": "更改裝置 ID 失敗", + "invalid_id": "裝置 ID 無效(需要 6-16 個字元)", + "invalid_id_format": "ID 格式無效(僅允許字母、數字、連字號和底線)", + "id_exists": "裝置 ID 已存在", + "no_selection": "未選擇任何裝置", + "device_type": "類型", + "filter_type_all": "所有類型", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "桌面", + "filter_type_scada": "SCADA", + "filter_type_iot": "物聯網", + "filter_type_agent": "代理", + "cdap_connected": "CDAP 已連線", + "revoke": "撤銷", + "access_policy": "存取原則", + "unattended_access": "無人值守存取", + "enable_unattended": "啟用無人值守存取", + "access_password": "存取密碼", + "password_configured": "密碼已設定", + "no_password": "未設定密碼", + "new_password": "新密碼(留空保持目前密碼)", + "clear_password": "清除密碼", + "access_schedule": "存取排程", + "enable_schedule": "啟用依時間的存取", + "allowed_days": "允許的天數", + "start_time": "開始時間", + "end_time": "結束時間", + "timezone": "時區", + "allowed_operators": "允許的操作員", + "all_operators": "所有操作員(留空)", + "operators_hint": "以逗號分隔的使用者名稱。留空則允許所有操作員。", + "last_updated_by": "最後更新者", + "access_policy_saved": "存取原則已儲存", + "display_name": "顯示名稱", + "display_name_placeholder": "自定義名稱(覆蓋主機名)", + "note_placeholder": "關於此裝置的備註", + "tabs": { + "overview": "概覽", + "hardware": "硬體", + "metrics": "指標", + "connections": "連線", + "audit": "稽核", + "info": "資訊", + "history": "歷史" }, - "common": { - "loading": "載入中...", - "confirm": "確認", - "alert": "提示", - "prompt": "請輸入", - "copied": "已複製到剪貼簿", - "save": "儲存", - "saved": "已儲存", - "error": "錯誤", - "success": "成功", - "warning": "警告", - "info": "資訊", - "all": "全部", - "cancel": "取消", - "delete": "刪除", - "actions": "操作", - "close": "關閉", - "required": "必填", - "name_required": "名稱為必填欄位", - "active": "活動", - "inactive": "非活動", - "invalid_json": "無效的 JSON", - "field_required": "{field} 為必填欄位", - "back": "返回", - "edit": "編輯", - "yes": "是", - "no": "否" + "hardware": { + "cpu": "處理器", + "memory": "記憶體", + "disk": "磁碟", + "os": "作業系統", + "hostname": "主機名稱", + "uptime": "運行時間", + "load_avg": "平均負載", + "network": "網路介面", + "no_data": "尚無硬體資料", + "title": "硬體資訊", + "gpu": "顯示卡" }, - "nav": { - "main": "主要", - "tools": "工具", - "system": "系統", - "dashboard": "儀表板", - "devices": "裝置", - "keys": "金鑰", - "generator": "產生器", - "settings": "設定", - "users": "使用者", - "inventory": "資產清單", - "tickets": "工單", - "help_requests": "協助請求", - "activity": "活動", - "automation": "自動化", - "file_transfer": "檔案傳輸", - "network": "網路", - "dataguard": "資料防護", - "reports": "報表", - "tenants": "租戶", - "registrations": "註冊", - "management": "管理", - "toggle_sidebar": "切換側邊欄", - "cdap": "CDAP 裝置", - "fleet": "車隊", - "scaling": "擴展", - "cross_platform": "跨平台", - "tokens": "裝置權杖", - "organizations": "組織", - "policies": "策略", - "attestation": "裝置認證", - "remote": "遠端桌面", - "toolkit": "工具箱", - "security_audit": "安全稽核", - "languages": "語言", - "resource_control": "資源控制", - "chat": "聊天", - "help": "說明", - "expand_sidebar": "展開側邊欄", - "toggle_theme": "切換主題", - "sdk_studio": "SDK Studio", - "login": "登入", - "permissions": "權限管理", - "server_management": "伺服器管理", - "server_attestation": "伺服器效能認證" - }, - "auth": { - "login": "登入", - "logout": "登出", - "login_title": "登入", - "login_subtitle": "登入到 BetterDesk 控制台", - "username": "使用者名稱", - "username_placeholder": "請輸入使用者名稱", - "password": "密碼", - "password_placeholder": "請輸入密碼", - "remember_me": "記住我", - "login_failed": "登入失敗,請檢查您的認證資訊。", - "invalid_credentials": "使用者名稱或密碼無效。", - "username_collision": "已存在使用此使用者名稱的本機帳戶。請使用本機密碼登入,或請管理員重新命名或移除衝突的帳戶。", - "fill_all_fields": "請填寫所有欄位", - "logout_confirm": "確定要登出嗎?", - "change_password": "修改密碼", - "password_required": "密碼為必填欄位", - "totp_title": "雙因素認證", - "totp_subtitle": "請輸入驗證器應用中的 6 位驗證碼", - "totp_code": "驗證碼", - "totp_verify": "驗證", - "totp_use_recovery": "使用復原碼", - "totp_use_code": "使用驗證器程式碼", - "totp_recovery_code": "復原碼", - "totp_back_to_login": "返回登入", - "totp_invalid_code": "驗證碼無效,請重試。", - "totp_enter_code": "請輸入 6 位驗證碼", - "totp_enter_recovery": "請輸入復原碼", - "totp_session_expired": "工作階段已過期,請重新登入。", - "totp_already_enabled": "雙因素認證已啟用", - "pro_only_account": "此帳戶僅適用於 RustDesk 桌面用戶端。請使用 RustDesk 應用登入。", - "passwords_mismatch": "兩次輸入的密碼不一致", - "or": "或", - "login_sso": "通過 SSO 登入", - "login_sso_with": "通過 {{provider}} 登入", - "oidc_denied": "身分提供者拒绝了存取。", - "oidc_invalid": "無效的 OIDC 回呼。請重試。", - "oidc_failed": "OIDC 身分驗證失敗。請重試。", - "oidc_error": "SSO 登入時發生錯誤。", - "oidc_no_account": "未找到您的帐戶,且自動註冊已停用。", - "totp_rate_limited": "尝試次數過多,請稍後再試。", - "emergency_mode_banner": "Go 伺服器不可达 — 紧急模式執行中(仅管理員,功能受限)" - }, - "dashboard": { - "title": "儀表板", - "subtitle": "RustDesk 伺服器概覽", - "total_devices": "裝置總數", - "online_now": "目前在線", - "banned": "已封鎖", - "active_connections": "使用中連線", - "offline_devices": "離線", - "server_status": "伺服器狀態", - "quick_actions": "快速操作", - "manage_devices": "管理已連線的裝置", - "view_keys": "檢視伺服器金鑰", - "generate_config": "產生用戶端設定", - "server_settings": "組態設定", - "greeting_morning": "早安,{name}", - "greeting_afternoon": "午安,{name}", - "greeting_evening": "晚安,{name}", - "greeting_night": "晚安,{name}", - "health_overview": "健康概覽", - "devices_online": "線上裝置", - "active_alerts": "活動警示", - "recent_connections": "裝置總數", - "server_uptime": "伺服器運行時間", - "activity_feed": "最近活動", - "no_recent_activity": "尚無最近活動", - "just_now": "剛剛", - "ago": "前", - "tip_desktop_mode": "嘗試桌面模式,獲得帶監控小工具的多視窗工作區。", - "tip_keyboard_shortcuts": "在任意位置按 Ctrl+K 可開啟快速搜尋指令面板。", - "tip_address_book": "透過 RustDesk 用戶端登入即可在裝置間同步地址簿。", - "tip_2fa": "在設定中啟用雙因素認證,以提升帳戶安全性。", - "tip_bulk_actions": "選擇多個裝置並使用批次操作一次性管理它們。", - "tip_theme": "在側邊欄設定中切換深色和淺色主題。", - "tip_cdap": "透過 CDAP 閘道連線物聯網裝置和工業感測器。", - "tip_tutorials": "點選右下角的說明按鈕檢視互動式教學。" - }, - "devices": { - "title": "裝置", - "id": "ID", - "hostname": "主機名稱", - "username": "使用者名稱", - "platform": "平台", - "version": "版本", - "ip_address": "IP 位址", - "note": "備註", - "last_seen": "最後線上", - "last_online": "最後線上", - "first_seen": "首次發現", - "created": "建立時間", - "status": "狀態", - "ban_reason": "封鎖原因", - "actions": "操作", - "search_placeholder": "搜尋裝置...", - "filter_all": "全部", - "filter_online": "線上", - "filter_offline": "離線", - "filter_banned": "已封鎖", - "selected": "已選擇", - "showing": "顯示", - "of": "/", - "sync_status": "同步狀態", - "sync_success": "狀態同步成功", - "empty_title": "找不到裝置", - "empty_text": "沒有符合目前篩選條件的裝置", - "edit_title": "裝置詳情", - "delete_title": "刪除裝置", - "delete_confirm": "確定要刪除裝置 {id} 嗎?", - "delete_warning": "您即將永久刪除此裝置:", - "delete_permanent": "此操作無法撤銷。與該裝置關聯的所有資料將從資料庫中永久刪除。", - "delete_success": "裝置刪除成功", - "revoke_option": "撤銷裝置", - "revoke_hint": "阻止裝置 ID 並斷開活動連線", - "revoke_success": "裝置已成功撤銷", - "details": "裝置詳情", - "ban_title": "封鎖裝置", - "ban_confirm": "確定要封鎖裝置 {id} 嗎?", - "ban_success": "裝置封鎖成功", - "unban_title": "解除封鎖", - "unban_confirm": "確定要解除裝置 {id} 的封鎖嗎?", - "unban_success": "裝置解除封鎖成功", - "change_id": "更改 ID", - "change_id_title": "更改裝置 ID", - "new_id": "新 ID", - "change_id_hint": "6-16 個字元,僅限字母、數字、短橫線和底線", - "change_id_success": "裝置 ID 更改成功", - "id_length_error": "ID 必須為 6-16 個字元", - "id_format_error": "ID 只能包含字母、數字、短橫線和底線", - "bulk_delete_title": "批次刪除裝置", - "bulk_delete_confirm": "確定要刪除 {count} 個裝置嗎?", - "bulk_delete_success": "已成功刪除 {count} 個裝置", - "columns": "列", - "toggle_columns": "切換可見列", - "not_found": "找不到裝置", - "delete_failed": "刪除裝置失敗", - "change_id_failed": "更改裝置 ID 失敗", - "invalid_id": "裝置 ID 無效(需要 6-16 個字元)", - "invalid_id_format": "ID 格式無效(僅允許字母、數字、連字號和底線)", - "id_exists": "裝置 ID 已存在", - "no_selection": "未選擇任何裝置", - "device_type": "類型", - "filter_type_all": "所有類型", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "桌面", - "filter_type_scada": "SCADA", - "filter_type_iot": "物聯網", - "filter_type_agent": "代理", - "cdap_connected": "CDAP 已連線", - "revoke": "撤銷", - "access_policy": "存取原則", - "unattended_access": "無人值守存取", - "enable_unattended": "啟用無人值守存取", - "access_password": "存取密碼", - "password_configured": "密碼已設定", - "no_password": "未設定密碼", - "new_password": "新密碼(留空保持目前密碼)", - "clear_password": "清除密碼", - "access_schedule": "存取排程", - "enable_schedule": "啟用依時間的存取", - "allowed_days": "允許的天數", - "start_time": "開始時間", - "end_time": "結束時間", - "timezone": "時區", - "allowed_operators": "允許的操作員", - "all_operators": "所有操作員(留空)", - "operators_hint": "以逗號分隔的使用者名稱。留空則允許所有操作員。", - "last_updated_by": "最後更新者", - "access_policy_saved": "存取原則已儲存", - "display_name": "顯示名稱", - "display_name_placeholder": "自定義名稱(覆蓋主機名)", - "note_placeholder": "關於此裝置的備註", - "tabs": { - "overview": "概覽", - "hardware": "硬體", - "metrics": "指標", - "connections": "連線", - "audit": "稽核", - "info": "資訊", - "history": "歷史" - }, - "hardware": { - "cpu": "處理器", - "memory": "記憶體", - "disk": "磁碟", - "os": "作業系統", - "hostname": "主機名稱", - "uptime": "運行時間", - "load_avg": "平均負載", - "network": "網路介面", - "no_data": "尚無硬體資料", - "title": "硬體資訊", - "gpu": "顯示卡" - }, - "tags": "Tags", - "filter_by_tags": "按標籤篩選", - "no_tags": "No tags", - "all_groups": "所有群組", - "create_group": "建立群組", - "manage_groups": "管理群組", - "group_name": "群組名稱", - "group_name_placeholder": "例如:媒體電脑", - "dynamic_group": "基於標籤的動態群組", - "dynamic_group_hint": "帶有此標籤的裝置會自動加入。", - "tag_filter": "Tag filter", - "group_allowed_users": "允许的使用者", - "group_allowed_users_hint": "留空可让所有拥有裝置權限的使用者看到此群組。", - "group_tag_required": "動態群組必須設定標籤篩選", - "group_invalid": "群組標識符無效", - "group_not_found": "未找到群組", - "group_saved": "裝置群組已儲存", - "groups_saved": "裝置群組已儲存", + "tags": "Tags", + "filter_by_tags": "按標籤篩選", + "no_tags": "No tags", + "all_groups": "所有群組", + "create_group": "建立群組", + "manage_groups": "管理群組", + "group_name": "群組名稱", + "group_name_placeholder": "例如:媒體電脑", + "dynamic_group": "基於標籤的動態群組", + "dynamic_group_hint": "帶有此標籤的裝置會自動加入。", + "tag_filter": "Tag filter", + "group_allowed_users": "允许的使用者", + "group_allowed_users_hint": "留空可让所有拥有裝置權限的使用者看到此群組。", + "group_tag_required": "動態群組必須設定標籤篩選", + "group_invalid": "群組標識符無效", + "group_not_found": "未找到群組", + "group_saved": "裝置群組已儲存", + "groups_saved": "裝置群組已儲存", "group_membership_added": "已加入群組", "group_membership_removed": "已從群組移除", - "no_groups": "還沒有群組", - "manual_groups": "手動群組", - "dynamic_memberships": "動態成員關系", - "group_allowed_user_groups": "允许的使用者群組", - "group_allowed_user_groups_hint": "所選使用者群組中的使用者可以存取此裝置群組。", - "no_user_groups": "沒有使用者群組", - "edit_group": "编辑群組", - "delete_group": "刪除群組", - "delete_group_confirm": "刪除裝置群組 {name}?", - "group_deleted": "裝置群組已刪除", - "folder_group_readonly": "資料夾關聯的群組由資料夾管理。", - "manage_user_groups": "管理使用者群組", - "restore_failed": "還原裝置失敗", - "no_signal_tooltip": "用戶端最近聯絡了 API,但未在訊號伺服器(UDP :21116)上註冊。伺服器遷移後請重新啟動用戶端。", - "per_page": "每頁" - }, - "keys": { - "title": "伺服器金鑰", - "subtitle": "RustDesk 用戶端的公鑰和設定", - "public_key": "公鑰", - "qr_code": "QR Code", - "server_info": "伺服器資訊", - "download": "下載金鑰", - "show_qr": "顯示 QR Code", - "qr_hint": "使用 RustDesk 行動端應用掃描此 QR Code", - "no_key": "找不到公鑰", - "no_key_to_copy": "沒有可複製的金鑰", - "no_qr": "QR Code 不可用", - "download_success": "金鑰檔案已下載", - "not_found": "找不到金鑰", - "api_not_found": "找不到 API 金鑰" - }, - "settings": { - "title": "設定", - "subtitle": "控制台設定和帳戶設定", - "tab_general": "一般", - "tab_server": "伺服器", - "tab_branding": "品牌", - "tab_backup": "備份", - "language": "語言", - "change_password": "修改密碼", - "password_desc": "更新您的帳戶密碼", - "current_password": "目前密碼", - "new_password": "新密碼", - "confirm_password": "確認密碼", - "save_password": "更新密碼", - "password_changed": "密碼修改成功", - "fill_all_fields": "請填寫所有欄位", - "passwords_not_match": "兩次輸入的密碼不一致", - "password_requirements": "密碼要求", - "password_requirements_not_met": "密碼不符合要求", - "req_length": "至少 8 個字元", - "req_uppercase": "至少一個大寫字母", - "req_lowercase": "至少一個小寫字母", - "req_number": "至少一個數字", - "server_info": "伺服器資訊", - "version": "版本", - "database": "資料庫", - "uptime": "運行時間", - "audit_log": "稽核日誌", - "audit_desc": "最近的控制台活動", - "no_audit_logs": "找不到稽核日誌", - "backend_title": "伺服器後端", - "backend_desc": "選擇用於裝置管理和信令/中繼服務的伺服器後端。", - "backend_original": "標準版", - "backend_enhanced": "增強版", - "backend_rustdesk_desc": "標準 RustDesk 信令和中繼伺服器(hbbs + hbbr)。基礎 HTTP API,端點有限。", - "backend_betterdesk_desc": "增強型 Go 伺服器,具有完整 REST API、JWT 認證、黑名單、標籤、實時 WebSocket 事件和稽核日誌。", - "backend_feature_signal": "信令伺服器(ID 註冊)", - "backend_feature_relay": "中繼伺服器(連線中繼)", - "backend_feature_basic_api": "基礎 REST API", - "backend_feature_full_api": "完整 REST API(34+ 個端點)", - "backend_feature_jwt": "JWT 認證 & TOTP 雙因素認證", - "backend_feature_blocklist": "IP/ID 黑名單管理", - "backend_feature_tags": "裝置標籤與分組", - "backend_feature_audit": "稽核事件日誌", - "backend_feature_websocket": "實時 WebSocket 事件", - "backend_connection": "連線", - "backend_api_url": "API 地址", - "backend_test": "測試連線", - "backend_testing": "測試中...", - "backend_save": "應用後端", - "backend_saved": "伺服器後端切換成功。裝置資料將由新後端管理。", - "backend_save_failed": "切換伺服器後端失敗", - "backend_test_success": "連線成功!伺服器可存取。", - "backend_test_failed": "連線失敗。伺服器不可存取。", - "backend_confirm_switch": "確定要切換伺服器後端嗎?這將改變裝置的管理方式。", - "backend_unreachable": "無法切換:目標伺服器不可存取。請先啟動伺服器。", - "invalid_backend": "無效的後端選擇。請選擇 'rustdesk' 或 'betterdesk'。", - "backend_status_running": "已連線", - "backend_status_unreachable": "不可存取", - "backend_status_error": "錯誤", - "backend_status_unknown": "未知", - "totp_title": "雙因素認證", - "totp_desc": "使用 TOTP 驗證器應用(Google Authenticator、Microsoft Authenticator、Authy 等)為您的帳戶增加額外的安全保護", - "totp_enabled": "已啟用雙因素認證", - "totp_enabled_desc": "您的帳戶已啟用雙因素認證保護。", - "totp_disabled": "未啟用雙因素認證", - "totp_disabled_desc": "啟用雙因素認證以增強帳戶安全性。", - "totp_setup": "啟用雙因素認證", - "totp_disable": "關閉雙因素認證", - "totp_step1": "在手機上安裝驗證器應用", - "totp_step2": "掃描下方QR Code", - "totp_step3": "輸入 6 位驗證碼進行驗證", - "totp_manual_key": "手動輸入金鑰", - "totp_enter_code": "輸入驗證碼", - "totp_verify_enable": "驗證並啟用", - "totp_enabled_success": "雙因素認證已啟用!", - "totp_recovery_warning": "請將這些復原碼儲存在安全的地方。每個復原碼只能使用一次。如果您無法存取驗證器應用,可以使用這些復原碼登入。", - "totp_done": "完成", - "totp_disable_warning": "關閉雙因素認證會降低您帳戶的安全性。請輸入密碼確認。", - "totp_disabled_success": "雙因素認證已關閉。", - "tutorials_title": "教程與引導", - "tutorials_desc": "管理控制台中顯示的引導教程和帮助覆盖层", - "tutorials_enabled": "啟用教程", - "tutorials_enabled_hint": "禁用後,教程將不會自动啟动,帮助按钮將被隐藏", - "tutorials_reset_hint": "將所有教程標记為未查看,以便再次顯示", - "tutorials_enabled_toast": "教程已啟用", - "tutorials_disabled_toast": "教程已禁用", - "tutorials_reset_toast": "所有教程已重置", - "tab_auth": "認證", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "設定通過 LDAP 或 Active Directory 進行的外部身分驗證。使用者將能够使用其域憑證登入。", - "ldap_enabled": "啟用 LDAP 認證", - "ldap_enabled_hint": "啟用後,使用者可以使用 LDAP/AD 憑證登入。本機帐戶仍可作為備用。", - "ldap_connection": "伺服器連線", - "ldap_host": "主機", - "ldap_port": "端口", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "跳過 TLS 驗證", - "ldap_timeout": "連線超時 (秒)", - "ldap_timeout_hint": "等待 LDAP 伺服器回應的秒數", - "ldap_bind_mode": "绑定模式", - "ldap_direct_bind": "直接绑定", - "ldap_direct_bind_hint": "使用 DN 模板直接绑定,而不是使用服務帐戶進行搜尋。", - "ldap_bind_dn": "绑定 DN(服務帐戶)", - "ldap_bind_dn_hint": "用於搜尋使用者的唯讀服務帐戶的可分辨名稱。", - "ldap_bind_password": "绑定密碼", - "ldap_base_dn": "基礎 DN", - "ldap_base_dn_hint": "查找使用者的搜尋基礎,例如 dc=example,dc=com", - "ldap_user_filter": "使用者過濾器", - "ldap_user_filter_hint": "用於查找使用者的 LDAP 過濾器。使用 {{username}} 作為占位符。預設值:(sAMAccountName={{username}})", - "ldap_direct_bind_dn": "直接绑定 DN 模板", - "ldap_direct_bind_dn_hint": "直接绑定的 DN 模板。使用 {{username}} 作為占位符,例如 uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "使用者屬性", - "ldap_attr_id": "使用者名屬性", - "ldap_attr_email": "郵箱屬性", - "ldap_attr_name": "顯示名稱屬性", - "ldap_group_mapping": "組 → 角色對應", - "ldap_group_base_dn": "組基礎 DN", - "ldap_group_base_dn_hint": "留空則使用主基礎 DN", - "ldap_group_filter": "組過濾器", - "ldap_group_attr_name": "組名屬性", - "ldap_default_role": "預設角色", - "ldap_default_role_hint": "分配给 LDAP 組不匹配任何對應的使用者的角色", - "ldap_role_viewer": "查看者", - "ldap_role_operator": "操作員", - "ldap_role_admin": "管理員", - "ldap_group_role_map": "組 → 角色對應", - "ldap_group_role_map_hint": "將 LDAP 組對應到 BetterDesk 角色。格式:GroupDN=角色,用 |(管道符)分隔。示例:CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "測試連線", - "ldap_testing": "測試中...", - "ldap_test_success": "連線成功!LDAP 伺服器可存取且绑定憑證有效。", - "ldap_test_failed": "連線失敗", - "ldap_save": "儲存 LDAP 設定", - "ldap_saved": "LDAP 設定已成功儲存", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "通過 OpenID Connect 提供者設定單點登入 (Azure AD、Okta、Google、Keycloak 等)。", - "oidc_enabled": "啟用 OIDC 身分驗證", - "oidc_enabled_hint": "允许使用者通過外部身分提供者登入", - "oidc_provider": "身分提供者", - "oidc_display_name": "按钮顯示名稱", - "oidc_display_name_hint": "登入按钮上顯示的文字 (例如 Azure AD、Okta)", - "oidc_issuer_url": "發行者 URL", - "oidc_issuer_url_hint": "OpenID Connect 發行者 URL (將自動發現)", - "oidc_client_id": "客戶端 ID", - "oidc_client_secret": "客戶端金鑰", - "oidc_redirect_url": "重定向 URL (回呼)", - "oidc_redirect_url_hint": "必須與身分提供者中的設定完全匹配。通常為: http(s)://your-server:21121/api/auth/oidc/callback", - "oidc_scopes": "作用域", - "oidc_use_pkce": "使用 PKCE (推荐)", - "oidc_auto_discovery": "自動發現", - "oidc_allow_signup": "自動建立使用者", - "oidc_manual_endpoints": "手動端點 URL", - "oidc_authorization_url": "授權端點", - "oidc_token_url": "令牌端點", - "oidc_userinfo_url": "使用者資訊端點", - "oidc_claim_mapping": "聲明對應", - "oidc_claim_username": "使用者名聲明", - "oidc_claim_email": "電子郵件聲明", - "oidc_claim_name": "顯示名稱聲明", - "oidc_claim_groups": "組聲明", - "oidc_role_mapping": "角色對應", - "oidc_default_role": "預設角色", - "oidc_group_role_map": "組 → 角色對應", - "oidc_group_role_map_hint": "每行一個對應: 組名=角色 (例如 admins=admin, operators=operator)", - "oidc_test_discovery": "測試發現", - "oidc_testing": "測試中...", - "oidc_test_success": "發現成功!端點已解析。", - "oidc_test_failed": "發現失敗", - "oidc_issuer_required": "測試發現需要發行者 URL", - "oidc_save": "儲存 OIDC 設定", - "oidc_saved": "OIDC 設定已成功儲存", - "tab_advanced": "進階", - "connection_mode_title": "連線策略", - "connection_mode_desc": "控制 RustDesk 桌面用戶端的連線方式:盡可能直接 P2P(打洞),或始終透過中繼。", - "connection_mode_label": "預設連線模式", - "connection_mode_p2p_first": "P2P 優先(建議)— 嘗試直連,失敗時退回中繼", - "connection_mode_relay_only": "僅中繼 — 所有工作階段透過中繼伺服器", - "connection_mode_advanced": "進階選項", - "connection_mode_fallback_ms": "P2P 退回逾時(毫秒)", - "connection_mode_same_nat_relay": "當雙方共用相同公網 IP 時強制使用中繼(NAT 髮夾)", - "connection_mode_network_hint": "P2P 需要用戶端間可達 UDP 21116 埠。伺服器需開放信令 TCP 21116、中繼 TCP 21117、NAT 檢測 TCP 21115。瀏覽器用戶端一律使用中繼。", - "connection_mode_save": "儲存", - "connection_mode_save_restart": "儲存並重新啟動伺服器", - "connection_mode_saved": "連線模式已儲存", - "connection_mode_restart_started": "伺服器重新啟動已啟動", - "connection_mode_restart_failed": "伺服器重新啟動失敗", - "connection_mode_not_configurable": "此部署無法變更連線模式(未找到 systemd 單元或 docker-compose)", - "connection_mode_compose_error": "在 docker-compose.yml 中找不到伺服器環境節", - "connection_mode_source_saved": "儲存於", - "connection_mode_source_defaults": "使用伺服器預設值(面板不可寫入)", - "connection_mode_runtime": "作用中伺服器", - "advanced_title": "設定檔", - "advanced_desc": "直接編輯伺服器設定檔。變更可能需要重新啟動服務。每次儲存前會建立備份副本。", - "advanced_warning": "這些檔案包含機密(API 金鑰、資料庫密碼、工作階段金鑰)。僅在清楚操作影響時進行編輯。語法錯誤可能導致伺服器無法啟動。", - "advanced_files_label": "檔案", - "advanced_select_file": "從清單中選取檔案以檢視或編輯其內容。", - "advanced_reload": "重新載入", - "advanced_save": "儲存檔案", - "advanced_apply_restart": "套用(重新啟動服務)", - "advanced_saved": "設定檔已儲存", - "advanced_restart_after_save": "設定已儲存。立即重新啟動受影響的服務以使變更生效?", - "advanced_restart_confirm": "重新啟動相關 BetterDesk 服務?作用中連線可能短暫中斷。", - "advanced_restart_console_confirm": "重新啟動 Web 主控台服務?瀏覽器工作階段將短暫中斷,主控台恢復後頁面將自動重新載入。", - "advanced_restart_started": "服務重新啟動已啟動", - "advanced_restart_done": "主控台已重新啟動 — 正在重新載入頁面…", - "advanced_restart_polling": "等待主控台恢復上線…", - "advanced_restart_timeout": "重新啟動命令已送出,但主控台未及時回應。請查看 systemd/NSSM 日誌並手動重新載入。", - "advanced_restart_failed": "服務重新啟動失敗(權限不足或服務未安裝)", - "advanced_save_confirm": "儲存此檔案的變更?將建立先前版本的備份。", - "advanced_unsaved_confirm": "存在未儲存的變更。捨棄?", - "advanced_no_files": "此系統上沒有可用的設定檔。", - "advanced_readonly": "唯讀", - "advanced_missing": "遺失", - "advanced_new_file": "新檔案(儲存前不會建立)", - "advanced_new_file_hint": "新檔案 — 新增內容並儲存", - "advanced_backup_created": "備份已建立", - "advanced_restart_console": "重新啟動 Web 主控台服務(例如 systemctl restart betterdesk-console)以使 .env 變更生效。", - "advanced_restart_goserver": "重新啟動 BetterDesk Go 伺服器以載入封鎖清單變更。", - "advanced_restart_systemd": "編輯 systemd 單元後,執行:systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "重新啟動受影響的服務以使變更生效。", - "advanced_error_unknown": "未知設定檔", - "advanced_error_not_found": "檔案不存在", - "advanced_error_not_file": "路徑不是一般檔案", - "advanced_error_too_large": "檔案超過最大可編輯大小(512 KB)", - "advanced_error_binary": "無法在面板中編輯二進位檔案", - "advanced_error_invalid": "檔案內容無效", - "advanced_error_not_writable": "主控台處理程序無寫入權限", - "advanced_file_console-env": "主控台環境(.env)", - "advanced_file_console-env-local": "主控台覆寫(.env.local)", - "advanced_file_go-blocklist": "Go 伺服器封鎖清單(blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console(服務單元)", - "advanced_file_systemd-server": "systemd: betterdesk-server(服務單元)", - "advanced_file_console-session-secret": "主控台工作階段金鑰(.session_secret)", - "advanced_file_go-audit-log": "Go 伺服器稽核日誌(audit.jsonl)", - "advanced_file_build-env": "代理建置環境(/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 設定)", - "advanced_file_docker-compose": "Docker: docker-compose.yml(編排)", - "advanced_restart_none": "此檔案無需重新啟動服務。", - "enrollment_title": "裝置註冊(RustDesk)", - "enrollment_desc": "控制新 RustDesk 用戶端的註冊方式,以及操作員在註冊請求頁面的審核方式。", - "enrollment_require_approval": "需要操作員審核(受管模式)", - "enrollment_require_approval_hint": "啟用後,未知用戶端將排隊等待操作員在「註冊請求」中審核。", - "enrollment_rich_approve": "完整審核表單(名稱、資料夾、群組、標籤)", - "enrollment_rich_approve_hint": "在審核註冊或 LAN 註冊請求時顯示詳細對話框。", - "enrollment_tag_picker": "從現有裝置標籤中選擇標籤", - "enrollment_tag_picker_hint": "允許操作員從裝置頁面的標籤清單中選擇,而不僅限於手動輸入。", - "enrollment_open_requests": "開啟註冊請求", - "enrollment_pending_count": "{count} 個待處理的註冊請求" - }, - "audit": { - "time": "時間", - "user": "使用者", - "action": "操作", - "details": "詳情", - "action_login": "Login", - "action_login_failed": "登入失敗", - "action_logout": "Logout", - "action_password_change": "密碼已變更", - "action_2fa_enable": "已啟用 2FA", - "action_2fa_disable": "已停用 2FA", - "action_user_create": "使用者已建立", - "action_user_update": "使用者已更新", - "action_user_delete": "使用者已刪除", - "action_settings_update": "設定已更新", - "action_device_ban": "裝置已封禁", - "action_device_unban": "裝置已解封", - "action_device_delete": "裝置已刪除" - }, - "generator": { - "title": "代理程式產生器", - "subtitle": "為您的終端使用者建立品牌化的 BetterDesk 代理程式安裝檔", - "bundles_title": "代理程式套件", - "new_bundle": "新增套件", - "editor_title": "套件編輯器", - "empty_state": "請從左側選擇套件或建立新的套件。", - "loading": "載入中…", - "no_bundles": "尚無套件,請建立第一個。", - "bundle_name": "套件名稱", - "bundle_name_hint": "僅內部標籤,不會顯示給終端使用者。", - "short_link": "短下載連結", - "short_link_hint": "用於公開 URL(/d/…)。僅小寫字母、數字和連字號(2–32 個字元)。從套件名稱自動填入 — 可縮短以便分享(例如 acme)。", - "branding_section": "品牌設定", - "company_name": "公司 / 品牌名稱", - "short_text": "簡短說明", - "contact_email": "聯絡電子郵件", - "contact_phone": "聯絡電話", - "contact_url": "聯絡網站", - "logo": "標誌", - "logo_hint": "PNG、JPEG、SVG 或 WebP,最大 256 KB。", - "logo_clear": "移除標誌", - "primary_color": "主要色彩", - "accent_color": "標頭色彩", - "default_lang": "預設語言", - "allow_unattended": "允許無人值守存取", - "allow_unattended_hint": "啟用時,代理程式會顯示永久密碼供操作員存取。", - "save": "儲存套件", - "revoke": "撤銷", - "unrevoke": "重新啟用", - "revoked": "已撤銷", - "preview_title": "即時預覽", - "preview_hint": "終端使用者代理程式視窗的近似外觀。", - "preview_default_name": "BetterDesk 支援", - "preview_status_ready": "就緒", - "preview_id": "您的 ID", - "preview_password": "密碼", - "preview_chat": "與支援人員交談", - "preview_settings": "設定(僅管理員)", - "preview_quit": "結束(僅管理員)", - "download_link_title": "下載連結", - "download_link_hint": "與終端使用者共用此連結,他們會看到品牌化的下載頁面。 變更短連結後,舊的 hex 連結仍可正常使用。", - "open_portal": "開啟", - "created": "套件已建立", - "saved": "套件已儲存", - "deleted": "套件已刪除", - "revoked_ok": "套件已撤銷", - "unrevoked_ok": "套件已重新啟用", - "link_copied": "連結已複製到剪貼簿", - "copy_failed": "無法自動複製 — 請手動複製", - "unsaved_confirm": "捨棄未儲存的變更?", - "confirm_revoke": "撤銷此套件?下載連結將停止運作。", - "confirm_unrevoke": "重新啟用此套件?", - "confirm_delete": "永久刪除此套件?此操作無法復原。", - "errors": { - "validation_failed": "驗證失敗", - "name_required": "套件名稱為必填", - "company_name_required": "公司名稱為必填", - "logo_invalid": "標誌必須是有效的圖片檔", - "logo_too_large": "標誌大小不可超過 256 KB", - "logo_read_failed": "讀取標誌檔失敗", - "primary_color_invalid": "主要色彩必須是十六進位值(例如 #2563eb)", - "accent_color_invalid": "標頭色彩必須是十六進位值(例如 #1e293b)", - "contact_url_invalid": "聯絡網站必須是有效的網址", - "server_host_required": "公開伺服器位址為必填項", - "server_host_invalid": "請輸入有效的網域名稱或 IPv4 位址", - "token_failed": "無法產生註冊權杖 — 請檢查伺服器連線", - "rebuild_revoked": "無法重建已撤銷的套件 — 請先重新啟用", - "slug_invalid": "短連結只能包含小寫字母、數字和連字號", - "slug_too_short": "短連結至少需要 2 個字元", - "slug_too_long": "短連結最多 32 個字元", - "slug_taken": "此短連結已被其他套件使用" - }, - "legacy_title": "用戶端設定產生器", - "config_options": "設定選項", - "server_address": "伺服器地址", - "server_address_hint": "您的伺服器域名或 IP 位址", - "custom_port": "自定義埠", - "port_hint": "留空使用預設埠 (21116)", - "relay_server": "中繼伺服器", - "relay_placeholder": "留空則與 ID 伺服器相同", - "relay_hint": "可選:單獨的中繼伺服器地址", - "include_key": "在配置中包含公鑰", - "generate": "產生設定", - "output": "設定輸出", - "usage_title": "連線詳情", - "generated": "設定已產生", - "server_required": "伺服器地址為必填欄位", - "nothing_to_copy": "請先產生設定", - "connection_section": "伺服器連線", - "server_host": "公開伺服器位址", - "server_host_placeholder": "support.example.com 或 203.0.113.10", - "server_host_hint": "終端使用者存取您 BetterDesk 伺服器的網域名稱或公開 IP。連接埠取自主控台設定。", - "use_https": "使用 HTTPS / WSS(建議)", - "enrollment_token": "裝置註冊", - "enrollment_token_pending": "每台裝置審核後分配", - "enrollment_token_set": "每台裝置 — 在註冊中審核", - "enrollment_token_hint": "每次安裝獨立註冊。在註冊面板審核新裝置後,伺服器為每台電腦核發唯一存取金鑰。", - "enrollment_per_device": "每台裝置 — 在註冊中審核", - "background_color": "視窗背景色", - "surface_color": "卡片背景色", - "text_color": "文字顏色", - "text_muted_color": "次要文字顏色", - "status_ready_color": "就緒指示器顏色", - "header_text_color": "標題文字顏色", - "builds_title": "用戶端建置", - "builds_hint": "在此伺服器上為各平台編譯的安裝程式。修正工具鏈錯誤或更新代理程式原始碼後重新建置。", - "builds_loading": "正在載入建置狀態…", - "builds_empty": "尚無建置排隊 — 儲存套件或按一下「全部重建」。", - "rebuild_all": "全部重建", - "rebuilding_all": "正在排隊重建…", - "rebuild_queued": "所有平台建置已排隊", - "rebuild_confirm": "重建此套件的所有平台安裝程式?現有就緒成品將被取代。", - "build_status_ready": "就緒", - "build_status_pending": "排隊中", - "build_status_building": "建置中", - "build_status_failed": "失敗", - "builds_summary": "{{ready}} 就緒 · {{pending}} 排隊中 · {{building}} 建置中 · {{failed}} 失敗", - "build_error_hint": "建置錯誤", - "preview_help": "請求協助" - }, - "download": { - "title": "下載 BetterDesk 代理程式", - "choose_platform": "選擇您的平台", - "choose_platform_hint": "選擇符合您作業系統的安裝程式。", - "download": "下載", - "building": "建置中…", - "failed": "建置失敗", - "need_help": "需要協助?", - "powered_by": "技術支援" - }, - "server": { - "port": "埠", - "api_port": "API 埠", - "id_server": "ID 伺服器", - "relay_server": "中繼伺服器", - "api_key": "API 金鑰" - }, - "status": { - "online": "線上", - "offline": "離線", - "banned": "已封鎖", - "running": "執行中", - "stopped": "已停止", - "unknown": "未知", - "checking": "檢查中...", - "label": "Status", - "no_signal": "無信號" - }, - "actions": { - "refresh": "重新整理", - "copy": "複製", - "connect": "連線", - "connect_desktop": "透過桌面用戶端連線", - "remote_viewer": "遠端檢視器", - "web_remote": "Web遠端", - "details": "詳情", - "edit": "編輯", - "delete": "刪除", - "ban": "封鎖", - "unban": "解除封鎖", - "save": "儲存", - "cancel": "取消", - "confirm": "確認", - "close": "關閉", - "clear": "清除", - "ok": "確定", - "saved": "儲存成功", - "back": "返回", - "create": "建立", - "dismiss": "忽略", - "view_all": "檢視全部", - "cdap_viewer": "CDAP Snapshot Viewer", - "add": "添加", - "remove": "移除" - }, - "time": { - "just_now": "剛剛", - "seconds_ago": "{count}秒前", - "minutes_ago": "{count}分鐘前", - "hours_ago": "{count}小時前", - "days_ago": "{count}天前", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "使用者管理", - "subtitle": "管理控制台使用者和許可權", - "add_user": "新增使用者", - "edit_user": "編輯使用者", - "username": "使用者名稱", - "username_placeholder": "請輸入使用者名稱", - "username_hint": "3-32 個字元,僅限字母、數字和底線", - "password": "密碼", - "password_placeholder": "請輸入密碼", - "password_hint": "至少 8 個字元,包含大小寫字母、數字和符號", - "password_leave_empty": "留空保持不變", - "role": "角色", - "role_admin": "管理員", - "role_operator": "操作員", - "role_viewer": "檢視者", - "role_pro": "Pro(僅限API)", - "role_hint": "檢視者只能檢視資料,操作員可以管理裝置,管理員擁有全部許可權。Pro 僅可透過 RustDesk 用戶端登入", - "created": "建立時間", - "last_login": "最後登入", - "never": "從未", - "actions": "操作", - "create": "建立使用者", - "edit": "編輯", - "reset_password": "重置密碼", - "new_password": "新密碼", - "delete_title": "刪除使用者", - "delete_confirm": "確定要刪除使用者 {username} 嗎?", - "delete_success": "使用者刪除成功", - "user_created": "使用者建立成功", - "user_updated": "使用者更新成功", - "password_reset_success": "密碼重置成功", - "empty_title": "找不到使用者", - "empty_text": "新增使用者以管理控制台存取許可權", - "fill_required": "請填寫所有必填欄位", - "invalid_username": "使用者名稱必須為 3-32 個字元,僅限字母、數字和底線", - "username_exists": "使用者名稱已存在", - "weak_password": "密碼強度太弱", - "password_too_short": "密碼至少需要 8 個字元", - "invalid_role": "無效的角色", - "cannot_demote_self": "您無法降低自己的許可權", - "cannot_delete_self": "您無法刪除自己的帳戶", - "last_admin": "無法刪除最後一個管理員", - "admin_only": "此功能僅對管理員可用", - "password_required": "密碼為必填欄位", - "not_found": "找不到使用者", - "strength_weak": "弱", - "strength_medium": "中", - "strength_strong": "強", - "security_tips_title": "安全最佳實踐", - "tip_strong_passwords": "為每個使用者使用強且唯一的密碼", - "tip_unique_accounts": "為每個人建立獨立的帳戶", - "tip_viewer_role": "對只需要檢視許可權的使用者使用檢視者角色", - "tip_operator_role": "對需要管理裝置但不需要管理使用者的人員使用操作員角色", - "tip_audit_logs": "定期檢查稽核日誌以發現可疑活動", - "role_super_admin": "Super Admin", - "role_server_admin": "伺服器管理員", - "role_global_admin": "全局管理員", - "organizations": "組織", - "user_organizations": "{username} 的組織", - "no_organizations": "使用者未分配到任何組織", - "org_removed": "組織分配已刪除", - "server_role_label": "伺服器角色", - "server_role_hint": "决定該使用者在整個主控台中可以執行的操作(面板存取、伺服器設定、稽核等)。", - "org_membership_section": "組織成員關系", - "org_membership_hint": "使用者可以屬於多個組織。組織角色只控制該組織內的權限,并且独立於上方的伺服器角色。", - "column_organizations": "組織", - "no_orgs_short": "—", - "org_count_one": "{count} 個組織", - "org_count_many": "{count} 個組織", - "all_orgs_assigned": "該使用者已经是所有組織的成員。", - "user_groups": "使用者群組", - "user_groups_hint": "使用者群組可用於授予对所選裝置群組的存取權限。", - "loading_user_groups": "正在載入使用者群組...", - "no_user_groups": "沒有可用的使用者群組", - "create_user_group": "建立群組", - "edit_user_group": "编辑使用者群組", - "delete_user_group": "刪除使用者群組", - "delete_user_group_confirm": "刪除使用者群組 {name}?成員將失去通過該組授予的存取權限。", - "user_group_created": "使用者群組已建立", - "user_group_updated": "使用者群組已更新", - "user_group_deleted": "使用者群組已刪除", - "user_group_not_found": "未找到使用者群組", - "group_name": "組名稱", - "group_name_placeholder": "操作員", - "group_note": "Note", - "group_note_placeholder": "可選備注", - "group_name_required": "必須填寫組名稱", - "group_members_count": "{count} 名成員", - "provider": "提供者", - "provider_local": "本機", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "由身分識別提供者管理", - "provider_managed_hint": "此帳戶由外部身分識別提供者(LDAP/AD 或 SSO)管理。密碼和角色由提供者控制,無法在此處變更。" - }, - "folders": { - "title": "資料夾", - "create": "建立資料夾", - "edit": "編輯資料夾", - "delete": "刪除資料夾", - "name": "資料夾名稱", - "name_placeholder": "請輸入資料夾名稱", - "name_required": "資料夾名稱為必填欄位", - "name_too_long": "資料夾名稱過長(最多 50 個字元)", - "color": "顏色", - "icon": "圖示", - "not_found": "找不到資料夾", - "delete_confirm": "確定要刪除此資料夾嗎?裝置將被取消分配。", - "delete_success": "資料夾刪除成功", - "created": "資料夾建立成功", - "updated": "資料夾更新成功", - "no_devices_selected": "未選擇裝置", - "devices_moved": "裝置移動成功", - "device_assigned": "裝置已分配到資料夾", - "unassigned": "未分配", - "all_devices": "所有裝置", - "drag_hint": "將裝置拖拽到資料夾中進行分組", - "move_to": "移動到", - "toggle_sidebar": "切換側邊欄" - }, + "no_groups": "還沒有群組", + "manual_groups": "手動群組", + "dynamic_memberships": "動態成員關系", + "group_allowed_user_groups": "允许的使用者群組", + "group_allowed_user_groups_hint": "所選使用者群組中的使用者可以存取此裝置群組。", + "no_user_groups": "沒有使用者群組", + "edit_group": "编辑群組", + "delete_group": "刪除群組", + "delete_group_confirm": "刪除裝置群組 {name}?", + "group_deleted": "裝置群組已刪除", + "folder_group_readonly": "資料夾關聯的群組由資料夾管理。", + "manage_user_groups": "管理使用者群組", + "restore_failed": "還原裝置失敗", + "no_signal_tooltip": "用戶端最近聯絡了 API,但未在訊號伺服器(UDP :21116)上註冊。伺服器遷移後請重新啟動用戶端。", + "per_page": "每頁" + }, + "keys": { + "title": "伺服器金鑰", + "subtitle": "RustDesk 用戶端的公鑰和設定", + "public_key": "公鑰", + "qr_code": "QR Code", + "server_info": "伺服器資訊", + "download": "下載金鑰", + "show_qr": "顯示 QR Code", + "qr_hint": "使用 RustDesk 行動端應用掃描此 QR Code", + "no_key": "找不到公鑰", + "no_key_to_copy": "沒有可複製的金鑰", + "no_qr": "QR Code 不可用", + "download_success": "金鑰檔案已下載", + "not_found": "找不到金鑰", + "api_not_found": "找不到 API 金鑰" + }, + "settings": { + "title": "設定", + "subtitle": "控制台設定和帳戶設定", + "tab_general": "一般", + "tab_server": "伺服器", + "tab_branding": "品牌", + "tab_backup": "備份", + "language": "語言", + "change_password": "修改密碼", + "password_desc": "更新您的帳戶密碼", + "current_password": "目前密碼", + "new_password": "新密碼", + "confirm_password": "確認密碼", + "save_password": "更新密碼", + "password_changed": "密碼修改成功", + "fill_all_fields": "請填寫所有欄位", + "passwords_not_match": "兩次輸入的密碼不一致", + "password_requirements": "密碼要求", + "password_requirements_not_met": "密碼不符合要求", + "req_length": "至少 8 個字元", + "req_uppercase": "至少一個大寫字母", + "req_lowercase": "至少一個小寫字母", + "req_number": "至少一個數字", + "server_info": "伺服器資訊", + "version": "版本", + "database": "資料庫", + "uptime": "運行時間", + "audit_log": "稽核日誌", + "audit_desc": "最近的控制台活動", + "no_audit_logs": "找不到稽核日誌", + "backend_title": "伺服器後端", + "backend_desc": "選擇用於裝置管理和信令/中繼服務的伺服器後端。", + "backend_original": "標準版", + "backend_enhanced": "增強版", + "backend_rustdesk_desc": "標準 RustDesk 信令和中繼伺服器(hbbs + hbbr)。基礎 HTTP API,端點有限。", + "backend_betterdesk_desc": "增強型 Go 伺服器,具有完整 REST API、JWT 認證、黑名單、標籤、實時 WebSocket 事件和稽核日誌。", + "backend_feature_signal": "信令伺服器(ID 註冊)", + "backend_feature_relay": "中繼伺服器(連線中繼)", + "backend_feature_basic_api": "基礎 REST API", + "backend_feature_full_api": "完整 REST API(34+ 個端點)", + "backend_feature_jwt": "JWT 認證 & TOTP 雙因素認證", + "backend_feature_blocklist": "IP/ID 黑名單管理", + "backend_feature_tags": "裝置標籤與分組", + "backend_feature_audit": "稽核事件日誌", + "backend_feature_websocket": "實時 WebSocket 事件", + "backend_connection": "連線", + "backend_api_url": "API 地址", + "backend_test": "測試連線", + "backend_testing": "測試中...", + "backend_save": "應用後端", + "backend_saved": "伺服器後端切換成功。裝置資料將由新後端管理。", + "backend_save_failed": "切換伺服器後端失敗", + "backend_test_success": "連線成功!伺服器可存取。", + "backend_test_failed": "連線失敗。伺服器不可存取。", + "backend_confirm_switch": "確定要切換伺服器後端嗎?這將改變裝置的管理方式。", + "backend_unreachable": "無法切換:目標伺服器不可存取。請先啟動伺服器。", + "invalid_backend": "無效的後端選擇。請選擇 'rustdesk' 或 'betterdesk'。", + "backend_status_running": "已連線", + "backend_status_unreachable": "不可存取", + "backend_status_error": "錯誤", + "backend_status_unknown": "未知", + "totp_title": "雙因素認證", + "totp_desc": "使用 TOTP 驗證器應用(Google Authenticator、Microsoft Authenticator、Authy 等)為您的帳戶增加額外的安全保護", + "totp_enabled": "已啟用雙因素認證", + "totp_enabled_desc": "您的帳戶已啟用雙因素認證保護。", + "totp_disabled": "未啟用雙因素認證", + "totp_disabled_desc": "啟用雙因素認證以增強帳戶安全性。", + "totp_setup": "啟用雙因素認證", + "totp_disable": "關閉雙因素認證", + "totp_step1": "在手機上安裝驗證器應用", + "totp_step2": "掃描下方QR Code", + "totp_step3": "輸入 6 位驗證碼進行驗證", + "totp_manual_key": "手動輸入金鑰", + "totp_enter_code": "輸入驗證碼", + "totp_verify_enable": "驗證並啟用", + "totp_enabled_success": "雙因素認證已啟用!", + "totp_recovery_warning": "請將這些復原碼儲存在安全的地方。每個復原碼只能使用一次。如果您無法存取驗證器應用,可以使用這些復原碼登入。", + "totp_done": "完成", + "totp_disable_warning": "關閉雙因素認證會降低您帳戶的安全性。請輸入密碼確認。", + "totp_disabled_success": "雙因素認證已關閉。", + "tutorials_title": "教程與引導", + "tutorials_desc": "管理控制台中顯示的引導教程和帮助覆盖层", + "tutorials_enabled": "啟用教程", + "tutorials_enabled_hint": "禁用後,教程將不會自动啟动,帮助按钮將被隐藏", + "tutorials_reset_hint": "將所有教程標记為未查看,以便再次顯示", + "tutorials_enabled_toast": "教程已啟用", + "tutorials_disabled_toast": "教程已禁用", + "tutorials_reset_toast": "所有教程已重置", + "tab_auth": "認證", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "設定通過 LDAP 或 Active Directory 進行的外部身分驗證。使用者將能够使用其域憑證登入。", + "ldap_enabled": "啟用 LDAP 認證", + "ldap_enabled_hint": "啟用後,使用者可以使用 LDAP/AD 憑證登入。本機帐戶仍可作為備用。", + "ldap_connection": "伺服器連線", + "ldap_host": "主機", + "ldap_port": "端口", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "跳過 TLS 驗證", + "ldap_timeout": "連線超時 (秒)", + "ldap_timeout_hint": "等待 LDAP 伺服器回應的秒數", + "ldap_bind_mode": "绑定模式", + "ldap_direct_bind": "直接绑定", + "ldap_direct_bind_hint": "使用 DN 模板直接绑定,而不是使用服務帐戶進行搜尋。", + "ldap_bind_dn": "绑定 DN(服務帐戶)", + "ldap_bind_dn_hint": "用於搜尋使用者的唯讀服務帐戶的可分辨名稱。", + "ldap_bind_password": "绑定密碼", + "ldap_base_dn": "基礎 DN", + "ldap_base_dn_hint": "查找使用者的搜尋基礎,例如 dc=example,dc=com", + "ldap_user_filter": "使用者過濾器", + "ldap_user_filter_hint": "用於查找使用者的 LDAP 過濾器。使用 {{username}} 作為占位符。預設值:(sAMAccountName={{username}})", + "ldap_direct_bind_dn": "直接绑定 DN 模板", + "ldap_direct_bind_dn_hint": "直接绑定的 DN 模板。使用 {{username}} 作為占位符,例如 uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "使用者屬性", + "ldap_attr_id": "使用者名屬性", + "ldap_attr_email": "郵箱屬性", + "ldap_attr_name": "顯示名稱屬性", + "ldap_group_mapping": "組 → 角色對應", + "ldap_group_base_dn": "組基礎 DN", + "ldap_group_base_dn_hint": "留空則使用主基礎 DN", + "ldap_group_filter": "組過濾器", + "ldap_group_attr_name": "組名屬性", + "ldap_default_role": "預設角色", + "ldap_default_role_hint": "分配给 LDAP 組不匹配任何對應的使用者的角色", + "ldap_role_viewer": "查看者", + "ldap_role_operator": "操作員", + "ldap_role_admin": "管理員", + "ldap_group_role_map": "組 → 角色對應", + "ldap_group_role_map_hint": "將 LDAP 組對應到 BetterDesk 角色。格式:GroupDN=角色,用 |(管道符)分隔。示例:CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "測試連線", + "ldap_testing": "測試中...", + "ldap_test_success": "連線成功!LDAP 伺服器可存取且绑定憑證有效。", + "ldap_test_failed": "連線失敗", + "ldap_save": "儲存 LDAP 設定", + "ldap_saved": "LDAP 設定已成功儲存", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "通過 OpenID Connect 提供者設定單點登入 (Azure AD、Okta、Google、Keycloak 等)。", + "oidc_enabled": "啟用 OIDC 身分驗證", + "oidc_enabled_hint": "允许使用者通過外部身分提供者登入", + "oidc_provider": "身分提供者", + "oidc_display_name": "按钮顯示名稱", + "oidc_display_name_hint": "登入按钮上顯示的文字 (例如 Azure AD、Okta)", + "oidc_issuer_url": "發行者 URL", + "oidc_issuer_url_hint": "OpenID Connect 發行者 URL (將自動發現)", + "oidc_client_id": "客戶端 ID", + "oidc_client_secret": "客戶端金鑰", + "oidc_redirect_url": "重定向 URL (回呼)", + "oidc_redirect_url_hint": "必須與身分提供者中的設定完全匹配。通常為: http(s)://your-server:21121/api/auth/oidc/callback", + "oidc_scopes": "作用域", + "oidc_use_pkce": "使用 PKCE (推荐)", + "oidc_auto_discovery": "自動發現", + "oidc_allow_signup": "自動建立使用者", + "oidc_manual_endpoints": "手動端點 URL", + "oidc_authorization_url": "授權端點", + "oidc_token_url": "令牌端點", + "oidc_userinfo_url": "使用者資訊端點", + "oidc_claim_mapping": "聲明對應", + "oidc_claim_username": "使用者名聲明", + "oidc_claim_email": "電子郵件聲明", + "oidc_claim_name": "顯示名稱聲明", + "oidc_claim_groups": "組聲明", + "oidc_role_mapping": "角色對應", + "oidc_default_role": "預設角色", + "oidc_group_role_map": "組 → 角色對應", + "oidc_group_role_map_hint": "每行一個對應: 組名=角色 (例如 admins=admin, operators=operator)", + "oidc_test_discovery": "測試發現", + "oidc_testing": "測試中...", + "oidc_test_success": "發現成功!端點已解析。", + "oidc_test_failed": "發現失敗", + "oidc_issuer_required": "測試發現需要發行者 URL", + "oidc_save": "儲存 OIDC 設定", + "oidc_saved": "OIDC 設定已成功儲存", + "tab_advanced": "進階", + "connection_mode_title": "連線策略", + "connection_mode_desc": "控制 RustDesk 桌面用戶端的連線方式:盡可能直接 P2P(打洞),或始終透過中繼。", + "connection_mode_label": "預設連線模式", + "connection_mode_p2p_first": "P2P 優先(建議)— 嘗試直連,失敗時退回中繼", + "connection_mode_relay_only": "僅中繼 — 所有工作階段透過中繼伺服器", + "connection_mode_advanced": "進階選項", + "connection_mode_fallback_ms": "P2P 退回逾時(毫秒)", + "connection_mode_same_nat_relay": "當雙方共用相同公網 IP 時強制使用中繼(NAT 髮夾)", + "connection_mode_network_hint": "P2P 需要用戶端間可達 UDP 21116 埠。伺服器需開放信令 TCP 21116、中繼 TCP 21117、NAT 檢測 TCP 21115。瀏覽器用戶端一律使用中繼。", + "connection_mode_save": "儲存", + "connection_mode_save_restart": "儲存並重新啟動伺服器", + "connection_mode_saved": "連線模式已儲存", + "connection_mode_restart_started": "伺服器重新啟動已啟動", + "connection_mode_restart_failed": "伺服器重新啟動失敗", + "connection_mode_not_configurable": "此部署無法變更連線模式(未找到 systemd 單元或 docker-compose)", + "connection_mode_compose_error": "在 docker-compose.yml 中找不到伺服器環境節", + "connection_mode_source_saved": "儲存於", + "connection_mode_source_defaults": "使用伺服器預設值(面板不可寫入)", + "connection_mode_runtime": "作用中伺服器", + "advanced_title": "設定檔", + "advanced_desc": "直接編輯伺服器設定檔。變更可能需要重新啟動服務。每次儲存前會建立備份副本。", + "advanced_warning": "這些檔案包含機密(API 金鑰、資料庫密碼、工作階段金鑰)。僅在清楚操作影響時進行編輯。語法錯誤可能導致伺服器無法啟動。", + "advanced_files_label": "檔案", + "advanced_select_file": "從清單中選取檔案以檢視或編輯其內容。", + "advanced_reload": "重新載入", + "advanced_save": "儲存檔案", + "advanced_apply_restart": "套用(重新啟動服務)", + "advanced_saved": "設定檔已儲存", + "advanced_restart_after_save": "設定已儲存。立即重新啟動受影響的服務以使變更生效?", + "advanced_restart_confirm": "重新啟動相關 BetterDesk 服務?作用中連線可能短暫中斷。", + "advanced_restart_console_confirm": "重新啟動 Web 主控台服務?瀏覽器工作階段將短暫中斷,主控台恢復後頁面將自動重新載入。", + "advanced_restart_started": "服務重新啟動已啟動", + "advanced_restart_done": "主控台已重新啟動 — 正在重新載入頁面…", + "advanced_restart_polling": "等待主控台恢復上線…", + "advanced_restart_timeout": "重新啟動命令已送出,但主控台未及時回應。請查看 systemd/NSSM 日誌並手動重新載入。", + "advanced_restart_failed": "服務重新啟動失敗(權限不足或服務未安裝)", + "advanced_save_confirm": "儲存此檔案的變更?將建立先前版本的備份。", + "advanced_unsaved_confirm": "存在未儲存的變更。捨棄?", + "advanced_no_files": "此系統上沒有可用的設定檔。", + "advanced_readonly": "唯讀", + "advanced_missing": "遺失", + "advanced_new_file": "新檔案(儲存前不會建立)", + "advanced_new_file_hint": "新檔案 — 新增內容並儲存", + "advanced_backup_created": "備份已建立", + "advanced_restart_console": "重新啟動 Web 主控台服務(例如 systemctl restart betterdesk-console)以使 .env 變更生效。", + "advanced_restart_goserver": "重新啟動 BetterDesk Go 伺服器以載入封鎖清單變更。", + "advanced_restart_systemd": "編輯 systemd 單元後,執行:systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "重新啟動受影響的服務以使變更生效。", + "advanced_error_unknown": "未知設定檔", + "advanced_error_not_found": "檔案不存在", + "advanced_error_not_file": "路徑不是一般檔案", + "advanced_error_too_large": "檔案超過最大可編輯大小(512 KB)", + "advanced_error_binary": "無法在面板中編輯二進位檔案", + "advanced_error_invalid": "檔案內容無效", + "advanced_error_not_writable": "主控台處理程序無寫入權限", + "advanced_file_console-env": "主控台環境(.env)", + "advanced_file_console-env-local": "主控台覆寫(.env.local)", + "advanced_file_go-blocklist": "Go 伺服器封鎖清單(blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console(服務單元)", + "advanced_file_systemd-server": "systemd: betterdesk-server(服務單元)", + "advanced_file_console-session-secret": "主控台工作階段金鑰(.session_secret)", + "advanced_file_go-audit-log": "Go 伺服器稽核日誌(audit.jsonl)", + "advanced_file_build-env": "代理建置環境(/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 設定)", + "advanced_file_docker-compose": "Docker: docker-compose.yml(編排)", + "advanced_restart_none": "此檔案無需重新啟動服務。", + "enrollment_title": "裝置註冊(RustDesk)", + "enrollment_desc": "控制新 RustDesk 用戶端的註冊方式,以及操作員在註冊請求頁面的審核方式。", + "enrollment_require_approval": "需要操作員審核(受管模式)", + "enrollment_require_approval_hint": "啟用後,未知用戶端將排隊等待操作員在「註冊請求」中審核。", + "enrollment_rich_approve": "完整審核表單(名稱、資料夾、群組、標籤)", + "enrollment_rich_approve_hint": "在審核註冊或 LAN 註冊請求時顯示詳細對話框。", + "enrollment_tag_picker": "從現有裝置標籤中選擇標籤", + "enrollment_tag_picker_hint": "允許操作員從裝置頁面的標籤清單中選擇,而不僅限於手動輸入。", + "enrollment_open_requests": "開啟註冊請求", + "enrollment_pending_count": "{count} 個待處理的註冊請求" + }, + "audit": { + "time": "時間", + "user": "使用者", + "action": "操作", + "details": "詳情", + "action_login": "Login", + "action_login_failed": "登入失敗", + "action_logout": "Logout", + "action_password_change": "密碼已變更", + "action_2fa_enable": "已啟用 2FA", + "action_2fa_disable": "已停用 2FA", + "action_user_create": "使用者已建立", + "action_user_update": "使用者已更新", + "action_user_delete": "使用者已刪除", + "action_settings_update": "設定已更新", + "action_device_ban": "裝置已封禁", + "action_device_unban": "裝置已解封", + "action_device_delete": "裝置已刪除" + }, + "generator": { + "title": "代理程式產生器", + "subtitle": "為您的終端使用者建立品牌化的 BetterDesk 代理程式安裝檔", + "alpha_badge": "ALPHA", + "alpha_tooltip": "早期功能 — 代理套件產生器仍在積極開發中。", + "bundles_title": "代理程式套件", + "new_bundle": "新增套件", + "editor_title": "套件編輯器", + "empty_state": "請從左側選擇套件或建立新的套件。", + "loading": "載入中…", + "no_bundles": "尚無套件,請建立第一個。", + "bundle_name": "套件名稱", + "bundle_name_hint": "僅內部標籤,不會顯示給終端使用者。", + "short_link": "短下載連結", + "short_link_hint": "用於公開 URL(/d/…)。僅小寫字母、數字和連字號(2–32 個字元)。從套件名稱自動填入 — 可縮短以便分享(例如 acme)。", + "branding_section": "品牌設定", + "company_name": "公司 / 品牌名稱", + "short_text": "簡短說明", + "contact_email": "聯絡電子郵件", + "contact_phone": "聯絡電話", + "contact_url": "聯絡網站", + "logo": "標誌", + "logo_hint": "PNG、JPEG、SVG 或 WebP,最大 256 KB。", + "logo_clear": "移除標誌", + "primary_color": "主要色彩", + "accent_color": "標頭色彩", + "default_lang": "預設語言", + "allow_unattended": "允許無人值守存取", + "allow_unattended_hint": "啟用時,代理程式會顯示永久密碼供操作員存取。", + "save": "儲存套件", + "revoke": "撤銷", + "unrevoke": "重新啟用", + "revoked": "已撤銷", + "preview_title": "即時預覽", + "preview_hint": "終端使用者代理程式視窗的近似外觀。", + "preview_default_name": "BetterDesk 支援", + "preview_status_ready": "就緒", + "preview_id": "您的 ID", + "preview_password": "密碼", + "preview_chat": "與支援人員交談", + "preview_settings": "設定(僅管理員)", + "preview_quit": "結束(僅管理員)", + "download_link_title": "下載連結", + "download_link_hint": "與終端使用者共用此連結,他們會看到品牌化的下載頁面。 變更短連結後,舊的 hex 連結仍可正常使用。", + "open_portal": "開啟", + "created": "套件已建立", + "saved": "套件已儲存", + "deleted": "套件已刪除", + "revoked_ok": "套件已撤銷", + "unrevoked_ok": "套件已重新啟用", + "link_copied": "連結已複製到剪貼簿", + "copy_failed": "無法自動複製 — 請手動複製", + "unsaved_confirm": "捨棄未儲存的變更?", + "confirm_revoke": "撤銷此套件?下載連結將停止運作。", + "confirm_unrevoke": "重新啟用此套件?", + "confirm_delete": "永久刪除此套件?此操作無法復原。", "errors": { - "forbidden_title": "存取被拒絕", - "forbidden_message": "您沒有許可權存取此資源。", - "not_found_title": "頁面找不到", - "not_found_message": "您要查詢的頁面不存在或已被移動。", - "server_error_title": "伺服器錯誤", - "server_error_message": "出現了問題,請稍後重試。", - "go_home": "返回首頁", - "try_again": "重試", - "load_devices_failed": "載入裝置失敗", - "load_key_failed": "載入金鑰失敗", - "load_qr_failed": "載入QR Code失敗", - "load_audit_failed": "載入稽核日誌失敗", - "load_users_failed": "載入使用者失敗", - "load_folders_failed": "載入資料夾失敗", - "download_failed": "下載失敗", - "logout_failed": "登出失敗", - "password_change_failed": "修改密碼失敗", - "language_change_failed": "切換語言失敗", - "ban_failed": "封鎖裝置失敗", - "unban_failed": "解除封鎖失敗", - "delete_failed": "刪除裝置失敗", - "change_id_failed": "更改裝置 ID 失敗", - "bulk_delete_failed": "批次刪除裝置失敗", - "sync_failed": "同步狀態失敗", - "error": "錯誤", - "not_found": "找不到", - "server_error": "伺服器錯誤", - "load_device_failed": "載入裝置失敗", - "load_orgs_failed": "載入組織失敗" + "validation_failed": "驗證失敗", + "name_required": "套件名稱為必填", + "company_name_required": "公司名稱為必填", + "logo_invalid": "標誌必須是有效的圖片檔", + "logo_too_large": "標誌大小不可超過 256 KB", + "logo_read_failed": "讀取標誌檔失敗", + "primary_color_invalid": "主要色彩必須是十六進位值(例如 #2563eb)", + "accent_color_invalid": "標頭色彩必須是十六進位值(例如 #1e293b)", + "contact_url_invalid": "聯絡網站必須是有效的網址", + "server_host_required": "公開伺服器位址為必填項", + "server_host_invalid": "請輸入有效的網域名稱或 IPv4 位址", + "token_failed": "無法產生註冊權杖 — 請檢查伺服器連線", + "rebuild_revoked": "無法重建已撤銷的套件 — 請先重新啟用", + "slug_invalid": "短連結只能包含小寫字母、數字和連字號", + "slug_too_short": "短連結至少需要 2 個字元", + "slug_too_long": "短連結最多 32 個字元", + "slug_taken": "此短連結已被其他套件使用" }, - "remote": { - "title": "遠端桌面", - "connecting": "正在連線...", - "waiting_password": "等待密碼", - "authenticating": "正在認證...", - "streaming": "已連線", - "disconnected": "已斷開", - "error": "錯誤", - "status_idle": "空閒", - "password_required": "需要密碼", - "enter_password_for": "請輸入裝置密碼", - "password_placeholder": "裝置密碼", - "connect": "連線", - "reconnect": "重新連線", - "disconnect": "斷開", - "back_to_devices": "返回裝置列表", - "fullscreen": "全屏", - "toggle_audio": "切換音訊", - "send_keys": "傳送按鍵", - "scale_mode": "縮放模式", - "scale_fit": "適應視窗", - "scale_fill": "填充視窗", - "scale_original": "原始大小 (1:1)", - "scale_stretch": "拉伸填充", - "actions": "操作", - "lock_screen": "鎖定螢幕", - "restart_remote": "重啟遠端裝置", - "refresh_screen": "重新整理螢幕", - "clipboard_paste": "從剪貼簿貼上", - "block_input": "阻止輸入", - "display_settings": "顯示設定", - "image_quality": "影象質量", - "quality_best": "最佳(全質量,60fps)", - "quality_balanced": "平衡", - "quality_low": "效能優先", - "show_cursor": "顯示遠端游標", - "lock_after_session": "工作階段結束後鎖定", - "privacy_mode": "隱私模式", - "disable_clipboard": "禁用剪貼簿", - "chat": "聊天", - "chat_placeholder": "輸入訊息...", - "record": "錄製螢幕", - "view_only": "僅檢視", - "pin_toolbar": "固定工具欄", - "monitors": "顯示器", - "select_monitor": "選擇顯示器", - "quality_speed": "速度(低質量,60fps)", - "quality_quality": "質量(最佳,30fps)", - "recording_started": "錄製已開始", - "recording_stopped": "錄製已停止", - "download_recording": "下載錄製", - "e2e_encrypted": "端到端加密", - "e2e_key_exchange": "正在建立安全通道...", - "confirm_restart": "確定要重啟遠端裝置嗎?", - "webcodecs_not_supported": "您的瀏覽器不支援 WebCodecs API。請使用 Chrome 94+ 或 Edge 94+。", - "webcodecs_insecure_context": "WebCodecs 在 HTTP 下不可用。影片使用軟體回退。為獲得最佳效能,請使用 HTTPS。", - "webcodecs_fallback_active": "軟體影片解碼器已啟用(效能有限)", - "click_to_start": "點選開始", - "autoplay_blocked": "瀏覽器需要使用者互動才能開始播放影片和音訊。", - "start_playback": "開始播放", - "new_connection": "新建連線", - "device_id_placeholder": "輸入裝置ID", - "http_warning": "HTTP模式:僅支援H.264軟體解碼 (~15 FPS)。使用HTTPS可獲得完整效能 (WebCodecs, VP9, 60 FPS)。", - "file_transfer": "檔案傳輸", - "file_upload": "上傳", - "file_download": "下載", - "file_empty": "此資料夾為空", - "file_transfers": "傳輸列表", - "file_complete": "完成", - "file_error": "傳輸失敗", - "file_show_hidden": "顯示隱藏檔案", - "file_new_folder": "新建資料夾", - "file_new_folder_prompt": "輸入資料夾名稱:", - "file_parent": "上級目錄", - "file_root": "根目錄", - "file_rename": "重新命名", - "file_rename_prompt": "輸入新名稱:", - "file_delete_confirm": "確定要刪除此項嗎?", - "file_cancelled": "傳輸已取消", - "2fa_required": "需要雙因素驗證", - "2fa_hint": "輸入驗證器套用中的6位數代碼", - "2fa_invalid": "請輸入有效的6位數代碼", - "verify": "Verify", - "use_cdap_fallback": "使用 CDAP 查看器", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "clipboard_empty": "剪贴板為空", - "clipboard_denied": "剪贴板访问被拒绝。需要HTTPS或未授予權限。", - "file_loading": "加載中...", - "file_timeout": "远程設備未响應。文件传输可能不受支持或在远程計算机上已禁用。", - "codec": "視頻编解碼器", - "codec_auto": "自動(推荐)" + "legacy_title": "用戶端設定產生器", + "config_options": "設定選項", + "server_address": "伺服器地址", + "server_address_hint": "您的伺服器域名或 IP 位址", + "custom_port": "自定義埠", + "port_hint": "留空使用預設埠 (21116)", + "relay_server": "中繼伺服器", + "relay_placeholder": "留空則與 ID 伺服器相同", + "relay_hint": "可選:單獨的中繼伺服器地址", + "include_key": "在配置中包含公鑰", + "generate": "產生設定", + "output": "設定輸出", + "usage_title": "連線詳情", + "generated": "設定已產生", + "server_required": "伺服器地址為必填欄位", + "nothing_to_copy": "請先產生設定", + "connection_section": "伺服器連線", + "server_host": "公開伺服器位址", + "server_host_placeholder": "support.example.com 或 203.0.113.10", + "server_host_hint": "終端使用者存取您 BetterDesk 伺服器的網域名稱或公開 IP。連接埠取自主控台設定。", + "use_https": "使用 HTTPS / WSS(建議)", + "enrollment_token": "裝置註冊", + "enrollment_token_pending": "每台裝置審核後分配", + "enrollment_token_set": "每台裝置 — 在註冊中審核", + "enrollment_token_hint": "每次安裝獨立註冊。在註冊面板審核新裝置後,伺服器為每台電腦核發唯一存取金鑰。", + "enrollment_per_device": "每台裝置 — 在註冊中審核", + "background_color": "視窗背景色", + "surface_color": "卡片背景色", + "text_color": "文字顏色", + "text_muted_color": "次要文字顏色", + "status_ready_color": "就緒指示器顏色", + "header_text_color": "標題文字顏色", + "builds_title": "用戶端建置", + "builds_hint": "在此伺服器上為各平台編譯的安裝程式。修正工具鏈錯誤或更新代理程式原始碼後重新建置。", + "builds_loading": "正在載入建置狀態…", + "builds_empty": "尚無建置排隊 — 儲存套件或按一下「全部重建」。", + "rebuild_all": "全部重建", + "rebuilding_all": "正在排隊重建…", + "rebuild_queued": "所有平台建置已排隊", + "rebuild_confirm": "重建此套件的所有平台安裝程式?現有就緒成品將被取代。", + "build_status_ready": "就緒", + "build_status_pending": "排隊中", + "build_status_building": "建置中", + "build_status_failed": "失敗", + "builds_summary": "{{ready}} 就緒 · {{pending}} 排隊中 · {{building}} 建置中 · {{failed}} 失敗", + "build_error_hint": "建置錯誤", + "preview_help": "請求協助" + }, + "download": { + "title": "下載 BetterDesk 代理程式", + "choose_platform": "選擇您的平台", + "choose_platform_hint": "選擇符合您作業系統的安裝程式。", + "download": "下載", + "building": "建置中…", + "failed": "建置失敗", + "need_help": "需要協助?", + "powered_by": "技術支援" + }, + "server": { + "port": "埠", + "api_port": "API 埠", + "id_server": "ID 伺服器", + "relay_server": "中繼伺服器", + "api_key": "API 金鑰" + }, + "status": { + "online": "線上", + "offline": "離線", + "banned": "已封鎖", + "running": "執行中", + "stopped": "已停止", + "unknown": "未知", + "checking": "檢查中...", + "label": "Status", + "no_signal": "無信號" + }, + "actions": { + "refresh": "重新整理", + "copy": "複製", + "connect": "連線", + "connect_desktop": "透過桌面用戶端連線", + "remote_viewer": "遠端檢視器", + "web_remote": "Web遠端", + "details": "詳情", + "edit": "編輯", + "delete": "刪除", + "ban": "封鎖", + "unban": "解除封鎖", + "save": "儲存", + "cancel": "取消", + "confirm": "確認", + "close": "關閉", + "clear": "清除", + "ok": "確定", + "saved": "儲存成功", + "back": "返回", + "create": "建立", + "dismiss": "忽略", + "view_all": "檢視全部", + "cdap_viewer": "CDAP Snapshot Viewer", + "add": "添加", + "remove": "移除" + }, + "time": { + "just_now": "剛剛", + "seconds_ago": "{count}秒前", + "minutes_ago": "{count}分鐘前", + "hours_ago": "{count}小時前", + "days_ago": "{count}天前", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "使用者管理", + "subtitle": "管理控制台使用者和許可權", + "add_user": "新增使用者", + "edit_user": "編輯使用者", + "username": "使用者名稱", + "username_placeholder": "請輸入使用者名稱", + "username_hint": "3-32 個字元,僅限字母、數字和底線", + "password": "密碼", + "password_placeholder": "請輸入密碼", + "password_hint": "至少 8 個字元,包含大小寫字母、數字和符號", + "password_leave_empty": "留空保持不變", + "role": "角色", + "role_admin": "管理員", + "role_operator": "操作員", + "role_viewer": "檢視者", + "role_pro": "Pro(僅限API)", + "role_hint": "檢視者只能檢視資料,操作員可以管理裝置,管理員擁有全部許可權。Pro 僅可透過 RustDesk 用戶端登入", + "created": "建立時間", + "last_login": "最後登入", + "never": "從未", + "actions": "操作", + "create": "建立使用者", + "edit": "編輯", + "reset_password": "重置密碼", + "new_password": "新密碼", + "delete_title": "刪除使用者", + "delete_confirm": "確定要刪除使用者 {username} 嗎?", + "delete_success": "使用者刪除成功", + "user_created": "使用者建立成功", + "user_updated": "使用者更新成功", + "password_reset_success": "密碼重置成功", + "empty_title": "找不到使用者", + "empty_text": "新增使用者以管理控制台存取許可權", + "fill_required": "請填寫所有必填欄位", + "invalid_username": "使用者名稱必須為 3-32 個字元,僅限字母、數字和底線", + "username_exists": "使用者名稱已存在", + "weak_password": "密碼強度太弱", + "password_too_short": "密碼至少需要 8 個字元", + "invalid_role": "無效的角色", + "cannot_demote_self": "您無法降低自己的許可權", + "cannot_delete_self": "您無法刪除自己的帳戶", + "last_admin": "無法刪除最後一個管理員", + "admin_only": "此功能僅對管理員可用", + "password_required": "密碼為必填欄位", + "not_found": "找不到使用者", + "strength_weak": "弱", + "strength_medium": "中", + "strength_strong": "強", + "security_tips_title": "安全最佳實踐", + "tip_strong_passwords": "為每個使用者使用強且唯一的密碼", + "tip_unique_accounts": "為每個人建立獨立的帳戶", + "tip_viewer_role": "對只需要檢視許可權的使用者使用檢視者角色", + "tip_operator_role": "對需要管理裝置但不需要管理使用者的人員使用操作員角色", + "tip_audit_logs": "定期檢查稽核日誌以發現可疑活動", + "role_super_admin": "Super Admin", + "role_server_admin": "伺服器管理員", + "role_global_admin": "全局管理員", + "organizations": "組織", + "user_organizations": "{username} 的組織", + "no_organizations": "使用者未分配到任何組織", + "org_removed": "組織分配已刪除", + "server_role_label": "伺服器角色", + "server_role_hint": "决定該使用者在整個主控台中可以執行的操作(面板存取、伺服器設定、稽核等)。", + "org_membership_section": "組織成員關系", + "org_membership_hint": "使用者可以屬於多個組織。組織角色只控制該組織內的權限,并且独立於上方的伺服器角色。", + "column_organizations": "組織", + "no_orgs_short": "—", + "org_count_one": "{count} 個組織", + "org_count_many": "{count} 個組織", + "all_orgs_assigned": "該使用者已经是所有組織的成員。", + "user_groups": "使用者群組", + "user_groups_hint": "使用者群組可用於授予对所選裝置群組的存取權限。", + "loading_user_groups": "正在載入使用者群組...", + "no_user_groups": "沒有可用的使用者群組", + "create_user_group": "建立群組", + "edit_user_group": "编辑使用者群組", + "delete_user_group": "刪除使用者群組", + "delete_user_group_confirm": "刪除使用者群組 {name}?成員將失去通過該組授予的存取權限。", + "user_group_created": "使用者群組已建立", + "user_group_updated": "使用者群組已更新", + "user_group_deleted": "使用者群組已刪除", + "user_group_not_found": "未找到使用者群組", + "group_name": "組名稱", + "group_name_placeholder": "操作員", + "group_note": "Note", + "group_note_placeholder": "可選備注", + "group_name_required": "必須填寫組名稱", + "group_members_count": "{count} 名成員", + "provider": "提供者", + "provider_local": "本機", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "由身分識別提供者管理", + "provider_managed_hint": "此帳戶由外部身分識別提供者(LDAP/AD 或 SSO)管理。密碼和角色由提供者控制,無法在此處變更。" + }, + "folders": { + "title": "資料夾", + "create": "建立資料夾", + "edit": "編輯資料夾", + "delete": "刪除資料夾", + "name": "資料夾名稱", + "name_placeholder": "請輸入資料夾名稱", + "name_required": "資料夾名稱為必填欄位", + "name_too_long": "資料夾名稱過長(最多 50 個字元)", + "color": "顏色", + "icon": "圖示", + "not_found": "找不到資料夾", + "delete_confirm": "確定要刪除此資料夾嗎?裝置將被取消分配。", + "delete_success": "資料夾刪除成功", + "created": "資料夾建立成功", + "updated": "資料夾更新成功", + "no_devices_selected": "未選擇裝置", + "devices_moved": "裝置移動成功", + "device_assigned": "裝置已分配到資料夾", + "unassigned": "未分配", + "all_devices": "所有裝置", + "drag_hint": "將裝置拖拽到資料夾中進行分組", + "move_to": "移動到", + "toggle_sidebar": "切換側邊欄" + }, + "errors": { + "forbidden_title": "存取被拒絕", + "forbidden_message": "您沒有許可權存取此資源。", + "not_found_title": "頁面找不到", + "not_found_message": "您要查詢的頁面不存在或已被移動。", + "server_error_title": "伺服器錯誤", + "server_error_message": "出現了問題,請稍後重試。", + "go_home": "返回首頁", + "try_again": "重試", + "load_devices_failed": "載入裝置失敗", + "load_key_failed": "載入金鑰失敗", + "load_qr_failed": "載入QR Code失敗", + "load_audit_failed": "載入稽核日誌失敗", + "load_users_failed": "載入使用者失敗", + "load_folders_failed": "載入資料夾失敗", + "download_failed": "下載失敗", + "logout_failed": "登出失敗", + "password_change_failed": "修改密碼失敗", + "language_change_failed": "切換語言失敗", + "ban_failed": "封鎖裝置失敗", + "unban_failed": "解除封鎖失敗", + "delete_failed": "刪除裝置失敗", + "change_id_failed": "更改裝置 ID 失敗", + "bulk_delete_failed": "批次刪除裝置失敗", + "sync_failed": "同步狀態失敗", + "error": "錯誤", + "not_found": "找不到", + "server_error": "伺服器錯誤", + "load_device_failed": "載入裝置失敗", + "load_orgs_failed": "載入組織失敗" + }, + "remote": { + "title": "遠端桌面", + "connecting": "正在連線...", + "waiting_password": "等待密碼", + "authenticating": "正在認證...", + "streaming": "已連線", + "disconnected": "已斷開", + "error": "錯誤", + "status_idle": "空閒", + "password_required": "需要密碼", + "enter_password_for": "請輸入裝置密碼", + "password_placeholder": "裝置密碼", + "connect": "連線", + "reconnect": "重新連線", + "disconnect": "斷開", + "back_to_devices": "返回裝置列表", + "fullscreen": "全屏", + "toggle_audio": "切換音訊", + "send_keys": "傳送按鍵", + "scale_mode": "縮放模式", + "scale_fit": "適應視窗", + "scale_fill": "填充視窗", + "scale_original": "原始大小 (1:1)", + "scale_stretch": "拉伸填充", + "actions": "操作", + "lock_screen": "鎖定螢幕", + "restart_remote": "重啟遠端裝置", + "refresh_screen": "重新整理螢幕", + "clipboard_paste": "從剪貼簿貼上", + "block_input": "阻止輸入", + "display_settings": "顯示設定", + "image_quality": "影象質量", + "quality_best": "最佳(全質量,60fps)", + "quality_balanced": "平衡", + "quality_low": "效能優先", + "show_cursor": "顯示遠端游標", + "lock_after_session": "工作階段結束後鎖定", + "privacy_mode": "隱私模式", + "disable_clipboard": "禁用剪貼簿", + "chat": "聊天", + "chat_placeholder": "輸入訊息...", + "record": "錄製螢幕", + "view_only": "僅檢視", + "pin_toolbar": "固定工具欄", + "monitors": "顯示器", + "select_monitor": "選擇顯示器", + "quality_speed": "速度(低質量,60fps)", + "quality_quality": "質量(最佳,30fps)", + "recording_started": "錄製已開始", + "recording_stopped": "錄製已停止", + "download_recording": "下載錄製", + "e2e_encrypted": "端到端加密", + "e2e_key_exchange": "正在建立安全通道...", + "confirm_restart": "確定要重啟遠端裝置嗎?", + "webcodecs_not_supported": "您的瀏覽器不支援 WebCodecs API。請使用 Chrome 94+ 或 Edge 94+。", + "webcodecs_insecure_context": "WebCodecs 在 HTTP 下不可用。影片使用軟體回退。為獲得最佳效能,請使用 HTTPS。", + "webcodecs_fallback_active": "軟體影片解碼器已啟用(效能有限)", + "click_to_start": "點選開始", + "autoplay_blocked": "瀏覽器需要使用者互動才能開始播放影片和音訊。", + "start_playback": "開始播放", + "new_connection": "新建連線", + "device_id_placeholder": "輸入裝置ID", + "http_warning": "HTTP模式:僅支援H.264軟體解碼 (~15 FPS)。使用HTTPS可獲得完整效能 (WebCodecs, VP9, 60 FPS)。", + "file_transfer": "檔案傳輸", + "file_upload": "上傳", + "file_download": "下載", + "file_empty": "此資料夾為空", + "file_transfers": "傳輸列表", + "file_complete": "完成", + "file_error": "傳輸失敗", + "file_show_hidden": "顯示隱藏檔案", + "file_new_folder": "新建資料夾", + "file_new_folder_prompt": "輸入資料夾名稱:", + "file_parent": "上級目錄", + "file_root": "根目錄", + "file_rename": "重新命名", + "file_rename_prompt": "輸入新名稱:", + "file_delete_confirm": "確定要刪除此項嗎?", + "file_cancelled": "傳輸已取消", + "2fa_required": "需要雙因素驗證", + "2fa_hint": "輸入驗證器套用中的6位數代碼", + "2fa_invalid": "請輸入有效的6位數代碼", + "verify": "Verify", + "use_cdap_fallback": "使用 CDAP 查看器", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "clipboard_empty": "剪贴板為空", + "clipboard_denied": "剪贴板访问被拒绝。需要HTTPS或未授予權限。", + "file_loading": "加載中...", + "file_timeout": "远程設備未响應。文件传输可能不受支持或在远程計算机上已禁用。", + "codec": "視頻编解碼器", + "codec_auto": "自動(推荐)" + }, + "branding": { + "identity_title": "品牌標識", + "identity_desc": "自定義控制台中顯示的應用名稱和描述", + "app_name": "應用名稱", + "app_description": "應用描述", + "logo_title": "標誌", + "logo_desc": "選擇標誌在側邊欄和登入頁面中的顯示方式", + "logo_type_icon": "Material 圖示", + "logo_type_svg": "SVG 程式碼", + "logo_type_image": "圖片 URL", + "logo_icon_name": "圖示名稱", + "logo_icon_hint": "輸入 Material Icons 名稱(例如 dns、cloud、security)。參見 fonts.google.com/icons", + "logo_svg_code": "SVG 程式碼", + "logo_svg_hint": "在此貼上您的 SVG 標記。支援包含路徑和樣式的完整 元素。", + "logo_image_upload": "上傳圖片", + "logo_image_choose": "選擇圖片檔案", + "logo_image_hint": "PNG、JPG、GIF、WebP 或 SVG。最大 1.5 MB。圖片以 base64 格式儲存。", + "logo_image_url": "圖片資料 / URL", + "logo_image_url_hint": "上傳檔案時自動填充,或手動貼上 URL。", + "logo_image_too_large": "圖片過大。最大允許 1.5 MB。", + "logo_image_invalid_type": "無效的檔案類型。請使用 PNG、JPG、GIF、WebP 或 SVG。", + "preview": "預覽", + "colors_title": "配色方案", + "colors_desc": "自定義調色盤。留空使用預設值。", + "colors_backgrounds": "背景色", + "colors_text": "文字色", + "colors_accents": "強調色", + "colors_borders": "邊框色", + "import_export_title": "匯入 / 匯出", + "import_export_desc": "將主題另存為 JSON 檔案或從其他例項匯入", + "export_theme": "匯出主題", + "import_theme": "匯入主題", + "reset_defaults": "恢復預設", + "save_branding": "儲存品牌設定", + "saved": "品牌設定已儲存。正在重新載入...", + "exported": "主題已匯出", + "imported": "主題匯入成功。正在重新載入...", + "import_error": "主題匯入失敗。檔案格式無效。", + "reset_confirm": "確定要將品牌設定恢復為預設值嗎?此操作無法撤銷。", + "reset_success": "品牌設定已恢復為預設值。正在重新載入...", + "logo_type_text": "Text Logo", + "logo_text": "Logo Text", + "logo_text_hint": "顯示為品牌標志的主要文字", + "logo_text_accent": "Accent Text", + "logo_text_accent_hint": "標志下方的文字(例如产品名稱或標語)", + "logo_upload_success": "Logo 上傳成功。", + "typography_title": "Typography", + "typography_desc": "選擇標題和本文字型。字型將下載到伺服器進行自托管。", + "font_heading": "標題字型", + "font_heading_hint": "用於標題(H1–H6)和文字標志", + "font_body": "Body Font", + "font_body_hint": "用於本文和界面元素", + "font_search_placeholder": "搜尋字型...", + "font_system_default": "系統預設", + "font_clear": "Clear", + "font_cat_all": "All", + "font_downloaded_count": "字型已下載到伺服器", + "powered_by": "技術支援", + "background_title": "背景與外觀", + "background_desc": "設定主控台桌布、漸層或純色背景。卡片將浮於其上。", + "bg_type_none": "無", + "bg_type_color": "純色", + "bg_type_gradient": "漸層", + "bg_type_image": "圖片", + "bg_color": "背景顏色", + "bg_gradient": "CSS 漸層", + "bg_gradient_hint": "任何有效的 CSS 漸層,例如 linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "上傳背景圖片", + "bg_image_choose": "選擇圖片檔案", + "bg_image_hint": "PNG、JPG、WebP 或 GIF。最大 8 MB。儲存於伺服器。", + "bg_image_url": "圖片路徑 / URL", + "bg_size": "圖片縮放", + "bg_size_cover": "覆蓋(填滿螢幕)", + "bg_size_contain": "包含(符合)", + "bg_size_auto": "自動(原始大小)", + "bg_blur": "背景模糊", + "bg_overlay": "深色遮罩", + "bg_overlay_hint": "加深背景以提高文字可讀性。", + "bg_image_too_large": "圖片過大。最大大小為 8 MB。", + "bg_image_invalid_type": "無效的檔案類型。請使用 PNG、JPG、WebP 或 GIF。", + "bg_upload_success": "背景圖片已成功上傳。", + "login_title": "登入頁面", + "login_desc": "自訂登入畫面的標題、副標題和背景。", + "login_heading": "登入標題", + "login_heading_placeholder": "歡迎回來", + "login_subheading": "登入副標題", + "login_subheading_placeholder": "登入您的帳戶", + "login_bg_inherit": "與主控台相同", + "agent_title": "代理程式下載頁面", + "agent_desc": "自訂向終端使用者顯示的公開代理程式下載入口網站。", + "agent_show_powered": "顯示「Powered by BetterDesk」", + "agent_show_powered_hint": "在下載入口網站頁尾顯示 BetterDesk 版權聲明。", + "footer_title": "頁尾與版權", + "footer_desc": "新增顯示在登入畫面和主控台側邊欄的自訂頁尾文字。", + "footer_text": "頁尾文字", + "footer_text_hint": "例如版權聲明或公司名稱。", + "show_powered": "顯示「BetterDesk」版權聲明", + "show_powered_hint": "在登入頁尾和側邊欄顯示 BetterDesk 名稱和版本。", + "custom_css_title": "自訂 CSS", + "custom_css_desc": "進階:注入套用於整個主控台和登入頁面的自訂 CSS。", + "custom_css_hint": "請謹慎使用。無效或不安全的規則將被清除。最多 20,000 個字元。" + }, + "device_detail": { + "tab_overview": "概覽", + "tab_tags": "標籤與備註", + "tab_actions": "操作", + "section_identity": "身份資訊", + "section_network": "網路", + "section_timestamps": "時間戳", + "section_connect": "連線", + "section_manage": "管理", + "folder": "資料夾", + "status_tier": "狀態等級", + "device_banned": "此裝置已被封鎖", + "no_reason": "未提供原因", + "tags": "標籤", + "no_tags": "此裝置未分配標籤", + "tag_placeholder": "輸入標籤名...", + "add_tag": "新增", + "tag_exists": "此標籤已存在", + "notes": "備註", + "notes_placeholder": "新增關於此裝置的備註...", + "danger_zone": "危險區域", + "action_connect_web": "網頁遠端", + "action_connect_web_desc": "透過瀏覽器遠端桌面連線", + "action_native_remote": "BetterDesk 遠端", + "action_native_remote_desc": "原生 JPEG 流 — 無需外掛", + "action_connect_desktop": "桌面用戶端", + "action_connect_desktop_desc": "在桌面用戶端應用中開啟", + "action_change_id_desc": "更改裝置註冊 ID", + "action_ban_desc": "阻止此裝置連線", + "action_unban_desc": "允許此裝置重新連線", + "action_delete_desc": "永久刪除此裝置", + "tab_hardware": "硬體", + "tab_metrics": "指標", + "section_system": "系統", + "section_cpu": "處理器", + "section_memory": "記憶體", + "section_displays": "顯示器", + "section_encoding": "編碼能力", + "section_live_metrics": "實時指標", + "section_current_usage": "目前使用情況", + "section_usage_history": "使用歷史", + "os": "作業系統", + "version": "用戶端版本", + "cpu_model": "CPU 型號", + "cpu_cores": "CPU 核心數", + "cpu_freq": "CPU 頻率", + "total_memory": "總記憶體", + "metric_memory": "記憶體", + "metric_disk": "磁碟", + "metrics_updated": "已更新", + "device_groups": "分組", + "no_sysinfo": "尚無硬體資訊", + "no_sysinfo_hint": "裝置傳送系統資訊報告後將顯示硬體資訊", + "no_metrics": "尚無指標資料", + "no_metrics_hint": "裝置傳送心跳報告後將顯示指標資料", + "chart_oldest": "← 最早", + "chart_newest": "最新 →", + "tab_services": "服务", + "tab_processes": "進程", + "tab_events": "事件", + "tab_activity": "活动", + "tab_files": "文件", + "agent_lazy_hint": "单击此選項卡以从代理加載实时数据", + "agent_offline": "代理离線", + "agent_timeout": "代理响應超时", + "agent_error": "从代理加載数据失败", + "service_name": "名稱", + "service_display": "顯示名稱", + "service_status": "状态", + "service_start": "啟动模式", + "process_name": "名稱", + "process_user": "用戶", + "process_memory": "內存" + }, + "inventory": { + "title": "資產清單", + "subtitle": "受管裝置的硬體和軟體清單", + "device_id": "裝置 ID", + "hostname": "主機名稱", + "os": "作業系統", + "cpu": "CPU", + "cpu_cores": "CPU 核心數", + "cpu_usage": "CPU 使用率", + "memory": "記憶體", + "memory_total": "總記憶體", + "memory_used": "已用記憶體", + "memory_available": "可用記憶體", + "memory_usage": "記憶體使用率", + "swap": "交換空間", + "disks": "磁碟", + "disk_count": "磁碟數量", + "network": "網路", + "network_interfaces": "網路介面", + "software": "軟體", + "software_count": "已安裝軟體", + "system": "系統", + "kernel": "核心", + "architecture": "架構", + "uptime": "運行時間", + "frequency": "頻率", + "physical_cores": "物理核心", + "logical_cores": "邏輯核心", + "model": "型號", + "usage": "使用率", + "total": "總計", + "used": "已用", + "available": "可用", + "mount_point": "掛載點", + "removable": "可移動", + "mac_address": "MAC 地址", + "ip_addresses": "IP 位址", + "traffic": "流量", + "collect_now": "立即採集", + "collector_running": "採集器執行中", + "collector_stopped": "採集器已停止", + "last_upload": "最後上傳", + "total_uploads": "總計", + "last_seen": "最後線上", + "collected_at": "採集時間", + "no_data": "尚無資產資料。點選「立即採集」收集系統資訊。", + "no_devices": "找不到有資產資料的裝置", + "detail_title": "裝置資產詳情", + "telemetry": "遙測", + "view_detail": "檢視詳情", + "export": "匯出", + "refresh": "重新整理" + }, + "tickets": { + "title": "服務檯", + "subtitle": "支援工單和問題跟蹤", + "create": "新建工單", + "edit": "編輯工單", + "delete": "刪除工單", + "detail": "工單詳情", + "ticket_id": "工單 ID", + "ticket_title": "標題", + "description": "描述", + "status": "狀態", + "priority": "優先順序", + "category": "分類", + "assigned_to": "分配給", + "created_by": "建立者", + "device": "裝置", + "sla_due": "SLA 到期", + "created_at": "建立時間", + "updated_at": "更新時間", + "resolved_at": "解決時間", + "closed_at": "關閉時間", + "status_open": "待處理", + "status_in_progress": "處理中", + "status_resolved": "已解決", + "status_closed": "已關閉", + "priority_low": "低", + "priority_medium": "中", + "priority_high": "高", + "priority_critical": "緊急", + "category_general": "一般", + "category_hardware": "硬體", + "category_software": "軟體", + "category_network": "網路", + "category_access": "存取許可權", + "category_other": "其他", + "comments": "評論", + "add_comment": "新增評論", + "comment_placeholder": "寫下評論...", + "internal_note": "內部備註(對終端使用者不可見)", + "attachments": "附件", + "upload_attachment": "上傳附件", + "download": "下載", + "connect_device": "連線到裝置", + "no_tickets": "找不到工單", + "no_comments": "尚無評論", + "no_attachments": "尚無附件", + "title_required": "標題為必填欄位", + "delete_confirm": "確定要刪除工單 #{id} 嗎?", + "delete_success": "工單刪除成功", + "created_success": "工單建立成功", + "updated_success": "工單更新成功", + "sla_overdue": "SLA 已逾期", + "filter_all": "全部", + "search_placeholder": "搜尋工單...", + "assign_to_me": "分配給我", + "unassign": "取消分配", + "stats_total": "總計", + "stats_open": "待處理", + "stats_in_progress": "處理中", + "stats_resolved": "已解決", + "stats_closed": "已關閉" + }, + "activity": { + "title": "活動監控", + "subtitle": "應用使用和空閒跟蹤", + "device": "裝置", + "hostname": "主機名稱", + "sessions": "工作階段", + "idle_time": "空閒時間", + "active_time": "活躍時間", + "last_report": "最後報告", + "top_apps": "熱門應用", + "app_name": "應用程式", + "window_title": "視窗標題", + "category": "分類", + "duration": "持續時間", + "started_at": "開始時間", + "ended_at": "結束時間", + "session_count": "工作階段數", + "total_active": "總活躍時間", + "total_idle": "總空閒時間", + "detail_count": "詳細記錄", + "no_data": "尚無活動資料", + "no_sessions": "尚無工作階段記錄", + "filter_from": "從", + "filter_to": "到", + "filter_apply": "應用篩選", + "hours": "小時", + "minutes": "分鐘", + "seconds": "秒", + "category_browser": "瀏覽器", + "category_productivity": "辦公效率", + "category_communication": "通訊", + "category_development": "開發", + "category_media": "媒體", + "category_gaming": "遊戲", + "category_system": "系統", + "category_other": "其他", + "summary": "摘要", + "details": "詳情", + "refresh": "重新整理", + "search": "搜尋裝置...", + "date_range": "日期範圍", + "device_id": "裝置ID", + "session_start": "工作階段開始", + "session_end": "工作階段結束", + "user": "使用者", + "no_activity": "尚無活動記錄", + "reported_at": "報告時間", + "detail": "詳情", + "no_apps": "尚無應用" + }, + "automation": { + "title": "自動化與警示", + "subtitle": "警示規則、遠端命令和 SMTP 配置", + "rules": "警示規則", + "rules_subtitle": "定義觸發通知的條件", + "alerts": "警示歷史", + "alerts_subtitle": "檢視和確認已觸發的警示", + "commands": "遠端命令", + "commands_subtitle": "向遠端裝置傳送命令", + "smtp": "SMTP 配置", + "smtp_subtitle": "郵件通知設定", + "rule_name": "規則名稱", + "description": "描述", + "condition_type": "條件類型", + "condition_op": "運算子", + "condition_value": "閾值", + "severity": "嚴重程度", + "scope_device": "目標裝置", + "scope_all": "所有裝置", + "cooldown": "冷卻時間(秒)", + "notify_emails": "通知郵箱", + "enabled": "已啟用", + "disabled": "已禁用", + "create_rule": "建立規則", + "edit_rule": "編輯規則", + "delete_rule": "刪除規則", + "acknowledge": "確認", + "acknowledged": "已確認", + "unacknowledged": "未確認", + "triggered_at": "觸發時間", + "severity_info": "資訊", + "severity_warning": "警告", + "severity_critical": "嚴重", + "op_gt": "大於", + "op_gte": "大於等於", + "op_lt": "小於", + "op_lte": "小於等於", + "op_eq": "等於", + "op_neq": "不等於", + "type_cpu_usage": "CPU 使用率 (%)", + "type_memory_usage": "記憶體使用率 (%)", + "type_disk_usage": "磁碟使用率 (%)", + "type_offline_duration": "離線時長 (秒)", + "type_idle_duration": "空閒時長 (秒)", + "type_custom": "自定義", + "command_type": "命令類型", + "command_payload": "命令 / 指令碼", + "command_result": "結果", + "command_status": "狀態", + "send_command": "傳送命令", + "status_pending": "待處理", + "status_running": "執行中", + "status_completed": "已完成", + "status_failed": "失敗", + "smtp_host": "SMTP 主機", + "smtp_port": "埠", + "smtp_secure": "使用 TLS", + "smtp_user": "使用者名稱", + "smtp_pass": "密碼", + "smtp_from": "發件人地址", + "smtp_test": "測試連線", + "smtp_save": "儲存配置", + "smtp_test_success": "連線成功", + "smtp_test_failed": "連線失敗", + "no_rules": "暫未配置警示規則", + "no_alerts": "尚無警示觸發", + "no_commands": "尚無已傳送的命令", + "id_payload_required": "裝置 ID 和命令內容為必填欄位", + "no_commands_sent": "尚未傳送任何命令" + }, + "file_transfer": { + "title": "檔案傳輸", + "transfers": "傳輸列表", + "new_transfer": "新建傳輸", + "upload": "上傳", + "download": "下載", + "direction": "方向", + "filename": "檔名", + "file_size": "檔案大小", + "mime_type": "MIME 類型", + "progress": "進度", + "status": "狀態", + "device": "裝置", + "initiated_by": "發起者", + "created_at": "建立時間", + "cancel": "取消", + "cancel_confirm": "確定要取消此傳輸嗎?", + "download_file": "下載檔案", + "browse_files": "瀏覽檔案", + "select_file": "選擇檔案", + "select_device": "選擇裝置", + "no_transfers": "尚無檔案傳輸", + "status_pending": "待處理", + "status_active": "進行中", + "status_completed": "已完成", + "status_failed": "失敗", + "status_cancelled": "已取消", + "bytes_transferred": "已傳輸位元組", + "chunks": "分塊", + "transfer_started": "傳輸已開始", + "transfer_completed": "傳輸已完成", + "transfer_failed": "傳輸失敗", + "transfer_cancelled": "傳輸已取消", + "max_file_size": "最大檔案大小:4 GB", + "error_too_large": "檔案過大", + "error_no_device": "未選擇裝置", + "error_no_file": "未選擇檔案" + }, + "network": { + "title": "網路監控", + "targets": "監控目標", + "add_target": "新增目標", + "edit_target": "編輯目標", + "delete_target": "刪除目標", + "delete_confirm": "確定要刪除此目標嗎?", + "target_name": "名稱", + "host": "主機", + "port": "埠", + "url": "URL", + "check_type": "檢查類型", + "timeout": "超時(毫秒)", + "interval": "間隔(毫秒)", + "enabled": "已啟用", + "status": "狀態", + "last_check": "最後檢查", + "last_rtt": "最後 RTT", + "rtt_ms": "RTT(毫秒)", + "status_up": "正常", + "status_down": "宕機", + "status_unknown": "未知", + "check_now": "立即檢查", + "history": "檢查歷史", + "stats": "統計", + "total_targets": "總目標數", + "targets_up": "正常目標", + "targets_down": "宕機目標", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP 埠", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "網路工具", + "ping_tool": "Ping 測試", + "tcp_tool": "TCP 埠檢查", + "http_tool": "HTTP 檢查", + "dns_tool": "DNS 解析", + "monitor_start": "啟動監控", + "monitor_stop": "停止監控", + "monitor_running": "監控執行中", + "monitor_stopped": "監控已停止", + "no_targets": "暫未配置監控目標", + "no_history": "尚無檢查歷史", + "error_code": "錯誤", + "status_code": "HTTP 狀態碼", + "search_targets": "搜尋目標...", + "name": "名稱", + "tab_targets": "目標", + "tab_tools": "工具", + "avg_latency": "平均延遲", + "type": "類型", + "latency": "延遲", + "check_history": "檢查歷史", + "name_host_required": "名稱和主機為必填欄位", + "uptime": "運行時間", + "response_time": "響應時間", + "avg_response": "平均響應", + "charts": "圖表", + "realtime": "實時", + "response_time_ms": "響應時間 (ms)", + "uptime_percent": "運行時間 %", + "last_24h": "過去24小時", + "last_7d": "過去7天", + "last_30d": "過去30天" + }, + "dataguard": { + "title": "資料防護 — DLP", + "policies": "DLP 策略", + "add_policy": "新增策略", + "edit_policy": "編輯策略", + "delete_policy": "刪除策略", + "delete_confirm": "確定要刪除此策略嗎?", + "policy_name": "名稱", + "policy_description": "描述", + "status": "狀態", + "enabled": "已啟用", + "disabled": "已禁用", + "rules": "規則", + "add_rule": "新增規則", + "rule_type": "規則類型", + "rule_type_usb": "USB 裝置", + "rule_type_file": "檔案操作", + "action": "動作", + "action_allow": "允許", + "action_block": "阻止", + "action_log": "僅記錄", + "filter": "篩選", + "vid": "供應商 ID (VID)", + "pid": "產品 ID (PID)", + "serial": "序列號", + "device_class": "裝置類型", + "drive_type": "驅動器類型", + "file_extensions": "副檔名", + "events": "DLP 事件", + "event_source": "來源", + "event_source_usb": "USB", + "event_source_file": "檔案", + "event_type": "事件類型", + "event_details": "詳情", + "no_policies": "暫未配置 DLP 策略", + "no_events": "尚無 DLP 事件記錄", + "stats": "統計", + "total_events": "總事件數", + "blocked_events": "已阻止", + "logged_events": "已記錄", + "usb_events": "USB 事件", + "file_events": "檔案事件", + "device_id": "裝置 ID", + "policy_matched": "匹配的策略", + "timestamp": "時間戳", + "drive_removable": "可移動", + "drive_fixed": "固定", + "drive_network": "網路", + "drive_cdrom": "CD-ROM", + "drive_unknown": "未知", + "total_policies": "原則總數", + "active_policies": "活動原則", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "原則", + "tab_events": "Events", + "search_policies": "搜尋原則...", + "create_policy": "建立原則", + "policy_type": "原則類型", + "scope": "Scope", + "events_count": "Events", + "search_events": "搜尋事件...", + "event_time": "Event Time", + "device": "裝置", + "policy": "原則", + "detail": "Detail", + "scope_help": "以逗號分隔裝置 ID,或留空表示全部", + "scope_all": "所有裝置", + "active": "Active", + "type_file_type": "檔案類型", + "type_clipboard": "剪貼簿", + "type_screen_share": "螢幕分享", + "type_file_transfer": "檔案传輸", + "policy_desc": "原則描述", + "type_usb": "USB" + }, + "reports": { + "title": "報表", + "generate": "產生報表", + "generate_csv": "匯出 CSV", + "report_type": "報表類型", + "type_devices": "裝置摘要", + "type_activity": "活動摘要", + "type_security": "安全報告", + "type_tickets": "工單報告", + "type_network": "網路報告", + "type_inventory": "資產報告", + "type_alerts": "警示報告", + "saved": "已儲存的報表", + "save_report": "儲存報表", + "delete_report": "刪除報表", + "delete_confirm": "確定要刪除此已儲存的報表嗎?", + "no_saved": "尚無已儲存的報告", + "report_title": "標題", + "created_by": "建立者", + "created_at": "建立時間", + "filters": "篩選條件", + "date_from": "從", + "date_to": "到", + "device_filter": "裝置 ID", + "generated_at": "產生時間", + "section": "資料部分", + "total_devices": "裝置總數", + "online": "線上", + "offline": "離線", + "banned": "已封鎖", + "platform_distribution": "平台分佈", + "top_applications": "熱門應用", + "total_active": "總活躍時間", + "total_idle": "總空閒時間", + "dlp_stats": "DLP 統計", + "banned_devices": "已封鎖裝置", + "audit_logs": "稽核日誌", + "ticket_stats": "工單統計", + "category_distribution": "分類分佈", + "priority_distribution": "優先順序分佈", + "targets_status": "目標狀態", + "os_distribution": "作業系統分佈", + "avg_ram": "平均記憶體", + "alert_rules": "警示規則", + "recent_alerts": "最近警示", + "tab_generate": "產生", + "tab_saved": "已儲存的報告", + "type_devices_desc": "所有註冊裝置概覽", + "type_activity_desc": "應用使用和工作階段統計", + "type_security_desc": "安全事件和被禁用裝置", + "type_tickets_desc": "支援工單統計和摘要", + "type_network_desc": "網路監控和運行時間資料", + "type_inventory_desc": "硬體和軟體清單", + "type_alerts_desc": "警示和規則歷史", + "report_name": "報告名稱", + "format": "格式", + "save": "儲存", + "preview": "預覽", + "download": "下載", + "delete_saved": "刪除已儲存的報告", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "多租戶", + "list": "租戶列表", + "add_tenant": "新增租戶", + "edit_tenant": "編輯租戶", + "delete_tenant": "刪除租戶", + "delete_confirm": "確定要刪除此租戶嗎?所有裝置和使用者分配將被移除。", + "name": "名稱", + "slug": "識別符號", + "contact_name": "聯絡人", + "contact_email": "聯絡郵箱", + "max_devices": "最大裝置數", + "max_devices_hint": "0 = 不限", + "notes": "備註", + "active": "活躍", + "inactive": "停用", + "devices": "裝置", + "users": "使用者", + "assign_device": "分配裝置", + "assign_devices": "分配裝置", + "remove_device": "移除裝置", + "assign_user": "分配使用者", + "remove_user": "移除使用者", + "no_tenants": "暫未配置租戶", + "no_devices": "此租戶尚無分配的裝置", + "no_users": "此租戶尚無分配的使用者", + "stats": "租戶統計", + "total_devices": "裝置總數", + "online_devices": "線上裝置", + "total_users": "使用者總數", + "created_at": "建立時間", + "updated_at": "更新時間", + "slug_exists": "租戶識別符號已存在", + "total_tenants": "租戶總數", + "active_tenants": "活躍租戶", + "search": "搜尋租戶...", + "create_tenant": "建立租戶", + "detail": "租戶詳情", + "contact": "聯絡方式", + "enabled": "已啟用", + "disabled": "已停用", + "max": "最大", + "info": "租戶資訊", + "status": "狀態" + }, + "registrations": { + "title": "裝置註冊", + "subtitle": "管理透過區域網發現的裝置註冊請求", + "search_placeholder": "按裝置 ID、主機名或 IP 搜尋...", + "no_registrations": "尚無註冊請求", + "col_device_id": "裝置 ID", + "col_hostname": "主機名稱", + "col_platform": "平台", + "col_ip": "IP 位址", + "col_version": "版本", + "col_status": "狀態", + "col_requested": "請求時間", + "col_actions": "操作", + "status_pending": "待審批", + "status_approved": "已批准", + "status_rejected": "已拒絕", + "approve_btn": "批准", + "approve_confirm": "確定要批准此裝置嗎?該裝置將接收伺服器認證資訊並可自動連線。", + "approved_success": "裝置註冊批准成功", + "reject_btn": "拒絕", + "reject_title": "拒絕註冊", + "reject_confirm": "確定要拒絕此註冊請求嗎?", + "reject_reason": "原因(可選)", + "reject_reason_placeholder": "請輸入拒絕原因...", + "rejected_success": "裝置註冊已拒絕", + "delete_confirm": "確定要刪除此註冊記錄嗎?", + "deleted_success": "註冊記錄已刪除", + "enrollment_title": "裝置登記", + "enrollment_subtitle": "来自 BetterDesk 桌面客戶端的待處理登記要求", + "enrollment_empty": "沒有待處理的登記要求", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "顯示名稱", + "enrollment_display_name_placeholder": "輸入此裝置的名稱...", + "enrollment_sync_mode": "同步模式", + "enrollment_sync_silent": "静默 — 最少遙測", + "enrollment_sync_standard": "標準 — 均衡同步", + "enrollment_sync_turbo": "極速 — 高强度同步", + "enrollment_approved_success": "裝置登記已批准", + "enrollment_rejected_success": "裝置登記已拒绝", + "approve_title": "審核裝置", + "field_name": "裝置名稱", + "field_name_placeholder": "請為此裝置輸入名稱...", + "field_sync_mode": "同步模式", + "sync_standard": "標準 — 均衡同步", + "sync_silent": "靜默 — 最小遙測", + "sync_turbo": "極速 — 積極同步", + "field_tags": "標籤", + "field_tags_placeholder": "逗號分隔的標籤(例如 辦公室, 筆電)...", + "field_tags_existing": "現有標籤", + "field_tag_add_placeholder": "新增標籤...", + "field_tag_add_btn": "新增", + "field_groups": "裝置群組", + "field_folder": "資料夾", + "field_folder_none": "無資料夾", + "reject_ban_option": "封鎖此裝置", + "reject_ban_hint": "該裝置將被封鎖,無法發送新的註冊請求。", + "banner_open_mode": "註冊開放中 — 新 RustDesk 用戶端無需操作員審核即可註冊。在設定中啟用受管模式以使用此佇列。", + "banner_locked_mode": "註冊已鎖定 — 僅綁定權杖的裝置可註冊。需要受管模式以允許操作員審核未知用戶端。", + "enrollment_settings_link": "註冊設定" + }, + "backup": { + "title": "備份", + "desc": "下載控制台配置、使用者、分組和設定的完整備份。當 BetterDesk 後端處於活動狀態時,將包含 Go 伺服器的裝置資料。", + "restore_title": "還原", + "restore_desc": "上傳之前下載的備份檔案以還原控制台配置。在下方選擇要還原的部分。", + "stat_users": "使用者", + "stat_settings": "設定", + "stat_folders": "資料夾", + "stat_groups": "分組", + "stat_strategies": "策略", + "stat_backend": "後端", + "download": "下載備份", + "creating": "正在建立備份...", + "download_success": "備份下載成功", + "upload": "上傳備份", + "restore_confirm": "確定要從此備份還原嗎?選定的部分將被覆蓋。", + "restore_success": "備份還原成功。某些更改可能需要重新整理頁面。", + "restored": "已還原", + "skipped": "已跳過", + "backup_date": "備份日期", + "opt_settings": "控制台設定", + "opt_branding": "品牌 / 主題", + "opt_folders": "裝置資料夾", + "opt_groups": "使用者和裝置分組", + "opt_addressbooks": "通訊錄", + "opt_users": "使用者帳戶", + "opt_users_warning": "破壞性操作:將使用備份資料替換所有使用者帳戶。您可能會被登出。", + "no_file": "未選擇備份檔案", + "invalid_json": "無效的備份檔案:不是有效的 JSON", + "invalid_format": "無效的備份檔案:不是 BetterDesk 備份", + "stat_database": "資料庫引擎", + "stat_keys": "已包含伺服器金鑰", + "stat_env": "環境設定檔", + "stat_uploads": "品牌識別檔案", + "restart_required": "部分還原的元件(金鑰 / .env / Go 資料庫)需要重新啟動服務才能生效。", + "security_warning": "此備份包含機密(伺服器金鑰、環境設定檔、密碼雜湊和 2FA 密鑰)。請安全存放,切勿分享。", + "restore_warning": "還原機密、環境設定檔或 Go 伺服器資料庫會覆寫伺服器身分識別,並需要之後重新啟動服務。", + "opt_database": "資料庫(所有資料表)", + "opt_database_hint": "重新匯入所有主控台資料。即時套用,無需重新啟動。", + "opt_uploads": "品牌識別檔案", + "opt_uploads_hint": "標誌和已上傳的圖片。", + "opt_secrets": "伺服器金鑰和機密", + "opt_secrets_warning": "覆寫 Ed25519 伺服器身分識別、API 金鑰和工作階段密鑰。需要重新啟動服務。", + "opt_env": "環境設定檔(.env)", + "opt_env_warning": "覆寫 SESSION_SECRET、API 金鑰、資料庫 DSN、連接埠和 TLS 設定。需要重新啟動服務。", + "opt_godb": "Go 伺服器資料庫", + "opt_godb_warning": "覆寫 Go 伺服器 SQLite 資料庫(僅限 SQLite 後端)。需要重新啟動服務。" + }, + "cdap": { + "device_detail": "CDAP 裝置", + "loading": "載入中...", + "loading_widgets": "正在載入裝置控制元件...", + "load_error": "無法載入裝置資料", + "connected": "已連線", + "disconnected": "已斷開", + "device_offline_msg": "裝置目前處於離線狀態。控制元件值可能已過時。", + "no_widgets": "沒有可用的控制元件", + "no_widgets_desc": "此裝置尚未註冊包含控制元件定義的 CDAP 清單。", + "command_log": "命令日誌", + "clear_log": "清除日誌", + "confirm_command": "確認命令", + "select_option": "選擇", + "cdap_status": "CDAP 狀態", + "cdap_enabled": "CDAP 已啟用", + "cdap_disabled": "CDAP 已禁用", + "cdap_devices": "CDAP 裝置", + "cdap_connections": "使用中連線", + "send_command": "傳送命令", + "command_sent": "命令傳送成功", + "command_failed": "命令傳送失敗", + "devices_title": "CDAP 裝置", + "devices_subtitle": "透過自定義裝置應用協議連線的裝置", + "stat_connected": "已連線", + "stat_port": "埠", + "search_devices": "搜尋裝置...", + "no_devices": "沒有已連線的裝置", + "no_devices_desc": "目前沒有 CDAP 裝置連線。裝置連線到閘道後將顯示在此處。", + "gateway_disabled": "CDAP 閘道已禁用", + "gateway_disabled_desc": "在伺服器配置中設定 CDAP_ENABLED=true 以啟用 CDAP 閘道。", + "gateway_active": "活躍", + "toggle_enable": "啟用 CDAP", + "toggle_disable": "禁用 CDAP", + "enabled_restart": "CDAP 已啟用。需要重啟伺服器以應用更改。", + "disabled_restart": "CDAP 已禁用。需要重啟伺服器以應用更改。", + "widgets": "個控制元件", + "type_all": "全部", + "type_iot": "物聯網", + "type_scada": "SCADA", + "type_os_agent": "OS 代理", + "type_network": "網路", + "type_camera": "攝像頭", + "type_custom": "自定義", + "active_alerts": "活動警示", + "alert_fired": "警示觸發", + "alert_cleared": "警示已清除", + "no_alerts": "無活動警示", + "connect_terminal": "連線終端", + "table_search": "搜尋...", + "just_now": "剛剛", + "terminal_connecting": "正在連線裝置...", + "terminal_disconnected": "已斷開連線", + "terminal_error": "終端連線失敗", + "linked_devices": "關聯裝置", + "link_device": "關聯裝置", + "unlink_device": "取消關聯", + "no_linked_devices": "無關聯裝置", + "unlink_confirm": "確定要取消關聯此裝置嗎?", + "link_prompt": "輸入要關聯的裝置 Peer ID:", + "connect_desktop": "連線桌面", + "connect_video": "連線影片流", + "connect_files": "瀏覽檔案", + "connect_audio": "連線音訊", + "upload_file": "上傳", + "desktop_connecting": "連線中...", + "video_connecting": "連線中...", + "files_connecting": "連線中...", + "audio_connecting": "連線中...", + "audio_streaming": "播放中", + "clipboard_in": "已接收剪貼簿", + "clipboard_out": "已傳送剪貼簿", + "monitor_select": "選擇顯示器", + "keyframe_request": "請求關鍵幀", + "quality_auto": "自動畫質" + }, + "desktop": { + "switch_mode": "桌面模式", + "console_mode": "控制台模式", + "loading": "載入中...", + "minimize": "最小化", + "maximize": "最大化", + "restore": "還原", + "close": "關閉", + "widgets_mode": "小工具", + "windows_mode": "視窗", + "wallpaper": "桌布", + "add_widget": "新增小工具", + "remove_widget": "移除小工具", + "pop_out_widget": "彈出", + "pop_in_widget": "收回", + "configure": "配置", + "search_widgets": "搜尋小工具...", + "cat_monitoring": "監控", + "cat_devices": "裝置", + "cat_tools": "工具", + "cat_general": "通用", + "notes_placeholder": "在這裡寫筆記...", + "search_placeholder": "搜尋裝置、頁面、設定...", + "search_pages": "頁面", + "search_devices": "裝置", + "search_no_results": "無結果", + "exit_desktop": "登出桌面模式", + "refresh": "重新整理", + "widget_clock": "Clock", + "widget_device_status": "裝置狀態", + "widget_server_health": "伺服器資訊", + "widget_system_stats": "裝置儀表", + "widget_device_list": "裝置清單", + "widget_quick_actions": "快捷操作", + "widget_recent_activity": "最近活動", + "widget_notes": "Notes", + "widget_network_monitor": "網路監控", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP 裝置", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "裝置網格", + "widget_multi_gauge": "伺服器儀表", + "widget_weekly_chart": "每週活動", + "widget_quick_controls": "快速控制", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "連線統計", + "widget_weather": "天氣", + "widget_world_clock": "世界時鐘", + "widget_bookmarks": "書籤", + "widget_user_sessions": "使用者工作階段", + "widget_alert_feed": "警報源", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "運行時間", + "label_no_devices": "沒有裝置", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "不可用", + "label_open": "打開", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "在設定中設定 URL", + "label_server_uptime": "伺服器執行時間", + "label_merged_info": "已合并到伺服器資訊小部件", + "label_with_notes": "含備注", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "裝置總數", + "label_throughput": "Throughput", + "label_active_relays": "活動中繼", + "label_total_relayed": "中繼總數", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "篩選裝置...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "沒有 CDAP 裝置", + "action_add_widget": "新增小部件", + "label_merged_server_info": "已合併到伺服器資訊小部件", + "wp_images": "圖片", + "wp_colors": "純色", + "wp_custom_color": "自定義顏色", + "wp_fit_style": "樣式", + "wp_fill": "填充", + "wp_fit": "適應", + "wp_stretch": "拉伸", + "wp_center": "居中", + "wp_unavailable": "此伺服器上未安裝桌布圖片。", + "wp_download_hint": "將PNG圖片放入 public/wallpapers/ 目錄以啟用桌布選擇。", + "widget_calendar": "日曆", + "widget_process_monitor": "程序監控", + "widget_disk_usage": "磁碟使用", + "widget_log_viewer": "日誌檢視器", + "widget_speed_test": "速度測試", + "widget_database_stats": "資料庫統計", + "widget_docker_containers": "Docker 容器", + "widget_shell_command": "Shell 命令", + "widget_device_map": "裝置地圖", + "widget_remote_connect": "遠端連線", + "label_no_online": "沒有線上裝置", + "label_no_events": "今天沒有事件", + "label_event_title": "事件標題:", + "label_no_data": "尚無資料", + "label_download_speed": "下載速度", + "label_latency": "延遲", + "label_server": "伺服器", + "label_run_test": "執行測試", + "label_testing": "測試中...", + "label_table": "表", + "label_rows": "行數", + "label_last_backup": "最後備份", + "label_no_containers": "沒有容器", + "label_docker_unavailable": "Docker 不可用", + "label_no_command": "未配置命令", + "label_no_output": "尚無輸出", + "label_run": "執行", + "label_presets": "預設", + "label_save_preset": "儲存預設", + "label_load_preset": "載入預設", + "label_preset_name": "預設名稱:", + "label_preset_monitoring": "監控", + "label_preset_helpdesk": "說明臺", + "label_preset_minimal": "最小化", + "label_preset_developer": "開發者", + "label_snap_layout": "吸附佈局", + "label_auto_arrange": "自動排列", + "label_zone_layout": "區域佈局", + "label_2col_equal": "兩列(等寬)", + "label_2col_wide": "兩列(60/40)", + "label_3col": "三列", + "label_2x2_grid": "2×2 網格", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "小工具分組", + "ungroup_widgets": "取消分組", + "group_widgets": "分組選中小工具", + "snap_layouts": "貼靠佈局", + "snap_left": "貼靠到左側", + "snap_right": "貼靠到右側", + "snap_top_left": "貼靠到左上", + "snap_top_right": "貼靠到右上", + "snap_bottom_left": "貼靠到左下", + "snap_bottom_right": "貼靠到右下", + "aero_shake": "搖動最小化其他視窗", + "zone_resize": "拖動邊框調整區域大小", + "zone_borders": "可拖動區域邊框", + "app_drawer": "應用程式", + "search_apps": "搜尋應用...", + "edit_shortcuts": "編輯快捷方式", + "widgets": "小部件", + "theme": "主題", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "點選任意位置或按任意鍵登入", + "username_placeholder": "使用者名稱", + "password_placeholder": "密碼", + "sign_in": "登入", + "verify": "驗證", + "totp_title": "雙因素認證", + "totp_subtitle": "輸入驗證器應用中的6位數程式碼", + "back_to_login": "返回登入", + "fill_all_fields": "請填寫所有欄位", + "invalid_credentials": "使用者名稱或密碼無效", + "invalid_code": "驗證碼無效", + "enter_6_digits": "請輸入全部6位數字", + "network_error": "網路錯誤 — 請檢查連線", + "session_expired": "工作階段已過期。請重新登入。" + }, + "tokens": { + "title": "裝置權杖", + "subtitle": "管理自動裝置配置的註冊權杖", + "enrollment_mode": "註冊模式", + "mode_open": "開放", + "mode_open_desc": "任何裝置無需權杖即可註冊", + "mode_managed": "託管", + "mode_managed_desc": "裝置需要有效權杖才能註冊", + "mode_locked": "鎖定", + "mode_locked_desc": "不允許新裝置註冊", + "total": "權杖總數", + "active": "活躍", + "used": "已使用", + "revoked": "已撤銷", + "search_placeholder": "搜尋權杖...", + "status_pending": "待處理", + "status_active": "活躍", + "status_used": "已使用", + "status_revoked": "已撤銷", + "status_expired": "已過期", + "bulk_generate": "批次產生", + "create": "建立權杖", + "edit": "編輯權杖", + "token": "權杖", + "name": "名稱", + "status": "狀態", + "uses": "使用次數", + "bound_peer": "繫結裝置", + "expires": "過期時間", + "created": "建立時間", + "actions": "操作", + "name_placeholder": "例如:辦公電腦批次", + "max_uses": "最大使用次數", + "max_uses_hint": "0 = 不限", + "expires_in": "過期時間", + "no_expiration": "永不過期", + "expires_1h": "1小時", + "expires_24h": "24小時", + "expires_7d": "7天", + "expires_30d": "30天", + "note": "備註", + "note_placeholder": "關於此權杖的可選備註...", + "count": "數量", + "count_range": "要產生的權杖數量(1-100)", + "name_prefix": "名稱字首", + "generate": "產生", + "token_created": "權杖已建立", + "tokens_generated": "權杖已產生", + "copy_warning": "請立即複製權杖,之後將不再顯示。", + "copy_token": "複製權杖", + "copied": "已複製!", + "revoke": "撤銷", + "revoke_confirm": "確定要撤銷此權杖嗎?已使用該權杖註冊的裝置不受影響。", + "revoked_success": "權杖已撤銷", + "no_tokens": "找不到權杖", + "expired": "已過期", + "never": "永不", + "save": "儲存", + "cancel": "取消", + "unlimited": "不限" + }, + "tutorial": { + "next": "下一步", + "prev": "上一步", + "skip": "跳過", + "finish": "完成", + "close": "關閉", + "step_of": "{current} / {total}", + "console_sidebar_title": "導航側欄", + "console_sidebar_text": "從這裡存取所有模組。點選任意圖示導航到相應部分。側欄會根據螢幕大小自適應。", + "console_expand_title": "展開側欄", + "console_expand_text": "點選此處展開側欄檢視完整標籤。再次點選可收起。", + "console_search_title": "快速搜尋", + "console_search_text": "搜尋裝置、設定或操作。鍵盤快捷鍵:Ctrl+K。", + "console_dashboard_title": "儀表盤", + "console_dashboard_text": "您的控制中心,顯示伺服器狀態、線上裝置和快速操作。一目瞭然地監控重要指標。", + "console_devices_title": "裝置管理", + "console_devices_text": "檢視、搜尋和管理所有已連線的裝置。按狀態篩選、分配標籤並配置單個裝置設定。", + "console_settings_title": "設定", + "console_settings_text": "配置伺服器行為、安全選項、品牌和使用者管理。根據您的需求自定義 BetterDesk。", + "console_desktop_title": "桌面模式", + "console_desktop_text": "切換到帶有視窗工作區和小部件的桌面模式。非常適合多工處理和監控儀表板。", + "console_complete_title": "準備就緒!", + "console_complete_text": "探索側欄分類以發現所有功能。隨時點選說明圖示重新啟動此指南。", + "desktop_topbar_title": "頂部欄", + "desktop_topbar_text": "頂部欄顯示時鐘、快捷控制和應用抽屜入口。點選網格圖示瀏覽所有應用。", + "desktop_drawer_title": "應用抽屜", + "desktop_drawer_text": "開啟應用抽屜搜尋並啟動任何控制台功能作為浮動視窗。應用按類別組織。", + "desktop_widgets_title": "小部件面板", + "desktop_widgets_text": "您的可自定義工作區。小部件顯示實時資訊並提供功能快捷存取。拖拽可重新排列。", + "desktop_add_widget_title": "新增小部件", + "desktop_add_widget_text": "點選這裡瀏覽可用的小部件。從監控顯示、裝置列表、筆記等中選擇。", + "desktop_taskbar_title": "工作列", + "desktop_taskbar_text": "開啟的應用程式顯示在這裡。點選聚焦或最小化視窗。懸停圖示檢視應用名稱。", + "desktop_snap_title": "Snap 佈局", + "desktop_snap_text": "將視窗拖到螢幕邊緣進行對齊,或懸停最大化按鈕檢視佈局預設。試試 Aero Shake!", + "desktop_windows_title": "應用視窗", + "desktop_windows_text": "應用程式在可拖動、可調整大小的視窗中開啟。從標題欄最小化、最大化或關閉。視窗層級在小部件之上。", + "desktop_search_title": "快速搜尋", + "desktop_search_text": "跨裝置、頁面和設定搜尋。隨時按 Ctrl+K 開啟搜尋。", + "desktop_complete_title": "桌面模式就緒!", + "desktop_complete_text": "嘗試從抽屜開啟應用並排列視窗。使用小部件預設快速設定儀表板佈局。", + "devices_folders_title": "裝置資料夾", + "devices_folders_text": "將裝置組織到資料夾中。點選資料夾篩選列表。右鍵單擊重新命名或刪除。", + "devices_search_title": "搜尋和篩選", + "devices_search_text": "按 ID、主機名或平台搜尋。使用狀態按鈕僅顯示線上、離線或全部裝置。", + "devices_table_title": "裝置列表", + "devices_table_text": "點選任何裝置行檢視詳情。右側選單提供快速操作:連線、編輯標籤或刪除。", + "devices_complete_title": "裝置管理就緒!", + "devices_complete_text": "在資料夾之間拖動裝置進行整理。雙擊裝置開啟詳情面板。", + "settings_tabs_title": "設定分類", + "settings_tabs_text": "在一般、安全、外觀和其他配置部分之間切換。", + "settings_content_title": "配置", + "settings_content_text": "每個部分包含特定的伺服器和控制台設定。點選儲存後生效。", + "settings_complete_title": "設定概覽", + "settings_complete_text": "檢查安全設定中的雙因素認證、API 金鑰和使用者管理。存取外觀自定義控制台樣式。", + "help": "說明和教學", + "tour_console": "控制台導覽", + "tour_desktop": "桌面模式導覽", + "tour_devices": "裝置導覽", + "tour_settings": "設定導覽", + "reset_all": "重置所有教學", + "tour_remote": "遠端工作階段導覽", + "tour_organization": "組織設定", + "tour_cdap": "CDAP 概覽", + "tour_chat": "聊天基礎", + "remote_toolbar_title": "遠端工具欄", + "remote_toolbar_text": "通過工具欄存取顯示控制、剪貼簿同步、特殊按鍵和質量設定。使用 F11 切換全螢幕。", + "remote_canvas_title": "遠端顯示", + "remote_canvas_text": "這是遠端螢幕。點擊其中即可開始控制遠端裝置。滑鼠和鍵盤輸入會自動轉送。", + "remote_clipboard_title": "剪貼簿同步", + "remote_clipboard_text": "在您的電脑和遠端裝置之間複製粘贴文字。焦點位於遠端顯示時,可像平常一样使用 Ctrl+C / Ctrl+V。", + "remote_complete_title": "遠端工作階段已就绪!", + "remote_complete_text": "使用工具欄按钮發送特殊按鍵(Ctrl+Alt+Del、PrintScreen)并切換顯示器。按 Escape 或點擊断開連線結束工作階段。", + "org_overview_title": "組織", + "org_overview_text": "組織可用於对使用者、裝置和原則群組。每個組織都有自己的管理員、操作員和設定。", + "org_create_title": "建立組織", + "org_create_text": "點擊這裡建立新組織。提供名稱、短標識和可選描述。您將成為新組織的所有者。", + "org_members_title": "管理成員", + "org_members_text": "通過電子郵件邀請使用者,分配角色(管理員、操作員、使用者)并管理存取。成員可以看到分配给其組織的裝置。", + "org_devices_title": "分配裝置", + "org_devices_text": "將裝置添加到組織。這裡分配的裝置會繼承組織原則,并对其成員可见。", + "org_policies_title": "組織原則", + "org_policies_text": "為組織設定安全原則,例如密碼要求、工作階段超時、2FA 强制執行和裝置登記規則。", + "org_complete_title": "組織設定完成!", + "org_complete_text": "邀請團隊并分配裝置,即可開始使用組織范圍內的管理。原則會自動套用於所有成員。", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "聯絡人和群組", + "chat_contacts_text": "查看聯絡人和聊天群組。點擊任意聯絡人打開对话。绿色圓點表示使用者在線。", + "chat_send_title": "發送訊息", + "chat_send_text": "輸入訊息并按 Enter 發送。当雙方都支持端到端加密時,訊息會進行端到端加密。", + "chat_file_title": "共享檔案", + "chat_file_text": "點擊附件圖示共享檔案。檔案會被加密,最大可达 50 MB。", + "chat_complete_title": "聊天已就绪!", + "chat_complete_text": "與操作員和最終使用者即時聊天。建立群組用於團隊沟通。所有訊息都支持已讀回執。", + "disable_tutorials": "禁用教程", + "enable_tutorials": "啟用教程" + }, + "help_request": { + "title": "協助請求", + "subtitle": "管理來自桌面用戶端的協助請求", + "new_request": "新協助請求", + "device": "裝置", + "hostname": "主機名稱", + "message": "訊息", + "status": "狀態", + "pending": "待處理", + "accepted": "已接受", + "resolved": "已解決", + "accept": "接受", + "resolve": "解決", + "no_requests": "沒有協助請求", + "notification": "收到來自的協助請求", + "stats_total": "總計", + "filter_all": "全部" + }, + "organizations": { + "title": "組織管理", + "create": "建立組織", + "edit": "編輯組織", + "detail": "組織詳情", + "name": "名稱", + "slug": "識別符號 (URL)", + "logo_url": "Logo 地址", + "users": "使用者", + "devices": "裝置", + "invitations": "邀請", + "settings": "設定", + "add_user": "新增使用者", + "assign_device": "分配裝置", + "create_invitation": "建立邀請", + "delete_confirm": "刪除此組織?這將刪除所有關聯的使用者、裝置和設定。", + "no_orgs": "尚無組織", + "no_orgs_hint": "建立第一個組織以開始管理裝置和使用者。", + "connection_policy": "連線策略", + "allow_file_transfer": "允許檔案傳輸", + "allow_clipboard": "允許剪貼簿", + "max_session_duration": "最大工作階段時長 (分鐘)", + "role_owner": "所有者", + "role_admin": "管理員", + "role_operator": "操作員", + "role_user": "成員", + "username": "使用者名", + "password": "密碼", + "display_name": "顯示名稱", + "email": "Email", + "role": "Role", + "last_login": "Last Login", + "actions": "Actions", + "device_id": "裝置ID", + "department": "Department", + "building": "Building", + "location": "Location", + "assigned_user": "分配使用者", + "token": "Token", + "expires": "Expires", + "used": "Used", + "no_users": "此組織沒有使用者。", + "no_devices": "此組織沒有分配裝置。", + "no_invitations": "沒有邀請。", + "user_added": "User added", + "user_removed": "使用者已移除", + "user_updated": "使用者角色已更新", + "device_assigned": "裝置已分配", + "device_unassigned": "裝置已取消分配", + "invitation_created": "邀請已建立", + "settings_saved": "設定已儲存", + "org_deleted": "組織已刪除", + "confirm_remove_user": "从組織中移除此使用者?", + "confirm_unassign_device": "取消分配此裝置?", + "confirm_delete_org": "刪除此組織及所有關聯資料?", + "edit_role": "修改角色", + "raw_settings": "原始設定", + "key": "Key", + "value": "Value", + "save": "儲存設定", + "policy_unattended": "無人值守(即時)", + "policy_attended": "有人值守(需確認)", + "policy_ask": "Always ask", + "expires_hours": "過期時間(小時)", + "loading_failed": "載入組織資料失敗", + "name_slug_required": "名稱和標識符為必填項", + "org_created": "組織已建立", + "org_updated": "組織已更新", + "create_new_user": "建立新使用者", + "add_existing_user": "添加現有使用者", + "none_available": "none", + "select_user": "選擇使用者", + "org_role": "組織角色", + "link_user_hint": "所選使用者將使用其伺服器帐戶憑證連結到此組織。", + "no_available_users": "所有伺服器使用者都已連結到此組織。", + "user_linked": "使用者已連結到組織" + }, + "chat": { + "e2e_enabled": "端到端加密", + "e2e_establishing": "正在建立安全通道...", + "e2e_established": "安全通道已建立", + "e2e_unsupported": "此瀏覽器不支援端到端加密", + "typing_indicator": "正在輸入...", + "read_receipt": "已讀", + "delivered": "已傳送", + "file_share": "檔案", + "file_too_large": "檔案過大(最大50MB)", + "file_encrypted": "加密檔案傳輸", + "presence_online": "線上", + "presence_away": "離開", + "presence_busy": "忙碌", + "presence_offline": "離線", + "key_rotation": "安全金鑰已輪換", + "new_message": "新訊息", + "title": "聊天", + "contacts": "聯絡人", + "groups": "群組", + "no_contacts": "尚無聯絡人", + "no_groups": "尚無群組", + "no_messages": "尚無訊息", + "no_results": "找不到結果", + "select_conversation": "選擇對話開始聊天", + "type_message": "輸入訊息...", + "send": "傳送", + "attach_file": "附加檔案", + "emoji": "表情", + "search_messages": "搜尋訊息", + "create_group": "建立群組", + "group_name": "群組名稱", + "group_members": "成員", + "cancel": "取消", + "create": "建立", + "members": "成員", + "today": "今天", + "yesterday": "昨天", + "react": "回應", + "my_presence": "我的狀態", + "search_placeholder": "搜尋聯絡人和訊息", + "select_conversation_hint": "檢視訊息請選擇一個工作階段", + "info": "資訊", + "group_name_placeholder": "輸入群組名稱" + }, + "toast": { + "device_connected": "裝置已連線", + "device_disconnected": "裝置已斷開", + "session_started": "遠端工作階段已開始", + "session_ended": "遠端工作階段已結束", + "file_upload_complete": "檔案上傳完成", + "settings_saved": "設定已儲存", + "error_generic": "發生錯誤", + "connection_lost": "連線丟失", + "reconnecting": "正在重新連線..." + }, + "theme": { + "dark": "深色", + "light": "淺色", + "auto": "跟隨系統", + "title": "主題" + }, + "days": { + "mon": "週一", + "tue": "週二", + "wed": "週三", + "thu": "週四", + "fri": "週五", + "sat": "週六", + "sun": "週日" + }, + "toolkit": { + "title": "工具箱", + "subtitle": "管理員工具和診斷實用程式", + "cat_network": "網路", + "cat_crypto": "加密", + "cat_encoding": "編碼", + "cat_system": "系統", + "host": "主機", + "port": "埠", + "domain": "域名", + "run": "執行", + "generate": "產生", + "encode": "編碼", + "decode": "解碼", + "send": "傳送", + "refresh": "重新整理", + "algorithm": "演算法", + "input_text": "輸入文字", + "enter_text": "輸入文字...", + "length": "長度", + "options": "選項", + "source": "來源", + "lines": "行數", + "log_console": "控制台", + "log_go": "Go 伺服器", + "mac_address": "MAC 地址", + "broadcast": "廣播", + "ping_title": "Ping", + "ping_desc": "檢查主機可達性和延遲", + "tcp_title": "TCP 埠檢查", + "tcp_desc": "測試 TCP 埠連線", + "ssl_title": "SSL 檢查器", + "ssl_desc": "檢查 SSL/TLS 證書詳情", + "http_title": "HTTP 健康檢查", + "http_desc": "驗證 HTTP 端點狀態", + "dns_title": "DNS 查詢", + "dns_desc": "將主機名解析為 IP 位址", + "whois_title": "DNS 記錄", + "whois_desc": "查詢 A、AAAA、MX、TXT、NS 記錄", + "speed_title": "速度測試", + "speed_desc": "測量下載頻寬", + "run_speed_test": "執行速度測試", + "wol_title": "網路喚醒", + "wol_desc": "傳送魔術包喚醒裝置", + "wol_sent": "魔術包已傳送", + "hash_title": "雜湊產生器", + "hash_desc": "產生加密雜湊值", + "password_title": "密碼產生器", + "password_desc": "產生安全的隨機密碼", + "jwt_title": "JWT 解碼器", + "jwt_desc": "解碼和檢查 JSON Web Token", + "jwt_token": "JWT 權杖", + "base64_title": "Base64", + "base64_desc": "Base64 編碼或解碼資料", + "url_title": "URL 編碼器", + "url_desc": "編碼或解碼 URL 元件", + "processes_title": "程序列表", + "processes_desc": "檢視執行中的系統程序", + "disk_title": "磁碟使用", + "disk_desc": "檢視磁碟分割槽使用情況", + "db_title": "資料庫統計", + "db_desc": "檢視資料庫表統計資訊", + "docker_title": "Docker 容器", + "docker_desc": "檢視執行中的 Docker 容器", + "logs_title": "日誌檢視器", + "logs_desc": "檢視最近的日誌輸出", + "ip_address": "IP", + "latency": "延遲", + "ttl": "TTL", + "status": "狀態", + "resolved": "已解析", + "subject": "主體", + "issuer": "簽發者", + "valid_from": "有效期從", + "valid_to": "有效期至", + "days_left": "剩餘天數", + "days": "天", + "protocol": "協議", + "cipher": "密碼套件", + "alt_names": "備用名稱", + "chain": "證書鏈", + "record_type": "類型", + "record_value": "值", + "hash_value": "雜湊值", + "entropy": "熵值", + "very_strong": "非常強", + "strong": "強", + "weak": "弱", + "expiry": "過期時間", + "expired": "已過期", + "valid": "有效", + "process_name": "名稱", + "db_type": "類型", + "db_size": "大小", + "table_name": "表名", + "row_count": "行數", + "no_data": "無可用資料", + "no_docker": "找不到 Docker 容器或 Docker 不可用", + "no_logs": "無可用日誌條目" + }, + "policies": { + "title": "組織策略", + "subtitle": "管理組織的安全、連線和功能策略", + "select_org": "組織", + "select_org_placeholder": "選擇組織...", + "select_org_first": "選擇組織以檢視策略稽核日誌。", + "configured": "已配置", + "connection_title": "連線策略", + "connection_desc": "控制遠端工作階段的建立方式", + "connection_mode": "連線模式", + "mode_attended": "有人值守(需要使用者批准)", + "mode_unattended": "無人值守(始終允許)", + "mode_ask": "始終詢問", + "max_session": "最大工作階段時長(分鐘)", + "idle_lock": "空閒鎖定超時(分鐘)", + "wallpaper_policy": "工作階段期間桌布", + "wallpaper_show": "顯示", + "wallpaper_hide_session": "工作階段期間隱藏", + "wallpaper_hide_always": "始終隱藏", + "features_title": "功能策略", + "features_desc": "為裝置啟用或禁用特定功能", + "allow_file_transfer": "允許檔案傳輸", + "allow_clipboard": "允許剪貼簿同步", + "allow_audio": "允許音訊流", + "allow_recording": "允許工作階段錄製", + "security_title": "安全策略", + "security_desc": "為組織裝置強制執行安全要求", + "require_2fa": "無人值守存取需要2FA", + "password_min_length": "最小密碼長度", + "password_require_special": "要求特殊字元", + "password_max_age": "密碼最大有效期(天,0=永不)", + "allowed_operators": "允許的操作員角色(逗號分隔)", + "network_title": "網路策略", + "network_desc": "控制中繼伺服器和直接連線", + "block_direct_p2p": "阻止直接P2P(強制中繼)", + "allowed_relays": "允許的中繼伺服器(每行一個)", + "ip_allowlist": "IP白名單(CIDR,每行一個)", + "update_title": "更新策略", + "update_desc": "控制自動更新和更新頻道", + "auto_update": "啟用自動更新", + "update_channel": "更新頻道", + "audit_title": "策略變更", + "audit_desc": "最近的策略變更歷史", + "no_audit": "沒有記錄的策略變更。", + "save_success": "策略保存成功", + "save_failed": "保存策略失败", + "load_failed": "加載策略失败", + "block_direct_p2p_hint": "套用於此組織中的裝置。全域預設值在設定 → 連線策略中設定。" + }, + "attestation": { + "title": "裝置認證", + "subtitle": "監控裝置身份驗證和硬體指紋", + "verified": "已驗證", + "pending": "待處理", + "failed": "失敗", + "device_list": "裝置認證記錄", + "device_list_desc": "硬體指紋和身份驗證狀態", + "col_device": "裝置ID", + "col_hostname": "主機名稱", + "col_fingerprint": "指紋", + "col_status": "狀態", + "col_last_check": "最後檢查", + "col_actions": "操作", + "no_records": "找不到認證記錄。", + "verify_success": "設備已標记為已驗證", + "verify_failed": "驗證設備失败", + "revoke_success": "設備认證已撤销", + "revoke_failed": "撤销认證失败" + }, + "fleet": { + "title": "車隊管理", + "tab_resources": "資源", + "tab_tasks": "任務", + "tab_builder": "構建器", + "tab_compliance": "合規", + "res_title": "資源對映", + "res_all_types": "所有類型", + "res_type_printer": "印表機", + "res_type_network_drive": "網路驅動器", + "res_type_dns": "DNS 伺服器", + "res_type_proxy": "代理", + "res_type_vpn": "VPN", + "res_add": "新增資源", + "res_name": "資源名稱", + "res_type": "類型", + "res_address": "地址 / 路徑", + "res_target": "目標", + "res_scope": "範圍", + "res_scope_org": "組織", + "res_scope_group": "組", + "res_scope_device": "裝置", + "res_scope_value": "範圍值", + "res_status": "狀態", + "res_active": "活動", + "res_inactive": "不活動", + "res_no_data": "找不到資源。點選'新增'建立。", + "res_confirm_delete": "確定要刪除此資源嗎?", + "task_title": "任務排程器", + "task_all_status": "所有狀態", + "task_status_pending": "等待中", + "task_status_running": "執行中", + "task_status_success": "成功", + "task_status_failed": "失敗", + "task_search": "搜尋任務…", + "task_create": "建立任務", + "task_name": "任務名稱", + "task_type": "類型", + "task_type_script": "指令碼", + "task_type_install": "安裝", + "task_type_update": "更新", + "task_type_restart": "重啟", + "task_type_deploy": "部署", + "task_type_scan": "掃描", + "task_targets": "目標", + "task_targets_help": "裝置ID或組名,逗號分隔", + "task_schedule": "排程", + "task_schedule_once": "一次", + "task_schedule_cron": "Cron", + "task_schedule_interval": "間隔", + "task_schedule_value": "排程值", + "task_script": "指令碼 / 命令", + "task_retries": "重試", + "task_timeout": "超時 (秒)", + "task_last_run": "上次執行", + "task_no_data": "找不到任務。建立新任務。", + "task_confirm_delete": "確定要刪除此任務嗎?", + "task_output": "任務輸出", + "task_retry": "重試", + "builder_title": "視覺化工作流構建器", + "builder_select_workflow": "選擇工作流…", + "builder_new": "新建", + "builder_save": "儲存", + "builder_export": "匯出", + "builder_execute": "執行", + "builder_dry_run": "模擬執行", + "builder_triggers": "觸發器", + "builder_conditions": "條件", + "builder_actions": "操作", + "builder_results": "結果", + "builder_transforms": "轉換", + "builder_properties": "屬性", + "builder_no_selection": "選擇節點以編輯其屬性。", + "workflow_name": "工作流名稱:", + "comp_title": "軟體合規", + "comp_compliant": "合規", + "comp_warning": "警告", + "comp_critical": "嚴重", + "comp_score": "平均分數", + "comp_device": "裝置", + "comp_hostname": "主機名稱", + "comp_os": "作業系統", + "comp_score_col": "分數", + "comp_issues": "問題", + "comp_last_scan": "上次掃描", + "comp_scan": "掃描", + "comp_scan_all": "全部掃描", + "comp_remediate": "修復", + "comp_remediate_confirm": "在此裝置上執行自動修復?", + "comp_no_data": "無合規資料。執行掃描以開始。", + "save": "儲存", + "cancel": "取消", + "close": "關閉", + "edit": "編輯", + "delete": "刪除", + "actions": "操作", + "all_orgs": "所有組織", + "builder_node_trigger_manual": "手動触發器", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "事件触發器", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "重新啟動服務", + "builder_node_action_file_deploy": "部署檔案", + "builder_node_action_message": "發送訊息", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "發送警示", + "builder_node_result_chain": "串聯工作流程", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "選擇組織…", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "網路磁碟機", + "type_dns": "DNS 伺服器", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "添加資原始碼", + "edit_resource": "编辑資原始碼", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "地址/路徑", + "scope_org": "組織", + "scope_group": "組", + "scope_device": "裝置", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "確定要刪除此項目吗?", + "all_statuses": "所有狀態", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "失敗", + "search_tasks": "搜尋任務…", + "create_task": "建立任務", + "edit_task": "编辑任務", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "檔案部署", + "task_type_registry": "Registry", + "target_devices": "目標裝置", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "脚本/指令", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "正在載入", + "no_output": "沒有可用輸出", + "error_loading": "載入資料出錯", + "select_workflow": "選擇工作流程…", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "手動触發器", + "node_schedule": "Schedule", + "node_event": "事件触發器", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "重新啟動服務", + "node_file_deploy": "部署檔案", + "node_send_message": "發送訊息", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "發送警示", + "node_chain": "串聯工作流程", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "所有組織", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "裝置", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "在此裝置上執行自動修復?" + }, + "scaling": { + "title": "擴展與中繼管理", + "tab_overview": "概覽", + "tab_relays": "中繼節點", + "tab_rules": "分配規則", + "tab_capacity": "容量規劃", + "arch_title": "網路架構", + "arch_loading": "載入架構圖...", + "stat_relay_nodes": "中繼節點", + "stat_total_devices": "總裝置數", + "stat_active_sessions": "活躍工作階段", + "stat_bandwidth": "總頻寬", + "relay_health": "中繼健康", + "no_relays": "未配置中繼節點。新增第一個中繼節點以分配負載。", + "relay_search": "搜尋中繼...", + "relay_add": "新增中繼節點", + "relay_edit": "編輯中繼節點", + "col_name": "名稱", + "col_address": "地址", + "col_location": "位置", + "col_devices": "裝置", + "col_sessions": "工作階段", + "col_bandwidth": "頻寬", + "col_status": "狀態", + "col_actions": "操作", + "col_priority": "優先順序", + "col_rule_name": "規則名稱", + "col_match": "匹配", + "col_target_relay": "目標中繼", + "col_fallback": "備用", + "status_online": "線上", + "status_degraded": "降級", + "status_offline": "離線", + "status_enabled": "已啟用", + "status_disabled": "已禁用", + "confirm_delete_relay": "確定要刪除此中繼節點嗎?", + "confirm_delete_rule": "確定要刪除此分配規則嗎?", + "rules_hint": "分配規則決定哪個中繼伺服器處理特定裝置組。規則按優先順序評估(最低優先)。", + "rule_add": "新增規則", + "rule_edit": "編輯規則", + "rule_match_type": "匹配類型", + "match_subnet": "子網", + "match_group": "裝置組", + "match_tag": "裝置標籤", + "match_location": "位置", + "rule_match_value": "匹配值", + "fallback_master": "主伺服器", + "fallback_nearest": "最近中繼", + "relay_max_sessions": "最大工作階段數", + "relay_max_bandwidth": "最大頻寬 (Mbps)", + "cap_tiers": "容量級別", + "cap_loading": "載入容量資料...", + "cap_recommendations": "建議", + "cap_no_recs": "尚無可用建議。", + "cap_planning": "基礎設施規劃", + "cap_config": "配置", + "cap_max_devices": "最大裝置數", + "cap_max_sessions": "最大工作階段數", + "cap_current": "目前", + "cap_utilization": "利用率", + "cap_tier_devices": "裝置容量", + "cap_tier_sessions": "工作階段容量", + "cap_tier_bandwidth": "頻寬容量", + "cap_single_sqlite": "單伺服器 (SQLite)", + "cap_single_pg": "單伺服器 (PostgreSQL)", + "cap_master_3": "主伺服器 + 3 中繼", + "cap_master_10": "主伺服器 + 10 中繼", + "rec_no_relays": "未配置中繼節點。建議新增中繼節點以提高效能和冗餘。", + "rec_devices_high": "裝置利用率較高。建議新增更多中繼節點以分配負載。", + "rec_sessions_high": "工作階段容量接近限制。建議升級中繼基礎設施。", + "rec_cpu_high": "部分中繼節點CPU使用率較高。建議負載均衡或升級容量。", + "rec_all_good": "所有系統執行在正常引數內。無需操作。", + "save": "儲存", + "cancel": "取消", + "edit": "編輯", + "delete": "刪除", + "close": "關閉", + "no_rules": "沒有分配規則。", + "relays_info_banner": "此清單仅供参考。客戶端實際使用的中繼伺服器通過 BetterDesk 伺服器上的 RELAY_SERVERS 環境變量設定。", + "relay_name_address_required": "必須填寫名稱和地址。", + "relay_save_failed": "儲存中繼节點失敗。", + "relay_delete_failed": "刪除中繼节點失敗。", + "relay_saved": "中繼节點已儲存。", + "relay_deleted": "中繼节點已刪除。", + "rule_name_value_required": "必須填寫規則名稱和匹配值。", + "rule_save_failed": "儲存規則失敗。", + "rule_delete_failed": "刪除規則失敗。", + "rule_saved": "規則已儲存。", + "rule_deleted": "規則已刪除。" + }, + "cross_platform": { + "title": "跨平台相容性", + "tab_matrix": "相容性矩陣", + "tab_distribution": "分佈", + "tab_protocols": "協議", + "tab_limitations": "限制", + "matrix_hint": "所有支援平台的功能支援矩陣。綠色=完全支援,黃色=部分支援,灰色=不可用,藍色=計劃中。", + "col_feature": "功能", + "legend_full": "完全支援", + "legend_partial": "部分支援", + "legend_none": "不可用", + "legend_planned": "計劃中", + "platform_breakdown": "平台分佈", + "arch_breakdown": "架構分佈", + "version_breakdown": "版本分佈", + "summary": "摘要", + "total_devices": "裝置總數", + "unique_platforms": "平台", + "unique_archs": "架構", + "unique_versions": "用戶端版本", + "no_devices": "尚無註冊裝置。", + "protocols_hint": "協議能力協商確保每個用戶端只接收其支援的功能。伺服器根據報告的能力調整行為。", + "capability_negotiation": "能力協商", + "codec_support": "編解碼器支援(線上裝置)", + "feature_support": "功能支援(線上裝置)", + "no_codec_data": "沒有來自線上裝置的編解碼器資料。", + "no_feature_data": "沒有來自線上裝置的功能資料。", + "protobuf_schema": "ClientCapabilities Protobuf 模式", + "diagram_client": "用戶端", + "diagram_server": "BetterDesk 伺服器", + "diagram_peer": "遠端對等體", + "limitations_hint": "每個平台都有影響可用功能的特定限制。在規劃部署時請查閱這些約束。", + "feat_desktop_client": "桌面用戶端", + "feat_background_agent": "後臺代理", + "feat_remote_target": "遠端目標", + "feat_screen_capture": "螢幕捕獲", + "feat_input_injection": "輸入注入", + "feat_file_transfer": "檔案傳輸", + "feat_clipboard_sync": "剪貼簿同步", + "feat_audio_streaming": "音訊流", + "feat_chat": "聊天", + "feat_h264": "H.264 編解碼器", + "feat_vp9": "VP9 編解碼器", + "feat_av1": "AV1 編解碼器", + "feat_cdap_agent": "CDAP 代理", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "網頁瀏覽器", + "platform_chromeos": "ChromeOS", + "status_production": "生產", + "status_testing": "測試", + "status_planned": "計劃中", + "status_limited": "有限", + "status_experimental": "實驗性", + "limit_win_uac": "服務安裝和安全桌面輸入注入需要UAC提升。", + "limit_win_service": "作為NSSM服務執行;安裝需要管理員許可權。", + "limit_win_firewall": "Windows防火牆規則必須允許21115-21119埠用於中繼連線。", + "limit_linux_wayland": "Wayland合成器限制程式化螢幕捕獲;需要PipeWire門戶API。", + "limit_linux_pipewire": "音訊捕獲需要PipeWire;PulseAudio回退可用但有限。", + "limit_linux_arm": "ARM64構建可用;某些編解碼器可能使用軟體解碼(較慢)。", + "limit_mac_screen": "需要在系統偏好設定>隱私與安全中授予螢幕錄製許可權。", + "limit_mac_signing": "代理必須使用Apple Developer ID簽名才能分發。", + "limit_mac_notarize": "macOS Gatekeeper需要公證(非App Store分發)。", + "limit_android_projection": "MediaProjection API需要使用者同意每次螢幕捕獲工作階段。", + "limit_android_accessibility": "輸入注入需要輔助功能服務;Android 14+中受限。", + "limit_android_battery": "後臺服務受Doze模式限制;可能需要電池最佳化豁免。", + "limit_ios_capture": "Apple禁止後臺螢幕捕獲;僅支援檢視模式。", + "limit_ios_input": "不允許輸入注入;僅支援遠端檢視和聊天。", + "limit_ios_appstore": "僅透過App Store分發;TestFlight用於beta測試。", + "limit_web_https": "WebCodecs API和WebRTC需要HTTPS;HTTP回退到JMuxer(有限編解碼器)。", + "limit_web_codec": "編解碼器支援取決於瀏覽器;H.264廣泛支援,VP9/AV1因瀏覽器而異。", + "limit_web_performance": "效能受瀏覽器沙箱限制;無直接硬體加速。", + "limit_chrome_crostini": "完整代理支援僅在Crostini Linux容器內。", + "limit_chrome_pwa": "PWA模式僅提供web功能;無原生代理能力。", + "limit_chrome_input": "Crostini容器外不支援輸入注入。", + "feat_session_recording": "工作階段錄製", + "feat_multi_monitor": "多螢幕", + "feat_unattended_access": "無人值守存取", + "limit_win_virtual_account": "服務在隔離虛擬帳戶下執行,而非 LocalSystem;自訂日誌路徑可能需要調整 ACL。", + "limit_linux_unprivileged": "服務以專用非特權「betterdesk」帳戶執行,並具備 systemd 強化(NoNewPrivileges、ProtectSystem=strict)。" + }, + "security_audit": { + "title": "安全稽核", + "tab_overview": "概覽", + "tab_events": "稽核事件", + "tab_hardening": "安全加固", + "tab_vulnerabilities": "漏洞", + "security_score": "安全評分", + "failed_logins": "登入失敗(24h)", + "active_bans": "活躍封鎖", + "api_keys": "API金鑰", + "old_keys": "舊金鑰(>90天)", + "security_checks": "安全檢查", + "tls_status": "TLS狀態", + "pass": "透過", + "warning": "警告", + "fail": "失敗", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "安全 WebSocket", + "enabled": "已啟用", + "disabled": "已禁用", + "all_events": "所有事件", + "event_login_failed": "登入失敗", + "event_login_success": "登入成功", + "event_peer_banned": "裝置封鎖", + "event_ip_banned": "IP封鎖", + "event_config_changed": "配置變更", + "event_key_created": "金鑰建立", + "refresh": "重新整理", + "col_time": "時間", + "col_action": "操作", + "col_actor": "操作者", + "col_target": "目標", + "col_ip": "IP地址", + "col_details": "詳情", + "no_events": "找不到稽核事件。", + "hardening_hint": "BetterDesk部署的安全加固優先順序。按嚴重程度排序。", + "no_hardening": "沒有可用的加固專案。", + "vuln_hint": "依賴項漏洞掃描結果。定期執行npm audit以保持依賴安全。", + "no_vulns": "未發現漏洞。您的依賴項是安全的。" + }, + "languages": { + "title": "語言管理", + "total_languages": "語言總數", + "fully_translated": "完全翻譯", + "needs_review": "需要稽覈", + "reference_keys": "參考鍵數", + "no_languages": "找不到語言檔案。", + "badge_reference": "參考", + "badge_review": "需要審核", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "查看缺失項", + "fix_missing": "Fix Missing", + "missing_keys_for": "缺失鍵:", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "還有 {n} 個...", + "all_keys_present": "所有鍵都已存在!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code} 中缺少的鍵必須手動翻譯。", + "no_fix_needed": "沒有需要補齐的缺失鍵。" + }, + "resource_control": { + "title": "資原始碼控制", + "tab_overview": "概覽", + "tab_usb": "USB Control", + "tab_optical": "光碟機", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "資原始碼配額", + "compliance_by_category": "按類别的合規性", + "device_compliance": "裝置合規性", + "search_devices": "搜尋裝置...", + "col_device": "裝置", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "裝置總數", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "合規率", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "設定", + "no_devices": "未找到裝置", + "usb_title": "USB 端口控制", + "usb_hint": "控制所選裝置或組織級預設原則的 USB 存儲裝置存取。", + "usb_storage_policy": "USB 存儲原則", + "usb_whitelist": "白名單裝置(每行一個)", + "usb_whitelist_hint": "VID:PID(例如 0781:5583)", + "usb_audit_log": "記錄 USB 裝置連線", + "optical_title": "光碟機控制", + "optical_hint": "控制所選裝置的 CD/DVD/藍光碟機動器存取。", + "optical_policy": "光碟機原則", + "optical_audit_log": "記錄光碟機存取", + "monitors_title": "顯示器管理", + "monitors_hint": "設定顯示器設定,包括最大數量、分辨率强制、亮度和電原始碼排程。", + "monitors_max_count": "最大顯示器數量(0 = 不限制)", + "monitors_max_hint": "0 表示不限制", + "monitors_resolution": "最大分辨率", + "monitors_brightness": "亮度限制", + "monitors_power_schedule": "電原始碼排程", + "monitors_power_hint": "例如 off:22:00-06:00", + "disks_title": "磁碟存取控制", + "disks_hint": "設定磁碟存取原則,包括唯讀模式、加密强制和分割區可见性。", + "disks_readonly": "强制唯讀模式", + "disks_encryption": "要求加密(BitLocker/LUKS)", + "disks_smart": "啟用 S.M.A.R.T. 監控", + "disks_hidden": "隱藏分割區", + "disks_hidden_hint": "以逗號分隔的磁碟機磁碟機代號或掛載點", + "quotas_title": "資原始碼配額", + "quotas_hint": "為所選裝置上的每個使用者設定 CPU、記憶體、頻寬和磁碟配額。", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "頻寬限制(Mbps)", + "quotas_bandwidth_hint": "0 = 不限制", + "quotas_disk_quota": "磁碟配額(GB)", + "quotas_disk_hint": "0 = 不限制", + "quotas_process_whitelist": "處理程序白名單(每行一個)", + "quotas_process_hint": "例如 chrome.exe、code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "仅白名單", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "軟件更新", + "desc": "Check for new versions and update the BetterDesk console from GitHub", + "current_version": "已安裝版本", + "latest_version": "Latest version", + "status": "Status", + "check_now": "檢查更新", + "checking": "Checking…", + "up_to_date": "已是最新版本", + "update_available": "有可用更新", + "changelog": "Release Notes", + "no_changelog": "沒有可用的發布说明", + "files_changed": "已變更檔案", + "files": "個檔案", + "changes_unavailable": "無法載入檔案變更清單。您仍然可以安裝更新。", + "create_backup": "更新前建立備份", + "install": "Install Update", + "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", + "installing": "正在安裝更新…", + "creating_backup": "正在建立備份…", + "downloading": "正在下載檔案…", + "install_success": "更新安裝成功。主控台正在重新啟動…", + "install_failed": "更新安裝失敗", + "restarting": "正在等待主控台重新啟動…", + "restart_complete": "主控台已成功重新啟動", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "未選擇更新版本。請先檢查更新。", + "backups_title": "更新備份", + "backups_desc": "每次更新前自動建立的更新前備份", + "no_backups": "未找到更新備份", + "restore": "Restore", + "restore_confirm": "確定要从此備份還原吗?已變更的檔案將被覆盖。", + "restore_success": "備份還原成功。主控台正在重新啟動…", + "baseline_set": "基線已設定", + "commits_behind": "個提交落後", + "total_files": "總檔案數", + "applied": "Applied", + "failed": "失敗", + "skipped": "Skipped", + "removed": "Removed", + "auto": "Auto", + "manual": "Manual", + "component_console": "Web Console", + "component_server": "Go伺服器", + "component_agent": "Agent", + "component_scripts": "脚本和Docker", + "component_other": "Other", + "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", + "include_server": "Include Go Server (compile & deploy binary)", + "checking_go": "檢查Go…", + "go_not_found": "未安裝Go", + "go_check_failed": "無法檢查Go可用性", + "server_building": "編譯Go伺服器… 這可能需要几分鐘。", + "server_built": "伺服器二進位檔案已編譯", + "server_build_failed": "伺服器編譯失敗", + "server_stale_title": "伺服器二進位檔案已過期", + "server_stale_desc": "Go 伺服器原始碼代碼已更新,但正在執行的二進位檔案尚未重新編譯。立即重新編譯以套用安全和庫更新。", + "rebuild_server": "重新編譯伺服器二進位檔案", + "rebuilding_server": "Rebuilding…", + "rebuild_server_success": "伺服器二進位檔案已重新編譯并重新啟動", + "rebuild_server_failed": "伺服器二進位檔案重新編譯失敗", + "server_deployed": "伺服器二進位檔案已部署", + "server_deploy_failed": "伺服器部署失敗", + "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", + "server_source_downloading": "下載伺服器原始碼代碼…", + "delete": "刪除", + "delete_confirm": "永久刪除備份 {name}?此操作無法撤銷。", + "delete_success": "備份已刪除", + "delete_failed": "刪除備份失敗", + "retention_label": "保留最近 N 個備份", + "retention_hint": "每次更新後會自動刪除更舊的備份。使用 0 可保留所有備份。", + "retention_saved": "保留設定已儲存", + "retention_invalid": "保留值必須是 0 到 1000 之間的整數", + "retention_required_for_prune": "請先設定大於 0 的保留值", + "prune_now": "Apply now", + "prune_confirm": "只保留最近 {n} 個備份并刪除其余備份?", + "prune_done": "已清理 {n} 個備份", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_label": "更新方式", + "strategy_download": "下載预编译二進制文件", + "strategy_compile": "从源代碼编译", + "both_available": "下載和编译", + "download_available": "可下載", + "no_method": "無可用更新方式", + "no_release": "無發布版本", + "available": "可用", + "server_downloading": "正在下載服务器二進制文件…", + "server_downloaded": "服务器二進制文件已下載", + "server_download_failed": "服务器二進制文件下載失败", + "server_download_note": "將从 GitHub Releases 下載预编译的二進制文件。通常不到一分钟。", + "install_go_hint": "从 https://go.dev/dl/ 安装 Go 以啟用编译,或發布包含预编译二進制文件的版本", + "strategy_install_go": "自動安裝 Go 并編譯", + "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", + "auto_strategy": "Auto", + "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", + "auto_available": "自動重建已就绪", + "toolchain_ready": "工具鏈已安裝", + "toolchain_will_install": "Go toolchain will be installed automatically", + "toolchain_downloading": "正在下載 Go 工具鏈…", + "toolchain_failed": "Go 工具鏈安裝失敗", + "modal_title": "正在安裝更新", + "modal_done_title": "更新完成", + "modal_close": "關閉", + "modal_reload_now": "重新載入主控台", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "主控台檔案", + "phase_server": "Go 伺服器", + "phase_restart": "重新啟動", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "已跳過備份(按使用者選擇)", + "server_skipped": "已跳過 Go 伺服器", + "server_not_selected": "Go server not selected", + "server_processing": "正在處理 Go 伺服器更新…", + "no_restart_needed": "不需要重新啟動", + "complete": "更新已套用", + "complete_summary": "更新已成功套用。", + "complete_with_errors": "更新已完成,但某些步骤失敗。請查看下方詳細資訊。", + "modal_done_with_errors_title": "更新完成但有錯誤", + "console_will_restart": "主控台處理程序現在將重新啟動…", + "restart_complete_msg": "主控台已完成重新啟動。點擊重新載入以載入新版本。頁面將在 8 秒後自動重新載入。", + "refresh_recommended": "静態資原始碼已變更,請重新載入頁面以查看新界面。", + "confirm_title": "套用更新", + "confirm_with_backup": "將自動建立更新前備份。", + "confirm_no_backup": "不會建立備份(风险自担)。" + }, + "permissions": { + "title": "權限管理", + "subtitle": "管理基於角色的權限和自定义覆盖", + "info_title": "權限如何工作", + "info_desc": "每個角色都有預設權限。您可以通過切換下面的開關来為每個角色添加或刪除單独的權限。自定义覆盖會醒目提示顯示,可以随時還原為預設值。", + "select_role": "選擇角色", + "select_role_placeholder": "選擇角色...", + "reset_overrides": "重置所有覆盖", + "granted": "Granted", + "overrides": "Overrides", + "level": "Level", + "super_admin_tag": "Full access", + "server_level_tag": "伺服器級别", + "custom": "Custom", + "default": "Default", + "revert": "還原預設", + "saved": "權限已更新", + "reverted": "已還原預設", + "all_reverted": "所有覆盖已還原", + "confirm_reset": "將此角色的所有自定义覆盖重置為預設值?", + "empty_title": "選擇角色", + "empty_desc": "从上方下拉清單中選擇一個角色以查看和管理其權限。", + "locked_title": "Super Admin", + "locked_desc": "超級管理員預設拥有所有權限,無法自定义。", + "cat_device": "裝置", + "cat_user": "Users", + "cat_server": "伺服器", + "cat_org": "組織", + "cat_audit": "稽核與監控", + "cat_cdap": "CDAP", + "cat_enrollment": "Enrollment", + "cat_chat": "Chat", + "cat_branding": "Branding", + "perm_device_view": "查看裝置", + "perm_device_connect": "連線裝置", + "perm_device_edit": "编辑裝置", + "perm_device_delete": "刪除裝置", + "perm_device_ban": "封禁/解封裝置", + "perm_device_change_id": "變更裝置ID", + "perm_user_view": "查看使用者", + "perm_user_create": "建立使用者", + "perm_user_edit": "编辑使用者", + "perm_user_delete": "刪除使用者", + "perm_server_config": "伺服器設定", + "perm_server_keys": "管理API金鑰", + "perm_org_create": "建立組織", + "perm_org_edit": "编辑組織", + "perm_org_delete": "刪除組織", + "perm_org_manage_users": "管理組織使用者", + "perm_org_manage_devices": "管理組織裝置", + "perm_audit_view": "查看稽核日誌", + "perm_metrics_view": "查看指標", + "perm_blocklist_edit": "编辑黑名單", + "perm_cdap_view": "查看CDAP裝置", + "perm_cdap_command": "發送CDAP指令", + "perm_cdap_terminal": "CDAP終端機存取", + "perm_cdap_files": "CDAP檔案存取", + "perm_enrollment_manage": "管理註冊", + "perm_enrollment_approve": "審批註冊", + "perm_chat_access": "Chat access", + "perm_branding_edit": "编辑品牌", + "perm_server_attestation": "伺服器效能認證" + }, + "notifications": { + "title": "通知", + "empty": "没有新通知", + "mark_all_read": "全部標记為已讀", + "see_all": "查看所有求助請求", + "help_request": "求助請求", + "just_now": "刚刚" + }, + "accessibility": { + "title": "無障礙", + "subtitle": "依照視覺、動態效果與閱讀需求調整主控台。", + "close": "關閉無障礙選單", + "profiles": "快速設定", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "更大的文字、强对比度和明顯焦點。", + "profile_dyslexia": "閱讀舒適", + "profile_dyslexia_hint": "易讀字型和更寬的間距。", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "减少轉場效果并暂停動畫。", + "profile_color_assist": "顏色辅助", + "profile_color_assist_hint": "顏色濾镜、標籤和醒目提示連結。", + "reading": "閱讀", + "font_size": "字體大小", + "line_height": "行高", + "letter_spacing": "字母間距", + "word_spacing": "單字間距", + "readable_font": "易讀字型", + "readable_font_hint": "使用寬阔、熟悉的字形。", + "dyslexia_spacing": "閱讀障碍間距", + "dyslexia_spacing_hint": "為长文字增加額外間距。", + "visual": "視覺", + "contrast": "對比", + "contrast_normal": "Normal", + "contrast_high_dark": "高对比度深色", + "contrast_high_light": "高对比度浅色", + "contrast_yellow_black": "黑底黄字", + "color_filter": "色覺濾镜", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "顏色饱和度", + "underline_links": "為連結添加下划線", + "underline_links_hint": "不需要依赖顏色也能看清連結。", + "highlight_links": "突出顯示操作", + "highlight_links_hint": "為連結和按钮添加外框。", + "highlight_headings": "突出顯示標題", + "highlight_headings_hint": "用彩色條標記章節標題。", + "hide_media": "Dim media", + "hide_media_hint": "淡化圖片、視頻和畫布。", + "interaction": "互動", + "strong_focus": "强焦點", + "strong_focus_hint": "顯示較大的鍵盤焦點環。", + "large_cursor": "大光標", + "large_cursor_hint": "使用更大的高对比度指標。", + "reduce_motion": "减少動態效果", + "reduce_motion_hint": "縮短轉場和順滑滾動。", + "pause_animations": "暂停動畫", + "pause_animations_hint": "停止循環視覺运動。", + "reading_guide": "閱讀引導線", + "reading_guide_hint": "用明亮線條跟随指標。", + "reading_mask": "閱讀遮罩", + "reading_mask_hint": "淡化指標上方和下方的內容。", + "preview": "預覽", + "preview_title": "操作員工作區預覽", + "preview_text": "關閉此菜單前,檢查文字、連結、控件和狀態標籤是否易於閱讀。", + "preview_link": "裝置詳細資訊連結", + "preview_status": "Online", + "preview_button": "主要操作", + "preview_secondary": "Secondary", + "reset": "重設", + "done": "完成" + }, + "server_mgmt": { + "title": "伺服器管理", + "subtitle": "類似 Cockpit 的 BetterDesk 主控台主機管理面板(測試版)。", + "beta_tooltip": "測試版功能 — 正在积极開發中。", + "notice_title": "測試版功能", + "notice_body": "這些工具在執行 BetterDesk 主控台處理程序的主機上執行。所有操作均被稽核。", + "tab_overview": "概覽", + "tab_terminal": "終端機", + "tab_files": "檔案", + "tab_services": "服務", + "cpu": "CPU", + "memory": "記憶體", + "load": "负載平均值", + "disks": "磁碟", + "history": "歷史記錄(最近 60 個样本)", + "host_info": "Host info", + "cores": "cores", + "uptime": "運行時間", + "no_disks": "沒有可用的磁碟資料", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY 可用", + "term_connect": "連線", + "term_disconnect": "中斷連線", + "term_clear": "Clear", + "term_status": "Status", + "term_connecting": "Connecting…", + "term_connected": "Connected", + "term_disconnected": "Disconnected", + "term_error": "連線錯誤", + "term_warning": "指令會以主控台處理程序所屬使用者身分執行。添加 sudoers 規則以啟用提權。", + "term_hint": "提示:輸入 `sudo -i` 進行提權(需要 sudoers 設定)。", + "term_lib_failed": "載入終端機庫失敗", + "files_up": "上一級", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "名稱", + "files_size": "大小", + "files_perms": "Mode", + "files_mtime": "Modified", + "files_rename": "Rename", + "files_rename_prompt": "New name:", + "files_empty": "空目錄", + "files_error": "列出目錄失敗", + "read_failed": "讀取檔案失敗", + "save_failed": "儲存檔案失敗", + "rename_failed": "重命名失敗", + "delete_failed": "刪除失敗", + "delete_confirm": "刪除此條目?", + "mkdir_prompt": "新資料夾名稱:", + "mkdir_failed": "建立資料夾失敗", + "file_saved": "檔案已儲存", + "binary_warn": "二進位檔案 — 仅預覽", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "搜尋服務…", + "svc_name": "服務", + "svc_state": "狀態", + "svc_description": "Description", + "svc_empty": "未找到服務", + "svc_load_failed": "載入服務失敗", + "svc_action_failed": "操作失敗", + "svc_confirm": "Run", + "svc_start": "啟動", + "svc_stop": "停止", + "svc_restart": "重新啟動", + "svc_reload": "Reload", + "svc_enable": "Enable", + "svc_disable": "Disable", + "svc_status": "Status" + }, + "server_attestation": { + "title": "伺服器效能認證", + "subtitle": "效能基準測試,在 80% CPU、記憶體和磁碟閾值下確定並發遠端連線容量。", + "warning_title": "負載測試", + "warning_body": "基準測試模擬對信令和中繼伺服器的平行 WebSocket 連線。請在離峰時段執行 — 此測試會對正式環境產生負載。", + "run_benchmark": "執行基準測試", + "abort": "中止", + "download_report": "下載 JSON 報告", + "last_test": "上次測試", + "no_test_yet": "尚未執行任何基準測試", + "max_connections": "最大連線數", + "threshold_80": "80% 閾值 — 最終指標", + "disk": "磁碟", + "ramp_chart": "負載爬升圖", + "connections": "連線數", + "connections_short": "連線", + "tier_guide_title": "每個等級代表什麼?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 個並發連線 — 小型 VPS(1–2 vCPU,2–4 GB RAM)。", + "tier_iron_desc": "26–75 個連線 — 中階伺服器(2–4 vCPU,4–8 GB RAM)。", + "tier_platinum_desc": "76–200 個連線 — 高效能伺服器(4–8 vCPU,8–16 GB RAM)。", + "tier_titanium_desc": "201–400 個連線 — 企業級基礎設施(8+ vCPU,16–32 GB RAM)。", + "tier_obsidian_desc": "401+ 個連線 — 極速級:專用硬體,16+ vCPU,32+ GB RAM,NVMe。", + "docker_note": "注意:在 Docker 中,CPU/記憶體指標可能反映容器限制而非實體主機。", + "badge_tooltip": "BetterDesk 伺服器效能認證 — 伺服器效能認證", + "confirm_run": "此基準測試將使用模擬連線對伺服器進行負載測試。繼續?", + "starting": "啟動中…", + "complete": "基準測試完成", + "signal_peers": "信令節點", + "relay_sessions": "中繼工作階段", + "page_error": "載入伺服器效能認證頁面失敗", + "mode_estimated": "估算值(WebSocket 不可達)", + "incomplete": "基準測試結束但未獲得有效等級" + }, + "commercialization": { + "title": "商業化", + "subtitle": "支援套件、計費工作階段與工作報告", + "alpha_badge": "ALPHA", + "alpha_tooltip": "早期功能 — 計費與套件仍在積極開發中。", + "tabs": { + "overview": "概覽", + "packages": "套件與合約", + "sessions": "工作階段", + "reports": "報告", + "settings": "進階設定" }, - "branding": { - "identity_title": "品牌標識", - "identity_desc": "自定義控制台中顯示的應用名稱和描述", - "app_name": "應用名稱", - "app_description": "應用描述", - "logo_title": "標誌", - "logo_desc": "選擇標誌在側邊欄和登入頁面中的顯示方式", - "logo_type_icon": "Material 圖示", - "logo_type_svg": "SVG 程式碼", - "logo_type_image": "圖片 URL", - "logo_icon_name": "圖示名稱", - "logo_icon_hint": "輸入 Material Icons 名稱(例如 dns、cloud、security)。參見 fonts.google.com/icons", - "logo_svg_code": "SVG 程式碼", - "logo_svg_hint": "在此貼上您的 SVG 標記。支援包含路徑和樣式的完整 元素。", - "logo_image_upload": "上傳圖片", - "logo_image_choose": "選擇圖片檔案", - "logo_image_hint": "PNG、JPG、GIF、WebP 或 SVG。最大 1.5 MB。圖片以 base64 格式儲存。", - "logo_image_url": "圖片資料 / URL", - "logo_image_url_hint": "上傳檔案時自動填充,或手動貼上 URL。", - "logo_image_too_large": "圖片過大。最大允許 1.5 MB。", - "logo_image_invalid_type": "無效的檔案類型。請使用 PNG、JPG、GIF、WebP 或 SVG。", - "preview": "預覽", - "colors_title": "配色方案", - "colors_desc": "自定義調色盤。留空使用預設值。", - "colors_backgrounds": "背景色", - "colors_text": "文字色", - "colors_accents": "強調色", - "colors_borders": "邊框色", - "import_export_title": "匯入 / 匯出", - "import_export_desc": "將主題另存為 JSON 檔案或從其他例項匯入", - "export_theme": "匯出主題", - "import_theme": "匯入主題", - "reset_defaults": "恢復預設", - "save_branding": "儲存品牌設定", - "saved": "品牌設定已儲存。正在重新載入...", - "exported": "主題已匯出", - "imported": "主題匯入成功。正在重新載入...", - "import_error": "主題匯入失敗。檔案格式無效。", - "reset_confirm": "確定要將品牌設定恢復為預設值嗎?此操作無法撤銷。", - "reset_success": "品牌設定已恢復為預設值。正在重新載入...", - "logo_type_text": "Text Logo", - "logo_text": "Logo Text", - "logo_text_hint": "顯示為品牌標志的主要文字", - "logo_text_accent": "Accent Text", - "logo_text_accent_hint": "標志下方的文字(例如产品名稱或標語)", - "logo_upload_success": "Logo 上傳成功。", - "typography_title": "Typography", - "typography_desc": "選擇標題和本文字型。字型將下載到伺服器進行自托管。", - "font_heading": "標題字型", - "font_heading_hint": "用於標題(H1–H6)和文字標志", - "font_body": "Body Font", - "font_body_hint": "用於本文和界面元素", - "font_search_placeholder": "搜尋字型...", - "font_system_default": "系統預設", - "font_clear": "Clear", - "font_cat_all": "All", - "font_downloaded_count": "字型已下載到伺服器", - "powered_by": "技術支援", - "background_title": "背景與外觀", - "background_desc": "設定主控台桌布、漸層或純色背景。卡片將浮於其上。", - "bg_type_none": "無", - "bg_type_color": "純色", - "bg_type_gradient": "漸層", - "bg_type_image": "圖片", - "bg_color": "背景顏色", - "bg_gradient": "CSS 漸層", - "bg_gradient_hint": "任何有效的 CSS 漸層,例如 linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "上傳背景圖片", - "bg_image_choose": "選擇圖片檔案", - "bg_image_hint": "PNG、JPG、WebP 或 GIF。最大 8 MB。儲存於伺服器。", - "bg_image_url": "圖片路徑 / URL", - "bg_size": "圖片縮放", - "bg_size_cover": "覆蓋(填滿螢幕)", - "bg_size_contain": "包含(符合)", - "bg_size_auto": "自動(原始大小)", - "bg_blur": "背景模糊", - "bg_overlay": "深色遮罩", - "bg_overlay_hint": "加深背景以提高文字可讀性。", - "bg_image_too_large": "圖片過大。最大大小為 8 MB。", - "bg_image_invalid_type": "無效的檔案類型。請使用 PNG、JPG、WebP 或 GIF。", - "bg_upload_success": "背景圖片已成功上傳。", - "login_title": "登入頁面", - "login_desc": "自訂登入畫面的標題、副標題和背景。", - "login_heading": "登入標題", - "login_heading_placeholder": "歡迎回來", - "login_subheading": "登入副標題", - "login_subheading_placeholder": "登入您的帳戶", - "login_bg_inherit": "與主控台相同", - "agent_title": "代理程式下載頁面", - "agent_desc": "自訂向終端使用者顯示的公開代理程式下載入口網站。", - "agent_show_powered": "顯示「Powered by BetterDesk」", - "agent_show_powered_hint": "在下載入口網站頁尾顯示 BetterDesk 版權聲明。", - "footer_title": "頁尾與版權", - "footer_desc": "新增顯示在登入畫面和主控台側邊欄的自訂頁尾文字。", - "footer_text": "頁尾文字", - "footer_text_hint": "例如版權聲明或公司名稱。", - "show_powered": "顯示「BetterDesk」版權聲明", - "show_powered_hint": "在登入頁尾和側邊欄顯示 BetterDesk 名稱和版本。", - "custom_css_title": "自訂 CSS", - "custom_css_desc": "進階:注入套用於整個主控台和登入頁面的自訂 CSS。", - "custom_css_hint": "請謹慎使用。無效或不安全的規則將被清除。最多 20,000 個字元。" + "clock": { + "title": "伺服器時間 (NTP)", + "check_now": "立即檢查", + "unsynced": "伺服器時鐘未同步 — 可計費工作階段可能被封鎖" }, - "device_detail": { - "tab_overview": "概覽", - "tab_tags": "標籤與備註", - "tab_actions": "操作", - "section_identity": "身份資訊", - "section_network": "網路", - "section_timestamps": "時間戳", - "section_connect": "連線", - "section_manage": "管理", - "folder": "資料夾", - "status_tier": "狀態等級", - "device_banned": "此裝置已被封鎖", - "no_reason": "未提供原因", - "tags": "標籤", - "no_tags": "此裝置未分配標籤", - "tag_placeholder": "輸入標籤名...", - "add_tag": "新增", - "tag_exists": "此標籤已存在", - "notes": "備註", - "notes_placeholder": "新增關於此裝置的備註...", - "danger_zone": "危險區域", - "action_connect_web": "網頁遠端", - "action_connect_web_desc": "透過瀏覽器遠端桌面連線", - "action_native_remote": "BetterDesk 遠端", - "action_native_remote_desc": "原生 JPEG 流 — 無需外掛", - "action_connect_desktop": "桌面用戶端", - "action_connect_desktop_desc": "在桌面用戶端應用中開啟", - "action_change_id_desc": "更改裝置註冊 ID", - "action_ban_desc": "阻止此裝置連線", - "action_unban_desc": "允許此裝置重新連線", - "action_delete_desc": "永久刪除此裝置", - "tab_hardware": "硬體", - "tab_metrics": "指標", - "section_system": "系統", - "section_cpu": "處理器", - "section_memory": "記憶體", - "section_displays": "顯示器", - "section_encoding": "編碼能力", - "section_live_metrics": "實時指標", - "section_current_usage": "目前使用情況", - "section_usage_history": "使用歷史", - "os": "作業系統", - "version": "用戶端版本", - "cpu_model": "CPU 型號", - "cpu_cores": "CPU 核心數", - "cpu_freq": "CPU 頻率", - "total_memory": "總記憶體", - "metric_memory": "記憶體", - "metric_disk": "磁碟", - "metrics_updated": "已更新", - "device_groups": "分組", - "no_sysinfo": "尚無硬體資訊", - "no_sysinfo_hint": "裝置傳送系統資訊報告後將顯示硬體資訊", - "no_metrics": "尚無指標資料", - "no_metrics_hint": "裝置傳送心跳報告後將顯示指標資料", - "chart_oldest": "← 最早", - "chart_newest": "最新 →", - "tab_services": "服务", - "tab_processes": "進程", - "tab_events": "事件", - "tab_activity": "活动", - "tab_files": "文件", - "agent_lazy_hint": "单击此選項卡以从代理加載实时数据", - "agent_offline": "代理离線", - "agent_timeout": "代理响應超时", - "agent_error": "从代理加載数据失败", - "service_name": "名稱", - "service_display": "顯示名稱", - "service_status": "状态", - "service_start": "啟动模式", - "process_name": "名稱", - "process_user": "用戶", - "process_memory": "內存" + "stats": { + "active_sessions": "使用中可計費工作階段" }, - "inventory": { - "title": "資產清單", - "subtitle": "受管裝置的硬體和軟體清單", - "device_id": "裝置 ID", - "hostname": "主機名稱", - "os": "作業系統", - "cpu": "CPU", - "cpu_cores": "CPU 核心數", - "cpu_usage": "CPU 使用率", - "memory": "記憶體", - "memory_total": "總記憶體", - "memory_used": "已用記憶體", - "memory_available": "可用記憶體", - "memory_usage": "記憶體使用率", - "swap": "交換空間", - "disks": "磁碟", - "disk_count": "磁碟數量", - "network": "網路", - "network_interfaces": "網路介面", - "software": "軟體", - "software_count": "已安裝軟體", - "system": "系統", - "kernel": "核心", - "architecture": "架構", - "uptime": "運行時間", - "frequency": "頻率", - "physical_cores": "物理核心", - "logical_cores": "邏輯核心", - "model": "型號", - "usage": "使用率", - "total": "總計", - "used": "已用", - "available": "可用", - "mount_point": "掛載點", - "removable": "可移動", - "mac_address": "MAC 地址", - "ip_addresses": "IP 位址", - "traffic": "流量", - "collect_now": "立即採集", - "collector_running": "採集器執行中", - "collector_stopped": "採集器已停止", - "last_upload": "最後上傳", - "total_uploads": "總計", - "last_seen": "最後線上", - "collected_at": "採集時間", - "no_data": "尚無資產資料。點選「立即採集」收集系統資訊。", - "no_devices": "找不到有資產資料的裝置", - "detail_title": "裝置資產詳情", - "telemetry": "遙測", - "view_detail": "檢視詳情", - "export": "匯出", - "refresh": "重新整理" + "packages": { + "new": "新增套件", + "name": "名稱", + "included_minutes": "包含分鐘", + "overage_rate": "超額費率 / 小時", + "currency": "貨幣", + "heading": "支援套件", + "prompt_name": "套件名稱", + "create_title": "為組織新增套件", + "create_submit": "建立套件", + "select_org": "組織", + "select_org_placeholder": "選擇組織…" }, - "tickets": { - "title": "服務檯", - "subtitle": "支援工單和問題跟蹤", - "create": "新建工單", - "edit": "編輯工單", - "delete": "刪除工單", - "detail": "工單詳情", - "ticket_id": "工單 ID", - "ticket_title": "標題", - "description": "描述", - "status": "狀態", - "priority": "優先順序", - "category": "分類", - "assigned_to": "分配給", - "created_by": "建立者", - "device": "裝置", - "sla_due": "SLA 到期", - "created_at": "建立時間", - "updated_at": "更新時間", - "resolved_at": "解決時間", - "closed_at": "關閉時間", - "status_open": "待處理", - "status_in_progress": "處理中", - "status_resolved": "已解決", - "status_closed": "已關閉", - "priority_low": "低", - "priority_medium": "中", - "priority_high": "高", - "priority_critical": "緊急", - "category_general": "一般", - "category_hardware": "硬體", - "category_software": "軟體", - "category_network": "網路", - "category_access": "存取許可權", - "category_other": "其他", - "comments": "評論", - "add_comment": "新增評論", - "comment_placeholder": "寫下評論...", - "internal_note": "內部備註(對終端使用者不可見)", - "attachments": "附件", - "upload_attachment": "上傳附件", - "download": "下載", - "connect_device": "連線到裝置", - "no_tickets": "找不到工單", - "no_comments": "尚無評論", - "no_attachments": "尚無附件", - "title_required": "標題為必填欄位", - "delete_confirm": "確定要刪除工單 #{id} 嗎?", - "delete_success": "工單刪除成功", - "created_success": "工單建立成功", - "updated_success": "工單更新成功", - "sla_overdue": "SLA 已逾期", - "filter_all": "全部", - "search_placeholder": "搜尋工單...", - "assign_to_me": "分配給我", - "unassign": "取消分配", - "stats_total": "總計", - "stats_open": "待處理", - "stats_in_progress": "處理中", - "stats_resolved": "已解決", - "stats_closed": "已關閉" - }, - "activity": { - "title": "活動監控", - "subtitle": "應用使用和空閒跟蹤", - "device": "裝置", - "hostname": "主機名稱", - "sessions": "工作階段", - "idle_time": "空閒時間", - "active_time": "活躍時間", - "last_report": "最後報告", - "top_apps": "熱門應用", - "app_name": "應用程式", - "window_title": "視窗標題", - "category": "分類", - "duration": "持續時間", - "started_at": "開始時間", - "ended_at": "結束時間", - "session_count": "工作階段數", - "total_active": "總活躍時間", - "total_idle": "總空閒時間", - "detail_count": "詳細記錄", - "no_data": "尚無活動資料", - "no_sessions": "尚無工作階段記錄", - "filter_from": "從", - "filter_to": "到", - "filter_apply": "應用篩選", - "hours": "小時", - "minutes": "分鐘", - "seconds": "秒", - "category_browser": "瀏覽器", - "category_productivity": "辦公效率", - "category_communication": "通訊", - "category_development": "開發", - "category_media": "媒體", - "category_gaming": "遊戲", - "category_system": "系統", - "category_other": "其他", - "summary": "摘要", - "details": "詳情", - "refresh": "重新整理", - "search": "搜尋裝置...", - "date_range": "日期範圍", - "device_id": "裝置ID", - "session_start": "工作階段開始", - "session_end": "工作階段結束", - "user": "使用者", - "no_activity": "尚無活動記錄", - "reported_at": "報告時間", - "detail": "詳情", - "no_apps": "尚無應用" - }, - "automation": { - "title": "自動化與警示", - "subtitle": "警示規則、遠端命令和 SMTP 配置", - "rules": "警示規則", - "rules_subtitle": "定義觸發通知的條件", - "alerts": "警示歷史", - "alerts_subtitle": "檢視和確認已觸發的警示", - "commands": "遠端命令", - "commands_subtitle": "向遠端裝置傳送命令", - "smtp": "SMTP 配置", - "smtp_subtitle": "郵件通知設定", - "rule_name": "規則名稱", - "description": "描述", - "condition_type": "條件類型", - "condition_op": "運算子", - "condition_value": "閾值", - "severity": "嚴重程度", - "scope_device": "目標裝置", - "scope_all": "所有裝置", - "cooldown": "冷卻時間(秒)", - "notify_emails": "通知郵箱", - "enabled": "已啟用", - "disabled": "已禁用", - "create_rule": "建立規則", - "edit_rule": "編輯規則", - "delete_rule": "刪除規則", - "acknowledge": "確認", - "acknowledged": "已確認", - "unacknowledged": "未確認", - "triggered_at": "觸發時間", - "severity_info": "資訊", - "severity_warning": "警告", - "severity_critical": "嚴重", - "op_gt": "大於", - "op_gte": "大於等於", - "op_lt": "小於", - "op_lte": "小於等於", - "op_eq": "等於", - "op_neq": "不等於", - "type_cpu_usage": "CPU 使用率 (%)", - "type_memory_usage": "記憶體使用率 (%)", - "type_disk_usage": "磁碟使用率 (%)", - "type_offline_duration": "離線時長 (秒)", - "type_idle_duration": "空閒時長 (秒)", - "type_custom": "自定義", - "command_type": "命令類型", - "command_payload": "命令 / 指令碼", - "command_result": "結果", - "command_status": "狀態", - "send_command": "傳送命令", - "status_pending": "待處理", - "status_running": "執行中", - "status_completed": "已完成", - "status_failed": "失敗", - "smtp_host": "SMTP 主機", - "smtp_port": "埠", - "smtp_secure": "使用 TLS", - "smtp_user": "使用者名稱", - "smtp_pass": "密碼", - "smtp_from": "發件人地址", - "smtp_test": "測試連線", - "smtp_save": "儲存配置", - "smtp_test_success": "連線成功", - "smtp_test_failed": "連線失敗", - "no_rules": "暫未配置警示規則", - "no_alerts": "尚無警示觸發", - "no_commands": "尚無已傳送的命令", - "id_payload_required": "裝置 ID 和命令內容為必填欄位", - "no_commands_sent": "尚未傳送任何命令" - }, - "file_transfer": { - "title": "檔案傳輸", - "transfers": "傳輸列表", - "new_transfer": "新建傳輸", - "upload": "上傳", - "download": "下載", - "direction": "方向", - "filename": "檔名", - "file_size": "檔案大小", - "mime_type": "MIME 類型", - "progress": "進度", - "status": "狀態", - "device": "裝置", - "initiated_by": "發起者", - "created_at": "建立時間", - "cancel": "取消", - "cancel_confirm": "確定要取消此傳輸嗎?", - "download_file": "下載檔案", - "browse_files": "瀏覽檔案", - "select_file": "選擇檔案", - "select_device": "選擇裝置", - "no_transfers": "尚無檔案傳輸", - "status_pending": "待處理", - "status_active": "進行中", - "status_completed": "已完成", - "status_failed": "失敗", - "status_cancelled": "已取消", - "bytes_transferred": "已傳輸位元組", - "chunks": "分塊", - "transfer_started": "傳輸已開始", - "transfer_completed": "傳輸已完成", - "transfer_failed": "傳輸失敗", - "transfer_cancelled": "傳輸已取消", - "max_file_size": "最大檔案大小:4 GB", - "error_too_large": "檔案過大", - "error_no_device": "未選擇裝置", - "error_no_file": "未選擇檔案" - }, - "network": { - "title": "網路監控", - "targets": "監控目標", - "add_target": "新增目標", - "edit_target": "編輯目標", - "delete_target": "刪除目標", - "delete_confirm": "確定要刪除此目標嗎?", - "target_name": "名稱", - "host": "主機", - "port": "埠", - "url": "URL", - "check_type": "檢查類型", - "timeout": "超時(毫秒)", - "interval": "間隔(毫秒)", - "enabled": "已啟用", - "status": "狀態", - "last_check": "最後檢查", - "last_rtt": "最後 RTT", - "rtt_ms": "RTT(毫秒)", - "status_up": "正常", - "status_down": "宕機", - "status_unknown": "未知", - "check_now": "立即檢查", - "history": "檢查歷史", - "stats": "統計", - "total_targets": "總目標數", - "targets_up": "正常目標", - "targets_down": "宕機目標", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP 埠", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "網路工具", - "ping_tool": "Ping 測試", - "tcp_tool": "TCP 埠檢查", - "http_tool": "HTTP 檢查", - "dns_tool": "DNS 解析", - "monitor_start": "啟動監控", - "monitor_stop": "停止監控", - "monitor_running": "監控執行中", - "monitor_stopped": "監控已停止", - "no_targets": "暫未配置監控目標", - "no_history": "尚無檢查歷史", - "error_code": "錯誤", - "status_code": "HTTP 狀態碼", - "search_targets": "搜尋目標...", - "name": "名稱", - "tab_targets": "目標", - "tab_tools": "工具", - "avg_latency": "平均延遲", - "type": "類型", - "latency": "延遲", - "check_history": "檢查歷史", - "name_host_required": "名稱和主機為必填欄位", - "uptime": "運行時間", - "response_time": "響應時間", - "avg_response": "平均響應", - "charts": "圖表", - "realtime": "實時", - "response_time_ms": "響應時間 (ms)", - "uptime_percent": "運行時間 %", - "last_24h": "過去24小時", - "last_7d": "過去7天", - "last_30d": "過去30天" - }, - "dataguard": { - "title": "資料防護 — DLP", - "policies": "DLP 策略", - "add_policy": "新增策略", - "edit_policy": "編輯策略", - "delete_policy": "刪除策略", - "delete_confirm": "確定要刪除此策略嗎?", - "policy_name": "名稱", - "policy_description": "描述", - "status": "狀態", - "enabled": "已啟用", - "disabled": "已禁用", - "rules": "規則", - "add_rule": "新增規則", - "rule_type": "規則類型", - "rule_type_usb": "USB 裝置", - "rule_type_file": "檔案操作", - "action": "動作", - "action_allow": "允許", - "action_block": "阻止", - "action_log": "僅記錄", - "filter": "篩選", - "vid": "供應商 ID (VID)", - "pid": "產品 ID (PID)", - "serial": "序列號", - "device_class": "裝置類型", - "drive_type": "驅動器類型", - "file_extensions": "副檔名", - "events": "DLP 事件", - "event_source": "來源", - "event_source_usb": "USB", - "event_source_file": "檔案", - "event_type": "事件類型", - "event_details": "詳情", - "no_policies": "暫未配置 DLP 策略", - "no_events": "尚無 DLP 事件記錄", - "stats": "統計", - "total_events": "總事件數", - "blocked_events": "已阻止", - "logged_events": "已記錄", - "usb_events": "USB 事件", - "file_events": "檔案事件", - "device_id": "裝置 ID", - "policy_matched": "匹配的策略", - "timestamp": "時間戳", - "drive_removable": "可移動", - "drive_fixed": "固定", - "drive_network": "網路", - "drive_cdrom": "CD-ROM", - "drive_unknown": "未知", - "total_policies": "原則總數", - "active_policies": "活動原則", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "原則", - "tab_events": "Events", - "search_policies": "搜尋原則...", - "create_policy": "建立原則", - "policy_type": "原則類型", - "scope": "Scope", - "events_count": "Events", - "search_events": "搜尋事件...", - "event_time": "Event Time", - "device": "裝置", - "policy": "原則", - "detail": "Detail", - "scope_help": "以逗號分隔裝置 ID,或留空表示全部", - "scope_all": "所有裝置", - "active": "Active", - "type_file_type": "檔案類型", - "type_clipboard": "剪貼簿", - "type_screen_share": "螢幕分享", - "type_file_transfer": "檔案传輸", - "policy_desc": "原則描述", - "type_usb": "USB" + "sessions": { + "device": "裝置", + "operator": "操作員", + "duration": "時長", + "phase": "階段", + "amount": "金額" }, "reports": { - "title": "報表", - "generate": "產生報表", - "generate_csv": "匯出 CSV", - "report_type": "報表類型", - "type_devices": "裝置摘要", - "type_activity": "活動摘要", - "type_security": "安全報告", - "type_tickets": "工單報告", - "type_network": "網路報告", - "type_inventory": "資產報告", - "type_alerts": "警示報告", - "saved": "已儲存的報表", - "save_report": "儲存報表", - "delete_report": "刪除報表", - "delete_confirm": "確定要刪除此已儲存的報表嗎?", - "no_saved": "尚無已儲存的報告", - "report_title": "標題", - "created_by": "建立者", - "created_at": "建立時間", - "filters": "篩選條件", - "date_from": "從", - "date_to": "到", - "device_filter": "裝置 ID", - "generated_at": "產生時間", - "section": "資料部分", - "total_devices": "裝置總數", - "online": "線上", - "offline": "離線", - "banned": "已封鎖", - "platform_distribution": "平台分佈", - "top_applications": "熱門應用", - "total_active": "總活躍時間", - "total_idle": "總空閒時間", - "dlp_stats": "DLP 統計", - "banned_devices": "已封鎖裝置", - "audit_logs": "稽核日誌", - "ticket_stats": "工單統計", - "category_distribution": "分類分佈", - "priority_distribution": "優先順序分佈", - "targets_status": "目標狀態", - "os_distribution": "作業系統分佈", - "avg_ram": "平均記憶體", - "alert_rules": "警示規則", - "recent_alerts": "最近警示", - "tab_generate": "產生", - "tab_saved": "已儲存的報告", - "type_devices_desc": "所有註冊裝置概覽", - "type_activity_desc": "應用使用和工作階段統計", - "type_security_desc": "安全事件和被禁用裝置", - "type_tickets_desc": "支援工單統計和摘要", - "type_network_desc": "網路監控和運行時間資料", - "type_inventory_desc": "硬體和軟體清單", - "type_alerts_desc": "警示和規則歷史", - "report_name": "報告名稱", - "format": "格式", - "save": "儲存", - "preview": "預覽", - "download": "下載", - "delete_saved": "刪除已儲存的報告", - "raw_json": "Raw JSON" + "session": "工作階段", + "summary": "摘要", + "date": "日期" }, - "tenants": { - "title": "多租戶", - "list": "租戶列表", - "add_tenant": "新增租戶", - "edit_tenant": "編輯租戶", - "delete_tenant": "刪除租戶", - "delete_confirm": "確定要刪除此租戶嗎?所有裝置和使用者分配將被移除。", - "name": "名稱", - "slug": "識別符號", - "contact_name": "聯絡人", - "contact_email": "聯絡郵箱", - "max_devices": "最大裝置數", - "max_devices_hint": "0 = 不限", - "notes": "備註", - "active": "活躍", - "inactive": "停用", - "devices": "裝置", - "users": "使用者", - "assign_device": "分配裝置", - "assign_devices": "分配裝置", - "remove_device": "移除裝置", - "assign_user": "分配使用者", - "remove_user": "移除使用者", - "no_tenants": "暫未配置租戶", - "no_devices": "此租戶尚無分配的裝置", - "no_users": "此租戶尚無分配的使用者", - "stats": "租戶統計", - "total_devices": "裝置總數", - "online_devices": "線上裝置", - "total_users": "使用者總數", - "created_at": "建立時間", - "updated_at": "更新時間", - "slug_exists": "租戶識別符號已存在", - "total_tenants": "租戶總數", - "active_tenants": "活躍租戶", - "search": "搜尋租戶...", - "create_tenant": "建立租戶", - "detail": "租戶詳情", - "contact": "聯絡方式", - "enabled": "已啟用", - "disabled": "已停用", - "max": "最大", - "info": "租戶資訊", - "status": "狀態" + "contracts": { + "title": "組織合約", + "new": "指派套件", + "org": "組織", + "package": "套件", + "remaining": "剩餘分鐘", + "status": "狀態", + "actions": "操作", + "suspend": "暫停", + "activate": "啟用", + "select_org": "選擇組織", + "select_package": "選擇套件", + "no_orgs": "找不到組織", + "no_packages": "請先建立套件" }, - "registrations": { - "title": "裝置註冊", - "subtitle": "管理透過區域網發現的裝置註冊請求", - "search_placeholder": "按裝置 ID、主機名或 IP 搜尋...", - "no_registrations": "尚無註冊請求", - "col_device_id": "裝置 ID", - "col_hostname": "主機名稱", - "col_platform": "平台", - "col_ip": "IP 位址", - "col_version": "版本", - "col_status": "狀態", - "col_requested": "請求時間", - "col_actions": "操作", - "status_pending": "待審批", - "status_approved": "已批准", - "status_rejected": "已拒絕", - "approve_btn": "批准", - "approve_confirm": "確定要批准此裝置嗎?該裝置將接收伺服器認證資訊並可自動連線。", - "approved_success": "裝置註冊批准成功", - "reject_btn": "拒絕", - "reject_title": "拒絕註冊", - "reject_confirm": "確定要拒絕此註冊請求嗎?", - "reject_reason": "原因(可選)", - "reject_reason_placeholder": "請輸入拒絕原因...", - "rejected_success": "裝置註冊已拒絕", - "delete_confirm": "確定要刪除此註冊記錄嗎?", - "deleted_success": "註冊記錄已刪除", - "enrollment_title": "裝置登記", - "enrollment_subtitle": "来自 BetterDesk 桌面客戶端的待處理登記要求", - "enrollment_empty": "沒有待處理的登記要求", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "顯示名稱", - "enrollment_display_name_placeholder": "輸入此裝置的名稱...", - "enrollment_sync_mode": "同步模式", - "enrollment_sync_silent": "静默 — 最少遙測", - "enrollment_sync_standard": "標準 — 均衡同步", - "enrollment_sync_turbo": "極速 — 高强度同步", - "enrollment_approved_success": "裝置登記已批准", - "enrollment_rejected_success": "裝置登記已拒绝", - "approve_title": "審核裝置", - "field_name": "裝置名稱", - "field_name_placeholder": "請為此裝置輸入名稱...", - "field_sync_mode": "同步模式", - "sync_standard": "標準 — 均衡同步", - "sync_silent": "靜默 — 最小遙測", - "sync_turbo": "極速 — 積極同步", - "field_tags": "標籤", - "field_tags_placeholder": "逗號分隔的標籤(例如 辦公室, 筆電)...", - "field_tags_existing": "現有標籤", - "field_tag_add_placeholder": "新增標籤...", - "field_tag_add_btn": "新增", - "field_groups": "裝置群組", - "field_folder": "資料夾", - "field_folder_none": "無資料夾", - "reject_ban_option": "封鎖此裝置", - "reject_ban_hint": "該裝置將被封鎖,無法發送新的註冊請求。", - "banner_open_mode": "註冊開放中 — 新 RustDesk 用戶端無需操作員審核即可註冊。在設定中啟用受管模式以使用此佇列。", - "banner_locked_mode": "註冊已鎖定 — 僅綁定權杖的裝置可註冊。需要受管模式以允許操作員審核未知用戶端。", - "enrollment_settings_link": "註冊設定" + "export": { + "csv": "匯出 CSV", + "pdf": "匯出 PDF", + "sessions_csv": "匯出工作階段 CSV" }, - "backup": { - "title": "備份", - "desc": "下載控制台配置、使用者、分組和設定的完整備份。當 BetterDesk 後端處於活動狀態時,將包含 Go 伺服器的裝置資料。", - "restore_title": "還原", - "restore_desc": "上傳之前下載的備份檔案以還原控制台配置。在下方選擇要還原的部分。", - "stat_users": "使用者", - "stat_settings": "設定", - "stat_folders": "資料夾", - "stat_groups": "分組", - "stat_strategies": "策略", - "stat_backend": "後端", - "download": "下載備份", - "creating": "正在建立備份...", - "download_success": "備份下載成功", - "upload": "上傳備份", - "restore_confirm": "確定要從此備份還原嗎?選定的部分將被覆蓋。", - "restore_success": "備份還原成功。某些更改可能需要重新整理頁面。", - "restored": "已還原", - "skipped": "已跳過", - "backup_date": "備份日期", - "opt_settings": "控制台設定", - "opt_branding": "品牌 / 主題", - "opt_folders": "裝置資料夾", - "opt_groups": "使用者和裝置分組", - "opt_addressbooks": "通訊錄", - "opt_users": "使用者帳戶", - "opt_users_warning": "破壞性操作:將使用備份資料替換所有使用者帳戶。您可能會被登出。", - "no_file": "未選擇備份檔案", - "invalid_json": "無效的備份檔案:不是有效的 JSON", - "invalid_format": "無效的備份檔案:不是 BetterDesk 備份", - "stat_database": "資料庫引擎", - "stat_keys": "已包含伺服器金鑰", - "stat_env": "環境設定檔", - "stat_uploads": "品牌識別檔案", - "restart_required": "部分還原的元件(金鑰 / .env / Go 資料庫)需要重新啟動服務才能生效。", - "security_warning": "此備份包含機密(伺服器金鑰、環境設定檔、密碼雜湊和 2FA 密鑰)。請安全存放,切勿分享。", - "restore_warning": "還原機密、環境設定檔或 Go 伺服器資料庫會覆寫伺服器身分識別,並需要之後重新啟動服務。", - "opt_database": "資料庫(所有資料表)", - "opt_database_hint": "重新匯入所有主控台資料。即時套用,無需重新啟動。", - "opt_uploads": "品牌識別檔案", - "opt_uploads_hint": "標誌和已上傳的圖片。", - "opt_secrets": "伺服器金鑰和機密", - "opt_secrets_warning": "覆寫 Ed25519 伺服器身分識別、API 金鑰和工作階段密鑰。需要重新啟動服務。", - "opt_env": "環境設定檔(.env)", - "opt_env_warning": "覆寫 SESSION_SECRET、API 金鑰、資料庫 DSN、連接埠和 TLS 設定。需要重新啟動服務。", - "opt_godb": "Go 伺服器資料庫", - "opt_godb_warning": "覆寫 Go 伺服器 SQLite 資料庫(僅限 SQLite 後端)。需要重新啟動服務。" + "report": { + "title": "工作報告", + "subtitle": "描述此遠端工作階段期間執行的工作。", + "category": "類別", + "ticket_ref": "工單參考", + "summary": "執行的工作", + "skip": "暫時略過", + "submit": "提交報告", + "summary_required": "摘要為必填", + "saved": "工作報告已儲存" }, - "cdap": { - "device_detail": "CDAP 裝置", - "loading": "載入中...", - "loading_widgets": "正在載入裝置控制元件...", - "load_error": "無法載入裝置資料", - "connected": "已連線", - "disconnected": "已斷開", - "device_offline_msg": "裝置目前處於離線狀態。控制元件值可能已過時。", - "no_widgets": "沒有可用的控制元件", - "no_widgets_desc": "此裝置尚未註冊包含控制元件定義的 CDAP 清單。", - "command_log": "命令日誌", - "clear_log": "清除日誌", - "confirm_command": "確認命令", - "select_option": "選擇", - "cdap_status": "CDAP 狀態", - "cdap_enabled": "CDAP 已啟用", - "cdap_disabled": "CDAP 已禁用", - "cdap_devices": "CDAP 裝置", - "cdap_connections": "使用中連線", - "send_command": "傳送命令", - "command_sent": "命令傳送成功", - "command_failed": "命令傳送失敗", - "devices_title": "CDAP 裝置", - "devices_subtitle": "透過自定義裝置應用協議連線的裝置", - "stat_connected": "已連線", - "stat_port": "埠", - "search_devices": "搜尋裝置...", - "no_devices": "沒有已連線的裝置", - "no_devices_desc": "目前沒有 CDAP 裝置連線。裝置連線到閘道後將顯示在此處。", - "gateway_disabled": "CDAP 閘道已禁用", - "gateway_disabled_desc": "在伺服器配置中設定 CDAP_ENABLED=true 以啟用 CDAP 閘道。", - "gateway_active": "活躍", - "toggle_enable": "啟用 CDAP", - "toggle_disable": "禁用 CDAP", - "enabled_restart": "CDAP 已啟用。需要重啟伺服器以應用更改。", - "disabled_restart": "CDAP 已禁用。需要重啟伺服器以應用更改。", - "widgets": "個控制元件", - "type_all": "全部", - "type_iot": "物聯網", - "type_scada": "SCADA", - "type_os_agent": "OS 代理", - "type_network": "網路", - "type_camera": "攝像頭", - "type_custom": "自定義", - "active_alerts": "活動警示", - "alert_fired": "警示觸發", - "alert_cleared": "警示已清除", - "no_alerts": "無活動警示", - "connect_terminal": "連線終端", - "table_search": "搜尋...", - "just_now": "剛剛", - "terminal_connecting": "正在連線裝置...", - "terminal_disconnected": "已斷開連線", - "terminal_error": "終端連線失敗", - "linked_devices": "關聯裝置", - "link_device": "關聯裝置", - "unlink_device": "取消關聯", - "no_linked_devices": "無關聯裝置", - "unlink_confirm": "確定要取消關聯此裝置嗎?", - "link_prompt": "輸入要關聯的裝置 Peer ID:", - "connect_desktop": "連線桌面", - "connect_video": "連線影片流", - "connect_files": "瀏覽檔案", - "connect_audio": "連線音訊", - "upload_file": "上傳", - "desktop_connecting": "連線中...", - "video_connecting": "連線中...", - "files_connecting": "連線中...", - "audio_connecting": "連線中...", - "audio_streaming": "播放中", - "clipboard_in": "已接收剪貼簿", - "clipboard_out": "已傳送剪貼簿", - "monitor_select": "選擇顯示器", - "keyframe_request": "請求關鍵幀", - "quality_auto": "自動畫質" + "empty": { + "packages": "尚無套件。請使用上方按鈕建立。", + "contracts": "尚無組織合約。請為組織指派套件。", + "sessions": "尚無已記錄的可計費工作階段。", + "reports": "尚無已提交的工作報告。" }, - "desktop": { - "switch_mode": "桌面模式", - "console_mode": "控制台模式", - "loading": "載入中...", - "minimize": "最小化", - "maximize": "最大化", - "restore": "還原", - "close": "關閉", - "widgets_mode": "小工具", - "windows_mode": "視窗", - "wallpaper": "桌布", - "add_widget": "新增小工具", - "remove_widget": "移除小工具", - "pop_out_widget": "彈出", - "pop_in_widget": "收回", - "configure": "配置", - "search_widgets": "搜尋小工具...", - "cat_monitoring": "監控", - "cat_devices": "裝置", - "cat_tools": "工具", - "cat_general": "通用", - "notes_placeholder": "在這裡寫筆記...", - "search_placeholder": "搜尋裝置、頁面、設定...", - "search_pages": "頁面", - "search_devices": "裝置", - "search_no_results": "無結果", - "exit_desktop": "登出桌面模式", - "refresh": "重新整理", - "widget_clock": "Clock", - "widget_device_status": "裝置狀態", - "widget_server_health": "伺服器資訊", - "widget_system_stats": "裝置儀表", - "widget_device_list": "裝置清單", - "widget_quick_actions": "快捷操作", - "widget_recent_activity": "最近活動", - "widget_notes": "Notes", - "widget_network_monitor": "網路監控", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP 裝置", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "裝置網格", - "widget_multi_gauge": "伺服器儀表", - "widget_weekly_chart": "每週活動", - "widget_quick_controls": "快速控制", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "連線統計", - "widget_weather": "天氣", - "widget_world_clock": "世界時鐘", - "widget_bookmarks": "書籤", - "widget_user_sessions": "使用者工作階段", - "widget_alert_feed": "警報源", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "運行時間", - "label_no_devices": "沒有裝置", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "不可用", - "label_open": "打開", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "在設定中設定 URL", - "label_server_uptime": "伺服器執行時間", - "label_merged_info": "已合并到伺服器資訊小部件", - "label_with_notes": "含備注", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "裝置總數", - "label_throughput": "Throughput", - "label_active_relays": "活動中繼", - "label_total_relayed": "中繼總數", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "篩選裝置...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "沒有 CDAP 裝置", - "action_add_widget": "新增小部件", - "label_merged_server_info": "已合併到伺服器資訊小部件", - "wp_images": "圖片", - "wp_colors": "純色", - "wp_custom_color": "自定義顏色", - "wp_fit_style": "樣式", - "wp_fill": "填充", - "wp_fit": "適應", - "wp_stretch": "拉伸", - "wp_center": "居中", - "wp_unavailable": "此伺服器上未安裝桌布圖片。", - "wp_download_hint": "將PNG圖片放入 public/wallpapers/ 目錄以啟用桌布選擇。", - "widget_calendar": "日曆", - "widget_process_monitor": "程序監控", - "widget_disk_usage": "磁碟使用", - "widget_log_viewer": "日誌檢視器", - "widget_speed_test": "速度測試", - "widget_database_stats": "資料庫統計", - "widget_docker_containers": "Docker 容器", - "widget_shell_command": "Shell 命令", - "widget_device_map": "裝置地圖", - "widget_remote_connect": "遠端連線", - "label_no_online": "沒有線上裝置", - "label_no_events": "今天沒有事件", - "label_event_title": "事件標題:", - "label_no_data": "尚無資料", - "label_download_speed": "下載速度", - "label_latency": "延遲", - "label_server": "伺服器", - "label_run_test": "執行測試", - "label_testing": "測試中...", - "label_table": "表", - "label_rows": "行數", - "label_last_backup": "最後備份", - "label_no_containers": "沒有容器", - "label_docker_unavailable": "Docker 不可用", - "label_no_command": "未配置命令", - "label_no_output": "尚無輸出", - "label_run": "執行", - "label_presets": "預設", - "label_save_preset": "儲存預設", - "label_load_preset": "載入預設", - "label_preset_name": "預設名稱:", - "label_preset_monitoring": "監控", - "label_preset_helpdesk": "說明臺", - "label_preset_minimal": "最小化", - "label_preset_developer": "開發者", - "label_snap_layout": "吸附佈局", - "label_auto_arrange": "自動排列", - "label_zone_layout": "區域佈局", - "label_2col_equal": "兩列(等寬)", - "label_2col_wide": "兩列(60/40)", - "label_3col": "三列", - "label_2x2_grid": "2×2 網格", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "小工具分組", - "ungroup_widgets": "取消分組", - "group_widgets": "分組選中小工具", - "snap_layouts": "貼靠佈局", - "snap_left": "貼靠到左側", - "snap_right": "貼靠到右側", - "snap_top_left": "貼靠到左上", - "snap_top_right": "貼靠到右上", - "snap_bottom_left": "貼靠到左下", - "snap_bottom_right": "貼靠到右下", - "aero_shake": "搖動最小化其他視窗", - "zone_resize": "拖動邊框調整區域大小", - "zone_borders": "可拖動區域邊框", - "app_drawer": "應用程式", - "search_apps": "搜尋應用...", - "edit_shortcuts": "編輯快捷方式", - "widgets": "小部件", - "theme": "主題", - "fullscreen": "Fullscreen", - "help": "Help" + "assign": { + "title": "指派現有套件", + "submit": "指派" }, - "desktop_login": { - "click_to_sign_in": "點選任意位置或按任意鍵登入", - "username_placeholder": "使用者名稱", - "password_placeholder": "密碼", - "sign_in": "登入", - "verify": "驗證", - "totp_title": "雙因素認證", - "totp_subtitle": "輸入驗證器應用中的6位數程式碼", - "back_to_login": "返回登入", - "fill_all_fields": "請填寫所有欄位", - "invalid_credentials": "使用者名稱或密碼無效", - "invalid_code": "驗證碼無效", - "enter_6_digits": "請輸入全部6位數字", - "network_error": "網路錯誤 — 請檢查連線", - "session_expired": "工作階段已過期。請重新登入。" - }, - "tokens": { - "title": "裝置權杖", - "subtitle": "管理自動裝置配置的註冊權杖", - "enrollment_mode": "註冊模式", - "mode_open": "開放", - "mode_open_desc": "任何裝置無需權杖即可註冊", - "mode_managed": "託管", - "mode_managed_desc": "裝置需要有效權杖才能註冊", - "mode_locked": "鎖定", - "mode_locked_desc": "不允許新裝置註冊", - "total": "權杖總數", - "active": "活躍", - "used": "已使用", - "revoked": "已撤銷", - "search_placeholder": "搜尋權杖...", - "status_pending": "待處理", - "status_active": "活躍", - "status_used": "已使用", - "status_revoked": "已撤銷", - "status_expired": "已過期", - "bulk_generate": "批次產生", - "create": "建立權杖", - "edit": "編輯權杖", - "token": "權杖", - "name": "名稱", - "status": "狀態", - "uses": "使用次數", - "bound_peer": "繫結裝置", - "expires": "過期時間", - "created": "建立時間", - "actions": "操作", - "name_placeholder": "例如:辦公電腦批次", - "max_uses": "最大使用次數", - "max_uses_hint": "0 = 不限", - "expires_in": "過期時間", - "no_expiration": "永不過期", - "expires_1h": "1小時", - "expires_24h": "24小時", - "expires_7d": "7天", - "expires_30d": "30天", - "note": "備註", - "note_placeholder": "關於此權杖的可選備註...", - "count": "數量", - "count_range": "要產生的權杖數量(1-100)", - "name_prefix": "名稱字首", - "generate": "產生", - "token_created": "權杖已建立", - "tokens_generated": "權杖已產生", - "copy_warning": "請立即複製權杖,之後將不再顯示。", - "copy_token": "複製權杖", - "copied": "已複製!", - "revoke": "撤銷", - "revoke_confirm": "確定要撤銷此權杖嗎?已使用該權杖註冊的裝置不受影響。", - "revoked_success": "權杖已撤銷", - "no_tokens": "找不到權杖", - "expired": "已過期", - "never": "永不", - "save": "儲存", - "cancel": "取消", - "unlimited": "不限" - }, - "tutorial": { - "next": "下一步", - "prev": "上一步", - "skip": "跳過", - "finish": "完成", - "close": "關閉", - "step_of": "{current} / {total}", - "console_sidebar_title": "導航側欄", - "console_sidebar_text": "從這裡存取所有模組。點選任意圖示導航到相應部分。側欄會根據螢幕大小自適應。", - "console_expand_title": "展開側欄", - "console_expand_text": "點選此處展開側欄檢視完整標籤。再次點選可收起。", - "console_search_title": "快速搜尋", - "console_search_text": "搜尋裝置、設定或操作。鍵盤快捷鍵:Ctrl+K。", - "console_dashboard_title": "儀表盤", - "console_dashboard_text": "您的控制中心,顯示伺服器狀態、線上裝置和快速操作。一目瞭然地監控重要指標。", - "console_devices_title": "裝置管理", - "console_devices_text": "檢視、搜尋和管理所有已連線的裝置。按狀態篩選、分配標籤並配置單個裝置設定。", - "console_settings_title": "設定", - "console_settings_text": "配置伺服器行為、安全選項、品牌和使用者管理。根據您的需求自定義 BetterDesk。", - "console_desktop_title": "桌面模式", - "console_desktop_text": "切換到帶有視窗工作區和小部件的桌面模式。非常適合多工處理和監控儀表板。", - "console_complete_title": "準備就緒!", - "console_complete_text": "探索側欄分類以發現所有功能。隨時點選說明圖示重新啟動此指南。", - "desktop_topbar_title": "頂部欄", - "desktop_topbar_text": "頂部欄顯示時鐘、快捷控制和應用抽屜入口。點選網格圖示瀏覽所有應用。", - "desktop_drawer_title": "應用抽屜", - "desktop_drawer_text": "開啟應用抽屜搜尋並啟動任何控制台功能作為浮動視窗。應用按類別組織。", - "desktop_widgets_title": "小部件面板", - "desktop_widgets_text": "您的可自定義工作區。小部件顯示實時資訊並提供功能快捷存取。拖拽可重新排列。", - "desktop_add_widget_title": "新增小部件", - "desktop_add_widget_text": "點選這裡瀏覽可用的小部件。從監控顯示、裝置列表、筆記等中選擇。", - "desktop_taskbar_title": "工作列", - "desktop_taskbar_text": "開啟的應用程式顯示在這裡。點選聚焦或最小化視窗。懸停圖示檢視應用名稱。", - "desktop_snap_title": "Snap 佈局", - "desktop_snap_text": "將視窗拖到螢幕邊緣進行對齊,或懸停最大化按鈕檢視佈局預設。試試 Aero Shake!", - "desktop_windows_title": "應用視窗", - "desktop_windows_text": "應用程式在可拖動、可調整大小的視窗中開啟。從標題欄最小化、最大化或關閉。視窗層級在小部件之上。", - "desktop_search_title": "快速搜尋", - "desktop_search_text": "跨裝置、頁面和設定搜尋。隨時按 Ctrl+K 開啟搜尋。", - "desktop_complete_title": "桌面模式就緒!", - "desktop_complete_text": "嘗試從抽屜開啟應用並排列視窗。使用小部件預設快速設定儀表板佈局。", - "devices_folders_title": "裝置資料夾", - "devices_folders_text": "將裝置組織到資料夾中。點選資料夾篩選列表。右鍵單擊重新命名或刪除。", - "devices_search_title": "搜尋和篩選", - "devices_search_text": "按 ID、主機名或平台搜尋。使用狀態按鈕僅顯示線上、離線或全部裝置。", - "devices_table_title": "裝置列表", - "devices_table_text": "點選任何裝置行檢視詳情。右側選單提供快速操作:連線、編輯標籤或刪除。", - "devices_complete_title": "裝置管理就緒!", - "devices_complete_text": "在資料夾之間拖動裝置進行整理。雙擊裝置開啟詳情面板。", - "settings_tabs_title": "設定分類", - "settings_tabs_text": "在一般、安全、外觀和其他配置部分之間切換。", - "settings_content_title": "配置", - "settings_content_text": "每個部分包含特定的伺服器和控制台設定。點選儲存後生效。", - "settings_complete_title": "設定概覽", - "settings_complete_text": "檢查安全設定中的雙因素認證、API 金鑰和使用者管理。存取外觀自定義控制台樣式。", - "help": "說明和教學", - "tour_console": "控制台導覽", - "tour_desktop": "桌面模式導覽", - "tour_devices": "裝置導覽", - "tour_settings": "設定導覽", - "reset_all": "重置所有教學", - "tour_remote": "遠端工作階段導覽", - "tour_organization": "組織設定", - "tour_cdap": "CDAP 概覽", - "tour_chat": "聊天基礎", - "remote_toolbar_title": "遠端工具欄", - "remote_toolbar_text": "通過工具欄存取顯示控制、剪貼簿同步、特殊按鍵和質量設定。使用 F11 切換全螢幕。", - "remote_canvas_title": "遠端顯示", - "remote_canvas_text": "這是遠端螢幕。點擊其中即可開始控制遠端裝置。滑鼠和鍵盤輸入會自動轉送。", - "remote_clipboard_title": "剪貼簿同步", - "remote_clipboard_text": "在您的電脑和遠端裝置之間複製粘贴文字。焦點位於遠端顯示時,可像平常一样使用 Ctrl+C / Ctrl+V。", - "remote_complete_title": "遠端工作階段已就绪!", - "remote_complete_text": "使用工具欄按钮發送特殊按鍵(Ctrl+Alt+Del、PrintScreen)并切換顯示器。按 Escape 或點擊断開連線結束工作階段。", - "org_overview_title": "組織", - "org_overview_text": "組織可用於对使用者、裝置和原則群組。每個組織都有自己的管理員、操作員和設定。", - "org_create_title": "建立組織", - "org_create_text": "點擊這裡建立新組織。提供名稱、短標識和可選描述。您將成為新組織的所有者。", - "org_members_title": "管理成員", - "org_members_text": "通過電子郵件邀請使用者,分配角色(管理員、操作員、使用者)并管理存取。成員可以看到分配给其組織的裝置。", - "org_devices_title": "分配裝置", - "org_devices_text": "將裝置添加到組織。這裡分配的裝置會繼承組織原則,并对其成員可见。", - "org_policies_title": "組織原則", - "org_policies_text": "為組織設定安全原則,例如密碼要求、工作階段超時、2FA 强制執行和裝置登記規則。", - "org_complete_title": "組織設定完成!", - "org_complete_text": "邀請團隊并分配裝置,即可開始使用組織范圍內的管理。原則會自動套用於所有成員。", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "聯絡人和群組", - "chat_contacts_text": "查看聯絡人和聊天群組。點擊任意聯絡人打開对话。绿色圓點表示使用者在線。", - "chat_send_title": "發送訊息", - "chat_send_text": "輸入訊息并按 Enter 發送。当雙方都支持端到端加密時,訊息會進行端到端加密。", - "chat_file_title": "共享檔案", - "chat_file_text": "點擊附件圖示共享檔案。檔案會被加密,最大可达 50 MB。", - "chat_complete_title": "聊天已就绪!", - "chat_complete_text": "與操作員和最終使用者即時聊天。建立群組用於團隊沟通。所有訊息都支持已讀回執。", - "disable_tutorials": "禁用教程", - "enable_tutorials": "啟用教程" - }, - "help_request": { - "title": "協助請求", - "subtitle": "管理來自桌面用戶端的協助請求", - "new_request": "新協助請求", - "device": "裝置", - "hostname": "主機名稱", - "message": "訊息", - "status": "狀態", - "pending": "待處理", - "accepted": "已接受", - "resolved": "已解決", - "accept": "接受", - "resolve": "解決", - "no_requests": "沒有協助請求", - "notification": "收到來自的協助請求", - "stats_total": "總計", - "filter_all": "全部" - }, - "organizations": { - "title": "組織管理", - "create": "建立組織", - "edit": "編輯組織", - "detail": "組織詳情", - "name": "名稱", - "slug": "識別符號 (URL)", - "logo_url": "Logo 地址", - "users": "使用者", - "devices": "裝置", - "invitations": "邀請", - "settings": "設定", - "add_user": "新增使用者", - "assign_device": "分配裝置", - "create_invitation": "建立邀請", - "delete_confirm": "刪除此組織?這將刪除所有關聯的使用者、裝置和設定。", - "no_orgs": "尚無組織", - "no_orgs_hint": "建立第一個組織以開始管理裝置和使用者。", - "connection_policy": "連線策略", - "allow_file_transfer": "允許檔案傳輸", - "allow_clipboard": "允許剪貼簿", - "max_session_duration": "最大工作階段時長 (分鐘)", - "role_owner": "所有者", - "role_admin": "管理員", - "role_operator": "操作員", - "role_user": "成員", - "username": "使用者名", - "password": "密碼", - "display_name": "顯示名稱", - "email": "Email", - "role": "Role", - "last_login": "Last Login", - "actions": "Actions", - "device_id": "裝置ID", - "department": "Department", - "building": "Building", - "location": "Location", - "assigned_user": "分配使用者", - "token": "Token", - "expires": "Expires", - "used": "Used", - "no_users": "此組織沒有使用者。", - "no_devices": "此組織沒有分配裝置。", - "no_invitations": "沒有邀請。", - "user_added": "User added", - "user_removed": "使用者已移除", - "user_updated": "使用者角色已更新", - "device_assigned": "裝置已分配", - "device_unassigned": "裝置已取消分配", - "invitation_created": "邀請已建立", - "settings_saved": "設定已儲存", - "org_deleted": "組織已刪除", - "confirm_remove_user": "从組織中移除此使用者?", - "confirm_unassign_device": "取消分配此裝置?", - "confirm_delete_org": "刪除此組織及所有關聯資料?", - "edit_role": "修改角色", - "raw_settings": "原始設定", - "key": "Key", - "value": "Value", - "save": "儲存設定", - "policy_unattended": "無人值守(即時)", - "policy_attended": "有人值守(需確認)", - "policy_ask": "Always ask", - "expires_hours": "過期時間(小時)", - "loading_failed": "載入組織資料失敗", - "name_slug_required": "名稱和標識符為必填項", - "org_created": "組織已建立", - "org_updated": "組織已更新", - "create_new_user": "建立新使用者", - "add_existing_user": "添加現有使用者", - "none_available": "none", - "select_user": "選擇使用者", - "org_role": "組織角色", - "link_user_hint": "所選使用者將使用其伺服器帐戶憑證連結到此組織。", - "no_available_users": "所有伺服器使用者都已連結到此組織。", - "user_linked": "使用者已連結到組織" - }, - "chat": { - "e2e_enabled": "端到端加密", - "e2e_establishing": "正在建立安全通道...", - "e2e_established": "安全通道已建立", - "e2e_unsupported": "此瀏覽器不支援端到端加密", - "typing_indicator": "正在輸入...", - "read_receipt": "已讀", - "delivered": "已傳送", - "file_share": "檔案", - "file_too_large": "檔案過大(最大50MB)", - "file_encrypted": "加密檔案傳輸", - "presence_online": "線上", - "presence_away": "離開", - "presence_busy": "忙碌", - "presence_offline": "離線", - "key_rotation": "安全金鑰已輪換", - "new_message": "新訊息", - "title": "聊天", - "contacts": "聯絡人", - "groups": "群組", - "no_contacts": "尚無聯絡人", - "no_groups": "尚無群組", - "no_messages": "尚無訊息", - "no_results": "找不到結果", - "select_conversation": "選擇對話開始聊天", - "type_message": "輸入訊息...", - "send": "傳送", - "attach_file": "附加檔案", - "emoji": "表情", - "search_messages": "搜尋訊息", - "create_group": "建立群組", - "group_name": "群組名稱", - "group_members": "成員", - "cancel": "取消", - "create": "建立", - "members": "成員", - "today": "今天", - "yesterday": "昨天", - "react": "回應", - "my_presence": "我的狀態", - "search_placeholder": "搜尋聯絡人和訊息", - "select_conversation_hint": "檢視訊息請選擇一個工作階段", - "info": "資訊", - "group_name_placeholder": "輸入群組名稱" - }, - "toast": { - "device_connected": "裝置已連線", - "device_disconnected": "裝置已斷開", - "session_started": "遠端工作階段已開始", - "session_ended": "遠端工作階段已結束", - "file_upload_complete": "檔案上傳完成", - "settings_saved": "設定已儲存", - "error_generic": "發生錯誤", - "connection_lost": "連線丟失", - "reconnecting": "正在重新連線..." - }, - "theme": { - "dark": "深色", - "light": "淺色", - "auto": "跟隨系統", - "title": "主題" - }, - "days": { - "mon": "週一", - "tue": "週二", - "wed": "週三", - "thu": "週四", - "fri": "週五", - "sat": "週六", - "sun": "週日" - }, - "toolkit": { - "title": "工具箱", - "subtitle": "管理員工具和診斷實用程式", - "cat_network": "網路", - "cat_crypto": "加密", - "cat_encoding": "編碼", - "cat_system": "系統", - "host": "主機", - "port": "埠", - "domain": "域名", - "run": "執行", - "generate": "產生", - "encode": "編碼", - "decode": "解碼", - "send": "傳送", - "refresh": "重新整理", - "algorithm": "演算法", - "input_text": "輸入文字", - "enter_text": "輸入文字...", - "length": "長度", - "options": "選項", - "source": "來源", - "lines": "行數", - "log_console": "控制台", - "log_go": "Go 伺服器", - "mac_address": "MAC 地址", - "broadcast": "廣播", - "ping_title": "Ping", - "ping_desc": "檢查主機可達性和延遲", - "tcp_title": "TCP 埠檢查", - "tcp_desc": "測試 TCP 埠連線", - "ssl_title": "SSL 檢查器", - "ssl_desc": "檢查 SSL/TLS 證書詳情", - "http_title": "HTTP 健康檢查", - "http_desc": "驗證 HTTP 端點狀態", - "dns_title": "DNS 查詢", - "dns_desc": "將主機名解析為 IP 位址", - "whois_title": "DNS 記錄", - "whois_desc": "查詢 A、AAAA、MX、TXT、NS 記錄", - "speed_title": "速度測試", - "speed_desc": "測量下載頻寬", - "run_speed_test": "執行速度測試", - "wol_title": "網路喚醒", - "wol_desc": "傳送魔術包喚醒裝置", - "wol_sent": "魔術包已傳送", - "hash_title": "雜湊產生器", - "hash_desc": "產生加密雜湊值", - "password_title": "密碼產生器", - "password_desc": "產生安全的隨機密碼", - "jwt_title": "JWT 解碼器", - "jwt_desc": "解碼和檢查 JSON Web Token", - "jwt_token": "JWT 權杖", - "base64_title": "Base64", - "base64_desc": "Base64 編碼或解碼資料", - "url_title": "URL 編碼器", - "url_desc": "編碼或解碼 URL 元件", - "processes_title": "程序列表", - "processes_desc": "檢視執行中的系統程序", - "disk_title": "磁碟使用", - "disk_desc": "檢視磁碟分割槽使用情況", - "db_title": "資料庫統計", - "db_desc": "檢視資料庫表統計資訊", - "docker_title": "Docker 容器", - "docker_desc": "檢視執行中的 Docker 容器", - "logs_title": "日誌檢視器", - "logs_desc": "檢視最近的日誌輸出", - "ip_address": "IP", - "latency": "延遲", - "ttl": "TTL", - "status": "狀態", - "resolved": "已解析", - "subject": "主體", - "issuer": "簽發者", - "valid_from": "有效期從", - "valid_to": "有效期至", - "days_left": "剩餘天數", - "days": "天", - "protocol": "協議", - "cipher": "密碼套件", - "alt_names": "備用名稱", - "chain": "證書鏈", - "record_type": "類型", - "record_value": "值", - "hash_value": "雜湊值", - "entropy": "熵值", - "very_strong": "非常強", - "strong": "強", - "weak": "弱", - "expiry": "過期時間", - "expired": "已過期", - "valid": "有效", - "process_name": "名稱", - "db_type": "類型", - "db_size": "大小", - "table_name": "表名", - "row_count": "行數", - "no_data": "無可用資料", - "no_docker": "找不到 Docker 容器或 Docker 不可用", - "no_logs": "無可用日誌條目" - }, - "policies": { - "title": "組織策略", - "subtitle": "管理組織的安全、連線和功能策略", - "select_org": "組織", - "select_org_placeholder": "選擇組織...", - "select_org_first": "選擇組織以檢視策略稽核日誌。", - "configured": "已配置", - "connection_title": "連線策略", - "connection_desc": "控制遠端工作階段的建立方式", - "connection_mode": "連線模式", - "mode_attended": "有人值守(需要使用者批准)", - "mode_unattended": "無人值守(始終允許)", - "mode_ask": "始終詢問", - "max_session": "最大工作階段時長(分鐘)", - "idle_lock": "空閒鎖定超時(分鐘)", - "wallpaper_policy": "工作階段期間桌布", - "wallpaper_show": "顯示", - "wallpaper_hide_session": "工作階段期間隱藏", - "wallpaper_hide_always": "始終隱藏", - "features_title": "功能策略", - "features_desc": "為裝置啟用或禁用特定功能", - "allow_file_transfer": "允許檔案傳輸", - "allow_clipboard": "允許剪貼簿同步", - "allow_audio": "允許音訊流", - "allow_recording": "允許工作階段錄製", - "security_title": "安全策略", - "security_desc": "為組織裝置強制執行安全要求", - "require_2fa": "無人值守存取需要2FA", - "password_min_length": "最小密碼長度", - "password_require_special": "要求特殊字元", - "password_max_age": "密碼最大有效期(天,0=永不)", - "allowed_operators": "允許的操作員角色(逗號分隔)", - "network_title": "網路策略", - "network_desc": "控制中繼伺服器和直接連線", - "block_direct_p2p": "阻止直接P2P(強制中繼)", - "allowed_relays": "允許的中繼伺服器(每行一個)", - "ip_allowlist": "IP白名單(CIDR,每行一個)", - "update_title": "更新策略", - "update_desc": "控制自動更新和更新頻道", - "auto_update": "啟用自動更新", - "update_channel": "更新頻道", - "audit_title": "策略變更", - "audit_desc": "最近的策略變更歷史", - "no_audit": "沒有記錄的策略變更。", - "save_success": "策略保存成功", - "save_failed": "保存策略失败", - "load_failed": "加載策略失败", - "block_direct_p2p_hint": "套用於此組織中的裝置。全域預設值在設定 → 連線策略中設定。" - }, - "attestation": { - "title": "裝置認證", - "subtitle": "監控裝置身份驗證和硬體指紋", - "verified": "已驗證", - "pending": "待處理", - "failed": "失敗", - "device_list": "裝置認證記錄", - "device_list_desc": "硬體指紋和身份驗證狀態", - "col_device": "裝置ID", - "col_hostname": "主機名稱", - "col_fingerprint": "指紋", - "col_status": "狀態", - "col_last_check": "最後檢查", - "col_actions": "操作", - "no_records": "找不到認證記錄。", - "verify_success": "設備已標记為已驗證", - "verify_failed": "驗證設備失败", - "revoke_success": "設備认證已撤销", - "revoke_failed": "撤销认證失败" - }, - "fleet": { - "title": "車隊管理", - "tab_resources": "資源", - "tab_tasks": "任務", - "tab_builder": "構建器", - "tab_compliance": "合規", - "res_title": "資源對映", - "res_all_types": "所有類型", - "res_type_printer": "印表機", - "res_type_network_drive": "網路驅動器", - "res_type_dns": "DNS 伺服器", - "res_type_proxy": "代理", - "res_type_vpn": "VPN", - "res_add": "新增資源", - "res_name": "資源名稱", - "res_type": "類型", - "res_address": "地址 / 路徑", - "res_target": "目標", - "res_scope": "範圍", - "res_scope_org": "組織", - "res_scope_group": "組", - "res_scope_device": "裝置", - "res_scope_value": "範圍值", - "res_status": "狀態", - "res_active": "活動", - "res_inactive": "不活動", - "res_no_data": "找不到資源。點選'新增'建立。", - "res_confirm_delete": "確定要刪除此資源嗎?", - "task_title": "任務排程器", - "task_all_status": "所有狀態", - "task_status_pending": "等待中", - "task_status_running": "執行中", - "task_status_success": "成功", - "task_status_failed": "失敗", - "task_search": "搜尋任務…", - "task_create": "建立任務", - "task_name": "任務名稱", - "task_type": "類型", - "task_type_script": "指令碼", - "task_type_install": "安裝", - "task_type_update": "更新", - "task_type_restart": "重啟", - "task_type_deploy": "部署", - "task_type_scan": "掃描", - "task_targets": "目標", - "task_targets_help": "裝置ID或組名,逗號分隔", - "task_schedule": "排程", - "task_schedule_once": "一次", - "task_schedule_cron": "Cron", - "task_schedule_interval": "間隔", - "task_schedule_value": "排程值", - "task_script": "指令碼 / 命令", - "task_retries": "重試", - "task_timeout": "超時 (秒)", - "task_last_run": "上次執行", - "task_no_data": "找不到任務。建立新任務。", - "task_confirm_delete": "確定要刪除此任務嗎?", - "task_output": "任務輸出", - "task_retry": "重試", - "builder_title": "視覺化工作流構建器", - "builder_select_workflow": "選擇工作流…", - "builder_new": "新建", - "builder_save": "儲存", - "builder_export": "匯出", - "builder_execute": "執行", - "builder_dry_run": "模擬執行", - "builder_triggers": "觸發器", - "builder_conditions": "條件", - "builder_actions": "操作", - "builder_results": "結果", - "builder_transforms": "轉換", - "builder_properties": "屬性", - "builder_no_selection": "選擇節點以編輯其屬性。", - "workflow_name": "工作流名稱:", - "comp_title": "軟體合規", - "comp_compliant": "合規", - "comp_warning": "警告", - "comp_critical": "嚴重", - "comp_score": "平均分數", - "comp_device": "裝置", - "comp_hostname": "主機名稱", - "comp_os": "作業系統", - "comp_score_col": "分數", - "comp_issues": "問題", - "comp_last_scan": "上次掃描", - "comp_scan": "掃描", - "comp_scan_all": "全部掃描", - "comp_remediate": "修復", - "comp_remediate_confirm": "在此裝置上執行自動修復?", - "comp_no_data": "無合規資料。執行掃描以開始。", - "save": "儲存", - "cancel": "取消", - "close": "關閉", - "edit": "編輯", - "delete": "刪除", - "actions": "操作", - "all_orgs": "所有組織", - "builder_node_trigger_manual": "手動触發器", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "事件触發器", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "重新啟動服務", - "builder_node_action_file_deploy": "部署檔案", - "builder_node_action_message": "發送訊息", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "發送警示", - "builder_node_result_chain": "串聯工作流程", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "選擇組織…", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "網路磁碟機", - "type_dns": "DNS 伺服器", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "添加資原始碼", - "edit_resource": "编辑資原始碼", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "地址/路徑", - "scope_org": "組織", - "scope_group": "組", - "scope_device": "裝置", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "確定要刪除此項目吗?", - "all_statuses": "所有狀態", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "失敗", - "search_tasks": "搜尋任務…", - "create_task": "建立任務", - "edit_task": "编辑任務", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "檔案部署", - "task_type_registry": "Registry", - "target_devices": "目標裝置", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "脚本/指令", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "正在載入", - "no_output": "沒有可用輸出", - "error_loading": "載入資料出錯", - "select_workflow": "選擇工作流程…", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "手動触發器", - "node_schedule": "Schedule", - "node_event": "事件触發器", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "重新啟動服務", - "node_file_deploy": "部署檔案", - "node_send_message": "發送訊息", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "發送警示", - "node_chain": "串聯工作流程", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "所有組織", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "裝置", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "在此裝置上執行自動修復?" - }, - "scaling": { - "title": "擴展與中繼管理", - "tab_overview": "概覽", - "tab_relays": "中繼節點", - "tab_rules": "分配規則", - "tab_capacity": "容量規劃", - "arch_title": "網路架構", - "arch_loading": "載入架構圖...", - "stat_relay_nodes": "中繼節點", - "stat_total_devices": "總裝置數", - "stat_active_sessions": "活躍工作階段", - "stat_bandwidth": "總頻寬", - "relay_health": "中繼健康", - "no_relays": "未配置中繼節點。新增第一個中繼節點以分配負載。", - "relay_search": "搜尋中繼...", - "relay_add": "新增中繼節點", - "relay_edit": "編輯中繼節點", - "col_name": "名稱", - "col_address": "地址", - "col_location": "位置", - "col_devices": "裝置", - "col_sessions": "工作階段", - "col_bandwidth": "頻寬", - "col_status": "狀態", - "col_actions": "操作", - "col_priority": "優先順序", - "col_rule_name": "規則名稱", - "col_match": "匹配", - "col_target_relay": "目標中繼", - "col_fallback": "備用", - "status_online": "線上", - "status_degraded": "降級", - "status_offline": "離線", - "status_enabled": "已啟用", - "status_disabled": "已禁用", - "confirm_delete_relay": "確定要刪除此中繼節點嗎?", - "confirm_delete_rule": "確定要刪除此分配規則嗎?", - "rules_hint": "分配規則決定哪個中繼伺服器處理特定裝置組。規則按優先順序評估(最低優先)。", - "rule_add": "新增規則", - "rule_edit": "編輯規則", - "rule_match_type": "匹配類型", - "match_subnet": "子網", - "match_group": "裝置組", - "match_tag": "裝置標籤", - "match_location": "位置", - "rule_match_value": "匹配值", - "fallback_master": "主伺服器", - "fallback_nearest": "最近中繼", - "relay_max_sessions": "最大工作階段數", - "relay_max_bandwidth": "最大頻寬 (Mbps)", - "cap_tiers": "容量級別", - "cap_loading": "載入容量資料...", - "cap_recommendations": "建議", - "cap_no_recs": "尚無可用建議。", - "cap_planning": "基礎設施規劃", - "cap_config": "配置", - "cap_max_devices": "最大裝置數", - "cap_max_sessions": "最大工作階段數", - "cap_current": "目前", - "cap_utilization": "利用率", - "cap_tier_devices": "裝置容量", - "cap_tier_sessions": "工作階段容量", - "cap_tier_bandwidth": "頻寬容量", - "cap_single_sqlite": "單伺服器 (SQLite)", - "cap_single_pg": "單伺服器 (PostgreSQL)", - "cap_master_3": "主伺服器 + 3 中繼", - "cap_master_10": "主伺服器 + 10 中繼", - "rec_no_relays": "未配置中繼節點。建議新增中繼節點以提高效能和冗餘。", - "rec_devices_high": "裝置利用率較高。建議新增更多中繼節點以分配負載。", - "rec_sessions_high": "工作階段容量接近限制。建議升級中繼基礎設施。", - "rec_cpu_high": "部分中繼節點CPU使用率較高。建議負載均衡或升級容量。", - "rec_all_good": "所有系統執行在正常引數內。無需操作。", - "save": "儲存", - "cancel": "取消", - "edit": "編輯", - "delete": "刪除", - "close": "關閉", - "no_rules": "沒有分配規則。", - "relays_info_banner": "此清單仅供参考。客戶端實際使用的中繼伺服器通過 BetterDesk 伺服器上的 RELAY_SERVERS 環境變量設定。", - "relay_name_address_required": "必須填寫名稱和地址。", - "relay_save_failed": "儲存中繼节點失敗。", - "relay_delete_failed": "刪除中繼节點失敗。", - "relay_saved": "中繼节點已儲存。", - "relay_deleted": "中繼节點已刪除。", - "rule_name_value_required": "必須填寫規則名稱和匹配值。", - "rule_save_failed": "儲存規則失敗。", - "rule_delete_failed": "刪除規則失敗。", - "rule_saved": "規則已儲存。", - "rule_deleted": "規則已刪除。" - }, - "cross_platform": { - "title": "跨平台相容性", - "tab_matrix": "相容性矩陣", - "tab_distribution": "分佈", - "tab_protocols": "協議", - "tab_limitations": "限制", - "matrix_hint": "所有支援平台的功能支援矩陣。綠色=完全支援,黃色=部分支援,灰色=不可用,藍色=計劃中。", - "col_feature": "功能", - "legend_full": "完全支援", - "legend_partial": "部分支援", - "legend_none": "不可用", - "legend_planned": "計劃中", - "platform_breakdown": "平台分佈", - "arch_breakdown": "架構分佈", - "version_breakdown": "版本分佈", - "summary": "摘要", - "total_devices": "裝置總數", - "unique_platforms": "平台", - "unique_archs": "架構", - "unique_versions": "用戶端版本", - "no_devices": "尚無註冊裝置。", - "protocols_hint": "協議能力協商確保每個用戶端只接收其支援的功能。伺服器根據報告的能力調整行為。", - "capability_negotiation": "能力協商", - "codec_support": "編解碼器支援(線上裝置)", - "feature_support": "功能支援(線上裝置)", - "no_codec_data": "沒有來自線上裝置的編解碼器資料。", - "no_feature_data": "沒有來自線上裝置的功能資料。", - "protobuf_schema": "ClientCapabilities Protobuf 模式", - "diagram_client": "用戶端", - "diagram_server": "BetterDesk 伺服器", - "diagram_peer": "遠端對等體", - "limitations_hint": "每個平台都有影響可用功能的特定限制。在規劃部署時請查閱這些約束。", - "feat_desktop_client": "桌面用戶端", - "feat_background_agent": "後臺代理", - "feat_remote_target": "遠端目標", - "feat_screen_capture": "螢幕捕獲", - "feat_input_injection": "輸入注入", - "feat_file_transfer": "檔案傳輸", - "feat_clipboard_sync": "剪貼簿同步", - "feat_audio_streaming": "音訊流", - "feat_chat": "聊天", - "feat_h264": "H.264 編解碼器", - "feat_vp9": "VP9 編解碼器", - "feat_av1": "AV1 編解碼器", - "feat_cdap_agent": "CDAP 代理", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "網頁瀏覽器", - "platform_chromeos": "ChromeOS", - "status_production": "生產", - "status_testing": "測試", - "status_planned": "計劃中", - "status_limited": "有限", - "status_experimental": "實驗性", - "limit_win_uac": "服務安裝和安全桌面輸入注入需要UAC提升。", - "limit_win_service": "作為NSSM服務執行;安裝需要管理員許可權。", - "limit_win_firewall": "Windows防火牆規則必須允許21115-21119埠用於中繼連線。", - "limit_linux_wayland": "Wayland合成器限制程式化螢幕捕獲;需要PipeWire門戶API。", - "limit_linux_pipewire": "音訊捕獲需要PipeWire;PulseAudio回退可用但有限。", - "limit_linux_arm": "ARM64構建可用;某些編解碼器可能使用軟體解碼(較慢)。", - "limit_mac_screen": "需要在系統偏好設定>隱私與安全中授予螢幕錄製許可權。", - "limit_mac_signing": "代理必須使用Apple Developer ID簽名才能分發。", - "limit_mac_notarize": "macOS Gatekeeper需要公證(非App Store分發)。", - "limit_android_projection": "MediaProjection API需要使用者同意每次螢幕捕獲工作階段。", - "limit_android_accessibility": "輸入注入需要輔助功能服務;Android 14+中受限。", - "limit_android_battery": "後臺服務受Doze模式限制;可能需要電池最佳化豁免。", - "limit_ios_capture": "Apple禁止後臺螢幕捕獲;僅支援檢視模式。", - "limit_ios_input": "不允許輸入注入;僅支援遠端檢視和聊天。", - "limit_ios_appstore": "僅透過App Store分發;TestFlight用於beta測試。", - "limit_web_https": "WebCodecs API和WebRTC需要HTTPS;HTTP回退到JMuxer(有限編解碼器)。", - "limit_web_codec": "編解碼器支援取決於瀏覽器;H.264廣泛支援,VP9/AV1因瀏覽器而異。", - "limit_web_performance": "效能受瀏覽器沙箱限制;無直接硬體加速。", - "limit_chrome_crostini": "完整代理支援僅在Crostini Linux容器內。", - "limit_chrome_pwa": "PWA模式僅提供web功能;無原生代理能力。", - "limit_chrome_input": "Crostini容器外不支援輸入注入。", - "feat_session_recording": "工作階段錄製", - "feat_multi_monitor": "多螢幕", - "feat_unattended_access": "無人值守存取", - "limit_win_virtual_account": "服務在隔離虛擬帳戶下執行,而非 LocalSystem;自訂日誌路徑可能需要調整 ACL。", - "limit_linux_unprivileged": "服務以專用非特權「betterdesk」帳戶執行,並具備 systemd 強化(NoNewPrivileges、ProtectSystem=strict)。" - }, - "security_audit": { - "title": "安全稽核", - "tab_overview": "概覽", - "tab_events": "稽核事件", - "tab_hardening": "安全加固", - "tab_vulnerabilities": "漏洞", - "security_score": "安全評分", - "failed_logins": "登入失敗(24h)", - "active_bans": "活躍封鎖", - "api_keys": "API金鑰", - "old_keys": "舊金鑰(>90天)", - "security_checks": "安全檢查", - "tls_status": "TLS狀態", - "pass": "透過", - "warning": "警告", - "fail": "失敗", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "安全 WebSocket", - "enabled": "已啟用", - "disabled": "已禁用", - "all_events": "所有事件", - "event_login_failed": "登入失敗", - "event_login_success": "登入成功", - "event_peer_banned": "裝置封鎖", - "event_ip_banned": "IP封鎖", - "event_config_changed": "配置變更", - "event_key_created": "金鑰建立", - "refresh": "重新整理", - "col_time": "時間", - "col_action": "操作", - "col_actor": "操作者", - "col_target": "目標", - "col_ip": "IP地址", - "col_details": "詳情", - "no_events": "找不到稽核事件。", - "hardening_hint": "BetterDesk部署的安全加固優先順序。按嚴重程度排序。", - "no_hardening": "沒有可用的加固專案。", - "vuln_hint": "依賴項漏洞掃描結果。定期執行npm audit以保持依賴安全。", - "no_vulns": "未發現漏洞。您的依賴項是安全的。" - }, - "languages": { - "title": "語言管理", - "total_languages": "語言總數", - "fully_translated": "完全翻譯", - "needs_review": "需要稽覈", - "reference_keys": "參考鍵數", - "no_languages": "找不到語言檔案。", - "badge_reference": "參考", - "badge_review": "需要審核", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "查看缺失項", - "fix_missing": "Fix Missing", - "missing_keys_for": "缺失鍵:", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "還有 {n} 個...", - "all_keys_present": "所有鍵都已存在!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code} 中缺少的鍵必須手動翻譯。", - "no_fix_needed": "沒有需要補齐的缺失鍵。" - }, - "resource_control": { - "title": "資原始碼控制", - "tab_overview": "概覽", - "tab_usb": "USB Control", - "tab_optical": "光碟機", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "資原始碼配額", - "compliance_by_category": "按類别的合規性", - "device_compliance": "裝置合規性", - "search_devices": "搜尋裝置...", - "col_device": "裝置", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "裝置總數", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "合規率", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "設定", - "no_devices": "未找到裝置", - "usb_title": "USB 端口控制", - "usb_hint": "控制所選裝置或組織級預設原則的 USB 存儲裝置存取。", - "usb_storage_policy": "USB 存儲原則", - "usb_whitelist": "白名單裝置(每行一個)", - "usb_whitelist_hint": "VID:PID(例如 0781:5583)", - "usb_audit_log": "記錄 USB 裝置連線", - "optical_title": "光碟機控制", - "optical_hint": "控制所選裝置的 CD/DVD/藍光碟機動器存取。", - "optical_policy": "光碟機原則", - "optical_audit_log": "記錄光碟機存取", - "monitors_title": "顯示器管理", - "monitors_hint": "設定顯示器設定,包括最大數量、分辨率强制、亮度和電原始碼排程。", - "monitors_max_count": "最大顯示器數量(0 = 不限制)", - "monitors_max_hint": "0 表示不限制", - "monitors_resolution": "最大分辨率", - "monitors_brightness": "亮度限制", - "monitors_power_schedule": "電原始碼排程", - "monitors_power_hint": "例如 off:22:00-06:00", - "disks_title": "磁碟存取控制", - "disks_hint": "設定磁碟存取原則,包括唯讀模式、加密强制和分割區可见性。", - "disks_readonly": "强制唯讀模式", - "disks_encryption": "要求加密(BitLocker/LUKS)", - "disks_smart": "啟用 S.M.A.R.T. 監控", - "disks_hidden": "隱藏分割區", - "disks_hidden_hint": "以逗號分隔的磁碟機磁碟機代號或掛載點", - "quotas_title": "資原始碼配額", - "quotas_hint": "為所選裝置上的每個使用者設定 CPU、記憶體、頻寬和磁碟配額。", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "頻寬限制(Mbps)", - "quotas_bandwidth_hint": "0 = 不限制", - "quotas_disk_quota": "磁碟配額(GB)", - "quotas_disk_hint": "0 = 不限制", - "quotas_process_whitelist": "處理程序白名單(每行一個)", - "quotas_process_hint": "例如 chrome.exe、code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "仅白名單", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "軟件更新", - "desc": "Check for new versions and update the BetterDesk console from GitHub", - "current_version": "已安裝版本", - "latest_version": "Latest version", - "status": "Status", - "check_now": "檢查更新", - "checking": "Checking…", - "up_to_date": "已是最新版本", - "update_available": "有可用更新", - "changelog": "Release Notes", - "no_changelog": "沒有可用的發布说明", - "files_changed": "已變更檔案", - "files": "個檔案", - "changes_unavailable": "無法載入檔案變更清單。您仍然可以安裝更新。", - "create_backup": "更新前建立備份", - "install": "Install Update", - "install_confirm": "Are you sure you want to install this update? The console will restart after the update.", - "installing": "正在安裝更新…", - "creating_backup": "正在建立備份…", - "downloading": "正在下載檔案…", - "install_success": "更新安裝成功。主控台正在重新啟動…", - "install_failed": "更新安裝失敗", - "restarting": "正在等待主控台重新啟動…", - "restart_complete": "主控台已成功重新啟動", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "未選擇更新版本。請先檢查更新。", - "backups_title": "更新備份", - "backups_desc": "每次更新前自動建立的更新前備份", - "no_backups": "未找到更新備份", - "restore": "Restore", - "restore_confirm": "確定要从此備份還原吗?已變更的檔案將被覆盖。", - "restore_success": "備份還原成功。主控台正在重新啟動…", - "baseline_set": "基線已設定", - "commits_behind": "個提交落後", - "total_files": "總檔案數", - "applied": "Applied", - "failed": "失敗", - "skipped": "Skipped", - "removed": "Removed", - "auto": "Auto", - "manual": "Manual", - "component_console": "Web Console", - "component_server": "Go伺服器", - "component_agent": "Agent", - "component_scripts": "脚本和Docker", - "component_other": "Other", - "server_rebuild_warning": "Go Server source changed — binary rebuild required. Use the ALL-IN-ONE script or compile manually.", - "include_server": "Include Go Server (compile & deploy binary)", - "checking_go": "檢查Go…", - "go_not_found": "未安裝Go", - "go_check_failed": "無法檢查Go可用性", - "server_building": "編譯Go伺服器… 這可能需要几分鐘。", - "server_built": "伺服器二進位檔案已編譯", - "server_build_failed": "伺服器編譯失敗", - "server_stale_title": "伺服器二進位檔案已過期", - "server_stale_desc": "Go 伺服器原始碼代碼已更新,但正在執行的二進位檔案尚未重新編譯。立即重新編譯以套用安全和庫更新。", - "rebuild_server": "重新編譯伺服器二進位檔案", - "rebuilding_server": "Rebuilding…", - "rebuild_server_success": "伺服器二進位檔案已重新編譯并重新啟動", - "rebuild_server_failed": "伺服器二進位檔案重新編譯失敗", - "server_deployed": "伺服器二進位檔案已部署", - "server_deploy_failed": "伺服器部署失敗", - "server_build_note": "Server compilation may take 1-5 minutes. The page will remain unresponsive during compilation.", - "server_source_downloading": "下載伺服器原始碼代碼…", - "delete": "刪除", - "delete_confirm": "永久刪除備份 {name}?此操作無法撤銷。", - "delete_success": "備份已刪除", - "delete_failed": "刪除備份失敗", - "retention_label": "保留最近 N 個備份", - "retention_hint": "每次更新後會自動刪除更舊的備份。使用 0 可保留所有備份。", - "retention_saved": "保留設定已儲存", - "retention_invalid": "保留值必須是 0 到 1000 之間的整數", - "retention_required_for_prune": "請先設定大於 0 的保留值", - "prune_now": "Apply now", - "prune_confirm": "只保留最近 {n} 個備份并刪除其余備份?", - "prune_done": "已清理 {n} 個備份", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_label": "更新方式", - "strategy_download": "下載预编译二進制文件", - "strategy_compile": "从源代碼编译", - "both_available": "下載和编译", - "download_available": "可下載", - "no_method": "無可用更新方式", - "no_release": "無發布版本", - "available": "可用", - "server_downloading": "正在下載服务器二進制文件…", - "server_downloaded": "服务器二進制文件已下載", - "server_download_failed": "服务器二進制文件下載失败", - "server_download_note": "將从 GitHub Releases 下載预编译的二進制文件。通常不到一分钟。", - "install_go_hint": "从 https://go.dev/dl/ 安装 Go 以啟用编译,或發布包含预编译二進制文件的版本", - "strategy_install_go": "自動安裝 Go 并編譯", - "strategy_install_go_hint": "Downloads the official Go toolchain (~120 MB) into the console data directory, then compiles the server. Use this when Go is not installed on the host.", - "auto_strategy": "Auto", - "auto_strategy_hint": "The console will pick the best available method (download → compile → auto-install Go).", - "auto_available": "自動重建已就绪", - "toolchain_ready": "工具鏈已安裝", - "toolchain_will_install": "Go toolchain will be installed automatically", - "toolchain_downloading": "正在下載 Go 工具鏈…", - "toolchain_failed": "Go 工具鏈安裝失敗", - "modal_title": "正在安裝更新", - "modal_done_title": "更新完成", - "modal_close": "關閉", - "modal_reload_now": "重新載入主控台", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "主控台檔案", - "phase_server": "Go 伺服器", - "phase_restart": "重新啟動", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "已跳過備份(按使用者選擇)", - "server_skipped": "已跳過 Go 伺服器", - "server_not_selected": "Go server not selected", - "server_processing": "正在處理 Go 伺服器更新…", - "no_restart_needed": "不需要重新啟動", - "complete": "更新已套用", - "complete_summary": "更新已成功套用。", - "complete_with_errors": "更新已完成,但某些步骤失敗。請查看下方詳細資訊。", - "modal_done_with_errors_title": "更新完成但有錯誤", - "console_will_restart": "主控台處理程序現在將重新啟動…", - "restart_complete_msg": "主控台已完成重新啟動。點擊重新載入以載入新版本。頁面將在 8 秒後自動重新載入。", - "refresh_recommended": "静態資原始碼已變更,請重新載入頁面以查看新界面。", - "confirm_title": "套用更新", - "confirm_with_backup": "將自動建立更新前備份。", - "confirm_no_backup": "不會建立備份(风险自担)。" - }, - "permissions": { - "title": "權限管理", - "subtitle": "管理基於角色的權限和自定义覆盖", - "info_title": "權限如何工作", - "info_desc": "每個角色都有預設權限。您可以通過切換下面的開關来為每個角色添加或刪除單独的權限。自定义覆盖會醒目提示顯示,可以随時還原為預設值。", - "select_role": "選擇角色", - "select_role_placeholder": "選擇角色...", - "reset_overrides": "重置所有覆盖", - "granted": "Granted", - "overrides": "Overrides", - "level": "Level", - "super_admin_tag": "Full access", - "server_level_tag": "伺服器級别", - "custom": "Custom", - "default": "Default", - "revert": "還原預設", - "saved": "權限已更新", - "reverted": "已還原預設", - "all_reverted": "所有覆盖已還原", - "confirm_reset": "將此角色的所有自定义覆盖重置為預設值?", - "empty_title": "選擇角色", - "empty_desc": "从上方下拉清單中選擇一個角色以查看和管理其權限。", - "locked_title": "Super Admin", - "locked_desc": "超級管理員預設拥有所有權限,無法自定义。", - "cat_device": "裝置", - "cat_user": "Users", - "cat_server": "伺服器", - "cat_org": "組織", - "cat_audit": "稽核與監控", - "cat_cdap": "CDAP", - "cat_enrollment": "Enrollment", - "cat_chat": "Chat", - "cat_branding": "Branding", - "perm_device_view": "查看裝置", - "perm_device_connect": "連線裝置", - "perm_device_edit": "编辑裝置", - "perm_device_delete": "刪除裝置", - "perm_device_ban": "封禁/解封裝置", - "perm_device_change_id": "變更裝置ID", - "perm_user_view": "查看使用者", - "perm_user_create": "建立使用者", - "perm_user_edit": "编辑使用者", - "perm_user_delete": "刪除使用者", - "perm_server_config": "伺服器設定", - "perm_server_keys": "管理API金鑰", - "perm_org_create": "建立組織", - "perm_org_edit": "编辑組織", - "perm_org_delete": "刪除組織", - "perm_org_manage_users": "管理組織使用者", - "perm_org_manage_devices": "管理組織裝置", - "perm_audit_view": "查看稽核日誌", - "perm_metrics_view": "查看指標", - "perm_blocklist_edit": "编辑黑名單", - "perm_cdap_view": "查看CDAP裝置", - "perm_cdap_command": "發送CDAP指令", - "perm_cdap_terminal": "CDAP終端機存取", - "perm_cdap_files": "CDAP檔案存取", - "perm_enrollment_manage": "管理註冊", - "perm_enrollment_approve": "審批註冊", - "perm_chat_access": "Chat access", - "perm_branding_edit": "编辑品牌", - "perm_server_attestation": "伺服器效能認證" - }, - "notifications": { - "title": "通知", - "empty": "没有新通知", - "mark_all_read": "全部標记為已讀", - "see_all": "查看所有求助請求", - "help_request": "求助請求", - "just_now": "刚刚" - }, - "accessibility": { - "title": "無障礙", - "subtitle": "依照視覺、動態效果與閱讀需求調整主控台。", - "close": "關閉無障礙選單", - "profiles": "快速設定", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "更大的文字、强对比度和明顯焦點。", - "profile_dyslexia": "閱讀舒適", - "profile_dyslexia_hint": "易讀字型和更寬的間距。", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "减少轉場效果并暂停動畫。", - "profile_color_assist": "顏色辅助", - "profile_color_assist_hint": "顏色濾镜、標籤和醒目提示連結。", - "reading": "閱讀", - "font_size": "字體大小", - "line_height": "行高", - "letter_spacing": "字母間距", - "word_spacing": "單字間距", - "readable_font": "易讀字型", - "readable_font_hint": "使用寬阔、熟悉的字形。", - "dyslexia_spacing": "閱讀障碍間距", - "dyslexia_spacing_hint": "為长文字增加額外間距。", - "visual": "視覺", - "contrast": "對比", - "contrast_normal": "Normal", - "contrast_high_dark": "高对比度深色", - "contrast_high_light": "高对比度浅色", - "contrast_yellow_black": "黑底黄字", - "color_filter": "色覺濾镜", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "顏色饱和度", - "underline_links": "為連結添加下划線", - "underline_links_hint": "不需要依赖顏色也能看清連結。", - "highlight_links": "突出顯示操作", - "highlight_links_hint": "為連結和按钮添加外框。", - "highlight_headings": "突出顯示標題", - "highlight_headings_hint": "用彩色條標記章節標題。", - "hide_media": "Dim media", - "hide_media_hint": "淡化圖片、視頻和畫布。", - "interaction": "互動", - "strong_focus": "强焦點", - "strong_focus_hint": "顯示較大的鍵盤焦點環。", - "large_cursor": "大光標", - "large_cursor_hint": "使用更大的高对比度指標。", - "reduce_motion": "减少動態效果", - "reduce_motion_hint": "縮短轉場和順滑滾動。", - "pause_animations": "暂停動畫", - "pause_animations_hint": "停止循環視覺运動。", - "reading_guide": "閱讀引導線", - "reading_guide_hint": "用明亮線條跟随指標。", - "reading_mask": "閱讀遮罩", - "reading_mask_hint": "淡化指標上方和下方的內容。", - "preview": "預覽", - "preview_title": "操作員工作區預覽", - "preview_text": "關閉此菜單前,檢查文字、連結、控件和狀態標籤是否易於閱讀。", - "preview_link": "裝置詳細資訊連結", - "preview_status": "Online", - "preview_button": "主要操作", - "preview_secondary": "Secondary", - "reset": "重設", - "done": "完成" - }, - "server_mgmt": { - "title": "伺服器管理", - "subtitle": "類似 Cockpit 的 BetterDesk 主控台主機管理面板(測試版)。", - "beta_tooltip": "測試版功能 — 正在积极開發中。", - "notice_title": "測試版功能", - "notice_body": "這些工具在執行 BetterDesk 主控台處理程序的主機上執行。所有操作均被稽核。", - "tab_overview": "概覽", - "tab_terminal": "終端機", - "tab_files": "檔案", - "tab_services": "服務", - "cpu": "CPU", - "memory": "記憶體", - "load": "负載平均值", - "disks": "磁碟", - "history": "歷史記錄(最近 60 個样本)", - "host_info": "Host info", - "cores": "cores", - "uptime": "運行時間", - "no_disks": "沒有可用的磁碟資料", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY 可用", - "term_connect": "連線", - "term_disconnect": "中斷連線", - "term_clear": "Clear", - "term_status": "Status", - "term_connecting": "Connecting…", - "term_connected": "Connected", - "term_disconnected": "Disconnected", - "term_error": "連線錯誤", - "term_warning": "指令會以主控台處理程序所屬使用者身分執行。添加 sudoers 規則以啟用提權。", - "term_hint": "提示:輸入 `sudo -i` 進行提權(需要 sudoers 設定)。", - "term_lib_failed": "載入終端機庫失敗", - "files_up": "上一級", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "名稱", - "files_size": "大小", - "files_perms": "Mode", - "files_mtime": "Modified", - "files_rename": "Rename", - "files_rename_prompt": "New name:", - "files_empty": "空目錄", - "files_error": "列出目錄失敗", - "read_failed": "讀取檔案失敗", - "save_failed": "儲存檔案失敗", - "rename_failed": "重命名失敗", - "delete_failed": "刪除失敗", - "delete_confirm": "刪除此條目?", - "mkdir_prompt": "新資料夾名稱:", - "mkdir_failed": "建立資料夾失敗", - "file_saved": "檔案已儲存", - "binary_warn": "二進位檔案 — 仅預覽", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "搜尋服務…", - "svc_name": "服務", - "svc_state": "狀態", - "svc_description": "Description", - "svc_empty": "未找到服務", - "svc_load_failed": "載入服務失敗", - "svc_action_failed": "操作失敗", - "svc_confirm": "Run", - "svc_start": "啟動", - "svc_stop": "停止", - "svc_restart": "重新啟動", - "svc_reload": "Reload", - "svc_enable": "Enable", - "svc_disable": "Disable", - "svc_status": "Status" - }, - "server_attestation": { - "title": "伺服器效能認證", - "subtitle": "效能基準測試,在 80% CPU、記憶體和磁碟閾值下確定並發遠端連線容量。", - "warning_title": "負載測試", - "warning_body": "基準測試模擬對信令和中繼伺服器的平行 WebSocket 連線。請在離峰時段執行 — 此測試會對正式環境產生負載。", - "run_benchmark": "執行基準測試", - "abort": "中止", - "download_report": "下載 JSON 報告", - "last_test": "上次測試", - "no_test_yet": "尚未執行任何基準測試", - "max_connections": "最大連線數", - "threshold_80": "80% 閾值 — 最終指標", - "disk": "磁碟", - "ramp_chart": "負載爬升圖", - "connections": "連線數", - "connections_short": "連線", - "tier_guide_title": "每個等級代表什麼?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 個並發連線 — 小型 VPS(1–2 vCPU,2–4 GB RAM)。", - "tier_iron_desc": "26–75 個連線 — 中階伺服器(2–4 vCPU,4–8 GB RAM)。", - "tier_platinum_desc": "76–200 個連線 — 高效能伺服器(4–8 vCPU,8–16 GB RAM)。", - "tier_titanium_desc": "201–400 個連線 — 企業級基礎設施(8+ vCPU,16–32 GB RAM)。", - "tier_obsidian_desc": "401+ 個連線 — 極速級:專用硬體,16+ vCPU,32+ GB RAM,NVMe。", - "docker_note": "注意:在 Docker 中,CPU/記憶體指標可能反映容器限制而非實體主機。", - "badge_tooltip": "BetterDesk 伺服器效能認證 — 伺服器效能認證", - "confirm_run": "此基準測試將使用模擬連線對伺服器進行負載測試。繼續?", - "starting": "啟動中…", - "complete": "基準測試完成", - "signal_peers": "信令節點", - "relay_sessions": "中繼工作階段", - "page_error": "載入伺服器效能認證頁面失敗", - "mode_estimated": "估算值(WebSocket 不可達)", - "incomplete": "基準測試結束但未獲得有效等級" + "form": { + "cancel": "取消" } + } } diff --git a/web-nodejs/lang/zh.json b/web-nodejs/lang/zh.json index a5c65c55..91a400e3 100644 --- a/web-nodejs/lang/zh.json +++ b/web-nodejs/lang/zh.json @@ -1,3571 +1,3664 @@ { - "meta": { - "lang": "zh", - "name": "中文", - "native_name": "中文", - "direction": "ltr" + "meta": { + "lang": "zh", + "name": "中文", + "native_name": "中文", + "direction": "ltr" + }, + "common": { + "loading": "加载中...", + "confirm": "确认", + "alert": "提示", + "prompt": "请输入", + "copied": "已复制到剪贴板", + "save": "保存", + "saved": "已保存", + "error": "错误", + "success": "成功", + "warning": "警告", + "info": "信息", + "all": "全部", + "cancel": "取消", + "delete": "删除", + "actions": "操作", + "close": "关闭", + "required": "必填", + "name_required": "名称为必填项", + "active": "活动", + "inactive": "非活动", + "invalid_json": "无效的 JSON", + "field_required": "{field} 为必填项", + "back": "返回", + "edit": "编辑", + "yes": "是", + "no": "否" + }, + "nav": { + "main": "主要", + "tools": "工具", + "system": "系统", + "dashboard": "仪表板", + "devices": "设备", + "keys": "密钥", + "generator": "生成器", + "settings": "设置", + "users": "用户", + "inventory": "资产清单", + "tickets": "工单", + "help_requests": "帮助请求", + "activity": "活动", + "automation": "自动化", + "file_transfer": "文件传输", + "network": "网络", + "dataguard": "数据防护", + "reports": "报表", + "tenants": "租户", + "registrations": "注册", + "management": "管理", + "toggle_sidebar": "切换侧边栏", + "cdap": "CDAP 设备", + "fleet": "车队", + "scaling": "扩展", + "cross_platform": "跨平台", + "tokens": "设备令牌", + "organizations": "组织", + "policies": "策略", + "attestation": "设备认证", + "remote": "远程桌面", + "toolkit": "工具箱", + "security_audit": "安全审计", + "permissions": "权限管理", + "languages": "语言", + "resource_control": "资源控制", + "chat": "聊天", + "help": "帮助", + "expand_sidebar": "展开侧边栏", + "toggle_theme": "切换主题", + "sdk_studio": "SDK Studio", + "login": "登录", + "server_management": "服务器管理", + "server_attestation": "服务器性能认证", + "commercialization": "商业化" + }, + "auth": { + "login": "登录", + "logout": "退出", + "login_title": "登录", + "login_subtitle": "登录到 BetterDesk 控制台", + "username": "用户名", + "username_placeholder": "请输入用户名", + "password": "密码", + "password_placeholder": "请输入密码", + "remember_me": "记住我", + "login_failed": "登录失败,请检查您的凭据。", + "or": "或", + "login_sso": "通过 SSO 登录", + "login_sso_with": "通过 {{provider}} 登录", + "oidc_denied": "身份提供商拒绝了访问。", + "oidc_invalid": "无效的 OIDC 回调。请重试。", + "oidc_failed": "OIDC 身份验证失败。请重试。", + "oidc_error": "SSO 登录时发生错误。", + "oidc_no_account": "未找到您的帐户,且自动注册已禁用。", + "invalid_credentials": "用户名或密码无效。", + "username_collision": "已存在使用此用户名的本地账户。请使用本地密码登录,或请管理员重命名或删除冲突账户。", + "fill_all_fields": "请填写所有字段", + "logout_confirm": "确定要退出登录吗?", + "change_password": "修改密码", + "password_required": "密码为必填项", + "totp_title": "双因素认证", + "totp_subtitle": "请输入验证器应用中的 6 位验证码", + "totp_code": "验证码", + "totp_verify": "验证", + "totp_use_recovery": "使用恢复码", + "totp_use_code": "使用验证器代码", + "totp_recovery_code": "恢复码", + "totp_back_to_login": "返回登录", + "totp_invalid_code": "验证码无效,请重试。", + "totp_enter_code": "请输入 6 位验证码", + "totp_enter_recovery": "请输入恢复码", + "totp_session_expired": "会话已过期,请重新登录。", + "totp_rate_limited": "尝试次数过多,请稍后再试。", + "totp_already_enabled": "双因素认证已启用", + "pro_only_account": "此账户仅适用于 RustDesk 桌面客户端。请使用 RustDesk 应用登录。", + "passwords_mismatch": "两次输入的密码不一致", + "emergency_mode_banner": "Go 服务器不可达 — 紧急模式运行中(仅管理员,功能受限)" + }, + "dashboard": { + "title": "仪表板", + "subtitle": "RustDesk 服务器概览", + "total_devices": "设备总数", + "online_now": "当前在线", + "banned": "已封禁", + "active_connections": "活跃连接", + "offline_devices": "离线", + "server_status": "服务器状态", + "quick_actions": "快捷操作", + "manage_devices": "管理已连接的设备", + "view_keys": "查看服务器密钥", + "generate_config": "生成客户端配置", + "server_settings": "配置设置", + "greeting_morning": "早上好,{name}", + "greeting_afternoon": "下午好,{name}", + "greeting_evening": "晚上好,{name}", + "greeting_night": "晚安,{name}", + "health_overview": "健康概览", + "devices_online": "在线设备", + "active_alerts": "活动告警", + "recent_connections": "设备总数", + "server_uptime": "服务器运行时间", + "activity_feed": "最近活动", + "no_recent_activity": "暂无最近活动", + "just_now": "刚刚", + "ago": "前", + "tip_desktop_mode": "尝试桌面模式,获得带监控小组件的多窗口工作区。", + "tip_keyboard_shortcuts": "在任意位置按 Ctrl+K 可打开快速搜索命令面板。", + "tip_address_book": "通过 RustDesk 客户端登录即可在设备间同步地址簿。", + "tip_2fa": "在设置中启用双因素认证,以提升账户安全性。", + "tip_bulk_actions": "选择多个设备并使用批量操作一次性管理它们。", + "tip_theme": "在侧边栏设置中切换深色和浅色主题。", + "tip_cdap": "通过 CDAP 网关连接物联网设备和工业传感器。", + "tip_tutorials": "点击右下角的帮助按钮查看交互式教程。" + }, + "devices": { + "title": "设备", + "id": "ID", + "hostname": "主机名", + "username": "用户名", + "platform": "平台", + "version": "版本", + "ip_address": "IP 地址", + "note": "备注", + "last_seen": "最后在线", + "last_online": "最后在线", + "first_seen": "首次发现", + "created": "创建时间", + "status": "状态", + "ban_reason": "封禁原因", + "actions": "操作", + "search_placeholder": "搜索设备...", + "filter_all": "全部", + "filter_online": "在线", + "filter_offline": "离线", + "filter_banned": "已封禁", + "selected": "已选择", + "showing": "显示", + "of": "/", + "sync_status": "同步状态", + "sync_success": "状态同步成功", + "empty_title": "未找到设备", + "empty_text": "没有符合当前筛选条件的设备", + "edit_title": "设备详情", + "delete_title": "删除设备", + "delete_confirm": "确定要删除设备 {id} 吗?", + "delete_warning": "您即将永久删除此设备:", + "delete_permanent": "此操作无法撤销。与该设备关联的所有数据将从数据库中永久删除。", + "delete_success": "设备删除成功", + "revoke_option": "撤销设备", + "revoke_hint": "阻止设备 ID 并断开活动连接", + "revoke_success": "设备已成功撤销", + "details": "设备详情", + "ban_title": "封禁设备", + "ban_confirm": "确定要封禁设备 {id} 吗?", + "ban_success": "设备封禁成功", + "unban_title": "解除封禁", + "unban_confirm": "确定要解除设备 {id} 的封禁吗?", + "unban_success": "设备解除封禁成功", + "change_id": "更改 ID", + "change_id_title": "更改设备 ID", + "new_id": "新 ID", + "change_id_hint": "6-16 个字符,仅限字母、数字、短横线和下划线", + "change_id_success": "设备 ID 更改成功", + "id_length_error": "ID 必须为 6-16 个字符", + "id_format_error": "ID 只能包含字母、数字、短横线和下划线", + "bulk_delete_title": "批量删除设备", + "bulk_delete_confirm": "确定要删除 {count} 个设备吗?", + "bulk_delete_success": "已成功删除 {count} 个设备", + "columns": "列", + "toggle_columns": "切换可见列", + "not_found": "未找到设备", + "delete_failed": "删除设备失败", + "change_id_failed": "更改设备 ID 失败", + "invalid_id": "设备 ID 无效(需要 6-16 个字符)", + "invalid_id_format": "ID 格式无效(仅允许字母、数字、连字符和下划线)", + "id_exists": "设备 ID 已存在", + "no_selection": "未选择任何设备", + "device_type": "类型", + "filter_type_all": "所有类型", + "filter_type_rustdesk": "RustDesk", + "filter_type_desktop": "桌面", + "filter_type_scada": "SCADA", + "filter_type_iot": "物联网", + "filter_type_agent": "代理", + "cdap_connected": "CDAP 已连接", + "revoke": "撤销", + "access_policy": "访问策略", + "unattended_access": "无人值守访问", + "enable_unattended": "启用无人值守访问", + "access_password": "访问密码", + "password_configured": "密码已设置", + "no_password": "未设置密码", + "new_password": "新密码(留空保持当前密码)", + "clear_password": "清除密码", + "access_schedule": "访问时间表", + "enable_schedule": "启用基于时间的访问", + "allowed_days": "允许的天数", + "start_time": "开始时间", + "end_time": "结束时间", + "timezone": "时区", + "allowed_operators": "允许的操作员", + "all_operators": "所有操作员(留空)", + "operators_hint": "以逗号分隔的用户名。留空则允许所有操作员。", + "last_updated_by": "最后更新者", + "access_policy_saved": "访问策略已保存", + "display_name": "显示名称", + "display_name_placeholder": "自定义名称(覆盖主机名)", + "note_placeholder": "关于此设备的备注", + "tabs": { + "overview": "概览", + "hardware": "硬件", + "metrics": "指标", + "connections": "连接", + "audit": "审计", + "info": "信息", + "history": "历史" }, - "common": { - "loading": "加载中...", - "confirm": "确认", - "alert": "提示", - "prompt": "请输入", - "copied": "已复制到剪贴板", - "save": "保存", - "saved": "已保存", - "error": "错误", - "success": "成功", - "warning": "警告", - "info": "信息", - "all": "全部", - "cancel": "取消", - "delete": "删除", - "actions": "操作", - "close": "关闭", - "required": "必填", - "name_required": "名称为必填项", - "active": "活动", - "inactive": "非活动", - "invalid_json": "无效的 JSON", - "field_required": "{field} 为必填项", - "back": "返回", - "edit": "编辑", - "yes": "是", - "no": "否" + "hardware": { + "cpu": "处理器", + "memory": "内存", + "disk": "磁盘", + "os": "操作系统", + "hostname": "主机名", + "uptime": "运行时间", + "load_avg": "平均负载", + "network": "网络适配器", + "no_data": "暂无硬件数据", + "title": "硬件信息", + "gpu": "显卡" }, - "nav": { - "main": "主要", - "tools": "工具", - "system": "系统", - "dashboard": "仪表板", - "devices": "设备", - "keys": "密钥", - "generator": "生成器", - "settings": "设置", - "users": "用户", - "inventory": "资产清单", - "tickets": "工单", - "help_requests": "帮助请求", - "activity": "活动", - "automation": "自动化", - "file_transfer": "文件传输", - "network": "网络", - "dataguard": "数据防护", - "reports": "报表", - "tenants": "租户", - "registrations": "注册", - "management": "管理", - "toggle_sidebar": "切换侧边栏", - "cdap": "CDAP 设备", - "fleet": "车队", - "scaling": "扩展", - "cross_platform": "跨平台", - "tokens": "设备令牌", - "organizations": "组织", - "policies": "策略", - "attestation": "设备认证", - "remote": "远程桌面", - "toolkit": "工具箱", - "security_audit": "安全审计", - "permissions": "权限管理", - "languages": "语言", - "resource_control": "资源控制", - "chat": "聊天", - "help": "帮助", - "expand_sidebar": "展开侧边栏", - "toggle_theme": "切换主题", - "sdk_studio": "SDK Studio", - "login": "登录", - "server_management": "服务器管理", - "server_attestation": "服务器性能认证" - }, - "auth": { - "login": "登录", - "logout": "退出", - "login_title": "登录", - "login_subtitle": "登录到 BetterDesk 控制台", - "username": "用户名", - "username_placeholder": "请输入用户名", - "password": "密码", - "password_placeholder": "请输入密码", - "remember_me": "记住我", - "login_failed": "登录失败,请检查您的凭据。", - "or": "或", - "login_sso": "通过 SSO 登录", - "login_sso_with": "通过 {{provider}} 登录", - "oidc_denied": "身份提供商拒绝了访问。", - "oidc_invalid": "无效的 OIDC 回调。请重试。", - "oidc_failed": "OIDC 身份验证失败。请重试。", - "oidc_error": "SSO 登录时发生错误。", - "oidc_no_account": "未找到您的帐户,且自动注册已禁用。", - "invalid_credentials": "用户名或密码无效。", - "username_collision": "已存在使用此用户名的本地账户。请使用本地密码登录,或请管理员重命名或删除冲突账户。", - "fill_all_fields": "请填写所有字段", - "logout_confirm": "确定要退出登录吗?", - "change_password": "修改密码", - "password_required": "密码为必填项", - "totp_title": "双因素认证", - "totp_subtitle": "请输入验证器应用中的 6 位验证码", - "totp_code": "验证码", - "totp_verify": "验证", - "totp_use_recovery": "使用恢复码", - "totp_use_code": "使用验证器代码", - "totp_recovery_code": "恢复码", - "totp_back_to_login": "返回登录", - "totp_invalid_code": "验证码无效,请重试。", - "totp_enter_code": "请输入 6 位验证码", - "totp_enter_recovery": "请输入恢复码", - "totp_session_expired": "会话已过期,请重新登录。", - "totp_rate_limited": "尝试次数过多,请稍后再试。", - "totp_already_enabled": "双因素认证已启用", - "pro_only_account": "此账户仅适用于 RustDesk 桌面客户端。请使用 RustDesk 应用登录。", - "passwords_mismatch": "两次输入的密码不一致", - "emergency_mode_banner": "Go 服务器不可达 — 紧急模式运行中(仅管理员,功能受限)" - }, - "dashboard": { - "title": "仪表板", - "subtitle": "RustDesk 服务器概览", - "total_devices": "设备总数", - "online_now": "当前在线", - "banned": "已封禁", - "active_connections": "活跃连接", - "offline_devices": "离线", - "server_status": "服务器状态", - "quick_actions": "快捷操作", - "manage_devices": "管理已连接的设备", - "view_keys": "查看服务器密钥", - "generate_config": "生成客户端配置", - "server_settings": "配置设置", - "greeting_morning": "早上好,{name}", - "greeting_afternoon": "下午好,{name}", - "greeting_evening": "晚上好,{name}", - "greeting_night": "晚安,{name}", - "health_overview": "健康概览", - "devices_online": "在线设备", - "active_alerts": "活动告警", - "recent_connections": "设备总数", - "server_uptime": "服务器运行时间", - "activity_feed": "最近活动", - "no_recent_activity": "暂无最近活动", - "just_now": "刚刚", - "ago": "前", - "tip_desktop_mode": "尝试桌面模式,获得带监控小组件的多窗口工作区。", - "tip_keyboard_shortcuts": "在任意位置按 Ctrl+K 可打开快速搜索命令面板。", - "tip_address_book": "通过 RustDesk 客户端登录即可在设备间同步地址簿。", - "tip_2fa": "在设置中启用双因素认证,以提升账户安全性。", - "tip_bulk_actions": "选择多个设备并使用批量操作一次性管理它们。", - "tip_theme": "在侧边栏设置中切换深色和浅色主题。", - "tip_cdap": "通过 CDAP 网关连接物联网设备和工业传感器。", - "tip_tutorials": "点击右下角的帮助按钮查看交互式教程。" - }, - "devices": { - "title": "设备", - "id": "ID", - "hostname": "主机名", - "username": "用户名", - "platform": "平台", - "version": "版本", - "ip_address": "IP 地址", - "note": "备注", - "last_seen": "最后在线", - "last_online": "最后在线", - "first_seen": "首次发现", - "created": "创建时间", - "status": "状态", - "ban_reason": "封禁原因", - "actions": "操作", - "search_placeholder": "搜索设备...", - "filter_all": "全部", - "filter_online": "在线", - "filter_offline": "离线", - "filter_banned": "已封禁", - "selected": "已选择", - "showing": "显示", - "of": "/", - "sync_status": "同步状态", - "sync_success": "状态同步成功", - "empty_title": "未找到设备", - "empty_text": "没有符合当前筛选条件的设备", - "edit_title": "设备详情", - "delete_title": "删除设备", - "delete_confirm": "确定要删除设备 {id} 吗?", - "delete_warning": "您即将永久删除此设备:", - "delete_permanent": "此操作无法撤销。与该设备关联的所有数据将从数据库中永久删除。", - "delete_success": "设备删除成功", - "revoke_option": "撤销设备", - "revoke_hint": "阻止设备 ID 并断开活动连接", - "revoke_success": "设备已成功撤销", - "details": "设备详情", - "ban_title": "封禁设备", - "ban_confirm": "确定要封禁设备 {id} 吗?", - "ban_success": "设备封禁成功", - "unban_title": "解除封禁", - "unban_confirm": "确定要解除设备 {id} 的封禁吗?", - "unban_success": "设备解除封禁成功", - "change_id": "更改 ID", - "change_id_title": "更改设备 ID", - "new_id": "新 ID", - "change_id_hint": "6-16 个字符,仅限字母、数字、短横线和下划线", - "change_id_success": "设备 ID 更改成功", - "id_length_error": "ID 必须为 6-16 个字符", - "id_format_error": "ID 只能包含字母、数字、短横线和下划线", - "bulk_delete_title": "批量删除设备", - "bulk_delete_confirm": "确定要删除 {count} 个设备吗?", - "bulk_delete_success": "已成功删除 {count} 个设备", - "columns": "列", - "toggle_columns": "切换可见列", - "not_found": "未找到设备", - "delete_failed": "删除设备失败", - "change_id_failed": "更改设备 ID 失败", - "invalid_id": "设备 ID 无效(需要 6-16 个字符)", - "invalid_id_format": "ID 格式无效(仅允许字母、数字、连字符和下划线)", - "id_exists": "设备 ID 已存在", - "no_selection": "未选择任何设备", - "device_type": "类型", - "filter_type_all": "所有类型", - "filter_type_rustdesk": "RustDesk", - "filter_type_desktop": "桌面", - "filter_type_scada": "SCADA", - "filter_type_iot": "物联网", - "filter_type_agent": "代理", - "cdap_connected": "CDAP 已连接", - "revoke": "撤销", - "access_policy": "访问策略", - "unattended_access": "无人值守访问", - "enable_unattended": "启用无人值守访问", - "access_password": "访问密码", - "password_configured": "密码已设置", - "no_password": "未设置密码", - "new_password": "新密码(留空保持当前密码)", - "clear_password": "清除密码", - "access_schedule": "访问时间表", - "enable_schedule": "启用基于时间的访问", - "allowed_days": "允许的天数", - "start_time": "开始时间", - "end_time": "结束时间", - "timezone": "时区", - "allowed_operators": "允许的操作员", - "all_operators": "所有操作员(留空)", - "operators_hint": "以逗号分隔的用户名。留空则允许所有操作员。", - "last_updated_by": "最后更新者", - "access_policy_saved": "访问策略已保存", - "display_name": "显示名称", - "display_name_placeholder": "自定义名称(覆盖主机名)", - "note_placeholder": "关于此设备的备注", - "tabs": { - "overview": "概览", - "hardware": "硬件", - "metrics": "指标", - "connections": "连接", - "audit": "审计", - "info": "信息", - "history": "历史" - }, - "hardware": { - "cpu": "处理器", - "memory": "内存", - "disk": "磁盘", - "os": "操作系统", - "hostname": "主机名", - "uptime": "运行时间", - "load_avg": "平均负载", - "network": "网络适配器", - "no_data": "暂无硬件数据", - "title": "硬件信息", - "gpu": "显卡" - }, - "tags": "Tags", - "filter_by_tags": "按标签筛选", - "no_tags": "No tags", - "all_groups": "所有分组", - "create_group": "创建分组", - "manage_groups": "管理分组", - "group_name": "分组名称", - "group_name_placeholder": "例如:媒体电脑", - "dynamic_group": "基于标签的动态分组", - "dynamic_group_hint": "带有此标签的设备会自动加入。", - "tag_filter": "Tag filter", - "group_allowed_users": "允许的用户", - "group_allowed_users_hint": "留空可让所有拥有设备权限的用户看到此分组。", - "group_tag_required": "动态分组必须设置标签筛选", - "group_invalid": "分组标识符无效", - "group_not_found": "未找到分组", - "group_saved": "设备分组已保存", - "groups_saved": "设备分组已保存", + "tags": "Tags", + "filter_by_tags": "按标签筛选", + "no_tags": "No tags", + "all_groups": "所有分组", + "create_group": "创建分组", + "manage_groups": "管理分组", + "group_name": "分组名称", + "group_name_placeholder": "例如:媒体电脑", + "dynamic_group": "基于标签的动态分组", + "dynamic_group_hint": "带有此标签的设备会自动加入。", + "tag_filter": "Tag filter", + "group_allowed_users": "允许的用户", + "group_allowed_users_hint": "留空可让所有拥有设备权限的用户看到此分组。", + "group_tag_required": "动态分组必须设置标签筛选", + "group_invalid": "分组标识符无效", + "group_not_found": "未找到分组", + "group_saved": "设备分组已保存", + "groups_saved": "设备分组已保存", "group_membership_added": "已添加到分组", "group_membership_removed": "已从分组移除", - "no_groups": "还没有分组", - "manual_groups": "手动分组", - "dynamic_memberships": "动态成员关系", - "group_allowed_user_groups": "允许的用户组", - "group_allowed_user_groups_hint": "所选用户组中的用户可以访问此设备分组。", - "no_user_groups": "没有用户组", - "edit_group": "编辑分组", - "delete_group": "删除分组", - "delete_group_confirm": "删除设备分组 {name}?", - "group_deleted": "设备分组已删除", - "folder_group_readonly": "文件夹关联的分组由文件夹管理。", - "manage_user_groups": "管理用户组", - "restore_failed": "恢复设备失败", - "no_signal_tooltip": "客户端最近联系了 API,但未在信号服务器(UDP :21116)上注册。服务器迁移后请重启客户端。", - "per_page": "每页" - }, - "keys": { - "title": "服务器密钥", - "subtitle": "RustDesk 客户端的公钥和配置", - "public_key": "公钥", - "qr_code": "二维码", - "server_info": "服务器信息", - "download": "下载密钥", - "show_qr": "显示二维码", - "qr_hint": "使用 RustDesk 移动端应用扫描此二维码", - "no_key": "未找到公钥", - "no_key_to_copy": "没有可复制的密钥", - "no_qr": "二维码不可用", - "download_success": "密钥文件已下载", - "not_found": "未找到密钥", - "api_not_found": "未找到 API 密钥" - }, - "settings": { - "title": "设置", - "subtitle": "控制台配置和账户设置", - "tab_general": "常规", - "tab_server": "服务器", - "tab_branding": "品牌", - "tab_backup": "备份", - "tab_auth": "认证", - "ldap_title": "LDAP / Active Directory", - "ldap_desc": "配置通过 LDAP 或 Active Directory 进行的外部身份验证。用户将能够使用其域凭据登录。", - "ldap_enabled": "启用 LDAP 认证", - "ldap_enabled_hint": "启用后,用户可以使用 LDAP/AD 凭据登录。本地帐户仍可作为备用。", - "ldap_connection": "服务器连接", - "ldap_host": "主机", - "ldap_port": "端口", - "ldap_use_tls": "LDAPS (TLS)", - "ldap_start_tls": "StartTLS", - "ldap_skip_verify": "跳过 TLS 验证", - "ldap_timeout": "连接超时 (秒)", - "ldap_timeout_hint": "等待 LDAP 服务器响应的秒数", - "ldap_bind_mode": "绑定模式", - "ldap_direct_bind": "直接绑定", - "ldap_direct_bind_hint": "使用 DN 模板直接绑定,而不是使用服务帐户进行搜索。", - "ldap_bind_dn": "绑定 DN(服务帐户)", - "ldap_bind_dn_hint": "用于搜索用户的只读服务帐户的可分辨名称。", - "ldap_bind_password": "绑定密码", - "ldap_base_dn": "基础 DN", - "ldap_base_dn_hint": "查找用户的搜索基础,例如 dc=example,dc=com", - "ldap_user_filter": "用户过滤器", - "ldap_user_filter_hint": "用于查找用户的 LDAP 过滤器。使用 {{username}} 作为占位符。默认值:(sAMAccountName={{username}})", - "ldap_direct_bind_dn": "直接绑定 DN 模板", - "ldap_direct_bind_dn_hint": "直接绑定的 DN 模板。使用 {{username}} 作为占位符,例如 uid={{username}},ou=users,dc=example,dc=com", - "ldap_user_attrs": "用户属性", - "ldap_attr_id": "用户名属性", - "ldap_attr_email": "邮箱属性", - "ldap_attr_name": "显示名称属性", - "ldap_group_mapping": "组 → 角色映射", - "ldap_group_base_dn": "组基础 DN", - "ldap_group_base_dn_hint": "留空则使用主基础 DN", - "ldap_group_filter": "组过滤器", - "ldap_group_attr_name": "组名属性", - "ldap_default_role": "默认角色", - "ldap_default_role_hint": "分配给 LDAP 组不匹配任何映射的用户的角色", - "ldap_role_viewer": "查看者", - "ldap_role_operator": "操作员", - "ldap_role_admin": "管理员", - "ldap_group_role_map": "组 → 角色映射", - "ldap_group_role_map_hint": "将 LDAP 组映射到 BetterDesk 角色。格式:GroupDN=角色,用 |(管道符)分隔。示例:CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", - "ldap_test_connection": "测试连接", - "ldap_testing": "测试中...", - "ldap_test_success": "连接成功!LDAP 服务器可访问且绑定凭据有效。", - "ldap_test_failed": "连接失败", - "ldap_save": "保存 LDAP 配置", - "ldap_saved": "LDAP 配置已成功保存", - "oidc_title": "OIDC / OAuth2 (SSO)", - "oidc_desc": "通过 OpenID Connect 提供商配置单点登录 (Azure AD、Okta、Google、Keycloak 等)。", - "oidc_enabled": "启用 OIDC 身份验证", - "oidc_enabled_hint": "允许用户通过外部身份提供商登录", - "oidc_provider": "身份提供商", - "oidc_display_name": "按钮显示名称", - "oidc_display_name_hint": "登录按钮上显示的文本 (例如 Azure AD、Okta)", - "oidc_issuer_url": "发行者 URL", - "oidc_issuer_url_hint": "OpenID Connect 发行者 URL (将自动发现)", - "oidc_client_id": "客户端 ID", - "oidc_client_secret": "客户端密钥", - "oidc_redirect_url": "重定向 URL (回调)", - "oidc_redirect_url_hint": "必须与身份提供商中的配置完全匹配。通常为: http(s)://your-server:21121/api/auth/oidc/callback", - "oidc_scopes": "作用域", - "oidc_use_pkce": "使用 PKCE (推荐)", - "oidc_auto_discovery": "自动发现", - "oidc_allow_signup": "自动创建用户", - "oidc_manual_endpoints": "手动端点 URL", - "oidc_authorization_url": "授权端点", - "oidc_token_url": "令牌端点", - "oidc_userinfo_url": "用户信息端点", - "oidc_claim_mapping": "声明映射", - "oidc_claim_username": "用户名声明", - "oidc_claim_email": "电子邮件声明", - "oidc_claim_name": "显示名称声明", - "oidc_claim_groups": "组声明", - "oidc_role_mapping": "角色映射", - "oidc_default_role": "默认角色", - "oidc_group_role_map": "组 → 角色映射", - "oidc_group_role_map_hint": "每行一个映射: 组名=角色 (例如 admins=admin, operators=operator)", - "oidc_test_discovery": "测试发现", - "oidc_testing": "测试中...", - "oidc_test_success": "发现成功!端点已解析。", - "oidc_test_failed": "发现失败", - "oidc_issuer_required": "测试发现需要发行者 URL", - "oidc_save": "保存 OIDC 配置", - "oidc_saved": "OIDC 配置已成功保存", - "language": "语言", - "change_password": "修改密码", - "password_desc": "更新您的账户密码", - "current_password": "当前密码", - "new_password": "新密码", - "confirm_password": "确认密码", - "save_password": "更新密码", - "password_changed": "密码修改成功", - "fill_all_fields": "请填写所有字段", - "passwords_not_match": "两次输入的密码不一致", - "password_requirements": "密码要求", - "password_requirements_not_met": "密码不符合要求", - "req_length": "至少 8 个字符", - "req_uppercase": "至少一个大写字母", - "req_lowercase": "至少一个小写字母", - "req_number": "至少一个数字", - "server_info": "服务器信息", - "version": "版本", - "database": "数据库", - "uptime": "运行时间", - "audit_log": "审计日志", - "audit_desc": "最近的控制台活动", - "no_audit_logs": "未找到审计日志", - "tutorials_title": "教程与引导", - "tutorials_desc": "管理控制台中显示的引导教程和帮助覆盖层", - "tutorials_enabled": "启用教程", - "tutorials_enabled_hint": "禁用后,教程将不会自动启动,帮助按钮将被隐藏", - "tutorials_reset_hint": "将所有教程标记为未查看,以便再次显示", - "tutorials_enabled_toast": "教程已启用", - "tutorials_disabled_toast": "教程已禁用", - "tutorials_reset_toast": "所有教程已重置", - "backend_title": "服务器后端", - "backend_desc": "选择用于设备管理和信令/中继服务的服务器后端。", - "backend_original": "标准版", - "backend_enhanced": "增强版", - "backend_rustdesk_desc": "标准 RustDesk 信令和中继服务器(hbbs + hbbr)。基础 HTTP API,端点有限。", - "backend_betterdesk_desc": "增强型 Go 服务器,具有完整 REST API、JWT 认证、黑名单、标签、实时 WebSocket 事件和审计日志。", - "backend_feature_signal": "信令服务器(ID 注册)", - "backend_feature_relay": "中继服务器(连接中继)", - "backend_feature_basic_api": "基础 REST API", - "backend_feature_full_api": "完整 REST API(34+ 个端点)", - "backend_feature_jwt": "JWT 认证 & TOTP 双因素认证", - "backend_feature_blocklist": "IP/ID 黑名单管理", - "backend_feature_tags": "设备标签与分组", - "backend_feature_audit": "审计事件日志", - "backend_feature_websocket": "实时 WebSocket 事件", - "backend_connection": "连接", - "backend_api_url": "API 地址", - "backend_test": "测试连接", - "backend_testing": "测试中...", - "backend_save": "应用后端", - "backend_saved": "服务器后端切换成功。设备数据将由新后端管理。", - "backend_save_failed": "切换服务器后端失败", - "backend_test_success": "连接成功!服务器可访问。", - "backend_test_failed": "连接失败。服务器不可访问。", - "backend_confirm_switch": "确定要切换服务器后端吗?这将改变设备的管理方式。", - "backend_unreachable": "无法切换:目标服务器不可访问。请先启动服务器。", - "invalid_backend": "无效的后端选择。请选择 'rustdesk' 或 'betterdesk'。", - "backend_status_running": "已连接", - "backend_status_unreachable": "不可访问", - "backend_status_error": "错误", - "backend_status_unknown": "未知", - "totp_title": "双因素认证", - "totp_desc": "使用 TOTP 验证器应用(Google Authenticator、Microsoft Authenticator、Authy 等)为您的账户增加额外的安全保护", - "totp_enabled": "已启用双因素认证", - "totp_enabled_desc": "您的账户已启用双因素认证保护。", - "totp_disabled": "未启用双因素认证", - "totp_disabled_desc": "启用双因素认证以增强账户安全性。", - "totp_setup": "启用双因素认证", - "totp_disable": "关闭双因素认证", - "totp_step1": "在手机上安装验证器应用", - "totp_step2": "扫描下方二维码", - "totp_step3": "输入 6 位验证码进行验证", - "totp_manual_key": "手动输入密钥", - "totp_enter_code": "输入验证码", - "totp_verify_enable": "验证并启用", - "totp_enabled_success": "双因素认证已启用!", - "totp_recovery_warning": "请将这些恢复码保存在安全的地方。每个恢复码只能使用一次。如果您无法访问验证器应用,可以使用这些恢复码登录。", - "totp_done": "完成", - "totp_disable_warning": "关闭双因素认证会降低您账户的安全性。请输入密码确认。", - "totp_disabled_success": "双因素认证已关闭。", - "tab_advanced": "高级", - "connection_mode_title": "连接策略", - "connection_mode_desc": "控制 RustDesk 桌面客户端的连接方式:尽可能直接 P2P(打洞),或始终通过中继。", - "connection_mode_label": "默认连接模式", - "connection_mode_p2p_first": "P2P 优先(推荐)— 尝试直连,失败时回退至中继", - "connection_mode_relay_only": "仅中继 — 所有会话通过中继服务器", - "connection_mode_advanced": "高级选项", - "connection_mode_fallback_ms": "P2P 回退超时(毫秒)", - "connection_mode_same_nat_relay": "当双方共享相同公网 IP 时强制使用中继(NAT 发夹)", - "connection_mode_network_hint": "P2P 需要客户端间可达 UDP 21116 端口。服务器需开放信令 TCP 21116、中继 TCP 21117、NAT 检测 TCP 21115。Web 浏览器客户端始终使用中继。", - "connection_mode_save": "保存", - "connection_mode_save_restart": "保存并重启服务器", - "connection_mode_saved": "连接模式已保存", - "connection_mode_restart_started": "服务器重启已启动", - "connection_mode_restart_failed": "服务器重启失败", - "connection_mode_not_configurable": "此部署无法更改连接模式(未找到 systemd 单元或 docker-compose)", - "connection_mode_compose_error": "在 docker-compose.yml 中找不到服务器环境节", - "connection_mode_source_saved": "保存于", - "connection_mode_source_defaults": "使用服务器默认值(面板不可写)", - "connection_mode_runtime": "活动服务器", - "advanced_title": "配置文件", - "advanced_desc": "直接编辑服务器配置文件。更改可能需要重启服务。每次保存前会创建备份副本。", - "advanced_warning": "这些文件包含机密(API 密钥、数据库密码、会话密钥)。仅在清楚操作影响时进行编辑。语法错误可能导致服务器无法启动。", - "advanced_files_label": "文件", - "advanced_select_file": "从列表中选择文件以查看或编辑其内容。", - "advanced_reload": "重新加载", - "advanced_save": "保存文件", - "advanced_apply_restart": "应用(重启服务)", - "advanced_saved": "配置文件已保存", - "advanced_restart_after_save": "配置已保存。立即重启受影响的服务以使更改生效?", - "advanced_restart_confirm": "重启相关 BetterDesk 服务?活动连接可能短暂中断。", - "advanced_restart_console_confirm": "重启 Web 控制台服务?浏览器会话将短暂断开,控制台恢复后页面将自动重载。", - "advanced_restart_started": "服务重启已启动", - "advanced_restart_done": "控制台已重启 — 正在重载页面…", - "advanced_restart_polling": "等待控制台恢复在线…", - "advanced_restart_timeout": "重启命令已发送,但控制台未及时响应。请检查 systemd/NSSM 日志并手动重载。", - "advanced_restart_failed": "服务重启失败(权限不足或服务未安装)", - "advanced_save_confirm": "保存对此文件的更改?将创建上一版本的备份。", - "advanced_unsaved_confirm": "存在未保存的更改。放弃?", - "advanced_no_files": "此系统上没有可用的配置文件。", - "advanced_readonly": "只读", - "advanced_missing": "缺失", - "advanced_new_file": "新文件(保存前不会创建)", - "advanced_new_file_hint": "新文件 — 添加内容并保存", - "advanced_backup_created": "备份已创建", - "advanced_restart_console": "重启 Web 控制台服务(例如 systemctl restart betterdesk-console)以使 .env 更改生效。", - "advanced_restart_goserver": "重启 BetterDesk Go 服务器以加载黑名单更改。", - "advanced_restart_systemd": "编辑 systemd 单元后,运行:systemctl daemon-reload && systemctl restart ", - "advanced_restart_generic": "重启受影响的服务以使更改生效。", - "advanced_error_unknown": "未知配置文件", - "advanced_error_not_found": "文件不存在", - "advanced_error_not_file": "路径不是普通文件", - "advanced_error_too_large": "文件超过最大可编辑大小(512 KB)", - "advanced_error_binary": "无法在面板中编辑二进制文件", - "advanced_error_invalid": "文件内容无效", - "advanced_error_not_writable": "控制台进程无权写入该文件", - "advanced_file_console-env": "控制台环境(.env)", - "advanced_file_console-env-local": "控制台覆盖(.env.local)", - "advanced_file_go-blocklist": "Go 服务器黑名单(blocklist.txt)", - "advanced_file_systemd-console": "systemd: betterdesk-console(服务单元)", - "advanced_file_systemd-server": "systemd: betterdesk-server(服务单元)", - "advanced_file_console-session-secret": "控制台会话密钥(.session_secret)", - "advanced_file_go-audit-log": "Go 服务器审计日志(audit.jsonl)", - "advanced_file_build-env": "代理构建环境(/etc/betterdesk/build.env)", - "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 配置)", - "advanced_file_docker-compose": "Docker: docker-compose.yml(编排)", - "advanced_restart_none": "此文件无需重启服务。", - "enrollment_title": "设备注册(RustDesk)", - "enrollment_desc": "控制新 RustDesk 客户端的注册方式以及操作员在注册请求页面的审批方式。", - "enrollment_require_approval": "需要操作员审批(托管模式)", - "enrollment_require_approval_hint": "启用后,未知客户端将排队等待操作员在\"注册请求\"中审批。", - "enrollment_rich_approve": "完整审批表单(名称、文件夹、分组、标签)", - "enrollment_rich_approve_hint": "在审批注册或 LAN 注册请求时显示详细对话框。", - "enrollment_tag_picker": "从现有设备标签中选择标签", - "enrollment_tag_picker_hint": "允许操作员从设备页面标签列表中选择,而不仅限于手动输入。", - "enrollment_open_requests": "打开注册请求", - "enrollment_pending_count": "{count} 个待处理注册请求" - }, - "audit": { - "time": "时间", - "user": "用户", - "action": "操作", - "details": "详情", - "action_login": "Login", - "action_login_failed": "登录失败", - "action_logout": "Logout", - "action_password_change": "密码已更改", - "action_2fa_enable": "已启用 2FA", - "action_2fa_disable": "已禁用 2FA", - "action_user_create": "用户已创建", - "action_user_update": "用户已更新", - "action_user_delete": "用户已删除", - "action_settings_update": "设置已更新", - "action_device_ban": "设备已封禁", - "action_device_unban": "设备已解封", - "action_device_delete": "设备已删除" - }, - "generator": { - "title": "客户端配置生成器", - "subtitle": "为 RustDesk 客户端生成配置", - "config_options": "配置选项", - "server_address": "服务器地址", - "server_address_hint": "您的服务器域名或 IP 地址", - "custom_port": "自定义端口", - "port_hint": "留空使用默认端口 (21116)", - "relay_server": "中继服务器", - "relay_placeholder": "留空则与 ID 服务器相同", - "relay_hint": "可选:单独的中继服务器地址", - "include_key": "在配置中包含公钥", - "generate": "生成配置", - "output": "配置输出", - "usage_title": "连接详情", - "generated": "配置已生成", - "server_required": "服务器地址为必填项", - "nothing_to_copy": "请先生成配置", - "bundles_title": "代理安装包", - "new_bundle": "新建安装包", - "editor_title": "安装包编辑器", - "empty_state": "选择左侧的安装包,或新建一个开始。", - "loading": "正在加载…", - "no_bundles": "还没有安装包。创建第一个安装包。", - "bundle_name": "安装包名称", - "bundle_name_hint": "仅用于内部标识,不会显示给最终用户。", - "short_link": "短下载链接", - "short_link_hint": "用于公开 URL(/d/…)。仅小写字母、数字和连字符(2–32 个字符)。从安装包名称自动填充 — 可缩短以便分享(例如 acme)。", - "branding_section": "品牌设置", - "company_name": "公司/品牌名称", - "short_text": "简短描述", - "contact_email": "联系邮箱", - "contact_phone": "联系电话", - "contact_url": "联系网站", - "logo": "徽标", - "logo_hint": "PNG、JPEG、SVG 或 WebP。最大 256 KB。", - "logo_clear": "移除徽标", - "primary_color": "主色", - "accent_color": "页眉颜色", - "default_lang": "默认语言", - "allow_unattended": "允许无人值守访问", - "allow_unattended_hint": "启用后,代理会显示用于操作员访问的永久密码。", - "save": "保存安装包", - "revoke": "撤销", - "unrevoke": "重新启用", - "revoked": "已撤销", - "preview_title": "实时预览", - "preview_hint": "最终用户代理窗口的大致外观。", - "preview_default_name": "BetterDesk 支持", - "preview_status_ready": "就绪", - "preview_id": "您的 ID", - "preview_password": "密码", - "preview_chat": "与支持人员聊天", - "preview_settings": "设置(仅管理员)", - "preview_quit": "退出(仅管理员)", - "download_link_title": "下载链接", - "download_link_hint": "将此链接分享给最终用户。他们会看到带品牌标识的下载页面。 更改短链接后,旧的 hex 链接仍然有效。", - "open_portal": "打开", - "created": "安装包已创建", - "saved": "安装包已保存", - "deleted": "安装包已删除", - "revoked_ok": "安装包已撤销", - "unrevoked_ok": "安装包已重新启用", - "link_copied": "链接已复制到剪贴板", - "copy_failed": "无法自动复制,请手动复制", - "unsaved_confirm": "放弃未保存的更改?", - "confirm_revoke": "撤销此安装包?下载链接将停止工作。", - "confirm_unrevoke": "重新启用此安装包?", - "confirm_delete": "永久删除此安装包?此操作无法撤销。", - "errors": { - "validation_failed": "验证失败", - "name_required": "必须填写安装包名称", - "company_name_required": "必须填写公司名称", - "logo_invalid": "徽标必须是有效的图片文件", - "logo_too_large": "徽标必须为 256 KB 或更小", - "logo_read_failed": "读取徽标文件失败", - "primary_color_invalid": "主色必须是十六进制值(例如 #2563eb)", - "accent_color_invalid": "页眉颜色必须是十六进制值(例如 #1e293b)", - "contact_url_invalid": "联系网站必须是有效的 URL", - "server_host_required": "公网服务器地址为必填项", - "server_host_invalid": "请输入有效的域名或 IPv4 地址", - "token_failed": "无法生成注册令牌 — 请检查服务器连接", - "rebuild_revoked": "无法重建已撤销的安装包 — 请先重新启用", - "slug_invalid": "短链接只能包含小写字母、数字和连字符", - "slug_too_short": "短链接至少需要 2 个字符", - "slug_too_long": "短链接最多 32 个字符", - "slug_taken": "此短链接已被其他安装包使用" - }, - "legacy_title": "客户端配置生成器", - "connection_section": "服务器连接", - "server_host": "公网服务器地址", - "server_host_placeholder": "support.example.com 或 203.0.113.10", - "server_host_hint": "最终用户访问您 BetterDesk 服务器的域名或公网 IP。端口取自控制台配置。", - "use_https": "使用 HTTPS / WSS(推荐)", - "enrollment_token": "设备注册", - "enrollment_token_pending": "按设备审批后分配", - "enrollment_token_set": "按设备 — 在注册中审批", - "enrollment_token_hint": "每次安装独立注册。在注册面板审批新设备后,服务器为每台计算机颁发唯一访问密钥。", - "enrollment_per_device": "按设备 — 在注册中审批", - "background_color": "窗口背景色", - "surface_color": "卡片背景色", - "text_color": "文本颜色", - "text_muted_color": "次要文本颜色", - "status_ready_color": "就绪指示器颜色", - "header_text_color": "标题文本颜色", - "builds_title": "客户端构建", - "builds_hint": "在此服务器上为各平台编译的安装程序。修复工具链错误或更新代理源后重新构建。", - "builds_loading": "正在加载构建状态…", - "builds_empty": "尚无构建排队 — 保存安装包或点击\"全部重建\"。", - "rebuild_all": "全部重建", - "rebuilding_all": "正在排队重建…", - "rebuild_queued": "所有平台构建已排队", - "rebuild_confirm": "重建此安装包的所有平台安装程序?现有就绪产物将被替换。", - "build_status_ready": "就绪", - "build_status_pending": "排队中", - "build_status_building": "构建中", - "build_status_failed": "失败", - "builds_summary": "{{ready}} 就绪 · {{pending}} 排队中 · {{building}} 构建中 · {{failed}} 失败", - "build_error_hint": "构建错误", - "preview_help": "请求帮助" - }, - "server": { - "port": "端口", - "api_port": "API 端口", - "id_server": "ID 服务器", - "relay_server": "中继服务器", - "api_key": "API 密钥" - }, - "status": { - "online": "在线", - "offline": "离线", - "banned": "已封禁", - "running": "运行中", - "stopped": "已停止", - "unknown": "未知", - "checking": "检查中...", - "label": "Status", - "no_signal": "无信号" - }, - "actions": { - "refresh": "刷新", - "copy": "复制", - "connect": "连接", - "connect_desktop": "通过桌面客户端连接", - "remote_viewer": "远程查看器", - "web_remote": "Web远程", - "details": "详情", - "edit": "编辑", - "delete": "删除", - "ban": "封禁", - "unban": "解除封禁", - "save": "保存", - "cancel": "取消", - "confirm": "确认", - "close": "关闭", - "clear": "清除", - "ok": "确定", - "saved": "保存成功", - "back": "返回", - "create": "创建", - "dismiss": "忽略", - "view_all": "查看全部", - "add": "添加", - "remove": "移除", - "cdap_viewer": "CDAP Snapshot Viewer" - }, - "time": { - "just_now": "刚刚", - "seconds_ago": "{count}秒前", - "minutes_ago": "{count}分钟前", - "hours_ago": "{count}小时前", - "days_ago": "{count}天前", - "day_mon": "Mon", - "day_tue": "Tue", - "day_wed": "Wed", - "day_thu": "Thu", - "day_fri": "Fri", - "day_sat": "Sat", - "day_sun": "Sun" - }, - "users": { - "title": "用户管理", - "subtitle": "管理控制台用户和权限", - "add_user": "添加用户", - "edit_user": "编辑用户", - "username": "用户名", - "username_placeholder": "请输入用户名", - "username_hint": "3-32 个字符,仅限字母、数字和下划线", - "password": "密码", - "password_placeholder": "请输入密码", - "password_hint": "至少 8 个字符,包含大小写字母、数字和符号", - "password_leave_empty": "留空保持不变", - "role": "角色", - "role_admin": "管理员", - "role_operator": "操作员", - "role_viewer": "查看者", - "role_pro": "Pro(仅限API)", - "role_super_admin": "超级管理员", - "role_server_admin": "服务器管理员", - "role_global_admin": "全局管理员", - "role_hint": "超级管理员拥有所有权限。服务器管理员管理服务器配置和密钥。全局管理员管理所有用户、组织和设备,但不能更改服务器配置。管理员等同于超级管理员。操作员管理设备。查看者只有只读权限。Pro 仅通过 RustDesk 客户端登录。", - "created": "创建时间", - "last_login": "最后登录", - "never": "从未", - "actions": "操作", - "create": "创建用户", - "edit": "编辑", - "reset_password": "重置密码", - "new_password": "新密码", - "delete_title": "删除用户", - "delete_confirm": "确定要删除用户 {username} 吗?", - "delete_success": "用户删除成功", - "user_created": "用户创建成功", - "user_updated": "用户更新成功", - "password_reset_success": "密码重置成功", - "empty_title": "未找到用户", - "empty_text": "添加用户以管理控制台访问权限", - "fill_required": "请填写所有必填字段", - "invalid_username": "用户名必须为 3-32 个字符,仅限字母、数字和下划线", - "username_exists": "用户名已存在", - "weak_password": "密码强度太弱", - "password_too_short": "密码至少需要 8 个字符", - "invalid_role": "无效的角色", - "cannot_demote_self": "您无法降低自己的权限", - "cannot_delete_self": "您无法删除自己的账户", - "last_admin": "无法删除最后一个管理员", - "admin_only": "此功能仅对管理员可用", - "password_required": "密码为必填项", - "not_found": "未找到用户", - "strength_weak": "弱", - "strength_medium": "中", - "strength_strong": "强", - "security_tips_title": "安全最佳实践", - "tip_strong_passwords": "为每个用户使用强且唯一的密码", - "tip_unique_accounts": "为每个人创建独立的账户", - "tip_viewer_role": "对只需要查看权限的用户使用查看者角色", - "tip_operator_role": "对需要管理设备但不需要管理用户的人员使用操作员角色", - "tip_audit_logs": "定期检查审计日志以发现可疑活动", - "organizations": "组织", - "user_organizations": "{username} 的组织", - "no_organizations": "用户未分配到任何组织", - "org_removed": "组织分配已删除", - "server_role_label": "服务器角色", - "server_role_hint": "决定该用户在整个控制台中可以执行的操作(面板访问、服务器配置、审计等)。", - "org_membership_section": "组织成员关系", - "org_membership_hint": "用户可以属于多个组织。组织角色只控制该组织内的权限,并且独立于上方的服务器角色。", - "column_organizations": "组织", - "no_orgs_short": "—", - "org_count_one": "{count} 个组织", - "org_count_many": "{count} 个组织", - "all_orgs_assigned": "该用户已经是所有组织的成员。", - "user_groups": "用户组", - "user_groups_hint": "用户组可用于授予对所选设备分组的访问权限。", - "loading_user_groups": "正在加载用户组...", - "no_user_groups": "没有可用的用户组", - "create_user_group": "创建分组", - "edit_user_group": "编辑用户组", - "delete_user_group": "删除用户组", - "delete_user_group_confirm": "删除用户组 {name}?成员将失去通过该组授予的访问权限。", - "user_group_created": "用户组已创建", - "user_group_updated": "用户组已更新", - "user_group_deleted": "用户组已删除", - "user_group_not_found": "未找到用户组", - "group_name": "组名称", - "group_name_placeholder": "操作员", - "group_note": "Note", - "group_note_placeholder": "可选备注", - "group_name_required": "必须填写组名称", - "group_members_count": "{count} 名成员", - "provider": "提供商", - "provider_local": "本地", - "provider_ldap": "LDAP/AD", - "provider_oidc": "SSO", - "password_managed_by_provider": "由身份提供商管理", - "provider_managed_hint": "此账户由外部身份提供商(LDAP/AD 或 SSO)管理。密码和角色由提供商控制,无法在此处更改。" - }, - "folders": { - "title": "文件夹", - "create": "创建文件夹", - "edit": "编辑文件夹", - "delete": "删除文件夹", - "name": "文件夹名称", - "name_placeholder": "请输入文件夹名称", - "name_required": "文件夹名称为必填项", - "name_too_long": "文件夹名称过长(最多 50 个字符)", - "color": "颜色", - "icon": "图标", - "not_found": "未找到文件夹", - "delete_confirm": "确定要删除此文件夹吗?设备将被取消分配。", - "delete_success": "文件夹删除成功", - "created": "文件夹创建成功", - "updated": "文件夹更新成功", - "no_devices_selected": "未选择设备", - "devices_moved": "设备移动成功", - "device_assigned": "设备已分配到文件夹", - "unassigned": "未分配", - "all_devices": "所有设备", - "drag_hint": "将设备拖拽到文件夹中进行分组", - "move_to": "移动到", - "toggle_sidebar": "切换侧边栏" - }, + "no_groups": "还没有分组", + "manual_groups": "手动分组", + "dynamic_memberships": "动态成员关系", + "group_allowed_user_groups": "允许的用户组", + "group_allowed_user_groups_hint": "所选用户组中的用户可以访问此设备分组。", + "no_user_groups": "没有用户组", + "edit_group": "编辑分组", + "delete_group": "删除分组", + "delete_group_confirm": "删除设备分组 {name}?", + "group_deleted": "设备分组已删除", + "folder_group_readonly": "文件夹关联的分组由文件夹管理。", + "manage_user_groups": "管理用户组", + "restore_failed": "恢复设备失败", + "no_signal_tooltip": "客户端最近联系了 API,但未在信号服务器(UDP :21116)上注册。服务器迁移后请重启客户端。", + "per_page": "每页" + }, + "keys": { + "title": "服务器密钥", + "subtitle": "RustDesk 客户端的公钥和配置", + "public_key": "公钥", + "qr_code": "二维码", + "server_info": "服务器信息", + "download": "下载密钥", + "show_qr": "显示二维码", + "qr_hint": "使用 RustDesk 移动端应用扫描此二维码", + "no_key": "未找到公钥", + "no_key_to_copy": "没有可复制的密钥", + "no_qr": "二维码不可用", + "download_success": "密钥文件已下载", + "not_found": "未找到密钥", + "api_not_found": "未找到 API 密钥" + }, + "settings": { + "title": "设置", + "subtitle": "控制台配置和账户设置", + "tab_general": "常规", + "tab_server": "服务器", + "tab_branding": "品牌", + "tab_backup": "备份", + "tab_auth": "认证", + "ldap_title": "LDAP / Active Directory", + "ldap_desc": "配置通过 LDAP 或 Active Directory 进行的外部身份验证。用户将能够使用其域凭据登录。", + "ldap_enabled": "启用 LDAP 认证", + "ldap_enabled_hint": "启用后,用户可以使用 LDAP/AD 凭据登录。本地帐户仍可作为备用。", + "ldap_connection": "服务器连接", + "ldap_host": "主机", + "ldap_port": "端口", + "ldap_use_tls": "LDAPS (TLS)", + "ldap_start_tls": "StartTLS", + "ldap_skip_verify": "跳过 TLS 验证", + "ldap_timeout": "连接超时 (秒)", + "ldap_timeout_hint": "等待 LDAP 服务器响应的秒数", + "ldap_bind_mode": "绑定模式", + "ldap_direct_bind": "直接绑定", + "ldap_direct_bind_hint": "使用 DN 模板直接绑定,而不是使用服务帐户进行搜索。", + "ldap_bind_dn": "绑定 DN(服务帐户)", + "ldap_bind_dn_hint": "用于搜索用户的只读服务帐户的可分辨名称。", + "ldap_bind_password": "绑定密码", + "ldap_base_dn": "基础 DN", + "ldap_base_dn_hint": "查找用户的搜索基础,例如 dc=example,dc=com", + "ldap_user_filter": "用户过滤器", + "ldap_user_filter_hint": "用于查找用户的 LDAP 过滤器。使用 {{username}} 作为占位符。默认值:(sAMAccountName={{username}})", + "ldap_direct_bind_dn": "直接绑定 DN 模板", + "ldap_direct_bind_dn_hint": "直接绑定的 DN 模板。使用 {{username}} 作为占位符,例如 uid={{username}},ou=users,dc=example,dc=com", + "ldap_user_attrs": "用户属性", + "ldap_attr_id": "用户名属性", + "ldap_attr_email": "邮箱属性", + "ldap_attr_name": "显示名称属性", + "ldap_group_mapping": "组 → 角色映射", + "ldap_group_base_dn": "组基础 DN", + "ldap_group_base_dn_hint": "留空则使用主基础 DN", + "ldap_group_filter": "组过滤器", + "ldap_group_attr_name": "组名属性", + "ldap_default_role": "默认角色", + "ldap_default_role_hint": "分配给 LDAP 组不匹配任何映射的用户的角色", + "ldap_role_viewer": "查看者", + "ldap_role_operator": "操作员", + "ldap_role_admin": "管理员", + "ldap_group_role_map": "组 → 角色映射", + "ldap_group_role_map_hint": "将 LDAP 组映射到 BetterDesk 角色。格式:GroupDN=角色,用 |(管道符)分隔。示例:CN=Admins,DC=example,DC=com=admin|CN=Ops,DC=example,DC=com=operator", + "ldap_test_connection": "测试连接", + "ldap_testing": "测试中...", + "ldap_test_success": "连接成功!LDAP 服务器可访问且绑定凭据有效。", + "ldap_test_failed": "连接失败", + "ldap_save": "保存 LDAP 配置", + "ldap_saved": "LDAP 配置已成功保存", + "oidc_title": "OIDC / OAuth2 (SSO)", + "oidc_desc": "通过 OpenID Connect 提供商配置单点登录 (Azure AD、Okta、Google、Keycloak 等)。", + "oidc_enabled": "启用 OIDC 身份验证", + "oidc_enabled_hint": "允许用户通过外部身份提供商登录", + "oidc_provider": "身份提供商", + "oidc_display_name": "按钮显示名称", + "oidc_display_name_hint": "登录按钮上显示的文本 (例如 Azure AD、Okta)", + "oidc_issuer_url": "发行者 URL", + "oidc_issuer_url_hint": "OpenID Connect 发行者 URL (将自动发现)", + "oidc_client_id": "客户端 ID", + "oidc_client_secret": "客户端密钥", + "oidc_redirect_url": "重定向 URL (回调)", + "oidc_redirect_url_hint": "必须与身份提供商中的配置完全匹配。通常为: http(s)://your-server:21121/api/auth/oidc/callback", + "oidc_scopes": "作用域", + "oidc_use_pkce": "使用 PKCE (推荐)", + "oidc_auto_discovery": "自动发现", + "oidc_allow_signup": "自动创建用户", + "oidc_manual_endpoints": "手动端点 URL", + "oidc_authorization_url": "授权端点", + "oidc_token_url": "令牌端点", + "oidc_userinfo_url": "用户信息端点", + "oidc_claim_mapping": "声明映射", + "oidc_claim_username": "用户名声明", + "oidc_claim_email": "电子邮件声明", + "oidc_claim_name": "显示名称声明", + "oidc_claim_groups": "组声明", + "oidc_role_mapping": "角色映射", + "oidc_default_role": "默认角色", + "oidc_group_role_map": "组 → 角色映射", + "oidc_group_role_map_hint": "每行一个映射: 组名=角色 (例如 admins=admin, operators=operator)", + "oidc_test_discovery": "测试发现", + "oidc_testing": "测试中...", + "oidc_test_success": "发现成功!端点已解析。", + "oidc_test_failed": "发现失败", + "oidc_issuer_required": "测试发现需要发行者 URL", + "oidc_save": "保存 OIDC 配置", + "oidc_saved": "OIDC 配置已成功保存", + "language": "语言", + "change_password": "修改密码", + "password_desc": "更新您的账户密码", + "current_password": "当前密码", + "new_password": "新密码", + "confirm_password": "确认密码", + "save_password": "更新密码", + "password_changed": "密码修改成功", + "fill_all_fields": "请填写所有字段", + "passwords_not_match": "两次输入的密码不一致", + "password_requirements": "密码要求", + "password_requirements_not_met": "密码不符合要求", + "req_length": "至少 8 个字符", + "req_uppercase": "至少一个大写字母", + "req_lowercase": "至少一个小写字母", + "req_number": "至少一个数字", + "server_info": "服务器信息", + "version": "版本", + "database": "数据库", + "uptime": "运行时间", + "audit_log": "审计日志", + "audit_desc": "最近的控制台活动", + "no_audit_logs": "未找到审计日志", + "tutorials_title": "教程与引导", + "tutorials_desc": "管理控制台中显示的引导教程和帮助覆盖层", + "tutorials_enabled": "启用教程", + "tutorials_enabled_hint": "禁用后,教程将不会自动启动,帮助按钮将被隐藏", + "tutorials_reset_hint": "将所有教程标记为未查看,以便再次显示", + "tutorials_enabled_toast": "教程已启用", + "tutorials_disabled_toast": "教程已禁用", + "tutorials_reset_toast": "所有教程已重置", + "backend_title": "服务器后端", + "backend_desc": "选择用于设备管理和信令/中继服务的服务器后端。", + "backend_original": "标准版", + "backend_enhanced": "增强版", + "backend_rustdesk_desc": "标准 RustDesk 信令和中继服务器(hbbs + hbbr)。基础 HTTP API,端点有限。", + "backend_betterdesk_desc": "增强型 Go 服务器,具有完整 REST API、JWT 认证、黑名单、标签、实时 WebSocket 事件和审计日志。", + "backend_feature_signal": "信令服务器(ID 注册)", + "backend_feature_relay": "中继服务器(连接中继)", + "backend_feature_basic_api": "基础 REST API", + "backend_feature_full_api": "完整 REST API(34+ 个端点)", + "backend_feature_jwt": "JWT 认证 & TOTP 双因素认证", + "backend_feature_blocklist": "IP/ID 黑名单管理", + "backend_feature_tags": "设备标签与分组", + "backend_feature_audit": "审计事件日志", + "backend_feature_websocket": "实时 WebSocket 事件", + "backend_connection": "连接", + "backend_api_url": "API 地址", + "backend_test": "测试连接", + "backend_testing": "测试中...", + "backend_save": "应用后端", + "backend_saved": "服务器后端切换成功。设备数据将由新后端管理。", + "backend_save_failed": "切换服务器后端失败", + "backend_test_success": "连接成功!服务器可访问。", + "backend_test_failed": "连接失败。服务器不可访问。", + "backend_confirm_switch": "确定要切换服务器后端吗?这将改变设备的管理方式。", + "backend_unreachable": "无法切换:目标服务器不可访问。请先启动服务器。", + "invalid_backend": "无效的后端选择。请选择 'rustdesk' 或 'betterdesk'。", + "backend_status_running": "已连接", + "backend_status_unreachable": "不可访问", + "backend_status_error": "错误", + "backend_status_unknown": "未知", + "totp_title": "双因素认证", + "totp_desc": "使用 TOTP 验证器应用(Google Authenticator、Microsoft Authenticator、Authy 等)为您的账户增加额外的安全保护", + "totp_enabled": "已启用双因素认证", + "totp_enabled_desc": "您的账户已启用双因素认证保护。", + "totp_disabled": "未启用双因素认证", + "totp_disabled_desc": "启用双因素认证以增强账户安全性。", + "totp_setup": "启用双因素认证", + "totp_disable": "关闭双因素认证", + "totp_step1": "在手机上安装验证器应用", + "totp_step2": "扫描下方二维码", + "totp_step3": "输入 6 位验证码进行验证", + "totp_manual_key": "手动输入密钥", + "totp_enter_code": "输入验证码", + "totp_verify_enable": "验证并启用", + "totp_enabled_success": "双因素认证已启用!", + "totp_recovery_warning": "请将这些恢复码保存在安全的地方。每个恢复码只能使用一次。如果您无法访问验证器应用,可以使用这些恢复码登录。", + "totp_done": "完成", + "totp_disable_warning": "关闭双因素认证会降低您账户的安全性。请输入密码确认。", + "totp_disabled_success": "双因素认证已关闭。", + "tab_advanced": "高级", + "connection_mode_title": "连接策略", + "connection_mode_desc": "控制 RustDesk 桌面客户端的连接方式:尽可能直接 P2P(打洞),或始终通过中继。", + "connection_mode_label": "默认连接模式", + "connection_mode_p2p_first": "P2P 优先(推荐)— 尝试直连,失败时回退至中继", + "connection_mode_relay_only": "仅中继 — 所有会话通过中继服务器", + "connection_mode_advanced": "高级选项", + "connection_mode_fallback_ms": "P2P 回退超时(毫秒)", + "connection_mode_same_nat_relay": "当双方共享相同公网 IP 时强制使用中继(NAT 发夹)", + "connection_mode_network_hint": "P2P 需要客户端间可达 UDP 21116 端口。服务器需开放信令 TCP 21116、中继 TCP 21117、NAT 检测 TCP 21115。Web 浏览器客户端始终使用中继。", + "connection_mode_save": "保存", + "connection_mode_save_restart": "保存并重启服务器", + "connection_mode_saved": "连接模式已保存", + "connection_mode_restart_started": "服务器重启已启动", + "connection_mode_restart_failed": "服务器重启失败", + "connection_mode_not_configurable": "此部署无法更改连接模式(未找到 systemd 单元或 docker-compose)", + "connection_mode_compose_error": "在 docker-compose.yml 中找不到服务器环境节", + "connection_mode_source_saved": "保存于", + "connection_mode_source_defaults": "使用服务器默认值(面板不可写)", + "connection_mode_runtime": "活动服务器", + "advanced_title": "配置文件", + "advanced_desc": "直接编辑服务器配置文件。更改可能需要重启服务。每次保存前会创建备份副本。", + "advanced_warning": "这些文件包含机密(API 密钥、数据库密码、会话密钥)。仅在清楚操作影响时进行编辑。语法错误可能导致服务器无法启动。", + "advanced_files_label": "文件", + "advanced_select_file": "从列表中选择文件以查看或编辑其内容。", + "advanced_reload": "重新加载", + "advanced_save": "保存文件", + "advanced_apply_restart": "应用(重启服务)", + "advanced_saved": "配置文件已保存", + "advanced_restart_after_save": "配置已保存。立即重启受影响的服务以使更改生效?", + "advanced_restart_confirm": "重启相关 BetterDesk 服务?活动连接可能短暂中断。", + "advanced_restart_console_confirm": "重启 Web 控制台服务?浏览器会话将短暂断开,控制台恢复后页面将自动重载。", + "advanced_restart_started": "服务重启已启动", + "advanced_restart_done": "控制台已重启 — 正在重载页面…", + "advanced_restart_polling": "等待控制台恢复在线…", + "advanced_restart_timeout": "重启命令已发送,但控制台未及时响应。请检查 systemd/NSSM 日志并手动重载。", + "advanced_restart_failed": "服务重启失败(权限不足或服务未安装)", + "advanced_save_confirm": "保存对此文件的更改?将创建上一版本的备份。", + "advanced_unsaved_confirm": "存在未保存的更改。放弃?", + "advanced_no_files": "此系统上没有可用的配置文件。", + "advanced_readonly": "只读", + "advanced_missing": "缺失", + "advanced_new_file": "新文件(保存前不会创建)", + "advanced_new_file_hint": "新文件 — 添加内容并保存", + "advanced_backup_created": "备份已创建", + "advanced_restart_console": "重启 Web 控制台服务(例如 systemctl restart betterdesk-console)以使 .env 更改生效。", + "advanced_restart_goserver": "重启 BetterDesk Go 服务器以加载黑名单更改。", + "advanced_restart_systemd": "编辑 systemd 单元后,运行:systemctl daemon-reload && systemctl restart ", + "advanced_restart_generic": "重启受影响的服务以使更改生效。", + "advanced_error_unknown": "未知配置文件", + "advanced_error_not_found": "文件不存在", + "advanced_error_not_file": "路径不是普通文件", + "advanced_error_too_large": "文件超过最大可编辑大小(512 KB)", + "advanced_error_binary": "无法在面板中编辑二进制文件", + "advanced_error_invalid": "文件内容无效", + "advanced_error_not_writable": "控制台进程无权写入该文件", + "advanced_file_console-env": "控制台环境(.env)", + "advanced_file_console-env-local": "控制台覆盖(.env.local)", + "advanced_file_go-blocklist": "Go 服务器黑名单(blocklist.txt)", + "advanced_file_systemd-console": "systemd: betterdesk-console(服务单元)", + "advanced_file_systemd-server": "systemd: betterdesk-server(服务单元)", + "advanced_file_console-session-secret": "控制台会话密钥(.session_secret)", + "advanced_file_go-audit-log": "Go 服务器审计日志(audit.jsonl)", + "advanced_file_build-env": "代理构建环境(/etc/betterdesk/build.env)", + "advanced_file_docker-supervisord": "Docker: supervisord.conf(supervisord 配置)", + "advanced_file_docker-compose": "Docker: docker-compose.yml(编排)", + "advanced_restart_none": "此文件无需重启服务。", + "enrollment_title": "设备注册(RustDesk)", + "enrollment_desc": "控制新 RustDesk 客户端的注册方式以及操作员在注册请求页面的审批方式。", + "enrollment_require_approval": "需要操作员审批(托管模式)", + "enrollment_require_approval_hint": "启用后,未知客户端将排队等待操作员在\"注册请求\"中审批。", + "enrollment_rich_approve": "完整审批表单(名称、文件夹、分组、标签)", + "enrollment_rich_approve_hint": "在审批注册或 LAN 注册请求时显示详细对话框。", + "enrollment_tag_picker": "从现有设备标签中选择标签", + "enrollment_tag_picker_hint": "允许操作员从设备页面标签列表中选择,而不仅限于手动输入。", + "enrollment_open_requests": "打开注册请求", + "enrollment_pending_count": "{count} 个待处理注册请求" + }, + "audit": { + "time": "时间", + "user": "用户", + "action": "操作", + "details": "详情", + "action_login": "Login", + "action_login_failed": "登录失败", + "action_logout": "Logout", + "action_password_change": "密码已更改", + "action_2fa_enable": "已启用 2FA", + "action_2fa_disable": "已禁用 2FA", + "action_user_create": "用户已创建", + "action_user_update": "用户已更新", + "action_user_delete": "用户已删除", + "action_settings_update": "设置已更新", + "action_device_ban": "设备已封禁", + "action_device_unban": "设备已解封", + "action_device_delete": "设备已删除" + }, + "generator": { + "title": "客户端配置生成器", + "subtitle": "为 RustDesk 客户端生成配置", + "alpha_badge": "ALPHA", + "alpha_tooltip": "早期功能 — 代理包生成器正在积极开发中。", + "config_options": "配置选项", + "server_address": "服务器地址", + "server_address_hint": "您的服务器域名或 IP 地址", + "custom_port": "自定义端口", + "port_hint": "留空使用默认端口 (21116)", + "relay_server": "中继服务器", + "relay_placeholder": "留空则与 ID 服务器相同", + "relay_hint": "可选:单独的中继服务器地址", + "include_key": "在配置中包含公钥", + "generate": "生成配置", + "output": "配置输出", + "usage_title": "连接详情", + "generated": "配置已生成", + "server_required": "服务器地址为必填项", + "nothing_to_copy": "请先生成配置", + "bundles_title": "代理安装包", + "new_bundle": "新建安装包", + "editor_title": "安装包编辑器", + "empty_state": "选择左侧的安装包,或新建一个开始。", + "loading": "正在加载…", + "no_bundles": "还没有安装包。创建第一个安装包。", + "bundle_name": "安装包名称", + "bundle_name_hint": "仅用于内部标识,不会显示给最终用户。", + "short_link": "短下载链接", + "short_link_hint": "用于公开 URL(/d/…)。仅小写字母、数字和连字符(2–32 个字符)。从安装包名称自动填充 — 可缩短以便分享(例如 acme)。", + "branding_section": "品牌设置", + "company_name": "公司/品牌名称", + "short_text": "简短描述", + "contact_email": "联系邮箱", + "contact_phone": "联系电话", + "contact_url": "联系网站", + "logo": "徽标", + "logo_hint": "PNG、JPEG、SVG 或 WebP。最大 256 KB。", + "logo_clear": "移除徽标", + "primary_color": "主色", + "accent_color": "页眉颜色", + "default_lang": "默认语言", + "allow_unattended": "允许无人值守访问", + "allow_unattended_hint": "启用后,代理会显示用于操作员访问的永久密码。", + "save": "保存安装包", + "revoke": "撤销", + "unrevoke": "重新启用", + "revoked": "已撤销", + "preview_title": "实时预览", + "preview_hint": "最终用户代理窗口的大致外观。", + "preview_default_name": "BetterDesk 支持", + "preview_status_ready": "就绪", + "preview_id": "您的 ID", + "preview_password": "密码", + "preview_chat": "与支持人员聊天", + "preview_settings": "设置(仅管理员)", + "preview_quit": "退出(仅管理员)", + "download_link_title": "下载链接", + "download_link_hint": "将此链接分享给最终用户。他们会看到带品牌标识的下载页面。 更改短链接后,旧的 hex 链接仍然有效。", + "open_portal": "打开", + "created": "安装包已创建", + "saved": "安装包已保存", + "deleted": "安装包已删除", + "revoked_ok": "安装包已撤销", + "unrevoked_ok": "安装包已重新启用", + "link_copied": "链接已复制到剪贴板", + "copy_failed": "无法自动复制,请手动复制", + "unsaved_confirm": "放弃未保存的更改?", + "confirm_revoke": "撤销此安装包?下载链接将停止工作。", + "confirm_unrevoke": "重新启用此安装包?", + "confirm_delete": "永久删除此安装包?此操作无法撤销。", "errors": { - "forbidden_title": "访问被拒绝", - "forbidden_message": "您没有权限访问此资源。", - "not_found_title": "页面未找到", - "not_found_message": "您要查找的页面不存在或已被移动。", - "server_error_title": "服务器错误", - "server_error_message": "出现了问题,请稍后重试。", - "go_home": "返回首页", - "try_again": "重试", - "load_devices_failed": "加载设备失败", - "load_key_failed": "加载密钥失败", - "load_qr_failed": "加载二维码失败", - "load_audit_failed": "加载审计日志失败", - "load_users_failed": "加载用户失败", - "load_folders_failed": "加载文件夹失败", - "download_failed": "下载失败", - "logout_failed": "退出登录失败", - "password_change_failed": "修改密码失败", - "language_change_failed": "切换语言失败", - "ban_failed": "封禁设备失败", - "unban_failed": "解除封禁失败", - "delete_failed": "删除设备失败", - "change_id_failed": "更改设备 ID 失败", - "bulk_delete_failed": "批量删除设备失败", - "sync_failed": "同步状态失败", - "error": "错误", - "not_found": "未找到", - "server_error": "服务器错误", - "load_device_failed": "加载设备失败", - "load_orgs_failed": "加载组织失败" + "validation_failed": "验证失败", + "name_required": "必须填写安装包名称", + "company_name_required": "必须填写公司名称", + "logo_invalid": "徽标必须是有效的图片文件", + "logo_too_large": "徽标必须为 256 KB 或更小", + "logo_read_failed": "读取徽标文件失败", + "primary_color_invalid": "主色必须是十六进制值(例如 #2563eb)", + "accent_color_invalid": "页眉颜色必须是十六进制值(例如 #1e293b)", + "contact_url_invalid": "联系网站必须是有效的 URL", + "server_host_required": "公网服务器地址为必填项", + "server_host_invalid": "请输入有效的域名或 IPv4 地址", + "token_failed": "无法生成注册令牌 — 请检查服务器连接", + "rebuild_revoked": "无法重建已撤销的安装包 — 请先重新启用", + "slug_invalid": "短链接只能包含小写字母、数字和连字符", + "slug_too_short": "短链接至少需要 2 个字符", + "slug_too_long": "短链接最多 32 个字符", + "slug_taken": "此短链接已被其他安装包使用" }, - "remote": { - "title": "远程桌面", - "connecting": "正在连接...", - "waiting_password": "等待密码", - "authenticating": "正在认证...", - "streaming": "已连接", - "disconnected": "已断开", - "error": "错误", - "status_idle": "空闲", - "password_required": "需要密码", - "enter_password_for": "请输入设备密码", - "password_placeholder": "设备密码", - "connect": "连接", - "reconnect": "重新连接", - "disconnect": "断开", - "back_to_devices": "返回设备列表", - "fullscreen": "全屏", - "toggle_audio": "切换音频", - "send_keys": "发送按键", - "scale_mode": "缩放模式", - "scale_fit": "适应窗口", - "scale_fill": "填充窗口", - "scale_original": "原始大小 (1:1)", - "scale_stretch": "拉伸填充", - "actions": "操作", - "lock_screen": "锁定屏幕", - "restart_remote": "重启远程设备", - "refresh_screen": "刷新屏幕", - "clipboard_paste": "从剪贴板粘贴", - "clipboard_empty": "剪贴板为空", - "clipboard_denied": "剪贴板访问被拒绝。需要HTTPS或未授予权限。", - "block_input": "阻止输入", - "display_settings": "显示设置", - "image_quality": "图像质量", - "quality_best": "最佳(全质量,60fps)", - "quality_balanced": "平衡", - "quality_low": "性能优先", - "show_cursor": "显示远程光标", - "lock_after_session": "会话结束后锁定", - "privacy_mode": "隐私模式", - "disable_clipboard": "禁用剪贴板", - "chat": "聊天", - "chat_placeholder": "输入消息...", - "record": "录制屏幕", - "view_only": "仅查看", - "pin_toolbar": "固定工具栏", - "monitors": "显示器", - "select_monitor": "选择显示器", - "quality_speed": "速度(低质量,60fps)", - "quality_quality": "质量(最佳,30fps)", - "recording_started": "录制已开始", - "recording_stopped": "录制已停止", - "download_recording": "下载录制", - "e2e_encrypted": "端到端加密", - "e2e_key_exchange": "正在建立安全通道...", - "confirm_restart": "确定要重启远程设备吗?", - "webcodecs_not_supported": "您的浏览器不支持 WebCodecs API。请使用 Chrome 94+ 或 Edge 94+。", - "webcodecs_insecure_context": "WebCodecs 在 HTTP 下不可用。视频使用软件回退。为获得最佳性能,请使用 HTTPS。", - "webcodecs_fallback_active": "软件视频解码器已激活(性能有限)", - "click_to_start": "点击开始", - "autoplay_blocked": "浏览器需要用户交互才能开始播放视频和音频。", - "start_playback": "开始播放", - "new_connection": "新建连接", - "device_id_placeholder": "输入设备ID", - "http_warning": "HTTP模式:仅支持H.264软件解码 (~15 FPS)。使用HTTPS可获得完整性能 (WebCodecs, VP9, 60 FPS)。", - "file_transfer": "文件传输", - "file_upload": "上传", - "file_download": "下载", - "file_empty": "此文件夹为空", - "file_loading": "加载中...", - "file_timeout": "远程设备未响应。文件传输可能不受支持或在远程计算机上已禁用。", - "file_transfers": "传输列表", - "file_complete": "完成", - "file_error": "传输失败", - "file_show_hidden": "显示隐藏文件", - "file_new_folder": "新建文件夹", - "file_new_folder_prompt": "输入文件夹名称:", - "file_parent": "上级目录", - "file_root": "根目录", - "file_rename": "重命名", - "file_rename_prompt": "输入新名称:", - "file_delete_confirm": "确定要删除此项吗?", - "file_cancelled": "传输已取消", - "2fa_required": "需要双因素验证", - "2fa_hint": "输入验证器应用中的6位数代码", - "2fa_invalid": "请输入有效的6位数代码", - "verify": "验证", - "use_cdap_fallback": "使用 CDAP 查看器", - "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", - "codec": "视频编解码器", - "codec_auto": "自动(推荐)" + "legacy_title": "客户端配置生成器", + "connection_section": "服务器连接", + "server_host": "公网服务器地址", + "server_host_placeholder": "support.example.com 或 203.0.113.10", + "server_host_hint": "最终用户访问您 BetterDesk 服务器的域名或公网 IP。端口取自控制台配置。", + "use_https": "使用 HTTPS / WSS(推荐)", + "enrollment_token": "设备注册", + "enrollment_token_pending": "按设备审批后分配", + "enrollment_token_set": "按设备 — 在注册中审批", + "enrollment_token_hint": "每次安装独立注册。在注册面板审批新设备后,服务器为每台计算机颁发唯一访问密钥。", + "enrollment_per_device": "按设备 — 在注册中审批", + "background_color": "窗口背景色", + "surface_color": "卡片背景色", + "text_color": "文本颜色", + "text_muted_color": "次要文本颜色", + "status_ready_color": "就绪指示器颜色", + "header_text_color": "标题文本颜色", + "builds_title": "客户端构建", + "builds_hint": "在此服务器上为各平台编译的安装程序。修复工具链错误或更新代理源后重新构建。", + "builds_loading": "正在加载构建状态…", + "builds_empty": "尚无构建排队 — 保存安装包或点击\"全部重建\"。", + "rebuild_all": "全部重建", + "rebuilding_all": "正在排队重建…", + "rebuild_queued": "所有平台构建已排队", + "rebuild_confirm": "重建此安装包的所有平台安装程序?现有就绪产物将被替换。", + "build_status_ready": "就绪", + "build_status_pending": "排队中", + "build_status_building": "构建中", + "build_status_failed": "失败", + "builds_summary": "{{ready}} 就绪 · {{pending}} 排队中 · {{building}} 构建中 · {{failed}} 失败", + "build_error_hint": "构建错误", + "preview_help": "请求帮助" + }, + "server": { + "port": "端口", + "api_port": "API 端口", + "id_server": "ID 服务器", + "relay_server": "中继服务器", + "api_key": "API 密钥" + }, + "status": { + "online": "在线", + "offline": "离线", + "banned": "已封禁", + "running": "运行中", + "stopped": "已停止", + "unknown": "未知", + "checking": "检查中...", + "label": "Status", + "no_signal": "无信号" + }, + "actions": { + "refresh": "刷新", + "copy": "复制", + "connect": "连接", + "connect_desktop": "通过桌面客户端连接", + "remote_viewer": "远程查看器", + "web_remote": "Web远程", + "details": "详情", + "edit": "编辑", + "delete": "删除", + "ban": "封禁", + "unban": "解除封禁", + "save": "保存", + "cancel": "取消", + "confirm": "确认", + "close": "关闭", + "clear": "清除", + "ok": "确定", + "saved": "保存成功", + "back": "返回", + "create": "创建", + "dismiss": "忽略", + "view_all": "查看全部", + "add": "添加", + "remove": "移除", + "cdap_viewer": "CDAP Snapshot Viewer" + }, + "time": { + "just_now": "刚刚", + "seconds_ago": "{count}秒前", + "minutes_ago": "{count}分钟前", + "hours_ago": "{count}小时前", + "days_ago": "{count}天前", + "day_mon": "Mon", + "day_tue": "Tue", + "day_wed": "Wed", + "day_thu": "Thu", + "day_fri": "Fri", + "day_sat": "Sat", + "day_sun": "Sun" + }, + "users": { + "title": "用户管理", + "subtitle": "管理控制台用户和权限", + "add_user": "添加用户", + "edit_user": "编辑用户", + "username": "用户名", + "username_placeholder": "请输入用户名", + "username_hint": "3-32 个字符,仅限字母、数字和下划线", + "password": "密码", + "password_placeholder": "请输入密码", + "password_hint": "至少 8 个字符,包含大小写字母、数字和符号", + "password_leave_empty": "留空保持不变", + "role": "角色", + "role_admin": "管理员", + "role_operator": "操作员", + "role_viewer": "查看者", + "role_pro": "Pro(仅限API)", + "role_super_admin": "超级管理员", + "role_server_admin": "服务器管理员", + "role_global_admin": "全局管理员", + "role_hint": "超级管理员拥有所有权限。服务器管理员管理服务器配置和密钥。全局管理员管理所有用户、组织和设备,但不能更改服务器配置。管理员等同于超级管理员。操作员管理设备。查看者只有只读权限。Pro 仅通过 RustDesk 客户端登录。", + "created": "创建时间", + "last_login": "最后登录", + "never": "从未", + "actions": "操作", + "create": "创建用户", + "edit": "编辑", + "reset_password": "重置密码", + "new_password": "新密码", + "delete_title": "删除用户", + "delete_confirm": "确定要删除用户 {username} 吗?", + "delete_success": "用户删除成功", + "user_created": "用户创建成功", + "user_updated": "用户更新成功", + "password_reset_success": "密码重置成功", + "empty_title": "未找到用户", + "empty_text": "添加用户以管理控制台访问权限", + "fill_required": "请填写所有必填字段", + "invalid_username": "用户名必须为 3-32 个字符,仅限字母、数字和下划线", + "username_exists": "用户名已存在", + "weak_password": "密码强度太弱", + "password_too_short": "密码至少需要 8 个字符", + "invalid_role": "无效的角色", + "cannot_demote_self": "您无法降低自己的权限", + "cannot_delete_self": "您无法删除自己的账户", + "last_admin": "无法删除最后一个管理员", + "admin_only": "此功能仅对管理员可用", + "password_required": "密码为必填项", + "not_found": "未找到用户", + "strength_weak": "弱", + "strength_medium": "中", + "strength_strong": "强", + "security_tips_title": "安全最佳实践", + "tip_strong_passwords": "为每个用户使用强且唯一的密码", + "tip_unique_accounts": "为每个人创建独立的账户", + "tip_viewer_role": "对只需要查看权限的用户使用查看者角色", + "tip_operator_role": "对需要管理设备但不需要管理用户的人员使用操作员角色", + "tip_audit_logs": "定期检查审计日志以发现可疑活动", + "organizations": "组织", + "user_organizations": "{username} 的组织", + "no_organizations": "用户未分配到任何组织", + "org_removed": "组织分配已删除", + "server_role_label": "服务器角色", + "server_role_hint": "决定该用户在整个控制台中可以执行的操作(面板访问、服务器配置、审计等)。", + "org_membership_section": "组织成员关系", + "org_membership_hint": "用户可以属于多个组织。组织角色只控制该组织内的权限,并且独立于上方的服务器角色。", + "column_organizations": "组织", + "no_orgs_short": "—", + "org_count_one": "{count} 个组织", + "org_count_many": "{count} 个组织", + "all_orgs_assigned": "该用户已经是所有组织的成员。", + "user_groups": "用户组", + "user_groups_hint": "用户组可用于授予对所选设备分组的访问权限。", + "loading_user_groups": "正在加载用户组...", + "no_user_groups": "没有可用的用户组", + "create_user_group": "创建分组", + "edit_user_group": "编辑用户组", + "delete_user_group": "删除用户组", + "delete_user_group_confirm": "删除用户组 {name}?成员将失去通过该组授予的访问权限。", + "user_group_created": "用户组已创建", + "user_group_updated": "用户组已更新", + "user_group_deleted": "用户组已删除", + "user_group_not_found": "未找到用户组", + "group_name": "组名称", + "group_name_placeholder": "操作员", + "group_note": "Note", + "group_note_placeholder": "可选备注", + "group_name_required": "必须填写组名称", + "group_members_count": "{count} 名成员", + "provider": "提供商", + "provider_local": "本地", + "provider_ldap": "LDAP/AD", + "provider_oidc": "SSO", + "password_managed_by_provider": "由身份提供商管理", + "provider_managed_hint": "此账户由外部身份提供商(LDAP/AD 或 SSO)管理。密码和角色由提供商控制,无法在此处更改。" + }, + "folders": { + "title": "文件夹", + "create": "创建文件夹", + "edit": "编辑文件夹", + "delete": "删除文件夹", + "name": "文件夹名称", + "name_placeholder": "请输入文件夹名称", + "name_required": "文件夹名称为必填项", + "name_too_long": "文件夹名称过长(最多 50 个字符)", + "color": "颜色", + "icon": "图标", + "not_found": "未找到文件夹", + "delete_confirm": "确定要删除此文件夹吗?设备将被取消分配。", + "delete_success": "文件夹删除成功", + "created": "文件夹创建成功", + "updated": "文件夹更新成功", + "no_devices_selected": "未选择设备", + "devices_moved": "设备移动成功", + "device_assigned": "设备已分配到文件夹", + "unassigned": "未分配", + "all_devices": "所有设备", + "drag_hint": "将设备拖拽到文件夹中进行分组", + "move_to": "移动到", + "toggle_sidebar": "切换侧边栏" + }, + "errors": { + "forbidden_title": "访问被拒绝", + "forbidden_message": "您没有权限访问此资源。", + "not_found_title": "页面未找到", + "not_found_message": "您要查找的页面不存在或已被移动。", + "server_error_title": "服务器错误", + "server_error_message": "出现了问题,请稍后重试。", + "go_home": "返回首页", + "try_again": "重试", + "load_devices_failed": "加载设备失败", + "load_key_failed": "加载密钥失败", + "load_qr_failed": "加载二维码失败", + "load_audit_failed": "加载审计日志失败", + "load_users_failed": "加载用户失败", + "load_folders_failed": "加载文件夹失败", + "download_failed": "下载失败", + "logout_failed": "退出登录失败", + "password_change_failed": "修改密码失败", + "language_change_failed": "切换语言失败", + "ban_failed": "封禁设备失败", + "unban_failed": "解除封禁失败", + "delete_failed": "删除设备失败", + "change_id_failed": "更改设备 ID 失败", + "bulk_delete_failed": "批量删除设备失败", + "sync_failed": "同步状态失败", + "error": "错误", + "not_found": "未找到", + "server_error": "服务器错误", + "load_device_failed": "加载设备失败", + "load_orgs_failed": "加载组织失败" + }, + "remote": { + "title": "远程桌面", + "connecting": "正在连接...", + "waiting_password": "等待密码", + "authenticating": "正在认证...", + "streaming": "已连接", + "disconnected": "已断开", + "error": "错误", + "status_idle": "空闲", + "password_required": "需要密码", + "enter_password_for": "请输入设备密码", + "password_placeholder": "设备密码", + "connect": "连接", + "reconnect": "重新连接", + "disconnect": "断开", + "back_to_devices": "返回设备列表", + "fullscreen": "全屏", + "toggle_audio": "切换音频", + "send_keys": "发送按键", + "scale_mode": "缩放模式", + "scale_fit": "适应窗口", + "scale_fill": "填充窗口", + "scale_original": "原始大小 (1:1)", + "scale_stretch": "拉伸填充", + "actions": "操作", + "lock_screen": "锁定屏幕", + "restart_remote": "重启远程设备", + "refresh_screen": "刷新屏幕", + "clipboard_paste": "从剪贴板粘贴", + "clipboard_empty": "剪贴板为空", + "clipboard_denied": "剪贴板访问被拒绝。需要HTTPS或未授予权限。", + "block_input": "阻止输入", + "display_settings": "显示设置", + "image_quality": "图像质量", + "quality_best": "最佳(全质量,60fps)", + "quality_balanced": "平衡", + "quality_low": "性能优先", + "show_cursor": "显示远程光标", + "lock_after_session": "会话结束后锁定", + "privacy_mode": "隐私模式", + "disable_clipboard": "禁用剪贴板", + "chat": "聊天", + "chat_placeholder": "输入消息...", + "record": "录制屏幕", + "view_only": "仅查看", + "pin_toolbar": "固定工具栏", + "monitors": "显示器", + "select_monitor": "选择显示器", + "quality_speed": "速度(低质量,60fps)", + "quality_quality": "质量(最佳,30fps)", + "recording_started": "录制已开始", + "recording_stopped": "录制已停止", + "download_recording": "下载录制", + "e2e_encrypted": "端到端加密", + "e2e_key_exchange": "正在建立安全通道...", + "confirm_restart": "确定要重启远程设备吗?", + "webcodecs_not_supported": "您的浏览器不支持 WebCodecs API。请使用 Chrome 94+ 或 Edge 94+。", + "webcodecs_insecure_context": "WebCodecs 在 HTTP 下不可用。视频使用软件回退。为获得最佳性能,请使用 HTTPS。", + "webcodecs_fallback_active": "软件视频解码器已激活(性能有限)", + "click_to_start": "点击开始", + "autoplay_blocked": "浏览器需要用户交互才能开始播放视频和音频。", + "start_playback": "开始播放", + "new_connection": "新建连接", + "device_id_placeholder": "输入设备ID", + "http_warning": "HTTP模式:仅支持H.264软件解码 (~15 FPS)。使用HTTPS可获得完整性能 (WebCodecs, VP9, 60 FPS)。", + "file_transfer": "文件传输", + "file_upload": "上传", + "file_download": "下载", + "file_empty": "此文件夹为空", + "file_loading": "加载中...", + "file_timeout": "远程设备未响应。文件传输可能不受支持或在远程计算机上已禁用。", + "file_transfers": "传输列表", + "file_complete": "完成", + "file_error": "传输失败", + "file_show_hidden": "显示隐藏文件", + "file_new_folder": "新建文件夹", + "file_new_folder_prompt": "输入文件夹名称:", + "file_parent": "上级目录", + "file_root": "根目录", + "file_rename": "重命名", + "file_rename_prompt": "输入新名称:", + "file_delete_confirm": "确定要删除此项吗?", + "file_cancelled": "传输已取消", + "2fa_required": "需要双因素验证", + "2fa_hint": "输入验证器应用中的6位数代码", + "2fa_invalid": "请输入有效的6位数代码", + "verify": "验证", + "use_cdap_fallback": "使用 CDAP 查看器", + "cdap_fallback_hint": "Open the lightweight JPEG-polling viewer that uses bd-signal/CDAP instead of the RustDesk relay. Useful when the peer is offline on the relay but reachable via the agent management channel.", + "codec": "视频编解码器", + "codec_auto": "自动(推荐)" + }, + "branding": { + "identity_title": "品牌标识", + "identity_desc": "自定义控制台中显示的应用名称和描述", + "app_name": "应用名称", + "app_description": "应用描述", + "logo_title": "标志", + "logo_desc": "选择标志在侧边栏和登录页面中的显示方式", + "logo_type_text": "文字标志", + "logo_type_icon": "Material 图标", + "logo_type_svg": "SVG 代码", + "logo_type_image": "图片 URL", + "logo_text": "标志文字", + "logo_text_hint": "显示为品牌标志的主要文字", + "logo_text_accent": "强调文字", + "logo_text_accent_hint": "标志下方的文字(例如产品名称或标语)", + "logo_icon_name": "图标名称", + "logo_icon_hint": "输入 Material Icons 名称(例如 dns、cloud、security)。参见 fonts.google.com/icons", + "logo_svg_code": "SVG 代码", + "logo_svg_hint": "在此粘贴您的 SVG 标记。支持包含路径和样式的完整 元素。", + "logo_image_upload": "上传图片", + "logo_image_choose": "选择图片文件", + "logo_image_hint": "PNG、JPG、GIF、WebP 或 SVG。最大 2 MB。图片保存在服务器上。", + "logo_image_url": "图片路径 / URL", + "logo_image_url_hint": "上传文件时自动填充,或手动输入 URL / 路径。", + "logo_image_too_large": "图片过大。最大允许 2 MB。", + "logo_image_invalid_type": "无效的文件类型。请使用 PNG、JPG、GIF、WebP 或 SVG。", + "logo_upload_success": "Logo 上传成功。", + "preview": "预览", + "colors_title": "配色方案", + "colors_desc": "自定义调色板。留空使用默认值。", + "colors_backgrounds": "背景色", + "colors_text": "文字色", + "colors_accents": "强调色", + "colors_borders": "边框色", + "typography_title": "字体排版", + "typography_desc": "选择标题和正文字体。字体将下载到服务器进行自托管。", + "font_heading": "标题字体", + "font_heading_hint": "用于标题(H1–H6)和文字标志", + "font_body": "正文字体", + "font_body_hint": "用于正文和界面元素", + "font_search_placeholder": "搜索字体...", + "font_system_default": "系统默认", + "font_clear": "清除", + "font_cat_all": "全部", + "font_downloaded_count": "字体已下载到服务器", + "import_export_title": "导入 / 导出", + "import_export_desc": "将主题另存为 JSON 文件或从其他实例导入", + "export_theme": "导出主题", + "import_theme": "导入主题", + "reset_defaults": "恢复默认", + "save_branding": "保存品牌设置", + "saved": "品牌设置已保存。正在重新加载...", + "exported": "主题已导出", + "imported": "主题导入成功。正在重新加载...", + "import_error": "主题导入失败。文件格式无效。", + "reset_confirm": "确定要将品牌设置恢复为默认值吗?此操作无法撤销。", + "reset_success": "品牌设置已恢复为默认值。正在重新加载...", + "powered_by": "技术支持", + "background_title": "背景与外观", + "background_desc": "设置控制台壁纸、渐变或纯色背景。卡片悬浮其上。", + "bg_type_none": "无", + "bg_type_color": "纯色", + "bg_type_gradient": "渐变", + "bg_type_image": "图片", + "bg_color": "背景颜色", + "bg_gradient": "CSS 渐变", + "bg_gradient_hint": "任何有效的 CSS 渐变,例如 linear-gradient(135deg, #1e293b, #0f172a)", + "bg_image_upload": "上传背景图片", + "bg_image_choose": "选择图片文件", + "bg_image_hint": "PNG、JPG、WebP 或 GIF。最大 8 MB。存储在服务器上。", + "bg_image_url": "图片路径 / URL", + "bg_size": "图片尺寸", + "bg_size_cover": "覆盖(填满屏幕)", + "bg_size_contain": "包含(适应)", + "bg_size_auto": "自动(原始)", + "bg_blur": "背景模糊", + "bg_overlay": "深色遮罩", + "bg_overlay_hint": "使背景变暗以提高文字可读性。", + "bg_image_too_large": "图片过大。最大尺寸为 8 MB。", + "bg_image_invalid_type": "文件类型无效。请使用 PNG、JPG、WebP 或 GIF。", + "bg_upload_success": "背景图片上传成功。", + "login_title": "登录页面", + "login_desc": "自定义登录界面的标题、副标题和背景。", + "login_heading": "登录标题", + "login_heading_placeholder": "欢迎回来", + "login_subheading": "登录副标题", + "login_subheading_placeholder": "登录您的账户", + "login_bg_inherit": "与控制台相同", + "agent_title": "代理下载页面", + "agent_desc": "自定义向最终用户显示的公共代理下载门户。", + "agent_show_powered": "显示 \"Powered by BetterDesk\"", + "agent_show_powered_hint": "在下载门户页脚显示 BetterDesk 署名。", + "footer_title": "页脚与版权", + "footer_desc": "添加显示在登录界面和控制台侧边栏的自定义页脚行。", + "footer_text": "页脚文字", + "footer_text_hint": "例如版权声明或公司名称。", + "show_powered": "显示 \"BetterDesk\" 署名", + "show_powered_hint": "在登录页脚和侧边栏显示 BetterDesk 名称和版本。", + "custom_css_title": "自定义 CSS", + "custom_css_desc": "高级:注入应用于整个控制台和登录页面的自定义 CSS。", + "custom_css_hint": "请谨慎使用。无效或不安全的规则会被过滤。最多 20,000 个字符。" + }, + "device_detail": { + "tab_overview": "概览", + "tab_tags": "标签与备注", + "tab_actions": "操作", + "section_identity": "身份信息", + "section_network": "网络", + "section_timestamps": "时间戳", + "section_connect": "连接", + "section_manage": "管理", + "folder": "文件夹", + "status_tier": "状态等级", + "device_banned": "此设备已被封禁", + "no_reason": "未提供原因", + "tags": "标签", + "no_tags": "此设备未分配标签", + "tag_placeholder": "输入标签名...", + "add_tag": "添加", + "tag_exists": "此标签已存在", + "notes": "备注", + "notes_placeholder": "添加关于此设备的备注...", + "danger_zone": "危险区域", + "action_connect_web": "网页远程", + "action_connect_web_desc": "通过浏览器远程桌面连接", + "action_native_remote": "BetterDesk 远程", + "action_native_remote_desc": "原生 JPEG 流 — 无需插件", + "action_connect_desktop": "桌面客户端", + "action_connect_desktop_desc": "在桌面客户端应用中打开", + "action_change_id_desc": "更改设备注册 ID", + "action_ban_desc": "阻止此设备连接", + "action_unban_desc": "允许此设备重新连接", + "action_delete_desc": "永久删除此设备", + "tab_hardware": "硬件", + "tab_metrics": "指标", + "tab_services": "服务", + "tab_processes": "进程", + "tab_events": "事件", + "tab_activity": "活动", + "tab_files": "文件", + "agent_lazy_hint": "单击此选项卡以从代理加载实时数据", + "agent_offline": "代理离线", + "agent_timeout": "代理响应超时", + "agent_error": "从代理加载数据失败", + "service_name": "名称", + "service_display": "显示名称", + "service_status": "状态", + "service_start": "启动模式", + "process_name": "名称", + "process_user": "用户", + "process_memory": "内存", + "section_system": "系统", + "section_cpu": "处理器", + "section_memory": "内存", + "section_displays": "显示器", + "section_encoding": "编码能力", + "section_live_metrics": "实时指标", + "section_current_usage": "当前使用情况", + "section_usage_history": "使用历史", + "os": "操作系统", + "version": "客户端版本", + "cpu_model": "CPU 型号", + "cpu_cores": "CPU 核心数", + "cpu_freq": "CPU 频率", + "total_memory": "总内存", + "metric_memory": "内存", + "metric_disk": "磁盘", + "metrics_updated": "已更新", + "device_groups": "分组", + "no_sysinfo": "暂无硬件信息", + "no_sysinfo_hint": "设备发送系统信息报告后将显示硬件信息", + "no_metrics": "暂无指标数据", + "no_metrics_hint": "设备发送心跳报告后将显示指标数据", + "chart_oldest": "← 最早", + "chart_newest": "最新 →" + }, + "inventory": { + "title": "资产清单", + "subtitle": "受管设备的硬件和软件清单", + "device_id": "设备 ID", + "hostname": "主机名", + "os": "操作系统", + "cpu": "CPU", + "cpu_cores": "CPU 核心数", + "cpu_usage": "CPU 使用率", + "memory": "内存", + "memory_total": "总内存", + "memory_used": "已用内存", + "memory_available": "可用内存", + "memory_usage": "内存使用率", + "swap": "交换空间", + "disks": "磁盘", + "disk_count": "磁盘数量", + "network": "网络", + "network_interfaces": "网络接口", + "software": "软件", + "software_count": "已安装软件", + "system": "系统", + "kernel": "内核", + "architecture": "架构", + "uptime": "运行时间", + "frequency": "频率", + "physical_cores": "物理核心", + "logical_cores": "逻辑核心", + "model": "型号", + "usage": "使用率", + "total": "总计", + "used": "已用", + "available": "可用", + "mount_point": "挂载点", + "removable": "可移动", + "mac_address": "MAC 地址", + "ip_addresses": "IP 地址", + "traffic": "流量", + "collect_now": "立即采集", + "collector_running": "采集器运行中", + "collector_stopped": "采集器已停止", + "last_upload": "最后上传", + "total_uploads": "总计", + "last_seen": "最后在线", + "collected_at": "采集时间", + "no_data": "暂无资产数据。点击「立即采集」收集系统信息。", + "no_devices": "未找到有资产数据的设备", + "detail_title": "设备资产详情", + "telemetry": "遥测", + "view_detail": "查看详情", + "export": "导出", + "refresh": "刷新" + }, + "tickets": { + "title": "服务台", + "subtitle": "支持工单和问题跟踪", + "create": "新建工单", + "edit": "编辑工单", + "delete": "删除工单", + "detail": "工单详情", + "ticket_id": "工单 ID", + "ticket_title": "标题", + "description": "描述", + "status": "状态", + "priority": "优先级", + "category": "分类", + "assigned_to": "分配给", + "created_by": "创建者", + "device": "设备", + "sla_due": "SLA 到期", + "created_at": "创建时间", + "updated_at": "更新时间", + "resolved_at": "解决时间", + "closed_at": "关闭时间", + "status_open": "待处理", + "status_in_progress": "处理中", + "status_resolved": "已解决", + "status_closed": "已关闭", + "priority_low": "低", + "priority_medium": "中", + "priority_high": "高", + "priority_critical": "紧急", + "category_general": "常规", + "category_hardware": "硬件", + "category_software": "软件", + "category_network": "网络", + "category_access": "访问权限", + "category_other": "其他", + "comments": "评论", + "add_comment": "添加评论", + "comment_placeholder": "写下评论...", + "internal_note": "内部备注(对终端用户不可见)", + "attachments": "附件", + "upload_attachment": "上传附件", + "download": "下载", + "connect_device": "连接到设备", + "no_tickets": "未找到工单", + "no_comments": "暂无评论", + "no_attachments": "暂无附件", + "title_required": "标题为必填项", + "delete_confirm": "确定要删除工单 #{id} 吗?", + "delete_success": "工单删除成功", + "created_success": "工单创建成功", + "updated_success": "工单更新成功", + "sla_overdue": "SLA 已逾期", + "filter_all": "全部", + "search_placeholder": "搜索工单...", + "assign_to_me": "分配给我", + "unassign": "取消分配", + "stats_total": "总计", + "stats_open": "待处理", + "stats_in_progress": "处理中", + "stats_resolved": "已解决", + "stats_closed": "已关闭" + }, + "activity": { + "title": "活动监控", + "subtitle": "应用使用和空闲跟踪", + "device": "设备", + "hostname": "主机名", + "sessions": "会话", + "idle_time": "空闲时间", + "active_time": "活跃时间", + "last_report": "最后报告", + "top_apps": "热门应用", + "app_name": "应用程序", + "window_title": "窗口标题", + "category": "分类", + "duration": "持续时间", + "started_at": "开始时间", + "ended_at": "结束时间", + "session_count": "会话数", + "total_active": "总活跃时间", + "total_idle": "总空闲时间", + "detail_count": "详细记录", + "no_data": "暂无活动数据", + "no_sessions": "暂无会话记录", + "filter_from": "从", + "filter_to": "到", + "filter_apply": "应用筛选", + "hours": "小时", + "minutes": "分钟", + "seconds": "秒", + "category_browser": "浏览器", + "category_productivity": "办公效率", + "category_communication": "通讯", + "category_development": "开发", + "category_media": "媒体", + "category_gaming": "游戏", + "category_system": "系统", + "category_other": "其他", + "summary": "摘要", + "details": "详情", + "refresh": "刷新", + "search": "搜索设备...", + "date_range": "日期范围", + "device_id": "设备ID", + "session_start": "会话开始", + "session_end": "会话结束", + "user": "用户", + "no_activity": "暂无活动记录", + "reported_at": "报告时间", + "detail": "详情", + "no_apps": "暂无应用" + }, + "automation": { + "title": "自动化与告警", + "subtitle": "告警规则、远程命令和 SMTP 配置", + "rules": "告警规则", + "rules_subtitle": "定义触发通知的条件", + "alerts": "告警历史", + "alerts_subtitle": "查看和确认已触发的告警", + "commands": "远程命令", + "commands_subtitle": "向远程设备发送命令", + "smtp": "SMTP 配置", + "smtp_subtitle": "邮件通知设置", + "rule_name": "规则名称", + "description": "描述", + "condition_type": "条件类型", + "condition_op": "运算符", + "condition_value": "阈值", + "severity": "严重程度", + "scope_device": "目标设备", + "scope_all": "所有设备", + "cooldown": "冷却时间(秒)", + "notify_emails": "通知邮箱", + "enabled": "已启用", + "disabled": "已禁用", + "create_rule": "创建规则", + "edit_rule": "编辑规则", + "delete_rule": "删除规则", + "acknowledge": "确认", + "acknowledged": "已确认", + "unacknowledged": "未确认", + "triggered_at": "触发时间", + "severity_info": "信息", + "severity_warning": "警告", + "severity_critical": "严重", + "op_gt": "大于", + "op_gte": "大于等于", + "op_lt": "小于", + "op_lte": "小于等于", + "op_eq": "等于", + "op_neq": "不等于", + "type_cpu_usage": "CPU 使用率 (%)", + "type_memory_usage": "内存使用率 (%)", + "type_disk_usage": "磁盘使用率 (%)", + "type_offline_duration": "离线时长 (秒)", + "type_idle_duration": "空闲时长 (秒)", + "type_custom": "自定义", + "command_type": "命令类型", + "command_payload": "命令 / 脚本", + "command_result": "结果", + "command_status": "状态", + "send_command": "发送命令", + "status_pending": "待处理", + "status_running": "运行中", + "status_completed": "已完成", + "status_failed": "失败", + "smtp_host": "SMTP 主机", + "smtp_port": "端口", + "smtp_secure": "使用 TLS", + "smtp_user": "用户名", + "smtp_pass": "密码", + "smtp_from": "发件人地址", + "smtp_test": "测试连接", + "smtp_save": "保存配置", + "smtp_test_success": "连接成功", + "smtp_test_failed": "连接失败", + "no_rules": "暂未配置告警规则", + "no_alerts": "暂无告警触发", + "no_commands": "暂无已发送的命令", + "id_payload_required": "设备 ID 和命令内容为必填项", + "no_commands_sent": "尚未发送任何命令" + }, + "file_transfer": { + "title": "文件传输", + "transfers": "传输列表", + "new_transfer": "新建传输", + "upload": "上传", + "download": "下载", + "direction": "方向", + "filename": "文件名", + "file_size": "文件大小", + "mime_type": "MIME 类型", + "progress": "进度", + "status": "状态", + "device": "设备", + "initiated_by": "发起者", + "created_at": "创建时间", + "cancel": "取消", + "cancel_confirm": "确定要取消此传输吗?", + "download_file": "下载文件", + "browse_files": "浏览文件", + "select_file": "选择文件", + "select_device": "选择设备", + "no_transfers": "暂无文件传输", + "status_pending": "待处理", + "status_active": "进行中", + "status_completed": "已完成", + "status_failed": "失败", + "status_cancelled": "已取消", + "bytes_transferred": "已传输字节", + "chunks": "分块", + "transfer_started": "传输已开始", + "transfer_completed": "传输已完成", + "transfer_failed": "传输失败", + "transfer_cancelled": "传输已取消", + "max_file_size": "最大文件大小:4 GB", + "error_too_large": "文件过大", + "error_no_device": "未选择设备", + "error_no_file": "未选择文件" + }, + "network": { + "title": "网络监控", + "targets": "监控目标", + "add_target": "添加目标", + "edit_target": "编辑目标", + "delete_target": "删除目标", + "delete_confirm": "确定要删除此目标吗?", + "target_name": "名称", + "host": "主机", + "port": "端口", + "url": "URL", + "check_type": "检查类型", + "timeout": "超时(毫秒)", + "interval": "间隔(毫秒)", + "enabled": "已启用", + "status": "状态", + "last_check": "最后检查", + "last_rtt": "最后 RTT", + "rtt_ms": "RTT(毫秒)", + "status_up": "正常", + "status_down": "宕机", + "status_unknown": "未知", + "check_now": "立即检查", + "history": "检查历史", + "stats": "统计", + "total_targets": "总目标数", + "targets_up": "正常目标", + "targets_down": "宕机目标", + "type_ping": "Ping (ICMP)", + "type_tcp": "TCP 端口", + "type_http": "HTTP", + "type_https": "HTTPS", + "tools": "网络工具", + "ping_tool": "Ping 测试", + "tcp_tool": "TCP 端口检查", + "http_tool": "HTTP 检查", + "dns_tool": "DNS 解析", + "monitor_start": "启动监控", + "monitor_stop": "停止监控", + "monitor_running": "监控运行中", + "monitor_stopped": "监控已停止", + "no_targets": "暂未配置监控目标", + "no_history": "暂无检查历史", + "error_code": "错误", + "status_code": "HTTP 状态码", + "search_targets": "搜索目标...", + "name": "名称", + "tab_targets": "目标", + "tab_tools": "工具", + "avg_latency": "平均延迟", + "type": "类型", + "latency": "延迟", + "check_history": "检查历史", + "name_host_required": "名称和主机为必填项", + "uptime": "运行时间", + "response_time": "响应时间", + "avg_response": "平均响应", + "charts": "图表", + "realtime": "实时", + "response_time_ms": "响应时间 (ms)", + "uptime_percent": "运行时间 %", + "last_24h": "过去24小时", + "last_7d": "过去7天", + "last_30d": "过去30天" + }, + "dataguard": { + "title": "数据防护 — DLP", + "policies": "DLP 策略", + "add_policy": "添加策略", + "edit_policy": "编辑策略", + "delete_policy": "删除策略", + "delete_confirm": "确定要删除此策略吗?", + "policy_name": "名称", + "policy_description": "描述", + "status": "状态", + "enabled": "已启用", + "disabled": "已禁用", + "rules": "规则", + "add_rule": "添加规则", + "rule_type": "规则类型", + "rule_type_usb": "USB 设备", + "rule_type_file": "文件操作", + "action": "动作", + "action_allow": "允许", + "action_block": "阻止", + "action_log": "仅记录", + "filter": "筛选", + "vid": "供应商 ID (VID)", + "pid": "产品 ID (PID)", + "serial": "序列号", + "device_class": "设备类型", + "drive_type": "驱动器类型", + "file_extensions": "文件扩展名", + "events": "DLP 事件", + "event_source": "来源", + "event_source_usb": "USB", + "event_source_file": "文件", + "event_type": "事件类型", + "event_details": "详情", + "no_policies": "暂未配置 DLP 策略", + "no_events": "暂无 DLP 事件记录", + "stats": "统计", + "total_events": "总事件数", + "blocked_events": "已阻止", + "logged_events": "已记录", + "usb_events": "USB 事件", + "file_events": "文件事件", + "device_id": "设备 ID", + "policy_matched": "匹配的策略", + "timestamp": "时间戳", + "drive_removable": "可移动", + "drive_fixed": "固定", + "drive_network": "网络", + "drive_cdrom": "CD-ROM", + "drive_unknown": "未知", + "total_policies": "策略总数", + "active_policies": "活动策略", + "violations": "Violations", + "blocked": "Blocked", + "tab_policies": "策略", + "tab_events": "Events", + "search_policies": "搜索策略...", + "create_policy": "创建策略", + "policy_type": "策略类型", + "scope": "Scope", + "events_count": "Events", + "search_events": "搜索事件...", + "event_time": "Event Time", + "device": "设备", + "policy": "策略", + "detail": "Detail", + "scope_help": "以逗号分隔设备 ID,或留空表示全部", + "scope_all": "所有设备", + "active": "Active", + "type_file_type": "文件类型", + "type_clipboard": "剪贴板", + "type_screen_share": "屏幕共享", + "type_file_transfer": "文件传输", + "policy_desc": "策略描述", + "type_usb": "USB" + }, + "reports": { + "title": "报表", + "generate": "生成报表", + "generate_csv": "导出 CSV", + "report_type": "报表类型", + "type_devices": "设备摘要", + "type_activity": "活动摘要", + "type_security": "安全报告", + "type_tickets": "工单报告", + "type_network": "网络报告", + "type_inventory": "资产报告", + "type_alerts": "告警报告", + "saved": "已保存的报表", + "save_report": "保存报表", + "delete_report": "删除报表", + "delete_confirm": "确定要删除此已保存的报表吗?", + "no_saved": "暂无已保存的报告", + "report_title": "标题", + "created_by": "创建者", + "created_at": "创建时间", + "filters": "筛选条件", + "date_from": "从", + "date_to": "到", + "device_filter": "设备 ID", + "generated_at": "生成时间", + "section": "数据部分", + "total_devices": "设备总数", + "online": "在线", + "offline": "离线", + "banned": "已封禁", + "platform_distribution": "平台分布", + "top_applications": "热门应用", + "total_active": "总活跃时间", + "total_idle": "总空闲时间", + "dlp_stats": "DLP 统计", + "banned_devices": "已封禁设备", + "audit_logs": "审计日志", + "ticket_stats": "工单统计", + "category_distribution": "分类分布", + "priority_distribution": "优先级分布", + "targets_status": "目标状态", + "os_distribution": "操作系统分布", + "avg_ram": "平均内存", + "alert_rules": "告警规则", + "recent_alerts": "最近告警", + "tab_generate": "生成", + "tab_saved": "已保存的报告", + "type_devices_desc": "所有注册设备概览", + "type_activity_desc": "应用使用和会话统计", + "type_security_desc": "安全事件和被禁用设备", + "type_tickets_desc": "支持工单统计和摘要", + "type_network_desc": "网络监控和运行时间数据", + "type_inventory_desc": "硬件和软件清单", + "type_alerts_desc": "告警和规则历史", + "report_name": "报告名称", + "format": "格式", + "save": "保存", + "preview": "预览", + "download": "下载", + "delete_saved": "删除已保存的报告", + "raw_json": "Raw JSON" + }, + "tenants": { + "title": "多租户", + "list": "租户列表", + "add_tenant": "添加租户", + "edit_tenant": "编辑租户", + "delete_tenant": "删除租户", + "delete_confirm": "确定要删除此租户吗?所有设备和用户分配将被移除。", + "name": "名称", + "slug": "标识符", + "contact_name": "联系人", + "contact_email": "联系邮箱", + "max_devices": "最大设备数", + "max_devices_hint": "0 = 不限", + "notes": "备注", + "active": "活跃", + "inactive": "停用", + "devices": "设备", + "users": "用户", + "assign_device": "分配设备", + "assign_devices": "分配设备", + "remove_device": "移除设备", + "assign_user": "分配用户", + "remove_user": "移除用户", + "no_tenants": "暂未配置租户", + "no_devices": "此租户暂无分配的设备", + "no_users": "此租户暂无分配的用户", + "stats": "租户统计", + "total_devices": "设备总数", + "online_devices": "在线设备", + "total_users": "用户总数", + "created_at": "创建时间", + "updated_at": "更新时间", + "slug_exists": "租户标识符已存在", + "total_tenants": "租户总数", + "active_tenants": "活跃租户", + "search": "搜索租户...", + "create_tenant": "创建租户", + "detail": "租户详情", + "contact": "联系方式", + "enabled": "已启用", + "disabled": "已禁用", + "max": "最大", + "info": "租户信息", + "status": "状态" + }, + "registrations": { + "title": "设备注册", + "subtitle": "管理通过局域网发现的设备注册请求", + "search_placeholder": "按设备 ID、主机名或 IP 搜索...", + "no_registrations": "暂无注册请求", + "col_device_id": "设备 ID", + "col_hostname": "主机名", + "col_platform": "平台", + "col_ip": "IP 地址", + "col_version": "版本", + "col_status": "状态", + "col_requested": "请求时间", + "col_actions": "操作", + "status_pending": "待审批", + "status_approved": "已批准", + "status_rejected": "已拒绝", + "approve_btn": "批准", + "approve_confirm": "确定要批准此设备吗?该设备将接收服务器凭据并可自动连接。", + "approved_success": "设备注册批准成功", + "reject_btn": "拒绝", + "reject_title": "拒绝注册", + "reject_confirm": "确定要拒绝此注册请求吗?", + "reject_reason": "原因(可选)", + "reject_reason_placeholder": "请输入拒绝原因...", + "rejected_success": "设备注册已拒绝", + "delete_confirm": "确定要删除此注册记录吗?", + "deleted_success": "注册记录已删除", + "enrollment_title": "设备登记", + "enrollment_subtitle": "来自 BetterDesk 桌面客户端的待处理登记请求", + "enrollment_empty": "没有待处理的登记请求", + "enrollment_approve": "Approve", + "enrollment_reject": "Reject", + "enrollment_display_name": "显示名称", + "enrollment_display_name_placeholder": "输入此设备的名称...", + "enrollment_sync_mode": "同步模式", + "enrollment_sync_silent": "静默 — 最少遥测", + "enrollment_sync_standard": "标准 — 均衡同步", + "enrollment_sync_turbo": "极速 — 高强度同步", + "enrollment_approved_success": "设备登记已批准", + "enrollment_rejected_success": "设备登记已拒绝", + "approve_title": "审批设备", + "field_name": "设备名称", + "field_name_placeholder": "请为此设备输入名称...", + "field_sync_mode": "同步模式", + "sync_standard": "标准 — 均衡同步", + "sync_silent": "静默 — 最小遥测", + "sync_turbo": "极速 — 积极同步", + "field_tags": "标签", + "field_tags_placeholder": "逗号分隔的标签(如 办公室, 笔记本)...", + "field_tags_existing": "现有标签", + "field_tag_add_placeholder": "添加新标签...", + "field_tag_add_btn": "添加", + "field_groups": "设备分组", + "field_folder": "文件夹", + "field_folder_none": "无文件夹", + "reject_ban_option": "封禁此设备", + "reject_ban_hint": "该设备将被封禁,无法发送新的注册请求。", + "banner_open_mode": "注册开放中 — 新 RustDesk 客户端无需操作员审批即可注册。在设置中启用托管模式以使用此队列。", + "banner_locked_mode": "注册已锁定 — 仅绑定令牌的设备可注册。需要托管模式以允许操作员审批未知客户端。", + "enrollment_settings_link": "注册设置" + }, + "backup": { + "title": "备份", + "desc": "下载完整的灾难恢复备份 — 包括数据库、服务器身份密钥、环境文件、品牌上传文件和 Go 服务器数据。该存档 (.tar.gz) 可以在新机器上还原,以便重新启动整个服务器。", + "restore_title": "还原", + "restore_desc": "上传之前下载的备份存档 (.tar.gz) 或旧版 JSON 配置快照。在下方选择要还原的组件。", + "stat_users": "用户", + "stat_settings": "设置", + "stat_folders": "文件夹", + "stat_groups": "分组", + "stat_strategies": "策略", + "stat_backend": "后端", + "stat_database": "数据库引擎", + "stat_keys": "包含服务器密钥", + "stat_env": "环境文件", + "stat_uploads": "品牌文件", + "download": "下载备份", + "creating": "正在创建备份...", + "download_success": "备份下载成功", + "upload": "上传备份", + "restore_confirm": "确定要从此备份还原吗?选定的组件将被覆盖。", + "restore_success": "备份还原成功。某些更改可能需要刷新页面。", + "restart_required": "某些还原的组件(密钥 / .env / Go 数据库)需要重启服务才能生效。", + "restored": "已还原", + "skipped": "已跳过", + "backup_date": "备份日期", + "security_warning": "此备份包含敏感信息(服务器密钥、环境文件、密码哈希和 2FA 密钥)。请妥善保管,切勿共享。", + "restore_warning": "还原密钥、环境文件或 Go 服务器数据库会覆盖服务器身份,随后需要重启服务。", + "opt_database": "数据库(所有表)", + "opt_database_hint": "重新导入所有控制台数据。实时应用,无需重启。", + "opt_uploads": "品牌文件", + "opt_uploads_hint": "标志和上传的图片。", + "opt_secrets": "服务器密钥和机密", + "opt_secrets_warning": "覆盖 Ed25519 服务器身份、API 密钥和会话密钥。需要重启服务。", + "opt_env": "环境文件 (.env)", + "opt_env_warning": "覆盖 SESSION_SECRET、API 密钥、数据库 DSN、端口和 TLS 设置。需要重启服务。", + "opt_godb": "Go 服务器数据库", + "opt_godb_warning": "覆盖 Go 服务器 SQLite 数据库(仅 SQLite 后端)。需要重启服务。", + "opt_settings": "控制台设置", + "opt_branding": "品牌 / 主题", + "opt_folders": "设备文件夹", + "opt_groups": "用户和设备分组", + "opt_addressbooks": "通讯录", + "opt_users": "用户账户", + "opt_users_warning": "破坏性操作:将使用备份数据替换所有用户账户。您可能会被登出。", + "no_file": "未选择备份文件", + "invalid_json": "无效的备份文件:不是有效的 JSON", + "invalid_format": "无效的备份文件:不是 BetterDesk 备份" + }, + "cdap": { + "device_detail": "CDAP 设备", + "loading": "加载中...", + "loading_widgets": "正在加载设备控件...", + "load_error": "无法加载设备数据", + "connected": "已连接", + "disconnected": "已断开", + "device_offline_msg": "设备当前处于离线状态。控件值可能已过时。", + "no_widgets": "没有可用的控件", + "no_widgets_desc": "此设备尚未注册包含控件定义的 CDAP 清单。", + "command_log": "命令日志", + "clear_log": "清除日志", + "confirm_command": "确认命令", + "select_option": "选择", + "cdap_status": "CDAP 状态", + "cdap_enabled": "CDAP 已启用", + "cdap_disabled": "CDAP 已禁用", + "cdap_devices": "CDAP 设备", + "cdap_connections": "活跃连接", + "send_command": "发送命令", + "command_sent": "命令发送成功", + "command_failed": "命令发送失败", + "devices_title": "CDAP 设备", + "devices_subtitle": "通过自定义设备应用协议连接的设备", + "stat_connected": "已连接", + "stat_port": "端口", + "search_devices": "搜索设备...", + "no_devices": "没有已连接的设备", + "no_devices_desc": "当前没有 CDAP 设备连接。设备连接到网关后将显示在此处。", + "gateway_disabled": "CDAP 网关已禁用", + "gateway_disabled_desc": "在服务器配置中设置 CDAP_ENABLED=true 以启用 CDAP 网关。", + "gateway_active": "活跃", + "toggle_enable": "启用 CDAP", + "toggle_disable": "禁用 CDAP", + "enabled_restart": "CDAP 已启用。需要重启服务器以应用更改。", + "disabled_restart": "CDAP 已禁用。需要重启服务器以应用更改。", + "widgets": "个控件", + "type_all": "全部", + "type_iot": "物联网", + "type_scada": "SCADA", + "type_os_agent": "OS 代理", + "type_network": "网络", + "type_camera": "摄像头", + "type_custom": "自定义", + "active_alerts": "活动告警", + "alert_fired": "告警触发", + "alert_cleared": "告警已清除", + "no_alerts": "无活动告警", + "connect_terminal": "连接终端", + "table_search": "搜索...", + "just_now": "刚刚", + "terminal_connecting": "正在连接设备...", + "terminal_disconnected": "已断开连接", + "terminal_error": "终端连接失败", + "linked_devices": "关联设备", + "link_device": "关联设备", + "unlink_device": "取消关联", + "no_linked_devices": "无关联设备", + "unlink_confirm": "确定要取消关联此设备吗?", + "link_prompt": "输入要关联的设备 Peer ID:", + "connect_desktop": "连接桌面", + "connect_video": "连接视频流", + "connect_files": "浏览文件", + "connect_audio": "连接音频", + "upload_file": "上传", + "desktop_connecting": "连接中...", + "video_connecting": "连接中...", + "files_connecting": "连接中...", + "audio_connecting": "连接中...", + "audio_streaming": "播放中", + "clipboard_in": "已接收剪贴板", + "clipboard_out": "已发送剪贴板", + "monitor_select": "选择显示器", + "keyframe_request": "请求关键帧", + "quality_auto": "自动画质" + }, + "notifications": { + "title": "通知", + "empty": "没有新通知", + "mark_all_read": "全部标记为已读", + "see_all": "查看所有求助请求", + "help_request": "求助请求", + "just_now": "刚刚" + }, + "desktop": { + "switch_mode": "桌面模式", + "console_mode": "控制台模式", + "loading": "加载中...", + "minimize": "最小化", + "maximize": "最大化", + "restore": "还原", + "close": "关闭", + "widgets_mode": "小组件", + "windows_mode": "窗口", + "wallpaper": "壁纸", + "add_widget": "添加小组件", + "remove_widget": "移除小组件", + "pop_out_widget": "弹出", + "pop_in_widget": "收回", + "configure": "配置", + "search_widgets": "搜索小组件...", + "cat_monitoring": "监控", + "cat_devices": "设备", + "cat_tools": "工具", + "cat_general": "通用", + "notes_placeholder": "在这里写笔记...", + "search_placeholder": "搜索设备、页面、设置...", + "search_pages": "页面", + "search_devices": "设备", + "search_no_results": "无结果", + "exit_desktop": "退出桌面模式", + "refresh": "刷新", + "widget_clock": "Clock", + "widget_device_status": "设备状态", + "widget_server_health": "服务器信息", + "widget_system_stats": "设备仪表", + "widget_device_list": "设备列表", + "widget_quick_actions": "快捷操作", + "widget_recent_activity": "最近活动", + "widget_notes": "Notes", + "widget_network_monitor": "网络监控", + "widget_tickets_summary": "Tickets", + "widget_iframe": "Web Embed", + "widget_cdap_devices": "CDAP 设备", + "widget_uptime": "Uptime", + "widget_port_status": "Port Status", + "widget_device_grid": "设备网格", + "widget_multi_gauge": "服务器仪表", + "widget_weekly_chart": "每周活动", + "widget_quick_controls": "快速控制", + "widget_bandwidth": "Bandwidth", + "widget_connection_stats": "连接统计", + "widget_weather": "天气", + "widget_world_clock": "世界时钟", + "widget_bookmarks": "书签", + "widget_user_sessions": "用户会话", + "widget_alert_feed": "警报源", + "label_online": "Online", + "label_offline": "Offline", + "label_total": "Total", + "label_blocked": "Blocked", + "label_banned": "Banned", + "label_active": "Active", + "label_service": "Service", + "label_port": "Port", + "label_uptime_prefix": "Uptime:", + "label_uptime": "运行时间", + "label_no_devices": "没有设备", + "label_no_activity": "No activity", + "label_no_targets": "No targets", + "label_unavailable": "不可用", + "label_open": "打开", + "label_in_progress": "In Progress", + "label_resolved": "Resolved", + "label_set_url": "在配置中设置 URL", + "label_server_uptime": "服务器运行时间", + "label_merged_info": "已合并到服务器信息小部件", + "label_with_notes": "含备注", + "label_metric": "Metric", + "label_count": "Count", + "label_total_devices": "设备总数", + "label_throughput": "Throughput", + "label_active_relays": "活动中继", + "label_total_relayed": "中继总数", + "label_total_bytes": "Total Bytes", + "label_filter_devices": "筛选设备...", + "label_all": "All", + "label_ban": "Ban", + "label_unban": "Unban", + "label_connect": "Connect", + "label_no_cdap_devices": "没有 CDAP 设备", + "action_add_widget": "添加小部件", + "label_merged_server_info": "已合并到服务器信息小部件", + "wp_images": "图片", + "wp_colors": "纯色", + "wp_custom_color": "自定义颜色", + "wp_fit_style": "样式", + "wp_fill": "填充", + "wp_fit": "适应", + "wp_stretch": "拉伸", + "wp_center": "居中", + "wp_unavailable": "此服务器上未安装壁纸图片。", + "wp_download_hint": "将PNG图片放入 public/wallpapers/ 目录以启用壁纸选择。", + "widget_calendar": "日历", + "widget_process_monitor": "进程监控", + "widget_disk_usage": "磁盘使用", + "widget_log_viewer": "日志查看器", + "widget_speed_test": "速度测试", + "widget_database_stats": "数据库统计", + "widget_docker_containers": "Docker 容器", + "widget_shell_command": "Shell 命令", + "widget_device_map": "设备地图", + "widget_remote_connect": "远程连接", + "label_no_online": "没有在线设备", + "label_no_events": "今天没有事件", + "label_event_title": "事件标题:", + "label_no_data": "暂无数据", + "label_download_speed": "下载速度", + "label_latency": "延迟", + "label_server": "服务器", + "label_run_test": "运行测试", + "label_testing": "测试中...", + "label_table": "表", + "label_rows": "行数", + "label_last_backup": "最后备份", + "label_no_containers": "没有容器", + "label_docker_unavailable": "Docker 不可用", + "label_no_command": "未配置命令", + "label_no_output": "暂无输出", + "label_run": "运行", + "label_presets": "预设", + "label_save_preset": "保存预设", + "label_load_preset": "加载预设", + "label_preset_name": "预设名称:", + "label_preset_monitoring": "监控", + "label_preset_helpdesk": "帮助台", + "label_preset_minimal": "最小化", + "label_preset_developer": "开发者", + "label_snap_layout": "吸附布局", + "label_auto_arrange": "自动排列", + "label_zone_layout": "区域布局", + "label_2col_equal": "两列(等宽)", + "label_2col_wide": "两列(60/40)", + "label_3col": "三列", + "label_2x2_grid": "2×2 网格", + "label_1_2": "1 + 2", + "label_1_3": "1 + 3", + "widget_group": "小组件分组", + "ungroup_widgets": "取消分组", + "group_widgets": "分组选中小组件", + "snap_layouts": "贴靠布局", + "snap_left": "贴靠到左侧", + "snap_right": "贴靠到右侧", + "snap_top_left": "贴靠到左上", + "snap_top_right": "贴靠到右上", + "snap_bottom_left": "贴靠到左下", + "snap_bottom_right": "贴靠到右下", + "aero_shake": "摇动最小化其他窗口", + "zone_resize": "拖动边框调整区域大小", + "zone_borders": "可拖动区域边框", + "app_drawer": "应用程序", + "search_apps": "搜索应用...", + "edit_shortcuts": "编辑快捷方式", + "widgets": "小部件", + "theme": "主题", + "fullscreen": "Fullscreen", + "help": "Help" + }, + "desktop_login": { + "click_to_sign_in": "点击任意位置或按任意键登录", + "username_placeholder": "用户名", + "password_placeholder": "密码", + "sign_in": "登录", + "verify": "验证", + "totp_title": "双因素认证", + "totp_subtitle": "输入验证器应用中的6位数代码", + "back_to_login": "返回登录", + "fill_all_fields": "请填写所有字段", + "invalid_credentials": "用户名或密码无效", + "invalid_code": "验证码无效", + "enter_6_digits": "请输入全部6位数字", + "network_error": "网络错误 — 请检查连接", + "session_expired": "会话已过期。请重新登录。" + }, + "permissions": { + "title": "权限管理", + "subtitle": "管理基于角色的权限和自定义覆盖", + "info_title": "权限如何工作", + "info_desc": "每个角色都有默认权限。您可以通过切换下面的开关来为每个角色添加或删除单独的权限。自定义覆盖会高亮显示,可以随时恢复为默认值。", + "select_role": "选择角色", + "select_role_placeholder": "选择角色...", + "reset_overrides": "重置所有覆盖", + "granted": "已授权", + "overrides": "覆盖", + "level": "级别", + "super_admin_tag": "完全访问", + "server_level_tag": "服务器级别", + "custom": "自定义", + "default": "默认", + "revert": "恢复默认", + "saved": "权限已更新", + "reverted": "已恢复默认", + "all_reverted": "所有覆盖已恢复", + "confirm_reset": "将此角色的所有自定义覆盖重置为默认值?", + "empty_title": "选择角色", + "empty_desc": "从上方下拉列表中选择一个角色以查看和管理其权限。", + "locked_title": "超级管理员", + "locked_desc": "超级管理员默认拥有所有权限,无法自定义。", + "cat_device": "设备", + "cat_user": "用户", + "cat_server": "服务器", + "cat_org": "组织", + "cat_audit": "审计与监控", + "cat_cdap": "CDAP", + "cat_enrollment": "注册", + "cat_chat": "聊天", + "cat_branding": "品牌", + "perm_device_view": "查看设备", + "perm_device_connect": "连接设备", + "perm_device_edit": "编辑设备", + "perm_device_delete": "删除设备", + "perm_device_ban": "封禁/解封设备", + "perm_device_change_id": "更改设备ID", + "perm_user_view": "查看用户", + "perm_user_create": "创建用户", + "perm_user_edit": "编辑用户", + "perm_user_delete": "删除用户", + "perm_server_config": "服务器配置", + "perm_server_keys": "管理API密钥", + "perm_org_create": "创建组织", + "perm_org_edit": "编辑组织", + "perm_org_delete": "删除组织", + "perm_org_manage_users": "管理组织用户", + "perm_org_manage_devices": "管理组织设备", + "perm_audit_view": "查看审计日志", + "perm_metrics_view": "查看指标", + "perm_blocklist_edit": "编辑黑名单", + "perm_cdap_view": "查看CDAP设备", + "perm_cdap_command": "发送CDAP命令", + "perm_cdap_terminal": "CDAP终端访问", + "perm_cdap_files": "CDAP文件访问", + "perm_enrollment_manage": "管理注册", + "perm_enrollment_approve": "审批注册", + "perm_chat_access": "聊天访问", + "perm_branding_edit": "编辑品牌", + "perm_server_attestation": "服务器性能认证" + }, + "tokens": { + "title": "设备令牌", + "subtitle": "管理自动设备配置的注册令牌", + "enrollment_mode": "注册模式", + "mode_open": "开放", + "mode_open_desc": "任何设备无需令牌即可注册", + "mode_managed": "托管", + "mode_managed_desc": "设备需要有效令牌或操作员批准才能注册", + "mode_locked": "锁定", + "mode_locked_desc": "只有持有有效令牌的设备才能注册", + "total": "令牌总数", + "active": "活跃", + "used": "已使用", + "revoked": "已撤销", + "search_placeholder": "搜索令牌...", + "status_pending": "待处理", + "status_active": "活跃", + "status_used": "已使用", + "status_revoked": "已撤销", + "status_expired": "已过期", + "bulk_generate": "批量生成", + "create": "创建令牌", + "edit": "编辑令牌", + "token": "令牌前缀", + "name": "名称", + "status": "状态", + "uses": "使用次数", + "bound_peer": "绑定设备", + "expires": "过期时间", + "created": "创建时间", + "actions": "操作", + "name_placeholder": "例如:办公电脑批次", + "max_uses": "最大使用次数", + "max_uses_hint": "0 = 不限", + "expires_in": "过期时间", + "no_expiration": "永不过期", + "expires_1h": "1小时", + "expires_24h": "24小时", + "expires_7d": "7天", + "expires_30d": "30天", + "note": "备注", + "note_placeholder": "关于此令牌的可选备注...", + "count": "数量", + "count_range": "要生成的令牌数量(1-100)", + "name_prefix": "名称前缀", + "generate": "生成", + "token_created": "令牌已创建", + "tokens_generated": "令牌已生成", + "copy_warning": "请立即复制令牌,之后将不再显示。", + "copy_token": "复制令牌", + "copied": "已复制!", + "revoke": "撤销", + "revoke_confirm": "确定要撤销此令牌吗?已使用该令牌注册的设备不受影响。", + "revoked_success": "令牌已撤销", + "no_tokens": "未找到令牌", + "expired": "已过期", + "never": "永不", + "save": "保存", + "cancel": "取消", + "unlimited": "不限" + }, + "tutorial": { + "next": "下一步", + "prev": "上一步", + "skip": "跳过", + "finish": "完成", + "close": "关闭", + "step_of": "{current} / {total}", + "console_sidebar_title": "导航侧栏", + "console_sidebar_text": "从这里访问所有模块。点击任意图标导航到相应部分。侧栏会根据屏幕大小自适应。", + "console_expand_title": "展开侧栏", + "console_expand_text": "点击此处展开侧栏查看完整标签。再次点击可收起。", + "console_search_title": "快速搜索", + "console_search_text": "搜索设备、设置或操作。键盘快捷键:Ctrl+K。", + "console_dashboard_title": "仪表盘", + "console_dashboard_text": "您的控制中心,显示服务器状态、在线设备和快捷操作。一目了然地监控重要指标。", + "console_devices_title": "设备管理", + "console_devices_text": "查看、搜索和管理所有已连接的设备。按状态筛选、分配标签并配置单个设备设置。", + "console_settings_title": "设置", + "console_settings_text": "配置服务器行为、安全选项、品牌和用户管理。根据您的需求自定义 BetterDesk。", + "console_desktop_title": "桌面模式", + "console_desktop_text": "切换到带有窗口工作区和小部件的桌面模式。非常适合多任务处理和监控仪表板。", + "console_complete_title": "准备就绪!", + "console_complete_text": "探索侧栏分类以发现所有功能。随时点击帮助图标重新启动此指南。", + "desktop_topbar_title": "顶部栏", + "desktop_topbar_text": "顶部栏显示时钟、快捷控制和应用抽屉入口。点击网格图标浏览所有应用。", + "desktop_drawer_title": "应用抽屉", + "desktop_drawer_text": "打开应用抽屉搜索并启动任何控制台功能作为浮动窗口。应用按类别组织。", + "desktop_widgets_title": "小部件面板", + "desktop_widgets_text": "您的可自定义工作区。小部件显示实时信息并提供功能快捷访问。拖拽可重新排列。", + "desktop_add_widget_title": "添加小部件", + "desktop_add_widget_text": "点击这里浏览可用的小部件。从监控显示、设备列表、笔记等中选择。", + "desktop_taskbar_title": "任务栏", + "desktop_taskbar_text": "打开的应用程序显示在这里。点击聚焦或最小化窗口。悬停图标查看应用名称。", + "desktop_snap_title": "Snap 布局", + "desktop_snap_text": "将窗口拖到屏幕边缘进行对齐,或悬停最大化按钮查看布局预设。试试 Aero Shake!", + "desktop_windows_title": "应用窗口", + "desktop_windows_text": "应用程序在可拖动、可调整大小的窗口中打开。从标题栏最小化、最大化或关闭。窗口层级在小部件之上。", + "desktop_search_title": "快速搜索", + "desktop_search_text": "跨设备、页面和设置搜索。随时按 Ctrl+K 打开搜索。", + "desktop_complete_title": "桌面模式就绪!", + "desktop_complete_text": "尝试从抽屉打开应用并排列窗口。使用小部件预设快速设置仪表板布局。", + "devices_folders_title": "设备文件夹", + "devices_folders_text": "将设备组织到文件夹中。点击文件夹筛选列表。右键单击重命名或删除。", + "devices_search_title": "搜索和筛选", + "devices_search_text": "按 ID、主机名或平台搜索。使用状态按钮仅显示在线、离线或全部设备。", + "devices_table_title": "设备列表", + "devices_table_text": "点击任何设备行查看详情。右侧菜单提供快捷操作:连接、编辑标签或删除。", + "devices_complete_title": "设备管理就绪!", + "devices_complete_text": "在文件夹之间拖动设备进行整理。双击设备打开详情面板。", + "settings_tabs_title": "设置分类", + "settings_tabs_text": "在常规、安全、外观和其他配置部分之间切换。", + "settings_content_title": "配置", + "settings_content_text": "每个部分包含特定的服务器和控制台设置。点击保存后生效。", + "settings_complete_title": "设置概览", + "settings_complete_text": "检查安全设置中的双因素认证、API 密钥和用户管理。访问外观自定义控制台样式。", + "help": "帮助和教程", + "tour_console": "控制台导览", + "tour_desktop": "桌面模式导览", + "tour_devices": "设备导览", + "tour_settings": "设置导览", + "reset_all": "重置所有教程", + "disable_tutorials": "禁用教程", + "enable_tutorials": "启用教程", + "tour_remote": "远程会话导览", + "tour_organization": "组织设置", + "tour_cdap": "CDAP 概览", + "tour_chat": "聊天基础", + "remote_toolbar_title": "远程工具栏", + "remote_toolbar_text": "通过工具栏访问显示控制、剪贴板同步、特殊按键和质量设置。使用 F11 切换全屏。", + "remote_canvas_title": "远程显示", + "remote_canvas_text": "这是远程屏幕。点击其中即可开始控制远程设备。鼠标和键盘输入会自动转发。", + "remote_clipboard_title": "剪贴板同步", + "remote_clipboard_text": "在您的电脑和远程设备之间复制粘贴文本。焦点位于远程显示时,可像平常一样使用 Ctrl+C / Ctrl+V。", + "remote_complete_title": "远程会话已就绪!", + "remote_complete_text": "使用工具栏按钮发送特殊按键(Ctrl+Alt+Del、PrintScreen)并切换显示器。按 Escape 或点击断开连接结束会话。", + "org_overview_title": "组织", + "org_overview_text": "组织可用于对用户、设备和策略分组。每个组织都有自己的管理员、操作员和设置。", + "org_create_title": "创建组织", + "org_create_text": "点击这里创建新组织。提供名称、短标识和可选描述。您将成为新组织的所有者。", + "org_members_title": "管理成员", + "org_members_text": "通过电子邮件邀请用户,分配角色(管理员、操作员、用户)并管理访问。成员可以看到分配给其组织的设备。", + "org_devices_title": "分配设备", + "org_devices_text": "将设备添加到组织。这里分配的设备会继承组织策略,并对其成员可见。", + "org_policies_title": "组织策略", + "org_policies_text": "为组织设置安全策略,例如密码要求、会话超时、2FA 强制执行和设备登记规则。", + "org_complete_title": "组织设置完成!", + "org_complete_text": "邀请团队并分配设备,即可开始使用组织范围内的管理。策略会自动应用于所有成员。", + "cdap_devices_title": "CDAP Devices", + "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", + "cdap_widgets_title": "Widget Dashboard", + "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", + "cdap_commands_title": "Send Commands", + "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", + "cdap_terminal_title": "Device Terminal", + "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", + "cdap_complete_title": "CDAP Overview Complete!", + "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", + "chat_contacts_title": "联系人和群组", + "chat_contacts_text": "查看联系人和聊天群组。点击任意联系人打开对话。绿色圆点表示用户在线。", + "chat_send_title": "发送消息", + "chat_send_text": "输入消息并按 Enter 发送。当双方都支持端到端加密时,消息会进行端到端加密。", + "chat_file_title": "共享文件", + "chat_file_text": "点击附件图标共享文件。文件会被加密,最大可达 50 MB。", + "chat_complete_title": "聊天已就绪!", + "chat_complete_text": "与操作员和最终用户实时聊天。创建群组用于团队沟通。所有消息都支持已读回执。" + }, + "help_request": { + "title": "帮助请求", + "subtitle": "管理来自桌面客户端的帮助请求", + "new_request": "新帮助请求", + "device": "设备", + "hostname": "主机名", + "message": "消息", + "status": "状态", + "pending": "待处理", + "accepted": "已接受", + "resolved": "已解决", + "accept": "接受", + "resolve": "解决", + "no_requests": "没有帮助请求", + "notification": "收到来自的帮助请求", + "stats_total": "总计", + "filter_all": "全部" + }, + "organizations": { + "title": "组织管理", + "create": "创建组织", + "edit": "编辑组织", + "detail": "组织详情", + "name": "名称", + "slug": "标识符 (URL)", + "logo_url": "Logo 地址", + "users": "用户", + "devices": "设备", + "invitations": "邀请", + "settings": "设置", + "add_user": "添加用户", + "assign_device": "分配设备", + "create_invitation": "创建邀请", + "delete_confirm": "删除此组织?这将删除所有关联的用户、设备和设置。", + "no_orgs": "暂无组织", + "no_orgs_hint": "创建第一个组织以开始管理设备和用户。", + "connection_policy": "连接策略", + "allow_file_transfer": "允许文件传输", + "allow_clipboard": "允许剪贴板", + "max_session_duration": "最大会话时长 (分钟)", + "role_owner": "所有者", + "role_admin": "管理员", + "role_operator": "操作员", + "role_user": "成员", + "username": "用户名", + "password": "密码", + "display_name": "显示名称", + "email": "邮箱", + "role": "角色", + "last_login": "上次登录", + "actions": "操作", + "device_id": "设备ID", + "department": "部门", + "building": "楼栋", + "location": "位置", + "assigned_user": "分配用户", + "token": "令牌", + "expires": "过期时间", + "used": "已使用", + "no_users": "此组织没有用户。", + "no_devices": "此组织没有分配设备。", + "no_invitations": "没有邀请。", + "user_added": "用户已添加", + "user_removed": "用户已移除", + "user_updated": "用户角色已更新", + "device_assigned": "设备已分配", + "device_unassigned": "设备已取消分配", + "invitation_created": "邀请已创建", + "settings_saved": "设置已保存", + "org_deleted": "组织已删除", + "confirm_remove_user": "从组织中移除此用户?", + "confirm_unassign_device": "取消分配此设备?", + "confirm_delete_org": "删除此组织及所有关联数据?", + "edit_role": "修改角色", + "raw_settings": "原始设置", + "key": "键", + "value": "值", + "save": "保存设置", + "policy_unattended": "无人值守(即时)", + "policy_attended": "有人值守(需确认)", + "policy_ask": "始终询问", + "expires_hours": "过期时间(小时)", + "loading_failed": "加载组织数据失败", + "name_slug_required": "名称和标识符为必填项", + "org_created": "组织已创建", + "org_updated": "组织已更新", + "create_new_user": "创建新用户", + "add_existing_user": "添加现有用户", + "none_available": "无", + "select_user": "选择用户", + "org_role": "组织角色", + "link_user_hint": "所选用户将使用其服务器帐户凭据链接到此组织。", + "no_available_users": "所有服务器用户都已链接到此组织。", + "user_linked": "用户已链接到组织" + }, + "chat": { + "e2e_enabled": "端到端加密", + "e2e_establishing": "正在建立安全通道...", + "e2e_established": "安全通道已建立", + "e2e_unsupported": "此浏览器不支持端到端加密", + "typing_indicator": "正在输入...", + "read_receipt": "已读", + "delivered": "已发送", + "file_share": "文件", + "file_too_large": "文件过大(最大50MB)", + "file_encrypted": "加密文件传输", + "presence_online": "在线", + "presence_away": "离开", + "presence_busy": "忙碌", + "presence_offline": "离线", + "key_rotation": "安全密钥已轮换", + "new_message": "新消息", + "title": "聊天", + "contacts": "联系人", + "groups": "群组", + "no_contacts": "暂无联系人", + "no_groups": "暂无群组", + "no_messages": "暂无消息", + "no_results": "未找到结果", + "select_conversation": "选择对话开始聊天", + "type_message": "输入消息...", + "send": "发送", + "attach_file": "附加文件", + "emoji": "表情", + "search_messages": "搜索消息", + "create_group": "创建群组", + "group_name": "群组名称", + "group_members": "成员", + "cancel": "取消", + "create": "创建", + "members": "成员", + "today": "今天", + "yesterday": "昨天", + "react": "回应", + "my_presence": "我的状态", + "search_placeholder": "搜索联系人和消息", + "select_conversation_hint": "查看消息请选择一个会话", + "info": "信息", + "group_name_placeholder": "输入群组名称" + }, + "toast": { + "device_connected": "设备已连接", + "device_disconnected": "设备已断开", + "session_started": "远程会话已开始", + "session_ended": "远程会话已结束", + "file_upload_complete": "文件上传完成", + "settings_saved": "设置已保存", + "error_generic": "发生错误", + "connection_lost": "连接丢失", + "reconnecting": "正在重新连接..." + }, + "theme": { + "dark": "深色", + "light": "浅色", + "auto": "跟随系统", + "title": "主题" + }, + "days": { + "mon": "周一", + "tue": "周二", + "wed": "周三", + "thu": "周四", + "fri": "周五", + "sat": "周六", + "sun": "周日" + }, + "toolkit": { + "title": "工具箱", + "subtitle": "管理员工具和诊断实用程序", + "cat_network": "网络", + "cat_crypto": "加密", + "cat_encoding": "编码", + "cat_system": "系统", + "host": "主机", + "port": "端口", + "domain": "域名", + "run": "运行", + "generate": "生成", + "encode": "编码", + "decode": "解码", + "send": "发送", + "refresh": "刷新", + "algorithm": "算法", + "input_text": "输入文本", + "enter_text": "输入文本...", + "length": "长度", + "options": "选项", + "source": "来源", + "lines": "行数", + "log_console": "控制台", + "log_go": "Go 服务器", + "mac_address": "MAC 地址", + "broadcast": "广播", + "ping_title": "Ping", + "ping_desc": "检查主机可达性和延迟", + "tcp_title": "TCP 端口检查", + "tcp_desc": "测试 TCP 端口连接", + "ssl_title": "SSL 检查器", + "ssl_desc": "检查 SSL/TLS 证书详情", + "http_title": "HTTP 健康检查", + "http_desc": "验证 HTTP 端点状态", + "dns_title": "DNS 查询", + "dns_desc": "将主机名解析为 IP 地址", + "whois_title": "DNS 记录", + "whois_desc": "查询 A、AAAA、MX、TXT、NS 记录", + "speed_title": "速度测试", + "speed_desc": "测量下载带宽", + "run_speed_test": "运行速度测试", + "wol_title": "网络唤醒", + "wol_desc": "发送魔术包唤醒设备", + "wol_sent": "魔术包已发送", + "hash_title": "哈希生成器", + "hash_desc": "生成加密哈希值", + "password_title": "密码生成器", + "password_desc": "生成安全的随机密码", + "jwt_title": "JWT 解码器", + "jwt_desc": "解码和检查 JSON Web Token", + "jwt_token": "JWT 令牌", + "base64_title": "Base64", + "base64_desc": "Base64 编码或解码数据", + "url_title": "URL 编码器", + "url_desc": "编码或解码 URL 组件", + "processes_title": "进程列表", + "processes_desc": "查看运行中的系统进程", + "disk_title": "磁盘使用", + "disk_desc": "查看磁盘分区使用情况", + "db_title": "数据库统计", + "db_desc": "查看数据库表统计信息", + "docker_title": "Docker 容器", + "docker_desc": "查看运行中的 Docker 容器", + "logs_title": "日志查看器", + "logs_desc": "查看最近的日志输出", + "ip_address": "IP", + "latency": "延迟", + "ttl": "TTL", + "status": "状态", + "resolved": "已解析", + "subject": "主体", + "issuer": "签发者", + "valid_from": "有效期从", + "valid_to": "有效期至", + "days_left": "剩余天数", + "days": "天", + "protocol": "协议", + "cipher": "密码套件", + "alt_names": "备用名称", + "chain": "证书链", + "record_type": "类型", + "record_value": "值", + "hash_value": "哈希值", + "entropy": "熵值", + "very_strong": "非常强", + "strong": "强", + "weak": "弱", + "expiry": "过期时间", + "expired": "已过期", + "valid": "有效", + "process_name": "名称", + "db_type": "类型", + "db_size": "大小", + "table_name": "表名", + "row_count": "行数", + "no_data": "无可用数据", + "no_docker": "未找到 Docker 容器或 Docker 不可用", + "no_logs": "无可用日志条目" + }, + "policies": { + "title": "组织策略", + "subtitle": "管理组织的安全、连接和功能策略", + "select_org": "组织", + "select_org_placeholder": "选择组织...", + "select_org_first": "选择组织以查看策略审计日志。", + "configured": "已配置", + "connection_title": "连接策略", + "connection_desc": "控制远程会话的建立方式", + "connection_mode": "连接模式", + "mode_attended": "有人值守(需要用户批准)", + "mode_unattended": "无人值守(始终允许)", + "mode_ask": "始终询问", + "max_session": "最大会话时长(分钟)", + "idle_lock": "空闲锁定超时(分钟)", + "wallpaper_policy": "会话期间壁纸", + "wallpaper_show": "显示", + "wallpaper_hide_session": "会话期间隐藏", + "wallpaper_hide_always": "始终隐藏", + "features_title": "功能策略", + "features_desc": "为设备启用或禁用特定功能", + "allow_file_transfer": "允许文件传输", + "allow_clipboard": "允许剪贴板同步", + "allow_audio": "允许音频流", + "allow_recording": "允许会话录制", + "security_title": "安全策略", + "security_desc": "为组织设备强制执行安全要求", + "require_2fa": "无人值守访问需要2FA", + "password_min_length": "最小密码长度", + "password_require_special": "要求特殊字符", + "password_max_age": "密码最大有效期(天,0=永不)", + "allowed_operators": "允许的操作员角色(逗号分隔)", + "network_title": "网络策略", + "network_desc": "控制中继服务器和直接连接", + "block_direct_p2p": "阻止直接P2P(强制中继)", + "allowed_relays": "允许的中继服务器(每行一个)", + "ip_allowlist": "IP白名单(CIDR,每行一个)", + "update_title": "更新策略", + "update_desc": "控制自动更新和更新频道", + "auto_update": "启用自动更新", + "update_channel": "更新频道", + "audit_title": "策略变更", + "audit_desc": "最近的策略变更历史", + "no_audit": "没有记录的策略变更。", + "save_success": "策略保存成功", + "save_failed": "保存策略失败", + "load_failed": "加载策略失败", + "block_direct_p2p_hint": "适用于此组织中的设备。全局默认值在设置 → 连接策略中配置。" + }, + "attestation": { + "title": "设备认证", + "subtitle": "监控设备身份验证和硬件指纹", + "verified": "已验证", + "pending": "待处理", + "failed": "失败", + "device_list": "设备认证记录", + "device_list_desc": "硬件指纹和身份验证状态", + "col_device": "设备ID", + "col_hostname": "主机名", + "col_fingerprint": "指纹", + "col_status": "状态", + "col_last_check": "最后检查", + "col_actions": "操作", + "no_records": "未找到认证记录。", + "verify_success": "设备已标记为已验证", + "verify_failed": "验证设备失败", + "revoke_success": "设备认证已撤销", + "revoke_failed": "撤销认证失败" + }, + "fleet": { + "title": "车队管理", + "tab_resources": "资源", + "tab_tasks": "任务", + "tab_builder": "构建器", + "tab_compliance": "合规", + "res_title": "资源映射", + "res_all_types": "所有类型", + "res_type_printer": "打印机", + "res_type_network_drive": "网络驱动器", + "res_type_dns": "DNS 服务器", + "res_type_proxy": "代理", + "res_type_vpn": "VPN", + "res_add": "添加资源", + "res_name": "资源名称", + "res_type": "类型", + "res_address": "地址 / 路径", + "res_target": "目标", + "res_scope": "范围", + "res_scope_org": "组织", + "res_scope_group": "组", + "res_scope_device": "设备", + "res_scope_value": "范围值", + "res_status": "状态", + "res_active": "活动", + "res_inactive": "不活动", + "res_no_data": "未找到资源。点击'添加'创建。", + "res_confirm_delete": "确定要删除此资源吗?", + "task_title": "任务调度器", + "task_all_status": "所有状态", + "task_status_pending": "等待中", + "task_status_running": "运行中", + "task_status_success": "成功", + "task_status_failed": "失败", + "task_search": "搜索任务…", + "task_create": "创建任务", + "task_name": "任务名称", + "task_type": "类型", + "task_type_script": "脚本", + "task_type_install": "安装", + "task_type_update": "更新", + "task_type_restart": "重启", + "task_type_deploy": "部署", + "task_type_scan": "扫描", + "task_targets": "目标", + "task_targets_help": "设备ID或组名,逗号分隔", + "task_schedule": "调度", + "task_schedule_once": "一次", + "task_schedule_cron": "Cron", + "task_schedule_interval": "间隔", + "task_schedule_value": "调度值", + "task_script": "脚本 / 命令", + "task_retries": "重试", + "task_timeout": "超时 (秒)", + "task_last_run": "上次执行", + "task_no_data": "未找到任务。创建新任务。", + "task_confirm_delete": "确定要删除此任务吗?", + "task_output": "任务输出", + "task_retry": "重试", + "builder_title": "可视化工作流构建器", + "builder_select_workflow": "选择工作流…", + "builder_new": "新建", + "builder_save": "保存", + "builder_export": "导出", + "builder_execute": "执行", + "builder_dry_run": "模拟运行", + "builder_triggers": "触发器", + "builder_conditions": "条件", + "builder_actions": "操作", + "builder_results": "结果", + "builder_transforms": "转换", + "builder_properties": "属性", + "builder_no_selection": "选择节点以编辑其属性。", + "workflow_name": "工作流名称:", + "comp_title": "软件合规", + "comp_compliant": "合规", + "comp_warning": "警告", + "comp_critical": "严重", + "comp_score": "平均分数", + "comp_device": "设备", + "comp_hostname": "主机名", + "comp_os": "操作系统", + "comp_score_col": "分数", + "comp_issues": "问题", + "comp_last_scan": "上次扫描", + "comp_scan": "扫描", + "comp_scan_all": "全部扫描", + "comp_remediate": "修复", + "comp_remediate_confirm": "在此设备上执行自动修复?", + "comp_no_data": "无合规数据。执行扫描以开始。", + "save": "保存", + "cancel": "取消", + "close": "关闭", + "edit": "编辑", + "delete": "删除", + "actions": "操作", + "all_orgs": "所有组织", + "builder_node_trigger_manual": "手动触发器", + "builder_node_trigger_schedule": "Schedule", + "builder_node_trigger_event": "事件触发器", + "builder_node_cond_os": "OS Check", + "builder_node_cond_threshold": "Threshold", + "builder_node_cond_time_window": "Time Window", + "builder_node_action_script": "Run Script", + "builder_node_action_install": "Install SW", + "builder_node_action_restart": "重启服务", + "builder_node_action_file_deploy": "部署文件", + "builder_node_action_message": "发送消息", + "builder_node_result_log": "Log Output", + "builder_node_result_alert": "发送警报", + "builder_node_result_chain": "串联工作流", + "builder_node_transform_parse": "Parse JSON", + "builder_node_transform_filter": "Filter", + "builder_node_transform_delay": "Delay", + "select_org_placeholder": "选择组织…", + "all_types": "All Types", + "type_printer": "Printer", + "type_network_drive": "网络驱动器", + "type_dns": "DNS 服务器", + "type_vpn": "VPN", + "type_proxy": "Proxy", + "add_resource": "添加资源", + "edit_resource": "编辑资源", + "col_name": "Name", + "col_type": "Type", + "col_target": "Target", + "col_scope": "Scope", + "col_status": "Status", + "col_actions": "Actions", + "no_resources": "No resources found.", + "active": "Active", + "inactive": "Inactive", + "address": "地址/路径", + "scope_org": "组织", + "scope_group": "组", + "scope_device": "设备", + "scope_value": "Scope Value", + "scope_value_hint": "Organization, group, or device ID", + "confirm_delete": "确定要删除此项目吗?", + "all_statuses": "所有状态", + "status_pending": "Pending", + "status_running": "Running", + "status_success": "Success", + "status_failed": "失败", + "search_tasks": "搜索任务…", + "create_task": "创建任务", + "edit_task": "编辑任务", + "col_task_name": "Task Name", + "col_task_type": "Type", + "col_schedule": "Schedule", + "col_last_run": "Last Run", + "no_tasks": "No tasks found.", + "task_type_file_deploy": "文件部署", + "task_type_registry": "Registry", + "target_devices": "目标设备", + "target_hint": "Device IDs or group names", + "schedule_immediate": "Immediate", + "schedule_once": "Once", + "schedule_cron": "Cron", + "cron_placeholder": "*/5 * * * *", + "script_content": "脚本/命令", + "retry_count": "Retries", + "timeout_sec": "Timeout (s)", + "loading": "正在加载", + "no_output": "没有可用输出", + "error_loading": "加载数据出错", + "select_workflow": "选择工作流…", + "new_workflow": "New", + "export": "Export", + "execute": "Execute", + "dry_run": "Dry Run", + "node_triggers": "Triggers", + "node_manual": "手动触发器", + "node_schedule": "Schedule", + "node_event": "事件触发器", + "node_conditions": "Conditions", + "node_os_check": "OS Check", + "node_threshold": "Threshold", + "node_time_window": "Time Window", + "node_actions": "Actions", + "node_run_script": "Run Script", + "node_install": "Install SW", + "node_restart": "重启服务", + "node_file_deploy": "部署文件", + "node_send_message": "发送消息", + "node_results": "Results", + "node_log_output": "Log Output", + "node_send_alert": "发送警报", + "node_chain": "串联工作流", + "node_transforms": "Transforms", + "node_parse_json": "Parse JSON", + "node_filter": "Filter", + "node_delay": "Delay", + "node_properties": "Properties", + "all_organizations": "所有组织", + "scan_all": "Scan All", + "compliant": "Compliant", + "non_compliant": "Warning", + "critical_issues": "Critical", + "avg_score": "Avg. Score", + "col_device": "设备", + "col_hostname": "Hostname", + "col_os": "OS", + "col_score": "Score", + "col_issues": "Issues", + "col_last_scan": "Last Scan", + "no_compliance_data": "No compliance data available.", + "confirm_remediate": "在此设备上运行自动修复?" + }, + "scaling": { + "title": "扩展与中继管理", + "tab_overview": "概览", + "tab_relays": "中继节点", + "tab_rules": "分配规则", + "tab_capacity": "容量规划", + "arch_title": "网络架构", + "arch_loading": "加载架构图...", + "stat_relay_nodes": "中继节点", + "stat_total_devices": "总设备数", + "stat_active_sessions": "活跃会话", + "stat_bandwidth": "总带宽", + "relay_health": "中继健康", + "no_relays": "未配置中继节点。添加第一个中继节点以分配负载。", + "relay_search": "搜索中继...", + "relay_add": "添加中继节点", + "relay_edit": "编辑中继节点", + "col_name": "名称", + "col_address": "地址", + "col_location": "位置", + "col_devices": "设备", + "col_sessions": "会话", + "col_bandwidth": "带宽", + "col_status": "状态", + "col_actions": "操作", + "col_priority": "优先级", + "col_rule_name": "规则名称", + "col_match": "匹配", + "col_target_relay": "目标中继", + "col_fallback": "备用", + "status_online": "在线", + "status_degraded": "降级", + "status_offline": "离线", + "status_enabled": "已启用", + "status_disabled": "已禁用", + "confirm_delete_relay": "确定要删除此中继节点吗?", + "confirm_delete_rule": "确定要删除此分配规则吗?", + "rules_hint": "分配规则决定哪个中继服务器处理特定设备组。规则按优先级评估(最低优先)。", + "rule_add": "添加规则", + "rule_edit": "编辑规则", + "rule_match_type": "匹配类型", + "match_subnet": "子网", + "match_group": "设备组", + "match_tag": "设备标签", + "match_location": "位置", + "rule_match_value": "匹配值", + "fallback_master": "主服务器", + "fallback_nearest": "最近中继", + "relay_max_sessions": "最大会话数", + "relay_max_bandwidth": "最大带宽 (Mbps)", + "cap_tiers": "容量级别", + "cap_loading": "加载容量数据...", + "cap_recommendations": "建议", + "cap_no_recs": "暂无可用建议。", + "cap_planning": "基础设施规划", + "cap_config": "配置", + "cap_max_devices": "最大设备数", + "cap_max_sessions": "最大会话数", + "cap_current": "当前", + "cap_utilization": "利用率", + "cap_tier_devices": "设备容量", + "cap_tier_sessions": "会话容量", + "cap_tier_bandwidth": "带宽容量", + "cap_single_sqlite": "单服务器 (SQLite)", + "cap_single_pg": "单服务器 (PostgreSQL)", + "cap_master_3": "主服务器 + 3 中继", + "cap_master_10": "主服务器 + 10 中继", + "rec_no_relays": "未配置中继节点。建议添加中继节点以提高性能和冗余。", + "rec_devices_high": "设备利用率较高。建议添加更多中继节点以分配负载。", + "rec_sessions_high": "会话容量接近限制。建议升级中继基础设施。", + "rec_cpu_high": "部分中继节点CPU使用率较高。建议负载均衡或升级容量。", + "rec_all_good": "所有系统运行在正常参数内。无需操作。", + "save": "保存", + "cancel": "取消", + "edit": "编辑", + "delete": "删除", + "close": "关闭", + "no_rules": "没有分配规则。", + "relays_info_banner": "此列表仅供参考。客户端实际使用的中继服务器通过 BetterDesk 服务器上的 RELAY_SERVERS 环境变量配置。", + "relay_name_address_required": "必须填写名称和地址。", + "relay_save_failed": "保存中继节点失败。", + "relay_delete_failed": "删除中继节点失败。", + "relay_saved": "中继节点已保存。", + "relay_deleted": "中继节点已删除。", + "rule_name_value_required": "必须填写规则名称和匹配值。", + "rule_save_failed": "保存规则失败。", + "rule_delete_failed": "删除规则失败。", + "rule_saved": "规则已保存。", + "rule_deleted": "规则已删除。" + }, + "cross_platform": { + "title": "跨平台兼容性", + "tab_matrix": "兼容性矩阵", + "tab_distribution": "分布", + "tab_protocols": "协议", + "tab_limitations": "限制", + "matrix_hint": "所有支持平台的功能支持矩阵。绿色=完全支持,黄色=部分支持,灰色=不可用,蓝色=计划中。", + "col_feature": "功能", + "legend_full": "完全支持", + "legend_partial": "部分支持", + "legend_none": "不可用", + "legend_planned": "计划中", + "platform_breakdown": "平台分布", + "arch_breakdown": "架构分布", + "version_breakdown": "版本分布", + "summary": "摘要", + "total_devices": "设备总数", + "unique_platforms": "平台", + "unique_archs": "架构", + "unique_versions": "客户端版本", + "no_devices": "尚无注册设备。", + "protocols_hint": "协议能力协商确保每个客户端只接收其支持的功能。服务器根据报告的能力调整行为。", + "capability_negotiation": "能力协商", + "codec_support": "编解码器支持(在线设备)", + "feature_support": "功能支持(在线设备)", + "no_codec_data": "没有来自在线设备的编解码器数据。", + "no_feature_data": "没有来自在线设备的功能数据。", + "protobuf_schema": "ClientCapabilities Protobuf 模式", + "diagram_client": "客户端", + "diagram_server": "BetterDesk 服务器", + "diagram_peer": "远程对等体", + "limitations_hint": "每个平台都有影响可用功能的特定限制。在规划部署时请查阅这些约束。", + "feat_desktop_client": "桌面客户端", + "feat_background_agent": "后台代理", + "feat_remote_target": "远程目标", + "feat_screen_capture": "屏幕捕获", + "feat_input_injection": "输入注入", + "feat_file_transfer": "文件传输", + "feat_clipboard_sync": "剪贴板同步", + "feat_audio_streaming": "音频流", + "feat_chat": "聊天", + "feat_h264": "H.264 编解码器", + "feat_vp9": "VP9 编解码器", + "feat_av1": "AV1 编解码器", + "feat_cdap_agent": "CDAP 代理", + "feat_session_recording": "会话录制", + "feat_multi_monitor": "多显示器", + "feat_unattended_access": "无人值守访问", + "platform_windows": "Windows", + "platform_linux": "Linux", + "platform_macos": "macOS", + "platform_android": "Android", + "platform_ios": "iOS", + "platform_web": "网页浏览器", + "platform_chromeos": "ChromeOS", + "status_production": "生产", + "status_testing": "测试", + "status_planned": "计划中", + "status_limited": "有限", + "status_experimental": "实验性", + "limit_win_uac": "服务安装和安全桌面输入注入需要UAC提升。", + "limit_win_service": "作为NSSM服务在每个服务的虚拟帐户(NT SERVICE\\<服务>)下运行;仅安装需要管理员权限。", + "limit_win_firewall": "Windows防火墙规则必须允许21115-21119端口用于中继连接。", + "limit_win_virtual_account": "服务在隔离的虚拟帐户下运行,而非LocalSystem;自定义日志路径可能需要ACL调整。", + "limit_linux_wayland": "Wayland合成器限制程序化屏幕捕获;需要PipeWire门户API。", + "limit_linux_pipewire": "音频捕获需要PipeWire;PulseAudio回退可用但有限。", + "limit_linux_arm": "ARM64构建可用;某些编解码器可能使用软件解码(较慢)。", + "limit_linux_unprivileged": "服务以专用非特权'betterdesk'帐户运行,配合systemd加固(NoNewPrivileges、ProtectSystem=strict)。", + "limit_mac_screen": "需要在系统偏好设置>隐私与安全中授予屏幕录制权限。", + "limit_mac_signing": "代理必须使用Apple Developer ID签名才能分发。", + "limit_mac_notarize": "macOS Gatekeeper需要公证(非App Store分发)。", + "limit_android_projection": "MediaProjection API需要用户同意每次屏幕捕获会话。", + "limit_android_accessibility": "输入注入需要辅助功能服务;Android 14+中受限。", + "limit_android_battery": "后台服务受Doze模式限制;可能需要电池优化豁免。", + "limit_ios_capture": "Apple禁止后台屏幕捕获;仅支持查看模式。", + "limit_ios_input": "不允许输入注入;仅支持远程查看和聊天。", + "limit_ios_appstore": "仅通过App Store分发;TestFlight用于beta测试。", + "limit_web_https": "WebCodecs API和WebRTC需要HTTPS;HTTP回退到JMuxer(有限编解码器)。", + "limit_web_codec": "编解码器支持取决于浏览器;H.264广泛支持,VP9/AV1因浏览器而异。", + "limit_web_performance": "性能受浏览器沙箱限制;无直接硬件加速。", + "limit_chrome_crostini": "完整代理支持仅在Crostini Linux容器内。", + "limit_chrome_pwa": "PWA模式仅提供web功能;无原生代理能力。", + "limit_chrome_input": "Crostini容器外不支持输入注入。" + }, + "security_audit": { + "title": "安全审计", + "tab_overview": "概览", + "tab_events": "审计事件", + "tab_hardening": "安全加固", + "tab_vulnerabilities": "漏洞", + "security_score": "安全评分", + "failed_logins": "登录失败(24h)", + "active_bans": "活跃封禁", + "api_keys": "API密钥", + "old_keys": "旧密钥(>90天)", + "security_checks": "安全检查", + "tls_status": "TLS状态", + "pass": "通过", + "warning": "警告", + "fail": "失败", + "tls_signal": "Signal TLS", + "tls_relay": "Relay TLS", + "tls_api": "API TLS", + "tls_wss": "安全 WebSocket", + "enabled": "已启用", + "disabled": "已禁用", + "all_events": "所有事件", + "event_login_failed": "登录失败", + "event_login_success": "登录成功", + "event_peer_banned": "设备封禁", + "event_ip_banned": "IP封禁", + "event_config_changed": "配置变更", + "event_key_created": "密钥创建", + "refresh": "刷新", + "col_time": "时间", + "col_action": "操作", + "col_actor": "操作者", + "col_target": "目标", + "col_ip": "IP地址", + "col_details": "详情", + "no_events": "未找到审计事件。", + "hardening_hint": "BetterDesk部署的安全加固优先级。按严重程度排序。", + "no_hardening": "没有可用的加固项目。", + "vuln_hint": "依赖项漏洞扫描结果。定期运行npm audit以保持依赖安全。", + "no_vulns": "未发现漏洞。您的依赖项是安全的。" + }, + "languages": { + "title": "语言管理", + "total_languages": "语言总数", + "fully_translated": "完全翻译", + "needs_review": "需要审核", + "reference_keys": "参考键数", + "no_languages": "未找到语言文件。", + "badge_reference": "参考", + "badge_review": "需要审核", + "badge_complete": "Complete", + "coverage": "coverage", + "keys": "keys", + "missing": "missing", + "extra": "extra", + "view_missing": "查看缺失项", + "fix_missing": "Fix Missing", + "missing_keys_for": "缺失键:", + "missing_keys_count": "keys missing (English fallback values shown)", + "and_more": "还有 {n} 个...", + "all_keys_present": "所有键都已存在!", + "confirm_fix": "Add missing keys to {code} with English fallback values?", + "fixed_title": "Keys Fixed", + "fixed_msg": "{code} 中缺少的键必须手动翻译。", + "no_fix_needed": "没有需要补齐的缺失键。" + }, + "resource_control": { + "title": "资源控制", + "tab_overview": "概览", + "tab_usb": "USB Control", + "tab_optical": "光驱", + "tab_monitors": "Monitors", + "tab_disks": "Disk Access", + "tab_quotas": "资源配额", + "compliance_by_category": "按类别的合规性", + "device_compliance": "设备合规性", + "search_devices": "搜索设备...", + "col_device": "设备", + "col_platform": "Platform", + "col_status": "Status", + "col_usb": "USB", + "col_optical": "Optical", + "col_monitors": "Monitors", + "col_disks": "Disks", + "col_quotas": "Quotas", + "col_actions": "Actions", + "stat_total_devices": "设备总数", + "stat_compliant": "Compliant", + "stat_partial": "Partial", + "stat_noncompliant": "Non-Compliant", + "stat_compliance_rate": "合规率", + "badge_na": "N/A", + "badge_compliant": "OK", + "badge_partial": "Partial", + "badge_noncompliant": "Fail", + "btn_configure": "配置", + "no_devices": "未找到设备", + "usb_title": "USB 端口控制", + "usb_hint": "控制所选设备或组织级默认策略的 USB 存储设备访问。", + "usb_storage_policy": "USB 存储策略", + "usb_whitelist": "白名单设备(每行一个)", + "usb_whitelist_hint": "VID:PID(例如 0781:5583)", + "usb_audit_log": "记录 USB 设备连接", + "optical_title": "光驱控制", + "optical_hint": "控制所选设备的 CD/DVD/蓝光驱动器访问。", + "optical_policy": "光驱策略", + "optical_audit_log": "记录光驱访问", + "monitors_title": "显示器管理", + "monitors_hint": "配置显示器设置,包括最大数量、分辨率强制、亮度和电源计划。", + "monitors_max_count": "最大显示器数量(0 = 不限制)", + "monitors_max_hint": "0 表示不限制", + "monitors_resolution": "最大分辨率", + "monitors_brightness": "亮度限制", + "monitors_power_schedule": "电源计划", + "monitors_power_hint": "例如 off:22:00-06:00", + "disks_title": "磁盘访问控制", + "disks_hint": "配置磁盘访问策略,包括只读模式、加密强制和分区可见性。", + "disks_readonly": "强制只读模式", + "disks_encryption": "要求加密(BitLocker/LUKS)", + "disks_smart": "启用 S.M.A.R.T. 监控", + "disks_hidden": "隐藏分区", + "disks_hidden_hint": "以逗号分隔的驱动器盘符或挂载点", + "quotas_title": "资源配额", + "quotas_hint": "为所选设备上的每个用户设置 CPU、内存、带宽和磁盘配额。", + "quotas_cpu": "CPU Limit", + "quotas_ram": "RAM Limit", + "quotas_bandwidth": "带宽限制(Mbps)", + "quotas_bandwidth_hint": "0 = 不限制", + "quotas_disk_quota": "磁盘配额(GB)", + "quotas_disk_hint": "0 = 不限制", + "quotas_process_whitelist": "进程白名单(每行一个)", + "quotas_process_hint": "例如 chrome.exe、code.exe", + "policy_allowed": "Allowed", + "policy_blocked": "Blocked", + "policy_whitelist": "仅白名单", + "policy_any": "Any" + }, + "sdk_studio": { + "title": "SDK Studio", + "subtitle": "Visual flow editor for CDAP bridges", + "new_flow": "New Flow", + "open_flow": "Open Flow", + "save_flow": "Save Flow", + "run_flow": "Run", + "debug": "Debug", + "deploy": "Deploy", + "undo": "Undo", + "redo": "Redo", + "untitled": "Untitled Flow", + "code_mode": "Code Mode", + "toggle_grid": "Toggle Grid", + "zoom_in": "Zoom In", + "zoom_out": "Zoom Out", + "zoom_fit": "Fit to Screen", + "palette": "Node Palette", + "search_nodes": "Search nodes...", + "cat_sources": "Sources", + "cat_processing": "Processing", + "cat_outputs": "Outputs", + "empty_title": "Start Building", + "empty_desc": "Drag nodes from the palette to start building a flow", + "browse_templates": "Browse Templates", + "inspector": "Inspector", + "select_node": "Select a node to inspect its properties", + "console": "Console", + "clear_console": "Clear", + "console_ready": "Studio ready", + "label": "Label", + "configuration": "Configuration", + "connections": "Connections", + "inputs": "Inputs", + "outputs": "Outputs", + "delete_node": "Delete Node", + "nodes": "Nodes", + "wires": "Wires", + "status_ready": "Ready", + "status_deployed": "Deployed", + "flow_name": "Flow Name", + "flow_desc": "Description", + "loading": "Loading...", + "no_flows": "No saved flows yet", + "confirm_delete": "Are you sure you want to delete this flow?", + "templates": "Templates", + "node_modbus_tcp": "Modbus TCP", + "node_modbus_rtu": "Modbus RTU", + "node_snmp_poll": "SNMP Poll", + "node_rest_poll": "REST Poll", + "node_mqtt_subscribe": "MQTT Subscribe", + "node_webhook": "Webhook", + "node_device_telemetry": "Device Telemetry", + "node_database_query": "Database Query", + "node_file_watch": "File Watch", + "node_filter": "Filter", + "node_transform": "Transform", + "node_aggregate": "Aggregate", + "node_delay": "Delay", + "node_debounce": "Debounce", + "node_switch": "Switch", + "node_merge": "Merge", + "node_script": "Script", + "node_widget_update": "Widget Update", + "node_alert": "Alert", + "node_command": "Command", + "node_log": "Log", + "node_rest_call": "REST Call", + "node_mqtt_publish": "MQTT Publish", + "node_database_write": "Database Write", + "node_email": "Email", + "node_modbus_write": "Modbus Write", + "import_flow": "Import Flow" + }, + "updates": { + "tab_title": "Updates", + "title": "软件更新", + "desc": "从 GitHub 检查新版本并更新 BetterDesk 控制台和 Go 服务器", + "current_version": "已安装版本", + "latest_version": "最新提交", + "status": "Status", + "check_now": "检查更新", + "checking": "Checking…", + "up_to_date": "已是最新", + "update_available": "有可用更新", + "changelog": "最近提交", + "no_changelog": "没有可用的发布说明", + "files_changed": "已更改文件", + "files": "个文件", + "changes_unavailable": "无法加载文件更改列表。您仍然可以安装更新。", + "create_backup": "更新前创建备份", + "install": "Install Update", + "install_confirm": "确定要安装此更新吗?所有受支持的已更改组件都将自动更新,更新后控制台会重启。", + "installing": "正在安装更新…", + "creating_backup": "正在创建备份…", + "downloading": "正在下载文件…", + "install_success": "更新安装成功。控制台正在重启…", + "install_failed": "更新安装失败", + "restarting": "正在等待控制台重启…", + "restart_complete": "控制台已成功重启", + "restart_timeout": "Console did not restart in time. Please check manually.", + "no_version": "未选择更新版本。请先检查更新。", + "backups_title": "更新备份", + "backups_desc": "每次更新前自动创建的更新前备份", + "no_backups": "未找到更新备份", + "restore": "Restore", + "restore_confirm": "确定要从此备份恢复吗?已更改的文件将被覆盖。", + "restore_success": "备份恢复成功。控制台正在重启…", + "baseline_set": "基线已设置", + "commits_behind": "个提交落后", + "total_files": "总文件数", + "applied": "已应用", + "failed": "失败", + "skipped": "跳过", + "removed": "已删除", + "auto": "自动", + "manual": "手动", + "component_console": "Web控制台", + "component_server": "Go服务器", + "component_agent": "代理程序", + "component_scripts": "脚本和Docker", + "component_other": "其他", + "server_rebuild_warning": "Go服务器源代码已更改——服务器二进制文件将自动更新。", + "include_server": "Go服务器将自动更新", + "checking_go": "检查Go…", + "go_not_found": "未安装Go", + "go_check_failed": "无法检查Go可用性", + "server_building": "编译Go服务器… 这可能需要几分钟。", + "server_built": "服务器二进制文件已编译", + "server_build_failed": "服务器编译失败", + "server_stale_title": "服务器二进制文件已过期", + "server_stale_desc": "Go 服务器源代码已更新,但正在运行的二进制文件尚未重新编译。立即重新编译以应用安全和库更新。", + "rebuild_server": "重新编译服务器二进制文件", + "rebuilding_server": "正在重新编译…", + "rebuild_server_success": "服务器二进制文件已重新编译并重启", + "rebuild_server_failed": "服务器二进制文件重新编译失败", + "server_deployed": "服务器二进制文件已部署", + "server_deploy_failed": "服务器部署失败", + "server_build_note": "服务器编译可能需要1-5分钟。更新服务会在需要时自动运行。", + "server_source_downloading": "下载服务器源代码…", + "strategy_label": "更新方式", + "strategy_download": "下载预编译二进制文件", + "strategy_compile": "从源代码编译", + "both_available": "下载和编译", + "download_available": "可下载", + "no_method": "无可用更新方式", + "no_release": "无发布版本", + "available": "可用", + "server_downloading": "正在下载服务器二进制文件…", + "server_downloaded": "服务器二进制文件已下载", + "server_download_failed": "服务器二进制文件下载失败", + "server_download_note": "将从 GitHub Releases 下载预编译的二进制文件。通常不到一分钟。", + "install_go_hint": "从 https://go.dev/dl/ 安装 Go 以启用编译,或发布包含预编译二进制文件的版本", + "delete": "删除", + "delete_confirm": "永久删除备份 {name}?此操作无法撤销。", + "delete_success": "备份已删除", + "delete_failed": "删除备份失败", + "retention_label": "保留最近 N 个备份", + "retention_hint": "每次更新后会自动删除更旧的备份。使用 0 可保留所有备份。", + "retention_saved": "保留设置已保存", + "retention_invalid": "保留值必须是 0 到 1000 之间的整数", + "retention_required_for_prune": "请先设置大于 0 的保留值", + "prune_now": "Apply now", + "prune_confirm": "只保留最近 {n} 个备份并删除其余备份?", + "prune_done": "已清理 {n} 个备份", + "total_size": "Total size", + "backups_count": "backup(s)", + "strategy_install_go": "自动安装 Go 并编译", + "strategy_install_go_hint": "在控制台数据目录中下载或刷新官方 Go 工具链(约 120 MB),然后在需要时编译服务器。", + "auto_strategy": "Auto", + "auto_strategy_hint": "控制台会选择最佳可用方法,并自动下载或更新所需工具。", + "auto_available": "自动重建已就绪", + "toolchain_ready": "工具链已安装", + "toolchain_will_install": "Go 工具链将自动安装或更新", + "toolchain_downloading": "正在下载 Go 工具链…", + "toolchain_failed": "Go 工具链安装失败", + "modal_title": "正在安装更新", + "modal_done_title": "更新完成", + "modal_close": "关闭", + "modal_reload_now": "重新加载控制台", + "phase_confirm": "Confirmation", + "phase_backup": "Backup", + "phase_console": "控制台文件", + "phase_server": "Go 服务器", + "phase_restart": "重启", + "phase_done": "Done", + "preparing": "Preparing…", + "backup_skipped": "已跳过备份(按用户选择)", + "server_skipped": "已跳过 Go 服务器", + "server_not_selected": "没有 Go 服务器更改", + "server_processing": "正在处理 Go 服务器更新…", + "no_restart_needed": "无需重启", + "complete": "更新已应用", + "complete_summary": "更新已成功应用。", + "complete_with_errors": "更新已完成,但某些步骤失败。请查看下方详情。", + "modal_done_with_errors_title": "更新完成但有错误", + "console_will_restart": "控制台进程现在将重启…", + "restart_complete_msg": "控制台已完成重启。点击重新加载以加载新版本。页面将在 8 秒后自动重新加载。", + "refresh_recommended": "静态资源已更改,请重新加载页面以查看新界面。", + "confirm_title": "应用更新", + "confirm_with_backup": "将自动创建更新前备份。", + "confirm_no_backup": "不会创建备份(风险自担)。" + }, + "accessibility": { + "title": "无障碍", + "subtitle": "根据视觉、动态效果和阅读需求调整控制台。", + "close": "关闭无障碍菜单", + "profiles": "快速配置", + "profile_low_vision": "Low vision", + "profile_low_vision_hint": "更大的文本、强对比度和明显焦点。", + "profile_dyslexia": "阅读舒适", + "profile_dyslexia_hint": "易读字体和更宽的间距。", + "profile_motion_safe": "Motion safe", + "profile_motion_safe_hint": "减少过渡效果并暂停动画。", + "profile_color_assist": "颜色辅助", + "profile_color_assist_hint": "颜色滤镜、标签和高亮链接。", + "reading": "阅读", + "font_size": "字体大小", + "line_height": "行高", + "letter_spacing": "字母间距", + "word_spacing": "单词间距", + "readable_font": "易读字体", + "readable_font_hint": "使用宽阔、熟悉的字形。", + "dyslexia_spacing": "阅读障碍间距", + "dyslexia_spacing_hint": "为长文本增加额外间距。", + "visual": "视觉", + "contrast": "对比度", + "contrast_normal": "Normal", + "contrast_high_dark": "高对比度深色", + "contrast_high_light": "高对比度浅色", + "contrast_yellow_black": "黑底黄字", + "color_filter": "色觉滤镜", + "filter_none": "None", + "filter_protanopia": "Protanopia", + "filter_deuteranopia": "Deuteranopia", + "filter_tritanopia": "Tritanopia", + "filter_achromatopsia": "Achromatopsia", + "saturation": "颜色饱和度", + "underline_links": "为链接添加下划线", + "underline_links_hint": "无需依赖颜色也能看清链接。", + "highlight_links": "突出显示操作", + "highlight_links_hint": "为链接和按钮添加轮廓。", + "highlight_headings": "突出显示标题", + "highlight_headings_hint": "用彩色条标记章节标题。", + "hide_media": "Dim media", + "hide_media_hint": "淡化图片、视频和画布。", + "interaction": "交互", + "strong_focus": "强焦点", + "strong_focus_hint": "显示较大的键盘焦点环。", + "large_cursor": "大光标", + "large_cursor_hint": "使用更大的高对比度指针。", + "reduce_motion": "减少动态效果", + "reduce_motion_hint": "缩短过渡和顺滑滚动。", + "pause_animations": "暂停动画", + "pause_animations_hint": "停止循环视觉运动。", + "reading_guide": "阅读引导线", + "reading_guide_hint": "用明亮线条跟随指针。", + "reading_mask": "阅读遮罩", + "reading_mask_hint": "淡化指针上方和下方的内容。", + "preview": "预览", + "preview_title": "操作员工作区预览", + "preview_text": "关闭此菜单前,检查文本、链接、控件和状态标签是否易于阅读。", + "preview_link": "设备详情链接", + "preview_status": "Online", + "preview_button": "主要操作", + "preview_secondary": "Secondary", + "reset": "重置", + "done": "完成" + }, + "server_mgmt": { + "title": "服务器管理", + "subtitle": "类似 Cockpit 的 BetterDesk 控制台主机管理面板(测试版)。", + "beta_tooltip": "测试版功能 — 正在积极开发中。", + "notice_title": "测试版功能", + "notice_body": "这些工具在运行 BetterDesk 控制台进程的主机上执行。所有操作均被审计。", + "tab_overview": "概览", + "tab_terminal": "终端", + "tab_files": "文件", + "tab_services": "服务", + "cpu": "CPU", + "memory": "内存", + "load": "负载平均值", + "disks": "磁盘", + "history": "历史记录(最近 60 个样本)", + "host_info": "主机信息", + "cores": "核心", + "uptime": "运行时间", + "no_disks": "没有可用的磁盘数据", + "info_hostname": "Hostname", + "info_platform": "Platform", + "info_kernel": "Kernel", + "info_node": "Node.js", + "info_process_id": "Process ID", + "info_pty_available": "PTY 可用", + "term_connect": "连接", + "term_disconnect": "断开", + "term_clear": "清除", + "term_status": "Status", + "term_connecting": "连接中…", + "term_connected": "已连接", + "term_disconnected": "已断开", + "term_error": "连接错误", + "term_warning": "命令会以控制台进程所属用户身份运行。添加 sudoers 规则以启用提权。", + "term_hint": "提示:输入 `sudo -i` 进行提权(需要 sudoers 配置)。", + "term_lib_failed": "加载终端库失败", + "files_up": "上一级", + "files_go": "Go", + "files_mkdir": "New folder", + "files_name": "名称", + "files_size": "大小", + "files_perms": "权限", + "files_mtime": "修改时间", + "files_rename": "重命名", + "files_rename_prompt": "New name:", + "files_empty": "空目录", + "files_error": "列出目录失败", + "read_failed": "读取文件失败", + "save_failed": "保存文件失败", + "rename_failed": "重命名失败", + "delete_failed": "删除失败", + "delete_confirm": "删除此条目?", + "mkdir_prompt": "新文件夹名称:", + "mkdir_failed": "创建文件夹失败", + "file_saved": "文件已保存", + "binary_warn": "二进制文件 — 仅预览", + "encoding_utf8": "UTF-8 text", + "truncated": "truncated", + "full": "full", + "svc_search_placeholder": "搜索服务…", + "svc_name": "服务", + "svc_state": "状态", + "svc_description": "说明", + "svc_empty": "未找到服务", + "svc_load_failed": "加载服务失败", + "svc_action_failed": "操作失败", + "svc_confirm": "Run", + "svc_start": "启动", + "svc_stop": "停止", + "svc_restart": "重启", + "svc_reload": "重新加载", + "svc_enable": "启用", + "svc_disable": "禁用", + "svc_status": "Status" + }, + "download": { + "title": "下载 BetterDesk 代理", + "choose_platform": "选择您的平台", + "choose_platform_hint": "选择与您的操作系统匹配的安装程序。", + "download": "下载", + "building": "正在构建…", + "failed": "构建失败", + "need_help": "需要帮助?", + "powered_by": "技术支持" + }, + "server_attestation": { + "title": "服务器性能认证", + "subtitle": "性能基准测试,在 80% CPU、内存和磁盘阈值下确定并发远程连接容量。", + "warning_title": "负载测试", + "warning_body": "基准测试模拟对信令和中继服务器的并行 WebSocket 连接。请在非高峰时段运行 — 此测试会对生产环境产生负载。", + "run_benchmark": "运行基准测试", + "abort": "中止", + "download_report": "下载 JSON 报告", + "last_test": "上次测试", + "no_test_yet": "尚未运行任何基准测试", + "max_connections": "最大连接数", + "threshold_80": "80% 阈值 — 最终指标", + "disk": "磁盘", + "ramp_chart": "负载爬升图", + "connections": "连接数", + "connections_short": "连接", + "tier_guide_title": "每个等级代表什么?", + "tier_bronze": "BRONZE", + "tier_iron": "IRON", + "tier_titanium": "TITANIUM", + "tier_platinum": "PLATINUM", + "tier_obsidian": "OBSIDIAN", + "tier_none": "UNRATED", + "tier_bronze_desc": "1–25 个并发连接 — 小型 VPS(1–2 vCPU,2–4 GB RAM)。", + "tier_iron_desc": "26–75 个连接 — 中端服务器(2–4 vCPU,4–8 GB RAM)。", + "tier_platinum_desc": "76–200 个连接 — 高性能服务器(4–8 vCPU,8–16 GB RAM)。", + "tier_titanium_desc": "201–400 个连接 — 企业级基础设施(8+ vCPU,16–32 GB RAM)。", + "tier_obsidian_desc": "401+ 个连接 — 极速级:专用硬件,16+ vCPU,32+ GB RAM,NVMe。", + "docker_note": "注意:在 Docker 中,CPU/内存指标可能反映容器限制而非物理主机。", + "badge_tooltip": "BetterDesk 服务器性能认证 — 服务器性能认证", + "confirm_run": "此基准测试将使用模拟连接对服务器进行负载测试。继续?", + "starting": "启动中…", + "complete": "基准测试完成", + "signal_peers": "信令节点", + "relay_sessions": "中继会话", + "page_error": "加载服务器性能认证页面失败", + "mode_estimated": "估算值(WebSocket 不可达)", + "incomplete": "基准测试结束但未获得有效等级" + }, + "commercialization": { + "title": "商业化", + "subtitle": "支持套餐、计费会话和工作报告", + "alpha_badge": "ALPHA", + "alpha_tooltip": "早期功能 — 计费和套餐正在积极开发中。", + "tabs": { + "overview": "概览", + "packages": "套餐与合同", + "sessions": "会话", + "reports": "报告", + "settings": "高级设置" }, - "branding": { - "identity_title": "品牌标识", - "identity_desc": "自定义控制台中显示的应用名称和描述", - "app_name": "应用名称", - "app_description": "应用描述", - "logo_title": "标志", - "logo_desc": "选择标志在侧边栏和登录页面中的显示方式", - "logo_type_text": "文字标志", - "logo_type_icon": "Material 图标", - "logo_type_svg": "SVG 代码", - "logo_type_image": "图片 URL", - "logo_text": "标志文字", - "logo_text_hint": "显示为品牌标志的主要文字", - "logo_text_accent": "强调文字", - "logo_text_accent_hint": "标志下方的文字(例如产品名称或标语)", - "logo_icon_name": "图标名称", - "logo_icon_hint": "输入 Material Icons 名称(例如 dns、cloud、security)。参见 fonts.google.com/icons", - "logo_svg_code": "SVG 代码", - "logo_svg_hint": "在此粘贴您的 SVG 标记。支持包含路径和样式的完整 元素。", - "logo_image_upload": "上传图片", - "logo_image_choose": "选择图片文件", - "logo_image_hint": "PNG、JPG、GIF、WebP 或 SVG。最大 2 MB。图片保存在服务器上。", - "logo_image_url": "图片路径 / URL", - "logo_image_url_hint": "上传文件时自动填充,或手动输入 URL / 路径。", - "logo_image_too_large": "图片过大。最大允许 2 MB。", - "logo_image_invalid_type": "无效的文件类型。请使用 PNG、JPG、GIF、WebP 或 SVG。", - "logo_upload_success": "Logo 上传成功。", - "preview": "预览", - "colors_title": "配色方案", - "colors_desc": "自定义调色板。留空使用默认值。", - "colors_backgrounds": "背景色", - "colors_text": "文字色", - "colors_accents": "强调色", - "colors_borders": "边框色", - "typography_title": "字体排版", - "typography_desc": "选择标题和正文字体。字体将下载到服务器进行自托管。", - "font_heading": "标题字体", - "font_heading_hint": "用于标题(H1–H6)和文字标志", - "font_body": "正文字体", - "font_body_hint": "用于正文和界面元素", - "font_search_placeholder": "搜索字体...", - "font_system_default": "系统默认", - "font_clear": "清除", - "font_cat_all": "全部", - "font_downloaded_count": "字体已下载到服务器", - "import_export_title": "导入 / 导出", - "import_export_desc": "将主题另存为 JSON 文件或从其他实例导入", - "export_theme": "导出主题", - "import_theme": "导入主题", - "reset_defaults": "恢复默认", - "save_branding": "保存品牌设置", - "saved": "品牌设置已保存。正在重新加载...", - "exported": "主题已导出", - "imported": "主题导入成功。正在重新加载...", - "import_error": "主题导入失败。文件格式无效。", - "reset_confirm": "确定要将品牌设置恢复为默认值吗?此操作无法撤销。", - "reset_success": "品牌设置已恢复为默认值。正在重新加载...", - "powered_by": "技术支持", - "background_title": "背景与外观", - "background_desc": "设置控制台壁纸、渐变或纯色背景。卡片悬浮其上。", - "bg_type_none": "无", - "bg_type_color": "纯色", - "bg_type_gradient": "渐变", - "bg_type_image": "图片", - "bg_color": "背景颜色", - "bg_gradient": "CSS 渐变", - "bg_gradient_hint": "任何有效的 CSS 渐变,例如 linear-gradient(135deg, #1e293b, #0f172a)", - "bg_image_upload": "上传背景图片", - "bg_image_choose": "选择图片文件", - "bg_image_hint": "PNG、JPG、WebP 或 GIF。最大 8 MB。存储在服务器上。", - "bg_image_url": "图片路径 / URL", - "bg_size": "图片尺寸", - "bg_size_cover": "覆盖(填满屏幕)", - "bg_size_contain": "包含(适应)", - "bg_size_auto": "自动(原始)", - "bg_blur": "背景模糊", - "bg_overlay": "深色遮罩", - "bg_overlay_hint": "使背景变暗以提高文字可读性。", - "bg_image_too_large": "图片过大。最大尺寸为 8 MB。", - "bg_image_invalid_type": "文件类型无效。请使用 PNG、JPG、WebP 或 GIF。", - "bg_upload_success": "背景图片上传成功。", - "login_title": "登录页面", - "login_desc": "自定义登录界面的标题、副标题和背景。", - "login_heading": "登录标题", - "login_heading_placeholder": "欢迎回来", - "login_subheading": "登录副标题", - "login_subheading_placeholder": "登录您的账户", - "login_bg_inherit": "与控制台相同", - "agent_title": "代理下载页面", - "agent_desc": "自定义向最终用户显示的公共代理下载门户。", - "agent_show_powered": "显示 \"Powered by BetterDesk\"", - "agent_show_powered_hint": "在下载门户页脚显示 BetterDesk 署名。", - "footer_title": "页脚与版权", - "footer_desc": "添加显示在登录界面和控制台侧边栏的自定义页脚行。", - "footer_text": "页脚文字", - "footer_text_hint": "例如版权声明或公司名称。", - "show_powered": "显示 \"BetterDesk\" 署名", - "show_powered_hint": "在登录页脚和侧边栏显示 BetterDesk 名称和版本。", - "custom_css_title": "自定义 CSS", - "custom_css_desc": "高级:注入应用于整个控制台和登录页面的自定义 CSS。", - "custom_css_hint": "请谨慎使用。无效或不安全的规则会被过滤。最多 20,000 个字符。" + "clock": { + "title": "服务器时间 (NTP)", + "check_now": "立即检查", + "unsynced": "服务器时钟未同步 — 可计费会话可能被阻止" }, - "device_detail": { - "tab_overview": "概览", - "tab_tags": "标签与备注", - "tab_actions": "操作", - "section_identity": "身份信息", - "section_network": "网络", - "section_timestamps": "时间戳", - "section_connect": "连接", - "section_manage": "管理", - "folder": "文件夹", - "status_tier": "状态等级", - "device_banned": "此设备已被封禁", - "no_reason": "未提供原因", - "tags": "标签", - "no_tags": "此设备未分配标签", - "tag_placeholder": "输入标签名...", - "add_tag": "添加", - "tag_exists": "此标签已存在", - "notes": "备注", - "notes_placeholder": "添加关于此设备的备注...", - "danger_zone": "危险区域", - "action_connect_web": "网页远程", - "action_connect_web_desc": "通过浏览器远程桌面连接", - "action_native_remote": "BetterDesk 远程", - "action_native_remote_desc": "原生 JPEG 流 — 无需插件", - "action_connect_desktop": "桌面客户端", - "action_connect_desktop_desc": "在桌面客户端应用中打开", - "action_change_id_desc": "更改设备注册 ID", - "action_ban_desc": "阻止此设备连接", - "action_unban_desc": "允许此设备重新连接", - "action_delete_desc": "永久删除此设备", - "tab_hardware": "硬件", - "tab_metrics": "指标", - "tab_services": "服务", - "tab_processes": "进程", - "tab_events": "事件", - "tab_activity": "活动", - "tab_files": "文件", - "agent_lazy_hint": "单击此选项卡以从代理加载实时数据", - "agent_offline": "代理离线", - "agent_timeout": "代理响应超时", - "agent_error": "从代理加载数据失败", - "service_name": "名称", - "service_display": "显示名称", - "service_status": "状态", - "service_start": "启动模式", - "process_name": "名称", - "process_user": "用户", - "process_memory": "内存", - "section_system": "系统", - "section_cpu": "处理器", - "section_memory": "内存", - "section_displays": "显示器", - "section_encoding": "编码能力", - "section_live_metrics": "实时指标", - "section_current_usage": "当前使用情况", - "section_usage_history": "使用历史", - "os": "操作系统", - "version": "客户端版本", - "cpu_model": "CPU 型号", - "cpu_cores": "CPU 核心数", - "cpu_freq": "CPU 频率", - "total_memory": "总内存", - "metric_memory": "内存", - "metric_disk": "磁盘", - "metrics_updated": "已更新", - "device_groups": "分组", - "no_sysinfo": "暂无硬件信息", - "no_sysinfo_hint": "设备发送系统信息报告后将显示硬件信息", - "no_metrics": "暂无指标数据", - "no_metrics_hint": "设备发送心跳报告后将显示指标数据", - "chart_oldest": "← 最早", - "chart_newest": "最新 →" + "stats": { + "active_sessions": "活动可计费会话" }, - "inventory": { - "title": "资产清单", - "subtitle": "受管设备的硬件和软件清单", - "device_id": "设备 ID", - "hostname": "主机名", - "os": "操作系统", - "cpu": "CPU", - "cpu_cores": "CPU 核心数", - "cpu_usage": "CPU 使用率", - "memory": "内存", - "memory_total": "总内存", - "memory_used": "已用内存", - "memory_available": "可用内存", - "memory_usage": "内存使用率", - "swap": "交换空间", - "disks": "磁盘", - "disk_count": "磁盘数量", - "network": "网络", - "network_interfaces": "网络接口", - "software": "软件", - "software_count": "已安装软件", - "system": "系统", - "kernel": "内核", - "architecture": "架构", - "uptime": "运行时间", - "frequency": "频率", - "physical_cores": "物理核心", - "logical_cores": "逻辑核心", - "model": "型号", - "usage": "使用率", - "total": "总计", - "used": "已用", - "available": "可用", - "mount_point": "挂载点", - "removable": "可移动", - "mac_address": "MAC 地址", - "ip_addresses": "IP 地址", - "traffic": "流量", - "collect_now": "立即采集", - "collector_running": "采集器运行中", - "collector_stopped": "采集器已停止", - "last_upload": "最后上传", - "total_uploads": "总计", - "last_seen": "最后在线", - "collected_at": "采集时间", - "no_data": "暂无资产数据。点击「立即采集」收集系统信息。", - "no_devices": "未找到有资产数据的设备", - "detail_title": "设备资产详情", - "telemetry": "遥测", - "view_detail": "查看详情", - "export": "导出", - "refresh": "刷新" + "packages": { + "new": "新建套餐", + "name": "名称", + "included_minutes": "包含分钟", + "overage_rate": "超额费率 / 小时", + "currency": "货币", + "heading": "支持套餐", + "prompt_name": "套餐名称", + "create_title": "为组织新建套餐", + "create_submit": "创建套餐", + "select_org": "组织", + "select_org_placeholder": "选择组织…" }, - "tickets": { - "title": "服务台", - "subtitle": "支持工单和问题跟踪", - "create": "新建工单", - "edit": "编辑工单", - "delete": "删除工单", - "detail": "工单详情", - "ticket_id": "工单 ID", - "ticket_title": "标题", - "description": "描述", - "status": "状态", - "priority": "优先级", - "category": "分类", - "assigned_to": "分配给", - "created_by": "创建者", - "device": "设备", - "sla_due": "SLA 到期", - "created_at": "创建时间", - "updated_at": "更新时间", - "resolved_at": "解决时间", - "closed_at": "关闭时间", - "status_open": "待处理", - "status_in_progress": "处理中", - "status_resolved": "已解决", - "status_closed": "已关闭", - "priority_low": "低", - "priority_medium": "中", - "priority_high": "高", - "priority_critical": "紧急", - "category_general": "常规", - "category_hardware": "硬件", - "category_software": "软件", - "category_network": "网络", - "category_access": "访问权限", - "category_other": "其他", - "comments": "评论", - "add_comment": "添加评论", - "comment_placeholder": "写下评论...", - "internal_note": "内部备注(对终端用户不可见)", - "attachments": "附件", - "upload_attachment": "上传附件", - "download": "下载", - "connect_device": "连接到设备", - "no_tickets": "未找到工单", - "no_comments": "暂无评论", - "no_attachments": "暂无附件", - "title_required": "标题为必填项", - "delete_confirm": "确定要删除工单 #{id} 吗?", - "delete_success": "工单删除成功", - "created_success": "工单创建成功", - "updated_success": "工单更新成功", - "sla_overdue": "SLA 已逾期", - "filter_all": "全部", - "search_placeholder": "搜索工单...", - "assign_to_me": "分配给我", - "unassign": "取消分配", - "stats_total": "总计", - "stats_open": "待处理", - "stats_in_progress": "处理中", - "stats_resolved": "已解决", - "stats_closed": "已关闭" - }, - "activity": { - "title": "活动监控", - "subtitle": "应用使用和空闲跟踪", - "device": "设备", - "hostname": "主机名", - "sessions": "会话", - "idle_time": "空闲时间", - "active_time": "活跃时间", - "last_report": "最后报告", - "top_apps": "热门应用", - "app_name": "应用程序", - "window_title": "窗口标题", - "category": "分类", - "duration": "持续时间", - "started_at": "开始时间", - "ended_at": "结束时间", - "session_count": "会话数", - "total_active": "总活跃时间", - "total_idle": "总空闲时间", - "detail_count": "详细记录", - "no_data": "暂无活动数据", - "no_sessions": "暂无会话记录", - "filter_from": "从", - "filter_to": "到", - "filter_apply": "应用筛选", - "hours": "小时", - "minutes": "分钟", - "seconds": "秒", - "category_browser": "浏览器", - "category_productivity": "办公效率", - "category_communication": "通讯", - "category_development": "开发", - "category_media": "媒体", - "category_gaming": "游戏", - "category_system": "系统", - "category_other": "其他", - "summary": "摘要", - "details": "详情", - "refresh": "刷新", - "search": "搜索设备...", - "date_range": "日期范围", - "device_id": "设备ID", - "session_start": "会话开始", - "session_end": "会话结束", - "user": "用户", - "no_activity": "暂无活动记录", - "reported_at": "报告时间", - "detail": "详情", - "no_apps": "暂无应用" - }, - "automation": { - "title": "自动化与告警", - "subtitle": "告警规则、远程命令和 SMTP 配置", - "rules": "告警规则", - "rules_subtitle": "定义触发通知的条件", - "alerts": "告警历史", - "alerts_subtitle": "查看和确认已触发的告警", - "commands": "远程命令", - "commands_subtitle": "向远程设备发送命令", - "smtp": "SMTP 配置", - "smtp_subtitle": "邮件通知设置", - "rule_name": "规则名称", - "description": "描述", - "condition_type": "条件类型", - "condition_op": "运算符", - "condition_value": "阈值", - "severity": "严重程度", - "scope_device": "目标设备", - "scope_all": "所有设备", - "cooldown": "冷却时间(秒)", - "notify_emails": "通知邮箱", - "enabled": "已启用", - "disabled": "已禁用", - "create_rule": "创建规则", - "edit_rule": "编辑规则", - "delete_rule": "删除规则", - "acknowledge": "确认", - "acknowledged": "已确认", - "unacknowledged": "未确认", - "triggered_at": "触发时间", - "severity_info": "信息", - "severity_warning": "警告", - "severity_critical": "严重", - "op_gt": "大于", - "op_gte": "大于等于", - "op_lt": "小于", - "op_lte": "小于等于", - "op_eq": "等于", - "op_neq": "不等于", - "type_cpu_usage": "CPU 使用率 (%)", - "type_memory_usage": "内存使用率 (%)", - "type_disk_usage": "磁盘使用率 (%)", - "type_offline_duration": "离线时长 (秒)", - "type_idle_duration": "空闲时长 (秒)", - "type_custom": "自定义", - "command_type": "命令类型", - "command_payload": "命令 / 脚本", - "command_result": "结果", - "command_status": "状态", - "send_command": "发送命令", - "status_pending": "待处理", - "status_running": "运行中", - "status_completed": "已完成", - "status_failed": "失败", - "smtp_host": "SMTP 主机", - "smtp_port": "端口", - "smtp_secure": "使用 TLS", - "smtp_user": "用户名", - "smtp_pass": "密码", - "smtp_from": "发件人地址", - "smtp_test": "测试连接", - "smtp_save": "保存配置", - "smtp_test_success": "连接成功", - "smtp_test_failed": "连接失败", - "no_rules": "暂未配置告警规则", - "no_alerts": "暂无告警触发", - "no_commands": "暂无已发送的命令", - "id_payload_required": "设备 ID 和命令内容为必填项", - "no_commands_sent": "尚未发送任何命令" - }, - "file_transfer": { - "title": "文件传输", - "transfers": "传输列表", - "new_transfer": "新建传输", - "upload": "上传", - "download": "下载", - "direction": "方向", - "filename": "文件名", - "file_size": "文件大小", - "mime_type": "MIME 类型", - "progress": "进度", - "status": "状态", - "device": "设备", - "initiated_by": "发起者", - "created_at": "创建时间", - "cancel": "取消", - "cancel_confirm": "确定要取消此传输吗?", - "download_file": "下载文件", - "browse_files": "浏览文件", - "select_file": "选择文件", - "select_device": "选择设备", - "no_transfers": "暂无文件传输", - "status_pending": "待处理", - "status_active": "进行中", - "status_completed": "已完成", - "status_failed": "失败", - "status_cancelled": "已取消", - "bytes_transferred": "已传输字节", - "chunks": "分块", - "transfer_started": "传输已开始", - "transfer_completed": "传输已完成", - "transfer_failed": "传输失败", - "transfer_cancelled": "传输已取消", - "max_file_size": "最大文件大小:4 GB", - "error_too_large": "文件过大", - "error_no_device": "未选择设备", - "error_no_file": "未选择文件" - }, - "network": { - "title": "网络监控", - "targets": "监控目标", - "add_target": "添加目标", - "edit_target": "编辑目标", - "delete_target": "删除目标", - "delete_confirm": "确定要删除此目标吗?", - "target_name": "名称", - "host": "主机", - "port": "端口", - "url": "URL", - "check_type": "检查类型", - "timeout": "超时(毫秒)", - "interval": "间隔(毫秒)", - "enabled": "已启用", - "status": "状态", - "last_check": "最后检查", - "last_rtt": "最后 RTT", - "rtt_ms": "RTT(毫秒)", - "status_up": "正常", - "status_down": "宕机", - "status_unknown": "未知", - "check_now": "立即检查", - "history": "检查历史", - "stats": "统计", - "total_targets": "总目标数", - "targets_up": "正常目标", - "targets_down": "宕机目标", - "type_ping": "Ping (ICMP)", - "type_tcp": "TCP 端口", - "type_http": "HTTP", - "type_https": "HTTPS", - "tools": "网络工具", - "ping_tool": "Ping 测试", - "tcp_tool": "TCP 端口检查", - "http_tool": "HTTP 检查", - "dns_tool": "DNS 解析", - "monitor_start": "启动监控", - "monitor_stop": "停止监控", - "monitor_running": "监控运行中", - "monitor_stopped": "监控已停止", - "no_targets": "暂未配置监控目标", - "no_history": "暂无检查历史", - "error_code": "错误", - "status_code": "HTTP 状态码", - "search_targets": "搜索目标...", - "name": "名称", - "tab_targets": "目标", - "tab_tools": "工具", - "avg_latency": "平均延迟", - "type": "类型", - "latency": "延迟", - "check_history": "检查历史", - "name_host_required": "名称和主机为必填项", - "uptime": "运行时间", - "response_time": "响应时间", - "avg_response": "平均响应", - "charts": "图表", - "realtime": "实时", - "response_time_ms": "响应时间 (ms)", - "uptime_percent": "运行时间 %", - "last_24h": "过去24小时", - "last_7d": "过去7天", - "last_30d": "过去30天" - }, - "dataguard": { - "title": "数据防护 — DLP", - "policies": "DLP 策略", - "add_policy": "添加策略", - "edit_policy": "编辑策略", - "delete_policy": "删除策略", - "delete_confirm": "确定要删除此策略吗?", - "policy_name": "名称", - "policy_description": "描述", - "status": "状态", - "enabled": "已启用", - "disabled": "已禁用", - "rules": "规则", - "add_rule": "添加规则", - "rule_type": "规则类型", - "rule_type_usb": "USB 设备", - "rule_type_file": "文件操作", - "action": "动作", - "action_allow": "允许", - "action_block": "阻止", - "action_log": "仅记录", - "filter": "筛选", - "vid": "供应商 ID (VID)", - "pid": "产品 ID (PID)", - "serial": "序列号", - "device_class": "设备类型", - "drive_type": "驱动器类型", - "file_extensions": "文件扩展名", - "events": "DLP 事件", - "event_source": "来源", - "event_source_usb": "USB", - "event_source_file": "文件", - "event_type": "事件类型", - "event_details": "详情", - "no_policies": "暂未配置 DLP 策略", - "no_events": "暂无 DLP 事件记录", - "stats": "统计", - "total_events": "总事件数", - "blocked_events": "已阻止", - "logged_events": "已记录", - "usb_events": "USB 事件", - "file_events": "文件事件", - "device_id": "设备 ID", - "policy_matched": "匹配的策略", - "timestamp": "时间戳", - "drive_removable": "可移动", - "drive_fixed": "固定", - "drive_network": "网络", - "drive_cdrom": "CD-ROM", - "drive_unknown": "未知", - "total_policies": "策略总数", - "active_policies": "活动策略", - "violations": "Violations", - "blocked": "Blocked", - "tab_policies": "策略", - "tab_events": "Events", - "search_policies": "搜索策略...", - "create_policy": "创建策略", - "policy_type": "策略类型", - "scope": "Scope", - "events_count": "Events", - "search_events": "搜索事件...", - "event_time": "Event Time", - "device": "设备", - "policy": "策略", - "detail": "Detail", - "scope_help": "以逗号分隔设备 ID,或留空表示全部", - "scope_all": "所有设备", - "active": "Active", - "type_file_type": "文件类型", - "type_clipboard": "剪贴板", - "type_screen_share": "屏幕共享", - "type_file_transfer": "文件传输", - "policy_desc": "策略描述", - "type_usb": "USB" + "sessions": { + "device": "设备", + "operator": "操作员", + "duration": "时长", + "phase": "阶段", + "amount": "金额" }, "reports": { - "title": "报表", - "generate": "生成报表", - "generate_csv": "导出 CSV", - "report_type": "报表类型", - "type_devices": "设备摘要", - "type_activity": "活动摘要", - "type_security": "安全报告", - "type_tickets": "工单报告", - "type_network": "网络报告", - "type_inventory": "资产报告", - "type_alerts": "告警报告", - "saved": "已保存的报表", - "save_report": "保存报表", - "delete_report": "删除报表", - "delete_confirm": "确定要删除此已保存的报表吗?", - "no_saved": "暂无已保存的报告", - "report_title": "标题", - "created_by": "创建者", - "created_at": "创建时间", - "filters": "筛选条件", - "date_from": "从", - "date_to": "到", - "device_filter": "设备 ID", - "generated_at": "生成时间", - "section": "数据部分", - "total_devices": "设备总数", - "online": "在线", - "offline": "离线", - "banned": "已封禁", - "platform_distribution": "平台分布", - "top_applications": "热门应用", - "total_active": "总活跃时间", - "total_idle": "总空闲时间", - "dlp_stats": "DLP 统计", - "banned_devices": "已封禁设备", - "audit_logs": "审计日志", - "ticket_stats": "工单统计", - "category_distribution": "分类分布", - "priority_distribution": "优先级分布", - "targets_status": "目标状态", - "os_distribution": "操作系统分布", - "avg_ram": "平均内存", - "alert_rules": "告警规则", - "recent_alerts": "最近告警", - "tab_generate": "生成", - "tab_saved": "已保存的报告", - "type_devices_desc": "所有注册设备概览", - "type_activity_desc": "应用使用和会话统计", - "type_security_desc": "安全事件和被禁用设备", - "type_tickets_desc": "支持工单统计和摘要", - "type_network_desc": "网络监控和运行时间数据", - "type_inventory_desc": "硬件和软件清单", - "type_alerts_desc": "告警和规则历史", - "report_name": "报告名称", - "format": "格式", - "save": "保存", - "preview": "预览", - "download": "下载", - "delete_saved": "删除已保存的报告", - "raw_json": "Raw JSON" + "session": "会话", + "summary": "摘要", + "date": "日期" }, - "tenants": { - "title": "多租户", - "list": "租户列表", - "add_tenant": "添加租户", - "edit_tenant": "编辑租户", - "delete_tenant": "删除租户", - "delete_confirm": "确定要删除此租户吗?所有设备和用户分配将被移除。", - "name": "名称", - "slug": "标识符", - "contact_name": "联系人", - "contact_email": "联系邮箱", - "max_devices": "最大设备数", - "max_devices_hint": "0 = 不限", - "notes": "备注", - "active": "活跃", - "inactive": "停用", - "devices": "设备", - "users": "用户", - "assign_device": "分配设备", - "assign_devices": "分配设备", - "remove_device": "移除设备", - "assign_user": "分配用户", - "remove_user": "移除用户", - "no_tenants": "暂未配置租户", - "no_devices": "此租户暂无分配的设备", - "no_users": "此租户暂无分配的用户", - "stats": "租户统计", - "total_devices": "设备总数", - "online_devices": "在线设备", - "total_users": "用户总数", - "created_at": "创建时间", - "updated_at": "更新时间", - "slug_exists": "租户标识符已存在", - "total_tenants": "租户总数", - "active_tenants": "活跃租户", - "search": "搜索租户...", - "create_tenant": "创建租户", - "detail": "租户详情", - "contact": "联系方式", - "enabled": "已启用", - "disabled": "已禁用", - "max": "最大", - "info": "租户信息", - "status": "状态" + "contracts": { + "title": "组织合同", + "new": "分配套餐", + "org": "组织", + "package": "套餐", + "remaining": "剩余分钟", + "status": "状态", + "actions": "操作", + "suspend": "暂停", + "activate": "激活", + "select_org": "选择组织", + "select_package": "选择套餐", + "no_orgs": "未找到组织", + "no_packages": "请先创建套餐" }, - "registrations": { - "title": "设备注册", - "subtitle": "管理通过局域网发现的设备注册请求", - "search_placeholder": "按设备 ID、主机名或 IP 搜索...", - "no_registrations": "暂无注册请求", - "col_device_id": "设备 ID", - "col_hostname": "主机名", - "col_platform": "平台", - "col_ip": "IP 地址", - "col_version": "版本", - "col_status": "状态", - "col_requested": "请求时间", - "col_actions": "操作", - "status_pending": "待审批", - "status_approved": "已批准", - "status_rejected": "已拒绝", - "approve_btn": "批准", - "approve_confirm": "确定要批准此设备吗?该设备将接收服务器凭据并可自动连接。", - "approved_success": "设备注册批准成功", - "reject_btn": "拒绝", - "reject_title": "拒绝注册", - "reject_confirm": "确定要拒绝此注册请求吗?", - "reject_reason": "原因(可选)", - "reject_reason_placeholder": "请输入拒绝原因...", - "rejected_success": "设备注册已拒绝", - "delete_confirm": "确定要删除此注册记录吗?", - "deleted_success": "注册记录已删除", - "enrollment_title": "设备登记", - "enrollment_subtitle": "来自 BetterDesk 桌面客户端的待处理登记请求", - "enrollment_empty": "没有待处理的登记请求", - "enrollment_approve": "Approve", - "enrollment_reject": "Reject", - "enrollment_display_name": "显示名称", - "enrollment_display_name_placeholder": "输入此设备的名称...", - "enrollment_sync_mode": "同步模式", - "enrollment_sync_silent": "静默 — 最少遥测", - "enrollment_sync_standard": "标准 — 均衡同步", - "enrollment_sync_turbo": "极速 — 高强度同步", - "enrollment_approved_success": "设备登记已批准", - "enrollment_rejected_success": "设备登记已拒绝", - "approve_title": "审批设备", - "field_name": "设备名称", - "field_name_placeholder": "请为此设备输入名称...", - "field_sync_mode": "同步模式", - "sync_standard": "标准 — 均衡同步", - "sync_silent": "静默 — 最小遥测", - "sync_turbo": "极速 — 积极同步", - "field_tags": "标签", - "field_tags_placeholder": "逗号分隔的标签(如 办公室, 笔记本)...", - "field_tags_existing": "现有标签", - "field_tag_add_placeholder": "添加新标签...", - "field_tag_add_btn": "添加", - "field_groups": "设备分组", - "field_folder": "文件夹", - "field_folder_none": "无文件夹", - "reject_ban_option": "封禁此设备", - "reject_ban_hint": "该设备将被封禁,无法发送新的注册请求。", - "banner_open_mode": "注册开放中 — 新 RustDesk 客户端无需操作员审批即可注册。在设置中启用托管模式以使用此队列。", - "banner_locked_mode": "注册已锁定 — 仅绑定令牌的设备可注册。需要托管模式以允许操作员审批未知客户端。", - "enrollment_settings_link": "注册设置" + "export": { + "csv": "导出 CSV", + "pdf": "导出 PDF", + "sessions_csv": "导出会话 CSV" }, - "backup": { - "title": "备份", - "desc": "下载完整的灾难恢复备份 — 包括数据库、服务器身份密钥、环境文件、品牌上传文件和 Go 服务器数据。该存档 (.tar.gz) 可以在新机器上还原,以便重新启动整个服务器。", - "restore_title": "还原", - "restore_desc": "上传之前下载的备份存档 (.tar.gz) 或旧版 JSON 配置快照。在下方选择要还原的组件。", - "stat_users": "用户", - "stat_settings": "设置", - "stat_folders": "文件夹", - "stat_groups": "分组", - "stat_strategies": "策略", - "stat_backend": "后端", - "stat_database": "数据库引擎", - "stat_keys": "包含服务器密钥", - "stat_env": "环境文件", - "stat_uploads": "品牌文件", - "download": "下载备份", - "creating": "正在创建备份...", - "download_success": "备份下载成功", - "upload": "上传备份", - "restore_confirm": "确定要从此备份还原吗?选定的组件将被覆盖。", - "restore_success": "备份还原成功。某些更改可能需要刷新页面。", - "restart_required": "某些还原的组件(密钥 / .env / Go 数据库)需要重启服务才能生效。", - "restored": "已还原", - "skipped": "已跳过", - "backup_date": "备份日期", - "security_warning": "此备份包含敏感信息(服务器密钥、环境文件、密码哈希和 2FA 密钥)。请妥善保管,切勿共享。", - "restore_warning": "还原密钥、环境文件或 Go 服务器数据库会覆盖服务器身份,随后需要重启服务。", - "opt_database": "数据库(所有表)", - "opt_database_hint": "重新导入所有控制台数据。实时应用,无需重启。", - "opt_uploads": "品牌文件", - "opt_uploads_hint": "标志和上传的图片。", - "opt_secrets": "服务器密钥和机密", - "opt_secrets_warning": "覆盖 Ed25519 服务器身份、API 密钥和会话密钥。需要重启服务。", - "opt_env": "环境文件 (.env)", - "opt_env_warning": "覆盖 SESSION_SECRET、API 密钥、数据库 DSN、端口和 TLS 设置。需要重启服务。", - "opt_godb": "Go 服务器数据库", - "opt_godb_warning": "覆盖 Go 服务器 SQLite 数据库(仅 SQLite 后端)。需要重启服务。", - "opt_settings": "控制台设置", - "opt_branding": "品牌 / 主题", - "opt_folders": "设备文件夹", - "opt_groups": "用户和设备分组", - "opt_addressbooks": "通讯录", - "opt_users": "用户账户", - "opt_users_warning": "破坏性操作:将使用备份数据替换所有用户账户。您可能会被登出。", - "no_file": "未选择备份文件", - "invalid_json": "无效的备份文件:不是有效的 JSON", - "invalid_format": "无效的备份文件:不是 BetterDesk 备份" + "report": { + "title": "工作报告", + "subtitle": "描述此远程会话期间执行的工作。", + "category": "类别", + "ticket_ref": "工单参考", + "summary": "执行的工作", + "skip": "暂时跳过", + "submit": "提交报告", + "summary_required": "摘要为必填项", + "saved": "工作报告已保存" }, - "cdap": { - "device_detail": "CDAP 设备", - "loading": "加载中...", - "loading_widgets": "正在加载设备控件...", - "load_error": "无法加载设备数据", - "connected": "已连接", - "disconnected": "已断开", - "device_offline_msg": "设备当前处于离线状态。控件值可能已过时。", - "no_widgets": "没有可用的控件", - "no_widgets_desc": "此设备尚未注册包含控件定义的 CDAP 清单。", - "command_log": "命令日志", - "clear_log": "清除日志", - "confirm_command": "确认命令", - "select_option": "选择", - "cdap_status": "CDAP 状态", - "cdap_enabled": "CDAP 已启用", - "cdap_disabled": "CDAP 已禁用", - "cdap_devices": "CDAP 设备", - "cdap_connections": "活跃连接", - "send_command": "发送命令", - "command_sent": "命令发送成功", - "command_failed": "命令发送失败", - "devices_title": "CDAP 设备", - "devices_subtitle": "通过自定义设备应用协议连接的设备", - "stat_connected": "已连接", - "stat_port": "端口", - "search_devices": "搜索设备...", - "no_devices": "没有已连接的设备", - "no_devices_desc": "当前没有 CDAP 设备连接。设备连接到网关后将显示在此处。", - "gateway_disabled": "CDAP 网关已禁用", - "gateway_disabled_desc": "在服务器配置中设置 CDAP_ENABLED=true 以启用 CDAP 网关。", - "gateway_active": "活跃", - "toggle_enable": "启用 CDAP", - "toggle_disable": "禁用 CDAP", - "enabled_restart": "CDAP 已启用。需要重启服务器以应用更改。", - "disabled_restart": "CDAP 已禁用。需要重启服务器以应用更改。", - "widgets": "个控件", - "type_all": "全部", - "type_iot": "物联网", - "type_scada": "SCADA", - "type_os_agent": "OS 代理", - "type_network": "网络", - "type_camera": "摄像头", - "type_custom": "自定义", - "active_alerts": "活动告警", - "alert_fired": "告警触发", - "alert_cleared": "告警已清除", - "no_alerts": "无活动告警", - "connect_terminal": "连接终端", - "table_search": "搜索...", - "just_now": "刚刚", - "terminal_connecting": "正在连接设备...", - "terminal_disconnected": "已断开连接", - "terminal_error": "终端连接失败", - "linked_devices": "关联设备", - "link_device": "关联设备", - "unlink_device": "取消关联", - "no_linked_devices": "无关联设备", - "unlink_confirm": "确定要取消关联此设备吗?", - "link_prompt": "输入要关联的设备 Peer ID:", - "connect_desktop": "连接桌面", - "connect_video": "连接视频流", - "connect_files": "浏览文件", - "connect_audio": "连接音频", - "upload_file": "上传", - "desktop_connecting": "连接中...", - "video_connecting": "连接中...", - "files_connecting": "连接中...", - "audio_connecting": "连接中...", - "audio_streaming": "播放中", - "clipboard_in": "已接收剪贴板", - "clipboard_out": "已发送剪贴板", - "monitor_select": "选择显示器", - "keyframe_request": "请求关键帧", - "quality_auto": "自动画质" + "empty": { + "packages": "尚无套餐。请使用上方按钮创建。", + "contracts": "尚无组织合同。请为组织分配套餐。", + "sessions": "尚无已记录的可计费会话。", + "reports": "尚无已提交的工作报告。" }, - "notifications": { - "title": "通知", - "empty": "没有新通知", - "mark_all_read": "全部标记为已读", - "see_all": "查看所有求助请求", - "help_request": "求助请求", - "just_now": "刚刚" + "assign": { + "title": "分配现有套餐", + "submit": "分配" }, - "desktop": { - "switch_mode": "桌面模式", - "console_mode": "控制台模式", - "loading": "加载中...", - "minimize": "最小化", - "maximize": "最大化", - "restore": "还原", - "close": "关闭", - "widgets_mode": "小组件", - "windows_mode": "窗口", - "wallpaper": "壁纸", - "add_widget": "添加小组件", - "remove_widget": "移除小组件", - "pop_out_widget": "弹出", - "pop_in_widget": "收回", - "configure": "配置", - "search_widgets": "搜索小组件...", - "cat_monitoring": "监控", - "cat_devices": "设备", - "cat_tools": "工具", - "cat_general": "通用", - "notes_placeholder": "在这里写笔记...", - "search_placeholder": "搜索设备、页面、设置...", - "search_pages": "页面", - "search_devices": "设备", - "search_no_results": "无结果", - "exit_desktop": "退出桌面模式", - "refresh": "刷新", - "widget_clock": "Clock", - "widget_device_status": "设备状态", - "widget_server_health": "服务器信息", - "widget_system_stats": "设备仪表", - "widget_device_list": "设备列表", - "widget_quick_actions": "快捷操作", - "widget_recent_activity": "最近活动", - "widget_notes": "Notes", - "widget_network_monitor": "网络监控", - "widget_tickets_summary": "Tickets", - "widget_iframe": "Web Embed", - "widget_cdap_devices": "CDAP 设备", - "widget_uptime": "Uptime", - "widget_port_status": "Port Status", - "widget_device_grid": "设备网格", - "widget_multi_gauge": "服务器仪表", - "widget_weekly_chart": "每周活动", - "widget_quick_controls": "快速控制", - "widget_bandwidth": "Bandwidth", - "widget_connection_stats": "连接统计", - "widget_weather": "天气", - "widget_world_clock": "世界时钟", - "widget_bookmarks": "书签", - "widget_user_sessions": "用户会话", - "widget_alert_feed": "警报源", - "label_online": "Online", - "label_offline": "Offline", - "label_total": "Total", - "label_blocked": "Blocked", - "label_banned": "Banned", - "label_active": "Active", - "label_service": "Service", - "label_port": "Port", - "label_uptime_prefix": "Uptime:", - "label_uptime": "运行时间", - "label_no_devices": "没有设备", - "label_no_activity": "No activity", - "label_no_targets": "No targets", - "label_unavailable": "不可用", - "label_open": "打开", - "label_in_progress": "In Progress", - "label_resolved": "Resolved", - "label_set_url": "在配置中设置 URL", - "label_server_uptime": "服务器运行时间", - "label_merged_info": "已合并到服务器信息小部件", - "label_with_notes": "含备注", - "label_metric": "Metric", - "label_count": "Count", - "label_total_devices": "设备总数", - "label_throughput": "Throughput", - "label_active_relays": "活动中继", - "label_total_relayed": "中继总数", - "label_total_bytes": "Total Bytes", - "label_filter_devices": "筛选设备...", - "label_all": "All", - "label_ban": "Ban", - "label_unban": "Unban", - "label_connect": "Connect", - "label_no_cdap_devices": "没有 CDAP 设备", - "action_add_widget": "添加小部件", - "label_merged_server_info": "已合并到服务器信息小部件", - "wp_images": "图片", - "wp_colors": "纯色", - "wp_custom_color": "自定义颜色", - "wp_fit_style": "样式", - "wp_fill": "填充", - "wp_fit": "适应", - "wp_stretch": "拉伸", - "wp_center": "居中", - "wp_unavailable": "此服务器上未安装壁纸图片。", - "wp_download_hint": "将PNG图片放入 public/wallpapers/ 目录以启用壁纸选择。", - "widget_calendar": "日历", - "widget_process_monitor": "进程监控", - "widget_disk_usage": "磁盘使用", - "widget_log_viewer": "日志查看器", - "widget_speed_test": "速度测试", - "widget_database_stats": "数据库统计", - "widget_docker_containers": "Docker 容器", - "widget_shell_command": "Shell 命令", - "widget_device_map": "设备地图", - "widget_remote_connect": "远程连接", - "label_no_online": "没有在线设备", - "label_no_events": "今天没有事件", - "label_event_title": "事件标题:", - "label_no_data": "暂无数据", - "label_download_speed": "下载速度", - "label_latency": "延迟", - "label_server": "服务器", - "label_run_test": "运行测试", - "label_testing": "测试中...", - "label_table": "表", - "label_rows": "行数", - "label_last_backup": "最后备份", - "label_no_containers": "没有容器", - "label_docker_unavailable": "Docker 不可用", - "label_no_command": "未配置命令", - "label_no_output": "暂无输出", - "label_run": "运行", - "label_presets": "预设", - "label_save_preset": "保存预设", - "label_load_preset": "加载预设", - "label_preset_name": "预设名称:", - "label_preset_monitoring": "监控", - "label_preset_helpdesk": "帮助台", - "label_preset_minimal": "最小化", - "label_preset_developer": "开发者", - "label_snap_layout": "吸附布局", - "label_auto_arrange": "自动排列", - "label_zone_layout": "区域布局", - "label_2col_equal": "两列(等宽)", - "label_2col_wide": "两列(60/40)", - "label_3col": "三列", - "label_2x2_grid": "2×2 网格", - "label_1_2": "1 + 2", - "label_1_3": "1 + 3", - "widget_group": "小组件分组", - "ungroup_widgets": "取消分组", - "group_widgets": "分组选中小组件", - "snap_layouts": "贴靠布局", - "snap_left": "贴靠到左侧", - "snap_right": "贴靠到右侧", - "snap_top_left": "贴靠到左上", - "snap_top_right": "贴靠到右上", - "snap_bottom_left": "贴靠到左下", - "snap_bottom_right": "贴靠到右下", - "aero_shake": "摇动最小化其他窗口", - "zone_resize": "拖动边框调整区域大小", - "zone_borders": "可拖动区域边框", - "app_drawer": "应用程序", - "search_apps": "搜索应用...", - "edit_shortcuts": "编辑快捷方式", - "widgets": "小部件", - "theme": "主题", - "fullscreen": "Fullscreen", - "help": "Help" - }, - "desktop_login": { - "click_to_sign_in": "点击任意位置或按任意键登录", - "username_placeholder": "用户名", - "password_placeholder": "密码", - "sign_in": "登录", - "verify": "验证", - "totp_title": "双因素认证", - "totp_subtitle": "输入验证器应用中的6位数代码", - "back_to_login": "返回登录", - "fill_all_fields": "请填写所有字段", - "invalid_credentials": "用户名或密码无效", - "invalid_code": "验证码无效", - "enter_6_digits": "请输入全部6位数字", - "network_error": "网络错误 — 请检查连接", - "session_expired": "会话已过期。请重新登录。" - }, - "permissions": { - "title": "权限管理", - "subtitle": "管理基于角色的权限和自定义覆盖", - "info_title": "权限如何工作", - "info_desc": "每个角色都有默认权限。您可以通过切换下面的开关来为每个角色添加或删除单独的权限。自定义覆盖会高亮显示,可以随时恢复为默认值。", - "select_role": "选择角色", - "select_role_placeholder": "选择角色...", - "reset_overrides": "重置所有覆盖", - "granted": "已授权", - "overrides": "覆盖", - "level": "级别", - "super_admin_tag": "完全访问", - "server_level_tag": "服务器级别", - "custom": "自定义", - "default": "默认", - "revert": "恢复默认", - "saved": "权限已更新", - "reverted": "已恢复默认", - "all_reverted": "所有覆盖已恢复", - "confirm_reset": "将此角色的所有自定义覆盖重置为默认值?", - "empty_title": "选择角色", - "empty_desc": "从上方下拉列表中选择一个角色以查看和管理其权限。", - "locked_title": "超级管理员", - "locked_desc": "超级管理员默认拥有所有权限,无法自定义。", - "cat_device": "设备", - "cat_user": "用户", - "cat_server": "服务器", - "cat_org": "组织", - "cat_audit": "审计与监控", - "cat_cdap": "CDAP", - "cat_enrollment": "注册", - "cat_chat": "聊天", - "cat_branding": "品牌", - "perm_device_view": "查看设备", - "perm_device_connect": "连接设备", - "perm_device_edit": "编辑设备", - "perm_device_delete": "删除设备", - "perm_device_ban": "封禁/解封设备", - "perm_device_change_id": "更改设备ID", - "perm_user_view": "查看用户", - "perm_user_create": "创建用户", - "perm_user_edit": "编辑用户", - "perm_user_delete": "删除用户", - "perm_server_config": "服务器配置", - "perm_server_keys": "管理API密钥", - "perm_org_create": "创建组织", - "perm_org_edit": "编辑组织", - "perm_org_delete": "删除组织", - "perm_org_manage_users": "管理组织用户", - "perm_org_manage_devices": "管理组织设备", - "perm_audit_view": "查看审计日志", - "perm_metrics_view": "查看指标", - "perm_blocklist_edit": "编辑黑名单", - "perm_cdap_view": "查看CDAP设备", - "perm_cdap_command": "发送CDAP命令", - "perm_cdap_terminal": "CDAP终端访问", - "perm_cdap_files": "CDAP文件访问", - "perm_enrollment_manage": "管理注册", - "perm_enrollment_approve": "审批注册", - "perm_chat_access": "聊天访问", - "perm_branding_edit": "编辑品牌", - "perm_server_attestation": "服务器性能认证" - }, - "tokens": { - "title": "设备令牌", - "subtitle": "管理自动设备配置的注册令牌", - "enrollment_mode": "注册模式", - "mode_open": "开放", - "mode_open_desc": "任何设备无需令牌即可注册", - "mode_managed": "托管", - "mode_managed_desc": "设备需要有效令牌或操作员批准才能注册", - "mode_locked": "锁定", - "mode_locked_desc": "只有持有有效令牌的设备才能注册", - "total": "令牌总数", - "active": "活跃", - "used": "已使用", - "revoked": "已撤销", - "search_placeholder": "搜索令牌...", - "status_pending": "待处理", - "status_active": "活跃", - "status_used": "已使用", - "status_revoked": "已撤销", - "status_expired": "已过期", - "bulk_generate": "批量生成", - "create": "创建令牌", - "edit": "编辑令牌", - "token": "令牌前缀", - "name": "名称", - "status": "状态", - "uses": "使用次数", - "bound_peer": "绑定设备", - "expires": "过期时间", - "created": "创建时间", - "actions": "操作", - "name_placeholder": "例如:办公电脑批次", - "max_uses": "最大使用次数", - "max_uses_hint": "0 = 不限", - "expires_in": "过期时间", - "no_expiration": "永不过期", - "expires_1h": "1小时", - "expires_24h": "24小时", - "expires_7d": "7天", - "expires_30d": "30天", - "note": "备注", - "note_placeholder": "关于此令牌的可选备注...", - "count": "数量", - "count_range": "要生成的令牌数量(1-100)", - "name_prefix": "名称前缀", - "generate": "生成", - "token_created": "令牌已创建", - "tokens_generated": "令牌已生成", - "copy_warning": "请立即复制令牌,之后将不再显示。", - "copy_token": "复制令牌", - "copied": "已复制!", - "revoke": "撤销", - "revoke_confirm": "确定要撤销此令牌吗?已使用该令牌注册的设备不受影响。", - "revoked_success": "令牌已撤销", - "no_tokens": "未找到令牌", - "expired": "已过期", - "never": "永不", - "save": "保存", - "cancel": "取消", - "unlimited": "不限" - }, - "tutorial": { - "next": "下一步", - "prev": "上一步", - "skip": "跳过", - "finish": "完成", - "close": "关闭", - "step_of": "{current} / {total}", - "console_sidebar_title": "导航侧栏", - "console_sidebar_text": "从这里访问所有模块。点击任意图标导航到相应部分。侧栏会根据屏幕大小自适应。", - "console_expand_title": "展开侧栏", - "console_expand_text": "点击此处展开侧栏查看完整标签。再次点击可收起。", - "console_search_title": "快速搜索", - "console_search_text": "搜索设备、设置或操作。键盘快捷键:Ctrl+K。", - "console_dashboard_title": "仪表盘", - "console_dashboard_text": "您的控制中心,显示服务器状态、在线设备和快捷操作。一目了然地监控重要指标。", - "console_devices_title": "设备管理", - "console_devices_text": "查看、搜索和管理所有已连接的设备。按状态筛选、分配标签并配置单个设备设置。", - "console_settings_title": "设置", - "console_settings_text": "配置服务器行为、安全选项、品牌和用户管理。根据您的需求自定义 BetterDesk。", - "console_desktop_title": "桌面模式", - "console_desktop_text": "切换到带有窗口工作区和小部件的桌面模式。非常适合多任务处理和监控仪表板。", - "console_complete_title": "准备就绪!", - "console_complete_text": "探索侧栏分类以发现所有功能。随时点击帮助图标重新启动此指南。", - "desktop_topbar_title": "顶部栏", - "desktop_topbar_text": "顶部栏显示时钟、快捷控制和应用抽屉入口。点击网格图标浏览所有应用。", - "desktop_drawer_title": "应用抽屉", - "desktop_drawer_text": "打开应用抽屉搜索并启动任何控制台功能作为浮动窗口。应用按类别组织。", - "desktop_widgets_title": "小部件面板", - "desktop_widgets_text": "您的可自定义工作区。小部件显示实时信息并提供功能快捷访问。拖拽可重新排列。", - "desktop_add_widget_title": "添加小部件", - "desktop_add_widget_text": "点击这里浏览可用的小部件。从监控显示、设备列表、笔记等中选择。", - "desktop_taskbar_title": "任务栏", - "desktop_taskbar_text": "打开的应用程序显示在这里。点击聚焦或最小化窗口。悬停图标查看应用名称。", - "desktop_snap_title": "Snap 布局", - "desktop_snap_text": "将窗口拖到屏幕边缘进行对齐,或悬停最大化按钮查看布局预设。试试 Aero Shake!", - "desktop_windows_title": "应用窗口", - "desktop_windows_text": "应用程序在可拖动、可调整大小的窗口中打开。从标题栏最小化、最大化或关闭。窗口层级在小部件之上。", - "desktop_search_title": "快速搜索", - "desktop_search_text": "跨设备、页面和设置搜索。随时按 Ctrl+K 打开搜索。", - "desktop_complete_title": "桌面模式就绪!", - "desktop_complete_text": "尝试从抽屉打开应用并排列窗口。使用小部件预设快速设置仪表板布局。", - "devices_folders_title": "设备文件夹", - "devices_folders_text": "将设备组织到文件夹中。点击文件夹筛选列表。右键单击重命名或删除。", - "devices_search_title": "搜索和筛选", - "devices_search_text": "按 ID、主机名或平台搜索。使用状态按钮仅显示在线、离线或全部设备。", - "devices_table_title": "设备列表", - "devices_table_text": "点击任何设备行查看详情。右侧菜单提供快捷操作:连接、编辑标签或删除。", - "devices_complete_title": "设备管理就绪!", - "devices_complete_text": "在文件夹之间拖动设备进行整理。双击设备打开详情面板。", - "settings_tabs_title": "设置分类", - "settings_tabs_text": "在常规、安全、外观和其他配置部分之间切换。", - "settings_content_title": "配置", - "settings_content_text": "每个部分包含特定的服务器和控制台设置。点击保存后生效。", - "settings_complete_title": "设置概览", - "settings_complete_text": "检查安全设置中的双因素认证、API 密钥和用户管理。访问外观自定义控制台样式。", - "help": "帮助和教程", - "tour_console": "控制台导览", - "tour_desktop": "桌面模式导览", - "tour_devices": "设备导览", - "tour_settings": "设置导览", - "reset_all": "重置所有教程", - "disable_tutorials": "禁用教程", - "enable_tutorials": "启用教程", - "tour_remote": "远程会话导览", - "tour_organization": "组织设置", - "tour_cdap": "CDAP 概览", - "tour_chat": "聊天基础", - "remote_toolbar_title": "远程工具栏", - "remote_toolbar_text": "通过工具栏访问显示控制、剪贴板同步、特殊按键和质量设置。使用 F11 切换全屏。", - "remote_canvas_title": "远程显示", - "remote_canvas_text": "这是远程屏幕。点击其中即可开始控制远程设备。鼠标和键盘输入会自动转发。", - "remote_clipboard_title": "剪贴板同步", - "remote_clipboard_text": "在您的电脑和远程设备之间复制粘贴文本。焦点位于远程显示时,可像平常一样使用 Ctrl+C / Ctrl+V。", - "remote_complete_title": "远程会话已就绪!", - "remote_complete_text": "使用工具栏按钮发送特殊按键(Ctrl+Alt+Del、PrintScreen)并切换显示器。按 Escape 或点击断开连接结束会话。", - "org_overview_title": "组织", - "org_overview_text": "组织可用于对用户、设备和策略分组。每个组织都有自己的管理员、操作员和设置。", - "org_create_title": "创建组织", - "org_create_text": "点击这里创建新组织。提供名称、短标识和可选描述。您将成为新组织的所有者。", - "org_members_title": "管理成员", - "org_members_text": "通过电子邮件邀请用户,分配角色(管理员、操作员、用户)并管理访问。成员可以看到分配给其组织的设备。", - "org_devices_title": "分配设备", - "org_devices_text": "将设备添加到组织。这里分配的设备会继承组织策略,并对其成员可见。", - "org_policies_title": "组织策略", - "org_policies_text": "为组织设置安全策略,例如密码要求、会话超时、2FA 强制执行和设备登记规则。", - "org_complete_title": "组织设置完成!", - "org_complete_text": "邀请团队并分配设备,即可开始使用组织范围内的管理。策略会自动应用于所有成员。", - "cdap_devices_title": "CDAP Devices", - "cdap_devices_text": "View all connected CDAP devices — IoT sensors, PLCs, bridges, and custom agents. Green indicators show live connections.", - "cdap_widgets_title": "Widget Dashboard", - "cdap_widgets_text": "Widgets display real-time data from devices. Gauges, toggles, LEDs, charts — each widget type visualizes a different kind of data.", - "cdap_commands_title": "Send Commands", - "cdap_commands_text": "Interact with devices by sending commands. Some commands need confirmation. The command log keeps a history of all sent commands.", - "cdap_terminal_title": "Device Terminal", - "cdap_terminal_text": "Open a terminal session to CDAP agents for advanced diagnostics or manual configuration. Type commands directly.", - "cdap_complete_title": "CDAP Overview Complete!", - "cdap_complete_text": "Explore device widgets, send commands, and use the terminal or file browser for deeper management. CDAP agents report metrics automatically.", - "chat_contacts_title": "联系人和群组", - "chat_contacts_text": "查看联系人和聊天群组。点击任意联系人打开对话。绿色圆点表示用户在线。", - "chat_send_title": "发送消息", - "chat_send_text": "输入消息并按 Enter 发送。当双方都支持端到端加密时,消息会进行端到端加密。", - "chat_file_title": "共享文件", - "chat_file_text": "点击附件图标共享文件。文件会被加密,最大可达 50 MB。", - "chat_complete_title": "聊天已就绪!", - "chat_complete_text": "与操作员和最终用户实时聊天。创建群组用于团队沟通。所有消息都支持已读回执。" - }, - "help_request": { - "title": "帮助请求", - "subtitle": "管理来自桌面客户端的帮助请求", - "new_request": "新帮助请求", - "device": "设备", - "hostname": "主机名", - "message": "消息", - "status": "状态", - "pending": "待处理", - "accepted": "已接受", - "resolved": "已解决", - "accept": "接受", - "resolve": "解决", - "no_requests": "没有帮助请求", - "notification": "收到来自的帮助请求", - "stats_total": "总计", - "filter_all": "全部" - }, - "organizations": { - "title": "组织管理", - "create": "创建组织", - "edit": "编辑组织", - "detail": "组织详情", - "name": "名称", - "slug": "标识符 (URL)", - "logo_url": "Logo 地址", - "users": "用户", - "devices": "设备", - "invitations": "邀请", - "settings": "设置", - "add_user": "添加用户", - "assign_device": "分配设备", - "create_invitation": "创建邀请", - "delete_confirm": "删除此组织?这将删除所有关联的用户、设备和设置。", - "no_orgs": "暂无组织", - "no_orgs_hint": "创建第一个组织以开始管理设备和用户。", - "connection_policy": "连接策略", - "allow_file_transfer": "允许文件传输", - "allow_clipboard": "允许剪贴板", - "max_session_duration": "最大会话时长 (分钟)", - "role_owner": "所有者", - "role_admin": "管理员", - "role_operator": "操作员", - "role_user": "成员", - "username": "用户名", - "password": "密码", - "display_name": "显示名称", - "email": "邮箱", - "role": "角色", - "last_login": "上次登录", - "actions": "操作", - "device_id": "设备ID", - "department": "部门", - "building": "楼栋", - "location": "位置", - "assigned_user": "分配用户", - "token": "令牌", - "expires": "过期时间", - "used": "已使用", - "no_users": "此组织没有用户。", - "no_devices": "此组织没有分配设备。", - "no_invitations": "没有邀请。", - "user_added": "用户已添加", - "user_removed": "用户已移除", - "user_updated": "用户角色已更新", - "device_assigned": "设备已分配", - "device_unassigned": "设备已取消分配", - "invitation_created": "邀请已创建", - "settings_saved": "设置已保存", - "org_deleted": "组织已删除", - "confirm_remove_user": "从组织中移除此用户?", - "confirm_unassign_device": "取消分配此设备?", - "confirm_delete_org": "删除此组织及所有关联数据?", - "edit_role": "修改角色", - "raw_settings": "原始设置", - "key": "键", - "value": "值", - "save": "保存设置", - "policy_unattended": "无人值守(即时)", - "policy_attended": "有人值守(需确认)", - "policy_ask": "始终询问", - "expires_hours": "过期时间(小时)", - "loading_failed": "加载组织数据失败", - "name_slug_required": "名称和标识符为必填项", - "org_created": "组织已创建", - "org_updated": "组织已更新", - "create_new_user": "创建新用户", - "add_existing_user": "添加现有用户", - "none_available": "无", - "select_user": "选择用户", - "org_role": "组织角色", - "link_user_hint": "所选用户将使用其服务器帐户凭据链接到此组织。", - "no_available_users": "所有服务器用户都已链接到此组织。", - "user_linked": "用户已链接到组织" - }, - "chat": { - "e2e_enabled": "端到端加密", - "e2e_establishing": "正在建立安全通道...", - "e2e_established": "安全通道已建立", - "e2e_unsupported": "此浏览器不支持端到端加密", - "typing_indicator": "正在输入...", - "read_receipt": "已读", - "delivered": "已发送", - "file_share": "文件", - "file_too_large": "文件过大(最大50MB)", - "file_encrypted": "加密文件传输", - "presence_online": "在线", - "presence_away": "离开", - "presence_busy": "忙碌", - "presence_offline": "离线", - "key_rotation": "安全密钥已轮换", - "new_message": "新消息", - "title": "聊天", - "contacts": "联系人", - "groups": "群组", - "no_contacts": "暂无联系人", - "no_groups": "暂无群组", - "no_messages": "暂无消息", - "no_results": "未找到结果", - "select_conversation": "选择对话开始聊天", - "type_message": "输入消息...", - "send": "发送", - "attach_file": "附加文件", - "emoji": "表情", - "search_messages": "搜索消息", - "create_group": "创建群组", - "group_name": "群组名称", - "group_members": "成员", - "cancel": "取消", - "create": "创建", - "members": "成员", - "today": "今天", - "yesterday": "昨天", - "react": "回应", - "my_presence": "我的状态", - "search_placeholder": "搜索联系人和消息", - "select_conversation_hint": "查看消息请选择一个会话", - "info": "信息", - "group_name_placeholder": "输入群组名称" - }, - "toast": { - "device_connected": "设备已连接", - "device_disconnected": "设备已断开", - "session_started": "远程会话已开始", - "session_ended": "远程会话已结束", - "file_upload_complete": "文件上传完成", - "settings_saved": "设置已保存", - "error_generic": "发生错误", - "connection_lost": "连接丢失", - "reconnecting": "正在重新连接..." - }, - "theme": { - "dark": "深色", - "light": "浅色", - "auto": "跟随系统", - "title": "主题" - }, - "days": { - "mon": "周一", - "tue": "周二", - "wed": "周三", - "thu": "周四", - "fri": "周五", - "sat": "周六", - "sun": "周日" - }, - "toolkit": { - "title": "工具箱", - "subtitle": "管理员工具和诊断实用程序", - "cat_network": "网络", - "cat_crypto": "加密", - "cat_encoding": "编码", - "cat_system": "系统", - "host": "主机", - "port": "端口", - "domain": "域名", - "run": "运行", - "generate": "生成", - "encode": "编码", - "decode": "解码", - "send": "发送", - "refresh": "刷新", - "algorithm": "算法", - "input_text": "输入文本", - "enter_text": "输入文本...", - "length": "长度", - "options": "选项", - "source": "来源", - "lines": "行数", - "log_console": "控制台", - "log_go": "Go 服务器", - "mac_address": "MAC 地址", - "broadcast": "广播", - "ping_title": "Ping", - "ping_desc": "检查主机可达性和延迟", - "tcp_title": "TCP 端口检查", - "tcp_desc": "测试 TCP 端口连接", - "ssl_title": "SSL 检查器", - "ssl_desc": "检查 SSL/TLS 证书详情", - "http_title": "HTTP 健康检查", - "http_desc": "验证 HTTP 端点状态", - "dns_title": "DNS 查询", - "dns_desc": "将主机名解析为 IP 地址", - "whois_title": "DNS 记录", - "whois_desc": "查询 A、AAAA、MX、TXT、NS 记录", - "speed_title": "速度测试", - "speed_desc": "测量下载带宽", - "run_speed_test": "运行速度测试", - "wol_title": "网络唤醒", - "wol_desc": "发送魔术包唤醒设备", - "wol_sent": "魔术包已发送", - "hash_title": "哈希生成器", - "hash_desc": "生成加密哈希值", - "password_title": "密码生成器", - "password_desc": "生成安全的随机密码", - "jwt_title": "JWT 解码器", - "jwt_desc": "解码和检查 JSON Web Token", - "jwt_token": "JWT 令牌", - "base64_title": "Base64", - "base64_desc": "Base64 编码或解码数据", - "url_title": "URL 编码器", - "url_desc": "编码或解码 URL 组件", - "processes_title": "进程列表", - "processes_desc": "查看运行中的系统进程", - "disk_title": "磁盘使用", - "disk_desc": "查看磁盘分区使用情况", - "db_title": "数据库统计", - "db_desc": "查看数据库表统计信息", - "docker_title": "Docker 容器", - "docker_desc": "查看运行中的 Docker 容器", - "logs_title": "日志查看器", - "logs_desc": "查看最近的日志输出", - "ip_address": "IP", - "latency": "延迟", - "ttl": "TTL", - "status": "状态", - "resolved": "已解析", - "subject": "主体", - "issuer": "签发者", - "valid_from": "有效期从", - "valid_to": "有效期至", - "days_left": "剩余天数", - "days": "天", - "protocol": "协议", - "cipher": "密码套件", - "alt_names": "备用名称", - "chain": "证书链", - "record_type": "类型", - "record_value": "值", - "hash_value": "哈希值", - "entropy": "熵值", - "very_strong": "非常强", - "strong": "强", - "weak": "弱", - "expiry": "过期时间", - "expired": "已过期", - "valid": "有效", - "process_name": "名称", - "db_type": "类型", - "db_size": "大小", - "table_name": "表名", - "row_count": "行数", - "no_data": "无可用数据", - "no_docker": "未找到 Docker 容器或 Docker 不可用", - "no_logs": "无可用日志条目" - }, - "policies": { - "title": "组织策略", - "subtitle": "管理组织的安全、连接和功能策略", - "select_org": "组织", - "select_org_placeholder": "选择组织...", - "select_org_first": "选择组织以查看策略审计日志。", - "configured": "已配置", - "connection_title": "连接策略", - "connection_desc": "控制远程会话的建立方式", - "connection_mode": "连接模式", - "mode_attended": "有人值守(需要用户批准)", - "mode_unattended": "无人值守(始终允许)", - "mode_ask": "始终询问", - "max_session": "最大会话时长(分钟)", - "idle_lock": "空闲锁定超时(分钟)", - "wallpaper_policy": "会话期间壁纸", - "wallpaper_show": "显示", - "wallpaper_hide_session": "会话期间隐藏", - "wallpaper_hide_always": "始终隐藏", - "features_title": "功能策略", - "features_desc": "为设备启用或禁用特定功能", - "allow_file_transfer": "允许文件传输", - "allow_clipboard": "允许剪贴板同步", - "allow_audio": "允许音频流", - "allow_recording": "允许会话录制", - "security_title": "安全策略", - "security_desc": "为组织设备强制执行安全要求", - "require_2fa": "无人值守访问需要2FA", - "password_min_length": "最小密码长度", - "password_require_special": "要求特殊字符", - "password_max_age": "密码最大有效期(天,0=永不)", - "allowed_operators": "允许的操作员角色(逗号分隔)", - "network_title": "网络策略", - "network_desc": "控制中继服务器和直接连接", - "block_direct_p2p": "阻止直接P2P(强制中继)", - "allowed_relays": "允许的中继服务器(每行一个)", - "ip_allowlist": "IP白名单(CIDR,每行一个)", - "update_title": "更新策略", - "update_desc": "控制自动更新和更新频道", - "auto_update": "启用自动更新", - "update_channel": "更新频道", - "audit_title": "策略变更", - "audit_desc": "最近的策略变更历史", - "no_audit": "没有记录的策略变更。", - "save_success": "策略保存成功", - "save_failed": "保存策略失败", - "load_failed": "加载策略失败", - "block_direct_p2p_hint": "适用于此组织中的设备。全局默认值在设置 → 连接策略中配置。" - }, - "attestation": { - "title": "设备认证", - "subtitle": "监控设备身份验证和硬件指纹", - "verified": "已验证", - "pending": "待处理", - "failed": "失败", - "device_list": "设备认证记录", - "device_list_desc": "硬件指纹和身份验证状态", - "col_device": "设备ID", - "col_hostname": "主机名", - "col_fingerprint": "指纹", - "col_status": "状态", - "col_last_check": "最后检查", - "col_actions": "操作", - "no_records": "未找到认证记录。", - "verify_success": "设备已标记为已验证", - "verify_failed": "验证设备失败", - "revoke_success": "设备认证已撤销", - "revoke_failed": "撤销认证失败" - }, - "fleet": { - "title": "车队管理", - "tab_resources": "资源", - "tab_tasks": "任务", - "tab_builder": "构建器", - "tab_compliance": "合规", - "res_title": "资源映射", - "res_all_types": "所有类型", - "res_type_printer": "打印机", - "res_type_network_drive": "网络驱动器", - "res_type_dns": "DNS 服务器", - "res_type_proxy": "代理", - "res_type_vpn": "VPN", - "res_add": "添加资源", - "res_name": "资源名称", - "res_type": "类型", - "res_address": "地址 / 路径", - "res_target": "目标", - "res_scope": "范围", - "res_scope_org": "组织", - "res_scope_group": "组", - "res_scope_device": "设备", - "res_scope_value": "范围值", - "res_status": "状态", - "res_active": "活动", - "res_inactive": "不活动", - "res_no_data": "未找到资源。点击'添加'创建。", - "res_confirm_delete": "确定要删除此资源吗?", - "task_title": "任务调度器", - "task_all_status": "所有状态", - "task_status_pending": "等待中", - "task_status_running": "运行中", - "task_status_success": "成功", - "task_status_failed": "失败", - "task_search": "搜索任务…", - "task_create": "创建任务", - "task_name": "任务名称", - "task_type": "类型", - "task_type_script": "脚本", - "task_type_install": "安装", - "task_type_update": "更新", - "task_type_restart": "重启", - "task_type_deploy": "部署", - "task_type_scan": "扫描", - "task_targets": "目标", - "task_targets_help": "设备ID或组名,逗号分隔", - "task_schedule": "调度", - "task_schedule_once": "一次", - "task_schedule_cron": "Cron", - "task_schedule_interval": "间隔", - "task_schedule_value": "调度值", - "task_script": "脚本 / 命令", - "task_retries": "重试", - "task_timeout": "超时 (秒)", - "task_last_run": "上次执行", - "task_no_data": "未找到任务。创建新任务。", - "task_confirm_delete": "确定要删除此任务吗?", - "task_output": "任务输出", - "task_retry": "重试", - "builder_title": "可视化工作流构建器", - "builder_select_workflow": "选择工作流…", - "builder_new": "新建", - "builder_save": "保存", - "builder_export": "导出", - "builder_execute": "执行", - "builder_dry_run": "模拟运行", - "builder_triggers": "触发器", - "builder_conditions": "条件", - "builder_actions": "操作", - "builder_results": "结果", - "builder_transforms": "转换", - "builder_properties": "属性", - "builder_no_selection": "选择节点以编辑其属性。", - "workflow_name": "工作流名称:", - "comp_title": "软件合规", - "comp_compliant": "合规", - "comp_warning": "警告", - "comp_critical": "严重", - "comp_score": "平均分数", - "comp_device": "设备", - "comp_hostname": "主机名", - "comp_os": "操作系统", - "comp_score_col": "分数", - "comp_issues": "问题", - "comp_last_scan": "上次扫描", - "comp_scan": "扫描", - "comp_scan_all": "全部扫描", - "comp_remediate": "修复", - "comp_remediate_confirm": "在此设备上执行自动修复?", - "comp_no_data": "无合规数据。执行扫描以开始。", - "save": "保存", - "cancel": "取消", - "close": "关闭", - "edit": "编辑", - "delete": "删除", - "actions": "操作", - "all_orgs": "所有组织", - "builder_node_trigger_manual": "手动触发器", - "builder_node_trigger_schedule": "Schedule", - "builder_node_trigger_event": "事件触发器", - "builder_node_cond_os": "OS Check", - "builder_node_cond_threshold": "Threshold", - "builder_node_cond_time_window": "Time Window", - "builder_node_action_script": "Run Script", - "builder_node_action_install": "Install SW", - "builder_node_action_restart": "重启服务", - "builder_node_action_file_deploy": "部署文件", - "builder_node_action_message": "发送消息", - "builder_node_result_log": "Log Output", - "builder_node_result_alert": "发送警报", - "builder_node_result_chain": "串联工作流", - "builder_node_transform_parse": "Parse JSON", - "builder_node_transform_filter": "Filter", - "builder_node_transform_delay": "Delay", - "select_org_placeholder": "选择组织…", - "all_types": "All Types", - "type_printer": "Printer", - "type_network_drive": "网络驱动器", - "type_dns": "DNS 服务器", - "type_vpn": "VPN", - "type_proxy": "Proxy", - "add_resource": "添加资源", - "edit_resource": "编辑资源", - "col_name": "Name", - "col_type": "Type", - "col_target": "Target", - "col_scope": "Scope", - "col_status": "Status", - "col_actions": "Actions", - "no_resources": "No resources found.", - "active": "Active", - "inactive": "Inactive", - "address": "地址/路径", - "scope_org": "组织", - "scope_group": "组", - "scope_device": "设备", - "scope_value": "Scope Value", - "scope_value_hint": "Organization, group, or device ID", - "confirm_delete": "确定要删除此项目吗?", - "all_statuses": "所有状态", - "status_pending": "Pending", - "status_running": "Running", - "status_success": "Success", - "status_failed": "失败", - "search_tasks": "搜索任务…", - "create_task": "创建任务", - "edit_task": "编辑任务", - "col_task_name": "Task Name", - "col_task_type": "Type", - "col_schedule": "Schedule", - "col_last_run": "Last Run", - "no_tasks": "No tasks found.", - "task_type_file_deploy": "文件部署", - "task_type_registry": "Registry", - "target_devices": "目标设备", - "target_hint": "Device IDs or group names", - "schedule_immediate": "Immediate", - "schedule_once": "Once", - "schedule_cron": "Cron", - "cron_placeholder": "*/5 * * * *", - "script_content": "脚本/命令", - "retry_count": "Retries", - "timeout_sec": "Timeout (s)", - "loading": "正在加载", - "no_output": "没有可用输出", - "error_loading": "加载数据出错", - "select_workflow": "选择工作流…", - "new_workflow": "New", - "export": "Export", - "execute": "Execute", - "dry_run": "Dry Run", - "node_triggers": "Triggers", - "node_manual": "手动触发器", - "node_schedule": "Schedule", - "node_event": "事件触发器", - "node_conditions": "Conditions", - "node_os_check": "OS Check", - "node_threshold": "Threshold", - "node_time_window": "Time Window", - "node_actions": "Actions", - "node_run_script": "Run Script", - "node_install": "Install SW", - "node_restart": "重启服务", - "node_file_deploy": "部署文件", - "node_send_message": "发送消息", - "node_results": "Results", - "node_log_output": "Log Output", - "node_send_alert": "发送警报", - "node_chain": "串联工作流", - "node_transforms": "Transforms", - "node_parse_json": "Parse JSON", - "node_filter": "Filter", - "node_delay": "Delay", - "node_properties": "Properties", - "all_organizations": "所有组织", - "scan_all": "Scan All", - "compliant": "Compliant", - "non_compliant": "Warning", - "critical_issues": "Critical", - "avg_score": "Avg. Score", - "col_device": "设备", - "col_hostname": "Hostname", - "col_os": "OS", - "col_score": "Score", - "col_issues": "Issues", - "col_last_scan": "Last Scan", - "no_compliance_data": "No compliance data available.", - "confirm_remediate": "在此设备上运行自动修复?" - }, - "scaling": { - "title": "扩展与中继管理", - "tab_overview": "概览", - "tab_relays": "中继节点", - "tab_rules": "分配规则", - "tab_capacity": "容量规划", - "arch_title": "网络架构", - "arch_loading": "加载架构图...", - "stat_relay_nodes": "中继节点", - "stat_total_devices": "总设备数", - "stat_active_sessions": "活跃会话", - "stat_bandwidth": "总带宽", - "relay_health": "中继健康", - "no_relays": "未配置中继节点。添加第一个中继节点以分配负载。", - "relay_search": "搜索中继...", - "relay_add": "添加中继节点", - "relay_edit": "编辑中继节点", - "col_name": "名称", - "col_address": "地址", - "col_location": "位置", - "col_devices": "设备", - "col_sessions": "会话", - "col_bandwidth": "带宽", - "col_status": "状态", - "col_actions": "操作", - "col_priority": "优先级", - "col_rule_name": "规则名称", - "col_match": "匹配", - "col_target_relay": "目标中继", - "col_fallback": "备用", - "status_online": "在线", - "status_degraded": "降级", - "status_offline": "离线", - "status_enabled": "已启用", - "status_disabled": "已禁用", - "confirm_delete_relay": "确定要删除此中继节点吗?", - "confirm_delete_rule": "确定要删除此分配规则吗?", - "rules_hint": "分配规则决定哪个中继服务器处理特定设备组。规则按优先级评估(最低优先)。", - "rule_add": "添加规则", - "rule_edit": "编辑规则", - "rule_match_type": "匹配类型", - "match_subnet": "子网", - "match_group": "设备组", - "match_tag": "设备标签", - "match_location": "位置", - "rule_match_value": "匹配值", - "fallback_master": "主服务器", - "fallback_nearest": "最近中继", - "relay_max_sessions": "最大会话数", - "relay_max_bandwidth": "最大带宽 (Mbps)", - "cap_tiers": "容量级别", - "cap_loading": "加载容量数据...", - "cap_recommendations": "建议", - "cap_no_recs": "暂无可用建议。", - "cap_planning": "基础设施规划", - "cap_config": "配置", - "cap_max_devices": "最大设备数", - "cap_max_sessions": "最大会话数", - "cap_current": "当前", - "cap_utilization": "利用率", - "cap_tier_devices": "设备容量", - "cap_tier_sessions": "会话容量", - "cap_tier_bandwidth": "带宽容量", - "cap_single_sqlite": "单服务器 (SQLite)", - "cap_single_pg": "单服务器 (PostgreSQL)", - "cap_master_3": "主服务器 + 3 中继", - "cap_master_10": "主服务器 + 10 中继", - "rec_no_relays": "未配置中继节点。建议添加中继节点以提高性能和冗余。", - "rec_devices_high": "设备利用率较高。建议添加更多中继节点以分配负载。", - "rec_sessions_high": "会话容量接近限制。建议升级中继基础设施。", - "rec_cpu_high": "部分中继节点CPU使用率较高。建议负载均衡或升级容量。", - "rec_all_good": "所有系统运行在正常参数内。无需操作。", - "save": "保存", - "cancel": "取消", - "edit": "编辑", - "delete": "删除", - "close": "关闭", - "no_rules": "没有分配规则。", - "relays_info_banner": "此列表仅供参考。客户端实际使用的中继服务器通过 BetterDesk 服务器上的 RELAY_SERVERS 环境变量配置。", - "relay_name_address_required": "必须填写名称和地址。", - "relay_save_failed": "保存中继节点失败。", - "relay_delete_failed": "删除中继节点失败。", - "relay_saved": "中继节点已保存。", - "relay_deleted": "中继节点已删除。", - "rule_name_value_required": "必须填写规则名称和匹配值。", - "rule_save_failed": "保存规则失败。", - "rule_delete_failed": "删除规则失败。", - "rule_saved": "规则已保存。", - "rule_deleted": "规则已删除。" - }, - "cross_platform": { - "title": "跨平台兼容性", - "tab_matrix": "兼容性矩阵", - "tab_distribution": "分布", - "tab_protocols": "协议", - "tab_limitations": "限制", - "matrix_hint": "所有支持平台的功能支持矩阵。绿色=完全支持,黄色=部分支持,灰色=不可用,蓝色=计划中。", - "col_feature": "功能", - "legend_full": "完全支持", - "legend_partial": "部分支持", - "legend_none": "不可用", - "legend_planned": "计划中", - "platform_breakdown": "平台分布", - "arch_breakdown": "架构分布", - "version_breakdown": "版本分布", - "summary": "摘要", - "total_devices": "设备总数", - "unique_platforms": "平台", - "unique_archs": "架构", - "unique_versions": "客户端版本", - "no_devices": "尚无注册设备。", - "protocols_hint": "协议能力协商确保每个客户端只接收其支持的功能。服务器根据报告的能力调整行为。", - "capability_negotiation": "能力协商", - "codec_support": "编解码器支持(在线设备)", - "feature_support": "功能支持(在线设备)", - "no_codec_data": "没有来自在线设备的编解码器数据。", - "no_feature_data": "没有来自在线设备的功能数据。", - "protobuf_schema": "ClientCapabilities Protobuf 模式", - "diagram_client": "客户端", - "diagram_server": "BetterDesk 服务器", - "diagram_peer": "远程对等体", - "limitations_hint": "每个平台都有影响可用功能的特定限制。在规划部署时请查阅这些约束。", - "feat_desktop_client": "桌面客户端", - "feat_background_agent": "后台代理", - "feat_remote_target": "远程目标", - "feat_screen_capture": "屏幕捕获", - "feat_input_injection": "输入注入", - "feat_file_transfer": "文件传输", - "feat_clipboard_sync": "剪贴板同步", - "feat_audio_streaming": "音频流", - "feat_chat": "聊天", - "feat_h264": "H.264 编解码器", - "feat_vp9": "VP9 编解码器", - "feat_av1": "AV1 编解码器", - "feat_cdap_agent": "CDAP 代理", - "feat_session_recording": "会话录制", - "feat_multi_monitor": "多显示器", - "feat_unattended_access": "无人值守访问", - "platform_windows": "Windows", - "platform_linux": "Linux", - "platform_macos": "macOS", - "platform_android": "Android", - "platform_ios": "iOS", - "platform_web": "网页浏览器", - "platform_chromeos": "ChromeOS", - "status_production": "生产", - "status_testing": "测试", - "status_planned": "计划中", - "status_limited": "有限", - "status_experimental": "实验性", - "limit_win_uac": "服务安装和安全桌面输入注入需要UAC提升。", - "limit_win_service": "作为NSSM服务在每个服务的虚拟帐户(NT SERVICE\\<服务>)下运行;仅安装需要管理员权限。", - "limit_win_firewall": "Windows防火墙规则必须允许21115-21119端口用于中继连接。", - "limit_win_virtual_account": "服务在隔离的虚拟帐户下运行,而非LocalSystem;自定义日志路径可能需要ACL调整。", - "limit_linux_wayland": "Wayland合成器限制程序化屏幕捕获;需要PipeWire门户API。", - "limit_linux_pipewire": "音频捕获需要PipeWire;PulseAudio回退可用但有限。", - "limit_linux_arm": "ARM64构建可用;某些编解码器可能使用软件解码(较慢)。", - "limit_linux_unprivileged": "服务以专用非特权'betterdesk'帐户运行,配合systemd加固(NoNewPrivileges、ProtectSystem=strict)。", - "limit_mac_screen": "需要在系统偏好设置>隐私与安全中授予屏幕录制权限。", - "limit_mac_signing": "代理必须使用Apple Developer ID签名才能分发。", - "limit_mac_notarize": "macOS Gatekeeper需要公证(非App Store分发)。", - "limit_android_projection": "MediaProjection API需要用户同意每次屏幕捕获会话。", - "limit_android_accessibility": "输入注入需要辅助功能服务;Android 14+中受限。", - "limit_android_battery": "后台服务受Doze模式限制;可能需要电池优化豁免。", - "limit_ios_capture": "Apple禁止后台屏幕捕获;仅支持查看模式。", - "limit_ios_input": "不允许输入注入;仅支持远程查看和聊天。", - "limit_ios_appstore": "仅通过App Store分发;TestFlight用于beta测试。", - "limit_web_https": "WebCodecs API和WebRTC需要HTTPS;HTTP回退到JMuxer(有限编解码器)。", - "limit_web_codec": "编解码器支持取决于浏览器;H.264广泛支持,VP9/AV1因浏览器而异。", - "limit_web_performance": "性能受浏览器沙箱限制;无直接硬件加速。", - "limit_chrome_crostini": "完整代理支持仅在Crostini Linux容器内。", - "limit_chrome_pwa": "PWA模式仅提供web功能;无原生代理能力。", - "limit_chrome_input": "Crostini容器外不支持输入注入。" - }, - "security_audit": { - "title": "安全审计", - "tab_overview": "概览", - "tab_events": "审计事件", - "tab_hardening": "安全加固", - "tab_vulnerabilities": "漏洞", - "security_score": "安全评分", - "failed_logins": "登录失败(24h)", - "active_bans": "活跃封禁", - "api_keys": "API密钥", - "old_keys": "旧密钥(>90天)", - "security_checks": "安全检查", - "tls_status": "TLS状态", - "pass": "通过", - "warning": "警告", - "fail": "失败", - "tls_signal": "Signal TLS", - "tls_relay": "Relay TLS", - "tls_api": "API TLS", - "tls_wss": "安全 WebSocket", - "enabled": "已启用", - "disabled": "已禁用", - "all_events": "所有事件", - "event_login_failed": "登录失败", - "event_login_success": "登录成功", - "event_peer_banned": "设备封禁", - "event_ip_banned": "IP封禁", - "event_config_changed": "配置变更", - "event_key_created": "密钥创建", - "refresh": "刷新", - "col_time": "时间", - "col_action": "操作", - "col_actor": "操作者", - "col_target": "目标", - "col_ip": "IP地址", - "col_details": "详情", - "no_events": "未找到审计事件。", - "hardening_hint": "BetterDesk部署的安全加固优先级。按严重程度排序。", - "no_hardening": "没有可用的加固项目。", - "vuln_hint": "依赖项漏洞扫描结果。定期运行npm audit以保持依赖安全。", - "no_vulns": "未发现漏洞。您的依赖项是安全的。" - }, - "languages": { - "title": "语言管理", - "total_languages": "语言总数", - "fully_translated": "完全翻译", - "needs_review": "需要审核", - "reference_keys": "参考键数", - "no_languages": "未找到语言文件。", - "badge_reference": "参考", - "badge_review": "需要审核", - "badge_complete": "Complete", - "coverage": "coverage", - "keys": "keys", - "missing": "missing", - "extra": "extra", - "view_missing": "查看缺失项", - "fix_missing": "Fix Missing", - "missing_keys_for": "缺失键:", - "missing_keys_count": "keys missing (English fallback values shown)", - "and_more": "还有 {n} 个...", - "all_keys_present": "所有键都已存在!", - "confirm_fix": "Add missing keys to {code} with English fallback values?", - "fixed_title": "Keys Fixed", - "fixed_msg": "{code} 中缺少的键必须手动翻译。", - "no_fix_needed": "没有需要补齐的缺失键。" - }, - "resource_control": { - "title": "资源控制", - "tab_overview": "概览", - "tab_usb": "USB Control", - "tab_optical": "光驱", - "tab_monitors": "Monitors", - "tab_disks": "Disk Access", - "tab_quotas": "资源配额", - "compliance_by_category": "按类别的合规性", - "device_compliance": "设备合规性", - "search_devices": "搜索设备...", - "col_device": "设备", - "col_platform": "Platform", - "col_status": "Status", - "col_usb": "USB", - "col_optical": "Optical", - "col_monitors": "Monitors", - "col_disks": "Disks", - "col_quotas": "Quotas", - "col_actions": "Actions", - "stat_total_devices": "设备总数", - "stat_compliant": "Compliant", - "stat_partial": "Partial", - "stat_noncompliant": "Non-Compliant", - "stat_compliance_rate": "合规率", - "badge_na": "N/A", - "badge_compliant": "OK", - "badge_partial": "Partial", - "badge_noncompliant": "Fail", - "btn_configure": "配置", - "no_devices": "未找到设备", - "usb_title": "USB 端口控制", - "usb_hint": "控制所选设备或组织级默认策略的 USB 存储设备访问。", - "usb_storage_policy": "USB 存储策略", - "usb_whitelist": "白名单设备(每行一个)", - "usb_whitelist_hint": "VID:PID(例如 0781:5583)", - "usb_audit_log": "记录 USB 设备连接", - "optical_title": "光驱控制", - "optical_hint": "控制所选设备的 CD/DVD/蓝光驱动器访问。", - "optical_policy": "光驱策略", - "optical_audit_log": "记录光驱访问", - "monitors_title": "显示器管理", - "monitors_hint": "配置显示器设置,包括最大数量、分辨率强制、亮度和电源计划。", - "monitors_max_count": "最大显示器数量(0 = 不限制)", - "monitors_max_hint": "0 表示不限制", - "monitors_resolution": "最大分辨率", - "monitors_brightness": "亮度限制", - "monitors_power_schedule": "电源计划", - "monitors_power_hint": "例如 off:22:00-06:00", - "disks_title": "磁盘访问控制", - "disks_hint": "配置磁盘访问策略,包括只读模式、加密强制和分区可见性。", - "disks_readonly": "强制只读模式", - "disks_encryption": "要求加密(BitLocker/LUKS)", - "disks_smart": "启用 S.M.A.R.T. 监控", - "disks_hidden": "隐藏分区", - "disks_hidden_hint": "以逗号分隔的驱动器盘符或挂载点", - "quotas_title": "资源配额", - "quotas_hint": "为所选设备上的每个用户设置 CPU、内存、带宽和磁盘配额。", - "quotas_cpu": "CPU Limit", - "quotas_ram": "RAM Limit", - "quotas_bandwidth": "带宽限制(Mbps)", - "quotas_bandwidth_hint": "0 = 不限制", - "quotas_disk_quota": "磁盘配额(GB)", - "quotas_disk_hint": "0 = 不限制", - "quotas_process_whitelist": "进程白名单(每行一个)", - "quotas_process_hint": "例如 chrome.exe、code.exe", - "policy_allowed": "Allowed", - "policy_blocked": "Blocked", - "policy_whitelist": "仅白名单", - "policy_any": "Any" - }, - "sdk_studio": { - "title": "SDK Studio", - "subtitle": "Visual flow editor for CDAP bridges", - "new_flow": "New Flow", - "open_flow": "Open Flow", - "save_flow": "Save Flow", - "run_flow": "Run", - "debug": "Debug", - "deploy": "Deploy", - "undo": "Undo", - "redo": "Redo", - "untitled": "Untitled Flow", - "code_mode": "Code Mode", - "toggle_grid": "Toggle Grid", - "zoom_in": "Zoom In", - "zoom_out": "Zoom Out", - "zoom_fit": "Fit to Screen", - "palette": "Node Palette", - "search_nodes": "Search nodes...", - "cat_sources": "Sources", - "cat_processing": "Processing", - "cat_outputs": "Outputs", - "empty_title": "Start Building", - "empty_desc": "Drag nodes from the palette to start building a flow", - "browse_templates": "Browse Templates", - "inspector": "Inspector", - "select_node": "Select a node to inspect its properties", - "console": "Console", - "clear_console": "Clear", - "console_ready": "Studio ready", - "label": "Label", - "configuration": "Configuration", - "connections": "Connections", - "inputs": "Inputs", - "outputs": "Outputs", - "delete_node": "Delete Node", - "nodes": "Nodes", - "wires": "Wires", - "status_ready": "Ready", - "status_deployed": "Deployed", - "flow_name": "Flow Name", - "flow_desc": "Description", - "loading": "Loading...", - "no_flows": "No saved flows yet", - "confirm_delete": "Are you sure you want to delete this flow?", - "templates": "Templates", - "node_modbus_tcp": "Modbus TCP", - "node_modbus_rtu": "Modbus RTU", - "node_snmp_poll": "SNMP Poll", - "node_rest_poll": "REST Poll", - "node_mqtt_subscribe": "MQTT Subscribe", - "node_webhook": "Webhook", - "node_device_telemetry": "Device Telemetry", - "node_database_query": "Database Query", - "node_file_watch": "File Watch", - "node_filter": "Filter", - "node_transform": "Transform", - "node_aggregate": "Aggregate", - "node_delay": "Delay", - "node_debounce": "Debounce", - "node_switch": "Switch", - "node_merge": "Merge", - "node_script": "Script", - "node_widget_update": "Widget Update", - "node_alert": "Alert", - "node_command": "Command", - "node_log": "Log", - "node_rest_call": "REST Call", - "node_mqtt_publish": "MQTT Publish", - "node_database_write": "Database Write", - "node_email": "Email", - "node_modbus_write": "Modbus Write", - "import_flow": "Import Flow" - }, - "updates": { - "tab_title": "Updates", - "title": "软件更新", - "desc": "从 GitHub 检查新版本并更新 BetterDesk 控制台和 Go 服务器", - "current_version": "已安装版本", - "latest_version": "最新提交", - "status": "Status", - "check_now": "检查更新", - "checking": "Checking…", - "up_to_date": "已是最新", - "update_available": "有可用更新", - "changelog": "最近提交", - "no_changelog": "没有可用的发布说明", - "files_changed": "已更改文件", - "files": "个文件", - "changes_unavailable": "无法加载文件更改列表。您仍然可以安装更新。", - "create_backup": "更新前创建备份", - "install": "Install Update", - "install_confirm": "确定要安装此更新吗?所有受支持的已更改组件都将自动更新,更新后控制台会重启。", - "installing": "正在安装更新…", - "creating_backup": "正在创建备份…", - "downloading": "正在下载文件…", - "install_success": "更新安装成功。控制台正在重启…", - "install_failed": "更新安装失败", - "restarting": "正在等待控制台重启…", - "restart_complete": "控制台已成功重启", - "restart_timeout": "Console did not restart in time. Please check manually.", - "no_version": "未选择更新版本。请先检查更新。", - "backups_title": "更新备份", - "backups_desc": "每次更新前自动创建的更新前备份", - "no_backups": "未找到更新备份", - "restore": "Restore", - "restore_confirm": "确定要从此备份恢复吗?已更改的文件将被覆盖。", - "restore_success": "备份恢复成功。控制台正在重启…", - "baseline_set": "基线已设置", - "commits_behind": "个提交落后", - "total_files": "总文件数", - "applied": "已应用", - "failed": "失败", - "skipped": "跳过", - "removed": "已删除", - "auto": "自动", - "manual": "手动", - "component_console": "Web控制台", - "component_server": "Go服务器", - "component_agent": "代理程序", - "component_scripts": "脚本和Docker", - "component_other": "其他", - "server_rebuild_warning": "Go服务器源代码已更改——服务器二进制文件将自动更新。", - "include_server": "Go服务器将自动更新", - "checking_go": "检查Go…", - "go_not_found": "未安装Go", - "go_check_failed": "无法检查Go可用性", - "server_building": "编译Go服务器… 这可能需要几分钟。", - "server_built": "服务器二进制文件已编译", - "server_build_failed": "服务器编译失败", - "server_stale_title": "服务器二进制文件已过期", - "server_stale_desc": "Go 服务器源代码已更新,但正在运行的二进制文件尚未重新编译。立即重新编译以应用安全和库更新。", - "rebuild_server": "重新编译服务器二进制文件", - "rebuilding_server": "正在重新编译…", - "rebuild_server_success": "服务器二进制文件已重新编译并重启", - "rebuild_server_failed": "服务器二进制文件重新编译失败", - "server_deployed": "服务器二进制文件已部署", - "server_deploy_failed": "服务器部署失败", - "server_build_note": "服务器编译可能需要1-5分钟。更新服务会在需要时自动运行。", - "server_source_downloading": "下载服务器源代码…", - "strategy_label": "更新方式", - "strategy_download": "下载预编译二进制文件", - "strategy_compile": "从源代码编译", - "both_available": "下载和编译", - "download_available": "可下载", - "no_method": "无可用更新方式", - "no_release": "无发布版本", - "available": "可用", - "server_downloading": "正在下载服务器二进制文件…", - "server_downloaded": "服务器二进制文件已下载", - "server_download_failed": "服务器二进制文件下载失败", - "server_download_note": "将从 GitHub Releases 下载预编译的二进制文件。通常不到一分钟。", - "install_go_hint": "从 https://go.dev/dl/ 安装 Go 以启用编译,或发布包含预编译二进制文件的版本", - "delete": "删除", - "delete_confirm": "永久删除备份 {name}?此操作无法撤销。", - "delete_success": "备份已删除", - "delete_failed": "删除备份失败", - "retention_label": "保留最近 N 个备份", - "retention_hint": "每次更新后会自动删除更旧的备份。使用 0 可保留所有备份。", - "retention_saved": "保留设置已保存", - "retention_invalid": "保留值必须是 0 到 1000 之间的整数", - "retention_required_for_prune": "请先设置大于 0 的保留值", - "prune_now": "Apply now", - "prune_confirm": "只保留最近 {n} 个备份并删除其余备份?", - "prune_done": "已清理 {n} 个备份", - "total_size": "Total size", - "backups_count": "backup(s)", - "strategy_install_go": "自动安装 Go 并编译", - "strategy_install_go_hint": "在控制台数据目录中下载或刷新官方 Go 工具链(约 120 MB),然后在需要时编译服务器。", - "auto_strategy": "Auto", - "auto_strategy_hint": "控制台会选择最佳可用方法,并自动下载或更新所需工具。", - "auto_available": "自动重建已就绪", - "toolchain_ready": "工具链已安装", - "toolchain_will_install": "Go 工具链将自动安装或更新", - "toolchain_downloading": "正在下载 Go 工具链…", - "toolchain_failed": "Go 工具链安装失败", - "modal_title": "正在安装更新", - "modal_done_title": "更新完成", - "modal_close": "关闭", - "modal_reload_now": "重新加载控制台", - "phase_confirm": "Confirmation", - "phase_backup": "Backup", - "phase_console": "控制台文件", - "phase_server": "Go 服务器", - "phase_restart": "重启", - "phase_done": "Done", - "preparing": "Preparing…", - "backup_skipped": "已跳过备份(按用户选择)", - "server_skipped": "已跳过 Go 服务器", - "server_not_selected": "没有 Go 服务器更改", - "server_processing": "正在处理 Go 服务器更新…", - "no_restart_needed": "无需重启", - "complete": "更新已应用", - "complete_summary": "更新已成功应用。", - "complete_with_errors": "更新已完成,但某些步骤失败。请查看下方详情。", - "modal_done_with_errors_title": "更新完成但有错误", - "console_will_restart": "控制台进程现在将重启…", - "restart_complete_msg": "控制台已完成重启。点击重新加载以加载新版本。页面将在 8 秒后自动重新加载。", - "refresh_recommended": "静态资源已更改,请重新加载页面以查看新界面。", - "confirm_title": "应用更新", - "confirm_with_backup": "将自动创建更新前备份。", - "confirm_no_backup": "不会创建备份(风险自担)。" - }, - "accessibility": { - "title": "无障碍", - "subtitle": "根据视觉、动态效果和阅读需求调整控制台。", - "close": "关闭无障碍菜单", - "profiles": "快速配置", - "profile_low_vision": "Low vision", - "profile_low_vision_hint": "更大的文本、强对比度和明显焦点。", - "profile_dyslexia": "阅读舒适", - "profile_dyslexia_hint": "易读字体和更宽的间距。", - "profile_motion_safe": "Motion safe", - "profile_motion_safe_hint": "减少过渡效果并暂停动画。", - "profile_color_assist": "颜色辅助", - "profile_color_assist_hint": "颜色滤镜、标签和高亮链接。", - "reading": "阅读", - "font_size": "字体大小", - "line_height": "行高", - "letter_spacing": "字母间距", - "word_spacing": "单词间距", - "readable_font": "易读字体", - "readable_font_hint": "使用宽阔、熟悉的字形。", - "dyslexia_spacing": "阅读障碍间距", - "dyslexia_spacing_hint": "为长文本增加额外间距。", - "visual": "视觉", - "contrast": "对比度", - "contrast_normal": "Normal", - "contrast_high_dark": "高对比度深色", - "contrast_high_light": "高对比度浅色", - "contrast_yellow_black": "黑底黄字", - "color_filter": "色觉滤镜", - "filter_none": "None", - "filter_protanopia": "Protanopia", - "filter_deuteranopia": "Deuteranopia", - "filter_tritanopia": "Tritanopia", - "filter_achromatopsia": "Achromatopsia", - "saturation": "颜色饱和度", - "underline_links": "为链接添加下划线", - "underline_links_hint": "无需依赖颜色也能看清链接。", - "highlight_links": "突出显示操作", - "highlight_links_hint": "为链接和按钮添加轮廓。", - "highlight_headings": "突出显示标题", - "highlight_headings_hint": "用彩色条标记章节标题。", - "hide_media": "Dim media", - "hide_media_hint": "淡化图片、视频和画布。", - "interaction": "交互", - "strong_focus": "强焦点", - "strong_focus_hint": "显示较大的键盘焦点环。", - "large_cursor": "大光标", - "large_cursor_hint": "使用更大的高对比度指针。", - "reduce_motion": "减少动态效果", - "reduce_motion_hint": "缩短过渡和顺滑滚动。", - "pause_animations": "暂停动画", - "pause_animations_hint": "停止循环视觉运动。", - "reading_guide": "阅读引导线", - "reading_guide_hint": "用明亮线条跟随指针。", - "reading_mask": "阅读遮罩", - "reading_mask_hint": "淡化指针上方和下方的内容。", - "preview": "预览", - "preview_title": "操作员工作区预览", - "preview_text": "关闭此菜单前,检查文本、链接、控件和状态标签是否易于阅读。", - "preview_link": "设备详情链接", - "preview_status": "Online", - "preview_button": "主要操作", - "preview_secondary": "Secondary", - "reset": "重置", - "done": "完成" - }, - "server_mgmt": { - "title": "服务器管理", - "subtitle": "类似 Cockpit 的 BetterDesk 控制台主机管理面板(测试版)。", - "beta_tooltip": "测试版功能 — 正在积极开发中。", - "notice_title": "测试版功能", - "notice_body": "这些工具在运行 BetterDesk 控制台进程的主机上执行。所有操作均被审计。", - "tab_overview": "概览", - "tab_terminal": "终端", - "tab_files": "文件", - "tab_services": "服务", - "cpu": "CPU", - "memory": "内存", - "load": "负载平均值", - "disks": "磁盘", - "history": "历史记录(最近 60 个样本)", - "host_info": "主机信息", - "cores": "核心", - "uptime": "运行时间", - "no_disks": "没有可用的磁盘数据", - "info_hostname": "Hostname", - "info_platform": "Platform", - "info_kernel": "Kernel", - "info_node": "Node.js", - "info_process_id": "Process ID", - "info_pty_available": "PTY 可用", - "term_connect": "连接", - "term_disconnect": "断开", - "term_clear": "清除", - "term_status": "Status", - "term_connecting": "连接中…", - "term_connected": "已连接", - "term_disconnected": "已断开", - "term_error": "连接错误", - "term_warning": "命令会以控制台进程所属用户身份运行。添加 sudoers 规则以启用提权。", - "term_hint": "提示:输入 `sudo -i` 进行提权(需要 sudoers 配置)。", - "term_lib_failed": "加载终端库失败", - "files_up": "上一级", - "files_go": "Go", - "files_mkdir": "New folder", - "files_name": "名称", - "files_size": "大小", - "files_perms": "权限", - "files_mtime": "修改时间", - "files_rename": "重命名", - "files_rename_prompt": "New name:", - "files_empty": "空目录", - "files_error": "列出目录失败", - "read_failed": "读取文件失败", - "save_failed": "保存文件失败", - "rename_failed": "重命名失败", - "delete_failed": "删除失败", - "delete_confirm": "删除此条目?", - "mkdir_prompt": "新文件夹名称:", - "mkdir_failed": "创建文件夹失败", - "file_saved": "文件已保存", - "binary_warn": "二进制文件 — 仅预览", - "encoding_utf8": "UTF-8 text", - "truncated": "truncated", - "full": "full", - "svc_search_placeholder": "搜索服务…", - "svc_name": "服务", - "svc_state": "状态", - "svc_description": "说明", - "svc_empty": "未找到服务", - "svc_load_failed": "加载服务失败", - "svc_action_failed": "操作失败", - "svc_confirm": "Run", - "svc_start": "启动", - "svc_stop": "停止", - "svc_restart": "重启", - "svc_reload": "重新加载", - "svc_enable": "启用", - "svc_disable": "禁用", - "svc_status": "Status" - }, - "download": { - "title": "下载 BetterDesk 代理", - "choose_platform": "选择您的平台", - "choose_platform_hint": "选择与您的操作系统匹配的安装程序。", - "download": "下载", - "building": "正在构建…", - "failed": "构建失败", - "need_help": "需要帮助?", - "powered_by": "技术支持" - }, - "server_attestation": { - "title": "服务器性能认证", - "subtitle": "性能基准测试,在 80% CPU、内存和磁盘阈值下确定并发远程连接容量。", - "warning_title": "负载测试", - "warning_body": "基准测试模拟对信令和中继服务器的并行 WebSocket 连接。请在非高峰时段运行 — 此测试会对生产环境产生负载。", - "run_benchmark": "运行基准测试", - "abort": "中止", - "download_report": "下载 JSON 报告", - "last_test": "上次测试", - "no_test_yet": "尚未运行任何基准测试", - "max_connections": "最大连接数", - "threshold_80": "80% 阈值 — 最终指标", - "disk": "磁盘", - "ramp_chart": "负载爬升图", - "connections": "连接数", - "connections_short": "连接", - "tier_guide_title": "每个等级代表什么?", - "tier_bronze": "BRONZE", - "tier_iron": "IRON", - "tier_titanium": "TITANIUM", - "tier_platinum": "PLATINUM", - "tier_obsidian": "OBSIDIAN", - "tier_none": "UNRATED", - "tier_bronze_desc": "1–25 个并发连接 — 小型 VPS(1–2 vCPU,2–4 GB RAM)。", - "tier_iron_desc": "26–75 个连接 — 中端服务器(2–4 vCPU,4–8 GB RAM)。", - "tier_platinum_desc": "76–200 个连接 — 高性能服务器(4–8 vCPU,8–16 GB RAM)。", - "tier_titanium_desc": "201–400 个连接 — 企业级基础设施(8+ vCPU,16–32 GB RAM)。", - "tier_obsidian_desc": "401+ 个连接 — 极速级:专用硬件,16+ vCPU,32+ GB RAM,NVMe。", - "docker_note": "注意:在 Docker 中,CPU/内存指标可能反映容器限制而非物理主机。", - "badge_tooltip": "BetterDesk 服务器性能认证 — 服务器性能认证", - "confirm_run": "此基准测试将使用模拟连接对服务器进行负载测试。继续?", - "starting": "启动中…", - "complete": "基准测试完成", - "signal_peers": "信令节点", - "relay_sessions": "中继会话", - "page_error": "加载服务器性能认证页面失败", - "mode_estimated": "估算值(WebSocket 不可达)", - "incomplete": "基准测试结束但未获得有效等级" + "form": { + "cancel": "取消" } + } } diff --git a/web-nodejs/middleware/auth.js b/web-nodejs/middleware/auth.js index 93123741..5f00ca37 100644 --- a/web-nodejs/middleware/auth.js +++ b/web-nodejs/middleware/auth.js @@ -36,6 +36,7 @@ const DEFAULT_ROLE_PERMISSIONS = { 'chat.access', 'enrollment.manage', 'enrollment.approve', 'branding.edit', + 'billing.view', 'billing.manage', 'billing.reports', 'billing.export', ]), operator: new Set([ @@ -46,6 +47,7 @@ const DEFAULT_ROLE_PERMISSIONS = { 'enrollment.approve', 'chat.access', 'org.manage_devices', + 'billing.view', 'billing.reports', ]), viewer: new Set([ 'device.view', diff --git a/web-nodejs/package.json b/web-nodejs/package.json index 770e1e03..95931801 100644 --- a/web-nodejs/package.json +++ b/web-nodejs/package.json @@ -10,6 +10,8 @@ "test:ci": "jest --detectOpenHandles --forceExit --ci", "i18n:check": "node scripts/i18n-check.js --system web-nodejs", "i18n:check:all": "node scripts/i18n-check.js", + "i18n:commercialization": "node scripts/patch-commercialization-i18n.js", + "prei18n:check": "npm run i18n:commercialization", "i18n:apply": "node scripts/apply-i18n-audit.js" }, "keywords": [ diff --git a/web-nodejs/public/css/commercialization.css b/web-nodejs/public/css/commercialization.css new file mode 100644 index 00000000..03b121c1 --- /dev/null +++ b/web-nodejs/public/css/commercialization.css @@ -0,0 +1,79 @@ +.commercialization-page .page-header { margin-bottom: 1.25rem; } +.commercialization-page .page-header h1 { margin: 0 0 0.35rem; font-size: 1.5rem; color: var(--text-primary); display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem; } +.commercialization-page .page-header h1 .beta-badge { margin-left: 0; } +.commercialization-page .beta-badge { + display: inline-block; + padding: 2px 8px; + border-radius: 4px; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.05em; + background: linear-gradient(135deg, #a371f7, #58a6ff); + color: #fff; + vertical-align: middle; +} +.commercialization-page .page-subtitle { margin: 0; color: var(--text-secondary); font-size: 0.9375rem; } +/* Override global .tab-panel { display:none } — show the active section for this page */ +.commercialization-page .tab-panel { display: block; } +.commercialization-page .tab-panel.hidden { display: none !important; } +.commercialization-page .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; } +.commercialization-page .stat-card, +.commercialization-page .card { + padding: 1rem 1.125rem; + border-radius: var(--radius-lg, 8px); + background: var(--bg-secondary); + border: 1px solid var(--border-primary); +} +.commercialization-page .stat-card h3, +.commercialization-page .card h3 { + margin: 0 0 0.5rem; + font-size: 0.875rem; + font-weight: var(--font-weight-semibold, 600); + color: var(--text-secondary); +} +.commercialization-page .stat-value { font-size: 1.5rem; font-weight: 600; margin: 0.25rem 0; color: var(--text-primary); } +.commercialization-page .stat-meta { color: var(--text-secondary); font-size: 0.875rem; } +.timesync-banner { + padding: 0.75rem 1rem; + margin-bottom: 1rem; + border-radius: var(--radius-md, 6px); + background: rgba(210, 153, 34, 0.15); + border: 1px solid rgba(210, 153, 34, 0.35); + color: #e3b341; +} +.timesync-banner.hidden { display: none; } +.commercialization-page .table-wrap { overflow-x: auto; } +.commercialization-page .panel-toolbar { margin-bottom: 0.75rem; display: flex; flex-wrap: wrap; gap: 0.5rem; } +.commercialization-page .section-heading { + margin: 1.25rem 0 0.5rem; + font-size: 1rem; + font-weight: var(--font-weight-semibold, 600); + color: var(--text-primary); +} +.commercialization-page .section-heading:first-of-type { margin-top: 0; } +.commercialization-page .btn-link { background: none; border: none; color: var(--accent-primary, #58a6ff); cursor: pointer; padding: 0; font: inherit; } +.commercialization-page .btn-link.danger { color: #f85149; } +.commercialization-page .btn-link:hover { text-decoration: underline; } +.commercialization-page .empty-state { + padding: 1.25rem; + text-align: center; + color: var(--text-secondary); + font-size: 0.9375rem; + border: 1px dashed var(--border-primary); + border-radius: var(--radius-lg, 8px); + background: var(--bg-secondary); +} +.commercialization-page .empty-state.hidden { display: none; } +.commercialization-page .form-label { + display: block; + margin-bottom: 0.75rem; + font-size: 0.875rem; + color: var(--text-secondary); +} +.commercialization-page .form-label .form-control { margin-top: 0.35rem; } +.commercialization-page .form-error { + color: #f85149; + font-size: 0.875rem; + margin-top: 0.5rem; +} +.commercialization-page .form-error.hidden { display: none; } diff --git a/web-nodejs/public/css/main.css b/web-nodejs/public/css/main.css index dc1cf942..c3f623fb 100644 --- a/web-nodejs/public/css/main.css +++ b/web-nodejs/public/css/main.css @@ -390,6 +390,22 @@ table { outline-color: var(--sidebar-cat-server-mgmt-accent); } +/* Category: commercialization */ +.sidebar-rail-btn[data-category="commercialization"].active, +.sidebar-rail-btn[data-category="commercialization"].selected { + background: var(--sidebar-cat-commercialization-muted); + color: var(--sidebar-cat-commercialization-accent); +} + +.sidebar-rail-btn[data-category="commercialization"].active::before, +.sidebar-rail-btn[data-category="commercialization"].selected::before { + background: var(--sidebar-cat-commercialization-accent); +} + +.sidebar-rail-btn[data-category="commercialization"]:focus-visible { + outline-color: var(--sidebar-cat-commercialization-accent); +} + .sidebar-rail-btn .material-icons { font-size: 22px; } @@ -466,19 +482,8 @@ table { color: var(--sidebar-cat-server-mgmt-accent); } -.sidebar-logo-text { - font-weight: var(--font-weight-bold); - font-size: var(--font-size-md); - color: var(--text-primary); - white-space: nowrap; -} - -.sidebar-flyout-header .sidebar-flyout-title + .sidebar-logo-text { - display: none; -} - -.sidebar-flyout-header .sidebar-flyout-title:empty + .sidebar-logo-text { - display: inline; +.sidebar-flyout[data-active-category="commercialization"] .sidebar-flyout-title { + color: var(--sidebar-cat-commercialization-accent); } /* Flyout panels (one per category) */ @@ -574,6 +579,16 @@ table { outline-color: var(--sidebar-cat-server-mgmt-accent); } +.sidebar-flyout[data-active-category="commercialization"] .sidebar-link.active { + background: var(--sidebar-cat-commercialization-muted); + color: var(--sidebar-cat-commercialization-accent); + border-left-color: var(--sidebar-cat-commercialization-accent); +} + +.sidebar-flyout[data-active-category="commercialization"] .sidebar-link:focus-visible { + outline-color: var(--sidebar-cat-commercialization-accent); +} + .sidebar-link .material-icons { font-size: 20px; flex-shrink: 0; @@ -677,6 +692,40 @@ table { line-height: 1; } +.sidebar-flyout-stage.badge-sidebar { + margin-left: 0; + background: linear-gradient(135deg, #a371f7, #58a6ff); + flex-shrink: 0; +} + +.sidebar-flyout-stage.hidden { + display: none; +} + +.badge-sidebar--alpha { + background: linear-gradient(135deg, #a371f7, #58a6ff); + flex-shrink: 0; +} + +.sidebar-rail-btn--alpha { + position: relative; +} + +.sidebar-rail-btn .rail-stage-badge { + position: absolute; + right: 2px; + bottom: 2px; + padding: 1px 3px; + border-radius: 3px; + font-size: 7px; + font-weight: 700; + letter-spacing: 0.02em; + line-height: 1.1; + background: linear-gradient(135deg, #a371f7, #58a6ff); + color: #fff; + pointer-events: none; +} + /* ═══════════════════════════════════════════════════════════════════════════ NAVBAR ═══════════════════════════════════════════════════════════════════════════ */ diff --git a/web-nodejs/public/css/variables.css b/web-nodejs/public/css/variables.css index f18ccbd5..02771e60 100644 --- a/web-nodejs/public/css/variables.css +++ b/web-nodejs/public/css/variables.css @@ -122,6 +122,8 @@ --sidebar-cat-system-muted: rgba(163, 113, 247, 0.20); --sidebar-cat-server-mgmt-accent: #ff9b7a; --sidebar-cat-server-mgmt-muted: rgba(255, 155, 122, 0.18); + --sidebar-cat-commercialization-accent: #f0b429; + --sidebar-cat-commercialization-muted: rgba(240, 180, 41, 0.18); /* ═══════════════════════════════════════════════════════════════════════ SHAPES & EFFECTS diff --git a/web-nodejs/public/js/billing-report.js b/web-nodejs/public/js/billing-report.js new file mode 100644 index 00000000..a9b3806b --- /dev/null +++ b/web-nodejs/public/js/billing-report.js @@ -0,0 +1,160 @@ +'use strict'; + +/** + * Billing work report modal — shown after remote session ends when a + * billable session requires a technician report. + */ +(function (global) { + function t(key, fallback) { + if (typeof global.t === 'function') { + const val = global.t(key); + if (val && val !== key) return val; + } + return fallback !== undefined ? fallback : key; + } + + function escapeHtml(s) { + return String(s || '').replace(/[&<>"']/g, (c) => ({ + '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' + }[c])); + } + + function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + + function ensureModal() { + let el = document.getElementById('billing-report-modal'); + if (el) return el; + + el = document.createElement('div'); + el.id = 'billing-report-modal'; + el.className = 'billing-report-modal hidden'; + el.innerHTML = ` +
+`; + document.body.appendChild(el); + + if (!document.getElementById('billing-report-styles')) { + const style = document.createElement('style'); + style.id = 'billing-report-styles'; + style.textContent = ` +.billing-report-modal{position:fixed;inset:0;z-index:10050;display:flex;align-items:center;justify-content:center} +.billing-report-modal.hidden{display:none} +.billing-report-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.55)} +.billing-report-dialog{position:relative;z-index:1;width:min(520px,92vw);background:var(--surface-1,#fff);border-radius:10px;padding:1.25rem;box-shadow:0 12px 40px rgba(0,0,0,.25)} +.billing-report-title{margin:0 0 .25rem;font-size:1.15rem} +.billing-report-subtitle{margin:0 0 .75rem;color:var(--text-muted,#666);font-size:.9rem} +.billing-report-meta{font-size:.85rem;margin-bottom:.75rem;color:var(--text-muted,#666)} +.billing-report-label{display:block;margin-bottom:.65rem;font-size:.875rem} +.billing-report-label input,.billing-report-label textarea{width:100%;margin-top:.25rem;padding:.5rem;border:1px solid var(--border,#ccc);border-radius:6px;background:var(--surface-2,#fafafa);color:inherit} +.billing-report-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.75rem} +.billing-report-error{color:#b91c1c;font-size:.85rem;margin-top:.5rem}`; + document.head.appendChild(style); + } + return el; + } + + async function fetchPendingSession(deviceId) { + const url = `/api/panel/billing/sessions/pending?device_id=${encodeURIComponent(deviceId)}`; + const resp = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'application/json' } }); + if (!resp.ok) return null; + const data = await resp.json(); + return data.session || null; + } + + async function submitReport(sessionId, payload) { + const resp = await fetch(`/api/panel/billing/sessions/${encodeURIComponent(sessionId)}/report`, { + method: 'POST', + credentials: 'same-origin', + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, + body: JSON.stringify(payload) + }); + const data = await resp.json().catch(() => ({})); + if (!resp.ok) throw new Error(data.error || resp.statusText); + } + + function showModal(session, deviceName) { + return new Promise((resolve) => { + const modal = ensureModal(); + modal.querySelector('.billing-report-title').textContent = t('commercialization.report.title', 'Work report'); + modal.querySelector('.billing-report-subtitle').textContent = t('commercialization.report.subtitle', 'Describe the work performed during this remote session.'); + const mins = session.billed_minutes || 0; + const amount = (session.amount_included || 0) + (session.amount_overage || 0); + modal.querySelector('.billing-report-meta').textContent = + `${deviceName || session.device_id} · ${mins} min · ${amount.toFixed(2)} ${session.currency || ''}`; + + const summaryEl = modal.querySelector('.billing-report-summary'); + const catEl = modal.querySelector('.billing-report-category'); + const ticketEl = modal.querySelector('.billing-report-ticket'); + const errEl = modal.querySelector('.billing-report-error'); + summaryEl.value = ''; + catEl.value = ''; + ticketEl.value = ''; + errEl.classList.add('hidden'); + + const close = (result) => { + modal.classList.add('hidden'); + resolve(result); + }; + + modal.querySelector('.billing-report-skip').onclick = () => close(false); + modal.querySelector('.billing-report-backdrop').onclick = () => close(false); + modal.querySelector('.billing-report-submit').onclick = async () => { + const summary = summaryEl.value.trim(); + if (!summary) { + errEl.textContent = t('commercialization.report.summary_required', 'Summary is required'); + errEl.classList.remove('hidden'); + return; + } + try { + await submitReport(session.id, { + summary, + category: catEl.value.trim(), + ticket_ref: ticketEl.value.trim() + }); + close(true); + } catch (e) { + errEl.textContent = e.message || 'Error'; + errEl.classList.remove('hidden'); + } + }; + + modal.classList.remove('hidden'); + summaryEl.focus(); + }); + } + + async function promptAfterSession(deviceId, deviceName) { + if (!deviceId) return false; + await sleep(1200); + let session = null; + for (let i = 0; i < 5; i++) { + session = await fetchPendingSession(deviceId); + if (session) break; + await sleep(800); + } + if (!session) return false; + return showModal(session, deviceName); + } + + global.BillingReport = { promptAfterSession }; +})(window); diff --git a/web-nodejs/public/js/commercialization.js b/web-nodejs/public/js/commercialization.js new file mode 100644 index 00000000..c6dec768 --- /dev/null +++ b/web-nodejs/public/js/commercialization.js @@ -0,0 +1,386 @@ +'use strict'; + +(function () { + const page = document.querySelector('.commercialization-page'); + if (!page) return; + + function t(key, fallback) { + if (typeof window.__ === 'function') { + const val = window.__(key); + if (val && val !== key) return val; + } + return fallback !== undefined ? fallback : key; + } + + async function api(path, opts = {}) { + const resp = await fetch(path, { + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, + credentials: 'same-origin', + ...opts + }); + const data = await resp.json().catch(() => ({})); + if (!resp.ok) throw new Error(data.error || resp.statusText); + return data; + } + + function formatMinutes(m) { + if (!m) return '0 min'; + const h = Math.floor(m / 60); + const min = m % 60; + if (h > 0) return `${h}h ${min}m`; + return `${min} min`; + } + + function escapeHtml(s) { + return String(s || '').replace(/[&<>"']/g, (c) => ({ + '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' + }[c])); + } + + function triggerDownload(url) { + const a = document.createElement('a'); + a.href = url; + a.download = ''; + document.body.appendChild(a); + a.click(); + a.remove(); + } + + function setEmptyState(tableId, emptyId, isEmpty, message) { + const table = document.getElementById(tableId); + let emptyEl = document.getElementById(emptyId); + if (!table) return; + if (isEmpty) { + if (!emptyEl) { + emptyEl = document.createElement('p'); + emptyEl.id = emptyId; + emptyEl.className = 'empty-state'; + table.parentElement?.appendChild(emptyEl); + } + emptyEl.textContent = message; + emptyEl.classList.remove('hidden'); + table.classList.add('hidden'); + } else { + emptyEl?.classList.add('hidden'); + table.classList.remove('hidden'); + } + } + + function openModal(id) { + document.getElementById(id)?.classList.add('open'); + } + + function closeModal(id) { + document.getElementById(id)?.classList.remove('open'); + } + + document.querySelectorAll('[data-close-modal]').forEach((btn) => { + btn.addEventListener('click', () => closeModal(btn.getAttribute('data-close-modal'))); + }); + + document.querySelectorAll('.modal-overlay').forEach((overlay) => { + overlay.addEventListener('click', (e) => { + if (e.target === overlay) closeModal(overlay.id); + }); + }); + + async function loadOrgs() { + const data = await api('/api/panel/org'); + return data.organizations || data.orgs || []; + } + + async function populateOrgSelect(selectEl, placeholderKey) { + const orgs = await loadOrgs(); + selectEl.innerHTML = ''; + const placeholder = document.createElement('option'); + placeholder.value = ''; + placeholder.textContent = t(placeholderKey, 'Select organization…'); + selectEl.appendChild(placeholder); + orgs.forEach((org) => { + const opt = document.createElement('option'); + opt.value = org.id; + opt.textContent = org.name || org.id; + selectEl.appendChild(opt); + }); + return orgs; + } + + async function loadTimesync() { + try { + const st = await api('/api/panel/billing/timesync/status'); + const banner = document.getElementById('timesync-banner'); + const statusEl = document.getElementById('clock-status'); + const offsetEl = document.getElementById('clock-offset'); + const detail = document.getElementById('settings-clock-detail'); + const synced = !!st.synced; + if (statusEl) statusEl.textContent = synced ? 'OK' : 'WARN'; + const offset = `${st.offset_ms || 0} ms`; + if (offsetEl) offsetEl.textContent = offset; + if (detail) detail.textContent = `${synced ? 'Synced' : 'Not synced'} · offset ${offset}`; + if (banner) { + banner.classList.toggle('hidden', synced); + banner.textContent = synced ? '' : t('commercialization.clock.unsynced', 'Clock not synchronized'); + } + } catch (e) { + console.warn('[commercialization] timesync', e); + } + } + + async function loadPackages() { + const tbody = document.querySelector('#packages-table tbody'); + if (!tbody) return []; + const data = await api('/api/panel/billing/packages'); + tbody.innerHTML = ''; + const pkgs = data.packages || []; + pkgs.forEach((p) => { + const tr = document.createElement('tr'); + tr.innerHTML = `${escapeHtml(p.name)}${p.included_minutes}${p.overage_rate}${escapeHtml(p.currency)}`; + tbody.appendChild(tr); + }); + setEmptyState('packages-table', 'packages-empty', pkgs.length === 0, + t('commercialization.empty.packages', 'No packages yet. Create one with the button above.')); + return pkgs; + } + + async function loadContracts() { + const tbody = document.querySelector('#contracts-table tbody'); + if (!tbody) return; + const data = await api('/api/panel/billing/contracts'); + tbody.innerHTML = ''; + (data.contracts || []).forEach((c) => { + const tr = document.createElement('tr'); + const orgLabel = escapeHtml(c.org_name || c.org_id); + const pkgLabel = escapeHtml(c.package_name || c.package_id); + const isSuspended = c.status === 'suspended'; + const toggleLabel = isSuspended + ? t('commercialization.contracts.activate', 'Activate') + : t('commercialization.contracts.suspend', 'Suspend'); + tr.innerHTML = ` + ${orgLabel} + ${pkgLabel} + ${formatMinutes(c.remaining_minutes)} + ${escapeHtml(c.status)} + `; + tbody.appendChild(tr); + }); + tbody.querySelectorAll('[data-contract-id]').forEach((btn) => { + btn.addEventListener('click', async () => { + const id = btn.getAttribute('data-contract-id'); + const status = btn.getAttribute('data-status'); + await api(`/api/panel/billing/contracts/${encodeURIComponent(id)}`, { + method: 'PUT', + body: JSON.stringify({ status }) + }); + await loadContracts(); + }); + }); + setEmptyState('contracts-table', 'contracts-empty', (data.contracts || []).length === 0, + t('commercialization.empty.contracts', 'No organization contracts yet. Assign a package to an organization.')); + } + + async function loadSessions() { + const tbody = document.querySelector('#sessions-table tbody'); + if (!tbody) return; + const data = await api('/api/panel/billing/sessions'); + tbody.innerHTML = ''; + let active = 0; + (data.sessions || []).forEach((s) => { + if (s.status === 'active') active++; + const amount = (s.amount_included || 0) + (s.amount_overage || 0); + const tr = document.createElement('tr'); + tr.innerHTML = `${escapeHtml(s.device_id)}${escapeHtml(s.operator_id)}${formatMinutes(s.billed_minutes)}${escapeHtml(s.billing_phase)}${amount.toFixed(2)} ${escapeHtml(s.currency)}`; + tbody.appendChild(tr); + }); + const stat = document.getElementById('stat-active-sessions'); + if (stat) stat.textContent = String(active); + setEmptyState('sessions-table', 'sessions-empty', (data.sessions || []).length === 0, + t('commercialization.empty.sessions', 'No billable sessions recorded yet.')); + } + + async function loadReports() { + const tbody = document.querySelector('#reports-table tbody'); + if (!tbody) return; + const data = await api('/api/panel/billing/reports'); + tbody.innerHTML = ''; + (data.reports || []).forEach((r) => { + const tr = document.createElement('tr'); + tr.innerHTML = `${escapeHtml(r.session_id)}${escapeHtml(r.summary)}${escapeHtml(r.created_at || '')}`; + tbody.appendChild(tr); + }); + setEmptyState('reports-table', 'reports-empty', (data.reports || []).length === 0, + t('commercialization.empty.reports', 'No work reports submitted yet.')); + } + + function showModalError(el, message) { + if (!el) return; + if (message) { + el.textContent = message; + el.classList.remove('hidden'); + } else { + el.textContent = ''; + el.classList.add('hidden'); + } + } + + async function openPackageModal() { + const orgSelect = document.getElementById('package-org-select'); + const errEl = document.getElementById('package-modal-error'); + showModalError(errEl, ''); + const orgs = await populateOrgSelect(orgSelect, 'commercialization.packages.select_org_placeholder'); + if (!orgs.length) { + alert(t('commercialization.contracts.no_orgs', 'No organizations found')); + return; + } + document.getElementById('package-name').value = ''; + document.getElementById('package-minutes').value = '600'; + document.getElementById('package-overage').value = '100'; + document.getElementById('package-currency').value = 'PLN'; + openModal('package-modal'); + } + + async function submitPackageModal() { + const errEl = document.getElementById('package-modal-error'); + const orgId = document.getElementById('package-org-select')?.value; + const name = document.getElementById('package-name')?.value.trim(); + const includedMinutes = parseInt(document.getElementById('package-minutes')?.value, 10); + const overageRate = parseFloat(document.getElementById('package-overage')?.value); + const currency = document.getElementById('package-currency')?.value.trim().toUpperCase(); + + if (!orgId) { + showModalError(errEl, t('commercialization.packages.select_org_placeholder', 'Select organization…')); + return; + } + if (!name) { + showModalError(errEl, t('commercialization.packages.prompt_name', 'Package name')); + return; + } + + try { + const pkg = await api('/api/panel/billing/packages', { + method: 'POST', + body: JSON.stringify({ + name, + included_minutes: includedMinutes, + overage_rate: overageRate, + currency: currency || 'PLN' + }) + }); + await api('/api/panel/billing/contracts', { + method: 'POST', + body: JSON.stringify({ + org_id: orgId, + package_id: pkg.id, + currency: pkg.currency || currency || 'PLN' + }) + }); + closeModal('package-modal'); + await loadPackages(); + await loadContracts(); + } catch (e) { + showModalError(errEl, e.message); + } + } + + async function openAssignModal() { + const orgSelect = document.getElementById('assign-org-select'); + const pkgSelect = document.getElementById('assign-package-select'); + const errEl = document.getElementById('assign-modal-error'); + showModalError(errEl, ''); + + const [orgs, pkgs] = await Promise.all([ + populateOrgSelect(orgSelect, 'commercialization.packages.select_org_placeholder'), + api('/api/panel/billing/packages') + ]); + if (!orgs.length) { + alert(t('commercialization.contracts.no_orgs', 'No organizations found')); + return; + } + const packages = pkgs.packages || []; + if (!packages.length) { + alert(t('commercialization.contracts.no_packages', 'Create a package first')); + return; + } + pkgSelect.innerHTML = ''; + packages.forEach((p) => { + const opt = document.createElement('option'); + opt.value = p.id; + opt.textContent = `${p.name} (${p.included_minutes} min)`; + pkgSelect.appendChild(opt); + }); + openModal('assign-modal'); + } + + async function submitAssignModal() { + const errEl = document.getElementById('assign-modal-error'); + const orgId = document.getElementById('assign-org-select')?.value; + const packageId = document.getElementById('assign-package-select')?.value; + if (!orgId || !packageId) { + showModalError(errEl, t('commercialization.contracts.select_org', 'Select organization')); + return; + } + try { + const pkgs = await api('/api/panel/billing/packages'); + const pkg = (pkgs.packages || []).find((p) => p.id === packageId); + await api('/api/panel/billing/contracts', { + method: 'POST', + body: JSON.stringify({ + org_id: orgId, + package_id: packageId, + currency: pkg?.currency || 'PLN' + }) + }); + closeModal('assign-modal'); + await loadContracts(); + } catch (e) { + showModalError(errEl, e.message); + } + } + + document.getElementById('btn-timesync-check')?.addEventListener('click', async () => { + await api('/api/panel/billing/timesync/check', { method: 'POST' }); + await loadTimesync(); + }); + + document.getElementById('btn-new-package')?.addEventListener('click', () => { + openPackageModal().catch((e) => alert(e.message)); + }); + + document.getElementById('package-modal-submit')?.addEventListener('click', () => { + submitPackageModal(); + }); + + document.getElementById('btn-new-contract')?.addEventListener('click', () => { + openAssignModal().catch((e) => alert(e.message)); + }); + + document.getElementById('assign-modal-submit')?.addEventListener('click', () => { + submitAssignModal(); + }); + + document.getElementById('btn-export-sessions')?.addEventListener('click', () => { + triggerDownload('/api/panel/billing/sessions/export?format=csv'); + }); + + document.getElementById('btn-export-reports-csv')?.addEventListener('click', () => { + triggerDownload('/api/panel/billing/reports/export?format=csv'); + }); + + document.getElementById('btn-export-reports-pdf')?.addEventListener('click', () => { + triggerDownload('/api/panel/billing/reports/export?format=pdf'); + }); + + const tab = page.dataset.activeTab || 'overview'; + if (tab === 'overview' || tab === 'settings') { + loadTimesync(); + } + if (tab === 'overview' || tab === 'sessions') { + loadSessions().catch(console.warn); + } + if (tab === 'packages') { + loadPackages().catch(console.warn); + loadContracts().catch(console.warn); + } + if (tab === 'reports') { + loadReports().catch(console.warn); + } +})(); diff --git a/web-nodejs/public/js/remote.js b/web-nodejs/public/js/remote.js index d44d20bd..0628a296 100644 --- a/web-nodejs/public/js/remote.js +++ b/web-nodejs/public/js/remote.js @@ -448,6 +448,13 @@ setSessionStatus(session, 'info', reason || _('remote.disconnected')); showSessionActions(session); if (isActive(session)) setToolbarAutoHide(false); + if (typeof window.BillingReport !== 'undefined') { + window.BillingReport.promptAfterSession(session.deviceId, session.deviceName) + .then((submitted) => { + if (submitted) showToast(t('commercialization.report.saved', 'Work report saved'), 'success'); + }) + .catch(() => {}); + } }); c.on('password_required', () => { diff --git a/web-nodejs/routes/commercialization.routes.js b/web-nodejs/routes/commercialization.routes.js new file mode 100644 index 00000000..303bdae3 --- /dev/null +++ b/web-nodejs/routes/commercialization.routes.js @@ -0,0 +1,139 @@ +'use strict'; + +const express = require('express'); +const router = express.Router(); +const { requireAuth, requirePermission } = require('../middleware/auth'); +const { apiClient } = require('../services/betterdeskApi'); + +async function goApiProxy(req, res, method, path, body) { + try { + const opts = { method, url: path }; + if (body) opts.data = body; + const resp = await apiClient(opts); + res.status(resp.status).json(resp.data); + } catch (err) { + const status = err.response?.status || 500; + const data = err.response?.data || { error: 'Go server unreachable' }; + res.status(status).json(data); + } +} + +async function goApiBinaryProxy(req, res, method, path) { + try { + const resp = await apiClient({ + method, + url: path, + responseType: 'arraybuffer' + }); + const ct = resp.headers['content-type']; + const cd = resp.headers['content-disposition']; + if (ct) res.set('Content-Type', ct); + if (cd) res.set('Content-Disposition', cd); + res.status(resp.status).send(Buffer.from(resp.data)); + } catch (err) { + const status = err.response?.status || 500; + if (err.response?.data) { + try { + const text = Buffer.from(err.response.data).toString('utf8'); + const json = JSON.parse(text); + return res.status(status).json(json); + } catch (_) { /* fall through */ } + } + res.status(status).json({ error: 'Go server unreachable' }); + } +} + +router.get('/commercialization', requireAuth, requirePermission('billing.view'), (req, res) => { + const validTabs = ['overview', 'packages', 'sessions', 'reports', 'settings']; + const tab = validTabs.includes(req.query.tab) ? req.query.tab : 'overview'; + const tabKey = `commercialization.tabs.${tab}`; + res.render('commercialization', { + title: req.t(tabKey), + pageStyles: ['commercialization'], + pageScripts: ['commercialization'], + currentPage: 'commercialization', + currentTab: tab, + activeTab: tab, + breadcrumb: [ + { label: req.t('commercialization.title') }, + { label: req.t(tabKey) } + ], + req + }); +}); + +router.get('/api/panel/billing/timesync/status', requireAuth, requirePermission('billing.view'), (req, res) => { + goApiProxy(req, res, 'GET', '/timesync/status'); +}); + +router.post('/api/panel/billing/timesync/check', requireAuth, requirePermission('server.config'), (req, res) => { + goApiProxy(req, res, 'POST', '/timesync/check'); +}); + +router.get('/api/panel/billing/packages', requireAuth, requirePermission('billing.view'), (req, res) => { + goApiProxy(req, res, 'GET', '/billing/packages'); +}); + +router.post('/api/panel/billing/packages', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'POST', '/billing/packages', req.body); +}); + +router.put('/api/panel/billing/packages/:id', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'PUT', `/billing/packages/${encodeURIComponent(req.params.id)}`, req.body); +}); + +router.delete('/api/panel/billing/packages/:id', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'DELETE', `/billing/packages/${encodeURIComponent(req.params.id)}`); +}); + +router.get('/api/panel/billing/contracts', requireAuth, requirePermission('billing.view'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiProxy(req, res, 'GET', `/billing/contracts${q ? '?' + q : ''}`); +}); + +router.post('/api/panel/billing/contracts', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'POST', '/billing/contracts', req.body); +}); + +router.put('/api/panel/billing/contracts/:id', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'PUT', `/billing/contracts/${encodeURIComponent(req.params.id)}`, req.body); +}); + +router.get('/api/panel/billing/sessions', requireAuth, requirePermission('billing.view'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiProxy(req, res, 'GET', `/billing/sessions${q ? '?' + q : ''}`); +}); + +router.get('/api/panel/billing/sessions/pending', requireAuth, requirePermission('billing.reports'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiProxy(req, res, 'GET', `/billing/sessions/pending${q ? '?' + q : ''}`); +}); + +router.get('/api/panel/billing/sessions/export', requireAuth, requirePermission('billing.export'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiBinaryProxy(req, res, 'GET', `/billing/sessions/export${q ? '?' + q : ''}`); +}); + +router.get('/api/panel/billing/reports', requireAuth, requirePermission('billing.view'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiProxy(req, res, 'GET', `/billing/reports${q ? '?' + q : ''}`); +}); + +router.get('/api/panel/billing/reports/export', requireAuth, requirePermission('billing.export'), (req, res) => { + const q = new URLSearchParams(req.query).toString(); + goApiBinaryProxy(req, res, 'GET', `/billing/reports/export${q ? '?' + q : ''}`); +}); + +router.post('/api/panel/billing/sessions/:id/report', requireAuth, requirePermission('billing.reports'), (req, res) => { + goApiProxy(req, res, 'POST', `/billing/sessions/${encodeURIComponent(req.params.id)}/report`, req.body); +}); + +router.get('/api/panel/billing/currencies', requireAuth, requirePermission('billing.view'), (req, res) => { + goApiProxy(req, res, 'GET', '/billing/currencies'); +}); + +router.put('/api/panel/billing/currencies/:code', requireAuth, requirePermission('billing.manage'), (req, res) => { + goApiProxy(req, res, 'PUT', `/billing/currencies/${encodeURIComponent(req.params.code)}`, req.body); +}); + +module.exports = router; diff --git a/web-nodejs/routes/index.js b/web-nodejs/routes/index.js index ddfd1a8a..8cc18690 100644 --- a/web-nodejs/routes/index.js +++ b/web-nodejs/routes/index.js @@ -49,6 +49,7 @@ const tokensRoutes = lazyRoute('./tokens.routes'); const organizationsRoutes = lazyRoute('./organizations.routes'); const policiesRoutes = lazyRoute('./policies.routes'); const fleetRoutes = lazyRoute('./fleet.routes'); +const commercializationRoutes = lazyRoute('./commercialization.routes'); const scalingRoutes = lazyRoute('./scaling.routes'); const crossPlatformRoutes = lazyRoute('./cross-platform.routes'); const toolkitRoutes = lazyRoute('./toolkit.routes'); @@ -135,6 +136,7 @@ router.use('/', organizationsRoutes); // admin-facing: /organ router.use('/', policiesRoutes); // admin-facing: /policies, /api/panel/policies/*, /api/bd/device-policy, /api/bd/attestation router.use('/api/bd', policiesRoutes); // device-facing: /api/bd/device-policy, /api/bd/attestation router.use('/', fleetRoutes); // admin-facing: /fleet, /api/panel/fleet/* +router.use('/', commercializationRoutes); // admin-facing: /commercialization, /api/panel/billing/* router.use('/api/bd', fleetRoutes); // device-facing: /api/bd/fleet/task-result, /api/bd/fleet/software router.use('/', scalingRoutes); // admin-facing: /scaling, /api/panel/scaling/* router.use('/api/bd', scalingRoutes); // device-facing: /api/bd/scaling/relay-heartbeat diff --git a/web-nodejs/scripts/commercialization-i18n-sections.js b/web-nodejs/scripts/commercialization-i18n-sections.js new file mode 100644 index 00000000..68640aec --- /dev/null +++ b/web-nodejs/scripts/commercialization-i18n-sections.js @@ -0,0 +1,269 @@ +'use strict'; + +/** Shared UI sections for commercialization — merged into every non-en locale by patch-commercialization-i18n.js */ +module.exports = { + ar: { + tabs: { overview: 'نظرة عامة', packages: 'الحزم والعقود', sessions: 'الجلسات', reports: 'التقارير', settings: 'إعدادات متقدمة' }, + clock: { title: 'وقت الخادم (NTP)', check_now: 'تحقق الآن', unsynced: 'ساعة الخادم غير متزامنة — قد تُحظر الجلسات القابلة للفوترة' }, + stats: { active_sessions: 'جلسات قابلة للفوترة نشطة' }, + packages: { new: 'حزمة جديدة', name: 'الاسم', included_minutes: 'الدقائق المضمنة', overage_rate: 'سعر التجاوز / س', currency: 'العملة', create_title: 'حزمة جديدة للمنظمة', create_submit: 'إنشاء حزمة', select_org: 'المنظمة', select_org_placeholder: 'اختر المنظمة…' }, + sessions: { device: 'الجهاز', operator: 'المشغّل', duration: 'المدة', phase: 'المرحلة', amount: 'المبلغ' }, + reports: { session: 'الجلسة', summary: 'الملخص', date: 'التاريخ' }, + empty: { packages: 'لا توجد حزم بعد. أنشئ واحدة بالزر أعلاه.', contracts: 'لا توجد عقود منظمات بعد. عيّن حزمة لمنظمة.', sessions: 'لم تُسجَّل جلسات قابلة للفوترة بعد.', reports: 'لم تُرسَل تقارير عمل بعد.' }, + assign: { title: 'تعيين حزمة موجودة', submit: 'تعيين' }, + form: { cancel: 'إلغاء' } + }, + cs: { + tabs: { overview: 'Přehled', packages: 'Balíčky a smlouvy', sessions: 'Relace', reports: 'Reporty', settings: 'Pokročilá nastavení' }, + clock: { title: 'Čas serveru (NTP)', check_now: 'Zkontrolovat', unsynced: 'Hodiny serveru nejsou synchronizovány — fakturovatelné relace mohou být blokovány' }, + stats: { active_sessions: 'Aktivní fakturovatelné relace' }, + packages: { new: 'Nový balíček', name: 'Název', included_minutes: 'Zahrnuté minuty', overage_rate: 'Sazba překročení / h', currency: 'Měna', create_title: 'Nový balíček pro organizaci', create_submit: 'Vytvořit balíček', select_org: 'Organizace', select_org_placeholder: 'Vyberte organizaci…' }, + sessions: { device: 'Zařízení', operator: 'Operátor', duration: 'Trvání', phase: 'Fáze', amount: 'Částka' }, + reports: { session: 'Relace', summary: 'Shrnutí', date: 'Datum' }, + empty: { packages: 'Zatím žádné balíčky. Vytvořte první tlačítkem výše.', contracts: 'Zatím žádné smlouvy organizací. Přiřaďte balíček organizaci.', sessions: 'Zatím nejsou zaznamenány fakturovatelné relace.', reports: 'Zatím nebyly odeslány pracovní zprávy.' }, + assign: { title: 'Přiřadit existující balíček', submit: 'Přiřadit' }, + form: { cancel: 'Zrušit' } + }, + da: { + tabs: { overview: 'Overblik', packages: 'Pakker og kontrakter', sessions: 'Sessioner', reports: 'Rapporter', settings: 'Avancerede indstillinger' }, + clock: { title: 'Servertid (NTP)', check_now: 'Tjek nu', unsynced: 'Serveruret er ikke synkroniseret — fakturerbare sessioner kan blive blokeret' }, + stats: { active_sessions: 'Aktive fakturerbare sessioner' }, + packages: { new: 'Ny pakke', name: 'Navn', included_minutes: 'Inkluderede minutter', overage_rate: 'Overforbrugssats / t', currency: 'Valuta', create_title: 'Ny pakke til organisation', create_submit: 'Opret pakke', select_org: 'Organisation', select_org_placeholder: 'Vælg organisation…' }, + sessions: { device: 'Enhed', operator: 'Operatør', duration: 'Varighed', phase: 'Fase', amount: 'Beløb' }, + reports: { session: 'Session', summary: 'Resumé', date: 'Dato' }, + empty: { packages: 'Ingen pakker endnu. Opret en med knappen ovenfor.', contracts: 'Ingen organisationskontrakter endnu. Tildel en pakke til en organisation.', sessions: 'Ingen fakturerbare sessioner registreret endnu.', reports: 'Ingen arbejdsrapporter indsendt endnu.' }, + assign: { title: 'Tildel eksisterende pakke', submit: 'Tildel' }, + form: { cancel: 'Annuller' } + }, + de: { + tabs: { overview: 'Übersicht', packages: 'Pakete & Verträge', sessions: 'Sitzungen', reports: 'Berichte', settings: 'Erweiterte Einstellungen' }, + clock: { title: 'Serverzeit (NTP)', check_now: 'Jetzt prüfen', unsynced: 'Serveruhr nicht synchronisiert — abrechenbare Sitzungen können blockiert werden' }, + stats: { active_sessions: 'Aktive abrechenbare Sitzungen' }, + packages: { new: 'Neues Paket', name: 'Name', included_minutes: 'Enthaltene Minuten', overage_rate: 'Überziehungssatz / h', currency: 'Währung', create_title: 'Neues Paket für Organisation', create_submit: 'Paket erstellen', select_org: 'Organisation', select_org_placeholder: 'Organisation wählen…' }, + sessions: { device: 'Gerät', operator: 'Operator', duration: 'Dauer', phase: 'Phase', amount: 'Betrag' }, + reports: { session: 'Sitzung', summary: 'Zusammenfassung', date: 'Datum' }, + empty: { packages: 'Noch keine Pakete. Erstellen Sie eines mit der Schaltfläche oben.', contracts: 'Noch keine Organisationsverträge. Weisen Sie einer Organisation ein Paket zu.', sessions: 'Noch keine abrechenbaren Sitzungen erfasst.', reports: 'Noch keine Arbeitsberichte eingereicht.' }, + assign: { title: 'Vorhandenes Paket zuweisen', submit: 'Zuweisen' }, + form: { cancel: 'Abbrechen' } + }, + es: { + tabs: { overview: 'Resumen', packages: 'Paquetes y contratos', sessions: 'Sesiones', reports: 'Informes', settings: 'Configuración avanzada' }, + clock: { title: 'Hora del servidor (NTP)', check_now: 'Comprobar ahora', unsynced: 'El reloj del servidor no está sincronizado — las sesiones facturables pueden bloquearse' }, + stats: { active_sessions: 'Sesiones facturables activas' }, + packages: { new: 'Nuevo paquete', name: 'Nombre', included_minutes: 'Minutos incluidos', overage_rate: 'Tarifa de exceso / h', currency: 'Moneda', create_title: 'Nuevo paquete para organización', create_submit: 'Crear paquete', select_org: 'Organización', select_org_placeholder: 'Seleccionar organización…' }, + sessions: { device: 'Dispositivo', operator: 'Operador', duration: 'Duración', phase: 'Fase', amount: 'Importe' }, + reports: { session: 'Sesión', summary: 'Resumen', date: 'Fecha' }, + empty: { packages: 'Aún no hay paquetes. Cree uno con el botón de arriba.', contracts: 'Aún no hay contratos de organización. Asigne un paquete a una organización.', sessions: 'Aún no hay sesiones facturables registradas.', reports: 'Aún no se han enviado informes de trabajo.' }, + assign: { title: 'Asignar paquete existente', submit: 'Asignar' }, + form: { cancel: 'Cancelar' } + }, + fi: { + tabs: { overview: 'Yleiskatsaus', packages: 'Paketit ja sopimukset', sessions: 'Istunnot', reports: 'Raportit', settings: 'Lisäasetukset' }, + clock: { title: 'Palvelinaika (NTP)', check_now: 'Tarkista nyt', unsynced: 'Palvelimen kello ei ole synkronoitu — laskutettavat istunnot voidaan estää' }, + stats: { active_sessions: 'Aktiiviset laskutettavat istunnot' }, + packages: { new: 'Uusi paketti', name: 'Nimi', included_minutes: 'Sisältyvät minuutit', overage_rate: 'Ylityshinta / h', currency: 'Valuutta', create_title: 'Uusi paketti organisaatiolle', create_submit: 'Luo paketti', select_org: 'Organisaatio', select_org_placeholder: 'Valitse organisaatio…' }, + sessions: { device: 'Laite', operator: 'Operaattori', duration: 'Kesto', phase: 'Vaihe', amount: 'Summa' }, + reports: { session: 'Istunto', summary: 'Yhteenveto', date: 'Päivämäärä' }, + empty: { packages: 'Ei paketteja vielä. Luo ensimmäinen yllä olevalla painikkeella.', contracts: 'Ei organisaatiosopimuksia vielä. Määritä paketti organisaatiolle.', sessions: 'Ei laskutettavia istuntoja vielä.', reports: 'Ei työraportteja vielä.' }, + assign: { title: 'Määritä olemassa oleva paketti', submit: 'Määritä' }, + form: { cancel: 'Peruuta' } + }, + fr: { + tabs: { overview: 'Aperçu', packages: 'Forfaits et contrats', sessions: 'Sessions', reports: 'Rapports', settings: 'Paramètres avancés' }, + clock: { title: 'Heure serveur (NTP)', check_now: 'Vérifier', unsynced: 'L\'horloge du serveur n\'est pas synchronisée — les sessions facturables peuvent être bloquées' }, + stats: { active_sessions: 'Sessions facturables actives' }, + packages: { new: 'Nouveau forfait', name: 'Nom', included_minutes: 'Minutes incluses', overage_rate: 'Tarif dépassement / h', currency: 'Devise', create_title: 'Nouveau forfait pour l\'organisation', create_submit: 'Créer le forfait', select_org: 'Organisation', select_org_placeholder: 'Sélectionner une organisation…' }, + sessions: { device: 'Appareil', operator: 'Opérateur', duration: 'Durée', phase: 'Phase', amount: 'Montant' }, + reports: { session: 'Session', summary: 'Résumé', date: 'Date' }, + empty: { packages: 'Aucun forfait pour l\'instant. Créez-en un avec le bouton ci-dessus.', contracts: 'Aucun contrat d\'organisation pour l\'instant. Assignez un forfait à une organisation.', sessions: 'Aucune session facturable enregistrée.', reports: 'Aucun rapport de travail soumis.' }, + assign: { title: 'Assigner un forfait existant', submit: 'Assigner' }, + form: { cancel: 'Annuler' } + }, + hi: { + tabs: { overview: 'अवलोकन', packages: 'पैकेज और अनुबंध', sessions: 'सत्र', reports: 'रिपोर्ट', settings: 'उन्नत सेटिंग्स' }, + clock: { title: 'सर्वर समय (NTP)', check_now: 'अभी जाँचें', unsynced: 'सर्वर घड़ी सिंक नहीं है — बिल योग्य सत्र अवरुद्ध हो सकते हैं' }, + stats: { active_sessions: 'सक्रिय बिल योग्य सत्र' }, + packages: { new: 'नया पैकेज', name: 'नाम', included_minutes: 'शामिल मिनट', overage_rate: 'अतिरिक्त दर / घं', currency: 'मुद्रा', create_title: 'संगठन के लिए नया पैकेज', create_submit: 'पैकेज बनाएं', select_org: 'संगठन', select_org_placeholder: 'संगठन चुनें…' }, + sessions: { device: 'डिवाइस', operator: 'ऑपरेटर', duration: 'अवधि', phase: 'चरण', amount: 'राशि' }, + reports: { session: 'सत्र', summary: 'सारांश', date: 'तारीख' }, + empty: { packages: 'अभी कोई पैकेज नहीं। ऊपर के बटन से एक बनाएं।', contracts: 'अभी कोई संगठन अनुबंध नहीं। किसी संगठन को पैकेज असाइन करें।', sessions: 'अभी कोई बिल योग्य सत्र दर्ज नहीं।', reports: 'अभी कोई कार्य रिपोर्ट नहीं।' }, + assign: { title: 'मौजूदा पैकेज असाइन करें', submit: 'असाइन करें' }, + form: { cancel: 'रद्द करें' } + }, + hu: { + tabs: { overview: 'Áttekintés', packages: 'Csomagok és szerződések', sessions: 'Munkamenetek', reports: 'Jelentések', settings: 'Speciális beállítások' }, + clock: { title: 'Szerveridő (NTP)', check_now: 'Ellenőrzés', unsynced: 'A szerver órája nincs szinkronban — a számlázható munkamenetek blokkolva lehetnek' }, + stats: { active_sessions: 'Aktív számlázható munkamenetek' }, + packages: { new: 'Új csomag', name: 'Név', included_minutes: 'Tartalmazott percek', overage_rate: 'Túllépési díj / ó', currency: 'Pénznem', create_title: 'Új csomag szervezetnek', create_submit: 'Csomag létrehozása', select_org: 'Szervezet', select_org_placeholder: 'Válasszon szervezetet…' }, + sessions: { device: 'Eszköz', operator: 'Operátor', duration: 'Időtartam', phase: 'Fázis', amount: 'Összeg' }, + reports: { session: 'Munkamenet', summary: 'Összefoglaló', date: 'Dátum' }, + empty: { packages: 'Még nincsenek csomagok. Hozzon létre egyet a fenti gombbal.', contracts: 'Még nincsenek szervezeti szerződések. Rendeljen csomagot szervezethez.', sessions: 'Még nincsenek rögzített számlázható munkamenetek.', reports: 'Még nincsenek beküldött munkajelentések.' }, + assign: { title: 'Meglévő csomag hozzárendelése', submit: 'Hozzárendelés' }, + form: { cancel: 'Mégse' } + }, + id: { + tabs: { overview: 'Ikhtisar', packages: 'Paket & kontrak', sessions: 'Sesi', reports: 'Laporan', settings: 'Pengaturan lanjutan' }, + clock: { title: 'Waktu server (NTP)', check_now: 'Periksa sekarang', unsynced: 'Jam server tidak tersinkron — sesi berbayar dapat diblokir' }, + stats: { active_sessions: 'Sesi berbayar aktif' }, + packages: { new: 'Paket baru', name: 'Nama', included_minutes: 'Menit termasuk', overage_rate: 'Tarif kelebihan / j', currency: 'Mata uang', create_title: 'Paket baru untuk organisasi', create_submit: 'Buat paket', select_org: 'Organisasi', select_org_placeholder: 'Pilih organisasi…' }, + sessions: { device: 'Perangkat', operator: 'Operator', duration: 'Durasi', phase: 'Fase', amount: 'Jumlah' }, + reports: { session: 'Sesi', summary: 'Ringkasan', date: 'Tanggal' }, + empty: { packages: 'Belum ada paket. Buat dengan tombol di atas.', contracts: 'Belum ada kontrak organisasi. Tetapkan paket ke organisasi.', sessions: 'Belum ada sesi berbayar tercatat.', reports: 'Belum ada laporan kerja.' }, + assign: { title: 'Tetapkan paket yang ada', submit: 'Tetapkan' }, + form: { cancel: 'Batal' } + }, + it: { + tabs: { overview: 'Panoramica', packages: 'Pacchetti e contratti', sessions: 'Sessioni', reports: 'Report', settings: 'Impostazioni avanzate' }, + clock: { title: 'Ora server (NTP)', check_now: 'Controlla ora', unsynced: 'L\'orologio del server non è sincronizzato — le sessioni fatturabili possono essere bloccate' }, + stats: { active_sessions: 'Sessioni fatturabili attive' }, + packages: { new: 'Nuovo pacchetto', name: 'Nome', included_minutes: 'Minuti inclusi', overage_rate: 'Tariffa extra / h', currency: 'Valuta', create_title: 'Nuovo pacchetto per organizzazione', create_submit: 'Crea pacchetto', select_org: 'Organizzazione', select_org_placeholder: 'Seleziona organizzazione…' }, + sessions: { device: 'Dispositivo', operator: 'Operatore', duration: 'Durata', phase: 'Fase', amount: 'Importo' }, + reports: { session: 'Sessione', summary: 'Riepilogo', date: 'Data' }, + empty: { packages: 'Nessun pacchetto ancora. Creane uno con il pulsante sopra.', contracts: 'Nessun contratto organizzazione ancora. Assegna un pacchetto a un\'organizzazione.', sessions: 'Nessuna sessione fatturabile registrata.', reports: 'Nessun report di lavoro inviato.' }, + assign: { title: 'Assegna pacchetto esistente', submit: 'Assegna' }, + form: { cancel: 'Annulla' } + }, + ja: { + tabs: { overview: '概要', packages: 'パッケージと契約', sessions: 'セッション', reports: 'レポート', settings: '詳細設定' }, + clock: { title: 'サーバー時刻 (NTP)', check_now: '今すぐ確認', unsynced: 'サーバー時計が同期されていません — 課金セッションがブロックされる場合があります' }, + stats: { active_sessions: 'アクティブな課金セッション' }, + packages: { new: '新規パッケージ', name: '名前', included_minutes: '含まれる分数', overage_rate: '超過料金 / 時間', currency: '通貨', create_title: '組織向け新規パッケージ', create_submit: 'パッケージを作成', select_org: '組織', select_org_placeholder: '組織を選択…' }, + sessions: { device: 'デバイス', operator: 'オペレーター', duration: '時間', phase: 'フェーズ', amount: '金額' }, + reports: { session: 'セッション', summary: '概要', date: '日付' }, + empty: { packages: 'パッケージがありません。上のボタンで作成してください。', contracts: '組織契約がありません。組織にパッケージを割り当ててください。', sessions: '課金セッションはまだ記録されていません。', reports: '作業レポートはまだ送信されていません。' }, + assign: { title: '既存パッケージを割り当て', submit: '割り当て' }, + form: { cancel: 'キャンセル' } + }, + ko: { + tabs: { overview: '개요', packages: '패키지 및 계약', sessions: '세션', reports: '보고서', settings: '고급 설정' }, + clock: { title: '서버 시간 (NTP)', check_now: '지금 확인', unsynced: '서버 시계가 동기화되지 않음 — 과금 세션이 차단될 수 있습니다' }, + stats: { active_sessions: '활성 과금 세션' }, + packages: { new: '새 패키지', name: '이름', included_minutes: '포함 분', overage_rate: '초과 요금 / 시간', currency: '통화', create_title: '조직용 새 패키지', create_submit: '패키지 만들기', select_org: '조직', select_org_placeholder: '조직 선택…' }, + sessions: { device: '장치', operator: '운영자', duration: '시간', phase: '단계', amount: '금액' }, + reports: { session: '세션', summary: '요약', date: '날짜' }, + empty: { packages: '아직 패키지가 없습니다. 위 버튼으로 만드세요.', contracts: '아직 조직 계약이 없습니다. 조직에 패키지를 할당하세요.', sessions: '아직 기록된 과금 세션이 없습니다.', reports: '아직 제출된 작업 보고서가 없습니다.' }, + assign: { title: '기존 패키지 할당', submit: '할당' }, + form: { cancel: '취소' } + }, + nb: { + tabs: { overview: 'Oversikt', packages: 'Pakker og kontrakter', sessions: 'Økter', reports: 'Rapporter', settings: 'Avanserte innstillinger' }, + clock: { title: 'Servertid (NTP)', check_now: 'Sjekk nå', unsynced: 'Serverklokken er ikke synkronisert — fakturerbare økter kan bli blokkert' }, + stats: { active_sessions: 'Aktive fakturerbare økter' }, + packages: { new: 'Ny pakke', name: 'Navn', included_minutes: 'Inkluderte minutter', overage_rate: 'Overforbrukssats / t', currency: 'Valuta', create_title: 'Ny pakke for organisasjon', create_submit: 'Opprett pakke', select_org: 'Organisasjon', select_org_placeholder: 'Velg organisasjon…' }, + sessions: { device: 'Enhet', operator: 'Operatør', duration: 'Varighet', phase: 'Fase', amount: 'Beløp' }, + reports: { session: 'Økt', summary: 'Sammendrag', date: 'Dato' }, + empty: { packages: 'Ingen pakker ennå. Opprett en med knappen over.', contracts: 'Ingen organisasjonskontrakter ennå. Tildel en pakke til en organisasjon.', sessions: 'Ingen fakturerbare økter registrert ennå.', reports: 'Ingen arbeidsrapporter sendt inn ennå.' }, + assign: { title: 'Tildel eksisterende pakke', submit: 'Tildel' }, + form: { cancel: 'Avbryt' } + }, + nl: { + tabs: { overview: 'Overzicht', packages: 'Pakketten & contracten', sessions: 'Sessies', reports: 'Rapporten', settings: 'Geavanceerde instellingen' }, + clock: { title: 'Servertijd (NTP)', check_now: 'Nu controleren', unsynced: 'Serverklok niet gesynchroniseerd — factureerbare sessies kunnen worden geblokkeerd' }, + stats: { active_sessions: 'Actieve factureerbare sessies' }, + packages: { new: 'Nieuw pakket', name: 'Naam', included_minutes: 'Inbegrepen minuten', overage_rate: 'Overage tarief / u', currency: 'Valuta', create_title: 'Nieuw pakket voor organisatie', create_submit: 'Pakket aanmaken', select_org: 'Organisatie', select_org_placeholder: 'Selecteer organisatie…' }, + sessions: { device: 'Apparaat', operator: 'Operator', duration: 'Duur', phase: 'Fase', amount: 'Bedrag' }, + reports: { session: 'Sessie', summary: 'Samenvatting', date: 'Datum' }, + empty: { packages: 'Nog geen pakketten. Maak er een met de knop hierboven.', contracts: 'Nog geen organisatiecontracten. Wijs een pakket toe aan een organisatie.', sessions: 'Nog geen factureerbare sessies geregistreerd.', reports: 'Nog geen werkrapporten ingediend.' }, + assign: { title: 'Bestaand pakket toewijzen', submit: 'Toewijzen' }, + form: { cancel: 'Annuleren' } + }, + pt: { + tabs: { overview: 'Visão geral', packages: 'Pacotes e contratos', sessions: 'Sessões', reports: 'Relatórios', settings: 'Definições avançadas' }, + clock: { title: 'Hora do servidor (NTP)', check_now: 'Verificar agora', unsynced: 'Relógio do servidor não sincronizado — sessões faturáveis podem ser bloqueadas' }, + stats: { active_sessions: 'Sessões faturáveis ativas' }, + packages: { new: 'Novo pacote', name: 'Nome', included_minutes: 'Minutos incluídos', overage_rate: 'Taxa de excedente / h', currency: 'Moeda', create_title: 'Novo pacote para organização', create_submit: 'Criar pacote', select_org: 'Organização', select_org_placeholder: 'Selecionar organização…' }, + sessions: { device: 'Dispositivo', operator: 'Operador', duration: 'Duração', phase: 'Fase', amount: 'Valor' }, + reports: { session: 'Sessão', summary: 'Resumo', date: 'Data' }, + empty: { packages: 'Ainda não há pacotes. Crie um com o botão acima.', contracts: 'Ainda não há contratos de organização. Atribua um pacote a uma organização.', sessions: 'Ainda não há sessões faturáveis registadas.', reports: 'Ainda não há relatórios de trabalho.' }, + assign: { title: 'Atribuir pacote existente', submit: 'Atribuir' }, + form: { cancel: 'Cancelar' } + }, + ro: { + tabs: { overview: 'Prezentare', packages: 'Pachete și contracte', sessions: 'Sesiuni', reports: 'Rapoarte', settings: 'Setări avansate' }, + clock: { title: 'Ora serverului (NTP)', check_now: 'Verifică acum', unsynced: 'Ceasul serverului nu este sincronizat — sesiunile facturabile pot fi blocate' }, + stats: { active_sessions: 'Sesiuni facturabile active' }, + packages: { new: 'Pachet nou', name: 'Nume', included_minutes: 'Minute incluse', overage_rate: 'Tarif depășire / h', currency: 'Monedă', create_title: 'Pachet nou pentru organizație', create_submit: 'Creează pachet', select_org: 'Organizație', select_org_placeholder: 'Selectează organizația…' }, + sessions: { device: 'Dispozitiv', operator: 'Operator', duration: 'Durată', phase: 'Fază', amount: 'Sumă' }, + reports: { session: 'Sesiune', summary: 'Rezumat', date: 'Dată' }, + empty: { packages: 'Nu există pachete încă. Creați unul cu butonul de mai sus.', contracts: 'Nu există contracte de organizație încă. Atribuiți un pachet unei organizații.', sessions: 'Nu există sesiuni facturabile înregistrate încă.', reports: 'Nu există rapoarte de lucru trimise încă.' }, + assign: { title: 'Atribuie pachet existent', submit: 'Atribuie' }, + form: { cancel: 'Anulează' } + }, + sv: { + tabs: { overview: 'Översikt', packages: 'Paket och avtal', sessions: 'Sessioner', reports: 'Rapporter', settings: 'Avancerade inställningar' }, + clock: { title: 'Servertid (NTP)', check_now: 'Kontrollera nu', unsynced: 'Serverklockan är inte synkroniserad — fakturerbara sessioner kan blockeras' }, + stats: { active_sessions: 'Aktiva fakturerbara sessioner' }, + packages: { new: 'Nytt paket', name: 'Namn', included_minutes: 'Inkluderade minuter', overage_rate: 'Överskottsavgift / h', currency: 'Valuta', create_title: 'Nytt paket för organisation', create_submit: 'Skapa paket', select_org: 'Organisation', select_org_placeholder: 'Välj organisation…' }, + sessions: { device: 'Enhet', operator: 'Operatör', duration: 'Varaktighet', phase: 'Fas', amount: 'Belopp' }, + reports: { session: 'Supportsession', summary: 'Sammanfattning', date: 'Datum' }, + empty: { packages: 'Inga paket ännu. Skapa ett med knappen ovan.', contracts: 'Inga organisationsavtal ännu. Tilldela ett paket till en organisation.', sessions: 'Inga fakturerbara sessioner registrerade ännu.', reports: 'Inga arbetsrapporter inskickade ännu.' }, + assign: { title: 'Tilldela befintligt paket', submit: 'Tilldela' }, + form: { cancel: 'Avbryt' } + }, + th: { + tabs: { overview: 'ภาพรวม', packages: 'แพ็กเกจและสัญญา', sessions: 'เซสชัน', reports: 'รายงาน', settings: 'การตั้งค่าขั้นสูง' }, + clock: { title: 'เวลาเซิร์ฟเวอร์ (NTP)', check_now: 'ตรวจสอบตอนนี้', unsynced: 'นาฬิกาเซิร์ฟเวอร์ไม่ซิงค์ — เซสชันที่เรียกเก็บเงินอาจถูกบล็อก' }, + stats: { active_sessions: 'เซสชันที่เรียกเก็บเงินที่ใช้งานอยู่' }, + packages: { new: 'แพ็กเกจใหม่', name: 'ชื่อ', included_minutes: 'นาทีที่รวม', overage_rate: 'อัตราเกิน / ชม.', currency: 'สกุลเงิน', create_title: 'แพ็กเกจใหม่สำหรับองค์กร', create_submit: 'สร้างแพ็กเกจ', select_org: 'องค์กร', select_org_placeholder: 'เลือกองค์กร…' }, + sessions: { device: 'อุปกรณ์', operator: 'ผู้ปฏิบัติการ', duration: 'ระยะเวลา', phase: 'ระยะ', amount: 'จำนวนเงิน' }, + reports: { session: 'เซสชัน', summary: 'สรุป', date: 'วันที่' }, + empty: { packages: 'ยังไม่มีแพ็กเกจ สร้างด้วยปุ่มด้านบน', contracts: 'ยังไม่มีสัญญาองค์กร กำหนดแพ็กเกจให้องค์กร', sessions: 'ยังไม่มีเซสชันที่เรียกเก็บเงิน', reports: 'ยังไม่มีรายงานการทำงาน' }, + assign: { title: 'กำหนดแพ็กเกจที่มีอยู่', submit: 'กำหนด' }, + form: { cancel: 'ยกเลิก' } + }, + tr: { + tabs: { overview: 'Genel bakış', packages: 'Paketler ve sözleşmeler', sessions: 'Oturumlar', reports: 'Raporlar', settings: 'Gelişmiş ayarlar' }, + clock: { title: 'Sunucu saati (NTP)', check_now: 'Şimdi kontrol et', unsynced: 'Sunucu saati senkronize değil — faturalandırılabilir oturumlar engellenebilir' }, + stats: { active_sessions: 'Aktif faturalandırılabilir oturumlar' }, + packages: { new: 'Yeni paket', name: 'Ad', included_minutes: 'Dahil edilen dakikalar', overage_rate: 'Aşım ücreti / s', currency: 'Para birimi', create_title: 'Kuruluş için yeni paket', create_submit: 'Paket oluştur', select_org: 'Kuruluş', select_org_placeholder: 'Kuruluş seçin…' }, + sessions: { device: 'Cihaz', operator: 'Operatör', duration: 'Süre', phase: 'Aşama', amount: 'Tutar' }, + reports: { session: 'Oturum', summary: 'Özet', date: 'Tarih' }, + empty: { packages: 'Henüz paket yok. Yukarıdaki düğmeyle oluşturun.', contracts: 'Henüz kuruluş sözleşmesi yok. Bir kuruluşa paket atayın.', sessions: 'Henüz faturalandırılabilir oturum kaydedilmedi.', reports: 'Henüz iş raporu gönderilmedi.' }, + assign: { title: 'Mevcut paketi ata', submit: 'Ata' }, + form: { cancel: 'İptal' } + }, + uk: { + tabs: { overview: 'Огляд', packages: 'Пакети та контракти', sessions: 'Сесії', reports: 'Звіти', settings: 'Розширені налаштування' }, + clock: { title: 'Час сервера (NTP)', check_now: 'Перевірити зараз', unsynced: 'Годинник сервера не синхронізовано — платні сесії можуть бути заблоковані' }, + stats: { active_sessions: 'Активні платні сесії' }, + packages: { new: 'Новий пакет', name: 'Назва', included_minutes: 'Включені хвилини', overage_rate: 'Ставка понад ліміт / год', currency: 'Валюта', create_title: 'Новий пакет для організації', create_submit: 'Створити пакет', select_org: 'Організація', select_org_placeholder: 'Оберіть організацію…' }, + sessions: { device: 'Пристрій', operator: 'Оператор', duration: 'Тривалість', phase: 'Фаза', amount: 'Сума' }, + reports: { session: 'Сесія', summary: 'Підсумок', date: 'Дата' }, + empty: { packages: 'Пакетів ще немає. Створіть перший кнопкою вище.', contracts: 'Контрактів організацій ще немає. Призначте пакет організації.', sessions: 'Платних сесій ще не зареєстровано.', reports: 'Звітів про роботу ще не надіслано.' }, + assign: { title: 'Призначити існуючий пакет', submit: 'Призначити' }, + form: { cancel: 'Скасувати' } + }, + vi: { + tabs: { overview: 'Tổng quan', packages: 'Gói & hợp đồng', sessions: 'Phiên', reports: 'Báo cáo', settings: 'Cài đặt nâng cao' }, + clock: { title: 'Giờ máy chủ (NTP)', check_now: 'Kiểm tra ngay', unsynced: 'Đồng hồ máy chủ chưa đồng bộ — phiên tính phí có thể bị chặn' }, + stats: { active_sessions: 'Phiên tính phí đang hoạt động' }, + packages: { new: 'Gói mới', name: 'Tên', included_minutes: 'Phút bao gồm', overage_rate: 'Giá vượt / giờ', currency: 'Tiền tệ', create_title: 'Gói mới cho tổ chức', create_submit: 'Tạo gói', select_org: 'Tổ chức', select_org_placeholder: 'Chọn tổ chức…' }, + sessions: { device: 'Thiết bị', operator: 'Người vận hành', duration: 'Thời lượng', phase: 'Giai đoạn', amount: 'Số tiền' }, + reports: { session: 'Phiên', summary: 'Tóm tắt', date: 'Ngày' }, + empty: { packages: 'Chưa có gói nào. Tạo gói bằng nút phía trên.', contracts: 'Chưa có hợp đồng tổ chức. Gán gói cho tổ chức.', sessions: 'Chưa có phiên tính phí nào.', reports: 'Chưa có báo cáo công việc.' }, + assign: { title: 'Gán gói hiện có', submit: 'Gán' }, + form: { cancel: 'Hủy' } + }, + zh: { + tabs: { overview: '概览', packages: '套餐与合同', sessions: '会话', reports: '报告', settings: '高级设置' }, + clock: { title: '服务器时间 (NTP)', check_now: '立即检查', unsynced: '服务器时钟未同步 — 可计费会话可能被阻止' }, + stats: { active_sessions: '活动可计费会话' }, + packages: { new: '新建套餐', name: '名称', included_minutes: '包含分钟', overage_rate: '超额费率 / 小时', currency: '货币', create_title: '为组织新建套餐', create_submit: '创建套餐', select_org: '组织', select_org_placeholder: '选择组织…' }, + sessions: { device: '设备', operator: '操作员', duration: '时长', phase: '阶段', amount: '金额' }, + reports: { session: '会话', summary: '摘要', date: '日期' }, + empty: { packages: '尚无套餐。请使用上方按钮创建。', contracts: '尚无组织合同。请为组织分配套餐。', sessions: '尚无已记录的可计费会话。', reports: '尚无已提交的工作报告。' }, + assign: { title: '分配现有套餐', submit: '分配' }, + form: { cancel: '取消' } + }, + 'zh-TW': { + tabs: { overview: '概覽', packages: '套件與合約', sessions: '工作階段', reports: '報告', settings: '進階設定' }, + clock: { title: '伺服器時間 (NTP)', check_now: '立即檢查', unsynced: '伺服器時鐘未同步 — 可計費工作階段可能被封鎖' }, + stats: { active_sessions: '使用中可計費工作階段' }, + packages: { new: '新增套件', name: '名稱', included_minutes: '包含分鐘', overage_rate: '超額費率 / 小時', currency: '貨幣', create_title: '為組織新增套件', create_submit: '建立套件', select_org: '組織', select_org_placeholder: '選擇組織…' }, + sessions: { device: '裝置', operator: '操作員', duration: '時長', phase: '階段', amount: '金額' }, + reports: { session: '工作階段', summary: '摘要', date: '日期' }, + empty: { packages: '尚無套件。請使用上方按鈕建立。', contracts: '尚無組織合約。請為組織指派套件。', sessions: '尚無已記錄的可計費工作階段。', reports: '尚無已提交的工作報告。' }, + assign: { title: '指派現有套件', submit: '指派' }, + form: { cancel: '取消' } + } +}; diff --git a/web-nodejs/scripts/patch-commercialization-i18n.js b/web-nodejs/scripts/patch-commercialization-i18n.js new file mode 100644 index 00000000..5fea33b1 --- /dev/null +++ b/web-nodejs/scripts/patch-commercialization-i18n.js @@ -0,0 +1,310 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const sectionPatches = require('./commercialization-i18n-sections'); + +const langDir = path.join(__dirname, '..', 'lang'); + +const MERGE_SECTIONS = ['tabs', 'clock', 'stats', 'packages', 'sessions', 'reports', 'contracts', 'export', 'report', 'empty', 'assign', 'form']; + +const patches = { + en: { + packages: { heading: 'Support packages' }, + contracts: { + title: 'Organization contracts', + new: 'Assign package', + org: 'Organization', + package: 'Package', + remaining: 'Remaining minutes', + status: 'Status', + actions: 'Actions', + suspend: 'Suspend', + activate: 'Activate', + select_org: 'Select organization', + select_package: 'Select package', + no_orgs: 'No organizations found', + no_packages: 'Create a package first' + }, + export: { + csv: 'Export CSV', + pdf: 'Export PDF', + sessions_csv: 'Export sessions CSV' + }, + report: { + title: 'Work report', + subtitle: 'Describe the work performed during this remote session.', + category: 'Category', + ticket_ref: 'Ticket reference', + summary: 'Work performed', + skip: 'Skip for now', + submit: 'Submit report', + summary_required: 'Summary is required', + saved: 'Work report saved' + }, + packages_extra: { prompt_name: 'Package name' } + }, + pl: { + packages: { heading: 'Pakiety wsparcia' }, + contracts: { + title: 'Kontrakty organizacji', + new: 'Przypisz pakiet', + org: 'Organizacja', + package: 'Pakiet', + remaining: 'Pozostałe minuty', + status: 'Status', + actions: 'Akcje', + suspend: 'Wstrzymaj', + activate: 'Aktywuj', + select_org: 'Wybierz organizację', + select_package: 'Wybierz pakiet', + no_orgs: 'Brak organizacji', + no_packages: 'Najpierw utwórz pakiet' + }, + export: { + csv: 'Eksport CSV', + pdf: 'Eksport PDF', + sessions_csv: 'Eksport sesji CSV' + }, + report: { + title: 'Raport pracy', + subtitle: 'Opisz wykonaną pracę podczas tej sesji zdalnej.', + category: 'Kategoria', + ticket_ref: 'Numer zgłoszenia', + summary: 'Wykonana praca', + skip: 'Pomiń na razie', + submit: 'Wyślij raport', + summary_required: 'Podsumowanie jest wymagane', + saved: 'Raport pracy zapisany' + }, + packages_extra: { prompt_name: 'Nazwa pakietu' } + }, + de: { + packages: { heading: 'Support-Pakete' }, + contracts: { title: 'Organisationsverträge', new: 'Paket zuweisen', org: 'Organisation', package: 'Paket', remaining: 'Verbleibende Minuten', status: 'Status', actions: 'Aktionen', suspend: 'Aussetzen', activate: 'Aktivieren', select_org: 'Organisation wählen', select_package: 'Paket wählen', no_orgs: 'Keine Organisationen gefunden', no_packages: 'Erstellen Sie zuerst ein Paket' }, + export: { csv: 'CSV exportieren', pdf: 'PDF exportieren', sessions_csv: 'Sitzungen als CSV exportieren' }, + report: { title: 'Arbeitsbericht', subtitle: 'Beschreiben Sie die während dieser Fernsitzung durchgeführte Arbeit.', category: 'Kategorie', ticket_ref: 'Ticket-Referenz', summary: 'Durchgeführte Arbeit', skip: 'Vorerst überspringen', submit: 'Bericht senden', summary_required: 'Zusammenfassung ist erforderlich', saved: 'Arbeitsbericht gespeichert' }, + packages_extra: { prompt_name: 'Paketname' } + }, + fr: { + packages: { heading: 'Forfaits de support' }, + contracts: { title: 'Contrats organisationnels', new: 'Assigner un forfait', org: 'Organisation', package: 'Forfait', remaining: 'Minutes restantes', status: 'Statut', actions: 'Actions', suspend: 'Suspendre', activate: 'Activer', select_org: 'Sélectionner une organisation', select_package: 'Sélectionner un forfait', no_orgs: 'Aucune organisation trouvée', no_packages: 'Créez d\'abord un forfait' }, + export: { csv: 'Exporter CSV', pdf: 'Exporter PDF', sessions_csv: 'Exporter les sessions CSV' }, + report: { title: 'Rapport de travail', subtitle: 'Décrivez le travail effectué pendant cette session à distance.', category: 'Catégorie', ticket_ref: 'Référence ticket', summary: 'Travail effectué', skip: 'Ignorer pour l\'instant', submit: 'Envoyer le rapport', summary_required: 'Le résumé est obligatoire', saved: 'Rapport de travail enregistré' }, + packages_extra: { prompt_name: 'Nom du forfait' } + }, + es: { + packages: { heading: 'Paquetes de soporte' }, + contracts: { title: 'Contratos de organización', new: 'Asignar paquete', org: 'Organización', package: 'Paquete', remaining: 'Minutos restantes', status: 'Estado', actions: 'Acciones', suspend: 'Suspender', activate: 'Activar', select_org: 'Seleccionar organización', select_package: 'Seleccionar paquete', no_orgs: 'No se encontraron organizaciones', no_packages: 'Cree un paquete primero' }, + export: { csv: 'Exportar CSV', pdf: 'Exportar PDF', sessions_csv: 'Exportar sesiones CSV' }, + report: { title: 'Informe de trabajo', subtitle: 'Describa el trabajo realizado durante esta sesión remota.', category: 'Categoría', ticket_ref: 'Referencia de ticket', summary: 'Trabajo realizado', skip: 'Omitir por ahora', submit: 'Enviar informe', summary_required: 'El resumen es obligatorio', saved: 'Informe de trabajo guardado' }, + packages_extra: { prompt_name: 'Nombre del paquete' } + }, + cs: { + packages: { heading: 'Balíčky podpory' }, + contracts: { title: 'Smlouvy organizací', new: 'Přiřadit balíček', org: 'Organizace', package: 'Balíček', remaining: 'Zbývající minuty', status: 'Stav', actions: 'Akce', suspend: 'Pozastavit', activate: 'Aktivovat', select_org: 'Vyberte organizaci', select_package: 'Vyberte balíček', no_orgs: 'Nebyly nalezeny žádné organizace', no_packages: 'Nejprve vytvořte balíček' }, + export: { csv: 'Exportovat CSV', pdf: 'Exportovat PDF', sessions_csv: 'Exportovat relace CSV' }, + report: { title: 'Pracovní zpráva', subtitle: 'Popište práci provedenou během této vzdálené relace.', category: 'Kategorie', ticket_ref: 'Reference ticketu', summary: 'Provedená práce', skip: 'Přeskočit nyní', submit: 'Odeslat zprávu', summary_required: 'Shrnutí je povinné', saved: 'Pracovní zpráva uložena' }, + packages_extra: { prompt_name: 'Název balíčku' } + }, + da: { + packages: { heading: 'Supportpakker' }, + contracts: { title: 'Organisationskontrakter', new: 'Tildel pakke', org: 'Organisation', package: 'Pakke', remaining: 'Resterende minutter', status: 'Status', actions: 'Handlinger', suspend: 'Suspender', activate: 'Aktiver', select_org: 'Vælg organisation', select_package: 'Vælg pakke', no_orgs: 'Ingen organisationer fundet', no_packages: 'Opret først en pakke' }, + export: { csv: 'Eksporter CSV', pdf: 'Eksporter PDF', sessions_csv: 'Eksporter sessioner CSV' }, + report: { title: 'Arbejdsrapport', subtitle: 'Beskriv arbejdet udført under denne fjernsession.', category: 'Kategori', ticket_ref: 'Ticketreference', summary: 'Udført arbejde', skip: 'Spring over for nu', submit: 'Send rapport', summary_required: 'Resumé er påkrævet', saved: 'Arbejdsrapport gemt' }, + packages_extra: { prompt_name: 'Pakkenavn' } + }, + fi: { + packages: { heading: 'Tukipaketit' }, + contracts: { title: 'Organisaatiosopimukset', new: 'Määritä paketti', org: 'Organisaatio', package: 'Paketti', remaining: 'Jäljellä olevat minuutit', status: 'Tila', actions: 'Toiminnot', suspend: 'Keskeytä', activate: 'Aktivoi', select_org: 'Valitse organisaatio', select_package: 'Valitse paketti', no_orgs: 'Organisaatioita ei löytynyt', no_packages: 'Luo ensin paketti' }, + export: { csv: 'Vie CSV', pdf: 'Vie PDF', sessions_csv: 'Vie istunnot CSV' }, + report: { title: 'Työraportti', subtitle: 'Kuvaile tämän etäistunnon aikana tehty työ.', category: 'Kategoria', ticket_ref: 'Tikettiviite', summary: 'Tehty työ', skip: 'Ohita toistaiseksi', submit: 'Lähetä raportti', summary_required: 'Yhteenveto vaaditaan', saved: 'Työraportti tallennettu' }, + packages_extra: { prompt_name: 'Paketin nimi' } + }, + it: { + packages: { heading: 'Pacchetti di supporto' }, + contracts: { title: 'Contratti organizzazione', new: 'Assegna pacchetto', org: 'Organizzazione', package: 'Pacchetto', remaining: 'Minuti rimanenti', status: 'Stato', actions: 'Azioni', suspend: 'Sospendi', activate: 'Attiva', select_org: 'Seleziona organizzazione', select_package: 'Seleziona pacchetto', no_orgs: 'Nessuna organizzazione trovata', no_packages: 'Crea prima un pacchetto' }, + export: { csv: 'Esporta CSV', pdf: 'Esporta PDF', sessions_csv: 'Esporta sessioni CSV' }, + report: { title: 'Report di lavoro', subtitle: 'Descrivi il lavoro svolto durante questa sessione remota.', category: 'Categoria', ticket_ref: 'Riferimento ticket', summary: 'Lavoro svolto', skip: 'Salta per ora', submit: 'Invia report', summary_required: 'Il riepilogo è obbligatorio', saved: 'Report di lavoro salvato' }, + packages_extra: { prompt_name: 'Nome pacchetto' } + }, + nl: { + packages: { heading: 'Supportpakketten' }, + contracts: { title: 'Organisatiecontracten', new: 'Pakket toewijzen', org: 'Organisatie', package: 'Pakket', remaining: 'Resterende minuten', status: 'Status', actions: 'Acties', suspend: 'Opschorten', activate: 'Activeren', select_org: 'Selecteer organisatie', select_package: 'Selecteer pakket', no_orgs: 'Geen organisaties gevonden', no_packages: 'Maak eerst een pakket aan' }, + export: { csv: 'Exporteer CSV', pdf: 'Exporteer PDF', sessions_csv: 'Exporteer sessies CSV' }, + report: { title: 'Werkrapport', subtitle: 'Beschrijf het uitgevoerde werk tijdens deze remote sessie.', category: 'Categorie', ticket_ref: 'Ticketreferentie', summary: 'Uitgevoerd werk', skip: 'Nu overslaan', submit: 'Rapport verzenden', summary_required: 'Samenvatting is verplicht', saved: 'Werkrapport opgeslagen' }, + packages_extra: { prompt_name: 'Pakketnaam' } + }, + nb: { + packages: { heading: 'Støttepakker' }, + contracts: { title: 'Organisasjonskontrakter', new: 'Tildel pakke', org: 'Organisasjon', package: 'Pakke', remaining: 'Gjenstående minutter', status: 'Status', actions: 'Handlinger', suspend: 'Suspender', activate: 'Aktiver', select_org: 'Velg organisasjon', select_package: 'Velg pakke', no_orgs: 'Ingen organisasjoner funnet', no_packages: 'Opprett en pakke først' }, + export: { csv: 'Eksporter CSV', pdf: 'Eksporter PDF', sessions_csv: 'Eksporter økter CSV' }, + report: { title: 'Arbeidsrapport', subtitle: 'Beskriv arbeidet utført under denne fjernøkten.', category: 'Kategori', ticket_ref: 'Saksreferanse', summary: 'Utført arbeid', skip: 'Hopp over nå', submit: 'Send rapport', summary_required: 'Sammendrag er påkrevd', saved: 'Arbeidsrapport lagret' }, + packages_extra: { prompt_name: 'Pakkenavn' } + }, + sv: { + packages: { heading: 'Supportpaket' }, + contracts: { title: 'Organisationsavtal', new: 'Tilldela paket', org: 'Organisation', package: 'Paket', remaining: 'Återstående minuter', status: 'Status', actions: 'Åtgärder', suspend: 'Suspendera', activate: 'Aktivera', select_org: 'Välj organisation', select_package: 'Välj paket', no_orgs: 'Inga organisationer hittades', no_packages: 'Skapa ett paket först' }, + export: { csv: 'Exportera CSV', pdf: 'Exportera PDF', sessions_csv: 'Exportera sessioner CSV' }, + report: { title: 'Arbetsrapport', subtitle: 'Beskriv arbetet som utfördes under denna fjärrsession.', category: 'Kategori', ticket_ref: 'Ärendereferens', summary: 'Utfört arbete', skip: 'Hoppa över nu', submit: 'Skicka rapport', summary_required: 'Sammanfattning krävs', saved: 'Arbetsrapport sparad' }, + packages_extra: { prompt_name: 'Paketnamn' } + }, + pt: { + packages: { heading: 'Pacotes de suporte' }, + contracts: { title: 'Contratos de organização', new: 'Atribuir pacote', org: 'Organização', package: 'Pacote', remaining: 'Minutos restantes', status: 'Estado', actions: 'Ações', suspend: 'Suspender', activate: 'Ativar', select_org: 'Selecionar organização', select_package: 'Selecionar pacote', no_orgs: 'Nenhuma organização encontrada', no_packages: 'Crie um pacote primeiro' }, + export: { csv: 'Exportar CSV', pdf: 'Exportar PDF', sessions_csv: 'Exportar sessões CSV' }, + report: { title: 'Relatório de trabalho', subtitle: 'Descreva o trabalho realizado durante esta sessão remota.', category: 'Categoria', ticket_ref: 'Referência do ticket', summary: 'Trabalho realizado', skip: 'Ignorar por agora', submit: 'Enviar relatório', summary_required: 'O resumo é obrigatório', saved: 'Relatório de trabalho guardado' }, + packages_extra: { prompt_name: 'Nome do pacote' } + }, + ro: { + packages: { heading: 'Pachete de suport' }, + contracts: { title: 'Contracte organizație', new: 'Atribuie pachet', org: 'Organizație', package: 'Pachet', remaining: 'Minute rămase', status: 'Stare', actions: 'Acțiuni', suspend: 'Suspendă', activate: 'Activează', select_org: 'Selectează organizația', select_package: 'Selectează pachetul', no_orgs: 'Nu s-au găsit organizații', no_packages: 'Creați mai întâi un pachet' }, + export: { csv: 'Export CSV', pdf: 'Export PDF', sessions_csv: 'Export sesiuni CSV' }, + report: { title: 'Raport de lucru', subtitle: 'Descrieți munca efectuată în timpul acestei sesiuni la distanță.', category: 'Categorie', ticket_ref: 'Referință tichet', summary: 'Lucru efectuat', skip: 'Omite deocamdată', submit: 'Trimite raport', summary_required: 'Rezumatul este obligatoriu', saved: 'Raport de lucru salvat' }, + packages_extra: { prompt_name: 'Nume pachet' } + }, + hu: { + packages: { heading: 'Támogatási csomagok' }, + contracts: { title: 'Szervezeti szerződések', new: 'Csomag hozzárendelése', org: 'Szervezet', package: 'Csomag', remaining: 'Hátralévő percek', status: 'Állapot', actions: 'Műveletek', suspend: 'Felfüggesztés', activate: 'Aktiválás', select_org: 'Válasszon szervezetet', select_package: 'Válasszon csomagot', no_orgs: 'Nem található szervezet', no_packages: 'Először hozzon létre csomagot' }, + export: { csv: 'CSV export', pdf: 'PDF export', sessions_csv: 'Munkamenetek CSV export' }, + report: { title: 'Munkajelentés', subtitle: 'Írja le a távoli munkamenet során elvégzett munkát.', category: 'Kategória', ticket_ref: 'Jegy hivatkozás', summary: 'Elvégzett munka', skip: 'Kihagyás most', submit: 'Jelentés küldése', summary_required: 'Az összefoglaló kötelező', saved: 'Munkajelentés mentve' }, + packages_extra: { prompt_name: 'Csomag neve' } + }, + uk: { + packages: { heading: 'Пакети підтримки' }, + contracts: { title: 'Контракти організацій', new: 'Призначити пакет', org: 'Організація', package: 'Пакет', remaining: 'Залишок хвилин', status: 'Статус', actions: 'Дії', suspend: 'Призупинити', activate: 'Активувати', select_org: 'Оберіть організацію', select_package: 'Оберіть пакет', no_orgs: 'Організації не знайдено', no_packages: 'Спочатку створіть пакет' }, + export: { csv: 'Експорт CSV', pdf: 'Експорт PDF', sessions_csv: 'Експорт сесій CSV' }, + report: { title: 'Звіт про роботу', subtitle: 'Опишіть роботу, виконану під час цієї віддаленої сесії.', category: 'Категорія', ticket_ref: 'Посилання на заявку', summary: 'Виконана робота', skip: 'Пропустити зараз', submit: 'Надіслати звіт', summary_required: 'Підсумок обов\'язковий', saved: 'Звіт про роботу збережено' }, + packages_extra: { prompt_name: 'Назва пакета' } + }, + ru: {}, + tr: { + packages: { heading: 'Destek paketleri' }, + contracts: { title: 'Kuruluş sözleşmeleri', new: 'Paket ata', org: 'Kuruluş', package: 'Paket', remaining: 'Kalan dakika', status: 'Durum', actions: 'İşlemler', suspend: 'Askıya al', activate: 'Etkinleştir', select_org: 'Kuruluş seçin', select_package: 'Paket seçin', no_orgs: 'Kuruluş bulunamadı', no_packages: 'Önce bir paket oluşturun' }, + export: { csv: 'CSV dışa aktar', pdf: 'PDF dışa aktar', sessions_csv: 'Oturumları CSV dışa aktar' }, + report: { title: 'İş raporu', subtitle: 'Bu uzaktan oturum sırasında yapılan işi açıklayın.', category: 'Kategori', ticket_ref: 'Bilet referansı', summary: 'Yapılan iş', skip: 'Şimdilik atla', submit: 'Rapor gönder', summary_required: 'Özet gerekli', saved: 'İş raporu kaydedildi' }, + packages_extra: { prompt_name: 'Paket adı' } + }, + ja: { + packages: { heading: 'サポートパッケージ' }, + contracts: { title: '組織契約', new: 'パッケージを割り当て', org: '組織', package: 'パッケージ', remaining: '残り分数', status: 'ステータス', actions: '操作', suspend: '一時停止', activate: '有効化', select_org: '組織を選択', select_package: 'パッケージを選択', no_orgs: '組織が見つかりません', no_packages: '先にパッケージを作成してください' }, + export: { csv: 'CSVエクスポート', pdf: 'PDFエクスポート', sessions_csv: 'セッションCSVエクスポート' }, + report: { title: '作業レポート', subtitle: 'このリモートセッション中に行った作業を説明してください。', category: 'カテゴリ', ticket_ref: 'チケット参照', summary: '実施した作業', skip: '今はスキップ', submit: 'レポートを送信', summary_required: '概要は必須です', saved: '作業レポートを保存しました' }, + packages_extra: { prompt_name: 'パッケージ名' } + }, + ko: { + packages: { heading: '지원 패키지' }, + contracts: { title: '조직 계약', new: '패키지 할당', org: '조직', package: '패키지', remaining: '남은 분', status: '상태', actions: '작업', suspend: '일시 중지', activate: '활성화', select_org: '조직 선택', select_package: '패키지 선택', no_orgs: '조직을 찾을 수 없습니다', no_packages: '먼저 패키지를 만드세요' }, + export: { csv: 'CSV 내보내기', pdf: 'PDF 내보내기', sessions_csv: '세션 CSV 내보내기' }, + report: { title: '작업 보고서', subtitle: '이 원격 세션 동안 수행한 작업을 설명하세요.', category: '카테고리', ticket_ref: '티켓 참조', summary: '수행한 작업', skip: '지금 건너뛰기', submit: '보고서 제출', summary_required: '요약은 필수입니다', saved: '작업 보고서가 저장되었습니다' }, + packages_extra: { prompt_name: '패키지 이름' } + }, + zh: { + packages: { heading: '支持套餐' }, + contracts: { title: '组织合同', new: '分配套餐', org: '组织', package: '套餐', remaining: '剩余分钟', status: '状态', actions: '操作', suspend: '暂停', activate: '激活', select_org: '选择组织', select_package: '选择套餐', no_orgs: '未找到组织', no_packages: '请先创建套餐' }, + export: { csv: '导出 CSV', pdf: '导出 PDF', sessions_csv: '导出会话 CSV' }, + report: { title: '工作报告', subtitle: '描述此远程会话期间执行的工作。', category: '类别', ticket_ref: '工单参考', summary: '执行的工作', skip: '暂时跳过', submit: '提交报告', summary_required: '摘要为必填项', saved: '工作报告已保存' }, + packages_extra: { prompt_name: '套餐名称' } + }, + 'zh-TW': { + packages: { heading: '支援套件' }, + contracts: { title: '組織合約', new: '指派套件', org: '組織', package: '套件', remaining: '剩餘分鐘', status: '狀態', actions: '操作', suspend: '暫停', activate: '啟用', select_org: '選擇組織', select_package: '選擇套件', no_orgs: '找不到組織', no_packages: '請先建立套件' }, + export: { csv: '匯出 CSV', pdf: '匯出 PDF', sessions_csv: '匯出工作階段 CSV' }, + report: { title: '工作報告', subtitle: '描述此遠端工作階段期間執行的工作。', category: '類別', ticket_ref: '工單參考', summary: '執行的工作', skip: '暫時略過', submit: '提交報告', summary_required: '摘要為必填', saved: '工作報告已儲存' }, + packages_extra: { prompt_name: '套件名稱' } + }, + ar: { + packages: { heading: 'حزم الدعم' }, + contracts: { title: 'عقود المنظمات', new: 'تعيين حزمة', org: 'المنظمة', package: 'الحزمة', remaining: 'الدقائق المتبقية', status: 'الحالة', actions: 'الإجراءات', suspend: 'تعليق', activate: 'تفعيل', select_org: 'اختر المنظمة', select_package: 'اختر الحزمة', no_orgs: 'لم يتم العثور على منظمات', no_packages: 'أنشئ حزمة أولاً' }, + export: { csv: 'تصدير CSV', pdf: 'تصدير PDF', sessions_csv: 'تصدير الجلسات CSV' }, + report: { title: 'تقرير العمل', subtitle: 'صف العمل الذي تم خلال جلسة التحكم عن بُعد هذه.', category: 'الفئة', ticket_ref: 'مرجع التذكرة', summary: 'العمل المنجز', skip: 'تخطي الآن', submit: 'إرسال التقرير', summary_required: 'الملخص مطلوب', saved: 'تم حفظ تقرير العمل' }, + packages_extra: { prompt_name: 'اسم الحزمة' } + }, + hi: { + packages: { heading: 'सहायता पैकेज' }, + contracts: { title: 'संगठन अनुबंध', new: 'पैकेज असाइन करें', org: 'संगठन', package: 'पैकेज', remaining: 'शेष मिनट', status: 'स्थिति', actions: 'कार्रवाइयाँ', suspend: 'निलंबित', activate: 'सक्रिय', select_org: 'संगठन चुनें', select_package: 'पैकेज चुनें', no_orgs: 'कोई संगठन नहीं मिला', no_packages: 'पहले एक पैकेज बनाएं' }, + export: { csv: 'CSV निर्यात', pdf: 'PDF निर्यात', sessions_csv: 'सत्र CSV निर्यात' }, + report: { title: 'कार्य रिपोर्ट', subtitle: 'इस रिमोट सत्र के दौरान किए गए कार्य का वर्णन करें।', category: 'श्रेणी', ticket_ref: 'टिकट संदर्भ', summary: 'किया गया कार्य', skip: 'अभी छोड़ें', submit: 'रिपोर्ट भेजें', summary_required: 'सारांश आवश्यक है', saved: 'कार्य रिपोर्ट सहेजी गई' }, + packages_extra: { prompt_name: 'पैकेज का नाम' } + }, + id: { + packages: { heading: 'Paket dukungan' }, + contracts: { title: 'Kontrak organisasi', new: 'Tetapkan paket', org: 'Organisasi', package: 'Paket', remaining: 'Menit tersisa', status: 'Status', actions: 'Tindakan', suspend: 'Tangguhkan', activate: 'Aktifkan', select_org: 'Pilih organisasi', select_package: 'Pilih paket', no_orgs: 'Organisasi tidak ditemukan', no_packages: 'Buat paket terlebih dahulu' }, + export: { csv: 'Ekspor CSV', pdf: 'Ekspor PDF', sessions_csv: 'Ekspor sesi CSV' }, + report: { title: 'Laporan kerja', subtitle: 'Jelaskan pekerjaan yang dilakukan selama sesi jarak jauh ini.', category: 'Kategori', ticket_ref: 'Referensi tiket', summary: 'Pekerjaan yang dilakukan', skip: 'Lewati untuk sekarang', submit: 'Kirim laporan', summary_required: 'Ringkasan wajib diisi', saved: 'Laporan kerja disimpan' }, + packages_extra: { prompt_name: 'Nama paket' } + }, + vi: { + packages: { heading: 'Gói hỗ trợ' }, + contracts: { title: 'Hợp đồng tổ chức', new: 'Gán gói', org: 'Tổ chức', package: 'Gói', remaining: 'Phút còn lại', status: 'Trạng thái', actions: 'Thao tác', suspend: 'Tạm ngưng', activate: 'Kích hoạt', select_org: 'Chọn tổ chức', select_package: 'Chọn gói', no_orgs: 'Không tìm thấy tổ chức', no_packages: 'Hãy tạo gói trước' }, + export: { csv: 'Xuất CSV', pdf: 'Xuất PDF', sessions_csv: 'Xuất phiên CSV' }, + report: { title: 'Báo cáo công việc', subtitle: 'Mô tả công việc đã thực hiện trong phiên điều khiển từ xa này.', category: 'Danh mục', ticket_ref: 'Tham chiếu ticket', summary: 'Công việc đã thực hiện', skip: 'Bỏ qua bây giờ', submit: 'Gửi báo cáo', summary_required: 'Tóm tắt là bắt buộc', saved: 'Đã lưu báo cáo công việc' }, + packages_extra: { prompt_name: 'Tên gói' } + }, + th: { + packages: { heading: 'แพ็กเกจสนับสนุน' }, + contracts: { title: 'สัญญาองค์กร', new: 'กำหนดแพ็กเกจ', org: 'องค์กร', package: 'แพ็กเกจ', remaining: 'นาทีที่เหลือ', status: 'สถานะ', actions: 'การดำเนินการ', suspend: 'ระงับ', activate: 'เปิดใช้งาน', select_org: 'เลือกองค์กร', select_package: 'เลือกแพ็กเกจ', no_orgs: 'ไม่พบองค์กร', no_packages: 'สร้างแพ็กเกจก่อน' }, + export: { csv: 'ส่งออก CSV', pdf: 'ส่งออก PDF', sessions_csv: 'ส่งออกเซสชัน CSV' }, + report: { title: 'รายงานการทำงาน', subtitle: 'อธิบายงานที่ทำระหว่างเซสชันรีโมตนี้', category: 'หมวดหมู่', ticket_ref: 'อ้างอิงตั๋ว', summary: 'งานที่ทำ', skip: 'ข้ามไปก่อน', submit: 'ส่งรายงาน', summary_required: 'ต้องมีสรุป', saved: 'บันทึกรายงานการทำงานแล้ว' }, + packages_extra: { prompt_name: 'ชื่อแพ็กเกจ' } + } +}; + +function deepMerge(target, source) { + for (const [k, v] of Object.entries(source)) { + if (v && typeof v === 'object' && !Array.isArray(v)) { + target[k] = target[k] || {}; + deepMerge(target[k], v); + } else { + target[k] = v; + } + } +} + +function buildPatch(locale) { + const base = patches[locale] || patches.en; + const sections = sectionPatches[locale] || {}; + const merged = { ...base }; + for (const key of MERGE_SECTIONS) { + if (sections[key]) { + merged[key] = { ...(merged[key] || {}), ...sections[key] }; + } + } + return merged; +} + +function applyCommercializationPatches() { + let count = 0; + for (const file of fs.readdirSync(langDir).filter((f) => f.endsWith('.json'))) { + const locale = file.replace('.json', ''); + if (locale === 'en') continue; + + const filePath = path.join(langDir, file); + const json = JSON.parse(fs.readFileSync(filePath, 'utf8')); + if (!json.commercialization) continue; + + const patch = buildPatch(locale); + for (const section of MERGE_SECTIONS) { + if (!patch[section]) continue; + json.commercialization[section] = { ...(json.commercialization[section] || {}), ...patch[section] }; + } + if (patch.packages_extra) { + deepMerge(json.commercialization.packages, patch.packages_extra); + } + + fs.writeFileSync(filePath, JSON.stringify(json, null, 2) + '\n'); + console.log('patched', file); + count++; + } + return count; +} + +if (require.main === module) { + const count = applyCommercializationPatches(); + if (count === 0) { + console.error('No commercialization locale files patched.'); + process.exit(1); + } +} + +module.exports = { applyCommercializationPatches, buildPatch, deepMerge }; diff --git a/web-nodejs/views/commercialization.ejs b/web-nodejs/views/commercialization.ejs new file mode 100644 index 00000000..f5fc9b4e --- /dev/null +++ b/web-nodejs/views/commercialization.ejs @@ -0,0 +1,172 @@ +<%- include('layouts/main', { + title: title, + pageStyles: pageStyles, + pageScripts: pageScripts, + currentPage: currentPage, + breadcrumb: breadcrumb, + body: ` + +
+ + + + +
+
+
+

${_('commercialization.clock.title')}

+

+

+
+
+

${_('commercialization.stats.active_sessions')}

+

0

+
+
+
+ +
+
+ +
+

${_('commercialization.packages.heading')}

+
+ + + + + + + + + + +
${_('commercialization.packages.name')}${_('commercialization.packages.included_minutes')}${_('commercialization.packages.overage_rate')}${_('commercialization.packages.currency')}
+
+ +

${_('commercialization.contracts.title')}

+
+ +
+
+ + + + + + + + + + + +
${_('commercialization.contracts.org')}${_('commercialization.contracts.package')}${_('commercialization.contracts.remaining')}${_('commercialization.contracts.status')}${_('commercialization.contracts.actions')}
+
+
+ +
+
+ +
+
+ + + + + + + + + + + +
${_('commercialization.sessions.device')}${_('commercialization.sessions.operator')}${_('commercialization.sessions.duration')}${_('commercialization.sessions.phase')}${_('commercialization.sessions.amount')}
+
+
+ +
+
+ + +
+
+ + + + + + + + + +
${_('commercialization.reports.session')}${_('commercialization.reports.summary')}${_('commercialization.reports.date')}
+
+
+ +
+
+

${_('commercialization.clock.title')}

+

+ +
+
+
+ + + + + +` +}) %> diff --git a/web-nodejs/views/partials/sidebar.ejs b/web-nodejs/views/partials/sidebar.ejs index a983fb98..4f98158a 100644 --- a/web-nodejs/views/partials/sidebar.ejs +++ b/web-nodejs/views/partials/sidebar.ejs @@ -1,4 +1,5 @@ <% const sidebarServerTab = typeof currentTab !== 'undefined' && currentTab ? currentTab : 'overview'; %> +<% const sidebarCommercialTab = typeof currentTab !== 'undefined' && currentTab ? currentTab : 'overview'; %>